@sjcrh/proteinpaint-client 2.74.2 → 2.76.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{2dmaf-b2d78c57.js → 2dmaf-74b99126.js} +1 -1
- package/dist/AppHeader-cecb39c2.js +1 -0
- package/dist/{ColorScale-9c76aef3.js → ColorScale-21cab8d2.js} +1 -1
- package/dist/DEanalysis-95bad59a.js +1 -0
- package/dist/Disco-a6e921a0.js +1 -0
- package/dist/Disco.UI-9ad999ed.js +1 -0
- package/dist/{DragControls-586f72db.js → DragControls-e3b6a937.js} +1 -1
- package/dist/{DziViewer-6311327c.js → DziViewer-354a790d.js} +1 -1
- package/dist/FilterRxComp-701a1480.js +1 -0
- package/dist/{FilterStateless-046081c2.js → FilterStateless-54c0b763.js} +1 -1
- package/dist/{HicApp-40e44cba.js → HicApp-d5a946bf.js} +1 -1
- package/dist/{OrbitControls-0cda1772.js → OrbitControls-694652cd.js} +1 -1
- package/dist/WSIViewer-dc7f8eb0.js +1 -0
- package/dist/adSandbox-f438e388.js +1 -0
- package/dist/app-3320ab6f.js +1 -0
- package/dist/app-649f8357.js +1 -0
- package/dist/app-b369b169.js +1 -0
- package/dist/app.js +1 -1
- package/dist/bam-431875ef.js +1 -0
- package/dist/barchart-8277ed43.js +1 -0
- package/dist/barchart.events-da29c90d.js +1 -0
- package/dist/{bars.renderer-5f7a4174.js → bars.renderer-dcfdd59b.js} +1 -1
- package/dist/block-6aedd569.js +1 -0
- package/dist/block.lazyload-87b12654.js +1 -0
- package/dist/block.legend-d3f61ef7.js +1 -0
- package/dist/{block.mds-effc078d.js → block.mds-3ad17dfa.js} +1 -1
- package/dist/{block.mds.cnv-ec861a26.js → block.mds.cnv-857ba868.js} +1 -1
- package/dist/{block.mds.expressionrank-a2ad7c80.js → block.mds.expressionrank-7e3b208c.js} +1 -1
- package/dist/{block.mds.expressionstat-31dc5595.js → block.mds.expressionstat-f2d31c86.js} +1 -1
- package/dist/{block.mds.geneboxplot-3ca857ce.js → block.mds.geneboxplot-f0fbaf12.js} +1 -1
- package/dist/{block.mds.junction-debba938.js → block.mds.junction-7f87f48f.js} +1 -1
- package/dist/{block.mds.svcnv-8dc5abdf.js → block.mds.svcnv-ac035c12.js} +1 -1
- package/dist/{block.mds.svcnv.share-81e62600.js → block.mds.svcnv.share-886d9479.js} +1 -1
- package/dist/block.mds2-7852c1ee.js +1 -0
- package/dist/{block.svg-9121e8e7.js → block.svg-9b916fa6.js} +1 -1
- package/dist/{block.tk.aicheck-c1b478e9.js → block.tk.aicheck-6770e333.js} +1 -1
- package/dist/{block.tk.ase-0f6ded48.js → block.tk.ase-ee807e59.js} +1 -1
- package/dist/{block.tk.bam-7cd06aee.js → block.tk.bam-00fba6e8.js} +1 -1
- package/dist/{block.tk.bedgraphdot-3ef8b94e.js → block.tk.bedgraphdot-7fda78e9.js} +1 -1
- package/dist/{block.tk.bigwig.ui-d1248810.js → block.tk.bigwig.ui-cc1a42f3.js} +1 -1
- package/dist/{block.tk.hicstraw-ee731e55.js → block.tk.hicstraw-526470e3.js} +1 -1
- package/dist/{block.tk.junction-4d8cab4d.js → block.tk.junction-b43a4cda.js} +1 -1
- package/dist/{block.tk.junction.textmatrixui-a6430b27.js → block.tk.junction.textmatrixui-a60ed78a.js} +1 -1
- package/dist/{block.tk.ld-8429a18b.js → block.tk.ld-d15bde41.js} +1 -1
- package/dist/{block.tk.menu-3f31f958.js → block.tk.menu-3aeb93c6.js} +1 -1
- package/dist/{block.tk.pgv-07e46705.js → block.tk.pgv-9af2bd64.js} +1 -1
- package/dist/boxplot-e17a17b7.js +1 -0
- package/dist/brainImaging-bf2ceee9.js +1 -0
- package/dist/{brush-c386fe3d.js → brush-aa175142.js} +1 -1
- package/dist/categorical-a52014a1.js +1 -0
- package/dist/condition-c646e357.js +1 -0
- package/dist/controls-287e6efa.js +1 -0
- package/dist/{controls.btns-1cb2bfab.js → controls.btns-79b805dd.js} +1 -1
- package/dist/controls.config-28d6d6a8.js +1 -0
- package/dist/cuminc-9e275854.js +1 -0
- package/dist/{customdata.inputui-cbd712ea.js → customdata.inputui-dc49d94b.js} +1 -1
- package/dist/dataDownload-3a3d4f33.js +1 -0
- package/dist/databrowser.ui-d8d3f8fd.js +1 -0
- package/dist/{density-19266ebf.js → density-a82a8b1c.js} +1 -1
- package/dist/dictionary-c5a19d90.js +1 -0
- package/dist/{drag-0b968811.js → drag-7b30ba17.js} +1 -1
- package/dist/{e2pca-b8752945.js → e2pca-82765817.js} +1 -1
- package/dist/{ep-a86b185a.js → ep-d017ec2f.js} +1 -1
- package/dist/facet-a9b44ef3.js +1 -0
- package/dist/{fusion.parse-244b2b97.js → fusion.parse-d40d0b9d.js} +1 -1
- package/dist/geneExpClustering-34c3f518.js +1 -0
- package/dist/geneExpression-0d1b7244.js +1 -0
- package/dist/{geneExpression-e0430f2e.js → geneExpression-589f485b.js} +1 -1
- package/dist/{geneExpression-387205bf.js → geneExpression-7d14983f.js} +1 -1
- package/dist/geneORA-903a780f.js +1 -0
- package/dist/{geneVariant-7de021b6.js → geneVariant-89601b34.js} +1 -1
- package/dist/geneVariant-92c4e870.js +1 -0
- package/dist/{genefusion.ui-a331de19.js → genefusion.ui-7e22e811.js} +1 -1
- package/dist/{genesearch-ea59f5d4.js → genesearch-a4e19f0d.js} +1 -1
- package/dist/geneset-108a39d2.js +1 -0
- package/dist/genomeBrowser-12f86a36.js +1 -0
- package/dist/genomeBrowser.controls-d5067811.js +1 -0
- package/dist/{groupsetting-20ffef77.js → groupsetting-b4416a96.js} +1 -1
- package/dist/gsea-543dab25.js +1 -0
- package/dist/hierCluster-26e14090.js +1 -0
- package/dist/hierCluster.config-98e82dff.js +1 -0
- package/dist/{hierCluster.interactivity-9b433033.js → hierCluster.interactivity-e56f6542.js} +1 -1
- package/dist/hierCluster.renderers-74a64cf5.js +1 -0
- package/dist/{html.legend-abb5452e.js → html.legend-a3f4ebfe.js} +1 -1
- package/dist/imagePlot-b9eae4ae.js +1 -0
- package/dist/{lasso-55cf4057.js → lasso-f767f634.js} +1 -1
- package/dist/launch.adhoc-abca6af3.js +1 -0
- package/dist/leftlabel.sample-24c2388d.js +1 -0
- package/dist/legacyDataset-e0e201ab.js +1 -0
- package/dist/{log-cf45fcf2.js → log-99af3443.js} +1 -1
- package/dist/{lollipop-c5b6e615.js → lollipop-806f8fa4.js} +1 -1
- package/dist/{maf-7535f1f9.js → maf-b06579e4.js} +1 -1
- package/dist/{maftimeline-1292ab62.js → maftimeline-4840a380.js} +1 -1
- package/dist/matrix-00bb50ff.js +1 -0
- package/dist/matrix.cells-914dd0c6.js +1 -0
- package/dist/{matrix.cluster-168bc96b.js → matrix.cluster-783ceab0.js} +1 -1
- package/dist/matrix.config-6ce74dfe.js +1 -0
- package/dist/matrix.controls-7b2a6f95.js +1 -0
- package/dist/{matrix.data-b1d0febe.js → matrix.data-dac4f1b7.js} +1 -1
- package/dist/{matrix.dom-00defa30.js → matrix.dom-4e10bbe9.js} +1 -1
- package/dist/matrix.groups-b9fca14a.js +1 -0
- package/dist/matrix.interactivity-84169b43.js +1 -0
- package/dist/{matrix.layout-c2345231.js → matrix.layout-dd5a44fd.js} +1 -1
- package/dist/matrix.legend-ac6d45e6.js +1 -0
- package/dist/matrix.renderers-78010275.js +1 -0
- package/dist/matrix.serieses-9b4fd744.js +1 -0
- package/dist/matrix.sort-014d798d.js +1 -0
- package/dist/{matrix.sorterUi-a741ba2e.js → matrix.sorterUi-9bf7e6f9.js} +1 -1
- package/dist/{mavb-92136d17.js → mavb-c6be46fc.js} +1 -1
- package/dist/{mds.fimo-c03115b4.js → mds.fimo-bff6a1ed.js} +1 -1
- package/dist/mds.samplescatterplot-9a02b9fb.js +1 -0
- package/dist/{mds.survivalplot-366db380.js → mds.survivalplot-055549f4.js} +1 -1
- package/dist/{metaboliteIntensity-ddb6e480.js → metaboliteIntensity-fac92f8b.js} +1 -1
- package/dist/niceNumLabels-238aabce.js +1 -0
- package/dist/{nodrag-2c046d31.js → nodrag-16ad4b03.js} +1 -1
- package/dist/{notify-44ebc0df.js → notify-224cccbd.js} +1 -1
- package/dist/{numeric-918d4686.js → numeric-b0b17185.js} +1 -1
- package/dist/numeric.binary-1f9e93f2.js +1 -0
- package/dist/numeric.continuous-ebcd0567.js +1 -0
- package/dist/numeric.discrete-7b97044a.js +1 -0
- package/dist/numeric.spline-1be88f3d.js +1 -0
- package/dist/numeric.toggle-7fa2a770.js +1 -0
- package/dist/oncomatrix-351af2a0.js +1 -0
- package/dist/{parseData-e66308cd.js → parseData-21fe9822.js} +1 -1
- package/dist/partjson.esm-b3f1fc21.js +1 -0
- package/dist/{plot.2dvaf-73dbfbd1.js → plot.2dvaf-18a35e4b.js} +1 -1
- package/dist/plot.app-30c4b8e5.js +1 -0
- package/dist/plot.barplot-7c4865a2.js +1 -0
- package/dist/{plot.boxplot-641da058.js → plot.boxplot-fe3046c6.js} +1 -1
- package/dist/plot.brainImaging-2ceb6023.js +1 -0
- package/dist/plot.disco-6011f87f.js +1 -0
- package/dist/{plot.dzi-41ea26e5.js → plot.dzi-6728a7c8.js} +1 -1
- package/dist/plot.ssgq-5581dc56.js +1 -0
- package/dist/{plot.vaf2cov-80e58833.js → plot.vaf2cov-b2284c64.js} +1 -1
- package/dist/{plot.wsi-51cc48ef.js → plot.wsi-9a9d4034.js} +1 -1
- package/dist/profileBarchart-0476f1f8.js +1 -0
- package/dist/profileHome-32eb9b50.js +1 -0
- package/dist/profilePlot-c7e099e8.js +1 -0
- package/dist/profilePolar-6b981e63.js +1 -0
- package/dist/profileRadar-bca1cc03.js +1 -0
- package/dist/profileRadarFacility-bbb1ecd8.js +1 -0
- package/dist/profileSummary-b114204f.js +1 -0
- package/dist/recover-49e09de0.js +1 -0
- package/dist/regression.inputs-a761f40d.js +1 -0
- package/dist/regression.inputs.values.table-5929d25a.js +1 -0
- package/dist/regression.results-69bc42d0.js +1 -0
- package/dist/{renderPvalueTable-895a72c2.js → renderPvalueTable-dc5d15f2.js} +1 -1
- package/dist/sampleScatter-2d0ed680.js +1 -0
- package/dist/{sampleScatter.rendererThree-5e686004.js → sampleScatter.rendererThree-0b12ac61.js} +2 -2
- package/dist/sampleView-484ab133.js +1 -0
- package/dist/samplelst-689796e6.js +1 -0
- package/dist/{samplematrix-2a1d7d82.js → samplematrix-2b137a05.js} +1 -1
- package/dist/scatter-205e013f.js +1 -0
- package/dist/{select2Terms-b4fffc50.js → select2Terms-b21e184a.js} +1 -1
- package/dist/{selectGenomeWithTklst-acf7e568.js → selectGenomeWithTklst-466995b4.js} +1 -1
- package/dist/singleCellCellType-5db730bb.js +1 -0
- package/dist/{singleCellGeneExpression-6de17162.js → singleCellGeneExpression-7147a2d0.js} +1 -1
- package/dist/singleCellPlot-73b2738f.js +1 -0
- package/dist/{singlecell-f76c856a.js → singlecell-24409b72.js} +1 -1
- package/dist/singlecell-bca774ed.js +1 -0
- package/dist/{snp-9590a1b4.js → snp-37d06246.js} +1 -1
- package/dist/snp-a8388ce4.js +1 -0
- package/dist/snplocus-7a1ea8c9.js +1 -0
- package/dist/{snplst-007a1926.js → snplst-6865d7c7.js} +1 -1
- package/dist/{spliceevent.a53ss.diagram-63dfef69.js → spliceevent.a53ss.diagram-e2eab72b.js} +1 -1
- package/dist/{spliceevent.exonskip.diagram-76fa9af8.js → spliceevent.exonskip.diagram-4d5df3a1.js} +1 -1
- package/dist/spliceevent.exonskip.getdefault-a94aad6e.js +1 -0
- package/dist/{spliceevent.noeventdiagram-64a099e0.js → spliceevent.noeventdiagram-ea97b0fb.js} +1 -1
- package/dist/{spliceevent.phrase-770c8cac.js → spliceevent.phrase-c5832470.js} +1 -1
- package/dist/{stattable-f1189f0f.js → stattable-7c5ecc2f.js} +1 -1
- package/dist/{style.gdc-89cfdb0f.js → style.gdc-131f3c77.js} +1 -1
- package/dist/summary-5ec455d3.js +1 -0
- package/dist/{sunburst-d5379952.js → sunburst-533902a7.js} +1 -1
- package/dist/survival-92250664.js +1 -0
- package/dist/survival-e16e068f.js +1 -0
- package/dist/{svg.download-86850940.js → svg.download-35926549.js} +1 -1
- package/dist/{svg.legend-a94b0697.js → svg.legend-8d490df2.js} +1 -1
- package/dist/{svgraph-c57b9ae3.js → svgraph-6fac8cbc.js} +1 -1
- package/dist/{svmr-cf6f1b27.js → svmr-d07ff695.js} +1 -1
- package/dist/table-29d5a973.js +1 -0
- package/dist/table-ad744310.js +1 -0
- package/dist/termInfo-bf99a37e.js +1 -0
- package/dist/{termdb.bins-9faa5170.js → termdb.bins-8b656cc3.js} +1 -1
- package/dist/termsetting-33ea66f1.js +1 -0
- package/dist/tk-071a7550.js +1 -0
- package/dist/{toggleButtons-002aeda1.js → toggleButtons-dbdbad01.js} +1 -1
- package/dist/tp.ui-9c2e9fc5.js +1 -0
- package/dist/tslib.es6-c3c2d88f.js +1 -0
- package/dist/tvs.density-f6128793.js +1 -0
- package/dist/{tvs.geneVariant-3a65ad94.js → tvs.geneVariant-ca4bdbb1.js} +1 -1
- package/dist/tvs.numeric-0260a825.js +1 -0
- package/dist/{tvs.samplelst-1eeb586b.js → tvs.samplelst-cb71b3bf.js} +1 -1
- package/dist/{uiUtils-1336bad7.js → uiUtils-f1bd2bcc.js} +1 -1
- package/dist/{variantBrowser-f0c812c1.js → variantBrowser-7c540224.js} +1 -1
- package/dist/{vcf-c4a23924.js → vcf-5cc55588.js} +1 -1
- package/dist/violin-2ba509eb.js +1 -0
- package/dist/violin.interactivity-4da6d7a9.js +1 -0
- package/dist/{violin.renderer-dafd89fa.js → violin.renderer-ce024265.js} +1 -1
- package/dist/{violinRenderer-8215f40d.js → violinRenderer-f7c96a60.js} +1 -1
- package/dist/{viridis-ffd14c4d.js → viridis-01ab20c5.js} +1 -1
- package/dist/{y-dd197cc9.js → y-67939f83.js} +1 -1
- package/dist/{zoom-9c63e74c.js → zoom-25dce8b9.js} +1 -1
- package/package.json +6 -4
- package/dist/AppHeader-a2a7e518.js +0 -1
- package/dist/DEanalysis-a6b50e49.js +0 -1
- package/dist/Disco-1c71b7dd.js +0 -1
- package/dist/Disco.UI-4c16ee50.js +0 -1
- package/dist/FilterRxComp-242f4615.js +0 -1
- package/dist/WSIViewer-d90032d7.js +0 -1
- package/dist/adSandbox-3528c372.js +0 -1
- package/dist/app-07dee349.js +0 -1
- package/dist/app-a8c4854a.js +0 -1
- package/dist/app-ade9c62a.js +0 -1
- package/dist/bam-92483a98.js +0 -1
- package/dist/barchart-3e69d094.js +0 -1
- package/dist/barchart.events-9b11d97e.js +0 -1
- package/dist/block-dcb130fb.js +0 -1
- package/dist/block.lazyload-9f031cac.js +0 -1
- package/dist/block.legend-b2987cd9.js +0 -1
- package/dist/block.mds2-de6e0986.js +0 -1
- package/dist/boxplot-1178fffc.js +0 -1
- package/dist/brainImaging-98ed7aa2.js +0 -1
- package/dist/categorical-26528ce8.js +0 -1
- package/dist/condition-b0d74550.js +0 -1
- package/dist/controls-0bacec22.js +0 -1
- package/dist/controls.config-0ccc9d79.js +0 -1
- package/dist/controls.divide-a9fe9466.js +0 -1
- package/dist/controls.overlay-fe20d41d.js +0 -1
- package/dist/controls.term1-faa2efcf.js +0 -1
- package/dist/cuminc-7e2cac2d.js +0 -1
- package/dist/dataDownload-ade8d840.js +0 -1
- package/dist/databrowser.ui-716f0519.js +0 -1
- package/dist/dictionary-3f83ce63.js +0 -1
- package/dist/facet-6850cfed.js +0 -1
- package/dist/geneExpClustering-7fd3c87e.js +0 -1
- package/dist/geneExpression-6462537d.js +0 -1
- package/dist/geneORA-7eb818c4.js +0 -1
- package/dist/geneVariant-b58e924a.js +0 -1
- package/dist/geneset-9f69ad3f.js +0 -1
- package/dist/genomeBrowser-1b2b83f7.js +0 -1
- package/dist/genomeBrowser.controls-cd8ddeb1.js +0 -1
- package/dist/gsea-36376589.js +0 -1
- package/dist/hierCluster-f1e30c19.js +0 -1
- package/dist/hierCluster.config-da3510b1.js +0 -1
- package/dist/hierCluster.renderers-610d8860.js +0 -1
- package/dist/imagePlot-7089bdff.js +0 -1
- package/dist/launch.adhoc-d229fd55.js +0 -1
- package/dist/leftlabel.sample-a919168c.js +0 -1
- package/dist/legacyDataset-1cbcb67d.js +0 -1
- package/dist/matrix-0614794d.js +0 -1
- package/dist/matrix.cells-819d4991.js +0 -1
- package/dist/matrix.config-c54ca273.js +0 -1
- package/dist/matrix.controls-5eca7822.js +0 -1
- package/dist/matrix.groups-4660dd70.js +0 -1
- package/dist/matrix.interactivity-23d83183.js +0 -1
- package/dist/matrix.legend-2e647224.js +0 -1
- package/dist/matrix.renderers-43445f4f.js +0 -1
- package/dist/matrix.serieses-972fbe5d.js +0 -1
- package/dist/matrix.sort-80d9b788.js +0 -1
- package/dist/mds.samplescatterplot-1623e6d0.js +0 -1
- package/dist/niceNumLabels-6cfc1508.js +0 -1
- package/dist/numeric.binary-80467e8b.js +0 -1
- package/dist/numeric.continuous-69a62a15.js +0 -1
- package/dist/numeric.discrete-86181905.js +0 -1
- package/dist/numeric.spline-1b07fd13.js +0 -1
- package/dist/numeric.toggle-37c4bee8.js +0 -1
- package/dist/oncomatrix-475271da.js +0 -1
- package/dist/plot.app-aa916e0e.js +0 -1
- package/dist/plot.barplot-8b440a2b.js +0 -1
- package/dist/plot.brainImaging-2f796b0c.js +0 -1
- package/dist/plot.disco-43e18d2f.js +0 -1
- package/dist/plot.ssgq-e49cb70b.js +0 -1
- package/dist/profileBarchart-91463ab6.js +0 -1
- package/dist/profileHome-d37a6821.js +0 -1
- package/dist/profilePlot-9ca577cb.js +0 -1
- package/dist/profilePolar-19c7da5b.js +0 -1
- package/dist/profileRadar-8bf094e3.js +0 -1
- package/dist/profileRadarFacility-f9fd8971.js +0 -1
- package/dist/profileSummary-93999c14.js +0 -1
- package/dist/recover-36ada47f.js +0 -1
- package/dist/regression.inputs-cb57ece6.js +0 -1
- package/dist/regression.inputs.values.table-908bb37a.js +0 -1
- package/dist/regression.results-c186a8dc.js +0 -1
- package/dist/roundValue-b0d0517c.js +0 -1
- package/dist/sampleScatter-9d5b3630.js +0 -1
- package/dist/sampleView-2d895023.js +0 -1
- package/dist/samplelst-9f8343ff.js +0 -1
- package/dist/scatter-b4992f64.js +0 -1
- package/dist/singleCellCellType-84a0c2cf.js +0 -1
- package/dist/singleCellPlot-2f2b8619.js +0 -1
- package/dist/singlecell-90567dde.js +0 -1
- package/dist/snp-79ec95ba.js +0 -1
- package/dist/snplocus-cb629be1.js +0 -1
- package/dist/spliceevent.exonskip.getdefault-31d2950c.js +0 -1
- package/dist/summary-b77bef3c.js +0 -1
- package/dist/survival-61ab375a.js +0 -1
- package/dist/survival-80a0ade9.js +0 -1
- package/dist/table-79e3e776.js +0 -1
- package/dist/table-eee91e14.js +0 -1
- package/dist/termInfo-f851b415.js +0 -1
- package/dist/tk-75566002.js +0 -1
- package/dist/tp.ui-02911b56.js +0 -1
- package/dist/tslib.es6-1f85f553.js +0 -1
- package/dist/tvs.density-026fca97.js +0 -1
- package/dist/tvs.numeric-3f3d9919.js +0 -1
- package/dist/violin-1515c3e6.js +0 -1
- package/dist/violin.interactivity-8e2f480d.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{M as e,d as s,i,G as n,b as a,t as r,H as o,I as l,h as d}from"./app-b369b169.js";import{r as c}from"./table-29d5a973.js";import{i as f,a as p,b as m,T as u,r as h}from"./termsetting-33ea66f1.js";import{c as y}from"./partjson.esm-b3f1fc21.js";import{c as b}from"./termdb.bins-8b656cc3.js";function g(t){switch(t){case"./tvs.categorical.js":return import("./tvs.categorical-b9b37c70.js");case"./tvs.condition.js":return import("./tvs.condition-cbe198d7.js");case"./tvs.density.js":return import("./tvs.density-f6128793.js");case"./tvs.geneVariant.js":return import("./tvs.geneVariant-ca4bdbb1.js");case"./tvs.numeric.js":return import("./tvs.numeric-0260a825.js");case"./tvs.samplelst.js":return import("./tvs.samplelst-cb71b3bf.js");case"./tvs.survival.js":return import("./tvs.survival-df35b85b.js");default:return new Promise((function(e,s){(typeof queueMicrotask==="function"?queueMicrotask:setTimeout)(s.bind(null,new Error("Unknown variable dynamic import: "+t)))}))}}class v{constructor(t){this.opts=this.validateOpts(t);this.dom={holder:t.holder,tip:new e({padding:"5px"})};this.durations={exit:0};w(this);this.categoryData={};this.handlerByType={};this.api={main:this.main.bind(this),showMenu:this.showMenu}}validateOpts(t){if(!t.holder)throw".holder missing";if(!t.vocabApi)throw".vocabApi missing";if(typeof t.callback!="function")throw".callback() is not a function";return t}async main(t={}){this.tvs=t.tvs;this.filter=t.filter;await this.setHandler();await this.updateUI()}async setHandler(){if(!this.tvs||!this.tvs.term)return;const t=this.tvs.term;const e=f(t)?"numeric":p(t)?"categorical":t.type;if(!this.handlerByType[e]){try{const t=await g(`./tvs.${e}.js`);this.handlerByType[e]=t.handler}catch(t){throw`error with handler='./tvs.${e}.js': ${t}`}}this.handler=this.handlerByType[e]}}const _=i(v);function w(t){t.updateUI=function(){const e=t.dom.holder;const s=e.selectAll(".tvs_pill").data([t.tvs],(t=>t?.term.id));s.exit().each(t.exitPill);s.each(t.updatePill);s.enter().append("div").attr("class","tvs_pill").style("white-space","nowrap").style("display","inline-block").transition().duration(200).each(t.enterPill)};t.enterPill=async function(){const e=s(this).style("font-size",".9em");e.append("div").attr("class","term_name_btn sja_filter_tag_btn").style("display","inline-block").style("border-radius","6px 0 0 6px").style("padding","6px 6px 3px 6px").html(t.handler.term_name_gen).style("text-transform","uppercase");e.append("div").attr("class","negate_btn").style("cursor","default").style("padding","6px 6px 3px 6px").style("background",t.tvs.isnot?"#f4cccc":"#a2c4c9").html(t.handler.getNegateText?.(t)||(t.tvs.isnot&&t.tvs.term.type!=="geneVariant"?"NOT":"IS"));t.updatePill.call(this)};t.showMenu=e=>{const s=e?e:t.dom.tip;if(t.tvs.term.type!=="geneVariant"){T(s,t.tvs,t)}t.handler.fillMenu(t,s,t.tvs)};t.updatePill=async function(){const e=s(this);const i=e.datum();const n=t.tvs.values&&t.tvs.values.length||t.tvs.ranges&&t.tvs.ranges.length||t.tvs.term.type=="samplelst";e.select(".term_name_btn").html(t.handler.term_name_gen);e.select(".negate_btn").style("display",n?"inline-block":"none").style("background",t.tvs.isnot?"#f4cccc":"#a2c4c9").html(t.handler.getNegateText?.(t)||(i.isnot&&i.term.type!=="geneVariant"?"NOT":"IS"));const a=t.handler.get_pill_label(i);if(!("grade_type"in a))a.grade_type="";const r=e.selectAll(".value_btn").data(a?[a]:[],(t=>t.txt+t.grade_type));r.exit().each(t.removeValueBtn);r.enter().append("div").attr("class","value_btn sja_filter_tag_btn").style("display",n?"inline-block":"none").style("padding","6px 6px 3px 6px").style("border-radius","0 6px 6px 0").style("font-style","italic").html((t=>t.txt)).append("div").attr("class","grade_type_btn").style("display","inline-block").style("margin","0 5px").style("font-size",".6em").style("text-transform","uppercase").html((t=>t.grade_type)).style("opacity",0).transition().duration(200).style("opacity",1)};t.exitPill=async function(e){s(this).style("opacity",1).transition().duration(t.durations.exit).style("opacity",0).remove()};t.makeValueTable=function(e,s,i,n){if(i?.length==0)return e;const a=e.append("div").style("font-size","0.8rem");const r=a.append("div");const o=Math.max(...i.map((t=>t.samplecount)),0);i.forEach((t=>t.bar_width_frac=Number((1-(o-t.samplecount)/o).toFixed(4))));const l=100;const d=[];const f=[];for(const[t,e]of i.entries()){let i=e.label||e.key;if(e.samplecount)i+=" (n="+e.samplecount+")";const n=l*e.bar_width_frac;const a=`<div style='margin:1px 10px;width:${n}px;height:15px;background-color:#ddd'>`;d.push([{value:i},{html:a}]);let r=false;if(s.term.type=="categorical"||s.term.type=="survival")r=s.values.find((t=>t.key===e.key));else if(s.term.type=="float"||s.term.type=="integer")r=s.ranges.find((t=>String(t.value)===e.value.toString()));else if(s.term.type=="condition")r=s.values.find((t=>String(t.key)===String(e.key)));if(r)f.push(t)}const p=[{label:"tvs"},{label:"bar"}];const m={text:"APPLY",class:"sjpp_apply_btn sja_filter_tag_btn",callback:t=>{if(n)n(t)}};t.tableApi=c({rows:d,columns:p,div:r,maxWidth:"40vw",maxHeight:"40vh",buttons:[m],showHeader:false,striped:false,showLines:false,selectedRows:f,selectedRowStyle:{"text-decoration":s.isnot?"line-through":""}});return r};t.removeValueBtn=function(e,i){const n=s(this.parentNode);const a=n.datum();const r=t.handler.getSelectRemovePos(i,a);s(n.selectAll(".value_select")._groups[0][r]).remove();s(n.selectAll(".or_btn")._groups[0][i]).remove();s(this).style("opacity",1).transition().duration(t.durations.exit).style("opacity",0).remove()}}async function j(t){const e=new v(t);e.tvs={term:t.term};e.filter=t.filter;await e.setHandler();if(e.handler.setTvsDefaults)e.handler.setTvsDefaults(e.tvs);e.handler.fillMenu(e,t.holder,e.tvs)}function T(t,e,s){const i=t.selectAll("label").data([{label:"Exclude",value:"false",checked:e.isnot!==undefined?e.isnot:false}]).enter().append("label").style("margin","0 5px");const n=i.append("input").attr("type","checkbox").attr("name","sja_filter_isnot_input").attr("value",(t=>t.value)).property("checked",(t=>t.checked)).style("vertical-align","top").style("margin-right","3px").on("change",(()=>{e.isnot=n.node().checked;if(s.tableApi){s.tableApi.update({selectedRowStyle:{"text-decoration":e.isnot?"line-through":""}})}}));i.append("span").style("margin-right","5px").style("vertical-align","top").html((t=>t.label))}function x(t,e){if(t.type==="tvs"&&t.tvs.term.id===e)return t;if(t.type!=="tvslst")return;for(const s of t.lst){const t=x(s,e);if(t)return t}}function S(t,e){if(t.$id===e)return t;if(t.type!=="tvslst")return;for(const s of t.lst){const t=S(s,e);if(t)return t}}function k(t,e){if(t.$id===e)return t;if(!t.lst)return;for(const s of t.lst){if(s.$id===e)return t;else if(s.type=="tvslst"){const t=k(s,e);if(t)return t}}}function N(t,e){if(t.tag===e)return t;if(t.type!=="tvslst")return;for(const s of t.lst){const t=N(s,e);if(t)return t}}function C(t=[],e="",s=null){const i={type:"tvslst",in:true,join:e,lst:t};if(s!==null&&i.$id!==undefined)i.$id=s;return i}function I(t){if(!t)return C([]);const e=JSON.parse(JSON.stringify(t));const s=O(e);return s.type=="tvslst"?s:C([s])}function O(t){delete t.$id;delete t.tag;if(t.type!="tvslst")return t;const e=t.lst.filter((t=>t.type!=="tvslst"||t.lst.length>0)).map((t=>t.type!=="tvslst"||t.lst.length>1?t:t.lst[0]));e.forEach(D);if(!e.length){return C([],"",t.$id)}else if(e.length==1){if(e[0].type==="tvslst"){return O(e[0])}else{return D(e[0])}}else{t.lst=[];for(const s of e){if(s.type==="tvslst"){const e=O(s);if(e.type!=="tvslst"||e.join!=t.join||e.in!=t.in){t.lst.push(e)}else if(e.lst.length){t.lst.push(...e.lst)}}else{t.lst.push(s)}}return t}}function D(t,e=null){delete t.$id;if(typeof e=="function")e(t);if(t.type=="tvslst"){for(const s of t.lst){D(s,e)}}return t}function A(t){if(!t||t.length==0)return;let e=JSON.parse(JSON.stringify(t[0]));if(t.length==1)return e;if(e.lst.length<2){if(e.join!=="")throw'filter.join must be an empty string "" when filter.lst.length < 2';e.join="and"}else if(e.join=="or"){e={type:"tvslst",join:"and",in:true,lst:[e]}}else if(e.join!="and"){throw'filter.join must be either "and" or "or" when .lst length > 1'}for(let s=1;s<t.length;s++){const i=JSON.parse(JSON.stringify(t[s]));if(i.join=="or")e.lst.push(i);else e.lst.push(...i.lst)}if(e.lst.length==1&&e.lst[0].type=="tvs"){e.join=""}return e}let q=0;function $(t){t.initUI=async function(){if(t.opts.newBtn){t.opts.newBtn.on("click.filter",t.displayTreeNew)}else{t.dom.newBtn=t.dom.holder.append("div").attr("class","sja_new_filter_btn sja_menuoption").html(t.opts.emptyLabel).style("display","inline-block").on("click",t.displayTreeNew)}t.dom.filterContainer=t.dom.holder.append("div").attr("class","sja_filter_container");t.dom.holder.selectAll(".sja_filter_add_transformer").data(t.opts.joinWith).enter().append("div").attr("class","sja_filter_add_transformer").style("display",(e=>t.filter&&t.filter.join!=e?"inline-block":"none")).style("margin-left","10px").style("padding","5px").style("border-radius","5px").style("cursor","pointer").html((t=>"+"+t.toUpperCase())).on("click",t.displayTreeNew);t.dom.table=t.dom.controlsTip.clear().d.append("table").style("border-collapse","collapse");const e=[{action:"edit",html:["","Edit","›"],handler:t.editTerm},{action:"join",html:["✚","","›"],handler:t.displayTreeMenu},{action:"switch",html:["","Switch to",""],handler:t.switchJoin},{action:"negate",html:["","Negate",""],handler:t.negateClause},{action:"remove",html:["✖","Remove",""],handler:t.removeTransform}];if(t.opts.vocab){e.splice(1,0,{action:"replace",html:["","Replace","›"],handler:t.displayTreeMenu})}t.dom.table.selectAll("tr").data(e).enter().append("tr").attr("class","sja_menuoption").on("click",t.handleMenuOptionClick).selectAll("td").data((t=>t.html)).enter().append("td").style("padding","5px").style("border-top","solid 1px white").style("color",((t,e)=>t=="✖"?"#a00":e===0?"#0a0":"#111")).style("opacity",((t,e)=>e===0?.8:1)).html((t=>t));t.dom.treeHead=t.dom.treeTip.d.append("div").attr("class","sja_tree_tip_head").style("padding","3px");t.dom.termSrcDiv=t.dom.treeTip.d.append("div").attr("class","sja_term_src_body");t.dom.treeHeadTitle=t.dom.treeHead.append("div");s("body").on("mousedown.sja_filter_"+q++,(e=>{if(["sja_filter_join_label","sja_filter_clause_negate","sja_filter_paren_open","sja_filter_paren_close"].includes(e.target.className))return;t.dom.filterContainer?.selectAll(".sja_filter_grp").style("background-color","transparent");t.removeBlankPill();this.dom.holder?.selectAll(".sja_filter_add_transformer").style("display",this.getAddTransformerBtnDisplay)}))};t.updateUI=async function(e,s){e.datum(s).style("display",!s.lst||!s.lst.length?"none":"inline-block");const i=e.selectAll(":scope > .sja_filter_grp").style("background-color","transparent").data([s],t.getId);i.exit().each(t.removeGrp);i.each(t.updateGrp);i.enter().append("div").attr("class","sja_filter_grp").style("margin","5px").each(t.addGrp);t.updatePromise(0)};t.addGrp=function(e,i){const n=this.parentNode.__data__;s(this).style("display","inline-block");s(this).append("div").attr("class","sja_filter_clause_negate").style("display",n.in?"none":"inline-block").style("color","rgb(102,0,0)").style("font-weight",500).style("cursor","pointer").html("NOT").on("click",t.displayControlsMenu);s(this).append("div").attr("class","sja_filter_paren_open").html("(").style("display","none").style("padding","0 5px").style("font-weight",500).style("font-size","24px").style("cursor","pointer").on("click",t.displayControlsMenu);const a=e.type=="tvslst"?e.lst:[e];const r=s(this).selectAll(":scope > .sja_filter_item").data(a,t.getId);r.enter().append("div").attr("class","sja_filter_item").each(t.addItem);if(t.opts.joinWith.length==1){t.dom.last_join_div=s(this).append("div").attr("class","sja_filter_last_join").style("display","inline");t.dom.last_join_label=t.dom.last_join_div.append("div").datum({action:"join",html:["✚","","›"],handler:t.displayTreeMenu}).attr("class","sja_filter_last_join_label").style("padding","0 5px").style("display",n.lst.length?"inline":"none").style("font-weight",500).style("cursor","pointer").html("+"+t.opts.joinWith[0].toUpperCase()).on("click",t.showLastJoinBlank);s("body").on("mousedown.sja_filter_last_join",(()=>{t.dom.last_join_label.style("display","inline")}))}s(this).append("div").attr("class","sja_filter_paren_close").style("padding","0 5px").html(")").style("display","none").style("font-weight",500).style("font-size","24px").style("cursor","pointer").on("click",t.displayControlsMenu);s(this).selectAll(":scope > .sja_filter_paren_open, :scope > .sja_filter_paren_close").style("display",t.opts.joinWith.length<2||a.length<2?"none":!n.in||a.length>1&&n.tag!="filterUiRoot"?"inline-block":"none")};t.updateGrp=function(e,i){const n=this.parentNode.__data__;s(this).select(":scope > .sja_filter_clause_negate").style("display",n.in?"none":"inline-block");const a=e.type=="tvslst"?e.lst:[e];s(this).selectAll(":scope > .sja_filter_paren_open, :scope > .sja_filter_paren_close").style("display",t.opts.joinWith.length<2||a.length<2?"none":!n.in||a.length>1&&n.tag!="filterUiRoot"?"inline-block":"none");const r=s(this).selectAll(":scope > .sja_filter_item").data(a,t.getId);r.exit().each(t.removeItem);r.each(t.updateItem);r.enter().insert("div",":scope > .sja_filter_paren_close").attr("class","sja_filter_item").each(t.addItem);s(this).selectAll(":scope > .sja_filter_item").sort(((t,e)=>a.indexOf(t)-a.indexOf(e)));if(t.dom.last_join_label){t.dom.last_join_div.datum(n);this.insertBefore(t.dom.last_join_div.node(),s(this).select(":scope > .sja_filter_paren_close").node());t.dom.last_join_label.style("display","inline")}};t.removeGrp=function(e){t.numExpectedItems+=1;if(e.type=="tvslst"){for(const s of e.lst){if(s.lst)t.removeGrp(s);else{delete t.pills[s.$id]}}}else{delete t.pills[e.$id]}if(this instanceof Node){s(this).selectAll("*").on("click",null);s(this).on("click",null).remove()}t.updatePromise()};t.addItem=async function(e,i){const n=this.parentNode.__data__;if(e.type=="tvslst"){t.updateUI(s(this),e);t.addJoinLabel(this,n,e);return}t.numExpectedItems+=1;const a=s(this).style("display","inline-block").style("position","relative").style("white-space","nowrap").append("div").attr("class","sja_pill_wrapper").style("display","inline-block").style("margin",t.opts.joinWith.length>1?"":"2px").on("click",e.renderAs==="htmlSelect"?null:t.displayControlsMenu);t.addJoinLabel(this,n,e);if(e.renderAs=="htmlSelect"){const s=V(t,e);const i=a.append("select").on("change",(function(){const i=JSON.parse(JSON.stringify(t.filter));const a=S(i,n.$id);const r=n.lst.indexOf(e);if(r==-1)return;const o=+this.value;const l=JSON.parse(JSON.stringify(e));const d="keys"in s[o]?s[o].keys:[s[o].key];l.tvs.values=d.map((t=>({key:t,label:t})));a.lst[r]=l;t.refresh(i)}));const r=M(t,e);i.selectAll("option").data(s).enter().append("option").property("value",((t,e)=>e)).property("selected",((t,e)=>e==r)).html((t=>t.shortLabel?t.shortLabel:t.label?t.label:t.key))}else{const s=await _({vocabApi:t.vocabApi,holder:a,debug:t.opts.debug,getCategoriesArguments:t.opts.getCategoriesArguments,callback:s=>{const i=JSON.parse(JSON.stringify(t.filter));const a=S(i,n.$id);const r=n.lst.indexOf(e);if(r==-1)return;const o=a.lst.findIndex((t=>t.$id==e.$id));if(o==-1)a.lst[r]={$id:e.$id,type:"tvs",tvs:s};else a.lst[o].tvs=s;t.refresh(i)}});t.pills[e.$id]=s;await s.main({tvs:e.tvs,filter:t.getFilterExcludingPill(e.$id)})}t.updatePromise()};t.updateItem=async function(e,i){const n=this.parentNode.__data__;s(this).select(":scope > .sja_filter_join_label").style("display",t.opts.joinWith.length>1&&n.lst.indexOf(e)<n.lst.length-1?"inline-block":"none").style("margin",t.opts.joinWith.length>1?"":"2px").html(n.join=="and"?"AND":"OR");if(e.type=="tvslst"){t.updateUI(s(this),e)}else if(e.renderAs==="htmlSelect"){t.numExpectedItems+=1;s(this).select("select").property("value",""+M(t,e))}else{if(!t.pills[e.$id])return;t.numExpectedItems+=1;await t.pills[e.$id].main({tvs:e.tvs,filter:t.getFilterExcludingPill(e.$id)})}t.updatePromise()};t.removeItem=function(e){delete t.pills[e.$id];s(this).on("click",null).remove()};t.addJoinLabel=function(e,i,n){const a=i.lst.findIndex((t=>t.$id===n.$id));s(e).append("div").attr("class","sja_filter_join_label").style("display",t.opts.joinWith.length>1&&i.lst.length>1&&n&&a!=-1&&a<i.lst.length-1?"inline-block":"none").style("width","50px").style("padding","5px").style("border","none").style("border-radius","5px").style("text-align","center").style("cursor","pointer").html(i.lst.length<2?"":i.join=="and"?"AND":"OR").on("click",t.displayControlsMenu)};t.updateJoinLabel=function(e){const i=this.parentNode.parentNode.parentNode.__data__;const n=i.lst.findIndex((t=>t.$id===e.$id));s(this).style("display",t.opts.joinWith.length>1&&i.lst.length>1&&e&&n!=-1&&n<i.lst.length-1?"inline-block":"none")};t.getAddTransformerBtnDisplay=function(e){if(t.opts.joinWith.length<2){return"none"}else if(t.filter&&t.filter.lst.find((t=>t.tag==="cohortFilter"))){return t.filter.lst.length==1&&e=="and"?"inline-block":"none"}else{return t.filter&&t.filter.lst.length>0&&(t.filter.join!==e||!t.filter.in)?"inline-block":"none"}}}function V(t,e){return e.selectOptionsFrom=="selectCohort"?t.opts.termdbConfig.selectCohort.values:Array.isArray(e.tvs.term.values)?e.tvs.term.values:Object.values(e.tvs.term.values)}function M(t,e){const s=V(t,e);const i=JSON.stringify(e.tvs.values.map((t=>t.key)).sort());const n=s.findIndex((t=>t.keys?i===JSON.stringify(t.keys.sort()):t.key===i));return n}const R="#fff";function E(t){t.displayControlsMenu=function(e){e.stopPropagation();if(!t.activeData)return;const s=this.parentNode.__data__;const i=k(t.filter,s.$id);t.activeData={item:s,filter:i,elem:this};t.removeBlankPill();t.resetGrpHighlights(this,i);if(s.noEdit)t.dom.table.selectAll("tr").filter((t=>t.action=="edit")).style("display","none");t.dom.controlsTip.showunder(this)};t.resetGrpHighlights=function(e,s){const i=e.className;const n=i.includes("join")||i.includes("negate")||i.includes("paren");const a=t.dom.controlsTip.d.selectAll("tr").style("background-color","");a.filter((t=>t.action=="edit"||t.action=="replace")).style("display",n?"none":"table-row");a.filter((t=>t.action=="remove")).style("display",i.includes("_join_")&&s.lst.find((t=>t.tag=="cohortFilter"))?"none":"table-row");a.filter((t=>t.action=="join")).style("display",t.opts.joinWith.length<2||s.$id==t.filter.$id&&s.lst.length==1||i.includes("negate")||i.includes("paren")?"none":"table-row").select("td:nth-child(2)").html(n?s.join.toUpperCase():s.join=="and"?"OR":"AND");a.filter((t=>t.action=="switch")).style("display",t.opts.joinWith.length<2||s.$id==t.filter.$id&&s.lst.length==1||!i.includes("_join_")?"none":"table-row").select("td:nth-child(2)").html((t=>s.join=="and"?"Switch to OR":"Switch to AND"));t.dom.filterContainer.selectAll(".sja_filter_grp").style("background-color","transparent");if(n){if(i.includes("join"))e.parentNode.parentNode.style.backgroundColor="#ee5";else e.parentNode.style.backgroundColor="#ee5"}};t.handleMenuOptionClick=async function(e,s){e.stopPropagation();if(s==t.activeData.menuOpt)return;t.activeData.menuOpt=s;if(t.activeData.elem.className.includes("join")&&s.action!=="join"&&s.action!="switch"){t.activeData.item=t.activeData.filter;t.activeData.filter=k(t.filter,t.activeData.item)}t.resetBlankPill(s.action);t.dom.controlsTip.d.selectAll("tr").style("background-color","");await s.handler(this,s)};t.resetBlankPill=function(e){t.removeBlankPill();t.dom.filterContainer.selectAll(".sja_filter_grp").style("background-color","transparent");if(e!="join")return;const i=t.dom.last_join_div?t.dom.last_join_div.node():t.activeData.elem.className.includes("join_label")?t.activeData.elem.parentNode.parentNode:t.activeData.item.type=="tvs"||t.activeData.filter===t.filter?t.activeData.elem:t.activeData.elem.parentNode.parentNode;const n=t.opts.joinWith.length===1?t.opts.joinWith[0].toUpperCase():t.activeData.elem.className.includes("join_label")?t.activeData.filter.join.toUpperCase():t.activeData.btn&&typeof t.activeData.btn.__data__==="string"?t.activeData.btn.__data__.toUpperCase():t.activeData.item.type=="tvslst"?t.activeData.filter.join.toUpperCase():t.activeData.filter.join=="or"?"AND":"OR";if(t.activeData.item.type=="tvs"&&!t.activeData.elem.className.includes("join_label")){s(i).insert("div","div").attr("class","sja_filter_paren_open").style("display",t.opts.joinWith.length>1?"inline-block":"none").style("padding","0 5px").style("font-weight",500).style("font-size","24px").style("cursor","pointer").html("(")}const a=s(i).insert("div",":scope > .sja_filter_paren_close").attr("class","sja_filter_blank_pill").style("display","inline-block").style("height","20px").style("overflow","visible");a.append("div").style("display","inline-block").style("width","50px").style("text-align","center").html(n);a.append("div").style("position","relative").style("top","-7px").style("display","inline-block").style("width","80px").style("height","22px").style("margin-right","5px").style("border","3px dashed #b8d3ea").style("vertical-align","top").style("background-color","#ee5");if(t.activeData.item.type=="tvs"&&!t.activeData.elem.className.includes("join_label")){s(i).append("div").attr("class","sja_filter_paren_close").style("display",t.opts.joinWith.length>1?"inline-block":"none").style("padding","0 5px").style("font-weight",500).style("font-size","24px").style("cursor","pointer").html(")")}if(i==t.dom.filterContainer.node()){t.dom.filterContainer.selectAll(":scope > .sja_filter_grp > .sja_filter_paren_open, :scope > .sja_filter_grp > .sja_filter_paren_close").style("display",t.opts.joinWith.length>1&&t.filter.lst.length>1?"inline-block":"none")}};t.removeBlankPill=function(){t.dom.holder?.selectAll(".sja_filter_blank_pill, .sja_pill_wrapper > .sja_filter_paren_open, .sja_pill_wrapper > .sja_filter_paren_close").remove();if(t.filter.in&&t.filter.lst.filter((t=>t.type==="tvslst")).length<1){t.dom.filterContainer?.selectAll(":scope > .sja_filter_grp > .sja_filter_paren_open, :scope > .sja_filter_grp > .sja_filter_paren_close").style("display","none")}};t.displayTreeNew=async function(e,s){e.stopPropagation();if(t.opts.newBtn&&this.className!=="sja_filter_add_transformer"&&t.filter.lst.length)return;t.dom.filterContainer.selectAll(".sja_filter_grp").style("background-color","transparent");if(t.filter.lst.length>0){t.activeData={item:t.filter,filter:t.filter,elem:t.dom.filterContainer.node(),btn:this}}if(t.filter.lst.length)t.resetBlankPill("join");const i=t.dom.filterContainer.select(".sja_filter_blank_pill").node();if(i){t.dom.holder.selectAll(".sja_filter_add_transformer").style("display","none");t.dom.treeTip.clear().showunder(i)}else{t.dom.treeTip.clear().showunder(this)}const n=t.activeData?t.getAdjustedRoot(t.activeData.filter.$id,s):JSON.parse(t.rawCopy);const a=await import("./app-3320ab6f.js");a.appInit({vocabApi:t.vocabApi,holder:t.dom.termSrcDiv,getCategoriesArguments:t.opts.getCategoriesArguments,state:{activeCohort:t.activeCohort,termfilter:{filter:n},tree:{usecase:{target:"filter"}}},tree:{disable_terms:t.activeData&&t.activeData.filter&&t.activeData.filter.lst&&s=="and"?t.activeData.filter.lst.filter((t=>t.type==="tvs"&&t.tvs.term.type!=="condition")).map((t=>t.tvs.term.id)):[],click_term2select_tvs(e){t.editFilterRoot(s,[{type:"tvs",tvs:e}])}}})};t.editFilterRoot=(e,s)=>{const i=JSON.parse(JSON.stringify(t.filter));if(!i.lst.length){if(s.length>1)i.join="and";i.lst.push(...s);t.refresh(i)}else if(e!="or"&&e!="and"){throw"unhandled new term(s): invalid appender join value"}else{if(!i.join)i.join=e;if(i.join==e&&i.in){if(s.length<2||i.join=="and"){i.lst.push(...s)}else{i.push({type:"tvslst",in:true,join:"and",lst:s})}t.refresh(i)}else if(e=="and"||s.length<2){delete i.tag;t.refresh({tag:"filterUiRoot",type:"tvslst",in:true,join:e,lst:[i,...s]})}else{delete i.tag;t.refresh({tag:"filterUiRoot",type:"tvslst",in:true,join:"or",lst:[i,{type:"tvslst",in:true,join:"and",lst:s}]})}}};t.displayTreeMenu=async function(e,i){s(e).style("background-color",R);t.dom.holder.selectAll(".sja_filter_add_transformer").style("display","none");const n=t.dom.filterContainer.select(".sja_filter_blank_pill").node();if(n){t.dom.controlsTip.hide();t.dom.treeTip.clear().showunder(n)}else if(e.lastChild instanceof HTMLElement){t.dom.treeTip.clear().showunderoffset(e.lastChild)}else{t.dom.treeTip.clear().showunder(e)}const a=t.activeData.filter;const r=await import("./app-3320ab6f.js");r.appInit({vocabApi:t.vocabApi,holder:t.dom.termSrcDiv,getCategoriesArguments:t.opts.getCategoriesArguments,state:{activeCohort:t.activeCohort,header_mode:"search_only",termfilter:{filter:t.getAdjustedRoot(a.$id,a.join)},tree:{usecase:{target:"filter"}}},tree:{disable_terms:a&&a.lst&&a.join=="and"?a.lst.filter((t=>t.type==="tvs"&&t.tvs.term.type!=="condition")).map((t=>t.tvs.term.id)):!t.activeData.item?[]:t.activeData.item.type=="tvs"?[t.activeData.item.tvs.term.id]:t.activeData.item.lst?t.activeData.item.lst.filter((t=>t.type=="tvs")).map((t=>t.tvs.term.id)):[],click_term2select_tvs:i.action=="replace"?t.replaceTerm:!a.join||!a.lst.length||t.activeData.elem&&t.activeData.elem.className.includes("join")?t.appendTerm:t.subnestFilter}})};t.editTerm=function(e){s(e.parentNode).selectAll("tr").style("background-color",t.highlightEditRow);const i=t.dom.termSrcDiv;const n=t.activeData.item;t.dom.treeTip.clear();t.pills[n.$id].showMenu(i);t.dom.treeTip.showunderoffset(e.lastChild)};t.highlightEditRow=function(t){return t.action=="edit"?R:""};t.handleNotLabelClick=function(e,s){t.activeData={item:this.__data__};t.negateClause()};t.negateClause=function(){const e=JSON.parse(JSON.stringify(t.filter));const s=S(e,t.activeData.item.$id);if(s.type=="tvslst")s.in=!s.in;else if(s.type=="tvs"&&s.tvs?.term?.type=="geneVariant"){const t=s.tvs.values.filter((t=>t.mclassExcludeLst.length>0))[0];const e=t.mclassLst;t.mclassLst=t.mclassExcludeLst;t.mclassExcludeLst=e;s.tvs.isnot=!s.tvs.isnot}else s.tvs.isnot=!s.tvs.isnot;t.refresh(e)};t.replaceTerm=e=>{const s=Array.isArray(e)?e:[{type:"tvs",tvs:e}];const i=JSON.parse(JSON.stringify(t.filter));const n=S(i,t.activeData.filter.$id);const a=n.lst.findIndex((e=>e.$id===t.activeData.item.$id));if(s.length<2||n.join=="and"){n.lst.splice(a,1,...s)}else{n.lst[a]={in:!e.isnot,type:"tvslst",join:"and",lst:s}}t.refresh(i)};t.appendTerm=e=>{const s=Array.isArray(e)?e:[{type:"tvs",tvs:e}];const i=JSON.parse(JSON.stringify(t.filter));const n=S(i,t.activeData.filter.$id);if(s.length<2||n.join=="and"){n.lst.push(...s);if(n.join==""&&t.opts.joinWith.length===1)n.join=t.opts.joinWith[0]}else{n.lst.push({in:true,type:"tvslst",join:"and",lst:s})}t.refresh(i)};t.subnestFilter=e=>{let s;if(Array.isArray(e)){s=e}else{s=[{type:"tvs",tvs:e}]}const i=t.activeData.item;const n=t.activeData.filter;const a=JSON.parse(JSON.stringify(t.filter));const r=S(a,n.$id);const o=r.lst.findIndex((t=>t.$id===i.$id));r.lst[o]={in:true,type:"tvslst",join:n.join=="or"?"and":"or",lst:[i,...s]};t.refresh(a)};t.removeTransform=function(e,s){const i=s.action||typeof s!=="object"?t.activeData.item:S(t.filter,s.$id);const n=k(t.filter,i.$id);if(i==n){t.refresh(C([],"",i.$id));return}const a=n.lst.findIndex((t=>t.$id===i.$id));if(a==-1)return;const r=JSON.parse(JSON.stringify(t.filter));const o=S(r,n.$id);o.lst.splice(a,1);if(o.lst.length===1){const e=k(r,o.$id);if(o.lst[0].type=="tvslst"){if(e==r){o.lst[0].tag="filterUiRoot";t.refresh(o.lst[0])}else{const s=e.lst.findIndex((t=>t.$id==o.$id));if(o.lst[0].join==e.join){e.lst.splice(s,1,...o.lst[0].lst);t.refresh(r)}else{e.lst[s]=o.lst[0];t.refresh(r)}}}else{o.join="";const s=e.lst.findIndex((t=>t.$id===o.$id));e.lst[s]=o.lst[0];if(!o.in){e.lst[s].tvs.isnot=!e.lst[s].tvs.isnot;if(e==r)e.in=true}t.refresh(r)}}else{t.refresh(r)}};t.showLastJoinBlank=function(e,s){e.stopPropagation();const i=t.dom.last_join_div.node();t.dom.last_join_label.style("display","none");const n=this.parentNode.__data__;t.activeData={item:n,filter:n,elem:i};t.resetBlankPill(s.action);t.displayTreeMenu(i,s)};t.switchJoin=function(e,s){const i=JSON.parse(JSON.stringify(t.filter));const n=S(i,t.activeData.filter.$id);if(n.join<2)return;n.join=n.join=="and"?"or":"and";t.refresh(i)}}function B(t,e={}){if(t.find((t=>!Number.isFinite(t))))throw"non-numeric values found";let s;const i=new Set(t);if(i.size===1){const t=[...i][0];s={type:"custom-bin",lst:[{stop:t,stopinclusive:false,startunbounded:true,label:"<"+t},{start:t,stop:t,startinclusive:true,stopinclusive:true,label:"="+t},{start:t,startinclusive:false,stopunbounded:true,label:">"+t}]}}else{t.sort(((t,e)=>t-e));const e=t.length;const i=t[0];const n=t[e-1];const a=(n-i)/8;let r=Math.round(e*.05)-1;if(r<0)r=0;const o=t[r];const l=Math.max(i+a,o);let[d,c,f,p]=J(a,l,n,i);s={type:"regular-bin",startinclusive:true,bin_size:d,first_bin:{stop:c}};if(f)s.last_bin={start:f};if(p)s.rounding=p}if("format"in e){if(e.format==="string"){return JSON.stringify(s)}else{throw"options are not in the correct format"}}else{return s}}function J(t,e,s,i){let n,a,r,o;const l=Math.floor(Math.log10(t));if(t>=.1&&t<=2){n=Math.round(t/(1*10**l))*(1*10**l);a=Math.round(e/(1*10**l))*(1*10**l)}else{n=Math.round(t/(5*10**l))*(5*10**l);a=Math.round(e/(5*10**l))*(5*10**l);if(n===0)n=1*10**l;if(a===0)a=1*10**l;if(n===5*10**l&&a===1*10**l)a=5*10**l}if(a<i)a=a*2;const d=a+n*7;if(s>d){r=a+n*6}if(t<1){const t=Math.abs(l);n=Number(n.toFixed(t));a=Number(a.toFixed(t));if(r)r=Number(r.toFixed(t));o="."+t+"f"}if(Object.is(a,-0))a=0;return[n,a,r,o]}class P{constructor(t){this.app=t.app;this.opts=t;this.state=t.state;this.vocab=t.state.vocab;this.currAnnoData={samples:{},refs:{byTermId:{}},lastTerms:[],lastFilter:{}};this.missingCatValsByTermId={};const e=localStorage.getItem("jwtByDsRoute")||`{}`;this.jwtByDsRoute=JSON.parse(e);const s=this.vocab?.dslabel||this.state?.dslabel;this.jwtByRoute=this.jwtByDsRoute[s]||{}}async main(t=null){if(t)Object.assign(this.state,t);else this.state=structuredClone(this.app?.getState?.()||this.opts.state);if(this.state.vocab)this.vocab=this.state.vocab;const e=this.state.dslabel||this.state.vocab.dslabel;this.verifiedToken=!this.state.termdbConfig?.requiredAuth?.length||n(e,"termdb");if(e)await this.maySetVerifiedToken(e)}async maySetVerifiedToken(t){if(this.verifiedToken===true)return this.verifiedToken;let e=this.opts.getDatasetAccessToken?.();if(!e)e=this.jwtByRoute["termdb"];if(this.verifedToken&&e===this.verifiedToken)return this.verifiedToken;try{const s=this.state.termdbConfig?.requiredAuth.find((t=>t.route=="termdb"));if(!s){this.verifiedToken=true;return}if(s.type==="jwt"){if(!e){delete this.verifiedToken;return}const i={[s.headerKey]:e};const n="termdb";if(!i.authorization&&this.jwtByRoute[n])i.authorization=`Bearer ${btoa(this.jwtByRoute[n])}`;const r=await a("/jwt-status",{method:"POST",headers:i,body:{dslabel:t,route:n,embedder:location.hostname}});this.verifiedToken=r.status==="ok"&&e;if(r.error){this.tokenVerificationPayload=r;throw r.error}else{this.sessionId=s.headerKey&&r[s.headerKey]||r["x-sjppds-sessionid"]||r["x-ds-access-token"];delete this.tokenVerificationMessage;delete this.tokenVerificationPayload;if(r.jwt){if(!this.jwtByDsRoute[t]){this.jwtByDsRoute[t]={};this.jwtByRoute=this.jwtByDsRoute[t]}this.jwtByDsRoute[t][r.route]=r.jwt;localStorage.setItem("jwtByDsRoute",JSON.stringify(this.jwtByDsRoute))}}}else{throw`unsupported requiredAuth='${s.type}'`}}catch(t){this.tokenVerificationMessage=t.message||t.reason||t;if(typeof t=="object")console.log(t)}}hasVerifiedToken(){return this.verifiedToken&&true}mayGetAuthHeaders(t=""){const e=this.state.termdbConfig?.requiredAuth;if(!e)return{};if(!this.verifiedToken){this.tokenVerificationMessage=`requires login for this data`;return}const s={};if(e.headerKey)s[e.headerKey]=this.verifiedToken;if(this.sessionId)s["x-sjppds-sessionid"]=this.sessionId;if(t&&this.jwtByRoute[t]){const e=this.jwtByRoute[t];s.authorization=`Bearer ${btoa(e)}`}return s}async trackDsAction({action:t,details:e}){const s={"x-sjppds-sessionid":this.sessionId};const i=this.jwtByRoute.termdb;if(i)s.authorization="Bearer "+btoa(i);await a("/authorizedActions",{method:"POST",credentials:"include",headers:s,body:Object.assign({dslabel:this.vocab.dslabel,action:t,details:e,"x-sjppds-sessionid":this.sessionId})})}getTwMinCopy(t){if(!t)return;const e={term:{},q:t.q};if(t.$id)e.$id=t.$id;if(t.term){if(m(t.term.type)){if(t.term.id)e.term.id=t.term.id;if(t.term.name)e.term.name=t.term.name;if(t.term.type)e.term.type=t.term.type;if(t.term.values)e.term.values=t.term.values;if(t.term.groupsetting)e.term.groupsetting=t.term.groupsetting}else{e.term=structuredClone(t.term);if(t.term.type=="geneVariant"){delete e.term.groupsetting}}}return e}cacheTermQ(t,e){if(!e.reuseId)throw`missing term q.reuseId for term.id='${t.id}'`;this.app.dispatch({type:"cache_termq",termId:t.id,q:e})}async uncacheTermQ(t,e){await this.app.dispatch({type:"uncache_termq",term:t,q:e})}getCustomTermQLst(t){if(t.id){const e=this.state.reuse.customTermQ.byId[t.id]||{};const s=Object.values(e).map((t=>JSON.parse(JSON.stringify(t))));for(let t=s.length+1;t<1e3;t++){const e=`Setting #${t}`;if(!s.find((t=>t.reuseId===e))){s.nextReuseId=e;break}}if(!s.nextReuseId){s.nextReuseId=btoa((+new Date).toString()).slice(10,-3)}return s}else return[]}async addCustomTerm(t){await this.app.dispatch({type:"add_customTerm",obj:t})}async deleteCustomTerm(t){await this.app.dispatch({type:"delete_customTerm",name:t})}async getCustomTerms(){if(!Array.isArray(this.state.customTerms))return[];return this.state.customTerms.map((t=>t.tw))}async addGroup(t){await this.app.dispatch({type:"add_group",obj:t})}async deleteGroup(t){await this.app.dispatch({type:"delete_group",name:t})}async getGroups(){if(!Array.isArray(this.state.groups))return[];return this.state.groups}}const F=new Set(["categorical","integer","float","condition","survival","snplst","snplocus","geneVariant","samplelst","geneExpression",u.METABOLITE_INTENSITY,u.SINGLECELL_GENE_EXPRESSION,u.SINGLECELL_CELLTYPE,u.SNP]);function L(t,e,s,i){const n=e||{};if(typeof i?.usecase?.[use.target]=="function"){return i.usecase[use.target](t,use)}const a=new Set;const r=t.child_types||[];switch(n.target){case"barchart":case"summary":if(t.type&&t.type!=="survival")a.add("plot");if(G(r,["survival"]))a.add("branch");return a;case"matrix":if(t.type)a.add("plot");if(!t.isleaf)a.add("branch");return a;case"table":if(n.detail=="term")a.add("plot");if(r.length>1)a.add("branch");return a;case"sampleScatter":if(n.detail=="numeric"){if(f(t)){a.add("plot")}if(W(r))a.add("branch")}else{if(F.has(t.type))a.add("plot");if(!t.isleaf)a.add("branch")}return a;case"profile":if(!t.isleaf){a.add("branch");const e=t.id.split("__").length;if(e>2){a.add("plot")}}return a;case"boxplot":if(t.type=="float"||t.type=="integer")a.add("plot");if(n.detail==="term2"&&W(r))a.add("branch");return a;case"cuminc":if(n.detail=="term"){if(t.type=="condition")a.add("plot");if(r.includes("condition"))a.add("branch");return a}if(n.detail==="term2"||n.detail=="term0"){if(t.type&&t.type!="condition"&&t.type!="survival")a.add("plot");if(G(r,["condition","survival"]))a.add("branch");return a}case"survival":if(n.detail=="term"){if(t.type=="survival")a.add("plot");if(r.includes("survival"))a.add("branch");return a}if(n.detail==="term2"||n.detail=="term0"){if(t.type&&t.type!="survival")a.add("plot");if(G(r,["survival"]))a.add("branch");return a}case"regression":if(n.detail=="outcome"){if(n.regressionType=="linear"){if(t.type=="float"||t.type=="integer")a.add("plot");if(W(r))a.add("branch");return a}if(n.regressionType=="logistic"){if(t.type&&t.type!="survival")a.add("plot");if(G(r,["survival"]))a.add("branch");return a}else if(n.regressionType=="cox"){if(t.type=="condition"||t.type=="survival")a.add("plot");if(r.includes("condition")||r.includes("survival"))a.add("branch");return a}}if(n.detail=="independent"){if(t.type=="float"||t.type=="integer"||t.type=="categorical"||t.type=="samplelst")a.add("plot");if(U(r,["categorical","float","integer"]))a.add("branch");return a}case"filter":const e=s?.excludedTermtypeByTarget?.filter;if(e){if(F.has(t.type)&&!e.includes(t.type))a.add("plot");if(r.find((t=>!e.includes(t))))a.add("branch");return a}default:if(F.has(t.type))a.add("plot");if(!t.isleaf)a.add("branch");return a}}function G(t,e){if(!t.length){return false}if(!e?.length){return true}if(t.some((t=>!e.includes(t)))){return true}}function W(t){return t.includes("float")||t.includes("integer")}function U(t,e){for(const s of e){if(t.includes(s))return true}}class H extends P{async getTermdbConfig(){const t=await a("termdb/config",{body:{genome:this.vocab.genome,dslabel:this.vocab.dslabel,embedder:window.location.hostname}});if(t.error)throw t.error;this.termdbConfig=t.termdbConfig||{};return this.termdbConfig}async getTermChildren(t,e){let s;const i={genome:this.vocab.genome,dslabel:this.vocab.dslabel};if(e){i.cohortValues=e.slice().sort().join(",")}if(this.state.treeFilter){i.treeFilter=this.state.treeFilter}if(t.__tree_isroot){i.default_rootterm=1;s=await a("termdb/rootterm",{body:i},this.opts.fetchOpts)}else{i.get_children=1;i.tid=t.id;s=await a("termdb/termchildren",{body:i},this.opts.fetchOpts)}if(s.error)throw s.error;for(const t of s.lst){if(t.type=="integer"||t.type=="float"){if(t.bins.rounding)t.bins.default.rounding=t.bins.rounding;if(t.bins.label_offset&&!t.bins.default.label_offset)t.bins.default.label_offset=t.bins.label_offset}}return s}async getNestedChartSeriesData(t){const[e,s]=this.getTdbDataUrl(t);const i=this.mayGetAuthHeaders("termdb");const n=await a(e,{headers:i,body:s},this.opts.fetchOpts);if(n.error)throw n.error;if(n.charts){for(const e of n.charts){this.mayFillInMissingCatValues(t.term0,e.chartId,e.total);for(const s of e.serieses){this.mayFillInMissingCatValues(t.term,s.seriesId,s.total);for(const e of s.data){this.mayFillInMissingCatValues(t.term2,e.dataId,e.total)}}}}return n}mayFillInMissingCatValues(t,e,s){if(!e)return;if(!(t?.id in this.missingCatValsByTermId))return;const i=this.missingCatValsByTermId[t.id];if(!(e in i.values)){i.values[e]={key:e,label:e};i.samplecount[e]={samplecount:0,key:e,label:e}}i.samplecount[e].samplecount+=s}getTdbDataUrl(t){const e={genome:this.vocab.genome,dslabel:this.vocab.dslabel,embedder:window.location.hostname};if(t.chartType=="cuminc")e.getcuminc=1;if(t.chartType=="survival")e.getsurvival=1;for(const s of["term0","term","term2"]){const i=this.getTwMinCopy(t[s]);if(!i)continue;const n=s=="term"?"term1":s;e[n+"_$id"]=i.$id;if("id"in i.term&&(!i.term?.type||m(i.term.type))){e[n+"_id"]=i.term.id}else{e[n]=i.term}if(!i.q)throw"plot."+s+".q{} missing: "+i.term.id;e[n+"_q"]=i.q}if(t.filter){const s=I(t.filter);if(s.lst.length){e.filter=s}}if(t.filter0)e.filter0=t.filter0;if("grade"in t)e.grade=t.grade;if("minSampleSize"in t)e.minSampleSize=t.minSampleSize;if(t.term2){const s={term1:t.term.q.hiddenValues?Object.keys(t.term.q.hiddenValues).map((e=>t.term.term.values?.[e]?.label||e)):[],term2:t.term2.q.hiddenValues?Object.keys(t.term2.q.hiddenValues).map((e=>t.term2.term.values?.[e]?.label||e)):[]};e.hiddenValues=s}if(t.get)e.get=t.get;return[t.chartType?"termdb":"termdb-barsql",e]}syncTermData(t,e,s={}){if(!e||!e.refs)return;for(const[i,n]of["term0","term","term2"].entries()){const a=t[n];const r=!s[n]||s[n].term?.id===a?.term?.id;if(a=="genotype")continue;if(!a){if(n=="term")throw`missing plot.term{}`;continue}if(e.refs.bins){a.bins=e.refs.bins[i];if(e.refs.q&&e.refs.q[i]){if(!a.q)a.q={};const t=e.refs.q[i];if(t!==a.q||!r){if(t.type!=a.q.type||t.mode!=a.q.mode){for(const t in a.q){if(t!="hiddenValues"||!r)delete a.q[t]}}Object.assign(a.q,t)}}}if(!a.q)a.q={}}}async getRegressionData(t){if(!m(t.outcome.term.type))throw"outcome must be dictionary term";const e=this.getTwMinCopy(t.outcome);e.id=e.term.id;e.q=JSON.parse(JSON.stringify(t.outcome.q));e.type=e.term.type;if(!e.q.mode&&t.regressionType=="linear")e.q.mode="continuous";const s=["mode","scale"];e.refGrp=e.q.mode=="continuous"?"NA":t.outcome.refGrp;if(e.q.mode=="continuous"){for(const t in e.q){if(!s.includes(t))delete e.q[t]}}const i={getregression:1,genome:this.vocab.genome,dslabel:this.vocab.dslabel,regressionType:t.regressionType,outcome:e,independent:t.independent.map((t=>{const e=this.getTwMinCopy(t);e.refGrp=t.refGrp;e.interactions=t.interactions;const i=JSON.parse(JSON.stringify(e.q));delete i.values;delete i.totalCount;if(e.q.mode=="continuous"){for(const t in i){if(!s.includes(t))delete i[t]}}return{id:e.term.id,q:i,term:e.term,type:e.term.type,refGrp:e.q.mode=="continuous"?"NA":e.refGrp,interactions:e.interactions||[],values:e.term.values}}))};const n=I(t.filter);if(n.lst.length)i.filter=n;const r=await a("termdb",{body:i},this.opts.fetchOpts);if(r.error)throw r.error;return r}async findTerm(t,e="",s=null,i=""){const n={genome:this.vocab.genome,dslabel:this.vocab.dslabel,findterm:encodeURIComponent(t),cohortStr:e};if(s)n.usecase=s;if(this.state.treeFilter)n.treeFilter=this.state.treeFilter;if(i)n.targetType=i;const r=await a("termdb",{body:n});if(r.error)throw r.error;const o=t.toUpperCase();const l={equals:[],startsWith:[],startsWord:[],includes:[]};for(const t of r.lst){const e=t.name.toUpperCase();if(e===o)l.equals.push(t);else if(e.startsWith(o))l.startsWith.push(t);else if(e.includes(" "+o))l.startsWord.push(t);else l.includes.push(t)}r.lst=[...l.equals,...l.startsWith,...l.startsWord,...l.includes];return r}async getTermInfo(t){if(!t)throw".getTermInfo: Missing term id";const e=["genome="+this.vocab.genome+"&dslabel="+this.vocab.dslabel+"&getterminfo=1&tid="+t];const s=await a("/termdb?"+e.join("&"),{},this.opts.fetchOpts);if(s.error)throw s.error;return s}async getCohortSampleCount(t){const e={genome:this.vocab.genome,dslabel:this.vocab.dslabel,cohort:t};const s=await a("termdb/cohort/summary",{body:e},this.opts.fetchOpts);if(!s)throw"missing data";if(s.error)throw s.error;return s.count}async getFilteredSampleList(t){const e={genome:this.vocab.genome,dslabel:this.vocab.dslabel,getsamplelist:1,filter:typeof t=="string"?t:I(t)};const s=await a("termdb",{body:e},this.opts.fetchOpts);if(!s)throw`missing data`;if(s.error)throw s.error;if(!Array.isArray(s))throw"data is not array";return s}async getFilteredSampleCount(t){const e={genome:this.vocab.genome,dslabel:this.vocab.dslabel,getsamplecount:1,filter:typeof t=="string"?t:I(t)};const s=await a("termdb",{body:e},this.opts.fetchOpts);if(!s)throw`missing data`;if(s.error)throw s.error;return s.count}async getViolinPlotData(t,e={}){const s=this.mayGetAuthHeaders("termdb");t.tw=this.getTwMinCopy(t.tw);if(t.divideTw)t.divideTw=this.getTwMinCopy(t.divideTw);const i=Object.assign({genome:this.vocab.genome,dslabel:this.vocab.dslabel,embedder:window.location.hostname,devicePixelRatio:window.devicePixelRatio,isKDE:"isKDE"in t?t.isKDE:true,ticks:t.ticks,datasymbol:t.datasymbol||"rug",orientation:t.orientation||"horizontal",radius:t.radius||3,svgw:t.svgw||200,unit:t.unit||"abs"},t,e);if(i.filter)i.filter=I(i.filter);const n=await a("termdb/violin",{headers:s,body:i});return n}async getPercentile(t,e,s){if(e.find((t=>!Number.isInteger(t))))throw"non-integer percentiles found";if(Math.max(...e)>99||Math.min(...e)<1)throw"percentiles must be between 1-99";const i={getpercentile:e,tid:t,genome:this.vocab.genome,dslabel:this.vocab.dslabel};if(s){i.filter=I(s)}return await a("termdb/getpercentile",{body:i})}async getDescrStats(t,e,s){const i={tw:t,genome:this.vocab.genome,dslabel:this.vocab.dslabel};if(s)i.logScale=true;if(e){if(e.filter)i.filter=I(e.filter);if(e.filter0)i.filter0=e.filter0}return await a("/termdb/descrstats",{body:i})}async getTerms(t,e=null,s=null){if(!t)throw"getTerms: ids missing";if(!Array.isArray(t))throw`invalid ids`;const i=e||this.state.vocab?.dslabel;const n=s||this.state.vocab?.genome;if(!i)throw"getTerms: dslabel missing";if(!n)throw"getTerms: genome missing";const r={genome:n,dslabel:i,ids:t,embedder:window.location.hostname};const o=await a(`termdb/termsbyids`,{body:r});if(o.error)throw"getTerm: "+o.error;for(const t in o.terms){const e=o.terms[t];if(e.type=="categorical"&&!e.values)this.missingCatValsByTermId[e.id]=e}return o.terms}async getterm(t,e=null,s=null){if(!t)throw"getterm: termid missing";const i=await this.getTerms([t],e,s);const n=i[t];if(!n)throw"no term found for "+t;return n}graphable(t){if(!t)throw"graphable: term is missing";return L(t).has("plot")}async getCategories(t,e,s={}){const i=this.mayGetAuthHeaders();if(t.type=="snplst"||t.type=="snplocus"){const t=Object.assign({validateSnps:1,sumSamples:1,genome:this.state.vocab.genome,dslabel:this.state.vocab.dslabel},s);if(e){t.filter=I(e)}return await a("/termdb",{headers:i,body:t})}if(t.category2samplecount){const e=[];for(const s in t.category2samplecount){e.push({key:s,label:t?.values?.[s]?.label||s,samplecount:t.category2samplecount[s]})}return{lst:e}}const n={term:t,q:s.term1_q||{}};delete s.term1_q;const o={genome:this.state.vocab.genome,dslabel:this.state.vocab.dslabel,tw:this.getTwMinCopy(n),...s};if(e){o.filter=I(e)}try{const t=await a("termdb/categories",{headers:i,body:o});if(t.error)r(t.error);return t}catch(t){window.alert(t.message||t)}}async getNumericUncomputableCategories(t,e){const s={genome:this.state.vocab.genome,dslabel:this.state.vocab.dslabel,tid:t.id};if(e){s.filter=I(e)}try{const t=await a("/termdb/numericcategories",{body:s});if(t.error)throw t.error;return t}catch(t){window.alert(t.message||t)}}async validateSnps(t){const e=["validateSnps=1","genome="+this.state.vocab.genome,"dslabel="+this.state.vocab.dslabel];if(t.text){e.push("snptext="+encodeURIComponent(t.text))}else if(t.chr){e.push("chr="+t.chr);e.push("start="+t.start);e.push("stop="+t.stop);if(t.variant_filter)e.push("variant_filter="+encodeURIComponent(JSON.stringify(t.variant_filter)))}return await a("/termdb?"+e.join("&"))}async get_variantFilter(){return await a("termdb",{body:{getvariantfilter:1,genome:this.state.vocab.genome,dslabel:this.state.vocab.dslabel}})}async getSamplesPerFilter(t){return await a("termdb",{body:{for:"getSamplesPerFilter",genome:this.state.vocab.genome,dslabel:this.state.vocab.dslabel,filters:t.filters}})}async getAnnotatedSampleData(t,e={}){const s=this.mayGetAuthHeaders("termdb");if(!s)return;const i=I(t.filter);const n={};const r={byTermId:e.byTermId||{},bySampleId:e.bySampleId||{}};const o=[];const l=new Set;const d=t.isHierCluster?null:t.terms.filter((t=>t.term.type==="geneVariant")).map((t=>t.term.chr?`${t.term.chr}:${t.term.start}-${t.term.stop}`:t.term.name)).sort();const c=t.terms.slice();let f=0;if(t.loadingDiv)t.loadingDiv.html("Updating data ...");while(true){const e=K(c,t.termsPerRequest||1);if(e.length==0)break;const p={headers:s,credentials:"include",body:{for:"matrix",genome:this.vocab.genome,dslabel:this.vocab.dslabel,terms:e.map(this.getTwMinCopy),filter:i,embedder:window.location.hostname}};if(t.signal)p.signal=t.signal;if(t.filter0)p.body.filter0=t.filter0;if(t.isHierCluster)p.body.isHierCluster=true;if(this.vocab.dslabel=="GDC"&&e.find((t=>t.term.id&&(!t.term?.type||m(t.term.type))))&&d?.length){p.body.currentGeneNames=d}o.push(a("termdb",p,{cacheAs:"decoded"}).then((s=>{if(s.error)throw s.error;if(!s.refs.bySampleId)s.refs.bySampleId={};for(const t of e){for(const e in s.samples){const i=s.samples[e];if(!Object.keys(i).filter((t=>t!="sample")).length)continue;l.add(e);if(!(e in n)){if(!s.refs.bySampleId[e])s.refs.bySampleId[e]={};if(typeof s.refs.bySampleId[e]=="string")s.refs.bySampleId[e]={label:s.refs.bySampleId[e]};const t=s.refs.bySampleId[e];if(!t.label)t.label=e;const i={sample:e,_ref_:t};n[e]=i}if(t.$id in i)n[e][t.$id]=i[t.$id]}for(const t in s.refs.bySampleId){r.bySampleId[t]=s.refs.bySampleId[t]}r.byTermId[t.$id]=t;if(t.$id in s.refs.byTermId){r.byTermId[t.$id]=Object.assign({},r.byTermId[t.$id],s.refs.byTermId[t.$id])}}f++;if(t.loadingDiv)t.loadingDiv.html(`Updating data (${f}/${o.length}) ...`)})))}try{if(t.loadingDiv)t.loadingDiv.html(`Updating data (0/${o.length})`);await Promise.all(o);if(t.loadingDiv)t.loadingDiv.html("")}catch(t){if(typeof t=="string"){t.toLowerCase();if(t.includes("token")||t.includes("jwt")||t.includes("login")||t.includes("sign")||t.includes("auth")||t.includes("credential")){this.tokenVerificationMessage=t}}throw t}try{if(t.loadingDiv)t.loadingDiv.html(`Processing data ...`);const e=t.terms.filter((t=>m(t.term.type))).map((t=>t.$id));const s=[];if(!e.length){s.push(...Object.values(n))}else{for(const t in n){const i=n[t];for(const t in i){if(e.includes(t)){s.push(i);break}}}if(!s.length&&this.termdbConfig?.matrix?.settings?.displayDictRowWithNoValues){s.push(...Object.values(n))}}const i=new RegExp(t.sampleNameFilter||".*");const a={lst:s.filter((t=>l.has(t.sample)&&i.test(t.sample))),refs:r};a.samples=a.lst.reduce(((t,e)=>{t[e.sample]=e;return t}),{});for(const e of t.terms){z(e,a.lst,this.termdbConfig)}return a}catch(t){throw t}}async getTermTypes(t){const e={body:{for:"termTypes",genome:this.vocab.genome,dslabel:this.vocab.dslabel,ids:JSON.stringify(t)}};const s=await a("termdb",e,this.opts.fetchOpts);if(s.error)throw s.error;return s}async getLDdata(t,e){const s={getLDdata:1,genome:this.state.vocab.genome,dslabel:this.state.vocab.dslabel,ldtkname:t,m:{chr:e.chr,pos:e.pos,ref:e.ref,alt:e.alt}};return await a("termdb",{body:s})}async getScatterData(t){const e=this.mayGetAuthHeaders("termdb");const s={for:"scatter",genome:this.state.vocab.genome,dslabel:this.state.vocab.dslabel,plotName:t.name,coordTWs:t.coordTWs.map((t=>this.getTwMinCopy(t))),filter:I(t.filter),filter0:t.filter0,embedder:window.location.hostname};if(t.colorColumn)s.colorColumn=t.colorColumn;if(t.colorTW)s.colorTW=this.getTwMinCopy(t.colorTW);if(t.shapeTW)s.shapeTW=this.getTwMinCopy(t.shapeTW);if(t.divideByTW)s.divideByTW=this.getTwMinCopy(t.divideByTW);if(t.scaleDotTW)s.scaleDotTW=this.getTwMinCopy(t.scaleDotTW);return await a("termdb",{headers:e,body:s})}async getDefaultBins(t){const e=this.mayGetAuthHeaders("termdb");const s={for:"getDefaultBins",genome:this.state.vocab.genome,dslabel:this.state.vocab.dslabel,tw:t.tw,embedder:window.location.hostname};const i=this.opts?.state?.termfilter;if(i){if(i.filter)s.filter=I(i.filter);if(i.filter0)s.filter0=i.filter0}return await a("termdb",{headers:e,body:s})}async setTermBins({term:t,q:e}){const s=await this.getDefaultBins({tw:{term:t,q:e}});if("error"in s)throw s.error;t.bins=s;if(e.mode=="discrete"&&!e.type){const s=e.mode;for(const t in e){if(t!="isAtomic")delete e[t]}Object.assign(e,t.bins.default);e.mode=s}}async getSingleSampleData(t){const e=this.mayGetAuthHeaders("termdb");const s={for:"singleSampleData",sampleId:t.sampleId,term_ids:t.term_ids,genome:this.state.vocab.genome,dslabel:this.state.vocab.dslabel,embedder:window.location.hostname};const i=await a("termdb",{headers:e,body:s});const n={};if("error"in i)return i;for(const t of i){const e=JSON.parse(t.jsondata);n[t.term_id]={value:t.value,term:e}}return n}async getAllSamples(){const t=this.mayGetAuthHeaders("termdb");const e={for:"getAllSamples",genome:this.state.vocab.genome,dslabel:this.state.vocab.dslabel,embedder:window.location.hostname};const s=await a("termdb",{headers:t,body:e});return s}async getSamplesByName(t){const e=this.mayGetAuthHeaders("termb");const s={for:"getSamplesByName",genome:this.state.vocab.genome,dslabel:this.state.vocab.dslabel,embedder:window.location.hostname};if(t?.filter)s.filter=t.filter;const i=await a("termdb",{headers:e,body:s});return i}async getProfileFacilities(){const t=this.mayGetAuthHeaders("termb");const e={for:"getProfileFacilities",genome:this.state.vocab.genome,dslabel:this.state.vocab.dslabel,embedder:window.location.hostname};const s=await a("termdb",{headers:t,body:e});const i=[];for(const t of s)i.push(t.name);return i}async getLowessCurve(t){const e=this.mayGetAuthHeaders("termb");const s={genome:this.state.vocab.genome,dslabel:this.state.vocab.dslabel,getLowessCurve:1,coords:t.coords};return await a("termdb",{headers:e,body:s})}async getCohortsData(t){const e={genome:this.state.vocab.genome,dslabel:this.state.vocab.dslabel};return await a("termdb/cohorts",{body:e})}async getMds3queryDetails(){return await a("termdb",{body:{for:"mds3queryDetails",genome:this.state.vocab.genome,dslabel:this.state.vocab.dslabel}})}async getMatrixByName(t){return await a("termdb",{body:{for:"matrix",getPlotDataByName:t,genome:this.state.vocab.genome,dslabel:this.state.vocab.dslabel}})}async getTopMutatedGenes(t){return await a("gdc/topMutatedGenes",{method:"GET",body:t})}async getTopVariablyExpressedGenes(t){return await a("termdb/topVariablyExpressedGenes",{method:"GET",body:t})}async getTopTermsByType(t){t.genome=this.state.vocab.genome;t.dslabel=this.state.vocab.dslabel;return await a("termdb/getTopTermsByType",{method:"GET",body:t})}async getSampleImages(t){const e={};e.genome=this.state.vocab.genome;e.dslabel=this.state.vocab.dslabel;e.sampleId=t;return await a("termdb/getSampleImages",{method:"GET",body:e})}async convertSampleId(t,e){const s=new Map;const i=[];for(const n of t){const t={};i.push(t);for(const i of e){if(!("to"in i))i.to=i.from;if(!i.convert){t[i.to]=n[i.from];continue}if(!s.has(i))s.set(i,{});const e=s.get(i);const a=n[i.from];if(!e[a])e[a]=[];e[a].push({obj:t,sample:n})}}const n=[];for(const[t,e]of s){const s=Object.keys(e);n.push(await a("termdb",{body:{for:"convertSampleId",inputs:s,genome:this.state.vocab.genome,dslabel:this.state.vocab.dslabel}}).then((i=>{for(const n of s){for(const{sample:s,obj:a}of e[n]){a[t.to]=i.mapping[n]}}})))}await Promise.all(n);return i}}function z(t,e,s){if(t.term.type!="categorical"){return}if(!("$id"in t)){return}const i={};const n={};for(const s of e){if(!s[t.$id])continue;const e=s[t.$id].key;i[e]=1+(i[e]||0);n[e]={key:e,label:e}}t.term.category2samplecount=i;if(s.alwaysRefillCategoricalTermValues||!t.term.values||Object.keys(t.term.values).length==0){t.term.values=n}}function K(t,e){const s=[];let i=0,n=t.length;while(i<n){i++;const n=t.shift();if(s.find((t=>t.term.type===n.term.type&&(("id"in t.term||"id"in n.term)&&t.term.id===n.term.id||t.term.name===n.term.name)))){t.push(n)}else{s.push(n)}if(s.length>=e)break}return s}function X(t,e,s){const i=!e?[]:e.type=="tvslst"?e.lst:[e];let n=0;for(const a of i){if(a.type=="tvslst"){if(X(t,a)){n++}}else{const e=a.tvs;let i;if(e.term.type=="geneVariant"){i=s.map((e=>t[e])).filter((t=>t))}else if(e.term.type=="integer"||e.term.type=="float"||e.term.type==u.GENE_EXPRESSION||e.term.type==u.METABOLITE_INTENSITY){i=t[e.term.id]||t[e.term.$id]?.key}else if(e.term.type=="survival"){i=t[e.term.$id]?.key}else{i=t[e.term.id]||t[e.term.$id]?.value}let r;if(e.term.type=="categorical"){if(i===undefined){if(e.isnot)r=!r;if(r)n++;continue}const t=e.valueset?e.valueset:new Set(e.values.map((t=>t.key)));r=t.has(i)}else if(e.term.type=="integer"||e.term.type=="float"||e.term.type==u.GENE_EXPRESSION||e.term.type==u.METABOLITE_INTENSITY){if(i===undefined){if(e.isnot)r=!r;if(r)n++;continue}for(const t of e.ranges){if("value"in t){r=i===t.value;if(r)break}else if(i==t.name){r=true;break}else{if(e.term.values){const t=e.term.values[i.toString()];if(t&&t.uncomputable){continue}}let s,n;if(t.startunbounded){s=true}else if("start"in t){if(t.startinclusive){s=i>=t.start}else{s=i>t.start}}if(t.stopunbounded){n=true}else if("stop"in t){if(t.stopinclusive){n=i<=t.stop}else{n=i<t.stop}}r=s&&n}if(r)break}}else if(e.term.type=="condition"){const t=getPrecomputedKey(e);const s=i&&i[t];if(s){r=Array.isArray(s)?e.values.find((t=>s.includes(t.key))):e.values.find((t=>t.key==s))}}else if(e.term.type=="survival"){if(i===undefined){if(e.isnot)r=!r;if(r)n++;continue}const t=e.valueset?e.valueset:new Set(e.values.map((t=>t.key)));r=t.has(i)}else if(e.term.type=="geneVariant"&&e.legendFilterType=="geneVariant_hard"){const t=e.values[0];r=i.find((e=>{for(const s of e.values){if(s.dt==t.dt&&(!s.origin||s.origin==t.origin)&&t.mclasslst.includes(s.class))return true}}))&&true}else if(e.term.type==u.SINGLECELL_GENE_EXPRESSION);else{throw"unknown term type"}if(e.isnot){r=!r}if(r)n++}if(e.join=="or"&&n)return true}if(n==i.length)return true}function Y(t,e){const s=JSON.parse(JSON.stringify(t));if(!s.term1)s.term1=s.term?s.term:{};if(!s.term1_q)s.term1_q={};if(!s.term0)s.term0={};if(!s.term0_q)s.term0_q={};if(!s.term2)s.term2={};if(!s.term2_q)s.term2_q={};if(!s.filter)s.filter={type:"tvslst",join:"",lst:[]};const i=Z(s,e);return i.tree.results}const Q=JSON.stringify({"@before()":"=prep()","@join()":{idVal:"=idVal()"},results:{"_2:maxAcrossCharts":"=maxAcrossCharts()",charts:[{chartId:"@key",total:"+1","_1:maxSeriesTotal":"=maxSeriesTotal()","@done()":"=filterEmptySeries()",serieses:[{total:"+1",seriesId:"@key",max:"<&idVal.dataVal","~values":["&idVal.dataVal",0],"~sum":"+&idVal.dataVal","__:boxplot":"=boxplot()","~samples":["$sample","set"],data:[{dataId:"@key",total:"+1"},"&idVal.dataId[]"]},"&idVal.seriesId[]"]},"&idVal.chartId[]"],"~sum":"+&idVal.seriesVal","~values":["&idVal.seriesVal",0],"__:boxplot":"=boxplot()",refs:{cols:["&idVal.seriesId[]"],colgrps:["-"],rows:["&idVal.dataId[]"],rowgrps:["-"],col2name:{"&idVal.seriesId[]":{name:"@branch",grp:"-"}},row2name:{"&idVal.dataId[]":{name:"@branch",grp:"-"}},"__:useColOrder":"=useColOrder()","__:useRowOrder":"=useRowOrder()","__:bins":"=bins()","@done()":"=sortColsRows()"},"@done()":"=sortCharts()"}});function Z(t,e){const s={categorical:tt,integer:et,float:et,undefined:st};return new y({data:e,seed:`{"values": []}`,template:Q,"=":{idVal(i,n){const[a,r]=s[t.term0.type](i.data,t.term0,t.term0_q,e);const[o,l]=s[t.term1.type](i.data,t.term1,t.term1_q,e);const[d,c]=s[t.term2.type](i.data,t.term2,t.term2_q,e);return{chartId:a,chartVal:r,seriesId:o,seriesVal:l,dataId:d,dataVal:c}},prep(e){return X(e.data,t.filter)},maxSeriesTotal(t,e){let s=0;for(const t of e.self.serieses){if(t&&t.total>s){s=t.total}}return s},maxAcrossCharts(t,e){let s=0;for(const t of e.self.charts){if(t.maxSeriesTotal>s){s=t.maxSeriesTotal}}return s},boxplot(t,e){if(!e.self.values||!e.self.values.length)return;const s=e.self.values.filter((t=>t!==null&&!isNaN(t)));if(!s.length)return;s.sort(((t,e)=>t-e));const i=it(s.map((t=>({value:+t}))));i.mean=e.self.sum/s.length;let n=0;for(const t of s){n+=Math.pow(t-i.mean,2)}i.sd=Math.sqrt(n/(s.length-1));if(isNaN(i.sd))i.sd=null;return i},numSamples(t,e){return e.self.samples.size},filterEmptySeries(t){const e=t.serieses.filter((t=>t.total));t.serieses.splice(0,t.serieses.length,...e)},sortColsRows(e){if(t.term1_q.orderedLabels){const s=t.term1_q.orderedLabels;e.cols.sort(((t,e)=>s.indexOf(t)-s.indexOf(e)))}if(t.term2.orderedLabels){const s=t.term2_q.orderedLabels;e.rows.sort(((t,e)=>s.indexOf(t)-s.indexOf(e)))}},sortCharts(t){},useColOrder(){return t.term1_q.orderedLabels&&t.term1_q.orderedLabels.length>0},useRowOrder(){return t.term2_q.orderedLabels&&t.term2_q.orderedLabels.length>0},bins(){return[t.term0_q,t.term1_q,t.term2_q].map((t=>t.computed_bins))},q(){}}})}function tt(t,e){const s="id"in e?t[e.id]:"-";const i="id"in e&&o(t[e.id])?+t[e.id]:0;return[[s],i]}function et(t,e,s,i){if(!("id"in e)||!(e.id in t))return[[],undefined];if(!s.computed_bins){const t={};i.map((s=>{if(!o(s.data[e.id]))return;const i=+s.data[e.id];if(!("min"in t)||t.min>i)t.min=i;if(!("max"in t)||t.max<i)t.max=i}));s.computed_bins=b(s,(e=>t));s.orderedLabels=s.computed_bins.map((t=>t.label))}const n=t[e.id];if(e.values&&n in e.values&&e.values[n].uncomputable){return[[e.values[n].label],undefined]}if(o(t[e.id])){const t=[];for(const e of s.computed_bins){if(e.startunbounded){if(n<e.stop){t.push(e.label)}else if(e.stopinclusive&&n===e.stop){t.push(e.label)}}else if(e.stopunbounded){if(n>e.start){t.push(e.label)}else if(e.stopinclusive&&n===e.start){t.push(e.label)}}else if((n>e.start||n===e.start&&e.startinclusive)&&(n<e.stop||n===e.stop&&e.stopinclusive)){t.push(e.label)}if(t.length)break}return[t,n]}return[[],undefined]}function st(){return[["-"],undefined]}function it(t){const e=t.length;if(e<5){return{out:t}}const s=t[Math.floor(e/2)].value;const i=t[Math.floor(e/4)].value;const n=t[Math.floor(e*3/4)].value;const a=t[Math.floor(e*.05)].value;const r=t[Math.floor(e*.95)].value;t[Math.floor(e*.01)].value;const o=n-i;let l,d;if(o==0){l=0;d=0}else{const s=t.findIndex((t=>t.value>i-o*1.5));l=t[s==-1?0:s].value;const a=t.findIndex((t=>t.value>n+o*1.5));d=t[a==-1?e-1:Math.max(0,a-1)].value}const c=t.filter((t=>t.value<i-o*1.5||t.value>n+o*1.5));return{w1:l,w2:d,p05:a,p25:i,p50:s,p75:n,p95:r,iqr:o,out:c}}function nt(t,e){if(!e||!e.length){return{lst:Object.keys(t.term.values).map((e=>({key:e,label:t.term.values[e].label,value:e})))}}const s=new y({data:e,template:JSON.stringify({"@before()":"=prep()","@join()":{idVal:"=idVal()"},results:{"&idVal.id":{samplecount:"+1",":__key":"&idVal.id",":__label":"&idVal.id",":__value":"&idVal.id"}}}),"=":{prep(e){return X(e.data,t.filter)},idVal(e,s){const[i,n]=tt(e.data,t.term);return{id:i[0],value:n}}}});return{lst:Object.values(s.tree.results)}}var at=Object.freeze({__proto__:null,getBarchartData:Y,getCategoryData:nt});function rt(t,e){t.sort(((t,e)=>t-e));const s=Math.abs(e/100*t.length-1);const i=Number.isInteger(s)?(t[s]+t[s+1])/2:t[Math.ceil(s)];return i}class ot extends P{constructor(t){super(t);this.datarows=[];if(t.state.vocab.sampleannotation){const e=t.state.vocab.sampleannotation;Object.keys(e).forEach((t=>this.datarows.push({sample:t,data:e[t]})))}}getTermdbConfig(){return{selectCohort:this.vocab.selectCohort,supportedChartTypes:[]}}getTermChildren(t,e){const s=(e||[]).slice().sort().join(",");const i=t.__tree_isroot?null:t.id;return{lst:this.vocab.terms.filter((t=>t.parent_id===i&&(!s.length||s===t.cohortValues.slice().sort.join(","))))}}async getNestedChartSeriesData(t){const e={term1:t.term?t.term.term:{},term1_q:t.term?t.term.q:undefined,term0:t.term0?t.term0.term:undefined,term0_q:t.term0?t.term0.q:undefined,term2:t.term2?t.term2.term:undefined,term2_q:t.term2?t.term2.q:undefined,filter:this.state.termfilter&&this.state.termfilter.filter};return Y(e,this.datarows)}syncTermData(t,e,s={}){if(!e||!e.refs)return;for(const[s,i]of["term0","term","term2"].entries()){const n=t[i];if(n=="genotype")return;if(!n){if(i=="term")throw`missing plot.term{}`;return}if(e.refs.bins){n.bins=e.refs.bins[s];if(e.refs.q&&e.refs.q[s]){if(!n.q)n.q={};const t=e.refs.q[s];if(t!==n.q){for(const t in n.q)delete n.q[t];Object.assign(n.q,t)}}}if(!n.q)n.q={}}}async findTerm(t,e,s=null){return{lst:this.vocab.terms.filter((s=>s.name.includes(t)&&(!e||e===s.cohortValues.slice().sort.join(","))))}}async getTermInfo(e){const s=this.vocab.find((t=>t.id===e));if(!s)return undefined;return{terminfo:t.info}}async getCohortSampleCount(t){if(!t)return;const e=this.vocab.find((t=>t.id===id));if(!e||!e.cohortValues.includes(t))return;if(!e.samplecount)e.samplecount={};if(!(t in e.samplecount)){e.samplecount[t]=Object.keys(this.vocab.sampleannotation).length}return{samplecount:e.samplecount[t]}}async getCohortsData(t){return null}async getFilteredSampleCount(t){return"TBD"}async getDensityPlotData(t,e,s){if(!this.datarows||!this.datarows.length){const e=this.vocab.terms.find((e=>e.id===t));e.range&&e.range;return{minvalue:e.range&&e.range.start,maxvalue:e.range&&e.range.stop}}const i=[];const n=new Set;let a,r,d=0;let c={};for(const t of this.datarows){if(c[t.sample])continue;const e=t.s||t.data;if(e&&X(e,s)){c[t.sample]=this.vocab.sampleannotation[t.sample]}}for(const e in c){if(!(t in this.vocab.sampleannotation[e]))continue;const s=this.vocab.sampleannotation[e][t];if(o(s)){const t=+s;d+=1;if(a===undefined||t<a)a=t;if(r===undefined||t>r)r=t;i.push(t);n.add(t)}}const f=this.vocab.terms.find((e=>e.id==t));const p=40;const m=f.type=="integer"&&r-a<p?r-a:f.type=="float"&&n.size<p?n:p;const u=l().domain([a,r]).range([e.plot_size.xpad,e.plot_size.width-e.plot_size.xpad]);const h=lt(u.ticks(m))(i);return{density:h,densitymax:h.reduce(((t,e,s)=>s===0||e[1]>t?e[1]:t),0),minvalue:a,maxvalue:r,samplecount:d}}async getPercentile(t,e,s){if(e.find((t=>!Number.isInteger(t))))throw"non-integer percentiles found";if(Math.max(...e)>99||Math.min(...e)<1)throw"percentiles must be between 1-99";const i=[];const n=[];const a={};for(const t of this.datarows){if(a[t.sample])continue;const e=t.s||t.data;if(e&&X(e,s)){a[t.sample]=this.vocab.sampleannotation[t.sample]}}for(const e in a){if(!(t in this.vocab.sampleannotation[e]))continue;const s=Number(this.vocab.sampleannotation[e][t]);if(!Number.isFinite(s))throw"non-numeric value";n.push(s)}n.sort(((t,e)=>t-e));for(const t of e){const e=Math.abs(t/100*n.length-1);const s=Number.isInteger(e)?(n[e]+n[e+1])/2:n[Math.ceil(e)];i.push(s)}return{values:i}}async getDescrStats(t,e,s){const i=[];const n={};for(const t of this.datarows){if(n[t.sample])continue;const s=t.s||t.data;if(s&&X(s,e)){n[t.sample]=this.vocab.sampleannotation[t.sample]}}for(const e in n){if(!(t in this.vocab.sampleannotation[e]))continue;const s=Number(this.vocab.sampleannotation[e][t]);if(!Number.isFinite(s))throw"non-numeric value";i.push(s)}i.sort(((t,e)=>t-e));const a=i.length;const r=i.reduce(((t,e)=>t+e),0);const o=r/a;const l=rt(i,25);const d=rt(i,50);const c=rt(i,75);const f=i.map((t=>(t-o)**2)).reduce(((t,e)=>t+e),0);const p=f/(i.length-1);const m=Math.sqrt(p);const u=Math.min(...i);const y=Math.max(...i);return{values:[{id:"total",label:"n",value:a},{id:"min",label:"Minimum",value:h(u,2)},{id:"p25",label:"1st quartile",value:h(l,2)},{id:"median",label:"Median",value:h(d,2)},{id:"mean",label:"Mean",value:h(o,2)},{id:"p75",label:"3rd quartile",value:h(c,2)},{id:"max",label:"Maximum",value:h(y,2)},{id:"sd",label:"Standard deviation",value:h(m,2)}]}}async getTerms(t,e=null,s=null){if(!t)throw"getTerms: ids missing";if(!Array.isArray(t))throw`invalid ids`;const i={};for(const e of t){const t=this.vocab.terms.find((t=>t.id===e));if(t)i[e]=t}return i}async getterm(t){if(!t)throw"getterm: termid missing";return this.vocab.terms.find((e=>e.id==t))}async getCategories(t,e,s=null){const i={term:t,filter:e};const n=nt(i,this.datarows);return n}getNumericUncomputableCategories(t,e){throw"to be implemented!! getNumericUncomputableCategories"}graphable(t){if(!t)throw"graphable: term is missing";return L(t).has("plot")}q_to_param(t){const e=JSON.parse(JSON.stringify(t));delete e.hiddenValues;return encodeURIComponent(JSON.stringify(e))}}function lt(t){return e=>{const s=[];for(let e=0;e<t.length;e++)s.push([t[e],0]);for(const i of e){for(let e=1;e<t.length;e++){if(i<=t[e]){s[e-1][1]++;break}}}return s}}function dt(t){if(t.vocab&&!t.state){t.state={vocab:t.vocab}}if(!t.state)throw"missing opts.state";if(!t.state.vocab){t.state.vocab=t.vocab?t.vocab:{}}const e=t.state.vocab;if(t.state.genome){e.genome=t.state.genome;delete t.state.genome}if(t.state.dslabel){e.dslabel=t.state.dslabel;delete t.state.dslabel}if(e.dslabel){return new H(t)}else if(e.terms){return new ot(t)}}function ct(t){const e=JSON.parse(JSON.stringify(t));delete e.hiddenValues;return encodeURIComponent(JSON.stringify(e))}function ft({samples:t,sample_attributes:e}){const s={__root:{id:"root",name:"root",__tree_isroot:true}};const i={};for(const n of t){const t=n.sample;if(!i[t])i[t]={};Object.assign(i[t],n.s);for(const t in n.s){if(!s[t]){const i=e[t]&&e[t].label?e[t].label:t;s[t]={id:t,name:i,parent_id:null,type:e[t].type=="float"?"float":e[t].type=="integer"?"integer":"categorical",values:{},isleaf:true}}const i=s[t];if(!("id"in i))i.id=t;if(!("parent_id"in i))i.parent_id=null;if(!("values"in i))i.values={};if(!("isleaf"in i))i.isleaf=true;if(!i.computableVals&&(i.type=="float"||i.type=="integer")){i.computableVals=[]}const a=n.s[t];if(i.type=="categorical"){i.groupsetting={disabled:true};if(!(a in i.values)){i.values[a]={key:a,label:a}}}else if(i.type=="integer"||i.type=="float"){if(a==="Not Available"&&!(a in i.values)){i.values[a]={label:a,uncomputable:true}}if(!(a in i.values)){if(!o(n.s[t]))throw`non-numeric term value='${a}' for term='${t}'`;n.s[t]=Number(n.s[t]);const e=n.s[t];i.computableVals.push(e)}}else if(i.type=="condition");else if(i.type==u.SINGLECELL_GENE_EXPRESSION);else{throw"Term type not supported:"+i.type}}}for(const t in s){const e=s[t];if((e.type=="integer"||e.type=="float")&&!e.bins){e.bins={default:B(e.computableVals)};delete e.computableVals}}return{sampleannotation:i,terms:Object.values(s)}}var pt=Object.freeze({__proto__:null,vocabInit:dt,q_to_param:ct,getVocabFromSamplesArray:ft});const mt={joinWith:["and","or"]};class ut{constructor(t){this.opts=this.validateOpts(t);this.dom={holder:t.holder,controlsTip:new e({padding:"0px",parent_menu:this.opts.holder.node()&&this.opts.holder.node().closest(".sja_menu_div")}),treeTip:new e({padding:"5px",offsetX:20,offsetY:-34,clearSelector:".sja_term_src_body"})};this.durations={exit:500};this.lastId=0;this.categoryData={};this.pills={};E(this);$(this);this.initUI();this.filter={type:"tvslst",tag:"filterUiRoot",join:"and",in:true,lst:[]};this.promises={}}validateOpts(t){const e=Object.assign({},mt,t);if(!e.holder)throw".holder missing";if(e.vocabApi){this.vocabApi=e.vocabApi}else{if(!e.vocab)throw".vocab missing";if(e.vocab.dslabel){if(!e.vocab.genome)throw"vocab.genome missing"}else{if(!e.vocab.terms)throw"vocab.terms missing"}}if(typeof e.callback!="function")throw".callback() is not a function";if(e.getVisibleRoot&&typeof e.getVisibleRoot!="function")throw".getVisibleRoot() must be a function if set as an option";if(!e.emptyLabel)e.emptyLabel="+NEW";return e}async main(t,e={}){this.promises.postRender=new Promise(((t,e)=>{this.mainResolve=t;this.mainReject=e}));this.numProcessedItems=0;this.numExpectedItems=0;this.opts=Object.assign({},this.opts,e);this.activeCohort=this.opts.activeCohort;this.rawCopy=t;this.rawFilter=JSON.parse(this.rawCopy);this.validateFilter(this.rawFilter);this.filter=N(this.rawFilter,"filterUiRoot");if(!this.filter){this.filter=this.rawFilter;this.filter.tag="filterUiRoot"}await this.resetActiveData(this.filter);this.removeBlankPill();this.dom.newBtn.style("display",this.opts.newBtn?"":this.filter.lst.length==0?"inline-block":"none");this.dom.holder.selectAll(".sja_filter_add_transformer").style("display",this.getAddTransformerBtnDisplay);this.setVocabApi();this.updateUI(this.dom.filterContainer,this.filter);return this.promises.postRender}validateFilter(t){if(!("$id"in t))t.$id=this.lastId++;else if(this.lastId<=t.$id)this.lastId=t.$id+1;if(!("type"in t))throw"missing filter.type";if(t.type!="tvs"&&t.type!="tvslst")throw"invalid filter.type";if(t.type!="tvslst")return;if(!Array.isArray(t.lst))throw"invalid or missing filter.lst[]";if(t.lst.length>1){if(t.join!="and"&&t.join!="or")throw"invalid filter.join value for lst.length > 1"}else if(t.join!==""){throw"filter.join must be an empty string when lst.length < 2"}if(!t.lst.length)t.in=true;for(const[e,s]of t.lst.entries()){this.validateFilter(s)}}resetActiveData(t){if(this.dom.controlsTip.d.style("display")=="none"){this.activeData={item:{},filter:{}}}else{this.activeData={item:S(t,this.activeData.item.$id),filter:S(t,this.activeData.filter.$id),menuOpt:this.activeData.menuOpt}}}refresh(t){this.dom.controlsTip.hide();this.dom.treeTip.hide();const e=JSON.parse(JSON.stringify(this.rawFilter));delete e.tag;t.tag="filterUiRoot";const s=k(e,this.filter.$id);if(!s||this.rawFilter.$id===this.filter.$id){this.api.main(t);this.opts.callback(t)}else{const i=s.lst.findIndex((t=>t.$id==this.filter.$id));s.lst[i]=t;this.api.main(e);this.opts.callback(t)}}getId(t){return t.$id}getFilterExcludingPill(t){const e=JSON.parse(JSON.stringify(this.rawFilter));const s=k(e,t);const i=s.lst.findIndex((e=>e.$id===t));if(i==-1)return null;s.lst.splice(i,1);return I(e)}getAdjustedRoot(t,e){const s=JSON.parse(JSON.stringify(this.rawFilter));if(e=="and")return s;const i=N(s,"cohortFilter");const n=k(s,t);if(!n){return{type:"tvslst",in:true,join:"and",lst:i?[i]:[]}}const a=n.lst.findIndex((t=>t.$id===n.$id));if(a==-1)return{type:"tvslst",in:true,join:"and",lst:i?[i]:[]};n.lst.splice(a,1);if(i&&!n.lst.find((t=>t===i))){return I({type:"tvslst",join:"and",lst:[i,n]})}return I(n)}setVocabApi(){if(!this.vocabApi){const t={getState:()=>{const t=JSON.parse(this.rawCopy);const e=N(t,"cohortFilter");if(e&&this.opts.termdbConfig){e.tvs.values=this.activeCohort==-1||this.activeCohort===undefined?[]:this.opts.termdbConfig.selectCohort.values[this.activeCohort].keys.map((t=>({key:t,label:t})))}return{vocab:this.opts.vocab,termfilter:{filter:t},tree:{plots:{}}}}};const e=t.getState();const s=e.vocab||{genome:e.genome,dslabel:e.dslabel};if(!this.vocabApi){this.vocabApi=dt({app:t,state:{vocab:s}})}}this.vocabApi.main()}updatePromise=function(t=1){if(!this.mainResolve)return;this.numProcessedItems+=t;if(this.numExpectedItems==this.numProcessedItems){this.mainResolve();if(this.bus)this.bus.emit("postRender");delete this.mainResolve}}}class ht extends ut{constructor(t){super(t);this.type="filter";this.initHolder()}async preApiFreeze(t){t.main=this.main.bind(this);t.getNormalRoot=()=>I(this.rawFilter)}getState(t){return{termfilter:t.termfilter,activeCohort:t.activeCohort}}async main(t=null){this.dom.controlsTip.hide();this.dom.treeTip.hide();const e=this.state&&this.state.termfilter;if(!e){this.dom.holder.style("display","none");return}this.dom.holder.style("display","inline-block");const s=JSON.stringify(t||e.filter);super.main(s,{activeCohort:this.state.activeCohort})}initHolder(){const t=this.dom.holder.attr("class","filter_div").style("position","relative").style("width","fit-content").style("margin","10px").style("margin-top","5px").style("display","table").style("border",this.opts.hideLabel?"none":"solid 1px #ddd");if(this.opts.hideLabel){this.dom.filterDiv=t.style("display","inline-block").style("padding","5px 10px")}else{t.append("span").text("Filter").style("padding","0 10px");this.dom.filterDiv=t.append("div").style("display","inline-block").style("padding","5px 10px")}}}const yt=d(ht);export{ut as F,N as a,yt as b,A as c,x as d,ft as e,k as f,I as g,X as h,L as i,at as j,pt as k,j as s,dt as v};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as t,X as i}from"./app-
|
|
1
|
+
import{i as t,X as i}from"./app-b369b169.js";import{F as s,g as o}from"./FilterRxComp-701a1480.js";class r extends s{constructor(t){super(t);this.api={main:this.main.bind(this),getNormalRoot:()=>o(this.rawFilter),getPromise:t=>this.promises[t]};if(t.callbacks){this.events=["postInit","postRender","firstRender"];this.bus=new i(this.api,this.events,t.callbacks)}}async main(t,i={}){this.dom.controlsTip.hide();this.dom.treeTip.hide();const s="activeCohort"in i?i.activeCohort:this.activeCohort;const o=JSON.stringify(t);if(this.rawCopy==o&&JSON.stringify(this.activeCohort)==JSON.stringify(s))return;await super.main(o,i)}}const e=t(r);export{e as f};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as t}from"./tslib.es6-1f85f553.js";import{m as i,h as s,ah as e,ag as o,I as r,W as a,f as h,b as n,d as l,M as c,Z as p,ad as d,ae as u,o as f,ai as m}from"./app-a8c4854a.js";import{d as g,a as y}from"./axis-747c801e.js";import{p as x}from"./pointer-c7475677.js";import{b as v}from"./block.lazyload-9f031cac.js";import{C as w}from"./ColorScale-9c76aef3.js";import{h as b}from"./parseData-e66308cd.js";import"./axisstyle-fac7f76b.js";class k{constructor(){this.views=["genome","chrpair","detail","horizontal"];this.type="store";this.defaultState={defaultNmeth:"NONE",loading:true,minBinNum_bp:200,minFragSpan:200,initialBinNum:20,settings:{widthHeightPx:800}}}}const D=i(k);k.prototype.actions={view_create(t){if(!t.view)throw Error("view_create: missing view");if(!this.views.some((i=>i==t.view)))throw Error(`view_create: unknown view = ${t.view}`);this.state.currView=t.view;const i=Object.assign(this.state,t.config);this.state=i},view_update(t){if(t.view){if(!this.views.some((i=>i==t.view)))throw Error(`view_update: unknown view = ${t.view}`);const i=Object.assign(this.state[t.view],t.config);this.state[t.view]=i}else{const i=Object.assign(this.state,t.config);this.state=i}},loading_active(t){this.state.loading=t.active}};class M{constructor(t){this.hasStatePreMain=true;this.type="loadingOverlay",this.app=t.app,this.loadingDiv=t.loadingDiv}reactsTo(t){if(t.type.startsWith("loading"))return true;else return false}getState(t){return t}init(){this.loadingDiv.append("div").attr("class","sjpp-spinner").style("display","")}main(t){const i=this.app.getState(t).loading;this.loadingDiv.style("display",i?"":"none")}}const V=s(M);class z{colorizeElement(t,i,s,e,o,r,a,h,n){if(s>=0){const t=s>=h?0:s<=a?255:Math.floor(255*(h-s)/h);const i=`rgb(255, ${t}, ${t})`;if(n==="genome"){e.ctx.fillStyle=i;e.ctx2.fillStyle=i}else{e.fillStyle=i}}else{const t=s<=a?255:Math.floor(255*(h+s)/h);const i=`rgb(${t}, ${t}, 255)`;if(n==="genome"){e.ctx.fillStyle=i;e.ctx2.fillStyle=i}else{e.fillStyle=i}}if(n==="genome"){e.ctx.fillRect(i,t,o,r);e.ctx2.fillRect(t,i,o,r)}else{e.fillRect(t,i,o,r)}}}class R{constructor(t){this.error=t}getResolution(t,i){if(t.currView=="genome")return i["bpresolution"][0];if(t.currView=="chrpair"){const s=this.getChrPairResolution(i,t.x,t.y,t.minBinNum_bp);return s}else if(t.currView=="detail"){const s=Math.max(t.x.stop-t.x.start,t.y.stop-t.y.start);let e=this.findResFromArray(s,t.minBinNum_bp,i.bpresolution);if(e==null&&!i.enzyme){e=i.bpresolution[i.bpresolution.length-1]}return e}else{this.error(`Unknown view: ${t.currView}`);throw`Unknown view: ${t.currView}`}}getChrPairResolution(t,i,s,e){const o=t.genome.chrlookup[i.chr.toUpperCase()].len;const r=t.genome.chrlookup[s.chr.toUpperCase()].len;const a=Math.max(o,r);const h=this.findResFromArray(a,e,t.bpresolution);if(h==null){this.error(`No suitable resolution for ${i.chr}-${s.chr} pair.`);return}return h}findResFromArray(t,i,s,e){let o=null;for(const e of s){if(t/e>i){o=e;break}}if(e&&o==null){o=s[s.length-1]}return o}getDefaultViewSpan(t,i,s,e,o){const r=this.getChrPairResolution(t,i,s,o);if(!r)return;return r*e}}class ${constructor(t,i){this.error=t;this.resolution=new R(this.error);this.minBinNum_bp=i}setPosition(t,i,s,e,o,r,a){const h=this.resolution.getChrPairResolution(r,e,o,this.minBinNum_bp);const n=h*a;let l=Math.max(1,Math.floor(t*h/s)-n/2);let c=Math.max(1,Math.floor(i*h/s)-n/2);{const t=r.genome.chrlookup[e.chr.toUpperCase()].len;if(l+n>=t){l=t-n}const i=r.genome.chrlookup[o.chr.toUpperCase()].len;if(c+n>i){c=i-n}}const p={chr:e.chr,start:l,stop:l+n};const d={chr:o.chr,start:c,stop:c+n};return[p,d]}}class C{formatData(t,i,s,e,o,r){const a=[];for(const[h,n,l]of i){const i=Math.floor(h/e)*s;const c=Math.floor(n/e)*s;if(t=="genome"){a.push([i,c,l])}if(t=="chrpair"){const t=o?i:c;const s=o?c:i;a.push([t,s,l]);if(r){a.push([s,t,l])}}}return a}}class L{constructor(t,i,s){this.chrorder=t;this.chrx=i;this.chry=s}isFirstX(){if(this.chrx==this.chry)return true;return this.chrorder.indexOf(this.chrx)<this.chrorder.indexOf(this.chry)}}class S{constructor(t){this.binpx=1;this.axispad=10;this.axisLabelFontSize=15;this.calcResolution=null;this.data=[];this.app=t.app;this.hic=t.hic;this.plotDiv=t.plotDiv;this.items=t.items;this.parent=t.parent;this.chrxlen=this.hic.genome.chrlookup[this.parent("state").x.chr.toUpperCase()].len;this.chrylen=this.hic.genome.chrlookup[this.parent("state").y.chr.toUpperCase()].len;this.maxchrlen=Math.max(this.chrxlen,this.chrylen);this.colorizeElement=new z;this.positions=new $(t.error,this.parent("state").minBinNum_bp);this.formattedData=new C}setDefaultBinpx(){if(this.calcResolution==null)return;while(this.binpx*this.maxchrlen/this.calcResolution<600){this.binpx++}}renderAxes(){if(this.calcResolution==null)return;const t=this.plotDiv.yAxis.append("svg");const i=Math.ceil(this.chrylen/this.calcResolution)*this.binpx;t.attr("width",100).attr("height",this.axispad*2+i);t.append("g").attr("data-testid","sjpp-chrpair-svg-y").attr("transform","translate(80,"+(this.axispad+i/2)+")").append("text").text(this.parent("state").y.chr).attr("text-anchor","middle").attr("font-size",this.axisLabelFontSize).attr("font-family",e).attr("dominant-baseline","central").attr("transform","rotate(90)");o({axis:t.append("g").attr("transform",`translate(1, ${this.axispad})`).call(g(r().domain([0,this.chrylen]).range([0,i])).tickFormat(a(".2s"))),showline:true});const s=this.plotDiv.xAxis.append("svg").style("margin-top","-4px");const h=Math.ceil(this.chrxlen/this.calcResolution)*this.binpx;s.attr("height",100).attr("width",this.axispad*2+h);s.append("text").attr("data-testid","sjpp-chrpair-svg-x").text(this.parent("state").x.chr).attr("font-size",this.axisLabelFontSize).attr("font-family",e).attr("x",this.axispad+h/2).attr("text-anchor","middle").attr("y",60);o({axis:s.append("g").attr("transform","translate("+this.axispad+",1)").call(y(r().domain([0,this.chrxlen]).range([0,h])).tickFormat(a(".2s"))),showline:true})}renderCanvas(){const i=this.initDetailView.bind(this);this.canvas=this.plotDiv.plot.append("canvas").attr("data-testid","sjpp-chrpair-canvas").style("margin",this.axispad+"px").on("click",(function(s){return t(this,void 0,void 0,(function*(){const[t,e]=x(s,this);i(t,e)}))})).node();this.canvas.width=Math.ceil(this.chrxlen/this.calcResolution)*this.binpx;this.canvas.height=Math.ceil(this.chrylen/this.calcResolution)*this.binpx;this.ctx=this.canvas.getContext("2d")}initDetailView(t,i){const[s,e]=this.positions.setPosition(t,i,this.binpx,this.parent("state").x,this.parent("state").y,this.hic,this.parent("state").initialBinNum);this.app.dispatch({type:"view_create",view:"detail",config:{x:s,y:e}})}render(){this.calcResolution=this.parent("calcResolution");this.setDefaultBinpx();this.renderAxes();this.renderCanvas();this.update(this.items)}update(t){this.items=t;const i=new L(this.hic.chrorder,this.parent("state").x.chr,this.parent("state").y.chr).isFirstX();const s=this.parent("state").x.chr===this.parent("state").y.chr;this.data=this.formattedData.formatData("chrpair",t.items,this.binpx,this.calcResolution,i,s);this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height);for(const[t,i,s]of this.data){this.colorizeElement.colorizeElement(t,i,s,this.ctx,this.binpx,this.binpx,this.parent("min"),this.parent("max"),"chrpair")}this.app.dispatch({type:"loading_active",active:false})}}class B{constructor(t){this.maxPercentage=5;this.subPanelPxWidth=600;this.borderColor="rgba(200,0,0,.1)";this.app=t.app;this.hic=t.hic;this.plotDiv=t.plotDiv;this.items=t.items;this.parent=t.parent}setRunPpTracks(){const t=[{type:"hicstraw",file:this.hic.file,url:this.hic.url,name:this.hic.name,enzyme:this.hic.enzyme,maxpercentage:this.maxPercentage,pyramindup:1}];if(this.hic.tklst){for(const i of this.hic.tklst){t.push(i)}}h(this.hic.genome,t);return t}setRunPpArgs(t){const i={holder:this.plotDiv.plot,hostURL:this.hic.hostURL,jwt:this.hic.jwt,genome:this.hic.genome,nobox:1,tklst:t};const s=this.parent("state");if(s.x.chr==s.y.chr&&Math.max(s.x.start,s.y.start)<Math.min(s.x.stop,s.y.stop)){i["chr"]=s.x.chr;i["start"]=Math.min(s.x.start,s.y.start);i["stop"]=Math.max(s.x.stop,s.y.stop)}else{i["chr"]=s.x.chr;i["start"]=s.x.start;i["stop"]=s.x.stop;i["width"]=this.subPanelPxWidth;i["subpanels"]=[{chr:s.y.chr,start:s.y.start,stop:s.y.stop,width:this.subPanelPxWidth,leftpad:10,leftborder:this.borderColor}]}return i}render(){const t=this.setRunPpTracks();const i=this.setRunPpArgs(t);v(i)}}class N{constructor(t,i,s,e,o,r){this.leftheadw=20;this.rightheadw=40;this.lpad=1;this.rpad=1;this.firstRender=true;this.app=t;this.hic=i;this.width=s;this.bbmargin=e;this.holder=o;this.isYblock=r;this.bbw=this.leftheadw+this.lpad+this.width+this.rpad+this.rightheadw+2*this.bbmargin;this.defaultLeft=this.bbmargin+this.leftheadw+this.lpad;this.defaultTop=this.bbmargin+this.rightheadw+this.rpad}setArgs(t){const i={hostURL:this.hic.hostURL,genome:this.hic.genome,holder:this.holder,noresize:true,nobox:true,butrowbottom:true,style:{margin:`${this.bbmargin}px`},width:this.width,leftheadw:this.leftheadw,chr:t.chr,start:t.start,stop:t.stop,rightheadw:this.rightheadw,tklst:[],rotated:this.isYblock,showreverse:this.isYblock};h(this.hic.genome,i.tklst);return i}setMethods(t,i,s){const e={onloadalltk_always:()=>{this.onload(t,i,s)},onpanning:t=>this.onpanning(t,i)};if(this.isYblock){e["onsetheight"]=t=>{this.holder.transition().style("left",`${t+this.bbmargin+30}px`)}}return e}onload(t,i,s){this.bbw=this.block.leftheadw+this.block.lpad+this.block.width+this.block.rpad+this.block.rightheadw+2*this.bbmargin;if(this.isYblock){s.transition().style("height",`${this.bbw}px`);t.style("height",`${this.bbw}px`)}else t.style("width",`${this.bbw}px`);if(this.isYblock){this.defaultTop=this.bbmargin+this.block.rightheadw+this.block.rpad;i.style("top",`${this.defaultTop}px`)}else{this.defaultLeft=this.bbmargin+this.block.leftheadw+this.block.lpad;i.style("left",`${this.defaultLeft}px`)}const e={[this.isYblock?"y":"x"]:{chr:this.block.rglst[0].chr,start:this.block.rglst[0].start,stop:this.block.rglst[0].stop}};if(this.firstRender==false){this.app.dispatch({type:"view_update",config:e})}else{this.firstRender=false}}onpanning(t,i){if(!this.isYblock)i.style("left",`${t+this.defaultLeft}px`);else i.style("top",`${-t+this.defaultTop}px`)}loadBlock(i,s,e,o){return t(this,void 0,void 0,(function*(){const r=this.setArgs(i);const a=this.isYblock?this.setMethods(s,e,o):this.setMethods(s,e);const h=Object.assign(r,a);yield v(h).then((i=>t(this,void 0,void 0,(function*(){this.block=i}))))}))}}class P{constructor(t){this.obj={rglst:[]};this.errList=t}isFragData(t,i){if(i!=null)return;if(!t.enzyme){i=t.bpresolution[t.bpresolution.length-1];return}}formatFragArgs(t,i){const s={getdata:1,getBED:1,file:t,rglst:[i]};return s}getBedData(i){return t(this,void 0,void 0,(function*(){try{return yield n("tkbedj",{method:"POST",body:JSON.stringify(i)})}catch(t){this.errList.push(t.message||t);if(t.stack)console.error(t.stack)}}))}getXFragData(i,s,e){return t(this,void 0,void 0,(function*(){this.isFragData(i,s);if(!i.enzymefile)return;const t=this.formatFragArgs(i.enzymefile,e);return yield this.getBedData(t)}))}getYFragData(i,s){return t(this,void 0,void 0,(function*(){const t=this.formatFragArgs(i.enzymefile,s);return yield this.getBedData(t)}))}fetchData(i,s,e,o,r,a){return t(this,void 0,void 0,(function*(){const t={matrixType:s.matrixType,file:i.file,url:i.url,pos1:this.determinePosition(i,o,a===null||a===void 0?void 0:a.x),pos2:this.determinePosition(i,r,a===null||a===void 0?void 0:a.y),nmeth:s.nmeth,resolution:e};if(a)t["isfrag"]=true;try{const i=n("hicdata?",{method:"POST",body:JSON.stringify(t)});if(i.error){this.errList.push(i.error)}return i}catch(t){this.errList.push(t.message||t);if(t.stack)console.error(t.stack)}}))}determinePosition(t,i,s){if(s){return`${t.nochr?i.chr.replace("chr",""):i.chr}:${s.start}:${s.stop}`}else{return`${t.nochr?i.chr.replace("chr",""):i.chr}:${i.start}:${i.stop}`}}}class E{constructor(t,i){this.id2coord=new Map;this.min=null;this.max=null;this.items=[];this.errLst=t;for(const t of i){if(!t.rest||!t.rest[0]){this.errLst.push("items[].rest data problem")}const i=Number.parseInt(t.rest[0]);if(Number.isNaN(i)){this.errLst.push(`${t.start}.${t.stop} invalid fragment id: ${t.rest[0]}`)}this.id2coord.set(i,[t.start,t.stop]);if(this.min==null){this.min=i;this.max=i}else{this.min=Math.min(this.min,i);this.max=Math.max(this.max,i)}}}}class _{constructor(t,i,s){this.frag={x:{},y:{}};this.hic=t;this.errList=i;this.dataFetcher=new P(i);this.parent=s}getFragData(i,s){return t(this,void 0,void 0,(function*(){try{const t=yield this.dataFetcher.getXFragData(this.hic,this.parent("calcResolution"),i);if(t){if(!t.items){this.errList.push(`No fragment data returned for ${i.chr}:${i.start}-${i.stop}`);return}const e=new E(this.errList,t.items);if(this.errList.length)return;this.frag.x={id2coord:e.id2coord,start:e.min,stop:e.max};const o=yield this.dataFetcher.getYFragData(this.hic,s);if(this.errList.length)return;if(o){if(!o.items){this.errList.push(`No fragment data returned for ${s.chr}:${s.start}-${s.stop}`);return}const t=new E(this.errList,o.items);if(this.errList.length)return;this.frag.y={id2coord:new Map,start:t.min,stop:t.max};this.determineMap(t.id2coord,i,s)}}}catch(t){this.errList.push(t.message||t);if(t.stack)console.error(t.stack)}}))}determineMap(t,i,s){if(i.chr==s.chr){for(const[i,s]of t){this.frag.x["id2coord"].set(i,s)}this.frag.y["id2coord"]=this.frag.x["id2coord"]}else{this.frag.y["id2coord"]=t}}getData(i,s,e){return t(this,void 0,void 0,(function*(){return yield this.dataFetcher.fetchData(this.hic,this.parent("state")["detail"],this.parent("calcResolution"),i,s,e)}))}}class j{constructor(t,i){this.hic=t;this.errlist=i}getCoordinates(t,i,s,e,o,r){const a=new L(this.hic.chrorder,t.chr,i.chr).isFirstX();const h=t.chr==i.chr;const n=o/(t.stop-t.start);const l=o/(i.stop-i.start);const c=this.calculateCoordinates(a,h,n,l,e,t,i,s,r);return c}calculateCoordinates(t,i,s,e,o,r,a,h,n){const l=[];for(const[c,p,d]of h.items){let h,u,f,m;if(n){const i=t?c:p;const s=t?p:c;if(n.x.id2coord.has(i)){const[t,s]=n.x.id2coord.get(i);h=t;f=s-t}else{this.errlist.push(`[x id error] x: ${i} y: ${s}`);continue}{const t=i+o;if(n.x.id2coord.has(t)){const[i,s]=n.x.id2coord.get(t);f=s-h}}if(n.y.id2coord.has(s)){const[t,i]=n.y.id2coord.get(s);u=t;m=i-t}else{this.errlist.push(`[y id error] x: ${i} y: ${s}`);continue}{const t=s+o;if(n.y.id2coord.has(t)){const[i,s]=n.y.id2coord.get(t);m=s-u}}}else{h=t?c:p;u=t?p:c;f=o;m=o}if(i){if(h>r.start-f&&h<r.stop&&u>a.start-m&&u<a.stop){l.push([Math.floor((h-r.start)*s),Math.floor((u-a.start)*e),Math.ceil(f*s),Math.ceil(m*e),d])}if(u>r.start-m&&u<r.stop&&h>a.start&&h<a.stop){l.push([Math.floor((u-r.start)*s),Math.floor((h-a.start)*e),Math.ceil(m*s),Math.ceil(f*e),d])}continue}l.push([Math.floor((h-r.start)*s),Math.floor((u-a.start)*e),Math.ceil(f*s),Math.ceil(m*e),d])}return l}}class F{constructor(t){this.calcResolution=null;this.binpx=2;this.bbmargin=1;this.app=t.app;this.hic=t.hic;this.plotDiv=t.plotDiv;this.sheath=t.plotDiv.yAxis.append("div").style("position","relative").style("width","200px").style("height","800px");this.rotor=this.sheath.append("div").style("position","absolute").style("bottom","0px").style("transform","rotate(-90deg)").style("transform-origin","left bottom");this.data=t.data;this.parent=t.parent;this.errList=this.parent("errList");this.resolution=new R(t.error);this.colorizeElement=new z;this.viewRangeBpW=this.resolution.getDefaultViewSpan(this.hic,this.parent("state").x,this.parent("state").y,this.parent("state").initialBinNum,this.parent("state").minBinNum_bp);this.dataMapper=new _(this.hic,t.error,t.parent);this.coordinates=new j(this.hic,this.errList)}renderCanvas(t){this.canvasHolder=this.plotDiv.plot.append("div").style("position","relative").style("width",`${this.xBlock.bbw}px`).style("height",`${this.yBlock.bbw}px`).style("overflow","hidden");this.canvas=this.canvasHolder.append("canvas").style("display","block").style("position","absolute").attr("data-testid","sjpp-hic-detail-canvas").attr("width",t).attr("height",t).on("mousedown",(t=>{const i=l(document.body);const s=t.clientX;const e=t.clientY;const o=Number.parseInt(this.canvas.style("left"));const r=Number.parseInt(this.canvas.style("top"));i.on("mousemove",(t=>{const i=t.clientX-s;const a=t.clientY-e;this.xBlock.block.panning(i);this.yBlock.block.panning(a);this.canvas.style("left",`${o+i}px`).style("top",`${r+a}px`)}));i.on("mouseup",(t=>{i.on("mousemove",null).on("mouseup",null);const o=t.clientX-s;const r=t.clientY-e;console.log(o);this.xBlock.block.pannedby(o);this.yBlock.block.pannedby(r)}))}))}render(){return t(this,void 0,void 0,(function*(){this.calcResolution=this.parent("calcResolution");const t=this.parent("state");this.xBlock=new N(this.app,this.hic,t.settings.widthHeightPx,this.bbmargin,this.plotDiv.xAxis,false);this.yBlock=new N(this.app,this.hic,t.settings.widthHeightPx,this.bbmargin,this.rotor,true);this.renderCanvas(t.settings.widthHeightPx);yield this.xBlock.loadBlock(t.x,this.canvasHolder,this.canvas);yield this.yBlock.loadBlock(t.y,this.canvasHolder,this.canvas,this.sheath);this.update(this.data)}))}update(i){return t(this,void 0,void 0,(function*(){if(i.items.length==0){this.app.dispatch({type:"loading_active",active:false});return}this.data=i;const t=this.parent("state");const s=Number.parseInt(this.canvas.attr("width"));const e=Number.parseInt(this.canvasHolder.style("width"))-s+t.settings.widthHeightPx;this.canvasHolder.style("width",`${e}px`).style("height",`${e}px`);this.canvas.attr("width",`${t.settings.widthHeightPx}px`).attr("height",`${t.settings.widthHeightPx}px`);if(this.xBlock.block.width!=t.settings.widthHeightPx){this.xBlock.block.width=t.settings.widthHeightPx;this.yBlock.block.width=t.settings.widthHeightPx;this.xBlock.block.zoom2px(0,s);this.yBlock.block.zoom2px(0,s)}this.ctx=this.canvas.node().getContext("2d");const o=this.coordinates.getCoordinates(t.x,t.y,this.parent("data"),this.parent("calcResolution"),t.settings.widthHeightPx,this.parent("fragData"));this.coords=o;this.ctx.clearRect(0,0,t.settings.widthHeightPx,t.settings.widthHeightPx);for(const[t,i,s,e,o]of this.coords){this.colorizeElement.colorizeElement(t,i,o,this.ctx,s,e,this.parent("min"),this.parent("max"),"detail")}this.app.dispatch({type:"loading_active",active:false})}))}}class T{constructor(t,i){this.label=t;this.width=i}}class A{constructor(t,i,s,e){this.chromosomeMatrix=new Map;this.chromosomeList=[];this.xoff=0;this.yoff=0;this.chr2px=[];this.chrlst=t;let o=this.chrlst.length;for(const t of this.chrlst){const r=Math.ceil(s[t.toUpperCase()].len/i)*e;const a=new T(t,r);this.chromosomeList.push(a);this.chr2px[t]=r;o+=r}this.totalpx=o;for(let t=0;t<this.chrlst.length;t++){const o=this.chrlst[t];this.chromosomeMatrix.set(o,new Map);let r=0;for(let a=0;a<=t;a++){const t=this.chrlst[a];const h=s[o.toUpperCase()].len;const n=s[t.toUpperCase()].len;const l=Math.ceil(h/i)*e;const c=Math.ceil(n/i)*e;this.chromosomeMatrix.get(o).set(t,{x:this.xoff,y:r,xbins:l,ybins:c,data:[]});r+=this.chr2px[t]+A.borderWidth}this.yoff=r;this.xoff+=this.chr2px[o]+A.borderWidth}}}A.checkerFill="#DEF3FA";A.spaceColor="#CCC";A.fontSize=15;A.font=e;A.borderWidth=1;A.defaultChrLabWidth=100;class O{constructor(t){this.grid=new A(t.hic.chrlst,t.resolution||t.hic.bpresolution[0],t.hic.genome.chrlookup,1)}}class U{constructor(t,i,s,e){this.svg=t;this.layerMap=i.attr("transform",`translate(${A.defaultChrLabWidth}, ${A.fontSize})`);this.layerSv=s.attr("transform",`translate(${A.defaultChrLabWidth}, ${A.fontSize})`);this.grid=e}render(){this.renderAxisX(this.grid);this.renderAxisY(this.grid);this.svg.attr("width",A.defaultChrLabWidth+this.grid.xoff).attr("height",A.fontSize+this.grid.yoff)}renderAxisX(t){let i=0;this.grid.chromosomeList.forEach(((s,e)=>{const o=s.width;if(e%2===0){this.layerMap.append("rect").attr("x",i).attr("width",o).attr("height",A.fontSize).attr("y",-A.fontSize).attr("fill",A.checkerFill)}this.layerMap.append("text").attr("font-family",A.font).attr("text-anchor","middle").attr("font-size",12).attr("x",i+o/2).text(s.label);i+=o;this.layerSv.append("line").attr("x1",i).attr("x2",i).attr("y2",t.totalpx).attr("stroke",A.spaceColor).attr("shape-rendering","crispEdges");i+=A.borderWidth}))}renderAxisY(t){let i=0;this.grid.chromosomeList.forEach(((s,e)=>{const o=s.width;if(e%2===0){this.layerMap.append("rect").attr("x",-A.defaultChrLabWidth).attr("width",A.defaultChrLabWidth).attr("height",o).attr("y",i).attr("fill",A.checkerFill)}this.layerMap.append("text").attr("font-family",A.font).attr("text-anchor","end").attr("dominant-baseline","central").attr("font-size",12).attr("y",i+o/2).text(s.label);i+=o;this.layerSv.append("line").attr("x2",t.totalpx).attr("y1",i).attr("y2",i).attr("stroke",A.spaceColor).attr("shape-rendering","crispEdges");i+=A.borderWidth}))}}class H{constructor(){this.chrx_tip=new c({border:"solid 1px #ccc",padding:"0px",offsetX:0,offsetY:0});this.chry_tip=new c({border:"solid 1px #ccc",padding:"0px",offsetX:0,offsetY:0})}render(t,i,s){const e=t.node().getBoundingClientRect();this.chrx_tip.clear().show(e.left,e.top).d.style("top",null).style("bottom",window.innerHeight-e.top-window.pageYOffset+"px").text(i);this.chry_tip.clear().show(e.left,e.top).d.style("left",null).style("right",document.body.clientWidth-e.left-window.pageXOffset+"px").text(s)}}class W{constructor(t,i){this.app=i;this.layerMap=t;this.tooltips=new H}render(i,s,e,o){i.canvas=o.append("canvas").style("display","none").node();i.ctx=i.canvas.getContext("2d");i.canvas.width=i.xbins;i.canvas.height=i.ybins;i.img=this.layerMap.append("image").attr("width",i.canvas.width).attr("height",i.canvas.height).attr("x",i.x).attr("y",i.y).on("click",(()=>t(this,void 0,void 0,(function*(){yield this.app.dispatch({type:"view_create",view:"chrpair",config:{x:{chr:s},y:{chr:e}}})})))).on("mouseover",(()=>{this.tooltips.render(i.img,s,e)}));if(s!=e){i.canvas2=o.append("canvas").style("display","none").node();i.canvas2.width=i.ybins;i.canvas2.height=i.xbins;i.ctx2=i.canvas2.getContext("2d");i.img2=this.layerMap.append("image").attr("width",i.canvas2.width).attr("height",i.canvas2.height).attr("x",i.y).attr("y",i.x).on("click",(()=>t(this,void 0,void 0,(function*(){yield this.app.dispatch({type:"view_create",view:"chrpair",config:{x:{chr:e},y:{chr:s}}})})))).on("mouseover",(()=>{this.tooltips.render(i.img2,e,s)}))}else{i.ctx2=i.ctx}}}class Y{constructor(t,i,s){this.grid=t;this.gridElementRenderer=new W(i,s)}render(t){for(const[i,s]of this.grid.chromosomeMatrix){for(const[e,o]of s){this.gridElementRenderer.render(o,i,e,t)}}}}class I{constructor(t){this.tip=new c;this.pica_x=new c({border:"solid 1px #ccc",padding:"0px",offsetX:0,offsetY:0});this.pica_y=new c({border:"solid 1px #ccc",padding:"0px",offsetX:0,offsetY:0});this.chr2px={};this.lead2follow=new Map;this.values=[];this.defaultChrLabWidth=100;this.borderwidth=1;this.default_maxVPerc=5;this.fontsize=15;this.xoff=0;this.yoff=0;this.binpx=1;this.atdev_chrnum=8;this.min=0;this.max=0;this.app=t.app;this.hic=t.hic;this.plotDiv=t.plotDiv;this.data=t.data;this.parent=t.parent;this.resolution=t.resolution||t.hic.bpresolution[0];this.svg=this.plotDiv.plot.append("svg").attr("data-testid","sjpp-hic-genome-svg");this.layer_map=this.svg.append("g").attr("data-testid","sjpp-hic-layerMap-g");this.layer_sv=this.svg.append("g").attr("data-testid","sjpp-hic-layerSv-g");this.colorizeElement=new z;this.viewModel=new O(t);this.viewRender=new U(this.svg,this.layer_map,this.layer_sv,this.viewModel.grid);this.gridElementsRenderer=new Y(this.viewModel.grid,this.layer_map,this.app);this.gridFormattedData=new C}makeSv(){const t=new Set;const i=8;for(const s of this.hic.sv.items){const e=this.lead2follow.get(s.chr1);if(!e){t.add(s.chr1);continue}const o=e.get(s.chr2);if(!o){t.add(s.chr2);continue}const r=s.position1/this.resolution;const a=s.position2/this.resolution;this.layer_sv.append("circle").attr("stroke","black").attr("fill","white").attr("fill-opacity",0).attr("cx",o.x+r).attr("cy",o.y+a).attr("r",i).on("mouseover",(t=>{this.tooltipSv(t,s)})).on("mouseout",(()=>{this.tip.hide()})).on("click",(()=>{this.clickSv(s)}));if(o.img2){this.layer_sv.append("circle").attr("stroke","black").attr("fill","whilte").attr("fill-opacity",0).attr("cy",o.x+r).attr("cx",o.y+a).attr("r",i).on("mouseover",(t=>{this.tooltipSv(t,s)})).on("mouseout",(()=>{this.tip.hide()})).on("click",(()=>{this.clickSv(s)}))}}}tooltipSv(t,i){this.tip.clear().show(t.clientX,t.clientY).d.append("div").text(i.chr1==i.chr2?`${i.chr1}:${i.position1}-${i.position2}`:`${i.chr1}:${i.position1}>${i.chr2}:${i.position2}`)}clickSv(t){const i=5e5;const s=600;const e="rgba(200,0,0,.1)";const o=p({x:100,y:100});o.header.text(this.hic.name+" "+(t.chr1==t.chr2?`${t.chr1}:${t.position1}-${t.position2}`:`${t.chr1}:${t.position1}>${t.chr2}:${t.position2}`));const r=[{type:d.hicstraw,file:this.hic.file,enzyme:this.hic.enzyme,maxpercentage:this.default_maxVPerc,pyramidup:1,name:this.hic.name}];if(this.hic.tklst){for(const t of this.hic.tklst){r.push(t)}}h(this.hic.genome,r);const a={holder:o.body,hostURL:this.hic.hostURL,jwt:this.hic.jwt,genome:this.hic.genome,nobox:1,tklst:r};if(t.chr1==t.chr2&&Math.abs(t.position2-t.position1)<i*2){a.chr=t.chr1;const i=Math.abs(t.position2-t.position1);a.start=Math.max(1,Math.min(t.position1,t.position2)-i);a.stop=Math.min(this.hic.genome.chrlookup[t.chr1.toUpperCase()].len,Math.max(t.position1,t.position2)+i)}else{a.chr=t.chr1;a.start=Math.max(1,t.position1-i/2);a.stop=Math.min(this.hic.genome.chrlookup[t.chr1.toUpperCase()].len,t.position1+i/2);a.width=s;a.subpanels=[{chr:t.chr2,start:Math.max(1,t.position2-i/2),stop:Math.min(this.hic.genome.chrlookup[t.chr2.toUpperCase()].len,t.position2+i/2),width:s,leftpad:10,leftborder:e}]}v(a)}render(){this.viewRender.render();this.gridElementsRenderer.render(this.hic.holder);if(this.hic.sv&&this.hic.sv.items){this.makeSv()}this.update(this.data)}update(t){this.data=t;this.min=this.parent("min");this.max=this.parent("max");for(const t of this.data){if(!this.hic.chrlst.includes(t.lead)||!this.hic.chrlst.includes(t.follow))continue;const i=this.viewModel.grid.chromosomeMatrix.get(t.lead).get(t.follow);if(!i)continue;i.ctx.clearRect(0,0,i.canvas.width,i.canvas.height);if(i.canvas2){i.ctx2.clearRect(0,0,i.canvas2.width,i.canvas.height)}i.data=this.gridFormattedData.formatData("genome",t.items,this.binpx,this.resolution);for(const[t,s,e]of i.data){this.colorizeElement.colorizeElement(t,s,e,i,this.binpx,this.binpx,this.min,this.max,"genome")}i.img.attr("xlink:href",i.canvas.toDataURL());if(i.canvas2){i.img2.attr("xlink:href",i.canvas2.toDataURL())}}this.app.dispatch({type:"loading_active",active:false})}}class X{constructor(t,i,s,e){this.holder=t;this.normalization=i;this.defaultNmeth=s;this.callback=e}render(){var i;if(!((i=this.normalization)===null||i===void 0?void 0:i.length)){this.nmethSelect=this.holder.text(this.defaultNmeth)}else{this.nmethSelect=this.holder.style("margin-right","10px").append("select").on("change",(()=>t(this,void 0,void 0,(function*(){const t=this.nmethSelect.node().value;this.callback(t,"nmeth")}))));for(const t of this.normalization){this.nmethSelect.append("option").text(t)}}}update(t){const i=this.nmethSelect.node().options;if(!i)return;const s=Array.from(i).find((i=>i.value===t));if(!s)throw`Invalid normalization method: ${t}`;s.selected=true}}class J{constructor(t,i,s){this.holder=t;this.value=i;this.callback=s}render(i){const s=this.holder.style("margin-right","10px").append("input").attr("type","number").style("width",i&&"width"in i?i.width:"80px").style("margin-left","0px").attr("type","number").property("value",this.value).on("keyup",(i=>t(this,void 0,void 0,(function*(){if(i.code!="Enter")return;const t=i.target.value;this.callback(t)}))));return s}}class Z{constructor(t,i){this.values=[{label:"Observed",value:"observed"},{label:"Expected",value:"expected"},{label:"Observed/Expected",value:"oe"},{label:"Log(Observed/Expected)",value:"log(oe)"}];this.holder=t;this.callback=i}render(){this.matrixSelect=this.holder.style("margin-right","10px").append("select").on("change",(()=>t(this,void 0,void 0,(function*(){this.callback(this.matrixSelect.node().value,"matrixType")}))));for(const t of this.values){this.matrixSelect.append("option").text(t.label).attr("value",t.value)}}update(t){const i=this.matrixSelect.node().options;if(!i)return;const s=Array.from(i).find((i=>i.value===t));if(!s)throw`Invalid normalization method: ${t}`;s.selected=true}}class G{constructor(t){this.zoomBlockCallback=t=>{const i=this.parent("detail");i.xBlock.block.zoomblock(2,t);i.yBlock.block.zoomblock(2,t)};this.minCallback=t=>{if(Number(t)>Number(this.parent("max"))){this.error("Min cutoff cannot be greater than max cutoff")}else{this.parent("min",Number(t));this.reColorHeatmap();this.parent("infoBar").update()}};this.maxCallback=t=>{if(Number(t)<Number(this.parent("min"))){this.error(`Max cutoff cannot be less than min cutoff`)}else if(Number(t)<0){this.error(`Max cutoff cannot be less than 0`)}else{this.parent("max",Number(t));this.reColorHeatmap();this.parent("infoBar").update()}};this.reColorHeatmap=()=>{if(this.parent("activeView")=="genome"){const t=this.parent("genome");const i=t.viewRender.grid.chromosomeMatrix;if(!i)return;for(const[t,s]of i){for(const[t,i]of s){if(!i)continue;for(const[t,s,e]of i.data){this.colorizeElement.colorizeElement(t,s,e,i,1,1,this.parent("min"),this.parent("max"),"genome")}i.img.attr("xlink:href",i.canvas.toDataURL());if(i.canvas2){i.img2.attr("xlink:href",i.canvas2.toDataURL())}}}}else if(this.parent("activeView")=="chrpair"){const t=this.parent("chrpair");for(const[i,s,e]of t.data){this.colorizeElement.colorizeElement(i,s,e,t.ctx,t.binpx,t.binpx,this.parent("min"),this.parent("max"),"chrpair")}}else if(this.parent("activeView")=="detail"){const t=this.parent("detail");for(const[i,s,e,o,r]of t.coords){this.colorizeElement.colorizeElement(i,s,r,t.ctx,e,o,this.parent("min"),this.parent("max"),"detail")}}};this.dropdownCallback=(t,i)=>{const s=this.app.getState();this.app.dispatch({type:"view_update",view:s.currView,config:{[i]:t}})};this.type="controlPanel";this.controls={};this.app=t.app;this.controlsDiv=t.controlsDiv;this.hic=t.hic;this.colorizeElement=new z;this.parent=t.parent;this.error=t.error}getState(t){return t}addLabel(t,i){return t.append("td").style("color","#858585").style("font-size",".8em").style("vertical-align",i.toUpperCase()=="VIEW"?"top":"middle").text(i.toUpperCase())}init(){const i=this.app.getState();const s=this.controlsDiv.style("background","rgb(253, 250, 244)").style("vertical-align","top").style("padding","5px").style("border","solid 0.5px #ccc");let e=true;this.controlsDiv.append("button").style("display","block").style("border","none").style("font-size","1.5em").style("background","none").html("≡").on("click",(()=>{e=!e;o.style("display",e?"block":"none")}));const o=s.append("div").attr("class","sjpp-hic-menu").style("display",e?"block":"none");const r=o.append("table").style("border-spacing","3px");this.controls.normalizationRow=r.append("tr");this.addLabel(this.controls.normalizationRow,"NORMALIZATION");this.controls.nmeth=new X(this.controls.normalizationRow.append("td").attr("class","sjpp-nmeth-select"),this.hic.normalization,i.defaultNmeth,this.dropdownCallback);this.controls.nmeth.render();this.controls.minCutoffRow=r.append("tr");this.controls.minCutoffLabel=this.addLabel(this.controls.minCutoffRow,"");this.controls.inputBpMinV=new J(this.controls.minCutoffRow.append("td"),this.parent("min"),this.minCallback).render({width:"120px"});this.controls.maxCutoffRow=r.append("tr");this.controls.maxCutoffLabel=this.addLabel(this.controls.maxCutoffRow,"");this.controls.inputBpMaxV=new J(this.controls.maxCutoffRow.append("td"),this.parent("max"),this.maxCallback).render({width:"120px"});this.controls.matrixTypeRow=r.append("tr");this.addLabel(this.controls.matrixTypeRow,"matrix type");this.controls.matrixType=new Z(this.controls.matrixTypeRow.append("td"),this.dropdownCallback);this.controls.matrixType.render();this.controls.widthRow=r.append("tr");this.addLabel(this.controls.widthRow,"WIDTH / height");this.controls.width=this.controls.widthRow.append("td");this.controls.width.style("margin-right","10px").append("input").attr("type","number").style("width","80px").style("margin-left","0px").attr("type","number").property("value",i.width).on("keyup",(i=>t(this,void 0,void 0,(function*(){if(i.code!="Enter")return;const t=i.target.value;this.app.dispatch({type:"view_update",config:{settings:{widthHeightPx:Number.parseInt(t)}}})}))));const a=r.append("tr");this.addLabel(a,"VIEW");const h=a.append("td");this.controls.view=h.append("span").style("padding-right","5px").style("display","block");this.controls.genomeViewBtn=h.append("button").style("display","none").style("padding","2px").style("margin-top","4px").html("≪ Genome").on("click",(()=>t(this,void 0,void 0,(function*(){yield this.app.dispatch({type:"view_create",view:"genome",config:{x:{},y:{}}})}))));this.controls.chrpairViewBtn=h.append("button").style("display","none").style("padding","2px").style("margin","4px 0px").on("click",(()=>t(this,void 0,void 0,(function*(){const t=this.app.getState();yield this.app.dispatch({type:"view_create",view:"chrpair",config:{x:{chr:t.x.chr},y:{chr:t.y.chr}}})}))));this.controls.horizontalViewBtn=h.append("button").style("display","none").style("padding","2px").style("margin","4px 0px").html("Horizontal View ≫").on("click",(()=>t(this,void 0,void 0,(function*(){yield this.app.dispatch({type:"view_create",view:"horizontal"})}))));this.controls.detailViewBtn=h.append("button").style("display","none").style("padding","2px").style("margin","4px 0px").html("≪ Detailed View").on("click",(()=>t(this,void 0,void 0,(function*(){yield this.app.dispatch({type:"view_create",view:"detail"})}))));this.controls.zoomDiv=r.append("tr").style("display",i.currView=="detail"?"contents":"none");this.addLabel(this.controls.zoomDiv,"ZOOM");const n=this.controls.zoomDiv.append("td");this.controls.zoomIn=n.append("button").style("margin-right","10px").text("In").on("click",(()=>{this.zoomBlockCallback(false)}));this.controls.zoomOut=n.append("button").style("margin-right","10px").text("Out").on("click",(()=>{this.zoomBlockCallback(true)}))}showBtns(){const t=this.app.getState();this.controls.genomeViewBtn.style("display",t.currView==="genome"?"none":"inline-block");if(t.currView==="detail"){this.controls.chrpairViewBtn.html(`≪ Entire ${t.x.chr}-${t.y.chr}`).style("display","block");this.controls.horizontalViewBtn.style("display","block");this.controls.zoomDiv.style("display","contents");this.controls.detailViewBtn.style("display","none")}else if(t.currView==="horizontal"){this.controls.chrpairViewBtn.html(`≪ Entire ${t.x.chr}-${t.y.chr}`).style("display","block");this.controls.detailViewBtn.style("display","block");this.controls.horizontalViewBtn.style("display","none");this.controls.zoomDiv.style("display","none")}else{this.controls.chrpairViewBtn.style("display","none");this.controls.horizontalViewBtn.style("display","none");this.controls.detailViewBtn.style("display","none");this.controls.zoomDiv.style("display","none");this.controls.widthRow.style("display","none")}}showHideControls(){const t=this.app.getState();this.controls.normalizationRow.style("display",t.currView=="horizontal"?"none":"");this.controls.minCutoffRow.style("display",t.currView=="horizontal"?"none":"");this.controls.maxCutoffRow.style("display",t.currView=="horizontal"?"none":"");this.controls.matrixTypeRow.style("display",t.currView=="horizontal"?"none":"");this.controls.widthRow.style("display",t.currView=="detail"?"contents":"none")}main(t){const i=this.app.getState(t);this.controls.nmeth.update(i[i.currView].nmeth);this.controls.matrixType.update(i[i.currView].matrixType);this.controls.zoomDiv.style("display",i.currView=="detail"?"contents":"none");if(i.currView=="chrpair"){this.controls.view.text(`${i.x.chr}-${i.y.chr} Pair`)}else{this.controls.view.text(i.currView.charAt(0).toUpperCase()+i.currView.slice(1))}const s=this.parent("absMin")<1e-5?Number(this.parent("absMin")).toExponential(1):Number(this.parent("absMin").toFixed(6));const e=this.parent("absMax")<1e-5?Number(this.parent("absMax")).toExponential(1):Number(this.parent("absMax").toFixed(6));this.controls.width.select("input").property("value",i.settings.widthHeightPx);this.controls.inputBpMinV.property("value",this.parent("min"));this.controls.inputBpMaxV.property("value",this.parent("max"));this.controls.minCutoffLabel.html(`MIN CUTOFF <br>(>= ${s})`);this.controls.maxCutoffLabel.html(`MAX CUTOFF <br>(<= ${e})`);this.showBtns();this.showHideControls()}}const q=s(G);class K{constructor(t){this.startColor="white";this.endColor="red";this.addLabel=t=>this.labelRow.append("td").style("color","#858585").style("font-size",".8em").style("text-align","center").style("vertical-align","middle").text(t.toUpperCase());this.addValue=t=>this.valueRow.append("td").style("font-size","1em").style("text-align","center").style("vertical-align","middle").text(t);this.type="infoBar";this.app=t.app;this.hic=t.hic;const i=t.infoBarDiv;this.labelRow=i.append("tr");this.valueRow=i.append("tr");this.parent=t.parent}render(){return t(this,void 0,void 0,(function*(){this.addLabel("Version");this.addValue(this.hic.version);this.addLabel("Enzyme");this.addValue(this.hic.enzyme||"N/A");this.addLabel("Resolution");this.resolutionDiv=this.addValue("");this.colorScaleLabel=this.addLabel("Scale");this.colorScaleDiv=this.valueRow.append("td");this.colorScale=new w({barheight:14,barwidth:85,data:[this.parent("min"),this.parent("max")],fontSize:12,height:35,width:120,holder:this.colorScaleDiv,startColor:this.startColor,endColor:this.endColor,position:"20,0",ticks:2,tickSize:3,markedValue:1});this.colorScale.render();this.update()}))}update(){const t=this.parent("calcResolution");let i;if(t<this.hic.bpresolution[this.hic.bpresolution.length-1]){i=`${t} fragment${t>1?"s":""}`}else{i=u(t)}this.resolutionDiv.text(i);if(this.parent("state").currView=="horizontal"){this.colorScaleLabel.style("display","none");this.colorScaleDiv.style("display","none")}else{this.colorScaleLabel.style("display","");this.colorScaleDiv.style("display","");const t=this.parent("min");const i=this.parent("max");if(t<0){this.colorScale.startColor="blue";this.colorScale.data=[t,i]}else{this.colorScale.startColor="white";this.colorScale.data=[0,i]}this.colorScale.markedValue=t;this.colorScale.updateScale()}}}class Q{constructor(t,i){this.hic=t;this.percentile=i?i/100:.99}sortData(t){const i=[];if((t===null||t===void 0?void 0:t.items)&&(t===null||t===void 0?void 0:t.items.length)){for(const s of t.items){i.push(s[2])}}else{const s=new Set;for(const e of t){if(e.lead=="chrM"&&!e.items.length||e.lead=="chrY"&&!e.items.length){s.add(e.lead);continue}for(const t of e.items){i.push(t[2])}}if(s.size){for(const t of s){const i=this.hic.chrlst.indexOf(t);this.hic.chrlst.splice(i,1)}}}const s=i.sort(((t,i)=>t-i));const e=s[Math.floor(s.length*this.percentile)];const o=s[0];return[o,e,s[s.length-1]]}}class tt{constructor(t,i,s=[]){this.data=[];this.hic=t;this.debugmode=i;this.errList=s||[]}getData(i){return t(this,void 0,void 0,(function*(){if(this.data.length)this.data=[];if(!(i===null||i===void 0?void 0:i.matrixType))i.matrixType="observed";try{const t=yield n("hicgenome?",{method:"POST",body:JSON.stringify({chrlst:this.hic.chrlst,nmeth:i.nmeth,resolution:i.resolution,matrixType:i.matrixType,file:this.hic.file,url:this.hic.url,nochr:this.hic.nochr})});if(t.error){const i=t.error.split("\n");for(const t of i){this.errList.push(t)}}return t.data}catch(t){this.errList.push(t.message||t);if(t.stack)console.error(t.stack)}}))}}class it{constructor(t,i,s=[]){this.hic=t;this.debugmode=i;this.errList=s||[]}getData(i){return t(this,void 0,void 0,(function*(){if(!(i===null||i===void 0?void 0:i.matrixType))i.matrixType="observed";const t={matrixType:i.matrixType,file:this.hic.file,url:this.hic.url,pos1:this.hic.nochr?i.lead.replace("chr",""):i.lead,pos2:this.hic.nochr?i.follow.replace("chr",""):i.follow,nmeth:i.nmeth,resolution:i.resolution};try{const s=yield n("hicdata?",{method:"POST",body:JSON.stringify(t)});if(s.error){throw Error(`${i.lead} - ${i.follow}: ${s.error.error}`)}if(!s.items||s.items.length==0)return;return s}catch(t){this.errList.push(t.message||t);if(t.stack)console.error(t.stack)}}))}}class st{constructor(t){this.components={controls:[]};this.genomeData=[];this.calcResolution=null;this.firstRender=true;this.min=0;this.absMin=0;this.max=0;this.absMax=0;this.hasStatePreMain=true;this.type="view";this.hic=t.hic;this.state=t.state;this.dom=t.dom;this.errList=t.errList;this.plotDiv=this.dom.plotDiv.append("table").classed("sjpp-hic-plot-main",true);const i=this.plotDiv.append("tr");const s=this.plotDiv.append("tr");this.plotDiv={plot:i.append("td").classed("sjpp-hic-plot",true).attr("data-testid","sjpp-hic-plot"),yAxis:i.append("td").classed("sjpp-hic-plot-yaxis",true).attr("data-testid","sjpp-hic-yaxis"),xAxis:s.append("td").classed("sjpp-hic-plot-xaxis",true).attr("data-testid","sjpp-hic-xaxis"),blank:s.append("td")};this.app=t.app;this.dataMapper=new Q(this.hic,t.state.maxCutoffPercentile);this.activeView=this.state.currView;this.error=t.error;this.resolution=new R(this.error);this.parent=t=>this[t];this.detailDataMapper=new _(this.hic,this.errList,this.parent)}getState(t){return t}reactsTo(t){if(t.type.startsWith("view"))return true;else return false}initView(){const t={plotDiv:this.plotDiv,hic:this.hic,app:this.app,parent:t=>this[t]};if(this.state.currView=="genome"){t["data"]=this.data;this.genome=new I(t);this.genome.render()}else if(this.state.currView==="chrpair"){t["items"]=this.data;this.chrpair=new S(t);this.chrpair.render()}else if(this.state.currView==="detail"){t["data"]=this.data;this.detail=new F(t);this.detail.render()}else if(this.state.currView==="horizontal"){this.horizontal=new B(t);this.horizontal.render()}else{throw Error(`Unknown view: ${this.state.currView}`)}}fetchData(i){var s,e,o,r,a,h;return t(this,void 0,void 0,(function*(){if((s=this.data)===null||s===void 0?void 0:s.length)this.data=[];if(this.state.currView=="genome"){if(this.activeView!="genome"&&((e=this.genomeData)===null||e===void 0?void 0:e.length))this.data=this.genomeData;else{const t=new tt(this.hic,true,this.errList);this.genomeData=yield t.getData(i);this.data=this.genomeData}}else if(this.state.currView=="detail"){this.data=yield this.detailDataMapper.getData(this.state.x,this.state.y,this.fragData)}else{if(!((r=(o=this.state)===null||o===void 0?void 0:o.x)===null||r===void 0?void 0:r.chr)||!((h=(a=this.state)===null||a===void 0?void 0:a.y)===null||h===void 0?void 0:h.chr)){this.errList.push(`No positions provided for ${this.activeView} view.`);return}else{const t=this.state.x;const s=this.state.y;i["lead"]=`${t.start&&t.stop?`${t.chr}:${t.start}-${t.stop}`:t.chr}`;i["follow"]=`${s.start&&s.stop?`${s.chr}:${s.start}-${s.stop}`:s.chr}`}const t=new it(this.hic,true,this.errList);this.data=yield t.getData(i)}}))}setResolution(i){return t(this,void 0,void 0,(function*(){const t=this.app.getState(i);this.calcResolution=this.resolution.getResolution(t,this.hic);if(t.currView=="detail"&&this.calcResolution==null){yield this.detailDataMapper.getFragData(t.x,t.y);this.fragData=this.detailDataMapper.frag;const i=Math.min(this.fragData.x.stop-this.fragData.x.start,this.fragData.y.stop-this.fragData.y.start);this.calcResolution=this.resolution.findResFromArray(i,t.minFragSpan,this.hic.fragresolution,true)}else{this.fragData=null}return this.calcResolution}))}setDataArgs(i){return t(this,void 0,void 0,(function*(){const t=this.app.getState(i);const s=t[t.currView];const e={nmeth:s.nmeth,resolution:yield this.setResolution(i),matrixType:s.matrixType};if(t.currView=="chrpair"){e["lead"]=t.x.chr;e["follow"]=t.y.chr}return e}))}getViewData(i){var s,e,o,r,a;return t(this,void 0,void 0,(function*(){const t=yield this.setDataArgs(i);yield this.fetchData(t);if(((s=this.data)===null||s===void 0?void 0:s.length)>0||((o=(e=this.data)===null||e===void 0?void 0:e.items)===null||o===void 0?void 0:o.length)>0){const[t,i,s]=this.dataMapper.sortData(this.data);this.min=this.absMin=t;this.max=i;this.absMax=s}else{if(this.state.currView!="genome"){const t=this.app.getState(i);const s=((r=t.x)===null||r===void 0?void 0:r.start)?`${t.x.chr}:${t.x.start}-${t.x.stop}`:t.x.chr;const e=((a=t.y)===null||a===void 0?void 0:a.start)?`${t.y.chr}:${t.y.start}-${t.y.stop}`:t.y.chr;this.errList.push(`No data returned for ${s} and ${e}`)}}}))}init(){return t(this,void 0,void 0,(function*(){this.components={controls:yield q({app:this.app,controlsDiv:this.dom.controlsDiv,hic:this.hic,parent:(t,i)=>{if(i)this[t]=i;return this[t]},error:this.error.bind(this)})};this.infoBar=new K({app:this.app,infoBarDiv:this.dom.infoBarDiv.append("table").style("border-spacing","3px"),hic:this.hic,parent:t=>this[t]});this.infoBar.render()}))}main(i){return t(this,void 0,void 0,(function*(){if(this.errList.length){this.app.dispatch({type:"loading_active",active:false});return}const t=this.app.getState(i);if(this.firstRender==true){this.firstRender=false;yield this.getViewData(i);this.initView()}else{if(t.currView!="horizontal"){this.app.dispatch({type:"loading_active",active:true});yield this.getViewData(i)}if(this.activeView!=t.currView){if(this.activeView=="genome"){this.genome.svg.remove()}else{this.plotDiv.xAxis.selectAll("*").remove();this.plotDiv.yAxis.selectAll("*").remove();this.plotDiv.plot.selectAll("*").remove()}this.activeView=t.currView;this.initView()}else{this[t.currView].update(this.data)}}this.infoBar.update();if(this.errList.length){this.error(this.errList);this.app.dispatch({type:"loading_active",active:false})}}))}}const et=s(st);class ot{constructor(t){this.views=["genome","chrpair","detail","horizontal"];this.errList=[];this.type="app";this.hic={enzyme:t.enzyme,file:t.file,url:t.url,genome:t.genome,holder:t.holder,hostUrl:t.hostUrl,jwt:t.jwt,position1:t.position1,position2:t.position2,maxCutoffPercentile:t.maxCutoffPercentile,name:"name"in t?t.name:"Hi-C",tklist:"tklst"in t?t.tklst:[],state:"state"in t?t.state:{}};this.dom={errorDiv:t.holder.append("div").classed("sjpp-hic-error",true),controlsDiv:t.holder.append("div").classed("sjpp-hic-controls",true).style("display","inline-block"),infoBarDiv:t.holder.append("div").classed("sjpp-hic-infobar",true).style("display","inline-block").style("vertical-align","top").style("padding","5px").style("border","solid 0.5px #ccc"),loadingDiv:l("body").append("div").attr("id","sjpp-loading-overlay"),plotDiv:t.holder.append("div").classed("sjpp-hic-main",true).style("display","inline-block"),tip:new c}}error(i){return t(this,void 0,void 0,(function*(){if(i&&typeof i=="string")this.errList.push(i);m(this.errList,this.dom.errorDiv);this.errList=[]}))}determineView(){if(!this.hic.position1&&!this.hic.position2&&!this.hic.state.currView)this.hic.state.currView="genome";if(!this.hic.position1&&this.hic.position2)this.errList.push("Missing first position");if(this.hic.position1&&!this.hic.position2)this.errList.push("Missing second position");if(this.hic.position1&&this.hic.position2){const t=this.hic.position1.split(/[:-]/);const i=this.hic.position2.split(/[:-]/);this.hic.state.x={chr:t[0]};this.hic.state.y={chr:i[0]};if(!Number.isNaN(+t[1])&&!Number.isNaN(+t[2])){this.hic.state.x.start=+t[1];this.hic.state.x.stop=+t[2];this.hic.state.y.start=+i[1];this.hic.state.y.stop=+i[2];this.hic.state.currView="detail"}else{this.hic.state.currView="chrpair"}}else{if(!this.views.some((t=>t===this.hic.state.currView)))this.error(`Unknown view: ${this.hic.state.currView}`);else return this.hic.state.currView}}getViewsConfig(){var t,i,s;if(this.hic.maxCutoffPercentile)this.hic.state.maxCutoffPercentile=this.hic.maxCutoffPercentile;let e;if(((t=this.hic["normalization"])===null||t===void 0?void 0:t.length)>0){if(!this.hic["normalization"].includes("NONE"))this.hic["normalization"].unshift("NONE");e=this.hic["normalization"][0]}else{e="NONE"}if(this.hic.state.currView){if(!this.hic.state[this.hic.state.currView])this.hic.state[this.hic.state.currView]={};if(!((i=this.hic.state[this.hic.state.currView])===null||i===void 0?void 0:i.matrixType)){this.hic.state[this.hic.state.currView].matrixType="observed"}if(!((s=this.hic.state[this.hic.state.currView])===null||s===void 0?void 0:s.nmeth)){this.hic.state[this.hic.state.currView].nmeth=e}}for(const t of this.views){if(!this.hic.state[t]){this.hic.state[t]={matrixType:"observed",nmeth:e}}}}init(){return t(this,void 0,void 0,(function*(){this.determineView();try{yield b(this.hic,true,this.errList);this.getViewsConfig();this.store=yield D({app:this.api,state:this.hic.state});this.state=yield this.store.copyState();this.components={loadingOverlay:yield V({app:this.api,loadingDiv:this.dom.loadingDiv}),view:yield et({app:this.api,state:this.state,dom:this.dom,hic:this.hic,errList:this.errList,error:this.error})};yield this.api.dispatch()}catch(t){console.error(t.stack||t)}}))}main(){if(this.errList.length){this.error(this.errList);this.dom.loadingDiv.style("display","none");return}}}const rt=f(ot);export{rt as hicInit};
|
|
1
|
+
import{_ as t}from"./tslib.es6-c3c2d88f.js";import{m as i,h as s,ah as e,ag as o,I as r,W as a,f as h,b as n,d as l,M as c,Z as p,ad as d,ae as u,o as f,ai as m}from"./app-b369b169.js";import{d as g,a as y}from"./axis-747c801e.js";import{p as x}from"./pointer-c7475677.js";import{b as v}from"./block.lazyload-87b12654.js";import{C as w}from"./ColorScale-21cab8d2.js";import{h as b}from"./parseData-21fe9822.js";import"./axisstyle-fac7f76b.js";class k{constructor(){this.views=["genome","chrpair","detail","horizontal"];this.type="store";this.defaultState={defaultNmeth:"NONE",loading:true,minBinNum_bp:200,minFragSpan:200,initialBinNum:20,settings:{widthHeightPx:800}}}}const D=i(k);k.prototype.actions={view_create(t){if(!t.view)throw Error("view_create: missing view");if(!this.views.some((i=>i==t.view)))throw Error(`view_create: unknown view = ${t.view}`);this.state.currView=t.view;const i=Object.assign(this.state,t.config);this.state=i},view_update(t){if(t.view){if(!this.views.some((i=>i==t.view)))throw Error(`view_update: unknown view = ${t.view}`);const i=Object.assign(this.state[t.view],t.config);this.state[t.view]=i}else{const i=Object.assign(this.state,t.config);this.state=i}},loading_active(t){this.state.loading=t.active}};class M{constructor(t){this.hasStatePreMain=true;this.type="loadingOverlay",this.app=t.app,this.loadingDiv=t.loadingDiv}reactsTo(t){if(t.type.startsWith("loading"))return true;else return false}getState(t){return t}init(){this.loadingDiv.append("div").attr("class","sjpp-spinner").style("display","")}main(t){const i=this.app.getState(t).loading;this.loadingDiv.style("display",i?"":"none")}}const V=s(M);class z{colorizeElement(t,i,s,e,o,r,a,h,n){if(s>=0){const t=s>=h?0:s<=a?255:Math.floor(255*(h-s)/h);const i=`rgb(255, ${t}, ${t})`;if(n==="genome"){e.ctx.fillStyle=i;e.ctx2.fillStyle=i}else{e.fillStyle=i}}else{const t=s<=a?255:Math.floor(255*(h+s)/h);const i=`rgb(${t}, ${t}, 255)`;if(n==="genome"){e.ctx.fillStyle=i;e.ctx2.fillStyle=i}else{e.fillStyle=i}}if(n==="genome"){e.ctx.fillRect(i,t,o,r);e.ctx2.fillRect(t,i,o,r)}else{e.fillRect(t,i,o,r)}}}class R{constructor(t){this.error=t}getResolution(t,i){if(t.currView=="genome")return i["bpresolution"][0];if(t.currView=="chrpair"){const s=this.getChrPairResolution(i,t.x,t.y,t.minBinNum_bp);return s}else if(t.currView=="detail"){const s=Math.max(t.x.stop-t.x.start,t.y.stop-t.y.start);let e=this.findResFromArray(s,t.minBinNum_bp,i.bpresolution);if(e==null&&!i.enzyme){e=i.bpresolution[i.bpresolution.length-1]}return e}else{this.error(`Unknown view: ${t.currView}`);throw`Unknown view: ${t.currView}`}}getChrPairResolution(t,i,s,e){const o=t.genome.chrlookup[i.chr.toUpperCase()].len;const r=t.genome.chrlookup[s.chr.toUpperCase()].len;const a=Math.max(o,r);const h=this.findResFromArray(a,e,t.bpresolution);if(h==null){this.error(`No suitable resolution for ${i.chr}-${s.chr} pair.`);return}return h}findResFromArray(t,i,s,e){let o=null;for(const e of s){if(t/e>i){o=e;break}}if(e&&o==null){o=s[s.length-1]}return o}getDefaultViewSpan(t,i,s,e,o){const r=this.getChrPairResolution(t,i,s,o);if(!r)return;return r*e}}class ${constructor(t,i){this.error=t;this.resolution=new R(this.error);this.minBinNum_bp=i}setPosition(t,i,s,e,o,r,a){const h=this.resolution.getChrPairResolution(r,e,o,this.minBinNum_bp);const n=h*a;let l=Math.max(1,Math.floor(t*h/s)-n/2);let c=Math.max(1,Math.floor(i*h/s)-n/2);{const t=r.genome.chrlookup[e.chr.toUpperCase()].len;if(l+n>=t){l=t-n}const i=r.genome.chrlookup[o.chr.toUpperCase()].len;if(c+n>i){c=i-n}}const p={chr:e.chr,start:l,stop:l+n};const d={chr:o.chr,start:c,stop:c+n};return[p,d]}}class C{formatData(t,i,s,e,o,r){const a=[];for(const[h,n,l]of i){const i=Math.floor(h/e)*s;const c=Math.floor(n/e)*s;if(t=="genome"){a.push([i,c,l])}if(t=="chrpair"){const t=o?i:c;const s=o?c:i;a.push([t,s,l]);if(r){a.push([s,t,l])}}}return a}}class L{constructor(t,i,s){this.chrorder=t;this.chrx=i;this.chry=s}isFirstX(){if(this.chrx==this.chry)return true;return this.chrorder.indexOf(this.chrx)<this.chrorder.indexOf(this.chry)}}class S{constructor(t){this.binpx=1;this.axispad=10;this.axisLabelFontSize=15;this.calcResolution=null;this.data=[];this.app=t.app;this.hic=t.hic;this.plotDiv=t.plotDiv;this.items=t.items;this.parent=t.parent;this.chrxlen=this.hic.genome.chrlookup[this.parent("state").x.chr.toUpperCase()].len;this.chrylen=this.hic.genome.chrlookup[this.parent("state").y.chr.toUpperCase()].len;this.maxchrlen=Math.max(this.chrxlen,this.chrylen);this.colorizeElement=new z;this.positions=new $(t.error,this.parent("state").minBinNum_bp);this.formattedData=new C}setDefaultBinpx(){if(this.calcResolution==null)return;while(this.binpx*this.maxchrlen/this.calcResolution<600){this.binpx++}}renderAxes(){if(this.calcResolution==null)return;const t=this.plotDiv.yAxis.append("svg");const i=Math.ceil(this.chrylen/this.calcResolution)*this.binpx;t.attr("width",100).attr("height",this.axispad*2+i);t.append("g").attr("data-testid","sjpp-chrpair-svg-y").attr("transform","translate(80,"+(this.axispad+i/2)+")").append("text").text(this.parent("state").y.chr).attr("text-anchor","middle").attr("font-size",this.axisLabelFontSize).attr("font-family",e).attr("dominant-baseline","central").attr("transform","rotate(90)");o({axis:t.append("g").attr("transform",`translate(1, ${this.axispad})`).call(g(r().domain([0,this.chrylen]).range([0,i])).tickFormat(a(".2s"))),showline:true});const s=this.plotDiv.xAxis.append("svg").style("margin-top","-4px");const h=Math.ceil(this.chrxlen/this.calcResolution)*this.binpx;s.attr("height",100).attr("width",this.axispad*2+h);s.append("text").attr("data-testid","sjpp-chrpair-svg-x").text(this.parent("state").x.chr).attr("font-size",this.axisLabelFontSize).attr("font-family",e).attr("x",this.axispad+h/2).attr("text-anchor","middle").attr("y",60);o({axis:s.append("g").attr("transform","translate("+this.axispad+",1)").call(y(r().domain([0,this.chrxlen]).range([0,h])).tickFormat(a(".2s"))),showline:true})}renderCanvas(){const i=this.initDetailView.bind(this);this.canvas=this.plotDiv.plot.append("canvas").attr("data-testid","sjpp-chrpair-canvas").style("margin",this.axispad+"px").on("click",(function(s){return t(this,void 0,void 0,(function*(){const[t,e]=x(s,this);i(t,e)}))})).node();this.canvas.width=Math.ceil(this.chrxlen/this.calcResolution)*this.binpx;this.canvas.height=Math.ceil(this.chrylen/this.calcResolution)*this.binpx;this.ctx=this.canvas.getContext("2d")}initDetailView(t,i){const[s,e]=this.positions.setPosition(t,i,this.binpx,this.parent("state").x,this.parent("state").y,this.hic,this.parent("state").initialBinNum);this.app.dispatch({type:"view_create",view:"detail",config:{x:s,y:e}})}render(){this.calcResolution=this.parent("calcResolution");this.setDefaultBinpx();this.renderAxes();this.renderCanvas();this.update(this.items)}update(t){this.items=t;const i=new L(this.hic.chrorder,this.parent("state").x.chr,this.parent("state").y.chr).isFirstX();const s=this.parent("state").x.chr===this.parent("state").y.chr;this.data=this.formattedData.formatData("chrpair",t.items,this.binpx,this.calcResolution,i,s);this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height);for(const[t,i,s]of this.data){this.colorizeElement.colorizeElement(t,i,s,this.ctx,this.binpx,this.binpx,this.parent("min"),this.parent("max"),"chrpair")}this.app.dispatch({type:"loading_active",active:false})}}class B{constructor(t){this.maxPercentage=5;this.subPanelPxWidth=600;this.borderColor="rgba(200,0,0,.1)";this.app=t.app;this.hic=t.hic;this.plotDiv=t.plotDiv;this.items=t.items;this.parent=t.parent}setRunPpTracks(){const t=[{type:"hicstraw",file:this.hic.file,url:this.hic.url,name:this.hic.name,enzyme:this.hic.enzyme,maxpercentage:this.maxPercentage,pyramindup:1}];if(this.hic.tklst){for(const i of this.hic.tklst){t.push(i)}}h(this.hic.genome,t);return t}setRunPpArgs(t){const i={holder:this.plotDiv.plot,hostURL:this.hic.hostURL,jwt:this.hic.jwt,genome:this.hic.genome,nobox:1,tklst:t};const s=this.parent("state");if(s.x.chr==s.y.chr&&Math.max(s.x.start,s.y.start)<Math.min(s.x.stop,s.y.stop)){i["chr"]=s.x.chr;i["start"]=Math.min(s.x.start,s.y.start);i["stop"]=Math.max(s.x.stop,s.y.stop)}else{i["chr"]=s.x.chr;i["start"]=s.x.start;i["stop"]=s.x.stop;i["width"]=this.subPanelPxWidth;i["subpanels"]=[{chr:s.y.chr,start:s.y.start,stop:s.y.stop,width:this.subPanelPxWidth,leftpad:10,leftborder:this.borderColor}]}return i}render(){const t=this.setRunPpTracks();const i=this.setRunPpArgs(t);v(i)}}class N{constructor(t,i,s,e,o,r){this.leftheadw=20;this.rightheadw=40;this.lpad=1;this.rpad=1;this.firstRender=true;this.app=t;this.hic=i;this.width=s;this.bbmargin=e;this.holder=o;this.isYblock=r;this.bbw=this.leftheadw+this.lpad+this.width+this.rpad+this.rightheadw+2*this.bbmargin;this.defaultLeft=this.bbmargin+this.leftheadw+this.lpad;this.defaultTop=this.bbmargin+this.rightheadw+this.rpad}setArgs(t){const i={hostURL:this.hic.hostURL,genome:this.hic.genome,holder:this.holder,noresize:true,nobox:true,butrowbottom:true,style:{margin:`${this.bbmargin}px`},width:this.width,leftheadw:this.leftheadw,chr:t.chr,start:t.start,stop:t.stop,rightheadw:this.rightheadw,tklst:[],rotated:this.isYblock,showreverse:this.isYblock};h(this.hic.genome,i.tklst);return i}setMethods(t,i,s){const e={onloadalltk_always:()=>{this.onload(t,i,s)},onpanning:t=>this.onpanning(t,i)};if(this.isYblock){e["onsetheight"]=t=>{this.holder.transition().style("left",`${t+this.bbmargin+30}px`)}}return e}onload(t,i,s){this.bbw=this.block.leftheadw+this.block.lpad+this.block.width+this.block.rpad+this.block.rightheadw+2*this.bbmargin;if(this.isYblock){s.transition().style("height",`${this.bbw}px`);t.style("height",`${this.bbw}px`)}else t.style("width",`${this.bbw}px`);if(this.isYblock){this.defaultTop=this.bbmargin+this.block.rightheadw+this.block.rpad;i.style("top",`${this.defaultTop}px`)}else{this.defaultLeft=this.bbmargin+this.block.leftheadw+this.block.lpad;i.style("left",`${this.defaultLeft}px`)}const e={[this.isYblock?"y":"x"]:{chr:this.block.rglst[0].chr,start:this.block.rglst[0].start,stop:this.block.rglst[0].stop}};if(this.firstRender==false){this.app.dispatch({type:"view_update",config:e})}else{this.firstRender=false}}onpanning(t,i){if(!this.isYblock)i.style("left",`${t+this.defaultLeft}px`);else i.style("top",`${-t+this.defaultTop}px`)}loadBlock(i,s,e,o){return t(this,void 0,void 0,(function*(){const r=this.setArgs(i);const a=this.isYblock?this.setMethods(s,e,o):this.setMethods(s,e);const h=Object.assign(r,a);yield v(h).then((i=>t(this,void 0,void 0,(function*(){this.block=i}))))}))}}class P{constructor(t){this.obj={rglst:[]};this.errList=t}isFragData(t,i){if(i!=null)return;if(!t.enzyme){i=t.bpresolution[t.bpresolution.length-1];return}}formatFragArgs(t,i){const s={getdata:1,getBED:1,file:t,rglst:[i]};return s}getBedData(i){return t(this,void 0,void 0,(function*(){try{return yield n("tkbedj",{method:"POST",body:JSON.stringify(i)})}catch(t){this.errList.push(t.message||t);if(t.stack)console.error(t.stack)}}))}getXFragData(i,s,e){return t(this,void 0,void 0,(function*(){this.isFragData(i,s);if(!i.enzymefile)return;const t=this.formatFragArgs(i.enzymefile,e);return yield this.getBedData(t)}))}getYFragData(i,s){return t(this,void 0,void 0,(function*(){const t=this.formatFragArgs(i.enzymefile,s);return yield this.getBedData(t)}))}fetchData(i,s,e,o,r,a){return t(this,void 0,void 0,(function*(){const t={matrixType:s.matrixType,file:i.file,url:i.url,pos1:this.determinePosition(i,o,a===null||a===void 0?void 0:a.x),pos2:this.determinePosition(i,r,a===null||a===void 0?void 0:a.y),nmeth:s.nmeth,resolution:e};if(a)t["isfrag"]=true;try{const i=n("hicdata?",{method:"POST",body:JSON.stringify(t)});if(i.error){this.errList.push(i.error)}return i}catch(t){this.errList.push(t.message||t);if(t.stack)console.error(t.stack)}}))}determinePosition(t,i,s){if(s){return`${t.nochr?i.chr.replace("chr",""):i.chr}:${s.start}:${s.stop}`}else{return`${t.nochr?i.chr.replace("chr",""):i.chr}:${i.start}:${i.stop}`}}}class E{constructor(t,i){this.id2coord=new Map;this.min=null;this.max=null;this.items=[];this.errLst=t;for(const t of i){if(!t.rest||!t.rest[0]){this.errLst.push("items[].rest data problem")}const i=Number.parseInt(t.rest[0]);if(Number.isNaN(i)){this.errLst.push(`${t.start}.${t.stop} invalid fragment id: ${t.rest[0]}`)}this.id2coord.set(i,[t.start,t.stop]);if(this.min==null){this.min=i;this.max=i}else{this.min=Math.min(this.min,i);this.max=Math.max(this.max,i)}}}}class _{constructor(t,i,s){this.frag={x:{},y:{}};this.hic=t;this.errList=i;this.dataFetcher=new P(i);this.parent=s}getFragData(i,s){return t(this,void 0,void 0,(function*(){try{const t=yield this.dataFetcher.getXFragData(this.hic,this.parent("calcResolution"),i);if(t){if(!t.items){this.errList.push(`No fragment data returned for ${i.chr}:${i.start}-${i.stop}`);return}const e=new E(this.errList,t.items);if(this.errList.length)return;this.frag.x={id2coord:e.id2coord,start:e.min,stop:e.max};const o=yield this.dataFetcher.getYFragData(this.hic,s);if(this.errList.length)return;if(o){if(!o.items){this.errList.push(`No fragment data returned for ${s.chr}:${s.start}-${s.stop}`);return}const t=new E(this.errList,o.items);if(this.errList.length)return;this.frag.y={id2coord:new Map,start:t.min,stop:t.max};this.determineMap(t.id2coord,i,s)}}}catch(t){this.errList.push(t.message||t);if(t.stack)console.error(t.stack)}}))}determineMap(t,i,s){if(i.chr==s.chr){for(const[i,s]of t){this.frag.x["id2coord"].set(i,s)}this.frag.y["id2coord"]=this.frag.x["id2coord"]}else{this.frag.y["id2coord"]=t}}getData(i,s,e){return t(this,void 0,void 0,(function*(){return yield this.dataFetcher.fetchData(this.hic,this.parent("state")["detail"],this.parent("calcResolution"),i,s,e)}))}}class j{constructor(t,i){this.hic=t;this.errlist=i}getCoordinates(t,i,s,e,o,r){const a=new L(this.hic.chrorder,t.chr,i.chr).isFirstX();const h=t.chr==i.chr;const n=o/(t.stop-t.start);const l=o/(i.stop-i.start);const c=this.calculateCoordinates(a,h,n,l,e,t,i,s,r);return c}calculateCoordinates(t,i,s,e,o,r,a,h,n){const l=[];for(const[c,p,d]of h.items){let h,u,f,m;if(n){const i=t?c:p;const s=t?p:c;if(n.x.id2coord.has(i)){const[t,s]=n.x.id2coord.get(i);h=t;f=s-t}else{this.errlist.push(`[x id error] x: ${i} y: ${s}`);continue}{const t=i+o;if(n.x.id2coord.has(t)){const[i,s]=n.x.id2coord.get(t);f=s-h}}if(n.y.id2coord.has(s)){const[t,i]=n.y.id2coord.get(s);u=t;m=i-t}else{this.errlist.push(`[y id error] x: ${i} y: ${s}`);continue}{const t=s+o;if(n.y.id2coord.has(t)){const[i,s]=n.y.id2coord.get(t);m=s-u}}}else{h=t?c:p;u=t?p:c;f=o;m=o}if(i){if(h>r.start-f&&h<r.stop&&u>a.start-m&&u<a.stop){l.push([Math.floor((h-r.start)*s),Math.floor((u-a.start)*e),Math.ceil(f*s),Math.ceil(m*e),d])}if(u>r.start-m&&u<r.stop&&h>a.start&&h<a.stop){l.push([Math.floor((u-r.start)*s),Math.floor((h-a.start)*e),Math.ceil(m*s),Math.ceil(f*e),d])}continue}l.push([Math.floor((h-r.start)*s),Math.floor((u-a.start)*e),Math.ceil(f*s),Math.ceil(m*e),d])}return l}}class F{constructor(t){this.calcResolution=null;this.binpx=2;this.bbmargin=1;this.app=t.app;this.hic=t.hic;this.plotDiv=t.plotDiv;this.sheath=t.plotDiv.yAxis.append("div").style("position","relative").style("width","200px").style("height","800px");this.rotor=this.sheath.append("div").style("position","absolute").style("bottom","0px").style("transform","rotate(-90deg)").style("transform-origin","left bottom");this.data=t.data;this.parent=t.parent;this.errList=this.parent("errList");this.resolution=new R(t.error);this.colorizeElement=new z;this.viewRangeBpW=this.resolution.getDefaultViewSpan(this.hic,this.parent("state").x,this.parent("state").y,this.parent("state").initialBinNum,this.parent("state").minBinNum_bp);this.dataMapper=new _(this.hic,t.error,t.parent);this.coordinates=new j(this.hic,this.errList)}renderCanvas(t){this.canvasHolder=this.plotDiv.plot.append("div").style("position","relative").style("width",`${this.xBlock.bbw}px`).style("height",`${this.yBlock.bbw}px`).style("overflow","hidden");this.canvas=this.canvasHolder.append("canvas").style("display","block").style("position","absolute").attr("data-testid","sjpp-hic-detail-canvas").attr("width",t).attr("height",t).on("mousedown",(t=>{const i=l(document.body);const s=t.clientX;const e=t.clientY;const o=Number.parseInt(this.canvas.style("left"));const r=Number.parseInt(this.canvas.style("top"));i.on("mousemove",(t=>{const i=t.clientX-s;const a=t.clientY-e;this.xBlock.block.panning(i);this.yBlock.block.panning(a);this.canvas.style("left",`${o+i}px`).style("top",`${r+a}px`)}));i.on("mouseup",(t=>{i.on("mousemove",null).on("mouseup",null);const o=t.clientX-s;const r=t.clientY-e;console.log(o);this.xBlock.block.pannedby(o);this.yBlock.block.pannedby(r)}))}))}render(){return t(this,void 0,void 0,(function*(){this.calcResolution=this.parent("calcResolution");const t=this.parent("state");this.xBlock=new N(this.app,this.hic,t.settings.widthHeightPx,this.bbmargin,this.plotDiv.xAxis,false);this.yBlock=new N(this.app,this.hic,t.settings.widthHeightPx,this.bbmargin,this.rotor,true);this.renderCanvas(t.settings.widthHeightPx);yield this.xBlock.loadBlock(t.x,this.canvasHolder,this.canvas);yield this.yBlock.loadBlock(t.y,this.canvasHolder,this.canvas,this.sheath);this.update(this.data)}))}update(i){return t(this,void 0,void 0,(function*(){if(i.items.length==0){this.app.dispatch({type:"loading_active",active:false});return}this.data=i;const t=this.parent("state");const s=Number.parseInt(this.canvas.attr("width"));const e=Number.parseInt(this.canvasHolder.style("width"))-s+t.settings.widthHeightPx;this.canvasHolder.style("width",`${e}px`).style("height",`${e}px`);this.canvas.attr("width",`${t.settings.widthHeightPx}px`).attr("height",`${t.settings.widthHeightPx}px`);if(this.xBlock.block.width!=t.settings.widthHeightPx){this.xBlock.block.width=t.settings.widthHeightPx;this.yBlock.block.width=t.settings.widthHeightPx;this.xBlock.block.zoom2px(0,s);this.yBlock.block.zoom2px(0,s)}this.ctx=this.canvas.node().getContext("2d");const o=this.coordinates.getCoordinates(t.x,t.y,this.parent("data"),this.parent("calcResolution"),t.settings.widthHeightPx,this.parent("fragData"));this.coords=o;this.ctx.clearRect(0,0,t.settings.widthHeightPx,t.settings.widthHeightPx);for(const[t,i,s,e,o]of this.coords){this.colorizeElement.colorizeElement(t,i,o,this.ctx,s,e,this.parent("min"),this.parent("max"),"detail")}this.app.dispatch({type:"loading_active",active:false})}))}}class T{constructor(t,i){this.label=t;this.width=i}}class A{constructor(t,i,s,e){this.chromosomeMatrix=new Map;this.chromosomeList=[];this.xoff=0;this.yoff=0;this.chr2px=[];this.chrlst=t;let o=this.chrlst.length;for(const t of this.chrlst){const r=Math.ceil(s[t.toUpperCase()].len/i)*e;const a=new T(t,r);this.chromosomeList.push(a);this.chr2px[t]=r;o+=r}this.totalpx=o;for(let t=0;t<this.chrlst.length;t++){const o=this.chrlst[t];this.chromosomeMatrix.set(o,new Map);let r=0;for(let a=0;a<=t;a++){const t=this.chrlst[a];const h=s[o.toUpperCase()].len;const n=s[t.toUpperCase()].len;const l=Math.ceil(h/i)*e;const c=Math.ceil(n/i)*e;this.chromosomeMatrix.get(o).set(t,{x:this.xoff,y:r,xbins:l,ybins:c,data:[]});r+=this.chr2px[t]+A.borderWidth}this.yoff=r;this.xoff+=this.chr2px[o]+A.borderWidth}}}A.checkerFill="#DEF3FA";A.spaceColor="#CCC";A.fontSize=15;A.font=e;A.borderWidth=1;A.defaultChrLabWidth=100;class O{constructor(t){this.grid=new A(t.hic.chrlst,t.resolution||t.hic.bpresolution[0],t.hic.genome.chrlookup,1)}}class U{constructor(t,i,s,e){this.svg=t;this.layerMap=i.attr("transform",`translate(${A.defaultChrLabWidth}, ${A.fontSize})`);this.layerSv=s.attr("transform",`translate(${A.defaultChrLabWidth}, ${A.fontSize})`);this.grid=e}render(){this.renderAxisX(this.grid);this.renderAxisY(this.grid);this.svg.attr("width",A.defaultChrLabWidth+this.grid.xoff).attr("height",A.fontSize+this.grid.yoff)}renderAxisX(t){let i=0;this.grid.chromosomeList.forEach(((s,e)=>{const o=s.width;if(e%2===0){this.layerMap.append("rect").attr("x",i).attr("width",o).attr("height",A.fontSize).attr("y",-A.fontSize).attr("fill",A.checkerFill)}this.layerMap.append("text").attr("font-family",A.font).attr("text-anchor","middle").attr("font-size",12).attr("x",i+o/2).text(s.label);i+=o;this.layerSv.append("line").attr("x1",i).attr("x2",i).attr("y2",t.totalpx).attr("stroke",A.spaceColor).attr("shape-rendering","crispEdges");i+=A.borderWidth}))}renderAxisY(t){let i=0;this.grid.chromosomeList.forEach(((s,e)=>{const o=s.width;if(e%2===0){this.layerMap.append("rect").attr("x",-A.defaultChrLabWidth).attr("width",A.defaultChrLabWidth).attr("height",o).attr("y",i).attr("fill",A.checkerFill)}this.layerMap.append("text").attr("font-family",A.font).attr("text-anchor","end").attr("dominant-baseline","central").attr("font-size",12).attr("y",i+o/2).text(s.label);i+=o;this.layerSv.append("line").attr("x2",t.totalpx).attr("y1",i).attr("y2",i).attr("stroke",A.spaceColor).attr("shape-rendering","crispEdges");i+=A.borderWidth}))}}class H{constructor(){this.chrx_tip=new c({border:"solid 1px #ccc",padding:"0px",offsetX:0,offsetY:0});this.chry_tip=new c({border:"solid 1px #ccc",padding:"0px",offsetX:0,offsetY:0})}render(t,i,s){const e=t.node().getBoundingClientRect();this.chrx_tip.clear().show(e.left,e.top).d.style("top",null).style("bottom",window.innerHeight-e.top-window.pageYOffset+"px").text(i);this.chry_tip.clear().show(e.left,e.top).d.style("left",null).style("right",document.body.clientWidth-e.left-window.pageXOffset+"px").text(s)}}class W{constructor(t,i){this.app=i;this.layerMap=t;this.tooltips=new H}render(i,s,e,o){i.canvas=o.append("canvas").style("display","none").node();i.ctx=i.canvas.getContext("2d");i.canvas.width=i.xbins;i.canvas.height=i.ybins;i.img=this.layerMap.append("image").attr("width",i.canvas.width).attr("height",i.canvas.height).attr("x",i.x).attr("y",i.y).on("click",(()=>t(this,void 0,void 0,(function*(){yield this.app.dispatch({type:"view_create",view:"chrpair",config:{x:{chr:s},y:{chr:e}}})})))).on("mouseover",(()=>{this.tooltips.render(i.img,s,e)}));if(s!=e){i.canvas2=o.append("canvas").style("display","none").node();i.canvas2.width=i.ybins;i.canvas2.height=i.xbins;i.ctx2=i.canvas2.getContext("2d");i.img2=this.layerMap.append("image").attr("width",i.canvas2.width).attr("height",i.canvas2.height).attr("x",i.y).attr("y",i.x).on("click",(()=>t(this,void 0,void 0,(function*(){yield this.app.dispatch({type:"view_create",view:"chrpair",config:{x:{chr:e},y:{chr:s}}})})))).on("mouseover",(()=>{this.tooltips.render(i.img2,e,s)}))}else{i.ctx2=i.ctx}}}class Y{constructor(t,i,s){this.grid=t;this.gridElementRenderer=new W(i,s)}render(t){for(const[i,s]of this.grid.chromosomeMatrix){for(const[e,o]of s){this.gridElementRenderer.render(o,i,e,t)}}}}class I{constructor(t){this.tip=new c;this.pica_x=new c({border:"solid 1px #ccc",padding:"0px",offsetX:0,offsetY:0});this.pica_y=new c({border:"solid 1px #ccc",padding:"0px",offsetX:0,offsetY:0});this.chr2px={};this.lead2follow=new Map;this.values=[];this.defaultChrLabWidth=100;this.borderwidth=1;this.default_maxVPerc=5;this.fontsize=15;this.xoff=0;this.yoff=0;this.binpx=1;this.atdev_chrnum=8;this.min=0;this.max=0;this.app=t.app;this.hic=t.hic;this.plotDiv=t.plotDiv;this.data=t.data;this.parent=t.parent;this.resolution=t.resolution||t.hic.bpresolution[0];this.svg=this.plotDiv.plot.append("svg").attr("data-testid","sjpp-hic-genome-svg");this.layer_map=this.svg.append("g").attr("data-testid","sjpp-hic-layerMap-g");this.layer_sv=this.svg.append("g").attr("data-testid","sjpp-hic-layerSv-g");this.colorizeElement=new z;this.viewModel=new O(t);this.viewRender=new U(this.svg,this.layer_map,this.layer_sv,this.viewModel.grid);this.gridElementsRenderer=new Y(this.viewModel.grid,this.layer_map,this.app);this.gridFormattedData=new C}makeSv(){const t=new Set;const i=8;for(const s of this.hic.sv.items){const e=this.lead2follow.get(s.chr1);if(!e){t.add(s.chr1);continue}const o=e.get(s.chr2);if(!o){t.add(s.chr2);continue}const r=s.position1/this.resolution;const a=s.position2/this.resolution;this.layer_sv.append("circle").attr("stroke","black").attr("fill","white").attr("fill-opacity",0).attr("cx",o.x+r).attr("cy",o.y+a).attr("r",i).on("mouseover",(t=>{this.tooltipSv(t,s)})).on("mouseout",(()=>{this.tip.hide()})).on("click",(()=>{this.clickSv(s)}));if(o.img2){this.layer_sv.append("circle").attr("stroke","black").attr("fill","whilte").attr("fill-opacity",0).attr("cy",o.x+r).attr("cx",o.y+a).attr("r",i).on("mouseover",(t=>{this.tooltipSv(t,s)})).on("mouseout",(()=>{this.tip.hide()})).on("click",(()=>{this.clickSv(s)}))}}}tooltipSv(t,i){this.tip.clear().show(t.clientX,t.clientY).d.append("div").text(i.chr1==i.chr2?`${i.chr1}:${i.position1}-${i.position2}`:`${i.chr1}:${i.position1}>${i.chr2}:${i.position2}`)}clickSv(t){const i=5e5;const s=600;const e="rgba(200,0,0,.1)";const o=p({x:100,y:100});o.header.text(this.hic.name+" "+(t.chr1==t.chr2?`${t.chr1}:${t.position1}-${t.position2}`:`${t.chr1}:${t.position1}>${t.chr2}:${t.position2}`));const r=[{type:d.hicstraw,file:this.hic.file,enzyme:this.hic.enzyme,maxpercentage:this.default_maxVPerc,pyramidup:1,name:this.hic.name}];if(this.hic.tklst){for(const t of this.hic.tklst){r.push(t)}}h(this.hic.genome,r);const a={holder:o.body,hostURL:this.hic.hostURL,jwt:this.hic.jwt,genome:this.hic.genome,nobox:1,tklst:r};if(t.chr1==t.chr2&&Math.abs(t.position2-t.position1)<i*2){a.chr=t.chr1;const i=Math.abs(t.position2-t.position1);a.start=Math.max(1,Math.min(t.position1,t.position2)-i);a.stop=Math.min(this.hic.genome.chrlookup[t.chr1.toUpperCase()].len,Math.max(t.position1,t.position2)+i)}else{a.chr=t.chr1;a.start=Math.max(1,t.position1-i/2);a.stop=Math.min(this.hic.genome.chrlookup[t.chr1.toUpperCase()].len,t.position1+i/2);a.width=s;a.subpanels=[{chr:t.chr2,start:Math.max(1,t.position2-i/2),stop:Math.min(this.hic.genome.chrlookup[t.chr2.toUpperCase()].len,t.position2+i/2),width:s,leftpad:10,leftborder:e}]}v(a)}render(){this.viewRender.render();this.gridElementsRenderer.render(this.hic.holder);if(this.hic.sv&&this.hic.sv.items){this.makeSv()}this.update(this.data)}update(t){this.data=t;this.min=this.parent("min");this.max=this.parent("max");for(const t of this.data){if(!this.hic.chrlst.includes(t.lead)||!this.hic.chrlst.includes(t.follow))continue;const i=this.viewModel.grid.chromosomeMatrix.get(t.lead).get(t.follow);if(!i)continue;i.ctx.clearRect(0,0,i.canvas.width,i.canvas.height);if(i.canvas2){i.ctx2.clearRect(0,0,i.canvas2.width,i.canvas.height)}i.data=this.gridFormattedData.formatData("genome",t.items,this.binpx,this.resolution);for(const[t,s,e]of i.data){this.colorizeElement.colorizeElement(t,s,e,i,this.binpx,this.binpx,this.min,this.max,"genome")}i.img.attr("xlink:href",i.canvas.toDataURL());if(i.canvas2){i.img2.attr("xlink:href",i.canvas2.toDataURL())}}this.app.dispatch({type:"loading_active",active:false})}}class X{constructor(t,i,s,e){this.holder=t;this.normalization=i;this.defaultNmeth=s;this.callback=e}render(){var i;if(!((i=this.normalization)===null||i===void 0?void 0:i.length)){this.nmethSelect=this.holder.text(this.defaultNmeth)}else{this.nmethSelect=this.holder.style("margin-right","10px").append("select").on("change",(()=>t(this,void 0,void 0,(function*(){const t=this.nmethSelect.node().value;this.callback(t,"nmeth")}))));for(const t of this.normalization){this.nmethSelect.append("option").text(t)}}}update(t){const i=this.nmethSelect.node().options;if(!i)return;const s=Array.from(i).find((i=>i.value===t));if(!s)throw`Invalid normalization method: ${t}`;s.selected=true}}class J{constructor(t,i,s){this.holder=t;this.value=i;this.callback=s}render(i){const s=this.holder.style("margin-right","10px").append("input").attr("type","number").style("width",i&&"width"in i?i.width:"80px").style("margin-left","0px").attr("type","number").property("value",this.value).on("keyup",(i=>t(this,void 0,void 0,(function*(){if(i.code!="Enter")return;const t=i.target.value;this.callback(t)}))));return s}}class Z{constructor(t,i){this.values=[{label:"Observed",value:"observed"},{label:"Expected",value:"expected"},{label:"Observed/Expected",value:"oe"},{label:"Log(Observed/Expected)",value:"log(oe)"}];this.holder=t;this.callback=i}render(){this.matrixSelect=this.holder.style("margin-right","10px").append("select").on("change",(()=>t(this,void 0,void 0,(function*(){this.callback(this.matrixSelect.node().value,"matrixType")}))));for(const t of this.values){this.matrixSelect.append("option").text(t.label).attr("value",t.value)}}update(t){const i=this.matrixSelect.node().options;if(!i)return;const s=Array.from(i).find((i=>i.value===t));if(!s)throw`Invalid normalization method: ${t}`;s.selected=true}}class G{constructor(t){this.zoomBlockCallback=t=>{const i=this.parent("detail");i.xBlock.block.zoomblock(2,t);i.yBlock.block.zoomblock(2,t)};this.minCallback=t=>{if(Number(t)>Number(this.parent("max"))){this.error("Min cutoff cannot be greater than max cutoff")}else{this.parent("min",Number(t));this.reColorHeatmap();this.parent("infoBar").update()}};this.maxCallback=t=>{if(Number(t)<Number(this.parent("min"))){this.error(`Max cutoff cannot be less than min cutoff`)}else if(Number(t)<0){this.error(`Max cutoff cannot be less than 0`)}else{this.parent("max",Number(t));this.reColorHeatmap();this.parent("infoBar").update()}};this.reColorHeatmap=()=>{if(this.parent("activeView")=="genome"){const t=this.parent("genome");const i=t.viewRender.grid.chromosomeMatrix;if(!i)return;for(const[t,s]of i){for(const[t,i]of s){if(!i)continue;for(const[t,s,e]of i.data){this.colorizeElement.colorizeElement(t,s,e,i,1,1,this.parent("min"),this.parent("max"),"genome")}i.img.attr("xlink:href",i.canvas.toDataURL());if(i.canvas2){i.img2.attr("xlink:href",i.canvas2.toDataURL())}}}}else if(this.parent("activeView")=="chrpair"){const t=this.parent("chrpair");for(const[i,s,e]of t.data){this.colorizeElement.colorizeElement(i,s,e,t.ctx,t.binpx,t.binpx,this.parent("min"),this.parent("max"),"chrpair")}}else if(this.parent("activeView")=="detail"){const t=this.parent("detail");for(const[i,s,e,o,r]of t.coords){this.colorizeElement.colorizeElement(i,s,r,t.ctx,e,o,this.parent("min"),this.parent("max"),"detail")}}};this.dropdownCallback=(t,i)=>{const s=this.app.getState();this.app.dispatch({type:"view_update",view:s.currView,config:{[i]:t}})};this.type="controlPanel";this.controls={};this.app=t.app;this.controlsDiv=t.controlsDiv;this.hic=t.hic;this.colorizeElement=new z;this.parent=t.parent;this.error=t.error}getState(t){return t}addLabel(t,i){return t.append("td").style("color","#858585").style("font-size",".8em").style("vertical-align",i.toUpperCase()=="VIEW"?"top":"middle").text(i.toUpperCase())}init(){const i=this.app.getState();const s=this.controlsDiv.style("background","rgb(253, 250, 244)").style("vertical-align","top").style("padding","5px").style("border","solid 0.5px #ccc");let e=true;this.controlsDiv.append("button").style("display","block").style("border","none").style("font-size","1.5em").style("background","none").html("≡").on("click",(()=>{e=!e;o.style("display",e?"block":"none")}));const o=s.append("div").attr("class","sjpp-hic-menu").style("display",e?"block":"none");const r=o.append("table").style("border-spacing","3px");this.controls.normalizationRow=r.append("tr");this.addLabel(this.controls.normalizationRow,"NORMALIZATION");this.controls.nmeth=new X(this.controls.normalizationRow.append("td").attr("class","sjpp-nmeth-select"),this.hic.normalization,i.defaultNmeth,this.dropdownCallback);this.controls.nmeth.render();this.controls.minCutoffRow=r.append("tr");this.controls.minCutoffLabel=this.addLabel(this.controls.minCutoffRow,"");this.controls.inputBpMinV=new J(this.controls.minCutoffRow.append("td"),this.parent("min"),this.minCallback).render({width:"120px"});this.controls.maxCutoffRow=r.append("tr");this.controls.maxCutoffLabel=this.addLabel(this.controls.maxCutoffRow,"");this.controls.inputBpMaxV=new J(this.controls.maxCutoffRow.append("td"),this.parent("max"),this.maxCallback).render({width:"120px"});this.controls.matrixTypeRow=r.append("tr");this.addLabel(this.controls.matrixTypeRow,"matrix type");this.controls.matrixType=new Z(this.controls.matrixTypeRow.append("td"),this.dropdownCallback);this.controls.matrixType.render();this.controls.widthRow=r.append("tr");this.addLabel(this.controls.widthRow,"WIDTH / height");this.controls.width=this.controls.widthRow.append("td");this.controls.width.style("margin-right","10px").append("input").attr("type","number").style("width","80px").style("margin-left","0px").attr("type","number").property("value",i.width).on("keyup",(i=>t(this,void 0,void 0,(function*(){if(i.code!="Enter")return;const t=i.target.value;this.app.dispatch({type:"view_update",config:{settings:{widthHeightPx:Number.parseInt(t)}}})}))));const a=r.append("tr");this.addLabel(a,"VIEW");const h=a.append("td");this.controls.view=h.append("span").style("padding-right","5px").style("display","block");this.controls.genomeViewBtn=h.append("button").style("display","none").style("padding","2px").style("margin-top","4px").html("≪ Genome").on("click",(()=>t(this,void 0,void 0,(function*(){yield this.app.dispatch({type:"view_create",view:"genome",config:{x:{},y:{}}})}))));this.controls.chrpairViewBtn=h.append("button").style("display","none").style("padding","2px").style("margin","4px 0px").on("click",(()=>t(this,void 0,void 0,(function*(){const t=this.app.getState();yield this.app.dispatch({type:"view_create",view:"chrpair",config:{x:{chr:t.x.chr},y:{chr:t.y.chr}}})}))));this.controls.horizontalViewBtn=h.append("button").style("display","none").style("padding","2px").style("margin","4px 0px").html("Horizontal View ≫").on("click",(()=>t(this,void 0,void 0,(function*(){yield this.app.dispatch({type:"view_create",view:"horizontal"})}))));this.controls.detailViewBtn=h.append("button").style("display","none").style("padding","2px").style("margin","4px 0px").html("≪ Detailed View").on("click",(()=>t(this,void 0,void 0,(function*(){yield this.app.dispatch({type:"view_create",view:"detail"})}))));this.controls.zoomDiv=r.append("tr").style("display",i.currView=="detail"?"contents":"none");this.addLabel(this.controls.zoomDiv,"ZOOM");const n=this.controls.zoomDiv.append("td");this.controls.zoomIn=n.append("button").style("margin-right","10px").text("In").on("click",(()=>{this.zoomBlockCallback(false)}));this.controls.zoomOut=n.append("button").style("margin-right","10px").text("Out").on("click",(()=>{this.zoomBlockCallback(true)}))}showBtns(){const t=this.app.getState();this.controls.genomeViewBtn.style("display",t.currView==="genome"?"none":"inline-block");if(t.currView==="detail"){this.controls.chrpairViewBtn.html(`≪ Entire ${t.x.chr}-${t.y.chr}`).style("display","block");this.controls.horizontalViewBtn.style("display","block");this.controls.zoomDiv.style("display","contents");this.controls.detailViewBtn.style("display","none")}else if(t.currView==="horizontal"){this.controls.chrpairViewBtn.html(`≪ Entire ${t.x.chr}-${t.y.chr}`).style("display","block");this.controls.detailViewBtn.style("display","block");this.controls.horizontalViewBtn.style("display","none");this.controls.zoomDiv.style("display","none")}else{this.controls.chrpairViewBtn.style("display","none");this.controls.horizontalViewBtn.style("display","none");this.controls.detailViewBtn.style("display","none");this.controls.zoomDiv.style("display","none");this.controls.widthRow.style("display","none")}}showHideControls(){const t=this.app.getState();this.controls.normalizationRow.style("display",t.currView=="horizontal"?"none":"");this.controls.minCutoffRow.style("display",t.currView=="horizontal"?"none":"");this.controls.maxCutoffRow.style("display",t.currView=="horizontal"?"none":"");this.controls.matrixTypeRow.style("display",t.currView=="horizontal"?"none":"");this.controls.widthRow.style("display",t.currView=="detail"?"contents":"none")}main(t){const i=this.app.getState(t);this.controls.nmeth.update(i[i.currView].nmeth);this.controls.matrixType.update(i[i.currView].matrixType);this.controls.zoomDiv.style("display",i.currView=="detail"?"contents":"none");if(i.currView=="chrpair"){this.controls.view.text(`${i.x.chr}-${i.y.chr} Pair`)}else{this.controls.view.text(i.currView.charAt(0).toUpperCase()+i.currView.slice(1))}const s=this.parent("absMin")<1e-5?Number(this.parent("absMin")).toExponential(1):Number(this.parent("absMin").toFixed(6));const e=this.parent("absMax")<1e-5?Number(this.parent("absMax")).toExponential(1):Number(this.parent("absMax").toFixed(6));this.controls.width.select("input").property("value",i.settings.widthHeightPx);this.controls.inputBpMinV.property("value",this.parent("min"));this.controls.inputBpMaxV.property("value",this.parent("max"));this.controls.minCutoffLabel.html(`MIN CUTOFF <br>(>= ${s})`);this.controls.maxCutoffLabel.html(`MAX CUTOFF <br>(<= ${e})`);this.showBtns();this.showHideControls()}}const q=s(G);class K{constructor(t){this.startColor="white";this.endColor="red";this.addLabel=t=>this.labelRow.append("td").style("color","#858585").style("font-size",".8em").style("text-align","center").style("vertical-align","middle").text(t.toUpperCase());this.addValue=t=>this.valueRow.append("td").style("font-size","1em").style("text-align","center").style("vertical-align","middle").text(t);this.type="infoBar";this.app=t.app;this.hic=t.hic;const i=t.infoBarDiv;this.labelRow=i.append("tr");this.valueRow=i.append("tr");this.parent=t.parent}render(){return t(this,void 0,void 0,(function*(){this.addLabel("Version");this.addValue(this.hic.version);this.addLabel("Enzyme");this.addValue(this.hic.enzyme||"N/A");this.addLabel("Resolution");this.resolutionDiv=this.addValue("");this.colorScaleLabel=this.addLabel("Scale");this.colorScaleDiv=this.valueRow.append("td");this.colorScale=new w({barheight:14,barwidth:85,data:[this.parent("min"),this.parent("max")],fontSize:12,height:35,width:120,holder:this.colorScaleDiv,startColor:this.startColor,endColor:this.endColor,position:"20,0",ticks:2,tickSize:3,markedValue:1});this.colorScale.render();this.update()}))}update(){const t=this.parent("calcResolution");let i;if(t<this.hic.bpresolution[this.hic.bpresolution.length-1]){i=`${t} fragment${t>1?"s":""}`}else{i=u(t)}this.resolutionDiv.text(i);if(this.parent("state").currView=="horizontal"){this.colorScaleLabel.style("display","none");this.colorScaleDiv.style("display","none")}else{this.colorScaleLabel.style("display","");this.colorScaleDiv.style("display","");const t=this.parent("min");const i=this.parent("max");if(t<0){this.colorScale.startColor="blue";this.colorScale.data=[t,i]}else{this.colorScale.startColor="white";this.colorScale.data=[0,i]}this.colorScale.markedValue=t;this.colorScale.updateScale()}}}class Q{constructor(t,i){this.hic=t;this.percentile=i?i/100:.99}sortData(t){const i=[];if((t===null||t===void 0?void 0:t.items)&&(t===null||t===void 0?void 0:t.items.length)){for(const s of t.items){i.push(s[2])}}else{const s=new Set;for(const e of t){if(e.lead=="chrM"&&!e.items.length||e.lead=="chrY"&&!e.items.length){s.add(e.lead);continue}for(const t of e.items){i.push(t[2])}}if(s.size){for(const t of s){const i=this.hic.chrlst.indexOf(t);this.hic.chrlst.splice(i,1)}}}const s=i.sort(((t,i)=>t-i));const e=s[Math.floor(s.length*this.percentile)];const o=s[0];return[o,e,s[s.length-1]]}}class tt{constructor(t,i,s=[]){this.data=[];this.hic=t;this.debugmode=i;this.errList=s||[]}getData(i){return t(this,void 0,void 0,(function*(){if(this.data.length)this.data=[];if(!(i===null||i===void 0?void 0:i.matrixType))i.matrixType="observed";try{const t=yield n("hicgenome?",{method:"POST",body:JSON.stringify({chrlst:this.hic.chrlst,nmeth:i.nmeth,resolution:i.resolution,matrixType:i.matrixType,file:this.hic.file,url:this.hic.url,nochr:this.hic.nochr})});if(t.error){const i=t.error.split("\n");for(const t of i){this.errList.push(t)}}return t.data}catch(t){this.errList.push(t.message||t);if(t.stack)console.error(t.stack)}}))}}class it{constructor(t,i,s=[]){this.hic=t;this.debugmode=i;this.errList=s||[]}getData(i){return t(this,void 0,void 0,(function*(){if(!(i===null||i===void 0?void 0:i.matrixType))i.matrixType="observed";const t={matrixType:i.matrixType,file:this.hic.file,url:this.hic.url,pos1:this.hic.nochr?i.lead.replace("chr",""):i.lead,pos2:this.hic.nochr?i.follow.replace("chr",""):i.follow,nmeth:i.nmeth,resolution:i.resolution};try{const s=yield n("hicdata?",{method:"POST",body:JSON.stringify(t)});if(s.error){throw Error(`${i.lead} - ${i.follow}: ${s.error.error}`)}if(!s.items||s.items.length==0)return;return s}catch(t){this.errList.push(t.message||t);if(t.stack)console.error(t.stack)}}))}}class st{constructor(t){this.components={controls:[]};this.genomeData=[];this.calcResolution=null;this.firstRender=true;this.min=0;this.absMin=0;this.max=0;this.absMax=0;this.hasStatePreMain=true;this.type="view";this.hic=t.hic;this.state=t.state;this.dom=t.dom;this.errList=t.errList;this.plotDiv=this.dom.plotDiv.append("table").classed("sjpp-hic-plot-main",true);const i=this.plotDiv.append("tr");const s=this.plotDiv.append("tr");this.plotDiv={plot:i.append("td").classed("sjpp-hic-plot",true).attr("data-testid","sjpp-hic-plot"),yAxis:i.append("td").classed("sjpp-hic-plot-yaxis",true).attr("data-testid","sjpp-hic-yaxis"),xAxis:s.append("td").classed("sjpp-hic-plot-xaxis",true).attr("data-testid","sjpp-hic-xaxis"),blank:s.append("td")};this.app=t.app;this.dataMapper=new Q(this.hic,t.state.maxCutoffPercentile);this.activeView=this.state.currView;this.error=t.error;this.resolution=new R(this.error);this.parent=t=>this[t];this.detailDataMapper=new _(this.hic,this.errList,this.parent)}getState(t){return t}reactsTo(t){if(t.type.startsWith("view"))return true;else return false}initView(){const t={plotDiv:this.plotDiv,hic:this.hic,app:this.app,parent:t=>this[t]};if(this.state.currView=="genome"){t["data"]=this.data;this.genome=new I(t);this.genome.render()}else if(this.state.currView==="chrpair"){t["items"]=this.data;this.chrpair=new S(t);this.chrpair.render()}else if(this.state.currView==="detail"){t["data"]=this.data;this.detail=new F(t);this.detail.render()}else if(this.state.currView==="horizontal"){this.horizontal=new B(t);this.horizontal.render()}else{throw Error(`Unknown view: ${this.state.currView}`)}}fetchData(i){var s,e,o,r,a,h;return t(this,void 0,void 0,(function*(){if((s=this.data)===null||s===void 0?void 0:s.length)this.data=[];if(this.state.currView=="genome"){if(this.activeView!="genome"&&((e=this.genomeData)===null||e===void 0?void 0:e.length))this.data=this.genomeData;else{const t=new tt(this.hic,true,this.errList);this.genomeData=yield t.getData(i);this.data=this.genomeData}}else if(this.state.currView=="detail"){this.data=yield this.detailDataMapper.getData(this.state.x,this.state.y,this.fragData)}else{if(!((r=(o=this.state)===null||o===void 0?void 0:o.x)===null||r===void 0?void 0:r.chr)||!((h=(a=this.state)===null||a===void 0?void 0:a.y)===null||h===void 0?void 0:h.chr)){this.errList.push(`No positions provided for ${this.activeView} view.`);return}else{const t=this.state.x;const s=this.state.y;i["lead"]=`${t.start&&t.stop?`${t.chr}:${t.start}-${t.stop}`:t.chr}`;i["follow"]=`${s.start&&s.stop?`${s.chr}:${s.start}-${s.stop}`:s.chr}`}const t=new it(this.hic,true,this.errList);this.data=yield t.getData(i)}}))}setResolution(i){return t(this,void 0,void 0,(function*(){const t=this.app.getState(i);this.calcResolution=this.resolution.getResolution(t,this.hic);if(t.currView=="detail"&&this.calcResolution==null){yield this.detailDataMapper.getFragData(t.x,t.y);this.fragData=this.detailDataMapper.frag;const i=Math.min(this.fragData.x.stop-this.fragData.x.start,this.fragData.y.stop-this.fragData.y.start);this.calcResolution=this.resolution.findResFromArray(i,t.minFragSpan,this.hic.fragresolution,true)}else{this.fragData=null}return this.calcResolution}))}setDataArgs(i){return t(this,void 0,void 0,(function*(){const t=this.app.getState(i);const s=t[t.currView];const e={nmeth:s.nmeth,resolution:yield this.setResolution(i),matrixType:s.matrixType};if(t.currView=="chrpair"){e["lead"]=t.x.chr;e["follow"]=t.y.chr}return e}))}getViewData(i){var s,e,o,r,a;return t(this,void 0,void 0,(function*(){const t=yield this.setDataArgs(i);yield this.fetchData(t);if(((s=this.data)===null||s===void 0?void 0:s.length)>0||((o=(e=this.data)===null||e===void 0?void 0:e.items)===null||o===void 0?void 0:o.length)>0){const[t,i,s]=this.dataMapper.sortData(this.data);this.min=this.absMin=t;this.max=i;this.absMax=s}else{if(this.state.currView!="genome"){const t=this.app.getState(i);const s=((r=t.x)===null||r===void 0?void 0:r.start)?`${t.x.chr}:${t.x.start}-${t.x.stop}`:t.x.chr;const e=((a=t.y)===null||a===void 0?void 0:a.start)?`${t.y.chr}:${t.y.start}-${t.y.stop}`:t.y.chr;this.errList.push(`No data returned for ${s} and ${e}`)}}}))}init(){return t(this,void 0,void 0,(function*(){this.components={controls:yield q({app:this.app,controlsDiv:this.dom.controlsDiv,hic:this.hic,parent:(t,i)=>{if(i)this[t]=i;return this[t]},error:this.error.bind(this)})};this.infoBar=new K({app:this.app,infoBarDiv:this.dom.infoBarDiv.append("table").style("border-spacing","3px"),hic:this.hic,parent:t=>this[t]});this.infoBar.render()}))}main(i){return t(this,void 0,void 0,(function*(){if(this.errList.length){this.app.dispatch({type:"loading_active",active:false});return}const t=this.app.getState(i);if(this.firstRender==true){this.firstRender=false;yield this.getViewData(i);this.initView()}else{if(t.currView!="horizontal"){this.app.dispatch({type:"loading_active",active:true});yield this.getViewData(i)}if(this.activeView!=t.currView){if(this.activeView=="genome"){this.genome.svg.remove()}else{this.plotDiv.xAxis.selectAll("*").remove();this.plotDiv.yAxis.selectAll("*").remove();this.plotDiv.plot.selectAll("*").remove()}this.activeView=t.currView;this.initView()}else{this[t.currView].update(this.data)}}this.infoBar.update();if(this.errList.length){this.error(this.errList);this.app.dispatch({type:"loading_active",active:false})}}))}}const et=s(st);class ot{constructor(t){this.views=["genome","chrpair","detail","horizontal"];this.errList=[];this.type="app";this.hic={enzyme:t.enzyme,file:t.file,url:t.url,genome:t.genome,holder:t.holder,hostUrl:t.hostUrl,jwt:t.jwt,position1:t.position1,position2:t.position2,maxCutoffPercentile:t.maxCutoffPercentile,name:"name"in t?t.name:"Hi-C",tklist:"tklst"in t?t.tklst:[],state:"state"in t?t.state:{}};this.dom={errorDiv:t.holder.append("div").classed("sjpp-hic-error",true),controlsDiv:t.holder.append("div").classed("sjpp-hic-controls",true).style("display","inline-block"),infoBarDiv:t.holder.append("div").classed("sjpp-hic-infobar",true).style("display","inline-block").style("vertical-align","top").style("padding","5px").style("border","solid 0.5px #ccc"),loadingDiv:l("body").append("div").attr("id","sjpp-loading-overlay"),plotDiv:t.holder.append("div").classed("sjpp-hic-main",true).style("display","inline-block"),tip:new c}}error(i){return t(this,void 0,void 0,(function*(){if(i&&typeof i=="string")this.errList.push(i);m(this.errList,this.dom.errorDiv);this.errList=[]}))}determineView(){if(!this.hic.position1&&!this.hic.position2&&!this.hic.state.currView)this.hic.state.currView="genome";if(!this.hic.position1&&this.hic.position2)this.errList.push("Missing first position");if(this.hic.position1&&!this.hic.position2)this.errList.push("Missing second position");if(this.hic.position1&&this.hic.position2){const t=this.hic.position1.split(/[:-]/);const i=this.hic.position2.split(/[:-]/);this.hic.state.x={chr:t[0]};this.hic.state.y={chr:i[0]};if(!Number.isNaN(+t[1])&&!Number.isNaN(+t[2])){this.hic.state.x.start=+t[1];this.hic.state.x.stop=+t[2];this.hic.state.y.start=+i[1];this.hic.state.y.stop=+i[2];this.hic.state.currView="detail"}else{this.hic.state.currView="chrpair"}}else{if(!this.views.some((t=>t===this.hic.state.currView)))this.error(`Unknown view: ${this.hic.state.currView}`);else return this.hic.state.currView}}getViewsConfig(){var t,i,s;if(this.hic.maxCutoffPercentile)this.hic.state.maxCutoffPercentile=this.hic.maxCutoffPercentile;let e;if(((t=this.hic["normalization"])===null||t===void 0?void 0:t.length)>0){if(!this.hic["normalization"].includes("NONE"))this.hic["normalization"].unshift("NONE");e=this.hic["normalization"][0]}else{e="NONE"}if(this.hic.state.currView){if(!this.hic.state[this.hic.state.currView])this.hic.state[this.hic.state.currView]={};if(!((i=this.hic.state[this.hic.state.currView])===null||i===void 0?void 0:i.matrixType)){this.hic.state[this.hic.state.currView].matrixType="observed"}if(!((s=this.hic.state[this.hic.state.currView])===null||s===void 0?void 0:s.nmeth)){this.hic.state[this.hic.state.currView].nmeth=e}}for(const t of this.views){if(!this.hic.state[t]){this.hic.state[t]={matrixType:"observed",nmeth:e}}}}init(){return t(this,void 0,void 0,(function*(){this.determineView();try{yield b(this.hic,true,this.errList);this.getViewsConfig();this.store=yield D({app:this.api,state:this.hic.state});this.state=yield this.store.copyState();this.components={loadingOverlay:yield V({app:this.api,loadingDiv:this.dom.loadingDiv}),view:yield et({app:this.api,state:this.state,dom:this.dom,hic:this.hic,errList:this.errList,error:this.error})};yield this.api.dispatch()}catch(t){console.error(t.stack||t)}}))}main(){if(this.errList.length){this.error(this.errList);this.dom.loadingDiv.style("display","none");return}}}const rt=f(ot);export{rt as hicInit};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{E as e,a as t,b as n,T as o,Q as a,S as i,V as s}from"./sampleScatter.rendererThree-5e686004.js";import"./app-a8c4854a.js";const c={type:"change"};const r={type:"start"};const l={type:"end"};class m extends e{constructor(e,m){super();this.object=e;this.domElement=m;this.domElement.style.touchAction="none";this.enabled=true;this.target=new t;this.minDistance=0;this.maxDistance=Infinity;this.minZoom=0;this.maxZoom=Infinity;this.minPolarAngle=0;this.maxPolarAngle=Math.PI;this.minAzimuthAngle=-Infinity;this.maxAzimuthAngle=Infinity;this.enableDamping=false;this.dampingFactor=.05;this.enableZoom=true;this.zoomSpeed=1;this.enableRotate=true;this.rotateSpeed=1;this.enablePan=true;this.panSpeed=1;this.screenSpacePanning=true;this.keyPanSpeed=7;this.autoRotate=false;this.autoRotateSpeed=2;this.keys={LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"};this.mouseButtons={LEFT:n.ROTATE,MIDDLE:n.DOLLY,RIGHT:n.PAN};this.touches={ONE:o.ROTATE,TWO:o.DOLLY_PAN};this.target0=this.target.clone();this.position0=this.object.position.clone();this.zoom0=this.object.zoom;this._domElementKeyEvents=null;this.getPolarAngle=function(){return d.phi};this.getAzimuthalAngle=function(){return d.theta};this.getDistance=function(){return this.object.position.distanceTo(this.target)};this.listenToKeyEvents=function(e){e.addEventListener("keydown",me);this._domElementKeyEvents=e};this.stopListenToKeyEvents=function(){this._domElementKeyEvents.removeEventListener("keydown",me);this._domElementKeyEvents=null};this.saveState=function(){u.target0.copy(u.target);u.position0.copy(u.object.position);u.zoom0=u.object.zoom};this.reset=function(){u.target.copy(u.target0);u.object.position.copy(u.position0);u.object.zoom=u.zoom0;u.object.updateProjectionMatrix();u.dispatchEvent(c);u.update();f=p.NONE};this.update=function(){const n=new t;const o=(new a).setFromUnitVectors(e.up,new t(0,1,0));const i=o.clone().invert();const s=new t;const r=new a;const l=2*Math.PI;return function e(){const t=u.object.position;n.copy(t).sub(u.target);n.applyQuaternion(o);d.setFromVector3(n);if(u.autoRotate&&f===p.NONE){x(I())}if(u.enableDamping){d.theta+=b.theta*u.dampingFactor;d.phi+=b.phi*u.dampingFactor}else{d.theta+=b.theta;d.phi+=b.phi}let a=u.minAzimuthAngle;let m=u.maxAzimuthAngle;if(isFinite(a)&&isFinite(m)){if(a<-Math.PI)a+=l;else if(a>Math.PI)a-=l;if(m<-Math.PI)m+=l;else if(m>Math.PI)m-=l;if(a<=m){d.theta=Math.max(a,Math.min(m,d.theta))}else{d.theta=d.theta>(a+m)/2?Math.max(a,d.theta):Math.min(m,d.theta)}}d.phi=Math.max(u.minPolarAngle,Math.min(u.maxPolarAngle,d.phi));d.makeSafe();d.radius*=E;d.radius=Math.max(u.minDistance,Math.min(u.maxDistance,d.radius));if(u.enableDamping===true){u.target.addScaledVector(g,u.dampingFactor)}else{u.target.add(g)}n.setFromSpherical(d);n.applyQuaternion(i);t.copy(u.target).add(n);u.object.lookAt(u.target);if(u.enableDamping===true){b.theta*=1-u.dampingFactor;b.phi*=1-u.dampingFactor;g.multiplyScalar(1-u.dampingFactor)}else{b.set(0,0,0);g.set(0,0,0)}E=1;if(y||s.distanceToSquared(u.object.position)>h||8*(1-r.dot(u.object.quaternion))>h){u.dispatchEvent(c);s.copy(u.object.position);r.copy(u.object.quaternion);y=false;return true}return false}}();this.dispose=function(){u.domElement.removeEventListener("contextmenu",fe);u.domElement.removeEventListener("pointerdown",ae);u.domElement.removeEventListener("pointercancel",se);u.domElement.removeEventListener("wheel",le);u.domElement.removeEventListener("pointermove",ie);u.domElement.removeEventListener("pointerup",se);if(u._domElementKeyEvents!==null){u._domElementKeyEvents.removeEventListener("keydown",me);u._domElementKeyEvents=null}};const u=this;const p={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6};let f=p.NONE;const h=1e-6;const d=new i;const b=new i;let E=1;const g=new t;let y=false;const O=new s;const P=new s;const T=new s;const v=new s;const A=new s;const L=new s;const w=new s;const N=new s;const j=new s;const M=[];const k={};function I(){return 2*Math.PI/60/60*u.autoRotateSpeed}function R(){return Math.pow(.95,u.zoomSpeed)}function x(e){b.theta-=e}function S(e){b.phi-=e}const Y=function(){const e=new t;return function t(n,o){e.setFromMatrixColumn(o,0);e.multiplyScalar(-n);g.add(e)}}();const D=function(){const e=new t;return function t(n,o){if(u.screenSpacePanning===true){e.setFromMatrixColumn(o,1)}else{e.setFromMatrixColumn(o,0);e.crossVectors(u.object.up,e)}e.multiplyScalar(n);g.add(e)}}();const _=function(){const e=new t;return function t(n,o){const a=u.domElement;if(u.object.isPerspectiveCamera){const t=u.object.position;e.copy(t).sub(u.target);let i=e.length();i*=Math.tan(u.object.fov/2*Math.PI/180);Y(2*n*i/a.clientHeight,u.object.matrix);D(2*o*i/a.clientHeight,u.object.matrix)}else if(u.object.isOrthographicCamera){Y(n*(u.object.right-u.object.left)/u.object.zoom/a.clientWidth,u.object.matrix);D(o*(u.object.top-u.object.bottom)/u.object.zoom/a.clientHeight,u.object.matrix)}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.");u.enablePan=false}}}();function H(e){if(u.object.isPerspectiveCamera){E/=e}else if(u.object.isOrthographicCamera){u.object.zoom=Math.max(u.minZoom,Math.min(u.maxZoom,u.object.zoom*e));u.object.updateProjectionMatrix();y=true}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.");u.enableZoom=false}}function K(e){if(u.object.isPerspectiveCamera){E*=e}else if(u.object.isOrthographicCamera){u.object.zoom=Math.max(u.minZoom,Math.min(u.maxZoom,u.object.zoom/e));u.object.updateProjectionMatrix();y=true}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.");u.enableZoom=false}}function C(e){O.set(e.clientX,e.clientY)}function z(e){w.set(e.clientX,e.clientY)}function X(e){v.set(e.clientX,e.clientY)}function Z(e){P.set(e.clientX,e.clientY);T.subVectors(P,O).multiplyScalar(u.rotateSpeed);const t=u.domElement;x(2*Math.PI*T.x/t.clientHeight);S(2*Math.PI*T.y/t.clientHeight);O.copy(P);u.update()}function F(e){N.set(e.clientX,e.clientY);j.subVectors(N,w);if(j.y>0){H(R())}else if(j.y<0){K(R())}w.copy(N);u.update()}function U(e){A.set(e.clientX,e.clientY);L.subVectors(A,v).multiplyScalar(u.panSpeed);_(L.x,L.y);v.copy(A);u.update()}function V(e){if(e.deltaY<0){K(R())}else if(e.deltaY>0){H(R())}u.update()}function G(e){let t=false;switch(e.code){case u.keys.UP:if(e.ctrlKey||e.metaKey||e.shiftKey){S(2*Math.PI*u.rotateSpeed/u.domElement.clientHeight)}else{_(0,u.keyPanSpeed)}t=true;break;case u.keys.BOTTOM:if(e.ctrlKey||e.metaKey||e.shiftKey){S(-2*Math.PI*u.rotateSpeed/u.domElement.clientHeight)}else{_(0,-u.keyPanSpeed)}t=true;break;case u.keys.LEFT:if(e.ctrlKey||e.metaKey||e.shiftKey){x(2*Math.PI*u.rotateSpeed/u.domElement.clientHeight)}else{_(u.keyPanSpeed,0)}t=true;break;case u.keys.RIGHT:if(e.ctrlKey||e.metaKey||e.shiftKey){x(-2*Math.PI*u.rotateSpeed/u.domElement.clientHeight)}else{_(-u.keyPanSpeed,0)}t=true;break}if(t){e.preventDefault();u.update()}}function B(){if(M.length===1){O.set(M[0].pageX,M[0].pageY)}else{const e=.5*(M[0].pageX+M[1].pageX);const t=.5*(M[0].pageY+M[1].pageY);O.set(e,t)}}function W(){if(M.length===1){v.set(M[0].pageX,M[0].pageY)}else{const e=.5*(M[0].pageX+M[1].pageX);const t=.5*(M[0].pageY+M[1].pageY);v.set(e,t)}}function q(){const e=M[0].pageX-M[1].pageX;const t=M[0].pageY-M[1].pageY;const n=Math.sqrt(e*e+t*t);w.set(0,n)}function Q(){if(u.enableZoom)q();if(u.enablePan)W()}function J(){if(u.enableZoom)q();if(u.enableRotate)B()}function $(e){if(M.length==1){P.set(e.pageX,e.pageY)}else{const t=Ee(e);const n=.5*(e.pageX+t.x);const o=.5*(e.pageY+t.y);P.set(n,o)}T.subVectors(P,O).multiplyScalar(u.rotateSpeed);const t=u.domElement;x(2*Math.PI*T.x/t.clientHeight);S(2*Math.PI*T.y/t.clientHeight);O.copy(P)}function ee(e){if(M.length===1){A.set(e.pageX,e.pageY)}else{const t=Ee(e);const n=.5*(e.pageX+t.x);const o=.5*(e.pageY+t.y);A.set(n,o)}L.subVectors(A,v).multiplyScalar(u.panSpeed);_(L.x,L.y);v.copy(A)}function te(e){const t=Ee(e);const n=e.pageX-t.x;const o=e.pageY-t.y;const a=Math.sqrt(n*n+o*o);N.set(0,a);j.set(0,Math.pow(N.y/w.y,u.zoomSpeed));H(j.y);w.copy(N)}function ne(e){if(u.enableZoom)te(e);if(u.enablePan)ee(e)}function oe(e){if(u.enableZoom)te(e);if(u.enableRotate)$(e)}function ae(e){if(u.enabled===false)return;if(M.length===0){u.domElement.setPointerCapture(e.pointerId);u.domElement.addEventListener("pointermove",ie);u.domElement.addEventListener("pointerup",se)}he(e);if(e.pointerType==="touch"){ue(e)}else{ce(e)}}function ie(e){if(u.enabled===false)return;if(e.pointerType==="touch"){pe(e)}else{re(e)}}function se(e){de(e);if(M.length===0){u.domElement.releasePointerCapture(e.pointerId);u.domElement.removeEventListener("pointermove",ie);u.domElement.removeEventListener("pointerup",se)}u.dispatchEvent(l);f=p.NONE}function ce(e){let t;switch(e.button){case 0:t=u.mouseButtons.LEFT;break;case 1:t=u.mouseButtons.MIDDLE;break;case 2:t=u.mouseButtons.RIGHT;break;default:t=-1}switch(t){case n.DOLLY:if(u.enableZoom===false)return;z(e);f=p.DOLLY;break;case n.ROTATE:if(e.ctrlKey||e.metaKey||e.shiftKey){if(u.enablePan===false)return;X(e);f=p.PAN}else{if(u.enableRotate===false)return;C(e);f=p.ROTATE}break;case n.PAN:if(e.ctrlKey||e.metaKey||e.shiftKey){if(u.enableRotate===false)return;C(e);f=p.ROTATE}else{if(u.enablePan===false)return;X(e);f=p.PAN}break;default:f=p.NONE}if(f!==p.NONE){u.dispatchEvent(r)}}function re(e){switch(f){case p.ROTATE:if(u.enableRotate===false)return;Z(e);break;case p.DOLLY:if(u.enableZoom===false)return;F(e);break;case p.PAN:if(u.enablePan===false)return;U(e);break}}function le(e){if(u.enabled===false||u.enableZoom===false||f!==p.NONE)return;e.preventDefault();u.dispatchEvent(r);V(e);u.dispatchEvent(l)}function me(e){if(u.enabled===false||u.enablePan===false)return;G(e)}function ue(e){be(e);switch(M.length){case 1:switch(u.touches.ONE){case o.ROTATE:if(u.enableRotate===false)return;B();f=p.TOUCH_ROTATE;break;case o.PAN:if(u.enablePan===false)return;W();f=p.TOUCH_PAN;break;default:f=p.NONE}break;case 2:switch(u.touches.TWO){case o.DOLLY_PAN:if(u.enableZoom===false&&u.enablePan===false)return;Q();f=p.TOUCH_DOLLY_PAN;break;case o.DOLLY_ROTATE:if(u.enableZoom===false&&u.enableRotate===false)return;J();f=p.TOUCH_DOLLY_ROTATE;break;default:f=p.NONE}break;default:f=p.NONE}if(f!==p.NONE){u.dispatchEvent(r)}}function pe(e){be(e);switch(f){case p.TOUCH_ROTATE:if(u.enableRotate===false)return;$(e);u.update();break;case p.TOUCH_PAN:if(u.enablePan===false)return;ee(e);u.update();break;case p.TOUCH_DOLLY_PAN:if(u.enableZoom===false&&u.enablePan===false)return;ne(e);u.update();break;case p.TOUCH_DOLLY_ROTATE:if(u.enableZoom===false&&u.enableRotate===false)return;oe(e);u.update();break;default:f=p.NONE}}function fe(e){if(u.enabled===false)return;e.preventDefault()}function he(e){M.push(e)}function de(e){delete k[e.pointerId];for(let t=0;t<M.length;t++){if(M[t].pointerId==e.pointerId){M.splice(t,1);return}}}function be(e){let t=k[e.pointerId];if(t===undefined){t=new s;k[e.pointerId]=t}t.set(e.pageX,e.pageY)}function Ee(e){const t=e.pointerId===M[0].pointerId?M[1]:M[0];return k[t.pointerId]}u.domElement.addEventListener("contextmenu",fe);u.domElement.addEventListener("pointerdown",ae);u.domElement.addEventListener("pointercancel",se);u.domElement.addEventListener("wheel",le,{passive:false});this.update()}}export{m as OrbitControls};
|
|
1
|
+
import{E as e,a as t,b as n,T as o,Q as a,S as i,V as s}from"./sampleScatter.rendererThree-0b12ac61.js";import"./app-b369b169.js";const c={type:"change"};const r={type:"start"};const l={type:"end"};class m extends e{constructor(e,m){super();this.object=e;this.domElement=m;this.domElement.style.touchAction="none";this.enabled=true;this.target=new t;this.minDistance=0;this.maxDistance=Infinity;this.minZoom=0;this.maxZoom=Infinity;this.minPolarAngle=0;this.maxPolarAngle=Math.PI;this.minAzimuthAngle=-Infinity;this.maxAzimuthAngle=Infinity;this.enableDamping=false;this.dampingFactor=.05;this.enableZoom=true;this.zoomSpeed=1;this.enableRotate=true;this.rotateSpeed=1;this.enablePan=true;this.panSpeed=1;this.screenSpacePanning=true;this.keyPanSpeed=7;this.autoRotate=false;this.autoRotateSpeed=2;this.keys={LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"};this.mouseButtons={LEFT:n.ROTATE,MIDDLE:n.DOLLY,RIGHT:n.PAN};this.touches={ONE:o.ROTATE,TWO:o.DOLLY_PAN};this.target0=this.target.clone();this.position0=this.object.position.clone();this.zoom0=this.object.zoom;this._domElementKeyEvents=null;this.getPolarAngle=function(){return d.phi};this.getAzimuthalAngle=function(){return d.theta};this.getDistance=function(){return this.object.position.distanceTo(this.target)};this.listenToKeyEvents=function(e){e.addEventListener("keydown",me);this._domElementKeyEvents=e};this.stopListenToKeyEvents=function(){this._domElementKeyEvents.removeEventListener("keydown",me);this._domElementKeyEvents=null};this.saveState=function(){u.target0.copy(u.target);u.position0.copy(u.object.position);u.zoom0=u.object.zoom};this.reset=function(){u.target.copy(u.target0);u.object.position.copy(u.position0);u.object.zoom=u.zoom0;u.object.updateProjectionMatrix();u.dispatchEvent(c);u.update();f=p.NONE};this.update=function(){const n=new t;const o=(new a).setFromUnitVectors(e.up,new t(0,1,0));const i=o.clone().invert();const s=new t;const r=new a;const l=2*Math.PI;return function e(){const t=u.object.position;n.copy(t).sub(u.target);n.applyQuaternion(o);d.setFromVector3(n);if(u.autoRotate&&f===p.NONE){x(I())}if(u.enableDamping){d.theta+=b.theta*u.dampingFactor;d.phi+=b.phi*u.dampingFactor}else{d.theta+=b.theta;d.phi+=b.phi}let a=u.minAzimuthAngle;let m=u.maxAzimuthAngle;if(isFinite(a)&&isFinite(m)){if(a<-Math.PI)a+=l;else if(a>Math.PI)a-=l;if(m<-Math.PI)m+=l;else if(m>Math.PI)m-=l;if(a<=m){d.theta=Math.max(a,Math.min(m,d.theta))}else{d.theta=d.theta>(a+m)/2?Math.max(a,d.theta):Math.min(m,d.theta)}}d.phi=Math.max(u.minPolarAngle,Math.min(u.maxPolarAngle,d.phi));d.makeSafe();d.radius*=E;d.radius=Math.max(u.minDistance,Math.min(u.maxDistance,d.radius));if(u.enableDamping===true){u.target.addScaledVector(g,u.dampingFactor)}else{u.target.add(g)}n.setFromSpherical(d);n.applyQuaternion(i);t.copy(u.target).add(n);u.object.lookAt(u.target);if(u.enableDamping===true){b.theta*=1-u.dampingFactor;b.phi*=1-u.dampingFactor;g.multiplyScalar(1-u.dampingFactor)}else{b.set(0,0,0);g.set(0,0,0)}E=1;if(y||s.distanceToSquared(u.object.position)>h||8*(1-r.dot(u.object.quaternion))>h){u.dispatchEvent(c);s.copy(u.object.position);r.copy(u.object.quaternion);y=false;return true}return false}}();this.dispose=function(){u.domElement.removeEventListener("contextmenu",fe);u.domElement.removeEventListener("pointerdown",ae);u.domElement.removeEventListener("pointercancel",se);u.domElement.removeEventListener("wheel",le);u.domElement.removeEventListener("pointermove",ie);u.domElement.removeEventListener("pointerup",se);if(u._domElementKeyEvents!==null){u._domElementKeyEvents.removeEventListener("keydown",me);u._domElementKeyEvents=null}};const u=this;const p={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6};let f=p.NONE;const h=1e-6;const d=new i;const b=new i;let E=1;const g=new t;let y=false;const O=new s;const P=new s;const T=new s;const v=new s;const A=new s;const L=new s;const w=new s;const N=new s;const j=new s;const M=[];const k={};function I(){return 2*Math.PI/60/60*u.autoRotateSpeed}function R(){return Math.pow(.95,u.zoomSpeed)}function x(e){b.theta-=e}function S(e){b.phi-=e}const Y=function(){const e=new t;return function t(n,o){e.setFromMatrixColumn(o,0);e.multiplyScalar(-n);g.add(e)}}();const D=function(){const e=new t;return function t(n,o){if(u.screenSpacePanning===true){e.setFromMatrixColumn(o,1)}else{e.setFromMatrixColumn(o,0);e.crossVectors(u.object.up,e)}e.multiplyScalar(n);g.add(e)}}();const _=function(){const e=new t;return function t(n,o){const a=u.domElement;if(u.object.isPerspectiveCamera){const t=u.object.position;e.copy(t).sub(u.target);let i=e.length();i*=Math.tan(u.object.fov/2*Math.PI/180);Y(2*n*i/a.clientHeight,u.object.matrix);D(2*o*i/a.clientHeight,u.object.matrix)}else if(u.object.isOrthographicCamera){Y(n*(u.object.right-u.object.left)/u.object.zoom/a.clientWidth,u.object.matrix);D(o*(u.object.top-u.object.bottom)/u.object.zoom/a.clientHeight,u.object.matrix)}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.");u.enablePan=false}}}();function H(e){if(u.object.isPerspectiveCamera){E/=e}else if(u.object.isOrthographicCamera){u.object.zoom=Math.max(u.minZoom,Math.min(u.maxZoom,u.object.zoom*e));u.object.updateProjectionMatrix();y=true}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.");u.enableZoom=false}}function K(e){if(u.object.isPerspectiveCamera){E*=e}else if(u.object.isOrthographicCamera){u.object.zoom=Math.max(u.minZoom,Math.min(u.maxZoom,u.object.zoom/e));u.object.updateProjectionMatrix();y=true}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.");u.enableZoom=false}}function C(e){O.set(e.clientX,e.clientY)}function z(e){w.set(e.clientX,e.clientY)}function X(e){v.set(e.clientX,e.clientY)}function Z(e){P.set(e.clientX,e.clientY);T.subVectors(P,O).multiplyScalar(u.rotateSpeed);const t=u.domElement;x(2*Math.PI*T.x/t.clientHeight);S(2*Math.PI*T.y/t.clientHeight);O.copy(P);u.update()}function F(e){N.set(e.clientX,e.clientY);j.subVectors(N,w);if(j.y>0){H(R())}else if(j.y<0){K(R())}w.copy(N);u.update()}function U(e){A.set(e.clientX,e.clientY);L.subVectors(A,v).multiplyScalar(u.panSpeed);_(L.x,L.y);v.copy(A);u.update()}function V(e){if(e.deltaY<0){K(R())}else if(e.deltaY>0){H(R())}u.update()}function G(e){let t=false;switch(e.code){case u.keys.UP:if(e.ctrlKey||e.metaKey||e.shiftKey){S(2*Math.PI*u.rotateSpeed/u.domElement.clientHeight)}else{_(0,u.keyPanSpeed)}t=true;break;case u.keys.BOTTOM:if(e.ctrlKey||e.metaKey||e.shiftKey){S(-2*Math.PI*u.rotateSpeed/u.domElement.clientHeight)}else{_(0,-u.keyPanSpeed)}t=true;break;case u.keys.LEFT:if(e.ctrlKey||e.metaKey||e.shiftKey){x(2*Math.PI*u.rotateSpeed/u.domElement.clientHeight)}else{_(u.keyPanSpeed,0)}t=true;break;case u.keys.RIGHT:if(e.ctrlKey||e.metaKey||e.shiftKey){x(-2*Math.PI*u.rotateSpeed/u.domElement.clientHeight)}else{_(-u.keyPanSpeed,0)}t=true;break}if(t){e.preventDefault();u.update()}}function B(){if(M.length===1){O.set(M[0].pageX,M[0].pageY)}else{const e=.5*(M[0].pageX+M[1].pageX);const t=.5*(M[0].pageY+M[1].pageY);O.set(e,t)}}function W(){if(M.length===1){v.set(M[0].pageX,M[0].pageY)}else{const e=.5*(M[0].pageX+M[1].pageX);const t=.5*(M[0].pageY+M[1].pageY);v.set(e,t)}}function q(){const e=M[0].pageX-M[1].pageX;const t=M[0].pageY-M[1].pageY;const n=Math.sqrt(e*e+t*t);w.set(0,n)}function Q(){if(u.enableZoom)q();if(u.enablePan)W()}function J(){if(u.enableZoom)q();if(u.enableRotate)B()}function $(e){if(M.length==1){P.set(e.pageX,e.pageY)}else{const t=Ee(e);const n=.5*(e.pageX+t.x);const o=.5*(e.pageY+t.y);P.set(n,o)}T.subVectors(P,O).multiplyScalar(u.rotateSpeed);const t=u.domElement;x(2*Math.PI*T.x/t.clientHeight);S(2*Math.PI*T.y/t.clientHeight);O.copy(P)}function ee(e){if(M.length===1){A.set(e.pageX,e.pageY)}else{const t=Ee(e);const n=.5*(e.pageX+t.x);const o=.5*(e.pageY+t.y);A.set(n,o)}L.subVectors(A,v).multiplyScalar(u.panSpeed);_(L.x,L.y);v.copy(A)}function te(e){const t=Ee(e);const n=e.pageX-t.x;const o=e.pageY-t.y;const a=Math.sqrt(n*n+o*o);N.set(0,a);j.set(0,Math.pow(N.y/w.y,u.zoomSpeed));H(j.y);w.copy(N)}function ne(e){if(u.enableZoom)te(e);if(u.enablePan)ee(e)}function oe(e){if(u.enableZoom)te(e);if(u.enableRotate)$(e)}function ae(e){if(u.enabled===false)return;if(M.length===0){u.domElement.setPointerCapture(e.pointerId);u.domElement.addEventListener("pointermove",ie);u.domElement.addEventListener("pointerup",se)}he(e);if(e.pointerType==="touch"){ue(e)}else{ce(e)}}function ie(e){if(u.enabled===false)return;if(e.pointerType==="touch"){pe(e)}else{re(e)}}function se(e){de(e);if(M.length===0){u.domElement.releasePointerCapture(e.pointerId);u.domElement.removeEventListener("pointermove",ie);u.domElement.removeEventListener("pointerup",se)}u.dispatchEvent(l);f=p.NONE}function ce(e){let t;switch(e.button){case 0:t=u.mouseButtons.LEFT;break;case 1:t=u.mouseButtons.MIDDLE;break;case 2:t=u.mouseButtons.RIGHT;break;default:t=-1}switch(t){case n.DOLLY:if(u.enableZoom===false)return;z(e);f=p.DOLLY;break;case n.ROTATE:if(e.ctrlKey||e.metaKey||e.shiftKey){if(u.enablePan===false)return;X(e);f=p.PAN}else{if(u.enableRotate===false)return;C(e);f=p.ROTATE}break;case n.PAN:if(e.ctrlKey||e.metaKey||e.shiftKey){if(u.enableRotate===false)return;C(e);f=p.ROTATE}else{if(u.enablePan===false)return;X(e);f=p.PAN}break;default:f=p.NONE}if(f!==p.NONE){u.dispatchEvent(r)}}function re(e){switch(f){case p.ROTATE:if(u.enableRotate===false)return;Z(e);break;case p.DOLLY:if(u.enableZoom===false)return;F(e);break;case p.PAN:if(u.enablePan===false)return;U(e);break}}function le(e){if(u.enabled===false||u.enableZoom===false||f!==p.NONE)return;e.preventDefault();u.dispatchEvent(r);V(e);u.dispatchEvent(l)}function me(e){if(u.enabled===false||u.enablePan===false)return;G(e)}function ue(e){be(e);switch(M.length){case 1:switch(u.touches.ONE){case o.ROTATE:if(u.enableRotate===false)return;B();f=p.TOUCH_ROTATE;break;case o.PAN:if(u.enablePan===false)return;W();f=p.TOUCH_PAN;break;default:f=p.NONE}break;case 2:switch(u.touches.TWO){case o.DOLLY_PAN:if(u.enableZoom===false&&u.enablePan===false)return;Q();f=p.TOUCH_DOLLY_PAN;break;case o.DOLLY_ROTATE:if(u.enableZoom===false&&u.enableRotate===false)return;J();f=p.TOUCH_DOLLY_ROTATE;break;default:f=p.NONE}break;default:f=p.NONE}if(f!==p.NONE){u.dispatchEvent(r)}}function pe(e){be(e);switch(f){case p.TOUCH_ROTATE:if(u.enableRotate===false)return;$(e);u.update();break;case p.TOUCH_PAN:if(u.enablePan===false)return;ee(e);u.update();break;case p.TOUCH_DOLLY_PAN:if(u.enableZoom===false&&u.enablePan===false)return;ne(e);u.update();break;case p.TOUCH_DOLLY_ROTATE:if(u.enableZoom===false&&u.enableRotate===false)return;oe(e);u.update();break;default:f=p.NONE}}function fe(e){if(u.enabled===false)return;e.preventDefault()}function he(e){M.push(e)}function de(e){delete k[e.pointerId];for(let t=0;t<M.length;t++){if(M[t].pointerId==e.pointerId){M.splice(t,1);return}}}function be(e){let t=k[e.pointerId];if(t===undefined){t=new s;k[e.pointerId]=t}t.set(e.pageX,e.pageY)}function Ee(e){const t=e.pointerId===M[0].pointerId?M[1]:M[0];return k[t.pointerId]}u.domElement.addEventListener("contextmenu",fe);u.domElement.addEventListener("pointerdown",ae);u.domElement.addEventListener("pointercancel",se);u.domElement.addEventListener("wheel",le,{passive:false});this.update()}}export{m as OrbitControls};
|