@sjcrh/proteinpaint-client 2.77.0 → 2.78.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-acb8cfdd.js → 2dmaf-7dddba15.js} +1 -1
- package/dist/{AppHeader-315dbd3a.js → AppHeader-67cea623.js} +1 -1
- package/dist/{ColorScale-4b4ea8a2.js → ColorScale-7a36cc17.js} +1 -1
- package/dist/{DEanalysis-28ddd620.js → DEanalysis-417e1f88.js} +1 -1
- package/dist/{Disco-3c427131.js → Disco-30abd4cb.js} +1 -1
- package/dist/{Disco.UI-b071cf7a.js → Disco.UI-ea58ee03.js} +1 -1
- package/dist/{DragControls-7961799c.js → DragControls-a5072cfd.js} +1 -1
- package/dist/{DziViewer-aa5b5706.js → DziViewer-af3c5a76.js} +1 -1
- package/dist/FilterRxComp-cb149666.js +1 -0
- package/dist/FilterStateless-bdd1416d.js +1 -0
- package/dist/{HicApp-674a148d.js → HicApp-fe8682af.js} +1 -1
- package/dist/{OrbitControls-58ca2292.js → OrbitControls-0d20d46b.js} +1 -1
- package/dist/{WSIViewer-afe97e2e.js → WSIViewer-64e55fb8.js} +1 -1
- package/dist/{adSandbox-791d704e.js → adSandbox-5753745b.js} +1 -1
- package/dist/app-488d9fd6.js +1 -0
- package/dist/{app-bd9f016b.js → app-5aa892cb.js} +1 -1
- package/dist/app-d9433820.js +1 -0
- package/dist/app.js +1 -1
- package/dist/bam-4e0df8b6.js +1 -0
- package/dist/{barchart-e3dcfc5f.js → barchart-687ae584.js} +1 -1
- package/dist/{barchart.events-cecb7bf5.js → barchart.events-9e2c1acf.js} +1 -1
- package/dist/{bars.renderer-58e38632.js → bars.renderer-95f7250f.js} +1 -1
- package/dist/{block-944afb9f.js → block-2f22e7fd.js} +1 -1
- package/dist/block.lazyload-143ae987.js +1 -0
- package/dist/{block.legend-3dbc41a8.js → block.legend-aa831169.js} +1 -1
- package/dist/{block.mds-b3967ce5.js → block.mds-64d95cf9.js} +1 -1
- package/dist/{block.mds.cnv-6de3115e.js → block.mds.cnv-2520897d.js} +1 -1
- package/dist/{block.mds.expressionrank-553613e8.js → block.mds.expressionrank-582ed7bc.js} +1 -1
- package/dist/{block.mds.expressionstat-2c396bb9.js → block.mds.expressionstat-483c9bc9.js} +1 -1
- package/dist/{block.mds.geneboxplot-552fe571.js → block.mds.geneboxplot-c1276cba.js} +1 -1
- package/dist/{block.mds.junction-1e25c13d.js → block.mds.junction-4a132819.js} +1 -1
- package/dist/{block.mds.svcnv-462d762d.js → block.mds.svcnv-a532eca7.js} +1 -1
- package/dist/{block.mds.svcnv.share-766e4b22.js → block.mds.svcnv.share-6575b7cf.js} +1 -1
- package/dist/{block.mds2-6e04432d.js → block.mds2-9ce41a23.js} +1 -1
- package/dist/{block.svg-40b47da8.js → block.svg-adb13c76.js} +1 -1
- package/dist/{block.tk.aicheck-cc42cbaf.js → block.tk.aicheck-ef6b634b.js} +1 -1
- package/dist/{block.tk.ase-da848c5f.js → block.tk.ase-1b119031.js} +1 -1
- package/dist/{block.tk.bam-8053c97e.js → block.tk.bam-2aa824aa.js} +1 -1
- package/dist/{block.tk.bedgraphdot-79cb0faf.js → block.tk.bedgraphdot-983fe4b3.js} +1 -1
- package/dist/{block.tk.bigwig.ui-a8decec7.js → block.tk.bigwig.ui-fb6401ee.js} +1 -1
- package/dist/{block.tk.hicstraw-3d1e9d41.js → block.tk.hicstraw-c6732591.js} +1 -1
- package/dist/{block.tk.junction-81eae755.js → block.tk.junction-429b654c.js} +1 -1
- package/dist/{block.tk.junction.textmatrixui-4c45b69a.js → block.tk.junction.textmatrixui-15bd752c.js} +1 -1
- package/dist/{block.tk.ld-997fca31.js → block.tk.ld-fba14536.js} +1 -1
- package/dist/{block.tk.menu-d3e7ccbb.js → block.tk.menu-1299ae5e.js} +1 -1
- package/dist/{block.tk.pgv-ae1d1f59.js → block.tk.pgv-c946527f.js} +1 -1
- package/dist/{boxplot-fed0a86b.js → boxplot-dbf30a19.js} +1 -1
- package/dist/{brainImaging-b455fd0c.js → brainImaging-b2865ba3.js} +1 -1
- package/dist/{brush-06989a5e.js → brush-1a123226.js} +1 -1
- package/dist/{categorical-82722704.js → categorical-f67752ed.js} +1 -1
- package/dist/{condition-f68cc8d1.js → condition-dcc70001.js} +1 -1
- package/dist/{controls-1d99916a.js → controls-f4648f7f.js} +1 -1
- package/dist/controls.btns-26bb6ef1.js +1 -0
- package/dist/{controls.config-00ce9f0b.js → controls.config-9870bdea.js} +1 -1
- package/dist/{cuminc-879690b0.js → cuminc-2273cdd3.js} +1 -1
- package/dist/{customdata.inputui-c563c695.js → customdata.inputui-fb1b24dc.js} +1 -1
- package/dist/{dataDownload-087ac205.js → dataDownload-b94871d0.js} +1 -1
- package/dist/{databrowser.ui-9f98f6b3.js → databrowser.ui-8ace51c3.js} +1 -1
- package/dist/{density-e0aff1d0.js → density-e023c28f.js} +1 -1
- package/dist/{dictionary-fe0ea1d6.js → dictionary-321e19f9.js} +1 -1
- package/dist/{drag-e11d6644.js → drag-1b98e43e.js} +1 -1
- package/dist/{e2pca-b3250d5c.js → e2pca-00e78fdc.js} +1 -1
- package/dist/{ep-9ca01df0.js → ep-b0d6177c.js} +1 -1
- package/dist/{facet-397afad5.js → facet-26292a3d.js} +1 -1
- package/dist/{filter-b3d3964e.js → filter-67d51c09.js} +1 -1
- package/dist/{fusion.parse-e5312047.js → fusion.parse-7e3a6071.js} +1 -1
- package/dist/{geneExpClustering-4383ff2c.js → geneExpClustering-a2cf1bb9.js} +1 -1
- package/dist/{geneExpression-52678025.js → geneExpression-d1d5a7ca.js} +1 -1
- package/dist/{geneExpression-cfb86b5d.js → geneExpression-dc10af2c.js} +1 -1
- package/dist/{geneExpression-2422f66b.js → geneExpression-e4a5a2cd.js} +1 -1
- package/dist/{geneORA-81220ec0.js → geneORA-248baba7.js} +1 -1
- package/dist/{geneVariant-18f9591a.js → geneVariant-447d6af9.js} +1 -1
- package/dist/{geneVariant-4d22b146.js → geneVariant-7366f3d1.js} +1 -1
- package/dist/{genefusion.ui-e38778dd.js → genefusion.ui-e219424a.js} +1 -1
- package/dist/{genesearch-0587c713.js → genesearch-d8780180.js} +1 -1
- package/dist/{geneset-604d0529.js → geneset-1f67d4c9.js} +1 -1
- package/dist/genomeBrowser-52c639b4.js +1 -0
- package/dist/{genomeBrowser.controls-204f007e.js → genomeBrowser.controls-3a7a1c94.js} +1 -1
- package/dist/{groupsetting-53dfd5e5.js → groupsetting-697a1503.js} +1 -1
- package/dist/{gsea-a1b04406.js → gsea-d3286c53.js} +1 -1
- package/dist/hierCluster-00268175.js +1 -0
- package/dist/{html.legend-6807e9ad.js → html.legend-0abd27ff.js} +1 -1
- package/dist/{imagePlot-f96cdc61.js → imagePlot-f6398b6e.js} +1 -1
- package/dist/{lasso-845446b8.js → lasso-48317f42.js} +1 -1
- package/dist/launch.adhoc-98dc0421.js +1 -0
- package/dist/{leftlabel.sample-3a6037c2.js → leftlabel.sample-591bc38d.js} +1 -1
- package/dist/legacyDataset-354f1a29.js +1 -0
- package/dist/{log-0ea548ec.js → log-1001ca83.js} +1 -1
- package/dist/{lollipop-75e11e9a.js → lollipop-40c4c5cb.js} +1 -1
- package/dist/{maf-e4af10d7.js → maf-10526648.js} +1 -1
- package/dist/{maftimeline-cc2e866c.js → maftimeline-a77349ad.js} +1 -1
- package/dist/matrix-1190d4b3.js +1 -0
- package/dist/matrix-bc0ccf83.js +1 -0
- package/dist/{mavb-b2dd74f6.js → mavb-0d28dd97.js} +1 -1
- package/dist/{mds.fimo-f19840cd.js → mds.fimo-929b9e65.js} +1 -1
- package/dist/{mds.samplescatterplot-254f1de6.js → mds.samplescatterplot-5a4ee6b6.js} +1 -1
- package/dist/{mds.survivalplot-f440db10.js → mds.survivalplot-b04947ee.js} +1 -1
- package/dist/metaboliteIntensity-f407ad0c.js +1 -0
- package/dist/niceNumLabels-621ef5c3.js +1 -0
- package/dist/{nodrag-f6c0801c.js → nodrag-b2866dd8.js} +1 -1
- package/dist/{notify-da3afe99.js → notify-91f0bc5d.js} +1 -1
- package/dist/{numeric-1d0318e8.js → numeric-eb1d29b3.js} +1 -1
- package/dist/{numeric.binary-88bf9e0d.js → numeric.binary-da92d665.js} +1 -1
- package/dist/numeric.continuous-92d1dea8.js +1 -0
- package/dist/numeric.discrete-cd8f09b1.js +1 -0
- package/dist/{numeric.spline-b3968b77.js → numeric.spline-9a9987b6.js} +1 -1
- package/dist/{numeric.toggle-ab8b79be.js → numeric.toggle-8f68f077.js} +1 -1
- package/dist/{oncomatrix-5f4326a8.js → oncomatrix-c29e6de9.js} +1 -1
- package/dist/{parseData-62083461.js → parseData-3bf0ef9f.js} +1 -1
- package/dist/{plot.2dvaf-eccd8ef3.js → plot.2dvaf-9e59c7d1.js} +1 -1
- package/dist/plot.app-fc3608a9.js +1 -0
- package/dist/plot.barplot-122296f7.js +1 -0
- package/dist/{plot.boxplot-0c538ebe.js → plot.boxplot-99c5aac5.js} +1 -1
- package/dist/{plot.brainImaging-ee3a0272.js → plot.brainImaging-a7bb79d6.js} +1 -1
- package/dist/{plot.disco-c9249cbd.js → plot.disco-ccdf741c.js} +1 -1
- package/dist/{plot.dzi-dfd72ddf.js → plot.dzi-aafdf56b.js} +1 -1
- package/dist/plot.ssgq-146075f5.js +1 -0
- package/dist/{plot.vaf2cov-4081decd.js → plot.vaf2cov-41e13dd9.js} +1 -1
- package/dist/{plot.wsi-f6325d95.js → plot.wsi-2327ad63.js} +1 -1
- package/dist/{profileBarchart-f4da0483.js → profileBarchart-46616916.js} +1 -1
- package/dist/profileHome-121aaddb.js +1 -0
- package/dist/profilePlot-a2591a28.js +1 -0
- package/dist/{profilePolar-996784ad.js → profilePolar-006a56b1.js} +1 -1
- package/dist/{profileRadar-79299186.js → profileRadar-3320d932.js} +1 -1
- package/dist/{profileRadarFacility-00e31213.js → profileRadarFacility-7a9cea80.js} +1 -1
- package/dist/{profileSummary-df75e6ff.js → profileSummary-7a747b4e.js} +1 -1
- package/dist/recover-edcdde38.js +1 -0
- package/dist/{regression.inputs-e647b716.js → regression.inputs-d5d44e49.js} +1 -1
- package/dist/{regression.inputs.values.table-b283619d.js → regression.inputs.values.table-daf7bcda.js} +1 -1
- package/dist/regression.results-31a8884d.js +1 -0
- package/dist/{renderPvalueTable-0ed37e90.js → renderPvalueTable-05c29ccf.js} +1 -1
- package/dist/sampleScatter-f6c04130.js +1 -0
- package/dist/{sampleScatter.rendererThree-aa51e3c8.js → sampleScatter.rendererThree-448689c6.js} +2 -2
- package/dist/{sampleView-e4819da2.js → sampleView-0931e571.js} +1 -1
- package/dist/{samplelst-9d9ff205.js → samplelst-27115b0e.js} +1 -1
- package/dist/{samplematrix-3556e5c0.js → samplematrix-2bb2480b.js} +1 -1
- package/dist/{scatter-ff17f653.js → scatter-a8d7c2a0.js} +1 -1
- package/dist/select2Terms-480025f5.js +1 -0
- package/dist/{selectGenomeWithTklst-84f4ff79.js → selectGenomeWithTklst-71344af2.js} +1 -1
- package/dist/{singleCellCellType-a2ce9bfa.js → singleCellCellType-b4061c59.js} +1 -1
- package/dist/{singleCellGeneExpression-a2b45c7a.js → singleCellGeneExpression-547149f2.js} +1 -1
- package/dist/singleCellPlot-2f5ad46a.js +1 -0
- package/dist/{singlecell-a5b8a39b.js → singlecell-1c3bee25.js} +1 -1
- package/dist/{singlecell-63cb06d8.js → singlecell-281a74a6.js} +1 -1
- package/dist/snp-32b8cbd8.js +1 -0
- package/dist/{snp-6e312b4c.js → snp-6bbefa83.js} +1 -1
- package/dist/snplocus-84450f3d.js +1 -0
- package/dist/{spliceevent.a53ss.diagram-aa2df5d7.js → spliceevent.a53ss.diagram-c04f46f1.js} +1 -1
- package/dist/{spliceevent.exonskip.diagram-0b792984.js → spliceevent.exonskip.diagram-a514c12e.js} +1 -1
- package/dist/spliceevent.exonskip.getdefault-a9a45dfc.js +1 -0
- package/dist/{spliceevent.noeventdiagram-e6e29a6e.js → spliceevent.noeventdiagram-b1be922c.js} +1 -1
- package/dist/{spliceevent.phrase-5f65a5f4.js → spliceevent.phrase-57659f7c.js} +1 -1
- package/dist/{stattable-775a5af5.js → stattable-7fa50fd2.js} +1 -1
- package/dist/{style.gdc-519a42d8.js → style.gdc-6b6a2e0c.js} +1 -1
- package/dist/{summary-5866c75f.js → summary-54587ccf.js} +1 -1
- package/dist/{sunburst-f928bfd2.js → sunburst-c24faf27.js} +1 -1
- package/dist/{survival-405514f6.js → survival-21e6637b.js} +1 -1
- package/dist/survival-538cddc2.js +1 -0
- package/dist/{svg.download-cd895635.js → svg.download-0dd56dfd.js} +1 -1
- package/dist/{svg.legend-812ea603.js → svg.legend-21629769.js} +1 -1
- package/dist/{svgraph-037fd7b6.js → svgraph-76e34d5e.js} +1 -1
- package/dist/{svmr-3bd143c3.js → svmr-89b80ea2.js} +1 -1
- package/dist/table-10183501.js +1 -0
- package/dist/{table-e013d8fc.js → table-bb97b5c9.js} +1 -1
- package/dist/{termInfo-e16f90f2.js → termInfo-4d954045.js} +1 -1
- package/dist/termdb.bins-06fd21c1.js +1 -0
- package/dist/termsetting-c12f1c69.js +1 -0
- package/dist/{tk-25ae65c4.js → tk-b96367f7.js} +1 -1
- package/dist/{toggleButtons-2144daab.js → toggleButtons-bb9aca2f.js} +1 -1
- package/dist/{tp.ui-38bc5890.js → tp.ui-f01b186b.js} +1 -1
- package/dist/tvs.density-064e5767.js +1 -0
- package/dist/{tvs.geneVariant-f99fe353.js → tvs.geneVariant-3fac6bed.js} +1 -1
- package/dist/{tvs.numeric-d9108473.js → tvs.numeric-86aacc82.js} +1 -1
- package/dist/{tvs.samplelst-3b8ee998.js → tvs.samplelst-1b00d7b6.js} +1 -1
- package/dist/{uiUtils-57f4b1ba.js → uiUtils-5aad7e13.js} +1 -1
- package/dist/{variantBrowser-56ebc7e1.js → variantBrowser-2c465d02.js} +1 -1
- package/dist/{vcf-e43b533a.js → vcf-55bf2c83.js} +1 -1
- package/dist/{violin-1352dab2.js → violin-edbe9a63.js} +1 -1
- package/dist/violin.interactivity-57637244.js +1 -0
- package/dist/{violin.renderer-4273257d.js → violin.renderer-4cab7448.js} +1 -1
- package/dist/{violinRenderer-7f46e468.js → violinRenderer-24abe5fd.js} +1 -1
- package/dist/{viridis-87a8b605.js → viridis-8a8f3e12.js} +1 -1
- package/dist/{y-cac91178.js → y-6fe1bb7b.js} +1 -1
- package/dist/{zoom-001c2f01.js → zoom-6a36fb2b.js} +1 -1
- package/package.json +6 -5
- package/dist/FilterRxComp-e8de560c.js +0 -1
- package/dist/FilterStateless-75514d37.js +0 -1
- package/dist/app-3d14cbe4.js +0 -1
- package/dist/app-8b5b982a.js +0 -1
- package/dist/bam-fa90bae8.js +0 -1
- package/dist/block.lazyload-4c4e81ff.js +0 -1
- package/dist/controls.btns-237b3154.js +0 -1
- package/dist/genomeBrowser-9f0e8a60.js +0 -1
- package/dist/hierCluster-edaaacc5.js +0 -1
- package/dist/hierCluster.config-a84f69a3.js +0 -1
- package/dist/hierCluster.interactivity-dd917fd3.js +0 -1
- package/dist/hierCluster.renderers-4d33e96a.js +0 -1
- package/dist/launch.adhoc-cb00917b.js +0 -1
- package/dist/legacyDataset-c9bab1e6.js +0 -1
- package/dist/matrix-8b3341c4.js +0 -1
- package/dist/matrix.cells-4dd055e7.js +0 -1
- package/dist/matrix.cluster-7ab94fb5.js +0 -1
- package/dist/matrix.config-b3b56456.js +0 -1
- package/dist/matrix.controls-6e0e9692.js +0 -1
- package/dist/matrix.data-baabaf57.js +0 -1
- package/dist/matrix.dom-cb1f4872.js +0 -1
- package/dist/matrix.groups-9990aade.js +0 -1
- package/dist/matrix.interactivity-3f3cf44d.js +0 -1
- package/dist/matrix.layout-50bc2ea5.js +0 -1
- package/dist/matrix.legend-024e2d50.js +0 -1
- package/dist/matrix.renderers-1aed44e5.js +0 -1
- package/dist/matrix.serieses-dc18fcc2.js +0 -1
- package/dist/matrix.sort-89b98e83.js +0 -1
- package/dist/matrix.sorterUi-0ad98ef0.js +0 -1
- package/dist/metaboliteIntensity-4d905d93.js +0 -1
- package/dist/niceNumLabels-ef07b7ad.js +0 -1
- package/dist/numeric.continuous-d27197cf.js +0 -1
- package/dist/numeric.discrete-b826f33b.js +0 -1
- package/dist/plot.app-4dc30ebc.js +0 -1
- package/dist/plot.barplot-331715f6.js +0 -1
- package/dist/plot.ssgq-b5f68395.js +0 -1
- package/dist/profileHome-11b7d146.js +0 -1
- package/dist/profilePlot-5dd1fe71.js +0 -1
- package/dist/recover-4888c2a9.js +0 -1
- package/dist/regression.results-f61b4a25.js +0 -1
- package/dist/sampleScatter-b96546e9.js +0 -1
- package/dist/select2Terms-eb437c2a.js +0 -1
- package/dist/singleCellPlot-e7e57b0f.js +0 -1
- package/dist/snp-41aa88d1.js +0 -1
- package/dist/snplocus-0653ba82.js +0 -1
- package/dist/spliceevent.exonskip.getdefault-af1943e3.js +0 -1
- package/dist/survival-10dd3d28.js +0 -1
- package/dist/table-be2a9975.js +0 -1
- package/dist/termdb.bins-a60aaa77.js +0 -1
- package/dist/termsetting-7467350f.js +0 -1
- package/dist/tvs.density-060d3006.js +0 -1
- package/dist/violin.interactivity-2502dcd8.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as e,P as t,M as s,a8 as i,af as r,r as a,aC as n,d as l,I as o}from"./app-3d14cbe4.js";import{controlsInit as d,term0_term2_defaultQ as c}from"./controls-1d99916a.js";import{s as p}from"./legacy-d3-polyfill-bdb2d792.js";import{h}from"./html.legend-6807e9ad.js";import{c as u}from"./partjson.esm-b3f1fc21.js";import{f as v}from"./termsetting-7467350f.js";import{s as m,r as f,a as g,g as y}from"./renderPvalueTable-0ed37e90.js";import{a as b}from"./svg.download-cd895635.js";import{l as x}from"./line-264f8f9e.js";import{a as I}from"./area-f56e50f9.js";import{a as k,b as j}from"./axis-747c801e.js";import"./controls.btns-237b3154.js";import"./controls.config-00ce9f0b.js";import"./tslib.es6-c3c2d88f.js";import"path";import"./pointer-c7475677.js";import"./constant-426a1483.js";class w{constructor(e){this.type="survival"}async init(){const e=this.opts;const t=this.opts.controls?null:e.holder.append("div");const i=e.controls?e.holder:e.holder.append("div");this.dom={loadingDiv:i.append("div").style("position","absolute").style("display","none").style("padding","20px").html("Loading ..."),header:e.header,controls:t,holder:i,chartsDiv:i.append("div").style("margin","10px"),legendDiv:i.append("div").style("margin","5px 5px 15px 5px"),hiddenDiv:i.append("div").style("margin","5px 5px 15px 5px"),tip:new s({padding:"5px"}),legendTip:new s({padding:"5px"})};this.dom.tip.onHide=()=>{this.activeMenu=false};if(this.dom.header)this.dom.header.html("Survival Plot");this.settings=Object.assign({},e.settings);this.pj=$(this);this.lineFxn=x().curve(m).x((e=>e.scaledX)).y((e=>e.scaledY));D(this);T(this);this.legendRenderer=h(this.dom.legendDiv,{settings:{legendOrientation:"vertical"},handlers:{legend:{click:e=>this.legendClick(e.target.__data__,e.clientX,e.clientY)}}});this.hiddenRenderer=h(this.dom.hiddenDiv,{settings:{legendOrientation:"vertical"},handlers:{legend:{click:e=>this.legendClick(e.target.__data__,e.clientX,e.clientY)}}});await this.setControls()}async setControls(){if(this.opts.controls){this.opts.controls.on("downloadClick.survival",this.download)}else{this.dom.holder.attr("class","pp-termdb-plot-viz").style("display","inline-block").style("min-width","300px").style("margin-left","50px");this.components={controls:await d({app:this.app,id:this.id,holder:this.dom.controls.attr("class","pp-termdb-plot-controls").style("display","inline-block"),inputs:[{type:"term",configKey:"term2",chartType:"survival",usecase:{target:"survival",detail:"term2"},title:"Overlay data",label:"Overlay",vocabApi:this.app.vocabApi,numericEditMenuVersion:["discrete"],defaultQ4fillTW:c},{type:"term",configKey:"term0",chartType:"survival",usecase:{target:"survival",detail:"term0"},title:"Divide by data",label:"Divide by",vocabApi:this.app.vocabApi,numericEditMenuVersion:["discrete"],defaultQ4fillTW:c},{label:"Chart width",type:"number",chartType:"survival",settingsKey:"svgw",title:"The internal width of the chart plot"},{label:"Chart height",type:"number",chartType:"survival",settingsKey:"svgh",title:"The internal height of the chart plot"},{label:"95% CI",boxLabel:"Visible",type:"checkbox",chartType:"survival",settingsKey:"ciVisible"},{label:"Censored Symbol",type:"radio",chartType:"survival",settingsKey:"symbol",options:[{label:"X",value:"x"},{label:"Tick",value:"vtick"}]},{label:"Time Factor",type:"math",chartType:"survival",settingsKey:"timeFactor",title:"Rescale the time scale by multiplying this factor. Enter a number or an expression like 1/365."},{label:"Time Unit",type:"text",chartType:"survival",settingsKey:"timeUnit",title:`The unit to display in the x-axis title, like 'years'`},{label:"X-axis ticks",type:"text",chartType:"survival",settingsKey:"xTickValues",title:`Option to customize the x-axis tick values, enter as comma-separated values. Will be ignored if empty`,processInput:e=>e?e.split(",").map(Number):[]},{label:"At-risk counts",boxLabel:"Visible",type:"checkbox",chartType:"survival",settingsKey:"atRiskVisible",title:"Display the at-risk counts"},{label:"Default color",type:"color",chartType:"survival",settingsKey:"defaultColor"}]})};this.components.controls.on("downloadClick.survival",this.download)}}getState(e){const t=e.plots.find((e=>e.id===this.id));if(!t){throw`No plot with id='${this.id}' found. Did you set this.id before this.api = getComponentApi(this)?`}return{isVisible:t.term.term.type=="survival"||t.term2&&t.term2.term.type=="survival",genome:this.app.vocabApi.vocab.genome,dslabel:this.app.vocabApi.vocab.dslabel,activeCohort:e.activeCohort,termfilter:e.termfilter,config:{term:JSON.parse(JSON.stringify(t.term)),term0:t.term0?JSON.parse(JSON.stringify(t.term0)):null,term2:t.term2?JSON.parse(JSON.stringify(t.term2)):null,settings:t.settings.survival},termdbConfig:e.termdbConfig}}async main(){try{if(!this.state.isVisible){this.dom.holder.style("display","none");return}if(this.dom.header)this.dom.header.html(this.state.config.term.term.name+` plot`);this.toggleLoadingDiv();Object.assign(this.settings,this.state.config.settings);this.settings.defaultHidden=this.getDefaultHidden();this.settings.hidden=this.settings.customHidden||this.settings.defaultHidden;this.settings.xTitleLabel=this.getXtitleLabel();const e=this.getDataRequestOpts();const t=await this.app.vocabApi.getNestedChartSeriesData(e);this.toggleLoadingDiv("none");this.serverData=t;this.app.vocabApi.syncTermData(this.state.config,t);this.currData=this.processData(t);this.refs=t.refs;this.pj.refresh({data:this.currData});this.setTerm2Color(this.pj.tree.charts);this.symbol=this.getSymbol(7);this.render()}catch(e){throw e}}getDataRequestOpts(){const e=this.state.config;const t={chartType:"survival",term:e.term,filter:this.state.termfilter.filter};if(e.term2)t.term2=e.term2;if(e.term0)t.term0=e.term0;if(this.state.ssid)t.ssid=this.state.ssid;return t}getDefaultHidden(){const e=[];const t=this.state.config.term2;if(!t)return e;const s=t.q.hiddenValues;if(s&&Object.keys(s).length){for(const i in s){e.push(t.term.values[i].label)}}return e}getXtitleLabel(){const e=this.state.config.term.term.type=="survival"?"term":"term2";const t=this.settings.timeUnit?this.settings.timeUnit:this.state.config[e].term.unit;const s=`Time to Event (${t})`;return s}processData(e){this.uniqueSeriesIds=new Set;const t=[];const s=["survival","lower","upper"];for(const i of e.case){const r={};e.keys.forEach(((e,t)=>{r[e]=s.includes(e)?Number(i[t]):i[t]}));r.time=r.time*this.settings.timeFactor;t.push(r);this.uniqueSeriesIds.add(r.seriesId)}this.tests={};if(e.tests){for(const t in e.tests){const s=e.tests[t];this.tests[t]=[];for(const e of s){if(this.settings.hidden.includes(e.series1)||this.settings.hidden.includes(e.series2))continue;this.tests[t].push({pvalue:{id:"pvalue",text:e.pvalue},series1:{id:e.series1},series2:{id:e.series2}})}if(!this.tests[t].length)delete this.tests[t]}}return t}setTerm2Color(e){if(!e)return;const s=this.state.config;const l=t({},s.term2?.term?.values||{},s.term2?.values||{});const o=this.refs.bins[2]&&[this.refs.bins[2]]||Object.values(l);this.term2toColor={};this.colorScale=this.uniqueSeriesIds.size<11?i(r):i(p);const d=[];for(const t of e){for(const e of t.serieses){const t=o.find((t=>t.seriesId===e.seriesId||t.key===e.seriesId||t.name===e.seriesId||t.label===e.seriesId));const s={orig:t?.color||(e.seriesId==""?this.settings.defaultColor:this.colorScale(e.seriesId))};s.rgb=a(s.orig);s.adjusted=s.rgb.toString();s.hex=n(s.adjusted);this.term2toColor[e.seriesId]=s;if(!d.find((t=>t.seriesId==e.seriesId))){d.push({key:e.seriesId,seriesId:e.seriesId,text:e.seriesLabel,color:this.term2toColor[e.seriesId].adjusted,isHidden:this.settings.hidden.includes(e.seriesId)})}}}if(this.refs.orderedKeys){const e=this.refs.orderedKeys.series;d.sort(((t,s)=>e.indexOf(t.seriesId)-e.indexOf(s.seriesId)))}this.legendValues={};d.forEach(((e,t)=>{this.legendValues[e.seriesId]={seriesId:e.seriesId,order:"order"in e?e.order:t,color:this.term2toColor[e.seriesId].orig}}));const c=this.state.config.term2?.values;if(c){d.sort(((e,t)=>{const s=c[e.seriesId];const i=c[t.seriesId];if(s&&i){if("order"in s&&"order"in i)return s.order-i.order;if(s.order)return s.order;if(i.order)return i.order;return 0}if(s)return s.order||0;if(i)return i.order||0;return e.order-t.order}));d.forEach(((e,t)=>{this.legendValues[e.seriesId].order=t}))}if((!s.term.term.type=="survival"||s.term2)&&d.length){const e=s.term.term.type=="survival"?"term2":"term";this.legendData=[{name:s[e].term.name,items:d.filter((e=>!e.isHidden))}];this.hiddenData=[{name:`<span style='color:#aaa; font-weight:400'><span>Hidden categories</span><span style='font-size:0.8rem'> CLICK TO SHOW</span></span>`,items:d.filter((e=>e.isHidden)).map((e=>Object.assign({},e,{isHidden:false})))}]}else{this.legendData=[]}for(const e in this.tests){const t=this.tests[e];for(const e of t){for(const t in e){if(t=="pvalue"){e[t].color="#000"}else{const s=d.find((s=>s.seriesId==e[t].id));e[t].color=s.color;e[t].text=s.text}}}}}toggleLoadingDiv(e=""){if(e!="none"){this.dom.loadingDiv.style("opacity",0).style("display",e).transition().duration("loadingWait"in this?this.loadingWait:0).style("opacity",1)}else{this.dom.loadingDiv.style("display",e)}this.loadingWait=1e3}}const C=e(w);const S=C;function T(e){e.render=function(){const t=e.pj.tree.charts||[{chartId:"No survival data"}];const s=e.dom.chartsDiv.selectAll(".pp-survival-chart").data(t,(e=>e.chartId));s.exit().remove();s.each(e.updateCharts);s.enter().each(e.addCharts);e.dom.holder.style("display","inline-block");e.dom.chartsDiv.on("mouseover",e.mouseover).on("mouseout",e.mouseout);e.legendRenderer(e.settings.atRiskVisible?[]:e.legendData);if(!e.hiddenData?.[0]?.items.length)e.dom.hiddenDiv.style("display","none");else{e.dom.hiddenDiv.style("display","");e.hiddenRenderer(e.hiddenData)}};const t=t=>{e.app.dispatch({type:"plot_edit",id:e.id,config:{settings:{survival:{hiddenPvalues:t}}}})};const s=t=>e.activeMenu=t;e.addCharts=function(a){const n=e.settings;i(a,n);const o=l(this).append("div").attr("class","pp-survival-chart").style("opacity",a.serieses?0:1).style("width","fit-content").style("display","inline-block").style("margin",n.chartMargin+"px").style("padding","10px").style("top",0).style("left",0).style("text-align","left").style("vertical-align","top");const d=o.append("div").style("width",n.svgw+50+"px").style("height",n.chartTitleDivHt+"px").style("text-align","center").style("font-weight","600").style("margin","5px").append("div").attr("class","sjpp-survival-title").style("display","inline-block").style("width","fit-content").datum(a).html((e=>e.chartId)).style("cursor","pointer").on("mouseover",(()=>d.style("text-decoration","underline"))).on("mouseout",(()=>d.style("text-decoration",""))).on("click",e.showMenuForSelectedChart);if(a.serieses){const i=o.append("svg").attr("class","pp-survival-svg");r(i,a,n,0);o.transition().duration(n.duration).style("opacity",1);o.append("div").attr("class","pp-survival-chartLegends").style("vertical-align","top").style("margin","10px 10px 10px 30px").style("display","none");if(e.tests&&a.rawChartId in e.tests){const i=o.select(".pp-survival-chartLegends").style("display","inline-block").append("div");f({title:"Group comparisons (log-rank test)",holder:i,plot:"survival",tests:e.tests[a.rawChartId],s:n,bins:e.refs.bins,tip:e.app.tip,setActiveMenu:s,updateHiddenPvalues:t})}}};function i(e,t){e.visibleSerieses=e.serieses?.filter((e=>!t.hidden.includes(e.seriesId)))||[];const s=e.visibleSerieses.reduce(((e,t)=>t.seriesLabel&&t.seriesLabel.length>e?t.seriesLabel.length:e),0);e.atRiskLabelWidth=t.atRiskVisible?s*(t.axisTitleFontSize-2)*.4+t.atRiskLabelOffset:0}e.updateCharts=function(a){if(!a.serieses)return;const n=e.settings;i(a,n);const o=l(this);o.transition().duration(n.duration).style("width","fit-content");o.select(".sjpp-survival-title").style("width",n.svgw+50).style("height",n.chartTitleDivHt+"px").datum(a.chartId).html(a.chartId);o.selectAll(".sjpp-lock-icon").style("display",n.scale=="byChart"?"block":"none");o.selectAll(".sjpp-unlock-icon").style("display",n.scale=="byChart"?"none":"block");r(o.select("svg"),a,n,n.duration);o.select(".pp-survival-chartLegends").selectAll("*").remove();if(e.tests&&a.rawChartId in e.tests){const i=o.select(".pp-survival-chartLegends").style("display","inline-block").append("div");f({title:"Group comparisons (log-rank test)",holder:i,plot:"survival",tests:e.tests[a.rawChartId],s:n,bins:e.refs.bins,tip:e.app.tip,setActiveMenu:s,updateHiddenPvalues:t})}};function r(t,s,i,r){const o=i.atRiskVisible?i.axisTitleFontSize+4+s.visibleSerieses.length*2*(i.axisTitleFontSize+4):0;t.transition().duration(r).attr("width",i.svgw+s.atRiskLabelWidth).attr("height",i.svgh+o).style("overflow","visible").style("padding-left","20px");const[d,p,h,u,v,m,f,y,b]=a(t);const x=s.atRiskLabelWidth+i.svgPadding.left;d.attr("transform","translate("+x+","+i.svgPadding.top+")");const I=p.selectAll(".sjpp-survival-series").data(s.visibleSerieses,(e=>e&&e[0]?e[0].seriesId:""));I.exit().remove();I.each((function(e,t){n(l(this),s,e,t,i,i.duration)}));I.enter().append("g").attr("class","sjpp-survival-series").each((function(e,t){n(l(this),s,e,t,i)}));c(u,m,v,f,i,s);g({g:y,s:i,chart:s,term2values:e.state.config.term2?.values,term2toColor:e.term2toColor,onSerieClick:e.legendClick});b.attr("x",0).attr("width",i.svgw-i.svgPadding.left-i.svgPadding.right).attr("y",0).attr("height",i.svgh-i.svgPadding.top-i.svgPadding.bottom+i.xAxisOffset);t.seriesTip.update({xScale:s.xScale,xTitleLabel:i.xTitleLabel,decimals:i.seriesTipDecimals,serieses:s.visibleSerieses.map((t=>{const s=`${t.seriesLabel||"Probability"}:`;const i=e.term2toColor[t.seriesId].adjusted||"#000";return{data:t.data.map((e=>({x:e.x,html:`<span style='color: ${i}'>`+`${s} ${(100*e.y).toFixed(2)}% (${(100*e.lower).toFixed(2)} - ${(100*e.upper).toFixed(2)})`+`</span>`})))}}))})}function a(t,s){let i,r,a,n,l,o,d,c,p,h;if(!t.select(".sjpp-survival-mainG").size()){i=t.append("g").attr("class","sjpp-survival-mainG");r=i.append("g").attr("class","sjpcb-survival-seriesesG");a=i.append("g").attr("class","sjpp-survival-axis");n=a.append("g").attr("class","sjpp-survival-x-axis");l=a.append("g").attr("class","sjpp-survival-y-axis");o=a.append("g").attr("class","sjpp-survival-x-title");d=a.append("g").attr("class","sjpp-survival-y-title");c=i.append("g").attr("class","sjpp-survival-atrisk");h=i.append("line").attr("class","sjpcb-plot-tip-line").attr("stroke","#000").attr("stroke-width","1px");p=i.append("rect").attr("class","sjpcb-plot-tip-rect").style("fill","transparent")}else{i=t.select(".sjpp-survival-mainG");r=i.select(".sjpcb-survival-seriesesG");a=i.select(".sjpp-survival-axis");n=a.select(".sjpp-survival-x-axis");l=a.select(".sjpp-survival-y-axis");o=a.select(".sjpp-survival-x-title");d=a.select(".sjpp-survival-y-title");c=i.select(".sjpp-survival-atrisk");p=i.select(".sjpcb-plot-tip-rect");h=i.select(".sjpcb-plot-tip-line")}if(!t.seriesTip){t.seriesTip=y(h,p,e.app?.tip)}return[i,r,a,n,l,o,d,c,p]}function n(t,s,i,r,a,n){t.selectAll("path").remove();t.append("path").attr("d",I().curve(m).x((e=>e.scaledX)).y0((e=>e.scaledY[1])).y1((e=>e.scaledY[2]))(i.data)).style("display",a.ciVisible?"":"none").style("fill",e.term2toColor[i.seriesId].adjusted).style("opacity","0.15").style("stroke","none");d(a,t,i.data.map((e=>({seriesId:e.seriesId,x:e.x,y:e.y,scaledX:e.scaledX,scaledY:e.scaledY[0],seriesName:"survival",seriesLabel:i.seriesLabel,nevent:e.nevent,ncensor:e.ncensor,nrisk:e.nrisk}))));d(a,t.append("g"),i.data.map((e=>({seriesId:e.seriesId,x:e.x,y:e.lower,scaledX:e.scaledX,scaledY:e.scaledY[1],seriesName:"lower",seriesLabel:i.seriesLabel,nevent:e.nevent,ncensor:0,nrisk:e.nrisk}))));d(a,t.append("g"),i.data.map((e=>({seriesId:e.seriesId,x:e.x,y:e.upper,scaledX:e.scaledX,scaledY:e.scaledY[2],seriesName:"upper",seriesLabel:i.seriesLabel,nevent:e.nevent,ncensor:0,nrisk:e.nrisk}))))}function d(t,s,i){s.selectAll("g").remove();const r=i.filter(((e,t)=>t===0||e.nevent||t===i.length-1));const a=i.filter((e=>e.ncensor));s.append("g");const n=i[0].seriesName;const l=e.term2toColor[i[0].seriesId].adjusted;if(n=="survival"){s.append("path").attr("d",e.lineFxn(r)).style("fill","none").style("stroke",l).style("opacity",1).style("stroke-opacity",1)}const o=s.append("g").attr("class","sjpp-survival-censored");const d=o.selectAll(".sjpp-survival-censored-x").data(a,(e=>e.x));d.exit().remove();d.attr("transform",(e=>`translate(${e.scaledX},${e.scaledY})`)).style("stroke",l).style("display","");d.enter().append("path").attr("class","sjpp-survival-censored-x").attr("transform",(e=>`translate(${e.scaledX},${e.scaledY})`)).attr("d",e.symbol).style("fill","transparent").style("fill-opacity",t.fillOpacity).style("stroke",l).style("display","")}function c(e,t,s,i,r,a){let n;if(r.xTickValues?.length){a.xTickValues=r.xTickValues.filter((e=>e===0||e>=a.xMin&&e<=a.xMax));n=k(a.xScale).tickValues(a.xTickValues)}else{a.xTickValues=[];n=k(a.xScale).ticks(4).tickFormat((e=>{a.xTickValues.push(e);return e}))}const l=-.5;e.attr("transform",`translate(${l}, ${r.svgh-r.svgPadding.top-r.svgPadding.bottom+r.xAxisOffset+l})`).call(n);s.attr("transform",`translate(${r.yAxisOffset+l}, ${l})`).call(j(o().domain(a.yScale.domain()).range(a.yScale.range())).ticks(5));t.select("text, title").remove();t.attr("transform","translate("+(r.svgw-r.svgPadding.left-r.svgPadding.right)/2+","+(r.svgh-r.axisTitleFontSize-4)+")").append("text").style("text-anchor","middle").style("font-size",r.axisTitleFontSize+"px").text(r.xTitleLabel);const d="Probability of Survival";i.select("text, title").remove();i.attr("transform","translate("+(-r.svgPadding.left/2-r.axisTitleFontSize)+","+(r.svgh-r.svgPadding.top-r.svgPadding.bottom)/2+")rotate(-90)").append("text").style("text-anchor","middle").style("font-size",r.axisTitleFontSize+"px").text(d)}e.getSymbol=function(t){const s=t,i=s/2;switch(e.settings.symbol){case"x":return`M -${i},-${i} l ${s},${s} M ${i},-${i} l -${s},${s}`;case"vtick":return`M 0,-${i} L 0,${i}`;default:throw`Unrecognized survival plot symbol='${e.settings.symbol}'`}}}function D(e){e.download=function(){if(!e.state)return;b(e.dom.chartsDiv.selectAll(".sjpp-survival-mainG"),"Survival_Plot",e.dom.chartsDiv.select(".pp-survival-chart").node())};e.mouseover=function(e){e.target.__data__};e.mouseout=function(){if(e.activeMenu)return;e.app.tip.hide()};e.legendClick=function(t,s,i){if(t===undefined)return;const r=e.settings.hidden.slice();const a=r.indexOf(t.seriesId);if(a==-1){r.push(t.seriesId);e.showLegendItemMenu(t,r,s,i)}else{r.splice(a,1);e.app.dispatch({type:"plot_edit",id:e.id,config:{settings:{survival:{customHidden:r}}}})}};e.showLegendItemMenu=function(t,s,i,r){const a=e.state.config.term2?.term||null;const n=a?.values?.[t.seriesId]?.label||t.seriesId;const o=`<div style='padding-bottom:8px'><b>${n}</b></div>`;const d=t.seriesId||t.seriesId===0?t:{seriesId:t.id,dataId:t.dataId};if(!d.seriesId&&!d.dataId){if(!a){const s=e.dom.legendTip.clear().d.append("div").html("Edit color: ");const a=s.append("input").attr("type","color").attr("value",e.settings.defaultColor).on("change",(()=>e.adjustColor(a.property("value"),t)));e.dom.legendTip.show(i,r)}return}const c=[];c.push({label:"Hide",callback:()=>{p.hide();e.app.dispatch({type:"plot_edit",id:e.id,config:{settings:{survival:{customHidden:s}}}})}});if(e.legendData[0]?.items.length>1){c.push({label:"Move ",setInput:s=>{const i=e.legendValues[t.seriesId].order;if(i!=0)s.append("button").html("up").on("click",(()=>{p.hide();e.adjustValueOrder(t,-1)}));if(i<e.legendData[0]?.items.length-1)s.append("button").html("down").on("click",(()=>{p.hide();e.adjustValueOrder(t,1)}))}})}c.push({setInput:s=>{const i=s.append("div");i.html("Edit color: ");const r=i.append("input").attr("type","color").attr("value",e.term2toColor[t.seriesId].hex).on("change",(()=>e.adjustColor(r.property("value"),t)))}});if(!c.length)return;const p=e.dom.legendTip.clear();p.d.append("div").html(o);p.d.append("div").selectAll("div").data(c).enter().append("div").attr("class",(e=>e.label=="Hide"?"sja_menuoption":"sja_menuoption_not_interactive")).on("click",((s,i)=>{if(i.setInput)return;e.app.tip.hide();i.callback(t)})).each((function(e){const t=l(this);if(e.label)t.append("div").style("display","inline-block").html(e.label);if(e.setInput)e.setInput(t.append("div").style("display","inline-block"))}));p.show(event.clientX,event.clientY)};e.adjustValueOrder=(t,s)=>{const i=JSON.parse(JSON.stringify(e.state.config.term2?.values||e.legendValues));if(!i[t.seriesId]){i[t.seriesId]=Object.assign({},e.state.config.term2?.term?.values||{})}for(const t in i){if(!("order"in i[t]))i[t].order=e.legendValues[t].order}const r=i[t.seriesId];r.order+=s;for(const e in i){if(e==t.seriesId)continue;if("order"in i[e]&&i[e].order===r.order){i[e].order+=-1*s;break}}const a=JSON.parse(JSON.stringify(e.state.config.term2));a.values=i;e.app.dispatch({type:"plot_edit",id:e.id,config:{term2:a}});e.app.tip.hide()};e.adjustColor=(t,s)=>{const i=a(t).formatHex();const r=e.state.config.term2;if(!r){e.app.dispatch({type:"plot_edit",id:e.id,config:{settings:{survival:{defaultColor:i}}}})}else{const t=structuredClone(r?.term.values||e.legendValues);const a=structuredClone(r);a.term.values=t;if(!t)a.term.values={[s.seriesId]:{}};a.term.values[s.seriesId].color=i;e.app.dispatch({type:"plot_edit",id:e.id,config:{term2:a}})}e.app.tip.hide()};e.showMenuForSelectedChart=function(){e.dom.tip.clear();e.activeMenu=true;e.dom.tip.showunder(this).d.append("button").html("Download SVG").on("click",(()=>{if(!e.state)return;const t=l(this.closest(".pp-survival-chart"));b(t.select(".sjpp-survival-mainG"),"Survival_Plot",t.node())}))}}async function O(e,s){if(!e.term)throw"survival getPlotConfig: opts.term{} missing";try{await v(e.term,s.vocabApi);if(e.term2)await v(e.term2,s.vocabApi);if(e.term0)await v(e.term0,s.vocabApi)}catch(e){throw`${e} [survival getPlotConfig()]`}const i={id:e.term.term.id,settings:{controls:{term2:null,term0:null},survival:{radius:5,ciVisible:false,fill:"#fff",stroke:"#000",symbol:"vtick",fillOpacity:0,chartMargin:10,svgw:400,svgh:300,timeFactor:1,timeUnit:"",atRiskVisible:true,atRiskLabelOffset:-20,xTickValues:[],seriesTipDecimals:1,svgPadding:{top:20,left:55,right:20,bottom:50},axisTitleFontSize:16,xAxisOffset:5,yAxisOffset:-5,hiddenPvalues:[],defaultColor:"#2077b4"}}};return t(i,e)}function $(e){const t=new u({template:{yMin:">=yMin()",yMax:"<=yMax()",charts:[{chartId:"@key",rawChartId:"$chartId",xMin:">$time",xMax:"<$time","__:xScale":"=xScale()","__:yScale":"=yScale()",yMin:">=yMin()",yMax:"<=yMax()",serieses:[{chartId:"@parent.@parent.@key",seriesId:"@key","__:seriesLabel":"=seriesLabel()",data:[{"__:seriesId":"@parent.@parent.seriesId",x:"$time",y:"$survival",lower:"$lower",upper:"$upper","_1:scaledX":"=scaledX()","_1:scaledY":"=scaledY()",nevent:"$nevent",ncensor:"$ncensor",nrisk:"$nrisk"},"=timeCensored()"]},"$seriesId"],"@done()":"=sortSerieses()"},"=chartTitle()"],"@done()":"=sortCharts()"},"=":{chartTitle(t){e.settings;if(!t.chartId||t.chartId=="-"){const t=e.state.config.term.term.type=="survival"?"term":"term2";return e.state.config[t].term.name}const s=e.state.config.term0;if(!s||!s.term.values)return t.chartId;if(s.q?.type=="predefined-groupset"||s.q?.type=="custom-groupset")return t.chartId;const i=e.state.config.term0.term.values[t.chartId];return i&&i.label?i.label:t.chartId},seriesLabel(t,s){const i=e.state.config.term2;if(!i)return;const r=s.self.seriesId;if(i?.q?.type=="predefined-groupset"||i?.q?.type=="custom-groupset")return r;if(i&&i.term.values&&r in i.term.values)return i.term.values[r].label;return r},timeCensored(e){return e.time+"-"+e.ncensor},y(e,t){const s=t.context.parent.seriesId;return s=="CI"?[e.lower,e.upper]:e[s]},yMin(e){return e.lower},yMax(e){return e.upper},xScale(t,s){const i=e.settings;i.method==2?0:s.self.xMin;return o().domain([0,s.self.xMax]).range([0,i.svgw-i.svgPadding.left-i.svgPadding.right])},scaledX(e,t){return t.context.context.context.parent.xScale(t.self.x)},scaledY(e,t){const s=t.context.context.context.parent.yScale;const i=t.self;return[s(i.y),s(i.lower),s(i.upper)]},yScale(t,s){const i=e.settings;i.scale=="byChart"?s.self.yMax:s.root.yMax;const r=[1.05,0];return o().domain(r).range([0,i.svgh-i.svgPadding.top-i.svgPadding.bottom])},sortSerieses(t){for(const e of t.serieses){e.data.sort(((e,t)=>e.x<t.x?-1:1))}if(e.refs.orderedKeys){const s=e.refs.orderedKeys.series;t.serieses.sort(((e,t)=>s.indexOf(e.seriesId)-s.indexOf(t.seriesId)))}if(e.refs.bins){const s=e.refs.bins.map((e=>e.label));t.serieses.sort(((e,t)=>s.indexOf(e.seriesId)-s.indexOf(t.seriesId)))}},sortCharts(t){if(!e.refs.orderedKeys)return;const s=e.refs.orderedKeys.chart;t.charts.sort(((e,t)=>s.indexOf(e.chartId)-s.indexOf(t.chartId)))}}});return t}export{S as componentInit,O as getPlotConfig,C as survivalInit};
|
|
1
|
+
import{h as e,P as t,M as s,a8 as i,af as r,r as a,aC as n,d as l,I as o}from"./app-488d9fd6.js";import{controlsInit as d,term0_term2_defaultQ as c}from"./controls-f4648f7f.js";import{s as p}from"./legacy-d3-polyfill-bdb2d792.js";import{h}from"./html.legend-0abd27ff.js";import{c as u}from"./partjson.esm-b3f1fc21.js";import{f as v}from"./termsetting-c12f1c69.js";import{s as m,r as f,a as g,g as y}from"./renderPvalueTable-05c29ccf.js";import{a as b}from"./svg.download-0dd56dfd.js";import{l as x}from"./line-264f8f9e.js";import{a as I}from"./area-f56e50f9.js";import{a as k,b as j}from"./axis-747c801e.js";import"./controls.btns-26bb6ef1.js";import"./controls.config-9870bdea.js";import"./tslib.es6-c3c2d88f.js";import"path";import"./pointer-c7475677.js";import"./constant-426a1483.js";class w{constructor(e){this.type="survival"}async init(){const e=this.opts;const t=this.opts.controls?null:e.holder.append("div");const i=e.controls?e.holder:e.holder.append("div");this.dom={loadingDiv:i.append("div").style("position","absolute").style("display","none").style("padding","20px").html("Loading ..."),header:e.header,controls:t,holder:i,chartsDiv:i.append("div").style("margin","10px"),legendDiv:i.append("div").style("margin","5px 5px 15px 5px"),hiddenDiv:i.append("div").style("margin","5px 5px 15px 5px"),tip:new s({padding:"5px"}),legendTip:new s({padding:"5px"})};this.dom.tip.onHide=()=>{this.activeMenu=false};if(this.dom.header)this.dom.header.html("Survival Plot");this.settings=Object.assign({},e.settings);this.pj=$(this);this.lineFxn=x().curve(m).x((e=>e.scaledX)).y((e=>e.scaledY));D(this);T(this);this.legendRenderer=h(this.dom.legendDiv,{settings:{legendOrientation:"vertical"},handlers:{legend:{click:e=>this.legendClick(e.target.__data__,e.clientX,e.clientY)}}});this.hiddenRenderer=h(this.dom.hiddenDiv,{settings:{legendOrientation:"vertical"},handlers:{legend:{click:e=>this.legendClick(e.target.__data__,e.clientX,e.clientY)}}});await this.setControls()}async setControls(){if(this.opts.controls){this.opts.controls.on("downloadClick.survival",this.download)}else{this.dom.holder.attr("class","pp-termdb-plot-viz").style("display","inline-block").style("min-width","300px").style("margin-left","50px");this.components={controls:await d({app:this.app,id:this.id,holder:this.dom.controls.attr("class","pp-termdb-plot-controls").style("display","inline-block"),inputs:[{type:"term",configKey:"term2",chartType:"survival",usecase:{target:"survival",detail:"term2"},title:"Overlay data",label:"Overlay",vocabApi:this.app.vocabApi,numericEditMenuVersion:["discrete"],defaultQ4fillTW:c},{type:"term",configKey:"term0",chartType:"survival",usecase:{target:"survival",detail:"term0"},title:"Divide by data",label:"Divide by",vocabApi:this.app.vocabApi,numericEditMenuVersion:["discrete"],defaultQ4fillTW:c},{label:"Chart width",type:"number",chartType:"survival",settingsKey:"svgw",title:"The internal width of the chart plot"},{label:"Chart height",type:"number",chartType:"survival",settingsKey:"svgh",title:"The internal height of the chart plot"},{label:"95% CI",boxLabel:"Visible",type:"checkbox",chartType:"survival",settingsKey:"ciVisible"},{label:"Censored Symbol",type:"radio",chartType:"survival",settingsKey:"symbol",options:[{label:"X",value:"x"},{label:"Tick",value:"vtick"}]},{label:"Time Factor",type:"math",chartType:"survival",settingsKey:"timeFactor",title:"Rescale the time scale by multiplying this factor. Enter a number or an expression like 1/365."},{label:"Time Unit",type:"text",chartType:"survival",settingsKey:"timeUnit",title:`The unit to display in the x-axis title, like 'years'`},{label:"X-axis ticks",type:"text",chartType:"survival",settingsKey:"xTickValues",title:`Option to customize the x-axis tick values, enter as comma-separated values. Will be ignored if empty`,processInput:e=>e?e.split(",").map(Number):[]},{label:"At-risk counts",boxLabel:"Visible",type:"checkbox",chartType:"survival",settingsKey:"atRiskVisible",title:"Display the at-risk counts"},{label:"Default color",type:"color",chartType:"survival",settingsKey:"defaultColor"}]})};this.components.controls.on("downloadClick.survival",this.download)}}getState(e){const t=e.plots.find((e=>e.id===this.id));if(!t){throw`No plot with id='${this.id}' found. Did you set this.id before this.api = getComponentApi(this)?`}return{isVisible:t.term.term.type=="survival"||t.term2&&t.term2.term.type=="survival",genome:this.app.vocabApi.vocab.genome,dslabel:this.app.vocabApi.vocab.dslabel,activeCohort:e.activeCohort,termfilter:e.termfilter,config:{term:JSON.parse(JSON.stringify(t.term)),term0:t.term0?JSON.parse(JSON.stringify(t.term0)):null,term2:t.term2?JSON.parse(JSON.stringify(t.term2)):null,settings:t.settings.survival},termdbConfig:e.termdbConfig}}async main(){try{if(!this.state.isVisible){this.dom.holder.style("display","none");return}if(this.dom.header)this.dom.header.html(this.state.config.term.term.name+` plot`);this.toggleLoadingDiv();Object.assign(this.settings,this.state.config.settings);this.settings.defaultHidden=this.getDefaultHidden();this.settings.hidden=this.settings.customHidden||this.settings.defaultHidden;this.settings.xTitleLabel=this.getXtitleLabel();const e=this.getDataRequestOpts();const t=await this.app.vocabApi.getNestedChartSeriesData(e);this.toggleLoadingDiv("none");this.serverData=t;this.app.vocabApi.syncTermData(this.state.config,t);this.currData=this.processData(t);this.refs=t.refs;this.pj.refresh({data:this.currData});this.setTerm2Color(this.pj.tree.charts);this.symbol=this.getSymbol(7);this.render()}catch(e){throw e}}getDataRequestOpts(){const e=this.state.config;const t={chartType:"survival",term:e.term,filter:this.state.termfilter.filter};if(e.term2)t.term2=e.term2;if(e.term0)t.term0=e.term0;if(this.state.ssid)t.ssid=this.state.ssid;return t}getDefaultHidden(){const e=[];const t=this.state.config.term2;if(!t)return e;const s=t.q.hiddenValues;if(s&&Object.keys(s).length){for(const i in s){e.push(t.term.values[i].label)}}return e}getXtitleLabel(){const e=this.state.config.term.term.type=="survival"?"term":"term2";const t=this.settings.timeUnit?this.settings.timeUnit:this.state.config[e].term.unit;const s=`Time to Event (${t})`;return s}processData(e){this.uniqueSeriesIds=new Set;const t=[];const s=["survival","lower","upper"];for(const i of e.case){const r={};e.keys.forEach(((e,t)=>{r[e]=s.includes(e)?Number(i[t]):i[t]}));r.time=r.time*this.settings.timeFactor;t.push(r);this.uniqueSeriesIds.add(r.seriesId)}this.tests={};if(e.tests){for(const t in e.tests){const s=e.tests[t];this.tests[t]=[];for(const e of s){if(this.settings.hidden.includes(e.series1)||this.settings.hidden.includes(e.series2))continue;this.tests[t].push({pvalue:{id:"pvalue",text:e.pvalue},series1:{id:e.series1},series2:{id:e.series2}})}if(!this.tests[t].length)delete this.tests[t]}}return t}setTerm2Color(e){if(!e)return;const s=this.state.config;const l=t({},s.term2?.term?.values||{},s.term2?.values||{});const o=this.refs.bins[2]&&[this.refs.bins[2]]||Object.values(l);this.term2toColor={};this.colorScale=this.uniqueSeriesIds.size<11?i(r):i(p);const d=[];for(const t of e){for(const e of t.serieses){const t=o.find((t=>t.seriesId===e.seriesId||t.key===e.seriesId||t.name===e.seriesId||t.label===e.seriesId));const s={orig:t?.color||(e.seriesId==""?this.settings.defaultColor:this.colorScale(e.seriesId))};s.rgb=a(s.orig);s.adjusted=s.rgb.toString();s.hex=n(s.adjusted);this.term2toColor[e.seriesId]=s;if(!d.find((t=>t.seriesId==e.seriesId))){d.push({key:e.seriesId,seriesId:e.seriesId,text:e.seriesLabel,color:this.term2toColor[e.seriesId].adjusted,isHidden:this.settings.hidden.includes(e.seriesId)})}}}if(this.refs.orderedKeys){const e=this.refs.orderedKeys.series;d.sort(((t,s)=>e.indexOf(t.seriesId)-e.indexOf(s.seriesId)))}this.legendValues={};d.forEach(((e,t)=>{this.legendValues[e.seriesId]={seriesId:e.seriesId,order:"order"in e?e.order:t,color:this.term2toColor[e.seriesId].orig}}));const c=this.state.config.term2?.values;if(c){d.sort(((e,t)=>{const s=c[e.seriesId];const i=c[t.seriesId];if(s&&i){if("order"in s&&"order"in i)return s.order-i.order;if(s.order)return s.order;if(i.order)return i.order;return 0}if(s)return s.order||0;if(i)return i.order||0;return e.order-t.order}));d.forEach(((e,t)=>{this.legendValues[e.seriesId].order=t}))}if((!s.term.term.type=="survival"||s.term2)&&d.length){const e=s.term.term.type=="survival"?"term2":"term";this.legendData=[{name:s[e].term.name,items:d.filter((e=>!e.isHidden))}];this.hiddenData=[{name:`<span style='color:#aaa; font-weight:400'><span>Hidden categories</span><span style='font-size:0.8rem'> CLICK TO SHOW</span></span>`,items:d.filter((e=>e.isHidden)).map((e=>Object.assign({},e,{isHidden:false})))}]}else{this.legendData=[]}for(const e in this.tests){const t=this.tests[e];for(const e of t){for(const t in e){if(t=="pvalue"){e[t].color="#000"}else{const s=d.find((s=>s.seriesId==e[t].id));e[t].color=s.color;e[t].text=s.text}}}}}toggleLoadingDiv(e=""){if(e!="none"){this.dom.loadingDiv.style("opacity",0).style("display",e).transition().duration("loadingWait"in this?this.loadingWait:0).style("opacity",1)}else{this.dom.loadingDiv.style("display",e)}this.loadingWait=1e3}}const C=e(w);const S=C;function T(e){e.render=function(){const t=e.pj.tree.charts||[{chartId:"No survival data"}];const s=e.dom.chartsDiv.selectAll(".pp-survival-chart").data(t,(e=>e.chartId));s.exit().remove();s.each(e.updateCharts);s.enter().each(e.addCharts);e.dom.holder.style("display","inline-block");e.dom.chartsDiv.on("mouseover",e.mouseover).on("mouseout",e.mouseout);e.legendRenderer(e.settings.atRiskVisible?[]:e.legendData);if(!e.hiddenData?.[0]?.items.length)e.dom.hiddenDiv.style("display","none");else{e.dom.hiddenDiv.style("display","");e.hiddenRenderer(e.hiddenData)}};const t=t=>{e.app.dispatch({type:"plot_edit",id:e.id,config:{settings:{survival:{hiddenPvalues:t}}}})};const s=t=>e.activeMenu=t;e.addCharts=function(a){const n=e.settings;i(a,n);const o=l(this).append("div").attr("class","pp-survival-chart").style("opacity",a.serieses?0:1).style("width","fit-content").style("display","inline-block").style("margin",n.chartMargin+"px").style("padding","10px").style("top",0).style("left",0).style("text-align","left").style("vertical-align","top");const d=o.append("div").style("width",n.svgw+50+"px").style("height",n.chartTitleDivHt+"px").style("text-align","center").style("font-weight","600").style("margin","5px").append("div").attr("class","sjpp-survival-title").style("display","inline-block").style("width","fit-content").datum(a).html((e=>e.chartId)).style("cursor","pointer").on("mouseover",(()=>d.style("text-decoration","underline"))).on("mouseout",(()=>d.style("text-decoration",""))).on("click",e.showMenuForSelectedChart);if(a.serieses){const i=o.append("svg").attr("class","pp-survival-svg");r(i,a,n,0);o.transition().duration(n.duration).style("opacity",1);o.append("div").attr("class","pp-survival-chartLegends").style("vertical-align","top").style("margin","10px 10px 10px 30px").style("display","none");if(e.tests&&a.rawChartId in e.tests){const i=o.select(".pp-survival-chartLegends").style("display","inline-block").append("div");f({title:"Group comparisons (log-rank test)",holder:i,plot:"survival",tests:e.tests[a.rawChartId],s:n,bins:e.refs.bins,tip:e.app.tip,setActiveMenu:s,updateHiddenPvalues:t})}}};function i(e,t){e.visibleSerieses=e.serieses?.filter((e=>!t.hidden.includes(e.seriesId)))||[];const s=e.visibleSerieses.reduce(((e,t)=>t.seriesLabel&&t.seriesLabel.length>e?t.seriesLabel.length:e),0);e.atRiskLabelWidth=t.atRiskVisible?s*(t.axisTitleFontSize-2)*.4+t.atRiskLabelOffset:0}e.updateCharts=function(a){if(!a.serieses)return;const n=e.settings;i(a,n);const o=l(this);o.transition().duration(n.duration).style("width","fit-content");o.select(".sjpp-survival-title").style("width",n.svgw+50).style("height",n.chartTitleDivHt+"px").datum(a.chartId).html(a.chartId);o.selectAll(".sjpp-lock-icon").style("display",n.scale=="byChart"?"block":"none");o.selectAll(".sjpp-unlock-icon").style("display",n.scale=="byChart"?"none":"block");r(o.select("svg"),a,n,n.duration);o.select(".pp-survival-chartLegends").selectAll("*").remove();if(e.tests&&a.rawChartId in e.tests){const i=o.select(".pp-survival-chartLegends").style("display","inline-block").append("div");f({title:"Group comparisons (log-rank test)",holder:i,plot:"survival",tests:e.tests[a.rawChartId],s:n,bins:e.refs.bins,tip:e.app.tip,setActiveMenu:s,updateHiddenPvalues:t})}};function r(t,s,i,r){const o=i.atRiskVisible?i.axisTitleFontSize+4+s.visibleSerieses.length*2*(i.axisTitleFontSize+4):0;t.transition().duration(r).attr("width",i.svgw+s.atRiskLabelWidth).attr("height",i.svgh+o).style("overflow","visible").style("padding-left","20px");const[d,p,h,u,v,m,f,y,b]=a(t);const x=s.atRiskLabelWidth+i.svgPadding.left;d.attr("transform","translate("+x+","+i.svgPadding.top+")");const I=p.selectAll(".sjpp-survival-series").data(s.visibleSerieses,(e=>e&&e[0]?e[0].seriesId:""));I.exit().remove();I.each((function(e,t){n(l(this),s,e,t,i,i.duration)}));I.enter().append("g").attr("class","sjpp-survival-series").each((function(e,t){n(l(this),s,e,t,i)}));c(u,m,v,f,i,s);g({g:y,s:i,chart:s,term2values:e.state.config.term2?.values,term2toColor:e.term2toColor,onSerieClick:e.legendClick});b.attr("x",0).attr("width",i.svgw-i.svgPadding.left-i.svgPadding.right).attr("y",0).attr("height",i.svgh-i.svgPadding.top-i.svgPadding.bottom+i.xAxisOffset);t.seriesTip.update({xScale:s.xScale,xTitleLabel:i.xTitleLabel,decimals:i.seriesTipDecimals,serieses:s.visibleSerieses.map((t=>{const s=`${t.seriesLabel||"Probability"}:`;const i=e.term2toColor[t.seriesId].adjusted||"#000";return{data:t.data.map((e=>({x:e.x,html:`<span style='color: ${i}'>`+`${s} ${(100*e.y).toFixed(2)}% (${(100*e.lower).toFixed(2)} - ${(100*e.upper).toFixed(2)})`+`</span>`})))}}))})}function a(t,s){let i,r,a,n,l,o,d,c,p,h;if(!t.select(".sjpp-survival-mainG").size()){i=t.append("g").attr("class","sjpp-survival-mainG");r=i.append("g").attr("class","sjpcb-survival-seriesesG");a=i.append("g").attr("class","sjpp-survival-axis");n=a.append("g").attr("class","sjpp-survival-x-axis");l=a.append("g").attr("class","sjpp-survival-y-axis");o=a.append("g").attr("class","sjpp-survival-x-title");d=a.append("g").attr("class","sjpp-survival-y-title");c=i.append("g").attr("class","sjpp-survival-atrisk");h=i.append("line").attr("class","sjpcb-plot-tip-line").attr("stroke","#000").attr("stroke-width","1px");p=i.append("rect").attr("class","sjpcb-plot-tip-rect").style("fill","transparent")}else{i=t.select(".sjpp-survival-mainG");r=i.select(".sjpcb-survival-seriesesG");a=i.select(".sjpp-survival-axis");n=a.select(".sjpp-survival-x-axis");l=a.select(".sjpp-survival-y-axis");o=a.select(".sjpp-survival-x-title");d=a.select(".sjpp-survival-y-title");c=i.select(".sjpp-survival-atrisk");p=i.select(".sjpcb-plot-tip-rect");h=i.select(".sjpcb-plot-tip-line")}if(!t.seriesTip){t.seriesTip=y(h,p,e.app?.tip)}return[i,r,a,n,l,o,d,c,p]}function n(t,s,i,r,a,n){t.selectAll("path").remove();t.append("path").attr("d",I().curve(m).x((e=>e.scaledX)).y0((e=>e.scaledY[1])).y1((e=>e.scaledY[2]))(i.data)).style("display",a.ciVisible?"":"none").style("fill",e.term2toColor[i.seriesId].adjusted).style("opacity","0.15").style("stroke","none");d(a,t,i.data.map((e=>({seriesId:e.seriesId,x:e.x,y:e.y,scaledX:e.scaledX,scaledY:e.scaledY[0],seriesName:"survival",seriesLabel:i.seriesLabel,nevent:e.nevent,ncensor:e.ncensor,nrisk:e.nrisk}))));d(a,t.append("g"),i.data.map((e=>({seriesId:e.seriesId,x:e.x,y:e.lower,scaledX:e.scaledX,scaledY:e.scaledY[1],seriesName:"lower",seriesLabel:i.seriesLabel,nevent:e.nevent,ncensor:0,nrisk:e.nrisk}))));d(a,t.append("g"),i.data.map((e=>({seriesId:e.seriesId,x:e.x,y:e.upper,scaledX:e.scaledX,scaledY:e.scaledY[2],seriesName:"upper",seriesLabel:i.seriesLabel,nevent:e.nevent,ncensor:0,nrisk:e.nrisk}))))}function d(t,s,i){s.selectAll("g").remove();const r=i.filter(((e,t)=>t===0||e.nevent||t===i.length-1));const a=i.filter((e=>e.ncensor));s.append("g");const n=i[0].seriesName;const l=e.term2toColor[i[0].seriesId].adjusted;if(n=="survival"){s.append("path").attr("d",e.lineFxn(r)).style("fill","none").style("stroke",l).style("opacity",1).style("stroke-opacity",1)}const o=s.append("g").attr("class","sjpp-survival-censored");const d=o.selectAll(".sjpp-survival-censored-x").data(a,(e=>e.x));d.exit().remove();d.attr("transform",(e=>`translate(${e.scaledX},${e.scaledY})`)).style("stroke",l).style("display","");d.enter().append("path").attr("class","sjpp-survival-censored-x").attr("transform",(e=>`translate(${e.scaledX},${e.scaledY})`)).attr("d",e.symbol).style("fill","transparent").style("fill-opacity",t.fillOpacity).style("stroke",l).style("display","")}function c(e,t,s,i,r,a){let n;if(r.xTickValues?.length){a.xTickValues=r.xTickValues.filter((e=>e===0||e>=a.xMin&&e<=a.xMax));n=k(a.xScale).tickValues(a.xTickValues)}else{a.xTickValues=[];n=k(a.xScale).ticks(4).tickFormat((e=>{a.xTickValues.push(e);return e}))}const l=-.5;e.attr("transform",`translate(${l}, ${r.svgh-r.svgPadding.top-r.svgPadding.bottom+r.xAxisOffset+l})`).call(n);s.attr("transform",`translate(${r.yAxisOffset+l}, ${l})`).call(j(o().domain(a.yScale.domain()).range(a.yScale.range())).ticks(5));t.select("text, title").remove();t.attr("transform","translate("+(r.svgw-r.svgPadding.left-r.svgPadding.right)/2+","+(r.svgh-r.axisTitleFontSize-4)+")").append("text").style("text-anchor","middle").style("font-size",r.axisTitleFontSize+"px").text(r.xTitleLabel);const d="Probability of Survival";i.select("text, title").remove();i.attr("transform","translate("+(-r.svgPadding.left/2-r.axisTitleFontSize)+","+(r.svgh-r.svgPadding.top-r.svgPadding.bottom)/2+")rotate(-90)").append("text").style("text-anchor","middle").style("font-size",r.axisTitleFontSize+"px").text(d)}e.getSymbol=function(t){const s=t,i=s/2;switch(e.settings.symbol){case"x":return`M -${i},-${i} l ${s},${s} M ${i},-${i} l -${s},${s}`;case"vtick":return`M 0,-${i} L 0,${i}`;default:throw`Unrecognized survival plot symbol='${e.settings.symbol}'`}}}function D(e){e.download=function(){if(!e.state)return;b(e.dom.chartsDiv.selectAll(".sjpp-survival-mainG"),"Survival_Plot",e.dom.chartsDiv.select(".pp-survival-chart").node())};e.mouseover=function(e){e.target.__data__};e.mouseout=function(){if(e.activeMenu)return;e.app.tip.hide()};e.legendClick=function(t,s,i){if(t===undefined)return;const r=e.settings.hidden.slice();const a=r.indexOf(t.seriesId);if(a==-1){r.push(t.seriesId);e.showLegendItemMenu(t,r,s,i)}else{r.splice(a,1);e.app.dispatch({type:"plot_edit",id:e.id,config:{settings:{survival:{customHidden:r}}}})}};e.showLegendItemMenu=function(t,s,i,r){const a=e.state.config.term2?.term||null;const n=a?.values?.[t.seriesId]?.label||t.seriesId;const o=`<div style='padding-bottom:8px'><b>${n}</b></div>`;const d=t.seriesId||t.seriesId===0?t:{seriesId:t.id,dataId:t.dataId};if(!d.seriesId&&!d.dataId){if(!a){const s=e.dom.legendTip.clear().d.append("div").html("Edit color: ");const a=s.append("input").attr("type","color").attr("value",e.settings.defaultColor).on("change",(()=>e.adjustColor(a.property("value"),t)));e.dom.legendTip.show(i,r)}return}const c=[];c.push({label:"Hide",callback:()=>{p.hide();e.app.dispatch({type:"plot_edit",id:e.id,config:{settings:{survival:{customHidden:s}}}})}});if(e.legendData[0]?.items.length>1){c.push({label:"Move ",setInput:s=>{const i=e.legendValues[t.seriesId].order;if(i!=0)s.append("button").html("up").on("click",(()=>{p.hide();e.adjustValueOrder(t,-1)}));if(i<e.legendData[0]?.items.length-1)s.append("button").html("down").on("click",(()=>{p.hide();e.adjustValueOrder(t,1)}))}})}c.push({setInput:s=>{const i=s.append("div");i.html("Edit color: ");const r=i.append("input").attr("type","color").attr("value",e.term2toColor[t.seriesId].hex).on("change",(()=>e.adjustColor(r.property("value"),t)))}});if(!c.length)return;const p=e.dom.legendTip.clear();p.d.append("div").html(o);p.d.append("div").selectAll("div").data(c).enter().append("div").attr("class",(e=>e.label=="Hide"?"sja_menuoption":"sja_menuoption_not_interactive")).on("click",((s,i)=>{if(i.setInput)return;e.app.tip.hide();i.callback(t)})).each((function(e){const t=l(this);if(e.label)t.append("div").style("display","inline-block").html(e.label);if(e.setInput)e.setInput(t.append("div").style("display","inline-block"))}));p.show(event.clientX,event.clientY)};e.adjustValueOrder=(t,s)=>{const i=JSON.parse(JSON.stringify(e.state.config.term2?.values||e.legendValues));if(!i[t.seriesId]){i[t.seriesId]=Object.assign({},e.state.config.term2?.term?.values||{})}for(const t in i){if(!("order"in i[t]))i[t].order=e.legendValues[t].order}const r=i[t.seriesId];r.order+=s;for(const e in i){if(e==t.seriesId)continue;if("order"in i[e]&&i[e].order===r.order){i[e].order+=-1*s;break}}const a=JSON.parse(JSON.stringify(e.state.config.term2));a.values=i;e.app.dispatch({type:"plot_edit",id:e.id,config:{term2:a}});e.app.tip.hide()};e.adjustColor=(t,s)=>{const i=a(t).formatHex();const r=e.state.config.term2;if(!r){e.app.dispatch({type:"plot_edit",id:e.id,config:{settings:{survival:{defaultColor:i}}}})}else{const t=structuredClone(r?.term.values||e.legendValues);const a=structuredClone(r);a.term.values=t;if(!t)a.term.values={[s.seriesId]:{}};a.term.values[s.seriesId].color=i;e.app.dispatch({type:"plot_edit",id:e.id,config:{term2:a}})}e.app.tip.hide()};e.showMenuForSelectedChart=function(){e.dom.tip.clear();e.activeMenu=true;e.dom.tip.showunder(this).d.append("button").html("Download SVG").on("click",(()=>{if(!e.state)return;const t=l(this.closest(".pp-survival-chart"));b(t.select(".sjpp-survival-mainG"),"Survival_Plot",t.node())}))}}async function O(e,s){if(!e.term)throw"survival getPlotConfig: opts.term{} missing";try{await v(e.term,s.vocabApi);if(e.term2)await v(e.term2,s.vocabApi);if(e.term0)await v(e.term0,s.vocabApi)}catch(e){throw`${e} [survival getPlotConfig()]`}const i={id:e.term.term.id,settings:{controls:{term2:null,term0:null},survival:{radius:5,ciVisible:false,fill:"#fff",stroke:"#000",symbol:"vtick",fillOpacity:0,chartMargin:10,svgw:400,svgh:300,timeFactor:1,timeUnit:"",atRiskVisible:true,atRiskLabelOffset:-20,xTickValues:[],seriesTipDecimals:1,svgPadding:{top:20,left:55,right:20,bottom:50},axisTitleFontSize:16,xAxisOffset:5,yAxisOffset:-5,hiddenPvalues:[],defaultColor:"#2077b4"}}};return t(i,e)}function $(e){const t=new u({template:{yMin:">=yMin()",yMax:"<=yMax()",charts:[{chartId:"@key",rawChartId:"$chartId",xMin:">$time",xMax:"<$time","__:xScale":"=xScale()","__:yScale":"=yScale()",yMin:">=yMin()",yMax:"<=yMax()",serieses:[{chartId:"@parent.@parent.@key",seriesId:"@key","__:seriesLabel":"=seriesLabel()",data:[{"__:seriesId":"@parent.@parent.seriesId",x:"$time",y:"$survival",lower:"$lower",upper:"$upper","_1:scaledX":"=scaledX()","_1:scaledY":"=scaledY()",nevent:"$nevent",ncensor:"$ncensor",nrisk:"$nrisk"},"=timeCensored()"]},"$seriesId"],"@done()":"=sortSerieses()"},"=chartTitle()"],"@done()":"=sortCharts()"},"=":{chartTitle(t){e.settings;if(!t.chartId||t.chartId=="-"){const t=e.state.config.term.term.type=="survival"?"term":"term2";return e.state.config[t].term.name}const s=e.state.config.term0;if(!s||!s.term.values)return t.chartId;if(s.q?.type=="predefined-groupset"||s.q?.type=="custom-groupset")return t.chartId;const i=e.state.config.term0.term.values[t.chartId];return i&&i.label?i.label:t.chartId},seriesLabel(t,s){const i=e.state.config.term2;if(!i)return;const r=s.self.seriesId;if(i?.q?.type=="predefined-groupset"||i?.q?.type=="custom-groupset")return r;if(i&&i.term.values&&r in i.term.values)return i.term.values[r].label;return r},timeCensored(e){return e.time+"-"+e.ncensor},y(e,t){const s=t.context.parent.seriesId;return s=="CI"?[e.lower,e.upper]:e[s]},yMin(e){return e.lower},yMax(e){return e.upper},xScale(t,s){const i=e.settings;i.method==2?0:s.self.xMin;return o().domain([0,s.self.xMax]).range([0,i.svgw-i.svgPadding.left-i.svgPadding.right])},scaledX(e,t){return t.context.context.context.parent.xScale(t.self.x)},scaledY(e,t){const s=t.context.context.context.parent.yScale;const i=t.self;return[s(i.y),s(i.lower),s(i.upper)]},yScale(t,s){const i=e.settings;i.scale=="byChart"?s.self.yMax:s.root.yMax;const r=[1.05,0];return o().domain(r).range([0,i.svgh-i.svgPadding.top-i.svgPadding.bottom])},sortSerieses(t){for(const e of t.serieses){e.data.sort(((e,t)=>e.x<t.x?-1:1))}if(e.refs.orderedKeys){const s=e.refs.orderedKeys.series;t.serieses.sort(((e,t)=>s.indexOf(e.seriesId)-s.indexOf(t.seriesId)))}if(e.refs.bins){const s=e.refs.bins.map((e=>e.label));t.serieses.sort(((e,t)=>s.indexOf(e.seriesId)-s.indexOf(t.seriesId)))}},sortCharts(t){if(!e.refs.orderedKeys)return;const s=e.refs.orderedKeys.chart;t.charts.sort(((e,t)=>s.indexOf(e.chartId)-s.indexOf(t.chartId)))}}});return t}export{S as componentInit,O as getPlotConfig,C as survivalInit};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as t}from"./tslib.es6-c3c2d88f.js";import{o}from"./termsetting-c12f1c69.js";import{getHandler as i}from"./numeric.toggle-8f68f077.js";import"./app-488d9fd6.js";import"path";import"./toggleButtons-bb9aca2f.js";function e(e){return{showEditMenu(o){return t(this,void 0,void 0,(function*(){const t=yield i(e);yield t.showEditMenu(o)}))},getPillStatus(){},getPillName(t){return o(e,t)}}}function r(t,o){}export{r as fillTW,e as getHandler};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as t,U as e}from"./app-
|
|
1
|
+
import{d as t,U as e}from"./app-488d9fd6.js";function o(t,e,o){if(o){const e=window.getComputedStyle(o);for(const o of e){if(o.startsWith("font"))t.style(o,e.getPropertyValue(o))}}const n=document.createElement("a");n.setAttribute("download",e);document.body.appendChild(n);n.click();n.remove();const s=new XMLSerializer;const i=new Blob([s.serializeToString(t.node())],{type:"image/svg+xml"});n.href=URL.createObjectURL(i);n.click();n.remove()}function n(o,n,s=null){const i=[];const r={x:undefined,y:undefined};const a=[];let d=0,l=0,c=0;let f=0,h=0;o.each((function(){i.push(this);const e=this.getBBox();if(e.width>d)d=e.width;if(e.height>l)l=e.height;const o=Math.round(this.parentNode.parentNode.getBoundingClientRect().y);if(!h){f=o;h++}else if(Math.abs(o-f)<5){h++}const n=t(this).attr("transform").split("translate(")[1].split(")")[0].split(",").map((t=>+t.trim()));if(r.x===undefined||n[0]>r.x)r.x=+n[0];if(r.y===undefined||n[1]>r.y)r.y=+n[1];const s=this.parentNode.parentNode.firstChild;const p=s.getBoundingClientRect();if(p.width>d)d=p.width;if(p.height>c)c=p.height;a.push({text:s.innerText,styles:window.getComputedStyle(s),tbox:p})}));d+=80;l+=80;const p=document.createElementNS("http://www.w3.org/2000/svg","svg");const y=t(p).style("display","block").style("opacity",1).attr("width",h*d).attr("height",Math.floor(i.length/h)*l);if(s){const t=window.getComputedStyle(s);for(const e of t){if(e.startsWith("font"))y.style(e,t.getPropertyValue(e))}}i.forEach(((e,o)=>{const n=e.cloneNode(true);const s=o%h;const i=Math.floor(o/h);const f={x:s*d+r.x+80,y:i*l+r.y};const y=t(p).append("text").attr("transform","translate("+(f.x+a[o].tbox.width/2-100)+","+f.y+")").text(a[o].text);for(const t of a[o].styles){if(t.startsWith("font"))y.style(t,a[o].styles.getPropertyValue(t))}t(n).attr("transform","translate("+f.x+","+(f.y+c)+")");p.appendChild(n)}));e(p,n,{apply_dom_styles:true})}export{n as a,o as d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as t}from"./app-
|
|
1
|
+
import{d as t}from"./app-488d9fd6.js";function e(e){let a=0;let r=0;const i={ontop:false,lineh:25,padx:5,padleft:0,padright:20,padbtm:30,fontsize:12,iconh:10,iconw:10,hangleft:1,linesep:false,mutationorder:["M","E","F","N","S","D","I","P","L","Intron","ITD","DEL","NLOSS","CLOSS","Utr3","Utr5","X","noncoding","Fuserna","SV","CNV_amp","CNV_loss","snv","mnv"],itemOpacity:1};const s=Object.assign(i,e.settings||{});function o(t,n={}){Object.assign(s,n.settings||{});a=s.padleft;r=0;e.holder.selectAll("g").remove();e.holder.selectAll("text").remove();const i=s.dimensions;if(!e.holder.attr("transform")){e.holder.attr("transform",s.ontop?null:`translate(${i.xOffset},${s.svgh})`)}if(e.note){e.holder.append("text").style("font-size","0.8em").text(e.note).attr("transform",`translate(-135, 15)`).attr("font-style","italic")}const o=e.holder.selectAll("g").data(t);o.exit().remove();o.enter().append("g").each(l);return r+s.lineh+s.padbtm}function l(e,n){if(!e.items||!e.items.length)return;a=0;r+=s.lineh;let i=t(this).style("opacity",e.crossedOut?"0.6":1);const o=s.hangleft?s.padleft+s.hangleft-s.padx:s.padleft;const l=i.append("text").attr("transform","translate("+o+","+(r+s.iconh/2)+")").attr("text-anchor",s.hangleft?"end":"start").attr("font-weight",700).attr("font-size",s.fontsize).attr("dominant-baseline","central").text(e.name).style("text-decoration",e.crossedOut?"line-through":"");if(s.linesep){a=s.padleft;r+=s.lineh}else if(e.hasScale){a=o-2*s.padx+2}else if(s.hangleft){a=o+2*s.padx}else{a+=s.padleft+l.node().getBBox().width+2*s.padx}if(e.sorter)e.items.sort(e.sorter);if(e.d&&e.d.renderAs=="colorScale"){setColorBarLegend(i,e,n)}else{i.selectAll("g").data(e.items).enter().append("g").each(d)}const c=l.node().getBBox();if(Math.abs(c.y+c.height/2)>1){l.attr("y",c.height/4)}}function d(i,o){const l=t(this).attr("transform","translate("+a+","+r+")").style("opacity",s.itemOpacity).style("opacity",i.greyedOut?"0.6":1);const d=l.append("text").attr("transform","translate("+(s.iconw+s.padx/2)+","+s.iconh/2+")").attr("font-size",s.fontsize).attr("dominant-baseline","central").style("cursor","default").style("text-decoration",s.exclude&&s.exclude.classes&&s.exclude.classes.includes(i.class)||i.crossedOut?"line-through":"");d.each((function(e){const a=t(this);if(s.isExcludedAttr&&e[s.isExcludedAttr]){a.style("text-decoration","line-through").style("opacity",.5)}if(typeof e.text=="string"){a.text(e.text)}else if(Array.isArray(e.text)){a.selectAll("tspan").data(e.text).enter().append("tspan").text((t=>t)).attr("dominant-baseline","central").attr("x",(function(a,n){if(n==0){t(this).attr("font-weight",700);e.lastx=t(this).node().getComputedTextLength()+10;return 0}else if(e.lastx){return e.lastx}}))}if(e.onClickCallback){a.on("click",(()=>e.onClickCallback(e,a)));a.style("cursor","pointer")}}));const c=d.node().getBBox();const h=i.width||s.iconw;a+=c.width+h;if(s.linesep||a>s.svgw-s.padright){r+=s.lineh;const t=!s.hangleft?s.padleft:s.padleft+s.hangleft+s.padx;l.attr("transform","translate("+t+","+r+")");a=c.width+h+s.padleft;if(s.hangleft)a=s.iconw+c.width+t;else a=h+c.width+s.padleft}const f=s.fontsize-c.height+(c.height-s.iconh)/2;let p,x;if(i.domain){p=`sjpp-linear-gradient-${n()}`;l.append("linearGradient").attr("id",p).attr("x1","0%").attr("x2","100%").attr("y1","0%").attr("y2","0%").selectAll("stop").data(i.domain.length>2?i.domain:i.domain[0]<i.domain[1]?[0,1]:[1,0]).enter().append("stop").attr("offset",((t,e)=>`${t*100}%`)).attr("stop-color",(t=>i.scale?i.scale(t):"grey")).attr("stop-opacity",1);const t=l.append("text").text(i.minLabel||i.domain[0]).attr("x",c.width+25).attr("y",.82*s.fontsize).style("font-size",s.fontsize).attr("text-anchor","start");x=t.node().getBBox();a+=x.width+5;l.append("rect").attr("height",s.iconh).attr("width",h).attr("x",c.width+x.width+30).attr("y",f).attr("fill",p?`url(#${p})`:e.rectFillFxn).attr("stroke",e.iconStroke).attr("shape-rendering","crispEdges");const r=l.append("text").text(i.maxLabel||i.domain[1]).attr("x",c.width+x.width+135).attr("y",.8*s.fontsize).style("font-size",s.fontsize).attr("text-anchor","start");a+=r.node().getBBox().width+2.5*s.padx+50}else{l.append("rect").attr("height",s.iconh).attr("width",h).attr("y",f).attr("fill",p?`url(#${p})`:e.rectFillFxn).attr("stroke",e.iconStroke).attr("shape-rendering","crispEdges");a+=2.5*s.padx}if(Math.abs(c.y+c.height/2)>1){d.attr("y",c.height/4)}}return o}let a=0;function n(){return`${a++}-${Date.now().toString().slice(-6)}-${Math.random().toString().slice(-6)}`}export{e as s};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as t,M as e,b as n,aG as a,a8 as r,bz as i,I as o,ah as s,bA as l,r as f,aH as d,k as p,p as c,ac as m,U as h,j as u,aJ as g}from"./app-3d14cbe4.js";import{p as x}from"./pointer-c7475677.js";import{c as b,j as w,s as y,x as k,y as v}from"./y-cac91178.js";function M(t){return t.index}function A(t,e){var n=t.get(e);if(!n)throw new Error("node not found: "+e);return n}function _(t){var e=M,n=p,a,r=b(30),i,o,s,l,f,d=1;if(t==null)t=[];function p(t){return 1/Math.min(s[t.source.index],s[t.target.index])}function c(e){for(var n=0,r=t.length;n<d;++n){for(var o=0,s,p,c,m,h,u,g;o<r;++o){s=t[o],p=s.source,c=s.target;m=c.x+c.vx-p.x-p.vx||w(f);h=c.y+c.vy-p.y-p.vy||w(f);u=Math.sqrt(m*m+h*h);u=(u-i[o])/u*e*a[o];m*=u,h*=u;c.vx-=m*(g=l[o]);c.vy-=h*g;p.vx+=m*(g=1-g);p.vy+=h*g}}}function m(){if(!o)return;var n,r=o.length,f=t.length,d=new Map(o.map(((t,n)=>[e(t,n,o),t]))),p;for(n=0,s=new Array(r);n<f;++n){p=t[n],p.index=n;if(typeof p.source!=="object")p.source=A(d,p.source);if(typeof p.target!=="object")p.target=A(d,p.target);s[p.source.index]=(s[p.source.index]||0)+1;s[p.target.index]=(s[p.target.index]||0)+1}for(n=0,l=new Array(f);n<f;++n){p=t[n],l[n]=s[p.source.index]/(s[p.source.index]+s[p.target.index])}a=new Array(f),h();i=new Array(f),u()}function h(){if(!o)return;for(var e=0,r=t.length;e<r;++e){a[e]=+n(t[e],e,t)}}function u(){if(!o)return;for(var e=0,n=t.length;e<n;++e){i[e]=+r(t[e],e,t)}}c.initialize=function(t,e){o=t;f=e;m()};c.links=function(e){return arguments.length?(t=e,m(),c):t};c.id=function(t){return arguments.length?(e=t,c):e};c.iterations=function(t){return arguments.length?(d=+t,c):d};c.strength=function(t){return arguments.length?(n=typeof t==="function"?t:b(+t),h(),c):n};c.distance=function(t){return arguments.length?(r=typeof t==="function"?t:b(+t),u(),c):r};return c}function z(e,n,a,r,i){let o=0;let s=0;let l;let f;p();function d(t){f=t;o=e.legendpadleft;s=0;t.selectAll("g").remove();t.attr("transform",e.legendontop?null:"translate(0,"+e.svgh+")").on("mouseover.tphm2",e.handlers.legend.mouseover);const n=t.selectAll("g").data(e.h.legend);n.exit().remove();n.enter().append("g").each(c);return s+e.legendlineh+e.legendpadbtm}function p(){l={legendontop:true,legendh:0,legendlineh:25,legendpadx:5,legendpadleft:150,legendpadright:20,legendpadbtm:30,legendfontsize:12,legendiconh:10,legendiconw:10,samplecount4legend:true,legendhangleft:1,legendlinesep:false,legendmutationorder:["M","E","F","N","S","D","I","P","L","Intron","ITD","DEL","NLOSS","CLOSS","Utr3","Utr5","X","noncoding","Fuserna","SV","CNV_amp","CNV_loss","snv","mnv"]};for(let t in l){if(!(t in e))e[t]=l[t]}}function c(n,a){if(!n.items||!n.items.length)return;o=0;s+=e.legendlineh;let r=t(this);const i=e.legendhangleft?e.legendpadleft+e.legendhangleft-e.legendpadx:e.legendpadleft;const l=r.append("text").attr("transform","translate("+i+","+(s+e.legendiconh/2)+")").attr("text-anchor",e.legendhangleft?"end":"start").attr("font-weight",700).attr("font-size",e.legendfontsize).attr("dominant-baseline","central").text(n.text+(e.samplecount4legend?" (sample count)":""));if(e.linesep){o=e.legendpadleft;s+=e.legendlineh}else if(e.legendhangleft){o=i+2*e.legendpadx}else{o+=e.legendpadleft+l.node().getBBox().width+2*e.legendpadx}if(n.sorter)n.items.sort(n.sorter);r.selectAll("g").data(n.items).enter().append("g").each(m)}function m(l,f){let d=t(this).attr("transform","translate("+o+","+s+")").style("opacity",i);const p=d.append("text").attr("transform","translate("+(e.legendiconw+e.legendpadx/2)+","+e.legendiconh/2+")").attr("font-size",e.legendfontsize).attr("dominant-baseline","central").each((function(e){const n=t(this);if(typeof e.text=="string"){n.text(a(e))}else if(Array.isArray(e.text)){n.selectAll("tspan").data(e.text).enter().append("tspan").text((t=>t)).attr("dominant-baseline","central").attr("x",(function(n,a){if(a==0){t(this).attr("font-weight",700);e.lastx=t(this).node().getComputedTextLength()+10;return 0}else if(e.lastx){return e.lastx}}))}}));const c=p.node().getBBox();o+=e.legendiconw+c.width+2.5*e.legendpadx;if(e.legendlinesep||o>e.svgw-e.legendpadright){s+=e.legendlineh;const t=!e.legendhangleft?e.legendpadleft:e.legendpadleft+e.legendhangleft+e.legendpadx;d.attr("transform","translate("+t+","+s+")");o=e.legendiconw+c.width+2.5*e.legendpadx+e.legendpadleft;if(e.legendhangleft)o=e.legendiconw+c.width+2.5*e.legendpadx+t;else o=e.legendiconw+c.width+2.5*e.legendpadx+e.legendpadleft}d.append("rect").attr("height",e.legendiconh).attr("width",e.legendiconw).attr("y",e.legendfontsize-c.height+(c.height-e.legendiconh)/2).attr("fill",n).attr("stroke",r).attr("shape-rendering","crispEdges")}d.defaults=l;d.finalizePos=function(t){f.transition().duration(e.duration).attr("transform",e.legendontop?null:"translate(0,"+(e.svgh+t)+")")};return d}function T(g){const b="#ddd";const w=g.pairlst;const M=g.genome;const A=g.holder.append("div");const T=g.holder.append("div");const j=g.holder.append("div").style("display","inline-block").style("border","solid 1px "+b);const E=j.append("div").style("margin","10px");const S=j.append("div").style("margin-top","5px").style("padding","10px 20px").style("background-color","#ededed");const N=j.append("div").style("margin","10px").style("display","none");const R=new e({padding:"10px"});function L(t){u(A,t)}const q=new Set;const C=[];for(const t of w){if(t.a.gm){const e=t.a.gm.isoform;if(M.isoformcache.has(e)){t.a.gm=M.isoformmatch(e,t.a.chr,t.a.position)}else{q.add(e);C.push(t.a)}}if(t.b.gm){const e=t.b.gm.isoform;if(M.isoformcache.has(e)){t.b.gm=M.isoformmatch(e,t.b.chr,t.b.position)}else{q.add(e);C.push(t.b)}}}if(q.size==0){F();return}const P=[];for(const t of q){P.push(t)}n("isoformlst",{method:"POST",body:JSON.stringify({genome:M.name,lst:P})}).then((t=>{if(t.error)throw{message:t.error};for(const e of t.lst){if(e[0]){M.isoformcache.set(e[0].isoform.toUpperCase(),e)}}const e=[];for(const t of C){const n=M.isoformmatch(t.gm.isoform,t.chr,t.position);if(!n){e.push(t.gm.isoform);delete t.gm}else{t.gm=n}}if(e.length){L("invalid isoform: "+e.join(","))}F()})).catch((t=>{L(t.message);if(t.stack)console.log(t.stack)}));async function F(){for(const t of w){if(t.a.strand==undefined){t.a.strand=t.a.gm.strand}if(t.b.strand==undefined){t.b.strand=t.b.gm.strand}}for(const t of w){let e=B(t.a);if(e){return L(e)}e=B(t.b);if(e){return L(e)}}for(let t=1;t<w.length;t++){const e=w[t].a;const n=w[t-1].b;if(e.chr!=n.chr)return L("Error: mismatched chromosome at multi-seg breakpoint "+t+": "+e.chr+" != "+n.chr);if(e.strand!=n.strand)return L("Error: mismatched strand at multi-seg breakpoint "+t);if(e.gm){if(n.gm){if(e.gm.isoform!=n.gm.isoform){return L("Error: mismatched gene in two breakpoints: "+n.gm.symbol+" "+n.gm.isoform+", "+e.gm.symbol+" "+e.gm.isoform)}}else{n.gm=e.gm;L("In multi-segment at "+t+", 5' breakpoint is joined to the same gene model of 3'");const r=a(n.position,e.gm,5);n.exonbp=r.rnapos;n.codon=r.aapos;n.atintron=r.atintron;n.exon=r.atexon;n.atutr3=r.atutr3;n.atutr5=r.atutr5;n.atupstream=r.atupstream;n.atdownstream=r.atdownstream}}else{if(n.gm){e.gm=n.gm;L("In multi-segment at "+t+", 3' breakpoint is joined to the same gene model of 5'");const r=a(e.position,n.gm,5);e.exonbp=r.rnapos;e.codon=r.aapos;e.atintron=r.atintron;e.exon=r.atexon;e.atutr3=r.atutr3;e.atutr5=r.atutr5;e.atupstream=r.atupstream;e.atdownstream=r.atdownstream}}}const t=new Set;for(const e of w){if(e.a.gm&&!e.a.gm.pdomains){t.add(e.a.gm.isoform)}if(e.b.gm&&!e.b.gm.pdomains){t.add(e.b.gm.isoform)}}if(t.size==0){new I;return}const e=[];for(const n of t){e.push(n)}T.style("margin","5px").text("Loading protein domains ...");const n=await D(e);for(const t of n){const e=r().range(i);for(const n of t.pdomains){if(!n.color){n.color=e(n.name+n.description)}}const n=t.name.toUpperCase();if(M.isoformcache.has(n)){for(const e of M.isoformcache.get(n)){e.pdomains=t.pdomains;e.domain_hidden={}}}}new I}async function D(t){const e=await n("pdomain",{method:"POST",body:JSON.stringify({genome:M.name,isoforms:t})});if(e.error)throw e.error;else T.remove();return e.lst}function I(){const e=[];let n=0;for(let t=0;t<w.length;t++){const a=w[t];let r;if(t>0){r=e[e.length-1]}if(a.a.gm){if(!r){r={gm:a.a.gm,strand:a.a.gm.strand,id:n++,name:a.a.name?a.a.name:a.a.gm.name};if(a.a.gm.coding){r.aalen=a.a.gm.cdslen/3}else{if(!a.a.gm.rnalen){L("no aacount or rnalen for "+a.a.gm.symbol+" "+a.a.gm.isoform);return}r.bplen=a.a.gm.rnalen}}if(a.a.atutr3){r.utr3bp=a.a.atutr3.total}if(a.a.atutr5){r.utr5bp=a.a.atutr5.total}if(a.a.atupstream){r.upstream=Math.max(r.upstream?r.upstream:0,a.a.atupstream.off)}if(a.a.atdownstream){r.downstream=Math.max(r.downstream?r.downstream:0,a.a.atdownstream.off)}}else{if(!r){r={chr:a.a.chr,id:n++,start:a.a.position,stop:a.a.position,name:a.a.name?a.a.name:a.a.chr}}r.start=Math.min(r.start,a.a.position);r.stop=Math.max(r.stop,a.a.position)}a.a.scfid=r.id;if(t==0){e.push(r)}if(a.interstitial){r={nontemplate:true,id:n++};if(a.interstitial.aalen){r.aalen=a.interstitial.aalen;r.name=r.aalen+" AA insertion"}else if(a.interstitial.bplen){r.aalen=a.interstitial.bplen/3;r.name=r.bplen+" bp insertion"}e.push(r);a.interstitial.scfid=r.id}if(a.b.gm){r={gm:a.b.gm,strand:a.b.gm.strand,id:n++,name:a.b.name?a.b.name:a.b.gm.symbol};if(a.b.gm.coding){r.aalen=a.b.gm.cdslen/3}else{if(!a.b.gm.rnalen){L("no aacount or rnalen for "+a.b.gm.symbol+" "+a.b.gm.isoform);return}r.bplen=a.b.gm.rnalen}if(a.b.atutr3){r.utr3bp=a.b.atutr3.total}if(a.b.atutr5){r.utr5bp=a.b.atutr5.total}if(a.b.atupstream){r.upstream=Math.max(r.upstream?r.upstream:0,a.b.atupstream.off)}if(a.b.atdownstream){r.downstream=Math.max(r.downstream?r.downstream:0,a.b.atdownstream.off)}}else{r={chr:a.b.chr,id:n++,start:a.b.position,stop:a.b.position,name:a.b.name?a.b.name:a.b.chr};r.start=Math.min(r.start,a.b.position);r.stop=Math.max(r.stop,a.b.position)}a.b.scfid=r.id;e.push(r)}for(const t of e){t.nodes=[];t.clipid0=Math.ceil(Math.random()*1e5);t.clipid="url(#"+t.clipid0+")"}for(const t of e){if(!t.gm)continue;const e={name:t.gm.name,isoform:t.gm.isoform,codingstart:t.gm.codingstart,codingstop:t.gm.codingstop,strand:t.gm.strand,aaseq:t.gm.aaseq,exon:t.gm.exon,utr3:t.gm.utr3,utr5:t.gm.utr5,cdslen:t.gm.cdslen,pdomains:[],domain_hidden:t.gm.domain_hidden};if(t.gm.pdomains){for(const n of t.gm.pdomains){const t={};for(const e in n){t[e]=n[e]}e.pdomains.push(t)}}t.gm=e}const a=90,r=5,i=3;for(const t of e){t.idealy=a*t.id+(r+i)*2*t.id}this.width=this.width0=400;const u=20,b=70,M=70,A=26,T=5,B=5,j=15,q=13,C=12,P=5,F=3,D=10;let I=b+M+A*e.length+(r*2+i*2+a)*(e.length-1);let O=40,H=40;const J={nodes:[],links:[]};for(let t=0;t<w.length;t++){const n=w[t];const a=U(n.a,e,J);a.x=this.width/2;a.y=I/2;let r=null,i=null;if(n.interstitial){const t=e[n.interstitial.scfid];r={nontemplate:true,scfid:n.interstitial.scfid,softlink3:a,x:g.quiet?this.width/2:0,y:g.quiet?t.idealy:I/2};a.softlink5=r;J.nodes.push(r);t.nodes.push(r);i={nontemplate:true,scfid:n.interstitial.scfid,x:g.quiet?this.width/2:0,y:g.quiet?t.idealy:I/2};J.nodes.push(i);t.nodes.push(i);r.hardlink=i;i.hardlink=r}const o=U(n.b,e,J);o.x=this.width/2;o.y=I/2;if(i){i.softlink5=o;o.softlink3=i;J.links.push({source:J.nodes.length-4,target:J.nodes.length-3});J.links.push({source:J.nodes.length-2,target:J.nodes.length-1})}else{a.softlink5=o;o.softlink3=a;J.links.push({source:J.nodes.length-2,target:J.nodes.length-1})}if(t>0){const t=J.nodes[J.nodes.length-3-(n.interstitial?2:0)];a.hardlink=t;t.hardlink=a}}let V=0,G=0;for(const t of e){if(t.gm){t.aatotal=(t.aalen?t.aalen:t.bplen/3)+((t.utr3bp?t.utr3bp:0)+(t.utr5bp?t.utr5bp:0)+(t.upstream?t.upstream:0)+(t.downstream?t.downstream:0))/3;V=Math.max(V,t.aatotal)}else if(t.nontemplate){V=Math.max(V,t.aalen)}else{G=Math.max(G,t.stop-t.start)}}if(G==0){G=1e3}let X=0;for(const t of e){if(!t.gm&&!t.nontemplate){t.start-=G;t.stop+=G;X=Math.max(X,t.stop-t.start)}}let Q=this.width;let Y=this.width*.7;for(const t of e){if(t.gm){t.pxwidth=Q*t.aatotal/V;t.scale=o().domain([0,t.aatotal]).range([0,t.pxwidth])}else if(t.nontemplate){t.pxwidth=Q*t.aalen/V;t.scale=o().domain([0,t.aalen]).range([0,t.pxwidth])}else{t.pxwidth=Y*(t.stop-t.start)/X;t.scale=o().domain([t.start,t.stop]).range([0,t.pxwidth])}if(t.nontemplate){t.nodes[0].xoff=0;t.nodes[1].xoff=t.pxwidth;continue}for(const e of t.nodes){if(!t.gm){e.xoff=t.scale(e.position);continue}if(e.atupstream){e.aaoff=(t.upstream-e.atupstream.off)/3}else if(e.atutr5){e.aaoff=(t.upstream?t.upstream/3:0)+e.atutr5.off/3}else if(e.atutr3){e.aaoff=(t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(t.aalen?t.aalen:t.bplen/3)+e.atutr3.off/3}else if(e.atdownstream){e.aaoff=(t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(t.aalen?t.aalen:t.bplen/3)+(t.utr3bp?t.utr3bp/3:0)+e.atdownstream.off/3}else{e.aaoff=(t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(e.codon?e.codon:e.exonbp/3)}e.xoff=t.scale(e.aaoff)}t.nodes.sort(((e,n)=>{if(!t.gm)return e.position-n.position;if(e.atupstream){if(n.atupstream)return e.atupstream.off-n.atupstream.off;return-1}if(e.atutr5){if(n.atupstream)return 1;if(n.atutr5)return e.atutr5.off-n.atutr5.off;return-1}if(e.atutr3){if(n.atupstream||n.atutr5)return 1;if(n.atutr3)return e.atutr3.off-n.atutr3.off;if(n.atdownstream)return-1;return 1}if(e.atdownstream){if(n.atdownstream)return e.atdownstream.off-n.atdownstream.off;return 1}if(n.atupstream||n.atutr5)return 1;if(n.atdownstream||n.atutr3)return-1;if(e.exonbp)return e.exonbp-n.exonbp;return e.codon-n.codon}))}for(const t of e){if(t.gm&&t.gm.pdomains){t.gm.pdomains.forEach((function(e){e.__scf=t}))}}J.nodes[0].hardlink={};J.nodes[J.nodes.length-1].hardlink={};const Z=()=>{let t=J.nodes[0];let n=e[t.scfid];if(n.gm){if(t.strand!=n.gm.strand){t.hardlink.xoff=n.pxwidth}else{t.hardlink.xoff=0}}else{if(t.strand=="+"){t.hardlink.xoff=0}else{t.hardlink.xoff=n.pxwidth}}t=J.nodes[J.nodes.length-1];n=e[t.scfid];if(n.gm){if(t.strand!=n.gm.strand){t.hardlink.xoff=0}else{t.hardlink.xoff=n.pxwidth}}else{if(t.strand=="+"){t.hardlink.xoff=n.pxwidth}else{t.hardlink.xoff=0}}};Z();const K=E.append("svg");const W=K.append("g");const $=y(J.nodes).force("link",_().links(J.links));const tt=W.selectAll().data(e).enter().append("g");const et=W.selectAll().data(J.links).enter().append("line").attr("stroke","black").attr("stroke-dasharray","3,2");const nt=W.selectAll().data(J.nodes).enter().append("g");const at=nt.filter((t=>t.label)).append("text").text((t=>t.label)).attr("font-family",s).attr("font-size",q).attr("fill","black").each((function(t){t.labelwidth=this.getBBox().width}));const rt=nt.filter((t=>t.antisense)).append("text").text("antisense").attr("font-family",s).attr("font-size",q).attr("fill",l).each((function(t){t.labelwidth=Math.max(this.getBBox().width,t.labelwidth)}));for(const t of J.nodes){if(!t.labelwidth){continue}O=Math.max(O,t.labelwidth-t.xoff);H=Math.max(H,t.labelwidth-e[t.scfid].pxwidth+t.xoff)}const it=nt.append("rect").attr("height",i).attr("fill",(t=>t.antisense?l:"black"));const ot=tt.append("line").attr("y1",((t,e)=>e%2==0?-F:A)).attr("stroke","black").attr("stroke-opacity",0).attr("shape-rendering","crispEdges");const st=tt.filter((t=>t.nontemplate));st.append("rect").attr("clip-path",(t=>t.clipid)).attr("fill","black");const lt=tt.filter((t=>!t.gm&&!t.nontemplate));lt.append("rect").attr("fill","white").attr("clip-path",(t=>t.clipid));const ft=lt.append("line").attr("clip-path",(t=>t.clipid)).attr("stroke","black");const dt=lt.append("line").attr("clip-path",(t=>t.clipid)).attr("stroke","black");const pt=tt.filter((t=>t.gm));const ct=pt.filter((t=>t.upstream)).append("line").attr("clip-path",(t=>t.clipid)).attr("stroke","#545454").attr("stroke-dasharray","2,1");const mt=pt.filter((t=>t.utr5bp)).append("line").attr("clip-path",(t=>t.clipid)).attr("stroke","#858585");const ht=pt.filter((t=>t.utr3bp)).append("line").attr("clip-path",(t=>t.clipid)).attr("stroke","#858585");const ut=pt.filter((t=>t.downstream)).append("line").attr("clip-path",(t=>t.clipid)).attr("stroke","#545454").attr("stroke-dasharray","2,1");const gt=pt.append("rect").attr("clip-path",(t=>t.clipid)).attr("fill","white");const xt=pt.filter((t=>t.gm.pdomains)).selectAll().data((t=>t.gm.pdomains)).enter().append("rect").attr("clip-path",(t=>t.__scf.clipid)).attr("fill",(t=>t.color));const bt=pt.filter((t=>t.gm.exon.length>1)).selectAll().data((t=>{let e=0;const n=[];let a=0;if(t.gm.utr5){for(const e of t.gm.utr5){a+=e[1]-e[0]}}const r=t.gm.cdslen||0;for(let i=0;i<t.gm.exon.length-1;i++){const o=t.gm.exon[i];e+=o[1]-o[0];const s={rnabp:e,scf:t};if(e<a){if(t.utr5bp){s.utr5=true}else{continue}}else if(e>a+r){if(t.utr3bp){s.utr3=true}else{continue}}if(!t.utr5bp){s.rnabp=e-a}n.push(s)}return n})).enter().append("line").attr("clip-path",(t=>t.scf.clipid)).attr("stroke","black").attr("stroke-dasharray","3,2").attr("shape-rendering","crispEdges").attr("y1",(t=>t.utr5||t.utr3?A/4:0)).attr("y2",(t=>t.utr5||t.utr3?A*3/4:A));const wt=pt.append("rect").attr("clip-path",(t=>t.clipid)).attr("stroke-dasharray",(t=>t.bplen?"4,2":"none")).attr("fill","none").attr("stroke","black");const yt=tt.append("text").text((t=>t.name)).attr("font-family",s).attr("fill","black").attr("font-size",j).attr("dominant-baseline","central").each((function(t){t.chimericlabelw=t.labelwidth=this.getBBox().width}));for(const t of e){H=Math.max(H,B+t.labelwidth)}const kt=tt.filter((t=>!t.nontemplate)).append("text").attr("fill","#858585").attr("fill-opacity",0).attr("font-size",q).attr("font-family",s).attr("text-anchor","middle").attr("dominant-baseline",(t=>t.id%2==0?"auto":"hanging")).text((t=>{if(t.gm){if(t.nodes.length==1){const e=t.nodes[0];let n;if(e.atupstream)n=e.atupstream.off+" bp upstream";else if(e.atdownstream)n=e.atdownstream.off+" bp downstream";else if(e.atutr3)n=e.atutr3.off+" bp in 3' UTR";else if(e.atutr5)n=e.atutr5.off+" bp in 5' UTR";else{n=e.codon?e.codon+" AA":e.exonbp+" bp"}if(e.softlink5)return"ends at "+n;return"starts at "+n}let e=t.nodes[0];let n;if(e.atupstream)n=e.atupstream.off+" bp upstream";else if(e.atdownstream)n=e.atdownstream.off+" bp downstream";else if(e.atutr3)n=e.atutr3.off+" bp in 3' UTR";else if(e.atutr5)n=e.atutr5.off+" bp in 5' UTR";else{if(e.betweencodon){n=(e.codonsideN?e.codon+1:e.codon)+" AA"}else{n=e.exonbp?e.exonbp+" bp ":e.codon+" AA"}}e=t.nodes[1];let a;if(e.atupstream)a=e.atupstream.off+" bp upstream";else if(e.atdownstream)a=e.atdownstream.off+" bp downstream";else if(e.atutr3)a=e.atutr3.off+" bp in 3' UTR";else if(e.atutr5)a=e.atutr5.off+" bp in 5' UTR";else a=e.codon?e.codon+" AA":e.exonbp+" bp";return"from "+n+" to "+a}if(t.nodes.length==1){const e=t.nodes[0];if(e.softlink5)return"ends at "+e.position+" bp";return"starts at "+e.position+" bp"}return"from "+t.nodes[0].position+" bp to "+t.nodes[1].position+" bp"})).each((function(t){t.chimericlabelw=Math.max(this.getBBox().width,t.chimericlabelw)}));const vt=tt.filter((t=>t.nodes[0].antisense)).append("text").text("antisense").attr("fill",l).attr("fill-opacity",0).attr("font-size",q).attr("font-family",s).attr("text-anchor","middle").attr("dominant-baseline",(t=>t.id%2==0?"auto":"hanging")).each((function(t){t.chimericlabelw=Math.max(this.getBBox().width,t.chimericlabelw)}));const Mt=tt.append("defs").append("clipPath").attr("id",(t=>t.clipid0)).append("rect").attr("x",0).attr("y",0);const At=tt.append("rect").attr("clip-path",(t=>t.clipid)).attr("fill","white").attr("fill-opacity",0).on("mousemove",((t,e)=>{if(!e.gm){return}let n=e.scale.invert(x(t)[0]);let a=null;const r=[];if(e.upstream){if(n*3<e.upstream){a=Math.floor(n*3)+" bp upstream of "+e.name}else{n-=e.upstream/3}}if(!a){if(e.utr5bp){if(n*3<e.utr5bp){a=Math.floor(n*3)+" bp in 5' UTR of "+e.name}else{n-=e.utr5bp/3}}}if(!a){if(e.aalen){if(n<=e.aalen){const t=Math.floor(n);a=(e.gm.aaseq?e.gm.aaseq[t]:"amino acid ")+t+" of "+e.name;if(e.gm.pdomains){for(const t of e.gm.pdomains){if(t.start<=n&&t.stop>=n&&!(t.name+t.description in e.gm.domain_hidden)){r.push(t)}}}}else{n-=e.aalen}}else{if(n*3<e.bplen){a=Math.floor(n*3)+" bp in "+e.name}n-=e.bplen/3}}if(!a){if(e.utr3bp){if(n*3<e.utr3bp){a=Math.floor(n*3)+" bp in 3' UTR of "+e.name}else{n-=e.utr3bp/3}}}if(!a){a=Math.floor(n*3)+" bp downstream of "+e.name}_t.selectAll("*").remove();_t.append("text").text(a).attr("dominant-baseline","hanging").attr("font-family",s).attr("font-size",C);let i=5;for(let t=0;t<r.length;t++){const e=_t.append("g").attr("transform","translate(0,"+(C+i)*(t+1)+")");const n=r[t];const a=n.color;e.append("rect").attr("width",C).attr("height",C).attr("fill",a).attr("stroke",f(a).darker(2).toString());let o;e.append("text").text(n.name).attr("x",C+5).attr("dominant-baseline","hanging").attr("font-family",s).attr("font-size",C).attr("fill","black").each((function(){o=this.getBBox().width}));e.append("text").text(n.description).attr("x",C+5+o+5).attr("dominant-baseline","hanging").attr("font-family",s).attr("font-size",C).attr("fill","#858585")}K.attr("height",I-M+Math.max(M,D+(C+i)*(r.length+1)))})).on("mouseout",(()=>{_t.selectAll("*").remove();K.attr("height",I)}));const _t=K.append("g");const zt=K.append("text").text("drag to resize").attr("class","sja_svgtext").attr("fill","black").attr("font-size",12).attr("text-anchor","end").on("mousedown",(e=>{const n=t(document.body);const a=e.clientX;e.clientY;n.on("mousemove",(t=>{t.preventDefault();this.width=this.width0+t.clientX-a;Tt();if(jt){Ut(false)}else{$.restart()}}));n.on("mouseup",(()=>{this.width0=this.width;n.on("mousemove",null).on("mouseup",null)}))}));const Tt=()=>{for(const t of e){t.idealy=a*t.id+(r+i)*2*t.id}I=b+M+A*e.length+(r*2+i*2+a)*(e.length-1);$.force("x",k(this.width/2)).force("y",v(I/2));Q=this.width;Y=this.width*.7;for(const t of e){if(t.gm){t.pxwidth=Q*t.aatotal/V}else if(t.nontemplate){t.pxwidth=Q*t.aalen/V}else{t.pxwidth=Y*(t.stop-t.start)/X}t.scale.range([0,t.pxwidth]);if(t.nontemplate){t.nodes[1].xoff=t.pxwidth;continue}for(const e of t.nodes){if(!t.gm){e.xoff=t.scale(e.position);continue}e.xoff=t.scale(e.aaoff)}}Z();it.attr("x",(t=>Math.min(t.xoff,t.hardlink.xoff)-t.xoff)).attr("width",(t=>Math.abs(t.xoff-t.hardlink.xoff))).attr("y",(t=>{if(t.softlink5)return A+r;return-r-i}));ot.attr("y2",((t,e)=>e%2==0?0:A+F));st.select("rect").attr("width",(t=>t.pxwidth)).attr("height",A);lt.select("rect").attr("width",(t=>t.pxwidth)).attr("height",A);ft.attr("x2",(t=>t.pxwidth));dt.attr("x2",(t=>t.pxwidth)).attr("y1",A).attr("y2",A);ct.attr("x2",(t=>t.scale(t.upstream/3))).attr("y1",A/2).attr("y2",A/2).attr("stroke-width",A/5);ut.attr("x1",(t=>t.scale((t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(t.aalen?t.aalen:t.bplen/3)+(t.utr3bp?t.utr3bp/3:0)))).attr("x2",(t=>t.scale((t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(t.aalen?t.aalen:t.bplen/3)+(t.utr3bp?t.utr3bp/3:0)+t.downstream/3))).attr("y1",A/2).attr("y2",A/2).attr("stroke-width",A/5);mt.attr("x1",(t=>t.upstream?t.scale(t.upstream/3):0)).attr("x2",(t=>t.scale(((t.upstream?t.upstream:0)+t.utr5bp)/3))).attr("y1",A/2).attr("y2",A/2).attr("stroke-width",Math.floor(A/2)+.5);ht.attr("x1",(t=>t.scale((t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(t.aalen?t.aalen:t.bplen/3)))).attr("x2",(t=>t.scale((t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(t.aalen?t.aalen:t.bplen/3)+(t.utr3bp?t.utr3bp/3:0)))).attr("y1",A/2).attr("y2",A/2).attr("stroke-width",Math.floor(A/2)+.5);gt.attr("x",(t=>t.scale((t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)))).attr("width",(t=>t.scale(t.aalen?t.aalen:t.bplen/3)-t.scale(0))).attr("height",A);xt.attr("x",(t=>{const e=t.__scf;return e.scale((e.upstream?e.upstream/3:0)+(e.utr5bp?e.utr5bp/3:0)+t.start)})).attr("width",(t=>{const e=t.__scf;return e.scale(t.stop)-e.scale(t.start)})).attr("height",A);bt.attr("x1",(t=>{const e=t.scf;t.x=e.scale((e.upstream?e.upstream/3:0)+t.rnabp/3);return t.x})).attr("x2",(t=>t.x));wt.attr("x",(t=>t.scale((t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)))).attr("width",(t=>t.scale(t.aalen?t.aalen:t.bplen/3)-t.scale(0))).attr("height",A);yt.attr("x",(t=>t.pxwidth+B)).attr("y",A/2);kt.attr("y",(t=>t.id%2==0?-F*2-j-F:A+F*2+j+F));vt.attr("y",(t=>t.id%2==0?-F*2-j-F-q-F:A+F*2+j+F+q+F));Mt.attr("height",A).attr("width",(t=>t.pxwidth+B+t.labelwidth));At.attr("width",(t=>t.pxwidth)).attr("height",A);K.attr("width",this.width+O+H).attr("height",I);W.attr("transform","translate("+O+","+b+")");_t.attr("transform","translate("+O+","+(I-M+D)+")");zt.attr("x",O+this.width+H-5).attr("y",I-7)};Tt();$.on("tick",(()=>{const t=[];for(const n of e){let e=0;for(const t of n.nodes){e+=t.y}t[n.id]=e/n.nodes.length}for(const n of e){let e=t[n.id];let a=false;if(e>n.idealy){e-=Math.min(15,e-n.idealy);a=true}else if(e<n.idealy){e+=Math.min(15,n.idealy-e);a=true}if(a){t[n.id]=e;for(const t of n.nodes){t.y=e}}}for(const t of e){const e=t.nodes[0];if(e.x<e.xoff){e.x+=Math.min(10,e.xoff-e.x)}else if(e.x>this.width-t.pxwidth+e.xoff){e.x-=Math.min(10,e.x-(this.width-t.pxwidth+e.xoff))}for(let n=1;n<t.nodes.length;n++){t.nodes[n].x=e.x+(t.nodes[n].xoff-e.xoff)}}tt.attr("transform",(t=>"translate("+(t.nodes[0].x-t.nodes[0].xoff)+","+t.nodes[0].y+")"));nt.attr("transform",(t=>"translate("+t.x+","+t.y+")"));at.attr("text-anchor",(t=>{if(t.softlink3){return t.softlink3.x<t.x?"start":"end"}return t.softlink5.x<t.x?"start":"end"})).attr("y",(t=>{if(t.softlink3)return-r-i-T;if(t.softlink5)return A+r+i+T})).attr("dominant-baseline",(t=>{if(t.softlink3)return"auto";if(t.softlink5)return"hanging"}));rt.attr("text-anchor",(t=>{if(t.softlink3)return t.softlink3.x<t.x?"start":"end";return t.softlink5.x<t.x?"start":"end"})).attr("y",(t=>{if(t.softlink3)return-r-i-T-q-T/2;if(t.softlink5)return A+r+i+T+q+T/2})).attr("dominant-baseline",(t=>{if(t.softlink3)return"auto";if(t.softlink5)return"hanging"}));et.attr("x1",(t=>t.source.x)).attr("y1",(t=>t.source.y+A+r+i)).attr("x2",(t=>t.target.x)).attr("y2",(t=>{if(t.target.scfid==t.source.scfid){return t.source.y+A+r+i}return t.target.y-r-i}))})).restart();const Bt=500;const Ut=t=>{for(const t of e){const e=t.nodes[0];if(t.nodes.length==1){t.chimericwidth=Math.abs(e.xoff-e.hardlink.xoff)}else{let n=e.xoff,a=e.xoff;for(const e of t.nodes){n=Math.min(n,e.xoff);a=Math.max(a,e.xoff)}t.chimericwidth=a-n}let n=e.xoff;if(t.nodes.length==1){n=Math.min(n,e.hardlink.xoff)}t.chimericmidx=n+t.chimericwidth/2}let n=0,a=0,r=0;const i=P*2;for(let t=0;t<e.length;t++){const o=e[t];let s=a+P*2+o.chimericwidth/2;if(t%2==0){s=Math.max(s,n+i+o.chimericlabelw/2);n=s+o.chimericlabelw/2}else{s=Math.max(s,r+i+o.chimericlabelw/2);r=s+o.chimericlabelw/2}o.chimericcenterx=s;a=s+o.chimericwidth/2;const l=o.nodes[0];let f=l.xoff;if(o.nodes.length==1){f=Math.min(l.xoff,l.hardlink.xoff)}o.chimericx=s-o.chimericwidth/2-f}Mt.transition().duration(t?Bt:0).attr("x",(t=>{const e=t.nodes[0];if(t.nodes.length==1){return Math.min(e.xoff,e.hardlink.xoff)}let n=e.xoff;for(const e of t.nodes){n=Math.min(n,e.xoff)}return n})).attr("width",(t=>t.chimericwidth));yt.attr("text-anchor","middle").attr("x",(t=>t.chimericmidx)).attr("y",((t,e)=>e%2==0?-F*2:A+F*2)).attr("dominant-baseline",((t,e)=>e%2==0?"auto":"hanging"));at.attr("fill-opacity",0);rt.attr("fill-opacity",0);it.attr("fill-opacity",0);ot.attr("stroke-opacity",1).attr("x1",(t=>t.chimericmidx)).attr("x2",(t=>t.chimericmidx));kt.attr("fill-opacity",1).attr("x",(t=>t.chimericmidx));vt.attr("fill-opacity",1).attr("x",(t=>t.chimericmidx));const o=(I-b*2)/2-A/2;tt.transition().duration(t?Bt:0).attr("transform",(t=>{for(const e of t.nodes){e.x=t.chimericx+e.xoff;e.y=o}return"translate("+t.chimericx+","+o+")"}));nt.transition().duration(t?Bt:0).attr("transform",(t=>"translate("+t.x+","+t.y+")"));et.transition().duration(t?Bt:0).attr("x1",(t=>{const n=e[t.source.scfid];const a=e[t.target.scfid];t.chimericx=(n.chimericcenterx+n.chimericwidth/2+a.chimericcenterx-a.chimericwidth/2)/2;return t.chimericx})).attr("x2",(t=>t.chimericx)).attr("y1",o).attr("y2",o+A);const s=e[e.length-1];const l=s.chimericcenterx+Math.max(s.chimericlabelw/2,s.chimericwidth/2);K.transition().duration(t?Bt:0).attr("width",O+l+H);zt.transition().duration(t?Bt:0).attr("x",O+l+H-u)};let jt=false;S.append("button").text("Toggle chimeric view").on("click",(()=>{jt=!jt;if(jt){$.stop();Ut(true);return}Mt.transition().duration(Bt).attr("x",0).attr("width",(t=>t.pxwidth+B+t.labelwidth));yt.attr("text-anchor","start").attr("dominant-baseline","central").attr("x",(t=>t.pxwidth+B)).attr("y",A/2);at.attr("fill-opacity",1);rt.attr("fill-opacity",1);it.attr("fill-opacity",1);ot.attr("stroke-opacity",0);kt.attr("fill-opacity",0);vt.attr("fill-opacity",0);K.transition().duration(Bt).attr("width",O+this.width+H);zt.transition().duration(Bt).attr("x",O+this.width+H-u);$.alpha(.3).restart()}));const Et=[];for(const t of e){if(t.gm&&t.gm.pdomains){Et.push(t)}}if(Et.length){let t=false;S.append("button").text("Protein domains").on("click",(()=>{if(!t){t=true;for(const t of Et){const e=N.append("div").style("margin-bottom","10px").style("padding","10px");e.append("div").style("margin-bottom","10px").html(t.gm.name+" "+t.gm.isoform).append("div");const n=d(t.gm);for(const a of n){const n=e.append("div");const r=n.append("div").style("display","inline-block").style("padding","2px 3px").style("border","solid 1px "+a.stroke).style("font-family","Courier").style("margin-right","10px").style("background-color",a.fill).style("cursor","default").html(" ").on("click",(e=>{if(t.gm.domain_hidden[a.key]){delete t.gm.domain_hidden[a.key]}else{t.gm.domain_hidden[a.key]=1}xt.filter((e=>e.__scf.clipid==t.clipid&&e.name+e.description==a.key)).transition().attr("height",(()=>{if(a.key in t.gm.domain_hidden){e.target.innerHTML="×";return 0}e.target.innerHTML=" ";return A}))}));n.append("input").attr("type","color").style("display","none").property("value",a.fill);n.append("span").text(a.name).attr("class","sja_clbtext2").style("margin-right","5px").property("title","Click to edit color of this domain").on("click",(e=>{R.clear().showunder(e.target);const n=R.d.append("input").attr("type","text").property("value",a.fill).style("width","100px").on("keyup",(e=>{if(!p(e))return;const n=e.target.value.trim();if(!n)return;r.style("background",n);xt.filter((e=>e.__scf.clipid==t.clipid&&e.name+e.description==a.key)).transition().attr("fill",n);t.gm.pdomains.forEach((t=>{if(t.name+t.description==a.key){t.color=n}}))})).node();n.focus();n.select();R.d.append("div").style("margin-top","10px").style("opacity",.5).style("font-size",".8em").html("To change the color of this domain,<br>type in a new color and press ENTER.")}));n.append("span").text(a.description).style("font-size",".7em").style("color","#858585")}}}if(N.style("display")=="none"){c(N)}else{m(N)}}))}S.append("button").text("SVG").on("click",(()=>{const t=e.map((t=>t.name));const n=K.append("g").style("font-family","Arial");let a=[];if(Et.length){for(const t of Et){const e={text:t.gm.name+" "+t.gm.isoform,items:[]};const n=d(t.gm);for(const a of n){if(!(a.key in t.gm.domain_hidden)){const t=[a.name,a.description];if(t[1].length>80){t[1]=t[1].substr(0,77)+"..."}e.items.push({fill:a.fill,text:t})}}a.push(e)}}const r=K.node().getBBox();const i=z({legendontop:false,svgw:r.width,svgh:r.height,legendhangleft:false,titleline:true,legendpadleft:10,legendfontsize:12,legendlinesep:true,samplecount4legend:false,h:{legend:a},handlers:{legend:{mouseover:()=>{}}}},(t=>t.fill),(t=>t.text),(t=>"#aaa"));i(n);const o=+K.attr("width");const s=+K.attr("height");const l=n.node().getBBox();K.attr("width",o+l.width).attr("height",s+l.height+10);zt.style("display","none");h(K.node(),t.join("-"));zt.style("display","");n.remove();K.attr("width",o).attr("height",s)}));S.append("a").attr("href","https://docs.google.com/document/d/1LgcMk_p1qyPgFPQChy4sLlU9GDL6oahffP7jJfD8ZwE/edit?usp=sharing").attr("target","_blank").text("Help").style("padding-left","10px")}}function B(t){if(t.gm){if(!Number.isFinite(t.position)){if(!Number.isFinite(t.rnaposition)){if(!Number.isFinite(t.codon))return"no position provided genome/rna/codon";t.rnaposition=(t.gm.utr5?t.gm.utr5.reduce(((t,e)=>t+e[1]-e[0]),0):0)+t.codon*3-1}if(!Number.isFinite(t.rnaposition))return"neither genomic or rna position given for node";t.position=g(t.rnaposition,t.gm);if(t.position==null)return"cannot map rnaposition "+t.rnaposition+" to "+t.gm.isoform}const e=a(t.position,t.gm,5);t.exonbp=e.rnapos;if(!Number.isFinite(t.codon))t.codon=e.aapos;t.atintron=e.atintron;t.exon=e.atexon;t.atutr3=e.atutr3;t.atutr5=e.atutr5;t.atupstream=e.atupstream;t.atdownstream=e.atdownstream}else{if(!t.chr||!t.position){return"missing genomic position for intergenic breakpoint"}}return false}function U(t,e,n){const a={};for(const e in t){a[e]=t[e]}if(!a.gm){a.label=a.chr+":"+a.position}else if(a.atupstream){a.label=a.atupstream.off+" bp upstream"}else if(a.atdownstream){a.label=a.atdownstream.off+" bp downstream"}else if(a.atutr3){if(a.atintron){a.label="intron "+a.atintron+", 3' UTR"}else{a.label="3' UTR"+(a.exon?", exon "+a.exon:"")}}else if(a.atutr5){if(a.atintron){a.label="intron "+a.atintron+", 5' UTR"}else{a.label="5' UTR"+(a.exon?", exon "+a.exon:"")}}else if(a.atintron){a.label="intron "+a.atintron+(a.codon?", "+a.codon+" AA":"")}else{a.label=(a.exon?"exon "+a.exon+", ":"")+(a.codon?a.codon+" AA":a.exonbp+" bp")}if(a.strand&&a.gm){if(a.strand!=a.gm.strand){a.antisense=true}}n.nodes.push(a);e[a.scfid].nodes.push(a);return a}export{T as default};
|
|
1
|
+
import{d as t,M as e,b as n,aG as a,a8 as r,bz as i,I as o,ah as s,bA as l,r as f,aH as d,k as p,p as c,ac as m,U as h,j as u,aJ as g}from"./app-488d9fd6.js";import{p as x}from"./pointer-c7475677.js";import{c as b,j as w,s as y,x as k,y as v}from"./y-6fe1bb7b.js";function M(t){return t.index}function A(t,e){var n=t.get(e);if(!n)throw new Error("node not found: "+e);return n}function _(t){var e=M,n=p,a,r=b(30),i,o,s,l,f,d=1;if(t==null)t=[];function p(t){return 1/Math.min(s[t.source.index],s[t.target.index])}function c(e){for(var n=0,r=t.length;n<d;++n){for(var o=0,s,p,c,m,h,u,g;o<r;++o){s=t[o],p=s.source,c=s.target;m=c.x+c.vx-p.x-p.vx||w(f);h=c.y+c.vy-p.y-p.vy||w(f);u=Math.sqrt(m*m+h*h);u=(u-i[o])/u*e*a[o];m*=u,h*=u;c.vx-=m*(g=l[o]);c.vy-=h*g;p.vx+=m*(g=1-g);p.vy+=h*g}}}function m(){if(!o)return;var n,r=o.length,f=t.length,d=new Map(o.map(((t,n)=>[e(t,n,o),t]))),p;for(n=0,s=new Array(r);n<f;++n){p=t[n],p.index=n;if(typeof p.source!=="object")p.source=A(d,p.source);if(typeof p.target!=="object")p.target=A(d,p.target);s[p.source.index]=(s[p.source.index]||0)+1;s[p.target.index]=(s[p.target.index]||0)+1}for(n=0,l=new Array(f);n<f;++n){p=t[n],l[n]=s[p.source.index]/(s[p.source.index]+s[p.target.index])}a=new Array(f),h();i=new Array(f),u()}function h(){if(!o)return;for(var e=0,r=t.length;e<r;++e){a[e]=+n(t[e],e,t)}}function u(){if(!o)return;for(var e=0,n=t.length;e<n;++e){i[e]=+r(t[e],e,t)}}c.initialize=function(t,e){o=t;f=e;m()};c.links=function(e){return arguments.length?(t=e,m(),c):t};c.id=function(t){return arguments.length?(e=t,c):e};c.iterations=function(t){return arguments.length?(d=+t,c):d};c.strength=function(t){return arguments.length?(n=typeof t==="function"?t:b(+t),h(),c):n};c.distance=function(t){return arguments.length?(r=typeof t==="function"?t:b(+t),u(),c):r};return c}function z(e,n,a,r,i){let o=0;let s=0;let l;let f;p();function d(t){f=t;o=e.legendpadleft;s=0;t.selectAll("g").remove();t.attr("transform",e.legendontop?null:"translate(0,"+e.svgh+")").on("mouseover.tphm2",e.handlers.legend.mouseover);const n=t.selectAll("g").data(e.h.legend);n.exit().remove();n.enter().append("g").each(c);return s+e.legendlineh+e.legendpadbtm}function p(){l={legendontop:true,legendh:0,legendlineh:25,legendpadx:5,legendpadleft:150,legendpadright:20,legendpadbtm:30,legendfontsize:12,legendiconh:10,legendiconw:10,samplecount4legend:true,legendhangleft:1,legendlinesep:false,legendmutationorder:["M","E","F","N","S","D","I","P","L","Intron","ITD","DEL","NLOSS","CLOSS","Utr3","Utr5","X","noncoding","Fuserna","SV","CNV_amp","CNV_loss","snv","mnv"]};for(let t in l){if(!(t in e))e[t]=l[t]}}function c(n,a){if(!n.items||!n.items.length)return;o=0;s+=e.legendlineh;let r=t(this);const i=e.legendhangleft?e.legendpadleft+e.legendhangleft-e.legendpadx:e.legendpadleft;const l=r.append("text").attr("transform","translate("+i+","+(s+e.legendiconh/2)+")").attr("text-anchor",e.legendhangleft?"end":"start").attr("font-weight",700).attr("font-size",e.legendfontsize).attr("dominant-baseline","central").text(n.text+(e.samplecount4legend?" (sample count)":""));if(e.linesep){o=e.legendpadleft;s+=e.legendlineh}else if(e.legendhangleft){o=i+2*e.legendpadx}else{o+=e.legendpadleft+l.node().getBBox().width+2*e.legendpadx}if(n.sorter)n.items.sort(n.sorter);r.selectAll("g").data(n.items).enter().append("g").each(m)}function m(l,f){let d=t(this).attr("transform","translate("+o+","+s+")").style("opacity",i);const p=d.append("text").attr("transform","translate("+(e.legendiconw+e.legendpadx/2)+","+e.legendiconh/2+")").attr("font-size",e.legendfontsize).attr("dominant-baseline","central").each((function(e){const n=t(this);if(typeof e.text=="string"){n.text(a(e))}else if(Array.isArray(e.text)){n.selectAll("tspan").data(e.text).enter().append("tspan").text((t=>t)).attr("dominant-baseline","central").attr("x",(function(n,a){if(a==0){t(this).attr("font-weight",700);e.lastx=t(this).node().getComputedTextLength()+10;return 0}else if(e.lastx){return e.lastx}}))}}));const c=p.node().getBBox();o+=e.legendiconw+c.width+2.5*e.legendpadx;if(e.legendlinesep||o>e.svgw-e.legendpadright){s+=e.legendlineh;const t=!e.legendhangleft?e.legendpadleft:e.legendpadleft+e.legendhangleft+e.legendpadx;d.attr("transform","translate("+t+","+s+")");o=e.legendiconw+c.width+2.5*e.legendpadx+e.legendpadleft;if(e.legendhangleft)o=e.legendiconw+c.width+2.5*e.legendpadx+t;else o=e.legendiconw+c.width+2.5*e.legendpadx+e.legendpadleft}d.append("rect").attr("height",e.legendiconh).attr("width",e.legendiconw).attr("y",e.legendfontsize-c.height+(c.height-e.legendiconh)/2).attr("fill",n).attr("stroke",r).attr("shape-rendering","crispEdges")}d.defaults=l;d.finalizePos=function(t){f.transition().duration(e.duration).attr("transform",e.legendontop?null:"translate(0,"+(e.svgh+t)+")")};return d}function T(g){const b="#ddd";const w=g.pairlst;const M=g.genome;const A=g.holder.append("div");const T=g.holder.append("div");const j=g.holder.append("div").style("display","inline-block").style("border","solid 1px "+b);const E=j.append("div").style("margin","10px");const S=j.append("div").style("margin-top","5px").style("padding","10px 20px").style("background-color","#ededed");const N=j.append("div").style("margin","10px").style("display","none");const R=new e({padding:"10px"});function L(t){u(A,t)}const q=new Set;const C=[];for(const t of w){if(t.a.gm){const e=t.a.gm.isoform;if(M.isoformcache.has(e)){t.a.gm=M.isoformmatch(e,t.a.chr,t.a.position)}else{q.add(e);C.push(t.a)}}if(t.b.gm){const e=t.b.gm.isoform;if(M.isoformcache.has(e)){t.b.gm=M.isoformmatch(e,t.b.chr,t.b.position)}else{q.add(e);C.push(t.b)}}}if(q.size==0){F();return}const P=[];for(const t of q){P.push(t)}n("isoformlst",{method:"POST",body:JSON.stringify({genome:M.name,lst:P})}).then((t=>{if(t.error)throw{message:t.error};for(const e of t.lst){if(e[0]){M.isoformcache.set(e[0].isoform.toUpperCase(),e)}}const e=[];for(const t of C){const n=M.isoformmatch(t.gm.isoform,t.chr,t.position);if(!n){e.push(t.gm.isoform);delete t.gm}else{t.gm=n}}if(e.length){L("invalid isoform: "+e.join(","))}F()})).catch((t=>{L(t.message);if(t.stack)console.log(t.stack)}));async function F(){for(const t of w){if(t.a.strand==undefined){t.a.strand=t.a.gm.strand}if(t.b.strand==undefined){t.b.strand=t.b.gm.strand}}for(const t of w){let e=B(t.a);if(e){return L(e)}e=B(t.b);if(e){return L(e)}}for(let t=1;t<w.length;t++){const e=w[t].a;const n=w[t-1].b;if(e.chr!=n.chr)return L("Error: mismatched chromosome at multi-seg breakpoint "+t+": "+e.chr+" != "+n.chr);if(e.strand!=n.strand)return L("Error: mismatched strand at multi-seg breakpoint "+t);if(e.gm){if(n.gm){if(e.gm.isoform!=n.gm.isoform){return L("Error: mismatched gene in two breakpoints: "+n.gm.symbol+" "+n.gm.isoform+", "+e.gm.symbol+" "+e.gm.isoform)}}else{n.gm=e.gm;L("In multi-segment at "+t+", 5' breakpoint is joined to the same gene model of 3'");const r=a(n.position,e.gm,5);n.exonbp=r.rnapos;n.codon=r.aapos;n.atintron=r.atintron;n.exon=r.atexon;n.atutr3=r.atutr3;n.atutr5=r.atutr5;n.atupstream=r.atupstream;n.atdownstream=r.atdownstream}}else{if(n.gm){e.gm=n.gm;L("In multi-segment at "+t+", 3' breakpoint is joined to the same gene model of 5'");const r=a(e.position,n.gm,5);e.exonbp=r.rnapos;e.codon=r.aapos;e.atintron=r.atintron;e.exon=r.atexon;e.atutr3=r.atutr3;e.atutr5=r.atutr5;e.atupstream=r.atupstream;e.atdownstream=r.atdownstream}}}const t=new Set;for(const e of w){if(e.a.gm&&!e.a.gm.pdomains){t.add(e.a.gm.isoform)}if(e.b.gm&&!e.b.gm.pdomains){t.add(e.b.gm.isoform)}}if(t.size==0){new I;return}const e=[];for(const n of t){e.push(n)}T.style("margin","5px").text("Loading protein domains ...");const n=await D(e);for(const t of n){const e=r().range(i);for(const n of t.pdomains){if(!n.color){n.color=e(n.name+n.description)}}const n=t.name.toUpperCase();if(M.isoformcache.has(n)){for(const e of M.isoformcache.get(n)){e.pdomains=t.pdomains;e.domain_hidden={}}}}new I}async function D(t){const e=await n("pdomain",{method:"POST",body:JSON.stringify({genome:M.name,isoforms:t})});if(e.error)throw e.error;else T.remove();return e.lst}function I(){const e=[];let n=0;for(let t=0;t<w.length;t++){const a=w[t];let r;if(t>0){r=e[e.length-1]}if(a.a.gm){if(!r){r={gm:a.a.gm,strand:a.a.gm.strand,id:n++,name:a.a.name?a.a.name:a.a.gm.name};if(a.a.gm.coding){r.aalen=a.a.gm.cdslen/3}else{if(!a.a.gm.rnalen){L("no aacount or rnalen for "+a.a.gm.symbol+" "+a.a.gm.isoform);return}r.bplen=a.a.gm.rnalen}}if(a.a.atutr3){r.utr3bp=a.a.atutr3.total}if(a.a.atutr5){r.utr5bp=a.a.atutr5.total}if(a.a.atupstream){r.upstream=Math.max(r.upstream?r.upstream:0,a.a.atupstream.off)}if(a.a.atdownstream){r.downstream=Math.max(r.downstream?r.downstream:0,a.a.atdownstream.off)}}else{if(!r){r={chr:a.a.chr,id:n++,start:a.a.position,stop:a.a.position,name:a.a.name?a.a.name:a.a.chr}}r.start=Math.min(r.start,a.a.position);r.stop=Math.max(r.stop,a.a.position)}a.a.scfid=r.id;if(t==0){e.push(r)}if(a.interstitial){r={nontemplate:true,id:n++};if(a.interstitial.aalen){r.aalen=a.interstitial.aalen;r.name=r.aalen+" AA insertion"}else if(a.interstitial.bplen){r.aalen=a.interstitial.bplen/3;r.name=r.bplen+" bp insertion"}e.push(r);a.interstitial.scfid=r.id}if(a.b.gm){r={gm:a.b.gm,strand:a.b.gm.strand,id:n++,name:a.b.name?a.b.name:a.b.gm.symbol};if(a.b.gm.coding){r.aalen=a.b.gm.cdslen/3}else{if(!a.b.gm.rnalen){L("no aacount or rnalen for "+a.b.gm.symbol+" "+a.b.gm.isoform);return}r.bplen=a.b.gm.rnalen}if(a.b.atutr3){r.utr3bp=a.b.atutr3.total}if(a.b.atutr5){r.utr5bp=a.b.atutr5.total}if(a.b.atupstream){r.upstream=Math.max(r.upstream?r.upstream:0,a.b.atupstream.off)}if(a.b.atdownstream){r.downstream=Math.max(r.downstream?r.downstream:0,a.b.atdownstream.off)}}else{r={chr:a.b.chr,id:n++,start:a.b.position,stop:a.b.position,name:a.b.name?a.b.name:a.b.chr};r.start=Math.min(r.start,a.b.position);r.stop=Math.max(r.stop,a.b.position)}a.b.scfid=r.id;e.push(r)}for(const t of e){t.nodes=[];t.clipid0=Math.ceil(Math.random()*1e5);t.clipid="url(#"+t.clipid0+")"}for(const t of e){if(!t.gm)continue;const e={name:t.gm.name,isoform:t.gm.isoform,codingstart:t.gm.codingstart,codingstop:t.gm.codingstop,strand:t.gm.strand,aaseq:t.gm.aaseq,exon:t.gm.exon,utr3:t.gm.utr3,utr5:t.gm.utr5,cdslen:t.gm.cdslen,pdomains:[],domain_hidden:t.gm.domain_hidden};if(t.gm.pdomains){for(const n of t.gm.pdomains){const t={};for(const e in n){t[e]=n[e]}e.pdomains.push(t)}}t.gm=e}const a=90,r=5,i=3;for(const t of e){t.idealy=a*t.id+(r+i)*2*t.id}this.width=this.width0=400;const u=20,b=70,M=70,A=26,T=5,B=5,j=15,q=13,C=12,P=5,F=3,D=10;let I=b+M+A*e.length+(r*2+i*2+a)*(e.length-1);let O=40,H=40;const J={nodes:[],links:[]};for(let t=0;t<w.length;t++){const n=w[t];const a=U(n.a,e,J);a.x=this.width/2;a.y=I/2;let r=null,i=null;if(n.interstitial){const t=e[n.interstitial.scfid];r={nontemplate:true,scfid:n.interstitial.scfid,softlink3:a,x:g.quiet?this.width/2:0,y:g.quiet?t.idealy:I/2};a.softlink5=r;J.nodes.push(r);t.nodes.push(r);i={nontemplate:true,scfid:n.interstitial.scfid,x:g.quiet?this.width/2:0,y:g.quiet?t.idealy:I/2};J.nodes.push(i);t.nodes.push(i);r.hardlink=i;i.hardlink=r}const o=U(n.b,e,J);o.x=this.width/2;o.y=I/2;if(i){i.softlink5=o;o.softlink3=i;J.links.push({source:J.nodes.length-4,target:J.nodes.length-3});J.links.push({source:J.nodes.length-2,target:J.nodes.length-1})}else{a.softlink5=o;o.softlink3=a;J.links.push({source:J.nodes.length-2,target:J.nodes.length-1})}if(t>0){const t=J.nodes[J.nodes.length-3-(n.interstitial?2:0)];a.hardlink=t;t.hardlink=a}}let V=0,G=0;for(const t of e){if(t.gm){t.aatotal=(t.aalen?t.aalen:t.bplen/3)+((t.utr3bp?t.utr3bp:0)+(t.utr5bp?t.utr5bp:0)+(t.upstream?t.upstream:0)+(t.downstream?t.downstream:0))/3;V=Math.max(V,t.aatotal)}else if(t.nontemplate){V=Math.max(V,t.aalen)}else{G=Math.max(G,t.stop-t.start)}}if(G==0){G=1e3}let X=0;for(const t of e){if(!t.gm&&!t.nontemplate){t.start-=G;t.stop+=G;X=Math.max(X,t.stop-t.start)}}let Q=this.width;let Y=this.width*.7;for(const t of e){if(t.gm){t.pxwidth=Q*t.aatotal/V;t.scale=o().domain([0,t.aatotal]).range([0,t.pxwidth])}else if(t.nontemplate){t.pxwidth=Q*t.aalen/V;t.scale=o().domain([0,t.aalen]).range([0,t.pxwidth])}else{t.pxwidth=Y*(t.stop-t.start)/X;t.scale=o().domain([t.start,t.stop]).range([0,t.pxwidth])}if(t.nontemplate){t.nodes[0].xoff=0;t.nodes[1].xoff=t.pxwidth;continue}for(const e of t.nodes){if(!t.gm){e.xoff=t.scale(e.position);continue}if(e.atupstream){e.aaoff=(t.upstream-e.atupstream.off)/3}else if(e.atutr5){e.aaoff=(t.upstream?t.upstream/3:0)+e.atutr5.off/3}else if(e.atutr3){e.aaoff=(t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(t.aalen?t.aalen:t.bplen/3)+e.atutr3.off/3}else if(e.atdownstream){e.aaoff=(t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(t.aalen?t.aalen:t.bplen/3)+(t.utr3bp?t.utr3bp/3:0)+e.atdownstream.off/3}else{e.aaoff=(t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(e.codon?e.codon:e.exonbp/3)}e.xoff=t.scale(e.aaoff)}t.nodes.sort(((e,n)=>{if(!t.gm)return e.position-n.position;if(e.atupstream){if(n.atupstream)return e.atupstream.off-n.atupstream.off;return-1}if(e.atutr5){if(n.atupstream)return 1;if(n.atutr5)return e.atutr5.off-n.atutr5.off;return-1}if(e.atutr3){if(n.atupstream||n.atutr5)return 1;if(n.atutr3)return e.atutr3.off-n.atutr3.off;if(n.atdownstream)return-1;return 1}if(e.atdownstream){if(n.atdownstream)return e.atdownstream.off-n.atdownstream.off;return 1}if(n.atupstream||n.atutr5)return 1;if(n.atdownstream||n.atutr3)return-1;if(e.exonbp)return e.exonbp-n.exonbp;return e.codon-n.codon}))}for(const t of e){if(t.gm&&t.gm.pdomains){t.gm.pdomains.forEach((function(e){e.__scf=t}))}}J.nodes[0].hardlink={};J.nodes[J.nodes.length-1].hardlink={};const Z=()=>{let t=J.nodes[0];let n=e[t.scfid];if(n.gm){if(t.strand!=n.gm.strand){t.hardlink.xoff=n.pxwidth}else{t.hardlink.xoff=0}}else{if(t.strand=="+"){t.hardlink.xoff=0}else{t.hardlink.xoff=n.pxwidth}}t=J.nodes[J.nodes.length-1];n=e[t.scfid];if(n.gm){if(t.strand!=n.gm.strand){t.hardlink.xoff=0}else{t.hardlink.xoff=n.pxwidth}}else{if(t.strand=="+"){t.hardlink.xoff=n.pxwidth}else{t.hardlink.xoff=0}}};Z();const K=E.append("svg");const W=K.append("g");const $=y(J.nodes).force("link",_().links(J.links));const tt=W.selectAll().data(e).enter().append("g");const et=W.selectAll().data(J.links).enter().append("line").attr("stroke","black").attr("stroke-dasharray","3,2");const nt=W.selectAll().data(J.nodes).enter().append("g");const at=nt.filter((t=>t.label)).append("text").text((t=>t.label)).attr("font-family",s).attr("font-size",q).attr("fill","black").each((function(t){t.labelwidth=this.getBBox().width}));const rt=nt.filter((t=>t.antisense)).append("text").text("antisense").attr("font-family",s).attr("font-size",q).attr("fill",l).each((function(t){t.labelwidth=Math.max(this.getBBox().width,t.labelwidth)}));for(const t of J.nodes){if(!t.labelwidth){continue}O=Math.max(O,t.labelwidth-t.xoff);H=Math.max(H,t.labelwidth-e[t.scfid].pxwidth+t.xoff)}const it=nt.append("rect").attr("height",i).attr("fill",(t=>t.antisense?l:"black"));const ot=tt.append("line").attr("y1",((t,e)=>e%2==0?-F:A)).attr("stroke","black").attr("stroke-opacity",0).attr("shape-rendering","crispEdges");const st=tt.filter((t=>t.nontemplate));st.append("rect").attr("clip-path",(t=>t.clipid)).attr("fill","black");const lt=tt.filter((t=>!t.gm&&!t.nontemplate));lt.append("rect").attr("fill","white").attr("clip-path",(t=>t.clipid));const ft=lt.append("line").attr("clip-path",(t=>t.clipid)).attr("stroke","black");const dt=lt.append("line").attr("clip-path",(t=>t.clipid)).attr("stroke","black");const pt=tt.filter((t=>t.gm));const ct=pt.filter((t=>t.upstream)).append("line").attr("clip-path",(t=>t.clipid)).attr("stroke","#545454").attr("stroke-dasharray","2,1");const mt=pt.filter((t=>t.utr5bp)).append("line").attr("clip-path",(t=>t.clipid)).attr("stroke","#858585");const ht=pt.filter((t=>t.utr3bp)).append("line").attr("clip-path",(t=>t.clipid)).attr("stroke","#858585");const ut=pt.filter((t=>t.downstream)).append("line").attr("clip-path",(t=>t.clipid)).attr("stroke","#545454").attr("stroke-dasharray","2,1");const gt=pt.append("rect").attr("clip-path",(t=>t.clipid)).attr("fill","white");const xt=pt.filter((t=>t.gm.pdomains)).selectAll().data((t=>t.gm.pdomains)).enter().append("rect").attr("clip-path",(t=>t.__scf.clipid)).attr("fill",(t=>t.color));const bt=pt.filter((t=>t.gm.exon.length>1)).selectAll().data((t=>{let e=0;const n=[];let a=0;if(t.gm.utr5){for(const e of t.gm.utr5){a+=e[1]-e[0]}}const r=t.gm.cdslen||0;for(let i=0;i<t.gm.exon.length-1;i++){const o=t.gm.exon[i];e+=o[1]-o[0];const s={rnabp:e,scf:t};if(e<a){if(t.utr5bp){s.utr5=true}else{continue}}else if(e>a+r){if(t.utr3bp){s.utr3=true}else{continue}}if(!t.utr5bp){s.rnabp=e-a}n.push(s)}return n})).enter().append("line").attr("clip-path",(t=>t.scf.clipid)).attr("stroke","black").attr("stroke-dasharray","3,2").attr("shape-rendering","crispEdges").attr("y1",(t=>t.utr5||t.utr3?A/4:0)).attr("y2",(t=>t.utr5||t.utr3?A*3/4:A));const wt=pt.append("rect").attr("clip-path",(t=>t.clipid)).attr("stroke-dasharray",(t=>t.bplen?"4,2":"none")).attr("fill","none").attr("stroke","black");const yt=tt.append("text").text((t=>t.name)).attr("font-family",s).attr("fill","black").attr("font-size",j).attr("dominant-baseline","central").each((function(t){t.chimericlabelw=t.labelwidth=this.getBBox().width}));for(const t of e){H=Math.max(H,B+t.labelwidth)}const kt=tt.filter((t=>!t.nontemplate)).append("text").attr("fill","#858585").attr("fill-opacity",0).attr("font-size",q).attr("font-family",s).attr("text-anchor","middle").attr("dominant-baseline",(t=>t.id%2==0?"auto":"hanging")).text((t=>{if(t.gm){if(t.nodes.length==1){const e=t.nodes[0];let n;if(e.atupstream)n=e.atupstream.off+" bp upstream";else if(e.atdownstream)n=e.atdownstream.off+" bp downstream";else if(e.atutr3)n=e.atutr3.off+" bp in 3' UTR";else if(e.atutr5)n=e.atutr5.off+" bp in 5' UTR";else{n=e.codon?e.codon+" AA":e.exonbp+" bp"}if(e.softlink5)return"ends at "+n;return"starts at "+n}let e=t.nodes[0];let n;if(e.atupstream)n=e.atupstream.off+" bp upstream";else if(e.atdownstream)n=e.atdownstream.off+" bp downstream";else if(e.atutr3)n=e.atutr3.off+" bp in 3' UTR";else if(e.atutr5)n=e.atutr5.off+" bp in 5' UTR";else{if(e.betweencodon){n=(e.codonsideN?e.codon+1:e.codon)+" AA"}else{n=e.exonbp?e.exonbp+" bp ":e.codon+" AA"}}e=t.nodes[1];let a;if(e.atupstream)a=e.atupstream.off+" bp upstream";else if(e.atdownstream)a=e.atdownstream.off+" bp downstream";else if(e.atutr3)a=e.atutr3.off+" bp in 3' UTR";else if(e.atutr5)a=e.atutr5.off+" bp in 5' UTR";else a=e.codon?e.codon+" AA":e.exonbp+" bp";return"from "+n+" to "+a}if(t.nodes.length==1){const e=t.nodes[0];if(e.softlink5)return"ends at "+e.position+" bp";return"starts at "+e.position+" bp"}return"from "+t.nodes[0].position+" bp to "+t.nodes[1].position+" bp"})).each((function(t){t.chimericlabelw=Math.max(this.getBBox().width,t.chimericlabelw)}));const vt=tt.filter((t=>t.nodes[0].antisense)).append("text").text("antisense").attr("fill",l).attr("fill-opacity",0).attr("font-size",q).attr("font-family",s).attr("text-anchor","middle").attr("dominant-baseline",(t=>t.id%2==0?"auto":"hanging")).each((function(t){t.chimericlabelw=Math.max(this.getBBox().width,t.chimericlabelw)}));const Mt=tt.append("defs").append("clipPath").attr("id",(t=>t.clipid0)).append("rect").attr("x",0).attr("y",0);const At=tt.append("rect").attr("clip-path",(t=>t.clipid)).attr("fill","white").attr("fill-opacity",0).on("mousemove",((t,e)=>{if(!e.gm){return}let n=e.scale.invert(x(t)[0]);let a=null;const r=[];if(e.upstream){if(n*3<e.upstream){a=Math.floor(n*3)+" bp upstream of "+e.name}else{n-=e.upstream/3}}if(!a){if(e.utr5bp){if(n*3<e.utr5bp){a=Math.floor(n*3)+" bp in 5' UTR of "+e.name}else{n-=e.utr5bp/3}}}if(!a){if(e.aalen){if(n<=e.aalen){const t=Math.floor(n);a=(e.gm.aaseq?e.gm.aaseq[t]:"amino acid ")+t+" of "+e.name;if(e.gm.pdomains){for(const t of e.gm.pdomains){if(t.start<=n&&t.stop>=n&&!(t.name+t.description in e.gm.domain_hidden)){r.push(t)}}}}else{n-=e.aalen}}else{if(n*3<e.bplen){a=Math.floor(n*3)+" bp in "+e.name}n-=e.bplen/3}}if(!a){if(e.utr3bp){if(n*3<e.utr3bp){a=Math.floor(n*3)+" bp in 3' UTR of "+e.name}else{n-=e.utr3bp/3}}}if(!a){a=Math.floor(n*3)+" bp downstream of "+e.name}_t.selectAll("*").remove();_t.append("text").text(a).attr("dominant-baseline","hanging").attr("font-family",s).attr("font-size",C);let i=5;for(let t=0;t<r.length;t++){const e=_t.append("g").attr("transform","translate(0,"+(C+i)*(t+1)+")");const n=r[t];const a=n.color;e.append("rect").attr("width",C).attr("height",C).attr("fill",a).attr("stroke",f(a).darker(2).toString());let o;e.append("text").text(n.name).attr("x",C+5).attr("dominant-baseline","hanging").attr("font-family",s).attr("font-size",C).attr("fill","black").each((function(){o=this.getBBox().width}));e.append("text").text(n.description).attr("x",C+5+o+5).attr("dominant-baseline","hanging").attr("font-family",s).attr("font-size",C).attr("fill","#858585")}K.attr("height",I-M+Math.max(M,D+(C+i)*(r.length+1)))})).on("mouseout",(()=>{_t.selectAll("*").remove();K.attr("height",I)}));const _t=K.append("g");const zt=K.append("text").text("drag to resize").attr("class","sja_svgtext").attr("fill","black").attr("font-size",12).attr("text-anchor","end").on("mousedown",(e=>{const n=t(document.body);const a=e.clientX;e.clientY;n.on("mousemove",(t=>{t.preventDefault();this.width=this.width0+t.clientX-a;Tt();if(jt){Ut(false)}else{$.restart()}}));n.on("mouseup",(()=>{this.width0=this.width;n.on("mousemove",null).on("mouseup",null)}))}));const Tt=()=>{for(const t of e){t.idealy=a*t.id+(r+i)*2*t.id}I=b+M+A*e.length+(r*2+i*2+a)*(e.length-1);$.force("x",k(this.width/2)).force("y",v(I/2));Q=this.width;Y=this.width*.7;for(const t of e){if(t.gm){t.pxwidth=Q*t.aatotal/V}else if(t.nontemplate){t.pxwidth=Q*t.aalen/V}else{t.pxwidth=Y*(t.stop-t.start)/X}t.scale.range([0,t.pxwidth]);if(t.nontemplate){t.nodes[1].xoff=t.pxwidth;continue}for(const e of t.nodes){if(!t.gm){e.xoff=t.scale(e.position);continue}e.xoff=t.scale(e.aaoff)}}Z();it.attr("x",(t=>Math.min(t.xoff,t.hardlink.xoff)-t.xoff)).attr("width",(t=>Math.abs(t.xoff-t.hardlink.xoff))).attr("y",(t=>{if(t.softlink5)return A+r;return-r-i}));ot.attr("y2",((t,e)=>e%2==0?0:A+F));st.select("rect").attr("width",(t=>t.pxwidth)).attr("height",A);lt.select("rect").attr("width",(t=>t.pxwidth)).attr("height",A);ft.attr("x2",(t=>t.pxwidth));dt.attr("x2",(t=>t.pxwidth)).attr("y1",A).attr("y2",A);ct.attr("x2",(t=>t.scale(t.upstream/3))).attr("y1",A/2).attr("y2",A/2).attr("stroke-width",A/5);ut.attr("x1",(t=>t.scale((t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(t.aalen?t.aalen:t.bplen/3)+(t.utr3bp?t.utr3bp/3:0)))).attr("x2",(t=>t.scale((t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(t.aalen?t.aalen:t.bplen/3)+(t.utr3bp?t.utr3bp/3:0)+t.downstream/3))).attr("y1",A/2).attr("y2",A/2).attr("stroke-width",A/5);mt.attr("x1",(t=>t.upstream?t.scale(t.upstream/3):0)).attr("x2",(t=>t.scale(((t.upstream?t.upstream:0)+t.utr5bp)/3))).attr("y1",A/2).attr("y2",A/2).attr("stroke-width",Math.floor(A/2)+.5);ht.attr("x1",(t=>t.scale((t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(t.aalen?t.aalen:t.bplen/3)))).attr("x2",(t=>t.scale((t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(t.aalen?t.aalen:t.bplen/3)+(t.utr3bp?t.utr3bp/3:0)))).attr("y1",A/2).attr("y2",A/2).attr("stroke-width",Math.floor(A/2)+.5);gt.attr("x",(t=>t.scale((t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)))).attr("width",(t=>t.scale(t.aalen?t.aalen:t.bplen/3)-t.scale(0))).attr("height",A);xt.attr("x",(t=>{const e=t.__scf;return e.scale((e.upstream?e.upstream/3:0)+(e.utr5bp?e.utr5bp/3:0)+t.start)})).attr("width",(t=>{const e=t.__scf;return e.scale(t.stop)-e.scale(t.start)})).attr("height",A);bt.attr("x1",(t=>{const e=t.scf;t.x=e.scale((e.upstream?e.upstream/3:0)+t.rnabp/3);return t.x})).attr("x2",(t=>t.x));wt.attr("x",(t=>t.scale((t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)))).attr("width",(t=>t.scale(t.aalen?t.aalen:t.bplen/3)-t.scale(0))).attr("height",A);yt.attr("x",(t=>t.pxwidth+B)).attr("y",A/2);kt.attr("y",(t=>t.id%2==0?-F*2-j-F:A+F*2+j+F));vt.attr("y",(t=>t.id%2==0?-F*2-j-F-q-F:A+F*2+j+F+q+F));Mt.attr("height",A).attr("width",(t=>t.pxwidth+B+t.labelwidth));At.attr("width",(t=>t.pxwidth)).attr("height",A);K.attr("width",this.width+O+H).attr("height",I);W.attr("transform","translate("+O+","+b+")");_t.attr("transform","translate("+O+","+(I-M+D)+")");zt.attr("x",O+this.width+H-5).attr("y",I-7)};Tt();$.on("tick",(()=>{const t=[];for(const n of e){let e=0;for(const t of n.nodes){e+=t.y}t[n.id]=e/n.nodes.length}for(const n of e){let e=t[n.id];let a=false;if(e>n.idealy){e-=Math.min(15,e-n.idealy);a=true}else if(e<n.idealy){e+=Math.min(15,n.idealy-e);a=true}if(a){t[n.id]=e;for(const t of n.nodes){t.y=e}}}for(const t of e){const e=t.nodes[0];if(e.x<e.xoff){e.x+=Math.min(10,e.xoff-e.x)}else if(e.x>this.width-t.pxwidth+e.xoff){e.x-=Math.min(10,e.x-(this.width-t.pxwidth+e.xoff))}for(let n=1;n<t.nodes.length;n++){t.nodes[n].x=e.x+(t.nodes[n].xoff-e.xoff)}}tt.attr("transform",(t=>"translate("+(t.nodes[0].x-t.nodes[0].xoff)+","+t.nodes[0].y+")"));nt.attr("transform",(t=>"translate("+t.x+","+t.y+")"));at.attr("text-anchor",(t=>{if(t.softlink3){return t.softlink3.x<t.x?"start":"end"}return t.softlink5.x<t.x?"start":"end"})).attr("y",(t=>{if(t.softlink3)return-r-i-T;if(t.softlink5)return A+r+i+T})).attr("dominant-baseline",(t=>{if(t.softlink3)return"auto";if(t.softlink5)return"hanging"}));rt.attr("text-anchor",(t=>{if(t.softlink3)return t.softlink3.x<t.x?"start":"end";return t.softlink5.x<t.x?"start":"end"})).attr("y",(t=>{if(t.softlink3)return-r-i-T-q-T/2;if(t.softlink5)return A+r+i+T+q+T/2})).attr("dominant-baseline",(t=>{if(t.softlink3)return"auto";if(t.softlink5)return"hanging"}));et.attr("x1",(t=>t.source.x)).attr("y1",(t=>t.source.y+A+r+i)).attr("x2",(t=>t.target.x)).attr("y2",(t=>{if(t.target.scfid==t.source.scfid){return t.source.y+A+r+i}return t.target.y-r-i}))})).restart();const Bt=500;const Ut=t=>{for(const t of e){const e=t.nodes[0];if(t.nodes.length==1){t.chimericwidth=Math.abs(e.xoff-e.hardlink.xoff)}else{let n=e.xoff,a=e.xoff;for(const e of t.nodes){n=Math.min(n,e.xoff);a=Math.max(a,e.xoff)}t.chimericwidth=a-n}let n=e.xoff;if(t.nodes.length==1){n=Math.min(n,e.hardlink.xoff)}t.chimericmidx=n+t.chimericwidth/2}let n=0,a=0,r=0;const i=P*2;for(let t=0;t<e.length;t++){const o=e[t];let s=a+P*2+o.chimericwidth/2;if(t%2==0){s=Math.max(s,n+i+o.chimericlabelw/2);n=s+o.chimericlabelw/2}else{s=Math.max(s,r+i+o.chimericlabelw/2);r=s+o.chimericlabelw/2}o.chimericcenterx=s;a=s+o.chimericwidth/2;const l=o.nodes[0];let f=l.xoff;if(o.nodes.length==1){f=Math.min(l.xoff,l.hardlink.xoff)}o.chimericx=s-o.chimericwidth/2-f}Mt.transition().duration(t?Bt:0).attr("x",(t=>{const e=t.nodes[0];if(t.nodes.length==1){return Math.min(e.xoff,e.hardlink.xoff)}let n=e.xoff;for(const e of t.nodes){n=Math.min(n,e.xoff)}return n})).attr("width",(t=>t.chimericwidth));yt.attr("text-anchor","middle").attr("x",(t=>t.chimericmidx)).attr("y",((t,e)=>e%2==0?-F*2:A+F*2)).attr("dominant-baseline",((t,e)=>e%2==0?"auto":"hanging"));at.attr("fill-opacity",0);rt.attr("fill-opacity",0);it.attr("fill-opacity",0);ot.attr("stroke-opacity",1).attr("x1",(t=>t.chimericmidx)).attr("x2",(t=>t.chimericmidx));kt.attr("fill-opacity",1).attr("x",(t=>t.chimericmidx));vt.attr("fill-opacity",1).attr("x",(t=>t.chimericmidx));const o=(I-b*2)/2-A/2;tt.transition().duration(t?Bt:0).attr("transform",(t=>{for(const e of t.nodes){e.x=t.chimericx+e.xoff;e.y=o}return"translate("+t.chimericx+","+o+")"}));nt.transition().duration(t?Bt:0).attr("transform",(t=>"translate("+t.x+","+t.y+")"));et.transition().duration(t?Bt:0).attr("x1",(t=>{const n=e[t.source.scfid];const a=e[t.target.scfid];t.chimericx=(n.chimericcenterx+n.chimericwidth/2+a.chimericcenterx-a.chimericwidth/2)/2;return t.chimericx})).attr("x2",(t=>t.chimericx)).attr("y1",o).attr("y2",o+A);const s=e[e.length-1];const l=s.chimericcenterx+Math.max(s.chimericlabelw/2,s.chimericwidth/2);K.transition().duration(t?Bt:0).attr("width",O+l+H);zt.transition().duration(t?Bt:0).attr("x",O+l+H-u)};let jt=false;S.append("button").text("Toggle chimeric view").on("click",(()=>{jt=!jt;if(jt){$.stop();Ut(true);return}Mt.transition().duration(Bt).attr("x",0).attr("width",(t=>t.pxwidth+B+t.labelwidth));yt.attr("text-anchor","start").attr("dominant-baseline","central").attr("x",(t=>t.pxwidth+B)).attr("y",A/2);at.attr("fill-opacity",1);rt.attr("fill-opacity",1);it.attr("fill-opacity",1);ot.attr("stroke-opacity",0);kt.attr("fill-opacity",0);vt.attr("fill-opacity",0);K.transition().duration(Bt).attr("width",O+this.width+H);zt.transition().duration(Bt).attr("x",O+this.width+H-u);$.alpha(.3).restart()}));const Et=[];for(const t of e){if(t.gm&&t.gm.pdomains){Et.push(t)}}if(Et.length){let t=false;S.append("button").text("Protein domains").on("click",(()=>{if(!t){t=true;for(const t of Et){const e=N.append("div").style("margin-bottom","10px").style("padding","10px");e.append("div").style("margin-bottom","10px").html(t.gm.name+" "+t.gm.isoform).append("div");const n=d(t.gm);for(const a of n){const n=e.append("div");const r=n.append("div").style("display","inline-block").style("padding","2px 3px").style("border","solid 1px "+a.stroke).style("font-family","Courier").style("margin-right","10px").style("background-color",a.fill).style("cursor","default").html(" ").on("click",(e=>{if(t.gm.domain_hidden[a.key]){delete t.gm.domain_hidden[a.key]}else{t.gm.domain_hidden[a.key]=1}xt.filter((e=>e.__scf.clipid==t.clipid&&e.name+e.description==a.key)).transition().attr("height",(()=>{if(a.key in t.gm.domain_hidden){e.target.innerHTML="×";return 0}e.target.innerHTML=" ";return A}))}));n.append("input").attr("type","color").style("display","none").property("value",a.fill);n.append("span").text(a.name).attr("class","sja_clbtext2").style("margin-right","5px").property("title","Click to edit color of this domain").on("click",(e=>{R.clear().showunder(e.target);const n=R.d.append("input").attr("type","text").property("value",a.fill).style("width","100px").on("keyup",(e=>{if(!p(e))return;const n=e.target.value.trim();if(!n)return;r.style("background",n);xt.filter((e=>e.__scf.clipid==t.clipid&&e.name+e.description==a.key)).transition().attr("fill",n);t.gm.pdomains.forEach((t=>{if(t.name+t.description==a.key){t.color=n}}))})).node();n.focus();n.select();R.d.append("div").style("margin-top","10px").style("opacity",.5).style("font-size",".8em").html("To change the color of this domain,<br>type in a new color and press ENTER.")}));n.append("span").text(a.description).style("font-size",".7em").style("color","#858585")}}}if(N.style("display")=="none"){c(N)}else{m(N)}}))}S.append("button").text("SVG").on("click",(()=>{const t=e.map((t=>t.name));const n=K.append("g").style("font-family","Arial");let a=[];if(Et.length){for(const t of Et){const e={text:t.gm.name+" "+t.gm.isoform,items:[]};const n=d(t.gm);for(const a of n){if(!(a.key in t.gm.domain_hidden)){const t=[a.name,a.description];if(t[1].length>80){t[1]=t[1].substr(0,77)+"..."}e.items.push({fill:a.fill,text:t})}}a.push(e)}}const r=K.node().getBBox();const i=z({legendontop:false,svgw:r.width,svgh:r.height,legendhangleft:false,titleline:true,legendpadleft:10,legendfontsize:12,legendlinesep:true,samplecount4legend:false,h:{legend:a},handlers:{legend:{mouseover:()=>{}}}},(t=>t.fill),(t=>t.text),(t=>"#aaa"));i(n);const o=+K.attr("width");const s=+K.attr("height");const l=n.node().getBBox();K.attr("width",o+l.width).attr("height",s+l.height+10);zt.style("display","none");h(K.node(),t.join("-"));zt.style("display","");n.remove();K.attr("width",o).attr("height",s)}));S.append("a").attr("href","https://docs.google.com/document/d/1LgcMk_p1qyPgFPQChy4sLlU9GDL6oahffP7jJfD8ZwE/edit?usp=sharing").attr("target","_blank").text("Help").style("padding-left","10px")}}function B(t){if(t.gm){if(!Number.isFinite(t.position)){if(!Number.isFinite(t.rnaposition)){if(!Number.isFinite(t.codon))return"no position provided genome/rna/codon";t.rnaposition=(t.gm.utr5?t.gm.utr5.reduce(((t,e)=>t+e[1]-e[0]),0):0)+t.codon*3-1}if(!Number.isFinite(t.rnaposition))return"neither genomic or rna position given for node";t.position=g(t.rnaposition,t.gm);if(t.position==null)return"cannot map rnaposition "+t.rnaposition+" to "+t.gm.isoform}const e=a(t.position,t.gm,5);t.exonbp=e.rnapos;if(!Number.isFinite(t.codon))t.codon=e.aapos;t.atintron=e.atintron;t.exon=e.atexon;t.atutr3=e.atutr3;t.atutr5=e.atutr5;t.atupstream=e.atupstream;t.atdownstream=e.atdownstream}else{if(!t.chr||!t.position){return"missing genomic position for intergenic breakpoint"}}return false}function U(t,e,n){const a={};for(const e in t){a[e]=t[e]}if(!a.gm){a.label=a.chr+":"+a.position}else if(a.atupstream){a.label=a.atupstream.off+" bp upstream"}else if(a.atdownstream){a.label=a.atdownstream.off+" bp downstream"}else if(a.atutr3){if(a.atintron){a.label="intron "+a.atintron+", 3' UTR"}else{a.label="3' UTR"+(a.exon?", exon "+a.exon:"")}}else if(a.atutr5){if(a.atintron){a.label="intron "+a.atintron+", 5' UTR"}else{a.label="5' UTR"+(a.exon?", exon "+a.exon:"")}}else if(a.atintron){a.label="intron "+a.atintron+(a.codon?", "+a.codon+" AA":"")}else{a.label=(a.exon?"exon "+a.exon+", ":"")+(a.codon?a.codon+" AA":a.exonbp+" bp")}if(a.strand&&a.gm){if(a.strand!=a.gm.strand){a.antisense=true}}n.nodes.push(a);e[a.scfid].nodes.push(a);return a}export{T as default};
|