@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{bN as e,by as t,M as s,d as n,D as i,B as a,z as o,n as l,b as r,L as d,W as c,R as p,S as m,ak as u,ap as g,P as h,U as f,at as y,as as b,I as x,V as v,bM as w,a8 as C,af as k,bE as S,bD as $,bO as M,bP as T,bQ as G,bR as I,bS as V,F as O,h as _,O as L}from"./app-488d9fd6.js";import{T as N,h as B,f as A,i as j,g as D,b as F,l as E}from"./termsetting-c12f1c69.js";import{r as z}from"./table-10183501.js";import{p as P}from"./pointer-c7475677.js";import{initByInput as R}from"./controls.config-9870bdea.js";import{m as q}from"./checkbox-96437f4d.js";import{G as H}from"./recover-edcdde38.js";import{m as W}from"./radiobutton-09bff425.js";import{h as K}from"./FilterRxComp-cb149666.js";import{c as X,a as U,b as Z,d as Y}from"./axis-747c801e.js";import{s as J}from"./legacy-d3-polyfill-bdb2d792.js";import{s as Q}from"./filter-67d51c09.js";import{s as ee}from"./svg.legend-21629769.js";var te=t=>e(t[t.length-1]);var se=new Array(3).concat("deebf79ecae13182bd","eff3ffbdd7e76baed62171b5","eff3ffbdd7e76baed63182bd08519c","eff3ffc6dbef9ecae16baed63182bd08519c","eff3ffc6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b").map(t);var ne=te(se);var ie=new Array(3).concat("fee0d2fc9272de2d26","fee5d9fcae91fb6a4acb181d","fee5d9fcae91fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d").map(t);var ae=te(ie);function oe(e){const t=e.controls?e.holder:e.holder.append("div");t.style("position","relative");const i=this.opts.controls||t.append("div");const a=t.append("div").style("position","relative").style("top",this.opts.controls?0:"50px").style("left","50px");const o=t.append("div").attr("class","sja_errorbar").style("display","none");const l=t.append("svg").style("margin","20px 10px").style("overflow","visible").on("mousemove.label",this.svgMousemove).on("mouseup.label",this.svgMouseup);this.seriesClipId=`sjpp_clip_${this.id}`;const r=l.append("g").attr("class","sjpp-matrix-maing").on("mouseover",this.showCellInfo).on("mousemove",this.showCellInfo).on("mouseout",this.mouseout);const d=r.append("g").attr("clip-path",`url(#${this.seriesClipId})`);const c=r.append("g");const p=r.append("g");const m=new s({padding:"5px"});this.dom={header:e.header,holder:t,contentNode:e.holder.node().closest(".sjpp-output-sandbox-content")||e.holder.node().parentNode,errdiv:o,controls:i,loadingDiv:a,svg:l,clipRect:l.append("defs").append("clipPath").attr("id",this.seriesClipId).attr("clipPathUnits","userSpaceOnUse").append("rect").attr("display","block"),mainG:r,cluster:d.append("g").attr("class","sjpp-matrix-cluster-g").on("mousedown",this.seriesesGMousedown).on("mousemove",this.seriesesGMousemove),seriesesG:d.append("g").attr("class","sjpp-matrix-serieses-g").attr("data-testid","sjpp_matrix_mainG_serieses").on("mousedown",this.seriesesGMousedown),highlightBeamG:d.append("g").attr("class","sjpp-matrix-highlight-beam"),sampleLabelsPG:c,sampleGrpLabelG:c.append("g").attr("class","sjpp-matrix-series-group-label-g").on("click",this.showSampleGroupMenu).on("mousedown.sjppMatrixLabelText",this.enableTextHighlight).on("mouseup.sjppMatrixLabelText",this.disableTextHighlight),sampleLabelG:c.append("g").attr("class","sjpp-matrix-series-label-g").on("click",(e=>this.mouseclick(e))),termLabelsPG:p,termGrpLabelG:p.append("g").attr("class","sjpp-matrix-term-group-label-g").on("mouseover",this.termGrpLabelMouseover).on("mouseout",this.termGrpLabelMouseout).on("mousedown",this.termGrpLabelMousedown).on("mousemove",this.termGrpLabelMousemove).on("mouseup",this.termGrpLabelMouseup).on("mousedown.sjppMatrixLabelText",this.enableTextHighlight).on("mouseup.sjppMatrixLabelText",this.disableTextHighlight),termLabelG:p.append("g").attr("class","sjpp-matrix-term-label-g").on("mouseover",this.termLabelMouseover).on("mouseout",this.termLabelMouseout).on("mousedown",this.termLabelMousedown).on("mousemove",this.termLabelMousemove).on("mouseup",this.termLabelMouseup).on("mousedown.sjppMatrixLabelText",this.enableTextHighlight).on("mouseup.sjppMatrixLabelText",this.disableTextHighlight),scroll:r.append("g"),legendG:r.append("g").attr("class","sjpp-matrix-legend-g").on("mouseover",this.legendLabelMouseover).on("mouseout",this.legendLabelMouseout).on("mouseup",this.legendLabelMouseup),tip:m,menutop:m.d.append("div"),menubody:m.d.append("div"),clickMenu:new s({padding:"0px"}),brushMenu:new s({padding:"0px"}),dendroClickMenu:new s({padding:"0px"}),legendMenu:new s({padding:"0px"}),matrixCellHoverOver:new s({padding:"0px"})};this.dom.colBeam=this.dom.highlightBeamG.append("rect").style("display","none").style("stroke-width","0.5px").style("fill","transparent").style("pointer-events","none");this.dom.rowBeam=this.dom.highlightBeamG.append("rect").style("display","none").style("stroke-width","0.5px").style("fill","transparent").style("pointer-events","none");this.dom.tip.onHide=()=>{this.lastActiveLabel=this.activeLabel;delete this.activeLabel};n("body").on(`mousedown.matrixZoom-${this.id}`,this.resetInteractions);window.onscroll=this.delayedMouseoutHandler;const u=this.dom.holder.node().closest(".sjpp-output-sandbox-content");if(u)u.onscroll=this.delayedMouseoutHandler}function le(e){if(!e.holder)throw`missing svgScroll.opts.holder argument`;const t={height:12,zoomLevel:1,opacity:.3};const s=Object.assign({},t,e);function i(e){h.x=e.clientX;n("body").on("mousemove.sjppSvgScroll",a).on("mouseup.sjppSvgScroll",o)}function a(e){if(!("x"in h))return;const t=e.clientX-h.x;if(h.sliderX+h.sliderWidth+t>s.visibleWidth-1){return}if(h.sliderX+t<0){return}u.attr("x",h.sliderX+t);s.callback(h.dxFactor*t,"move")}function o(e){if(!("x"in h))return;const t=e.clientX-h.x;s.callback(h.dxFactor*Math.min(h.maxDx,Math.max(t,h.minDx)),"up");delete h.x;n("body").on("mousemove.sjppSvgScroll",null).on("mouseup.sjppSvgScroll",null)}function l(e){h.x=e.clientX;const t=e.clientX<g.getBoundingClientRect().x?-1:1;o({clientX:Math.floor(h.x+t*h.arrowDx)})}s.holder.attr("display","none").attr("opacity",s.opacity).on("mouseover",(()=>s.holder.attr("opacity",1))).on("mouseout",(()=>s.holder.attr("opacity",s.opacity)));const r=s.holder.append("rect").style("height",s.height).style("stroke","none").style("fill","#fff").on("click",l);const d=s.holder.append("line").style("stroke","#ccc").style("stroke-width",1).on("click",l);const c=s.holder.append("path").attr("y",-s.height).attr("d",`M0,${s.height/2}L${s.height},0L${s.height},${s.height}Z`).style("stroke","#ccc").style("stroke-width",1).style("fill","#ccc").on("click",(e=>{h.x=e.clientX;o({clientX:Math.round(h.x-h.arrowDx)})}));const p=s.holder.append("path").attr("y",-s.height).style("stroke","#ccc").style("stroke-width",1).style("fill","#ccc").attr("d",`M0,0L${s.height},${s.height/2}L0,${s.height}Z`).on("click",(e=>{h.x=e.clientX;o({clientX:Math.round(h.x+h.arrowDx)})}));const m=s.height-4;const u=s.holder.append("rect").attr("y",2).attr("height",m).attr("stroke","#aaa").attr("stroke-width",1).attr("fill","#ccc").attr("rx",m/2).on("mousedown",i).on("mousemove",a).on("mouseup",o);const g=u.node();const h={};const f={update(e){const t={v:s.visibleWidth,t:s.totalWidth,z:s.zoomCenter};Object.assign(s,e);const n=s.totalWidth;const i=s.visibleWidth;if(n<=i){s.holder.attr("display","none");return}s.holder.attr("transform",`translate(${s.x},${s.y})`).attr("display","");r.attr("width",i);d.attr("x1",0).attr("x2",i).attr("y1",s.height/2).attr("y2",s.height/2);c.attr("transform",`translate(0,0)`);p.attr("transform",`translate(${i-s.height},0)`);if(i!=t.v||n!=t.t){h.sliderWidth=i*i/n;h.dxFactor=(n-i)/(i-h.sliderWidth)}const a=i*(s.zoomCenter/n);h.sliderX=Math.max(0,Math.min(a-h.sliderWidth/2,i-h.sliderWidth-1));u.attr("width",h.sliderWidth).attr("x",h.sliderX);h.maxDx=s.visibleWidth-h.sliderX-h.sliderWidth;h.minDx=-h.sliderX;h.arrowDx=Math.round(.1*s.visibleWidth);delete h.x}};return f}function re(e){if(!e.holder)throw`zoom requires an opts.holder`;if(typeof e.callback!="function")throw`zoom requires an opts.callback function`;const t={min:1,max:100,value:25,step:10,increment:1,numberInputWidth:"35px",showJumpBtns:false};const s=Object.assign({},t,e.settings||{});e.holder.attr("title",e.title||null).style("vertical-align","top").style("text-align","center").on("mouseenter",(()=>{o.style("display","inline-block").style("overflow","visible")})).on("mouseleave",(()=>{o.style("display","none").style("overflow","hidden")}));const n=e.holder.append("label");n.append("span").text("Zoom");const i=n.append("input").attr("title","Enter a desired zoom level").attr("type","number").attr("min",s.min).attr("max",s.max).attr("step",s.increment).style("min-width",s.numberInputWidth).style("width",e.width||"fit-content").style("margin","3px 5px").property("value",s.value).on("change",(t=>{const s=Number(t.target.value);c.update({value:s});e.callback(s)}));n.append("span").text("unit"in e?e.unit:"%");const a=e.holder.node().getBoundingClientRect();e.holder.style("max-height",a.height+"px").style("max-width",a.width+"px");e.holder.append("br");const o=e.holder.append("div").style("display","none");const l=!e.showJumpBtns?null:e.holder.append("button").attr("title","Zoom in").style("width","25px").html("-").on("click",(()=>{const t=Math.max(s.step*Math.ceil((s.value-s.step)/s.step),s.min);c.update({value:t});e.callback(t)}));const r=o.append("input").attr("title","Slide to desired zoom level").attr("type","range").attr("min",s.min).attr("max",s.max).attr("step",s.increment).style("margin","2px 5px").style("padding",0).style("vertical-align","middle").property("value",s.value).html("-").on("input",(e=>{i.property("value",e.target.value)})).on("change",(t=>{const s=Number(t.target.value);c.update({value:s});e.callback(s)}));const d=!e.showJumpBtns?null:e.holder.append("button").attr("title","Zoom out").style("width","25px").html("+").on("click",(()=>{const t=Math.min(s.step*Math.floor((s.value+s.step)/s.step),s.max);c.update({value:t});e.callback(t)}));o.append("span").style("text-decoration","underline").style("cursor","pointer").style("title","use the default zoom value").text("Reset").on("click",e.reset);const c={update(t={}){const n=e.holder.node().getBoundingClientRect();if(!n.height||!n.width){e.holder.style("max-height","").style("max-width","");const t=e.holder.node().getBoundingClientRect();e.holder.style("max-height",t.height+"px").style("max-width",t.width+"px")}Object.assign(s,t);r.property("value",s.value).attr("min",s.min).attr("max",s.max).attr("step",s.increment);i.property("value",s.value).attr("min",s.min).attr("max",s.max).attr("step",s.increment);l?.property("disabled",s.value<=s.min);d?.property("disabled",s.value>=s.max)}};if(e.debug)c.Inner={settings:s,number:i,slider:r,minusBtn:l,plusBtn:d};return c}let de=0;const ce={externalLink:""};function pe(e){let t;e.delayedMouseoutHandler=()=>{if(t)clearTimeout(t);t=setTimeout(e.mouseout,500)};e.showCellInfo=function(t){if(e.activeLabel||e.zoomArea)return;if(t.target.__data__?.isLegendItem){return}if(!(t.target.tagName=="rect"||t.target.tagName=="image")){const s=t.target.__data__;const n=s?.grp;if(n?.legendData){if(t.target.closest(".sjpp-matrix-series-group-label-g"))e.displaySampleGroupInfo(t,n)}return}if(t.target.tagName!=="rect"&&!e.imgBox)e.imgBox=t.target.getBoundingClientRect();const s=t.target.tagName=="rect"?t.target.__data__:e.getImgCell(t);if(!s||!s.term||!s.sample){e.dom.tip.hide();e.mouseout();return}const n=e.dimensions.xOffset+e.dimensions.seriesXoffset;const l=e.dimensions.yOffset;const r=e.settings.matrix;const d=r.controlLabels;e.dom.rowBeam.attr("x",n).attr("y",l+s.seriesY).attr("height",s.tw.settings?.barh?s.tw.settings.barh+2*s.tw.settings.gap:s.t.grp.type=="hierCluster"?r.clusterRowh:r.rowh).style("display","");e.dom.colBeam.attr("x",n+s.x).attr("y",l).style("display","");e.dom.matrixCellHoverOver.clear();const c=i({holder:e.dom.matrixCellHoverOver.d.append("div")});if(s.term.type=="geneVariant"&&s.tw.q?.type=="values"){{const[e,t]=c.addRow();e.html(d.Sample);t.html(s.row._ref_.label||s.value?.sample)}{const[e,t]=c.addRow();e.html("Gene");t.html(s.term.name)}const e={};if(s.siblingCells)for(const t of s.siblingCells){if(t.$id!=s.$id)continue;const n=t.value;const i=n.pairlst;const l=n.origin?`${n.origin} ${a[n.dt]}`:a[n.dt];const r=t.t.grp.type=="hierCluster"?n.value:i?(i[0].a.name||i[0].a.chr)+"::"+(i[0].b.name||i[0].b.chr):n.mname?`${n.mname} ${o[n.class].label}`:o[n.class].label;const d=t.fill==n.color||n.class=="Blank"?"":t.fill;if(!e[l]){e[l]=[{label:r,color:d}]}else{e[l].push({label:r,color:d})}}for(const[t,s]of Object.entries(e).sort(((e,t)=>t.length-e.length))){const[e,n]=c.addRow();e.html(t);n.html(`<span style="display:inline-block; width:12px; height:12px; background-color:${s[0].color}" ></span>\n\t\t\t\t\t${s[0].label}`);for(const e of s.slice(1)){const[t,s]=c.addRow();t.html("");s.html(`<span style="display:inline-block; width:12px; height:12px; background-color:${e.color}" ></span>\n\t\t\t\t\t\t${e.label}`)}}}else{{const[e,t]=c.addRow();e.html(d.Sample);t.html(s.row._ref_.label)}let e;if(s.term.type==N.SURVIVAL&&s.exitCodeKey){e=s.term.values?.[s.exitCodeKey]?.label||s.exitCodeKey}if(e||s.convertedValueLabel||s.label){if(s.term.type==N.GENE_EXPRESSION){{const[e,t]=c.addRow();e.html("Gene");t.html(s.term.name)}{const e=s.tw?.q?.convert2ZScore&&s.tw.q.mode=="continuous"||s.tw.q.mode!=="continuous"?`<span style="display:inline-block; width:12px; height:12px; background-color:${s.fill=="#fff"||s.fill=="transparent"?"":s.fill}" ></span>`:"";const[t,n]=c.addRow();t.html("Gene Expression");n.html(`${e} ${s.convertedValueLabel||s.label}${s.tw?.q?.convert2ZScore&&s.tw.q.mode=="continuous"&&s.zscoreLabel?s.zscoreLabel:""}`)}}else if(s.term.type==N.METABOLITE_INTENSITY){{const[e,t]=c.addRow();e.html("Metabolite");t.html(s.term.name)}{const e=s.tw?.q?.convert2ZScore&&s.tw.q.mode=="continuous"||s.tw.q.mode!=="continuous"?`<span style="display:inline-block; width:12px; height:12px; background-color:${s.fill=="#fff"||s.fill=="transparent"?"":s.fill}" ></span>`:"";const[t,n]=c.addRow();t.html("Metabolite Intensity");n.html(`${e} ${s.convertedValueLabel||s.label}${s.tw?.q?.convert2ZScore&&s.tw.q.mode=="continuous"&&s.zscoreLabel?s.zscoreLabel:""}`)}}else if(s.term.type==N.SURVIVAL){{const[t,n]=c.addRow();t.html(s.term.name);n.html(`<span style="display:inline-block; width:12px; height:12px; background-color:${s.fill=="#fff"||s.fill=="transparent"?"":s.fill}" ></span>\n\t\t\t\t\t\t\t${e||s.label}`)}const t="Time to Event: "+(s.timeToEventKey?s.timeToEventKey+(s.term.unit?` ${s.term.unit}`:""):(s.convertedValueLabel||s.label)+(s.tw?.q?.convert2ZScore&&s.tw.q.mode=="continuous"&&s.zscoreLabel?s.zscoreLabel:""));{const[e,s]=c.addRow();e.html("");s.html(t)}}else{const e=s.tw?.q?.convert2ZScore&&s.tw.q.mode=="continuous"||s.tw.q.mode!=="continuous"?`<span style="display:inline-block; width:12px; height:12px; background-color:${s.fill=="#fff"||s.fill=="transparent"?"":s.fill}" ></span>`:"";const[t,n]=c.addRow();t.html(s.term.name);n.html(`${e} ${s.convertedValueLabel||s.label}${s.tw?.q?.convert2ZScore&&s.tw.q.mode=="continuous"&&s.zscoreLabel?s.zscoreLabel:""}`)}}}e.dom.matrixCellHoverOver.show2(t.clientX,t.clientY);e.dom.mainG.on("mouseout",e.mouseout)};e.getImgCell=function(t){if(!e.imgBox){if(t.target.tagName=="image")e.imgBox=t.target.getBoundingClientRect();else return}const s=t.clientY-e.imgBox.y-t.target.clientTop;const n=t.target.__data__.find((e=>e.hoverY0<=s&&s<=e.hoverY1));if(!n)return;const{xMin:i,dx:a}=e.dimensions;const o=t.clientX-e.imgBox.x-t.target.clientLeft+i;for(const e of n.cells){const t=e.x;const s=e.x+a;if(t<=o&&o<=s)return e}return null};e.mouseout=function(){if(!e.activeLabel&&e.dom.tip)e.dom.tip.hide();delete e.imgBox;e.dom.colBeam.style("display","none");e.dom.rowBeam.style("display","none");e.dom.matrixCellHoverOver.clear()};e.mouseclick=async function(t,s){const d=e.state.termdbConfig.queries;if(!d)return;if(!(d.singleSampleGenomeQuantification||d.singleSampleMutation||d.NIdata||d.DZImages))return;e.dom.mainG.on("mouseout",null);delete e.imgBox;const c=s||t.target.__data__;if(!c)return;e.config.settings.matrix;const p={sample_id:c.row._ref_.label};const m=c.term?.type=="geneVariant"?c.term.name:null;e.dom.clickMenu.clear();e.dom.dendroClickMenu.clear();e.dom.brushMenu.clear();e.dom.matrixCellHoverOver.clear();if(e.dom.sampleListMenu)e.dom.sampleListMenu.destroy();if(d.singleSampleGenomeQuantification){for(const t in d.singleSampleGenomeQuantification){const s=e.dom.clickMenu.d.append("div").attr("class","sja_menuoption sja_sharp_border").attr("data-testid","sjpp-ssgp-menu-btn").text(t).on("click",(async i=>{const a=l(e.opts.plotDiv||n(e.opts.holder.node().parentNode));a.header.text(p.sample_id);await(await import("./plot.ssgq-146075f5.js")).plotSingleSampleGenomeQuantification(e.state.termdbConfig,e.state.vocab.dslabel,t,p,a.body.append("div").style("margin","20px"),e.app.opts.genome,m);s.remove();e.dom.clickMenu.d.selectAll("*").remove()}))}}if(d?.singleSampleMutation){const t=e.dom.clickMenu.d.append("div").attr("class","sja_menuoption sja_sharp_border").attr("data-testid","oncoMatrix_termLabel_disco_button").text("Disco plot").on("click",(async s=>{const i=l(e.opts.plotDiv||n(e.opts.holder.node().parentNode));i.header.text(p.sample_id);(await import("./plot.disco-ccdf741c.js")).default(e.state.termdbConfig,e.state.vocab.dslabel,p,i.body,e.app.opts.genome,{Disco:{prioritizeGeneLabelsByGeneSets:true}});t.remove();e.dom.clickMenu.d.selectAll("*").remove()}))}if(d.DZImages){const t=e.dom.clickMenu.d.append("div").attr("class","sja_menuoption sja_sharp_border").attr("data-testid","oncoMatrix_termLabel_dzi_button").style("display","none").text(`${d.DZImages.type} Images (0)`);const s=await r("sampledzimages",{body:{genome:e.app.opts.genome.name,dslabel:e.state.vocab.dslabel,sample_id:p.sample_id}});if(s.sampleDZImages?.length>0){t.style("display","block");t.text(`${d.DZImages.type} Images (${s.sampleDZImages.length})`);t.on("click",(async i=>{const a=l(e.opts.plotDiv||n(e.opts.holder.node().parentNode));a.header.text(p.sample_id);(await import("./plot.dzi-aafdf56b.js")).default(e.state.vocab.dslabel,a.body,e.app.opts.genome,p.sample_id,s.sampleDZImages);t.remove();e.dom.clickMenu.d.selectAll("*").remove()}))}}if(d.NIdata){for(const[t,s]of Object.entries(d.NIdata)){e.dom.clickMenu.d.append("div").attr("class","sja_menuoption sja_sharp_border").text("Neuro Image: "+t).on("click",(async()=>{e.dom.clickMenu.clear();const n={chartType:"brainImaging",queryKey:t,settings:{brainImaging:{brainImageL:s.parameters.l,brainImageF:s.parameters.f,brainImageT:s.parameters.t}},selectedSampleFileNames:[p.sample_id+".nii"]};e.app.dispatch({type:"plot_create",config:n})}))}}const u=e.settings.matrix.controlLabels;const g=i({holder:e.dom.clickMenu.d.append("div").append("span")});const h=e.state.termdbConfig.urlTemplates;if(h?.sample){const e=c[h.sample.namekey]||c.sample||c.row.sample;const[t,s]=g.addRow();t.html(u.Sample);s.html(`<a href="${h.sample.base}${e}" target="_blank">${c.row._ref_.label} ${ce.externalLink}</a>`)}else{const[e,t]=g.addRow();e.html(u.Sample);t.html(c.row._ref_.label||c.value.sample)}if(c.term?.type=="geneVariant"&&c.tw.q?.type=="values"){if(c.value){if(h?.gene){const t=e.data.refs.byTermId[c.tw.$id][h.gene.namekey];const[s,n]=g.addRow();s.html("Gene");n.html(`<a href="${h.gene.base}${t}" target="_blank">${c.tw.term.name} ${ce.externalLink}</a>`)}else{const[e,t]=g.addRow();e.html("Gene");t.html(c.term.name)}const t={};for(const e of c.siblingCells){if(e.$id!=c.$id)continue;const s=e.value;const n=s.pairlst;const i=s.origin?`${s.origin} ${a[s.dt]}`:a[s.dt];const l=e.t.grp.type=="hierCluster"?s.value:n?(n[0].a.name||n[0].a.chr)+"::"+(n[0].b.name||n[0].b.chr):s.mname?`${s.mname} ${o[s.class].label}`:o[s.class].label;const r=e.fill==s.color||s.class=="Blank"?"":e.fill;if(!t[i]){t[i]=[{label:l,color:r}]}else{t[i].push({label:l,color:r})}}for(const[e,s]of Object.entries(t).sort(((e,t)=>t.length-e.length))){const[t,n]=g.addRow();t.html(e);n.html(`<span style="display:inline-block; width:12px; height:12px; background-color:${s[0].color}" ></span>\n\t\t\t\t\t\t${s[0].label}`);for(const e of s.slice(1)){const[t,s]=g.addRow();t.html("");s.html(`<span style="display:inline-block; width:12px; height:12px; background-color:${e.color}" ></span>\n\t\t\t\t\t\t\t${e.label}`)}}}}else if(c.term){let e;if(c.term.type==N.SURVIVAL&&c.exitCodeKey){e=c.term.values?.[c.exitCodeKey]?.label||c.exitCodeKey}if(e||c.convertedValueLabel||c.label){if(c.term.type==N.GENE_EXPRESSION){{const[e,t]=g.addRow();e.html("Gene");t.html(c.term.name)}{const e=c.tw?.q?.convert2ZScore&&c.tw.q.mode=="continuous"||c.tw.q.mode!=="continuous"?`<span style="display:inline-block; width:12px; height:12px; background-color:${c.fill=="#fff"||c.fill=="transparent"?"":c.fill}" ></span>`:"";const[t,s]=g.addRow();t.html("Gene Expression");s.html(`${e} ${c.convertedValueLabel||c.label}${c.tw?.q?.convert2ZScore&&c.tw.q.mode=="continuous"&&c.zscoreLabel?c.zscoreLabel:""}`)}}else if(c.term.type==N.METABOLITE_INTENSITY){{const[e,t]=g.addRow();e.html("Metabolite");t.html(c.term.name)}{const e=c.tw?.q?.convert2ZScore&&c.tw.q.mode=="continuous"||c.tw.q.mode!=="continuous"?`<span style="display:inline-block; width:12px; height:12px; background-color:${c.fill=="#fff"||c.fill=="transparent"?"":c.fill}" ></span>`:"";const[t,s]=g.addRow();t.html("Metabolite Intensity");s.html(`${e} ${c.convertedValueLabel||c.label}${c.tw?.q?.convert2ZScore&&c.tw.q.mode=="continuous"&&c.zscoreLabel?c.zscoreLabel:""}`)}}else if(c.term.type==N.SURVIVAL){{const[t,s]=g.addRow();t.html(c.term.name);s.html(`<span style="display:inline-block; width:12px; height:12px; background-color:${c.fill=="#fff"||c.fill=="transparent"?"":c.fill}" ></span>\n\t\t\t\t\t\t\t${e||c.label}`)}const t="Time to Event: "+(c.timeToEventKey?c.timeToEventKey+(c.term.unit?` ${c.term.unit}`:""):(c.convertedValueLabel||c.label)+(c.tw?.q?.convert2ZScore&&c.tw.q.mode=="continuous"&&c.zscoreLabel?c.zscoreLabel:""));{const[e,s]=g.addRow();e.html("");s.html(t)}}else{const e=c.tw?.q?.convert2ZScore&&c.tw.q.mode=="continuous"||c.tw.q.mode!=="continuous"?`<span style="display:inline-block; width:12px; height:12px; background-color:${c.fill=="#fff"||c.fill=="transparent"?"":c.fill}" ></span>`:"";const[t,s]=g.addRow();t.html(c.term.name);s.html(`${e} ${c.convertedValueLabel||c.label}${c.tw?.q?.convert2ZScore&&c.tw.q.mode=="continuous"&&c.zscoreLabel?c.zscoreLabel:""}`)}}}e.dom.clickMenu.show(t.clientX,t.clientY,false,true)};e.legendClick=function(){};e.svgMousemove=function(t){if(!e.dragged)return;const s=e.config.settings.matrix;const n=e.dragged;const i=!s.transpose?n.x:n.x-n.clientX+t.clientX;const a=!s.transpose?n.y-n.clientY+t.clientY:n.y;n.clone.attr("transform",`translate(${i},${a})`)};e.svgMouseup=function(t){if(!e.dragged)return;e.dragged.clone.remove();delete e.dragged;delete e.clicked};e.getVisibleCenterCell=function(t){e.settings.matrix;const s=e.dimensions;const n=Math.round((.5*s.mainw-s.seriesXoffset-t)/s.dx);return e.sampleOrder[n]};ue(e);he(e);ge(e);ye(e);me(e);be(e);xe(e)}function me(e){let t;n(window).on(`resize.sjpp-${e.id}`,(()=>{if(t)clearTimeout(t);if(e.dimensions&&e.layout)t=setTimeout(s,200)}));function s(){if(e.dimensions&&e.layout)e.main()}}function ue(e){fe(e,"term");e.setPill=function(t){e.pill=B({tip:e.customTipApi,menuOptions:"all",menuLayout:"horizontal",vocabApi:e.app.vocabApi,vocab:t.vocab,activeCohort:t.activeCohort,numericEditMenuVersion:["discrete","continuous"],usecase:{target:"matrix"},getBodyParams:()=>{const t=[];for(const s of e.config.termgroups){if(e.chartType=="hierCluster"&&s.type!="hierCluster")continue;for(const e of s.lst){if(e.term.chr){t.push(`${e.term.chr}:${e.term.start}-${e.term.stop}`)}else if(e.term.gene){t.push(e.term.gene)}}}if(t.length)return{currentGeneNames:t};return{}},renderAs:"none",callback:t=>{if(t&&!t.q)throw"data.q{} missing from pill callback";const s=e.activeLabel||e.lastactiveLabel;if(t){t.label=s.tw.label;if(s&&s.tw)t.$id=s.tw.$id;const n=e.mayRemoveTvsEntry(t);e.pill.main(t);e.app.dispatch({type:"plot_nestedEdits",id:e.opts.id,edits:[{nestedKeys:["termgroups",s.grpIndex,"lst",s.lstIndex],value:t},{nestedKeys:["legendValueFilter"],value:n}]})}else{e.removeTerm()}e.dom.tip.hide()}})};e.getMenuOptions=function(t){return e.config.chartType=="hierCluster"&&t.grp.type==="hierCluster"?"{remove,}":t.tw.term.type=="geneVariant"?"{edit,replace,remove}":"*"};e.showTermMenu=async function(t){const s=t.target.__data__;if(!s||!s.tw||!s.grp)return;const n=e.settings.matrix;const i=n.controlLabels;e.activeLabel=s;e.dom.menutop.style("display","").selectAll("*").remove();e.dom.menubody.style("padding",0).selectAll("*").remove();const a=e.dom.menutop.append("div").style("display","block").text("Loading...");e.dom.tip.show(t.clientX-20,t.clientY-20);await e.pill.main(Object.assign({menuOptions:e.getMenuOptions(s)},s.tw?s.tw:{term:null,q:null}));a.remove();e.dom.shortcutDiv=e.dom.menutop.append("div");e.showShortcuts(s,e.dom.shortcutDiv);e.dom.twMenuDiv=e.dom.menutop.append("div");const o=e.dom.twMenuDiv.append("div").style("text-align","center");o.append("span").text(`${i.Term} `);const l=s.tw.label||s.tw.term.name;const r=s.tw.term.type=="geneVariant"||s.tw.term.type==N.GENE_EXPRESSION?"gene":s.tw.term.type==N.METABOLITE_INTENSITY?"metabolite":"variable";e.dom.twLabelInput=o.append("input").attr("type","text").attr("size",l.length+3).attr("aria-label",`Type to edit the ${r} label`).style("padding","1px 5px").style("text-align","center").property("value",l).on("input",(()=>{const t=e.dom.twLabelInput.property("value");e.dom.twLabelInput.attr("size",t.length+3);e.dom.twLabelEditBtn.style("display",t.trim()===l?"none":"inline")}));e.dom.twLabelEditBtn=o.append("button").style("display","none").style("margin-left","5px").html("submit").on("click",(()=>{if(l!=e.dom.twLabelInput.property("value").trim())e.updateTermLabel();e.dom.tip.hide()}));if(r=="gene"){e.dom.gbButton=o.append("button").style("text-align","center").html("Lollipop").attr("data-testid","oncoMatrix_cell_lollipop_button").on("click",(async()=>{await e.launchGB(s);e.dom.tip.hide()}))}if(e.state.termdbConfig.urlTemplates?.gene&&r=="gene"){const t=e.state.termdbConfig.urlTemplates;e.dom.geneSummaryLink=o.append("div").style("display","inline-block").style("margin-left","5px").style("text-align","center").style("color","rgb(0, 0, 238)").style("cursor","pointer").style("text-decoration","underline").html(`${t.gene.defaultText||""}${ce.externalLink}`).on("click",(async()=>{const n=e.data.refs.byTermId[s.tw.$id][t.gene.namekey];window.open(`${t.gene.base}${n}`,"_blank");e.dom.tip.hide()}))}if(e.config.settings.matrix.maxSample){e.dom.twMenuDiv.append("div").style("text-align","center").style("margin","5px").text(`#${i.samples}: ${s.counts.samples} rendered, ${s.allCounts.samples-s.counts.samples} not rendered`)}e.dom.twMenuBar=e.dom.twMenuDiv.append("div").style("text-align","center");const d=t.target;e.pill.showMenu(t,d,e.dom.twMenuBar);e.dom.grpMenuDiv=e.dom.menutop.append("div").style("margin-top","10px")};e.launchGB=async t=>{const s=l(e.opts.plotDiv||n(e.opts.holder.node().parentNode));s.header.text(t.tw.term.name);const i={debugmode:e.app.opts.debug,holder:s.body.append("div").style("margin","20px"),genome:e.app.opts.genome,nobox:true,query:t.tw.term.name,tklst:[{type:"mds3",dslabel:e.app.opts.state.vocab.dslabel,filter0:e.state.filter0,filterObj:structuredClone(e.state.filter)}]};const a=await import("./app-488d9fd6.js").then((function(e){return e.c3}));await a.default(i)};e.updateTermLabel=()=>{const t=e.dom.twLabelInput.property("value").trim();const s=e.activeLabel;if(s.tw.label===t)return;s.tw.label=t;s.grp.lst[s.lstIndex]=s.tw;e.app.dispatch({type:"plot_nestedEdits",id:e.opts.id,edits:[{nestedKeys:["termgroups",s.grpIndex],value:s.grp}]})};e.showShortcuts=(t,s)=>{const i=e.settings.matrix.controlLabels;s.style("text-align","center");const a=t.tw.term.type=="geneVariant"||t.tw.term.type==N.GENE_EXPRESSION?"gene":t.tw.term.type==N.METABOLITE_INTENSITY?"metabolite":"variable";const o=e.type!="hierCluster"&&t.tw.sortSamples?.priority!==undefined;s.append("span").selectAll("div").data([{icon:"corner",title:`Sort ${i.samples} against this ${a}, and position this ${a} at the top left corner`,disabled:t.grp.lst.length<1||t.index===0&&t.tw.sortSamples?.priority===0||e.type=="hierCluster",handler:e.sortSamplesAgainstCornerTerm},{icon:"left",title:`Sort ${i.samples} against this ${a}`,disabled:t.tw.sortSamples?.priority===0&&!e.config.settings.hierCluster?.clusterSamples,fill:o?"rgba(200,100,100,0.5)":"",handler:o?e.unsortSamplesAgainstTerm:e.sortSamplesAgainstTerm},{html:" | "},{icon:"up",title:`Move this ${a} up`,disabled:t.index===0||e.type=="hierCluster",handler:e.moveTermUp},{icon:"down",title:`Move this ${a} down`,disabled:t.index===t.grp.lst.length-1||e.type=="hierCluster",handler:e.moveTermDown}],(e=>e.icon)).enter().append("div").style("display","inline-block").each((function(e){const t=n(this);if(e.icon)d[e.icon](t,e);else t.html(e.html)}))};e.sortSamplesAgainstCornerTerm=t=>{t.stopPropagation();const s=e.activeLabel;const n=JSON.parse(JSON.stringify(e.termGroups));const i=n[s.grpIndex];const[a,o]=e.getSorterTerms(s);i.lst.splice(s.lstIndex,1);i.lst.unshift(a);i.sortTermsBy="asListed";for(const e of n){if(e==i){for(const[t,s]of e.lst.entries()){if(!s.sortSamples)s.sortSamples={priority:t,by:"values"};s.sortSamples.priority=t}}else{for(const t of e.lst){if(!t.sortSamples)continue;t.sortSamples.priority=o.findIndex((e=>e.tw?.$id===t.$id))+i.lst.length}}}e.app.dispatch({type:"plot_edit",id:e.opts.id,config:{termgroups:n,settings:{matrix:{sortTermsBy:"asListed"}}}});e.dom.tip.hide()};e.sortSamplesAgainstTerm=t=>{t?.stopPropagation();const s=e.activeLabel;const[n]=e.getSorterTerms(s);if(s.grp.type=="hierCluster")n.sortSamples.by="values";const i=e.termGroups;i[s.grpIndex].lst[s.lstIndex]=n;for(const e of i){for(const t of e.lst){if(!t.sortSamples)continue;if(t.$id===s.tw.$id){t.sortSamples.priority=0}else t.sortSamples.priority+=1}}if(e.chartType=="hierCluster"){e.config.settings.hierCluster.clusterSamples=false;e.config.settings.hierCluster.yDendrogramHeight=0}e.config.termgroups=i;e.app.dispatch({type:"plot_edit",id:e.opts.id,config:e.config});e.dom.tip.hide()};e.unsortSamplesAgainstTerm=(t,s)=>{t.stopPropagation();const n=e.activeLabel||s.data.t;const[i]=e.getSorterTerms(n);const a=e.termGroups;a[n.grpIndex].lst[n.lstIndex]=i;for(const e of a){for(const t of e.lst){if(!t.sortSamples)continue;if(t.$id===n.tw.$id){delete t.sortSamples}else if("sortSamples"in t&&"priority"in t.sortSamples){if(t.sortSamples.priority>n.sortSamples?.priority)t.sortSamples.priority-=1}}}e.app.dispatch({type:"plot_edit",id:e.opts.id,config:{termgroups:a}});e.dom.tip.hide()};e.moveTermUp=t=>{t.stopPropagation();const s=e.activeLabel;const n=e.termGroups[s.grpIndex];n.lst.splice(s.lstIndex,1);n.lst.splice(s.lstIndex-1,0,s.tw);n.sortTermsBy="asListed";e.app.dispatch({type:"plot_nestedEdits",id:e.opts.id,edits:[{nestedKeys:["termgroups",s.grpIndex],value:n},{nestedKeys:["settings","matrix","sortTermsBy"],value:"asListed"}]});e.dom.tip.hide()};e.moveTermDown=t=>{t.stopPropagation();const s=e.activeLabel;const n=e.termGroups[s.grpIndex];n.lst.splice(s.lstIndex,1);n.lst.splice(s.lstIndex+1,0,s.tw);n.sortTermsBy="asListed";e.app.dispatch({type:"plot_nestedEdits",id:e.opts.id,edits:[{nestedKeys:["termgroups",s.grpIndex],value:n},{nestedKeys:["settings","matrix","sortTermsBy"],value:"asListed"}]});e.dom.tip.hide()};e.showTermEditMenu=async()=>{e.dom.menubody.selectAll("*").remove();const t=e.activeLabel;const s=e.config.settings.matrix;const n=s.controlLabels;if(t.tw.term.type=="geneVariant"){const s=e.dom.menubody.append("div");const i=s.append("label");i.append("span").html(`Minimum # ${n.samples} to be visible`);const a="minNumSamples"in t.tw?t.tw.minNumSamples:"";const o=i.append("input").attr("type","number").style("margin-left","5px").style("width","50px").property("value",a);s.append("div").append("button").html("Submit").on("click",(()=>{const s=o.property("value");if(s===a)return;if(s===""){delete t.tw.minNumSamples}else{t.tw.minNumSamples=Number(s)}e.app.dispatch({type:"plot_nestedEdits",id:e.opts.id,edits:[{nestedKeys:["termgroups",t.grpIndex,"lst",t.lstIndex],value:t.tw}]});e.dom.tip.hide()}))}else{await e.pill.main(Object.assign({menuOptions:e.getMenuOptions(t)},e.activeLabel.tw));e.pill.showMenu()}};e.showMoveMenu=async()=>{e.dom.menubody.selectAll("*").remove();e.termBeingMoved=e.activeLabel;const t=e.dom.menubody.append("div");t.append("span").html("Click on another label");e.makeInsertPosRadios(t)};e.showTermInsertMenu=()=>{e.dom.menubody.selectAll("*").remove();e.dom.editbtns=e.dom.menubody.append("div");e.dom.editbody=e.dom.menubody.append("div");if(e.activeLabel.grp.type=="hierCluster"){e.showDictTermSelection();return}const t=e.dom.editbtns.append("div").style("margin","10px 5px");t.append("label").html(`Insert genes or variables in `);e.dom.grpNameSelect=t.append("select").on("change",(()=>{const t=e.dom.grpNameSelect.property("value");e.dom.grpNameTextInput.property("disabled",t=="current").property("value",t=="current"?e.activeLabel.grp.name:s)}));e.dom.grpNameSelect.selectAll("option").data([{label:"current",value:"current",selected:true},{label:"new",value:"new"}]).enter().append("option").attr("selected",(e=>e.selected)).html((e=>e.label));t.append("span").html(" group: ");let s="";e.dom.grpNameTextInput=t.append("input").attr("type","text").property("disabled",true).property("value",e.activeLabel.grp.name).on("change",(()=>{const t=e.dom.grpNameTextInput.property("value");if(t==e.activeLabel.grp.name);else{s=e.dom.grpNameTextInput.property("value")}}));e.makeInsertPosRadios(e.dom.editbtns);e.showDictTermSelection()};e.makeInsertPosRadios=function(t){const s=t.append("div").style("margin","10px 5px");s.append("div").style("display","inline-block").style("padding-right","10px").html("Insert ");const n=s.append("div").style("display","inline-block");e.insertRadioId=`sjpp-matrix-${e.id}-insert-pos`;const i=n.append("label");i.append("input").attr("type","radio").attr("value","above").property("checked",true).attr("name",e.insertRadioId);i.append("span").html("above");n.append("span").html("  ");const a=n.append("label");a.append("input").attr("type","radio").attr("value","below").attr("name",e.insertRadioId);a.append("span").html(" below")};e.showDictTermSelection=async()=>{const s={target:"matrix",detail:"termgroups"};if(e.activeLabel.grp.type=="hierCluster"){s.target=e.activeLabel.tw.term.type;s.detail="term"}const n=await import("./app-5aa892cb.js");e.dom.editbody.selectAll("*").remove();n.appInit({holder:e.dom.editbody.append("div"),vocabApi:e.app.vocabApi,state:{vocab:e.state.vocab,activeCohort:e.activeCohort,nav:{header_mode:"search_only"},tree:{usecase:s}},tree:{submit_lst:t},search:{handleGeneVariant:e=>t([e])}})};async function t(t){const s=await Promise.all(t.map((async t=>{const s=structuredClone(t);const n="id"in s?{id:s.id,term:s}:{term:s};await A(n,e.app.vocabApi);return n})));const i=e.insertRadioId&&n(`input[name='${e.insertRadioId}']:checked`)?.property("value");const a=e.activeLabel;const o=e.termGroups;if(a.grp.type=="hierCluster"){const t=o[a.grpIndex];t.lst.splice(a.lstIndex+1,0,...s);e.app.dispatch({type:"plot_nestedEdits",id:e.opts.id,edits:[{nestedKeys:["termgroups",a.grpIndex,"lst"],value:t.lst}]})}else if(e.dom.grpNameSelect.property("value")=="current"){const t=o[a.grpIndex];const n=i=="above"?a.lstIndex:a.lstIndex+1;t.lst.splice(n,0,...s);e.app.dispatch({type:"plot_nestedEdits",id:e.opts.id,edits:[{nestedKeys:["termgroups",a.grpIndex,"lst"],value:t.lst}]})}else{const t=i=="above"?a.grpIndex:a.grpIndex+1;o.splice(t,0,{name:e.dom.grpNameTextInput.property("value"),lst:s});e.app.dispatch({type:"plot_edit",id:e.opts.id,config:{termgroups:o}})}e.dom.tip.hide()}e.showSortMenu=()=>{const t=e.activeLabel;e.dom.menubody.selectAll("*").remove();e.dom.menubody.append("div").style("margin-top","10px").style("text-align","center").html(t.tw.term.name);e.moveInput=undefined;e.showSortOptions(t)};e.showTermMoveOptions=t=>{const s=e.dom.menubody.append("div").style("margin-top","10px");const n=s.append("label");e.moveInput=n.append("input").attr("type","checkbox").style("text-align","center");n.append("span").html(` move this row `);const i=s.append("select");i.selectAll("option").data([{label:"before",value:0},{label:"after",value:1}]).enter().append("option").attr("value",(e=>e.value)).html((e=>e.label));s.append("span").html(" ");const a=t.grp.lst.filter((e=>e.$id!=t.tw.$id)).map((e=>({label:e.term.name,value:e.$id})));const o=s.append("select");o.selectAll("option").data([{label:"all",value:"*"},...a]).enter().append("option").attr("value",(e=>e.value)).html((e=>e.label))};e.showSortOptions=t=>{const s=e.dom.menubody.append("div").style("margin-top","10px");const n=s.append("label");const i=n.append("input").attr("type","checkbox").property("checked",true).style("text-align","center");const a=e.settings.matrix.controlLabels;n.append("span").html(` sort ${a.samples} against (in order of priority):`);const o=e.showSorterTerms(s,t);e.dom.menubody.append("button").html("Apply").on("click",(()=>{JSON.parse(JSON.stringify(e.config.settings.matrix))||{};delete o.div;delete o.up;delete o.down;delete o.delete;if(i.property("checked")||e.moveInput.property("checked")){e.app.dispatch({type:"plot_nestedEdits",id:e.opts.id,edits:[{nestedKeys:["termgroups",t.grpIndex,"lst",t.lstIndex],value:o}]})}e.dom.tip.hide()}))};e.showSorterTerms=(t,s)=>{const[i,a]=e.getSorterTerms(s);const o=e.settings.matrix;const l=o.controlLabels;t.append("div").style("margin","5px").style("padding","5px 10px").selectAll("div").data(a,(e=>e.$id)).enter().append("div").style("width","fit-content").style("margin","3px").style("cursor","default").style("padding","3px 10px").style("border-radius","5px").style("color","black").style("background-color","rgb(238, 238, 238)").each((function(e,t){e.sortSamples.priority=t;e.div=n(this);const s=e.$id=="sample"?`${l.Sample} name`:e.term.name;e.div.append("span").style("margin-right","10px").html(s);e.up=e.div.append("span").html(" ▲ ").style("display",t===0?"none":"inline").style("color","#555").on("click",(()=>{this.parentNode.insertBefore(this,this.previousSibling);a.splice(e.priority,1);a.splice(e.priority-1,0,e);r()}));e.down=e.div.append("span").html(" ▼ ").style("display",t<a.length-1?"inline":"none").style("color","#555").on("click",(()=>{this.parentNode.insertBefore(this,this.nextSibling.nextSibling);a.splice(e.priority,1);a.splice(e.priority+1,0,e);r()}));e.delete=e.div.append("span").html(" ✕ ").style("display","inline").style("color","rgb(255, 100, 100)").on("click",(()=>{e.div.remove();a.splice(e.priority,1);r()}))}));function r(){for(const[e,t]of a.entries()){t.priority=e;t.up.style("display",t.priority>0?"inline":"none");t.down.style("display",t.priority<a.length-1?"inline":"none")}}return i};e.getSorterTerms=t=>{const s=[...e.termOrder.filter((e=>e.tw.sortSamples)).map((e=>JSON.parse(JSON.stringify(e.tw)))).sort(((e,t)=>e.sortSamples.priority-t.sortSamples.priority)),...e.config.settings.matrix.sortSamplesTieBreakers.map((e=>JSON.parse(JSON.stringify(e))))];const n=e.settings.matrix;const i=n.sortOptions[n.sortSamplesBy];if(!i){throw`unsupported s.sortSamplesBy='${n.sortSamplesBy}'`}const a=i.sortPriority?.find((e=>e.types.includes(t.tw?.term?.type)))?.tiebreakers[0];const o=a?{}:t.tw?.term?.type=="geneVariant"?{by:"class",order:["Fuserna","CNV_loss","CNV_amp","F","N","D","I","M","P","L","Utr3","Utr5","S","Intron","WT","Blank"]}:{by:"values"};const l=s.findIndex((e=>e.$id===t.tw?.$id));const r=JSON.parse(JSON.stringify(t.tw||{}));r.sortSamples=o;if(l==-1){s.unshift(r)}else{if(o.order)r.sortSamples.order=o.order}return[r,s]};e.removeTerm=()=>{const t=e.activeLabel;const s=e.mayRemoveTvsEntry(t.tw);const n=e.termGroups;const i=n[t.grpIndex];i.lst.splice(t.lstIndex,1);if(i.lst.length){e.app.dispatch({type:"plot_nestedEdits",id:e.opts.id,edits:[{nestedKeys:["termgroups",t.grpIndex,"lst"],value:i.lst},{nestedKeys:["legendValueFilter"],value:s}]})}else{n.splice(t.grpIndex,1);e.app.dispatch({type:"plot_edit",id:e.opts.id,config:{termgroups:n,legendValueFilter:s}})}e.dom.tip.hide()};e.removeTermGroup=()=>{const t=e.activeLabel;const s=e.termGroups;s.splice(t.grpIndex,1);e.app.dispatch({type:"plot_edit",id:e.opts.id,config:{termgroups:s}});e.dom.tip.hide()};e.mayRemoveTvsEntry=t=>{if(!e.config.legendValueFilter?.lst.length)return e.config.legendValueFilter;const s=structuredClone(e.config.legendValueFilter.lst);const n=s.filter((e=>e.tvs?.term.type===t?.term.type&&(("id"in e.tvs.term||"id"in t.term)&&e.tvs.term.id===t.term.id||e.tvs.term.name===t.term.name)));if(!n.length)return e.config.legendValueFilter;else{for(const e of n){const n=e.tvs;if(n.term.type!=t.term.type)continue;if(("id"in n.term||"id"in t.term)&&n.term.id!==t.term.id)continue;else if(n.term.name!=t.term.name)continue;const i=s.findIndex((e=>e===n));s.splice(i,1)}}return{in:true,join:"and",type:"tvslst",lst:s}};e.launchBrowser=t=>{t.stopPropagation();const s=e.activeLabel.tw;const n=[];for(const t of e.data.lst){if(t[s.$id]?.values)n.push(...t[s.$id].values)}e.app.dispatch({type:"plot_create",config:{term:s,chartType:"variantBrowser",insertBefore:e.id,custom_variants:n}})}}function ge(e){e.showSampleGroupMenu=function(t){const s=t.target.__data__;if(!s)return;e.activeLabel=s;e.dom.menutop.selectAll("*").remove();e.dom.menubody.style("padding",0).selectAll("*").remove();const n=JSON.parse(JSON.stringify(e.config.menuOpts?.sampleGroup||[])).map((t=>{t.callback=e[t.callback];return t}));const i=[...n,{label:"Delete",callback:e.removeSampleGroup}];e.dom.menutop.append("div").selectAll(":scope>.sja_menuoption").data(i).enter().append("div").attr("class","sja_menuoption sja_sharp_border").style("display","block").html((e=>e.label)).on("click",((e,t)=>{e.stopPropagation();t.callback(t)}));e.dom.tip.showunder(t.target)};e.showNewChartMenu=()=>{e.dom.menubody.selectAll("*").remove()};e.launchSurvivalPlot=async t=>{e.dom.menubody.selectAll("*").remove();e.dom.menubody.append("div").style("padding-top","10px").html(`Use "<b>${e.config.divideBy.term.name}</b>" to`);const s=e.dom.menubody.append("div").style("padding","0 10px");const n="sjpp-matrix-surv-termnum-"+de++;const i=s.append("label");i.append("input").attr("type","radio").attr("name",n).attr("value","term2").property("checked",true);i.append("span").html(" overlay");const a=s.append("label").style("margin-left","10px");a.append("input").attr("type","radio").attr("name",n).attr("value","term0");a.append("span").html(" divide");e.dom.menubody.append("div").style("padding-bottom","10px").html(`the selected survival variable below:`);const o=await import("./app-5aa892cb.js");o.appInit({holder:e.dom.menubody.append("div"),vocabApi:e.app.vocabApi,state:{vocab:e.state.vocab,activeCohort:e.state.activeCohort,nav:{header_mode:"search_only"},tree:{usecase:{target:"survival",detail:"term"}}},tree:{click_term:i=>{e.dom.tip.hide();const a=s.select(`input[name='${n}']:checked`).property("value");e.dom.menubody.selectAll("*").remove();const o={chartType:"survival",term:i,[a]:JSON.parse(JSON.stringify(e.config.divideBy)),insertBefore:e.id};if(t.config){Object.assign(o,t.config)}e.app.dispatch({type:"plot_create",config:o})}}})};e.removeSampleGroup=()=>{if(!e.config.divideBy)return;const t=e.activeLabel.grp.tw;const s=t.term;if(s.type=="categorical"||s.type=="survival"){s.$id=t.$id;const n=e.config.legendValueFilter.lst.findIndex((e=>e.legendGrpName==t.term.id));if(n==-1){const n={legendGrpName:t.term.id,type:"tvs",tvs:{isnot:true,term:s,values:[{key:e.activeLabel.grp.id}]}};e.config.legendValueFilter.lst.push(n)}else{e.config.legendValueFilter.lst[n].tvs.values.push({key:e.activeLabel.grp.id})}}else if(j(s)){s.$id=t.$id;const n={legendGrpName:t.term.id||t.term.name,type:"tvs",tvs:{isnot:true,term:s,ranges:[e.data.refs.byTermId[t.$id].bins.find((t=>e.activeLabel.grp.id==t.name))]}};e.config.legendValueFilter.lst.push(n)}e.app.dispatch({type:"plot_edit",id:e.id,config:{legendValueFilter:e.config.legendValueFilter}});e.dom.tip.hide()};e.showDeletedSampleGroups=()=>{if(!e.config.divideBy)return;const t=e.activeLabel?.grp?.tw||e.config.divideBy;e.config.legendValueFilter.lst=e.config.legendValueFilter.lst.filter((e=>e.legendGrpName!==t.term.id&&e.legendGrpName!=t.term.name));e.app.dispatch({type:"plot_edit",id:e.id,config:{legendValueFilter:e.config.legendValueFilter}});e.dom.tip.hide()};e.displaySampleGroupInfo=(t,s)=>{const n=e.settings.matrix.controlLabels;const i=s.lst.length;e.dom.menutop.selectAll("*").remove();e.dom.menubody.selectAll("*").remove();e.dom.menubody.append("div").style("text-align","center").html(`<b>${s.name}</b> (${i} ${i<2?n.sample:n.samples})`);const a=e.dom.menubody.append("div").style("max-width","400px").style("padding","5px");for(const e in t.target.__data__.grp.legendData){const s=t.target.__data__.grp.legendData[e];a.append("div").style("padding-top","10px").html(`<b>${s.name}</b>`);const n=a.append("table");for(const e of s.items){const t=n.append("tr");t.append("td").append("div").style("width","12px").style("height","12px").style("background-color",e.color).style("border",`1px soloid ${e.stroke}`);t.append("td").html(e.text)}}e.dom.tip.show(t.clientX,t.clientY)};e.legendItemSorter=(e,t)=>{if(e.order&&t.order)return e.order-t.order;if(Number.isFinite(e.order)||t.order==-1)return-1;if(Number.isFinite(t.order)||e.order==-1)return 1;if(e.count)return t.count-e.count;if(Number.isFinite(e.count))return-1;if(Number.isFinite(t.count))return 1;return 0};e.handleLegendItemClick=t=>{const s=structuredClone(e.config.divideBy||{});const n="id"in s?s.id:s.name;if(t.termid==n){if(!s.exclude)s.exclude=[];const n=s.exclude?.indexOf(t.key);if(n==-1)s.exclude.push(t.key);else s.exclude.splice(n,1);e.app.dispatch({type:"plot_edit",id:e.id,config:{divideBy:s}})}};e.handleLegendMouseover=(t,s)=>{const n=structuredClone(e.config.divideBy||{});const i="id"in n?n.id:n.name;if(s.termid==i){e.dom.menutop.selectAll("*").remove();e.dom.menubody.selectAll("*").remove();e.dom.menubody.html(`Click to ${s.isExcluded?"show":"hide"}`);e.dom.tip.show(t.clientX,t.clientY)}}}function he(e){fe(e,"termGrp");e.showTermGroupMenu=function(t){const s=t.target.tagName.toLowerCase()=="tspan"?t.target.parentNode.__data__:t.target.__data__;if(!s)return;e.activeLabel=s;e.dom.menutop.style("display","").selectAll("*").remove();e.showTermGroupInputs(e.dom.menutop.append("div"));e.dom.tip.showunder(t.target)};e.showTermGroupInputs=function(t){const s=t;const n=s.append("div").style("text-align","center");n.append("span").text("Group ");e.dom.grpNameInput=n.append("input").attr("type","text").attr("size",(e.activeLabel.grp.name?.length||0)+5).style("padding","1px 5px").style("text-align","center").property("value",e.activeLabel.grp.name).on("input",(()=>{const t=e.dom.grpNameInput.property("value");e.dom.grpNameInput.attr("size",t.length+5);e.dom.grpEditBtn.style("display",t===e.activeLabel.grp.name?"none":"")}));e.dom.grpEditBtn=n.append("button").style("display","none").style("margin-left","5px").html("submit").on("click",(()=>{e.updateTermGrpName();e.dom.tip.hide()}));e.dom.menubody.style("padding",0).selectAll("*").remove();const i=[{label:"Edit",callback:e.showTermGroupEditMenu},{label:"Add Rows",callback:e.showTermInsertMenu},{label:"Sort",callback:e.showSortMenu},{label:"Delete",callback:e.removeTermGroup}];if(e.chartType=="hierCluster"){i.splice(0,1);i.splice(1,1)}s.append("div").style("text-align","center").selectAll(":scope>.sja_menuoption").data(i).enter().append("div").attr("class","sja_menuoption sja_sharp_border").style("display","inline-block").html((e=>e.label)).on("click",((t,s)=>{t.stopPropagation();e.dom.menutop.style("display","none");s.callback(s)}))};e.updateTermGrpName=()=>{const t=e.dom.grpNameInput.property("value");const s=e.activeLabel;if(s.grp.name===t)return;s.grp.name=t;e.app.dispatch({type:"plot_nestedEdits",id:e.opts.id,edits:[{nestedKeys:["termgroups",s.grpIndex],value:s.grp}]})};e.showTermGroupEditMenu=async()=>{e.dom.menubody.selectAll("*").remove();const t=e.dom.menubody.append("div").style("padding","5px");t.append("div").style("width","100%").style("font-weight",600).html("Group options");const s=t.append("div").append("label");const n=e.settings.matrix.controlLabels;s.append("span").html(`Minimum # of mutated ${n.samples} for the ${n.term.charAt(0).toLowerCase()+n.term.slice(1)} to be visible `).attr("aria-label",`May be overridden by a row-specific minNumSamples`);const i=s.append("input").attr("type","number").style("margin-left","5px").style("width","50px").property("value",e.activeLabel.grp.settings?.minNumSamples||0);t.append("div").append("button").html("Submit").on("click",(()=>{const t=e.activeLabel.grp.settings||{};t.minNumSamples=i.property("value");e.app.dispatch({type:"plot_nestedEdits",id:e.id,edits:[{nestedKeys:["termgroups",e.activeLabel.grpIndex,"settings"],value:t}]})}))};e.removeTermGroup=()=>{const t=e.termGroups;t.splice(e.activeLabel.grpIndex,1);e.app.dispatch({type:"plot_edit",id:e.id,config:{termgroups:t}});e.dom.tip.hide()};const t=["series","series-group","term","term-group"].map((e=>`.sjpp-matrix-${e}-label-g`)).join(",");e.enableTextHighlight=s=>{n(s.target.closest(t)).selectAll(".sjpp-matrix-label text").style("-webkit-user-select","auto").style("-moz-user-select","auto").style("-ms-user-select","auto").style("user-select","auto");n("body").on("mouseup.sjppMatrixLabelText",e.disableTextHighlight)};e.disableTextHighlight=e=>{n(e.target.closest(t)).selectAll(".sjpp-matrix-label text").style("-webkit-user-select","none").style("-moz-user-select","none").style("-ms-user-select","none").style("user-select","none");n("body").on("mouseup.sjppMatrixLabelText",null)}}function fe(e,t){e[`${t}LabelMousedown`]=(t,s)=>{e.clicked={event:t,d:s}};e[`${t}LabelMouseover`]=(s,i)=>{if(t=="term"&&s.target.__data__?.tw&&s.target.__data__.grp){if(s.target.__data__.grp.type=="hierCluster"){return}if(e.activeLabel||e.zoomArea){return}e.dom.menutop.selectAll("*").remove();e.dom.menubody.selectAll("*").remove();const t=s.target.__data__.grp.name;const n=s.target.__data__.tw.term.name;const i=e.dom.menubody.append("div").style("text-align","left").style("font-size","1.1em").html(t?`<b>${t}: ${n}</b>`:`<b>${n}</b>`);const a=e.dom.menubody.append("div").style("max-width","400px");const l=s.target.__data__;if(l.tw.term.type=="geneVariant"&&l.tw.q?.type=="values"){const t=Object.values(l.counts.subGroupCounts).reduce(((e,t)=>e+t.samplesNotTested),0);i.append("div").style("text-align","left").style("font-size","0.9em").html(`(tested ${e.samples.length-t} of ${e.samples.length})`);for(const[t,s]of Object.entries(l.counts.subGroupCounts)){const n=e.sampleGroups.find((e=>e.name==t)).lst.length;const i=n-s.samplesNotTested?s.samplesTotal/(n-s.samplesNotTested):0;a.append("div").style("padding-top","10px").html(t?`<b>${t}</b>: Mutated samples (${s.samplesTotal} of ${n-s.samplesNotTested}, ${c(".1%")(i)})`:`<b>Mutated samples (${s.samplesTotal} of ${n-s.samplesNotTested}, ${c(".1%")(i)})`);const l=a.append("table").style("margin-left","15px");for(const[e,t]of Object.entries(s.classes).sort(((e,t)=>t[1]-e[1]))){const s=l.append("tr");s.append("td").append("div").style("width","12px").style("height","12px").style("background-color",o[e].color);s.append("td").html(`${o[e].label}: ${t}`)}if(s.notTestedClasses){a.append("div").style("margin-left","15px").style("padding-top","12px").html("<b> Not counted:</b>");const e=a.append("table").style("margin-left","15px");for(const[t,n]of Object.entries(s.notTestedClasses).sort(((e,t)=>t[1]-e[1]))){const s=e.append("tr");s.append("td").append("div").style("width","12px").style("height","12px").style("background-color",o[t].color);s.append("td").html(`${o[t].label}: ${n}`)}}}}else if(!e.config.divideBy){const t=e.legendData.find((e=>e.name==l.tw.term.name));if(t&&t.items){const e=a.append("table");for(const s of t.items){const t=e.append("tr");t.append("td").append("div").style("width","12px").style("height","12px").style("background-color",s.color);t.append("td").html(`${s.key}: ${s.count}`)}}else{for(const[t,s]of Object.entries(l.counts.subGroupCounts)){const n=e.sampleGroups.find((e=>e.name==t)).totalCountedValues;a.append("div").style("padding-top","10px").html(t!==""?`<b>${t}</b>: ${s.samplesTotal} of ${n}`:`<b>${s.samplesTotal} of ${n}`);const i=a.append("table").style("margin-left","15px");for(const[e,t]of Object.entries(s.classes).sort(((e,t)=>t[1]-e[1]))){const s=l.tw.term.values?.[e]?.color;if(!s)continue;const n=i.append("tr");n.append("td").append("div").style("width","12px").style("height","12px").style("background-color",s);n.append("td").html(`${e}: ${t}`)}}}}else{for(const[t,s]of Object.entries(l.counts.subGroupCounts)){const n=e.sampleGroups.find((e=>e.name==t)).totalCountedValues;a.append("div").style("padding-top","10px").html(t!==""?`<b>${t}</b>: ${s.samplesTotal} of ${n}`:`<b>${s.samplesTotal} of ${n}`);const i=e.sampleGroups.find((e=>e.name==t));const o=i.legendData.find((e=>e.name==l.tw.term.name));if(o&&o.items){const e=a.append("table").style("margin-left","15px");for(const t of o.items){const s=e.append("tr");s.append("td").append("div").style("width","12px").style("height","12px").style("background-color",t.color);s.append("td").html(`${t.key}: ${t.count}`)}}else{const e=a.append("table").style("margin-left","15px");for(const[t,n]of Object.entries(s.classes).sort(((e,t)=>t[1]-e[1]))){const s=l.tw.term.values?.[t]?.color;if(!s)continue;const i=e.append("tr");i.append("td").append("div").style("width","12px").style("height","12px").style("background-color",s);i.append("td").html(`${t}: ${n}`)}}}}e.dom.tip.show(s.clientX,s.clientY)}if(s.target.innerHTML.includes("grouped by"))return;if(s.target.tagName==="text"){n(s.target).style("fill","blue")}if(!e.dragged)return;e.hovered=s.target.__data__};e[`${t}LabelMouseout`]=e=>{n(e.target).style("fill","")};e[`${t}LabelMousemove`]=(s,i)=>{const a=e.config.settings.matrix;if(e.clicked&&!e.dragged){e.dom[`${t}LabelG`].selectAll("text").style("-webkit-user-select","none").style("-moz-user-select","none").style("-ms-user-select","none").style("user-select","none");const i=e.clicked.event.target.closest(".sjpp-matrix-label");const a=i?.__data__;if(!a)return;if(e.type=="hierCluster"&&a.tw&&a.grp?.name==e.config.settings.hierCluster?.termGroupName)return;const[o,l]=n(i).attr("transform").split("translate(")[1].split(")")[0].split(",").map(Number);const r=i.cloneNode(true);e.dom[`${t}LabelG`].node().prepend(r);e.dragged={orig:i,clone:n(r).style("cursor","move").style("pointer-events","none"),node:r,x:o,y:l,clientX:s.clientX,clientY:s.clientY};e.dragged.clone.selectAll("text").style("fill","red")}if(!e.dragged)return;const o=e.dragged;const l=!a.transpose?o.x:o.x-o.clientX+s.clientX;const r=!a.transpose?o.y-o.clientY+s.clientY:o.y;o.clone.attr("transform",`translate(${l},${r})`)};e[`${t}LabelMouseup`]=s=>{delete e.clicked;e.config.settings.matrix;if(e.dragged){e.dragged.clone.remove();if(e.hovered){const s=e.dragged;const n=s.orig.__data__;const i=e.hovered;if(t=="termGrp"){const t=e.config.termgroups.splice(n.grpIndex,1)[0];e.config.termgroups.splice(i.grpIndex,0,t)}else{for(const t of e.config.termgroups){t.lst.sort(((t,s)=>{const n=e.termOrder.find((e=>e.tw.$id===t.$id));const i=e.termOrder.find((e=>e.tw.$id===s.$id));if(!n&&!i)return 0;if(!n)return 1;if(!i)return-1;return n.totalIndex-i.totalIndex}))}e.config.termgroups[n.grpIndex].lst.splice(n.index,1)[0];e.config.termgroups[i.grpIndex].lst.splice(i.index,0,n.tw);if(!e.config.termgroups[n.grpIndex].lst.length)e.config.termgroups.splice(n.grpIndex,1)}const a=t=="term"?"sortTermsBy":"sortTermGroupsBy";e.app.dispatch({type:"plot_edit",id:e.id,config:{termgroups:e.config.termgroups,settings:{matrix:{[a]:"asListed"}}}})}e.dom[`${t}LabelG`].selectAll("text").style("fill","").style("-webkit-user-select","").style("-moz-user-select","").style("-ms-user-select","").style("user-select","");delete e.dragged}else if(t=="term"){e.showTermMenu(s)}else{e.showTermGroupMenu(s)}}}function ye(e){e.resetInteractions=function(){if(e.zoomArea){e.zoomArea.remove();delete e.zoomArea;n("body").on("mouseup.matrixZoom",null)}delete e.clickedSeriesCell};e.seriesesGMousedown=function(t){t.stopPropagation();e.resetInteractions();const s=e.getCellByPos(t);if(!s)return;e.clickedSeriesCell={event:t,startCell:s};if(e.settings.matrix.mouseMode=="pan"){e.seriesesGdragInit()}else{e.zoomPointer=P(t,e.dom.seriesesG.node());e.dom.seriesesG.on("mousemove",e.seriesesGoutlineZoom).on("mouseup",e.seriesesGtriggerZoom).on("contextmenu",e.resetInteractions)}e.dom.mainG.selectAll("text").style("-webkit-user-select","none").style("-moz-user-select","none").style("-ms-user-select","none").style("user-select","none")};e.getCellByPos=function(t){const s=e.settings.matrix;const n=e.dimensions;if(t.target.tagName=="rect"){if(t.target.__data__?.sample)return t.target.__data__;if(t.target.__data__?.xg){const s=t.clientX-t.target.getBoundingClientRect().x+n.seriesXoffset;const i=Math.floor(s/n.dx);return e.sampleOrder[i]}}if(t.target.tagName=="image"&&s.useCanvas){return e.getImgCell(t)}};e.seriesesGdragInit=function(){n("body").on("mousemove.sjppMatrixDrag",e.seriesesGdrag).on("mouseup.sjppMatrixDrag",e.seriesesGcancelDrag);e.settings.matrix;const t=e.dimensions;const s=e.clickedSeriesCell;s.dxPad=20;s.dxMax=-t.seriesXoffset;s.dxMaxPad=s.dxMax+s.dxPad;s.dxMin=t.mainw-t.zoomedMainW-t.seriesXoffset;s.dxMinPad=s.dxMin-s.dxPad;const i=.5*t.mainw;s.center={max:i+(t.zoomedMainW-t.mainw),min:i}};e.seriesesGdrag=function(t){const s=e.settings.matrix;const n=e.clickedSeriesCell;const i=e.dimensions;const a=t.clientX-n.event.clientX;if(Math.abs(a)<1)return;if(a<n.dxMinPad||a>n.dxMaxPad)return;e.clickedSeriesCell.dx=a;e.translateElems(a,i,s,n)};e.translateElems=function(t,s,n,i){e.dom.seriesesG.attr("transform",`translate(${s.xOffset+s.seriesXoffset+t},${s.yOffset})`);e.layout.top.attr.adjustBoxTransform(t);e.layout.btm.attr.adjustBoxTransform(t);const a=n.zoomCenterPct*s.mainw-s.seriesXoffset-t;e.controlsRenderer.svgScrollApi.update({zoomCenter:a})};e.seriesesGcancelDrag=function(t){n("body").on("mousemove.sjppMatrixDrag",null).on("mouseup.sjppMatrixDrag",null);const s=e.settings.matrix;const i=e.dimensions;const a=e.clickedSeriesCell;const o=t.clientX-a.event.clientX;const l=Math.min(a.dxMax,Math.max(o,a.dxMin));if(Math.abs(o)<1||Math.abs(l)<1){e.translateElems(0,i,s,a);return}e.translateElems(l,i,s,a);const r=e.getVisibleCenterCell(l);e.app.dispatch({type:"plot_edit",id:e.id,config:{settings:{matrix:{zoomCenterPct:.5,zoomIndex:r.totalIndex,zoomGrpIndex:r.grpIndex}}}})};e.seriesesGoutlineZoom=function(t){if(!e.clickedSeriesCell)return;e.config.settings.matrix;const s=e.clickedSeriesCell.event;if(e.clickedSeriesCell&&!e.zoomArea){e.zoomArea=e.dom.seriesesG.append("rect").attr("fill","rgba(50, 50, 50, 0.3)");n("body").on("mouseup.matrixZoom",e.mouseup);e.dom.mainG.selectAll("text").style("-webkit-user-select","none").style("-moz-user-select","none").style("-ms-user-select","none").style("user-select","none")}const i=t.clientX-s.clientX;t.clientY-s.clientY;const a=i>0?e.zoomPointer[0]:e.zoomPointer[0]+i+3;e.zoomWidth=Math.abs(i);e.zoomArea.attr("transform",`translate(${a},0)`).attr("width",Math.max(0,e.zoomWidth-2)).attr("height",e.dimensions.mainh);if(!e.clickedSeriesCell.endCell)e.clickedSeriesCell.endCell=e.getCellByPos(t)};e.seriesesGtriggerZoom=function(s){s.stopPropagation();e.dom.seriesesG.on("mousemove",null).on("mouseup",null);n("body").on("mouseup.matrixZoom",null);e.dom.mainG.selectAll("text").style("-webkit-user-select","").style("-moz-user-select","").style("-ms-user-select","").style("user-select","");const a=e.clickedSeriesCell;const o=e.getCellByPos(s);if(!a||!a.startCell){e.dom.mainG.on("mouseout",null);delete e.clickedSeriesCell;return}else if(!a.endCell||o===a.startCell){e.dom.mainG.on("mouseout",null);e.dom.tip.hide();const t=s.target.tagName=="rect"?s.target.__data__:a.startCell;if(t){if(e.opts.cellClick){e.opts.cellClick(structuredClone({sampleData:t.row,term:t.term,value:t.value,s:t.s,t:t.t,siblingCells:t.siblingCells.filter((e=>e!==t)).map((e=>({term:e.term,value:e.value,s:e.s,t:e.t})))}))}else{e.mouseclick(s,t)}}delete e.clickedSeriesCell;delete e.zoomArea;return}const l=e.settings.matrix;const r=l.controlLabels;a.endCell=o;const d=e.opts.allow2selectSamples;const c=a.startCell.totalIndex<a.endCell.totalIndex?a.startCell:a.endCell;const p=a.startCell.totalIndex<a.endCell.totalIndex?a.endCell:a.startCell;const m=new Set;for(let t=c.totalIndex;t<=p.totalIndex;t++){m.add(e.sampleOrder[t].row)}const u=[...m];const g=[{label:"Zoom in",callback:e.triggerZoomArea},{label:`List ${u.length} ${r.samples}`,callback:()=>{e.resetInteractions();e.dom.tip.hide();t(e,u,s.clientX,s.clientY)}}];if(d){g.push({label:d.buttonText||`Select ${r.Samples}`,callback:async()=>{d.callback({samples:u.map((e=>({"cases.case_id":e.sample}))),source:`Selected ${r.samples} from OncoMatrix`});e.zoomArea.remove();delete e.zoomArea;delete e.clickedSeriesCell}})}else{if(e.state.nav&&e.state.nav.header_mode!=="hidden"){for(const e of u){if(!e.sampleId)e.sampleId=e.sample}g.push({label:"Add to a group",callback:async()=>{e.resetInteractions();const t={name:"Group",items:u};i(t)}})}}e.dom.dendroClickMenu.clear();e.dom.clickMenu.clear();e.mouseout();e.dom.tip.hide();e.dom.brushMenu.clear();e.dom.brushMenu.d.selectAll("div").data(g).enter().append("div").attr("class","sja_menuoption").style("border-radius","0px").html((e=>e.label)).on("click",(t=>{e.dom.brushMenu.d.selectAll("*").remove();t.target.__data__.callback()}));e.dom.brushMenu.show(s.clientX,s.clientY)};const t=function(e,t,n,i){delete e.clickedSeriesCell;const a=e.state.termdbConfig.urlTemplates;const o=a?.sample?t.map((e=>[{value:e._ref_.label,url:`${a.sample.base}${e.sample}`}])):t.map((e=>[{value:e._ref_.label}]));const l=[{label:e.settings.matrix.controlLabels.Samples}];if(!e.dom.sampleListMenu)e.dom.sampleListMenu=new s({padding:"5px"});else e.dom.sampleListMenu.clear();const r=e.dom.sampleListMenu.d.append("div");z({rows:o,columns:l,div:r,showLines:true,maxWidth:l.length*"30"+"vw",maxHeight:"35vh",resize:true});e.dom.sampleListMenu.show(n,i)};const i=async function(t){t.plotId=e.id;await e.app.vocabApi.addGroup(t);e.dom.tip.hide()};e.triggerZoomArea=function(){if(e.zoomArea){e.zoomArea.remove();delete e.zoomArea}const t=e.clickedSeriesCell;delete e.clickedSeriesCell;const s=e.settings.matrix;const n=e.dimensions;const i=t.startCell.totalIndex<t.endCell.totalIndex?t.startCell:t.endCell;const a=Math.floor(i.totalIndex+Math.abs(t.endCell.totalIndex-t.startCell.totalIndex)/2);const o=e.sampleOrder[a]||e.getImgCell(event);const l=e.computedSettings.colw||e.settings.matrix.colw;const r=s.colwMax/l;const d=s.colwMin/l;const c=s.zoomLevel*n.mainw/e.zoomWidth;const p=Math.max(d,Math.min(c,r));const m=o.totalIndex*n.dx+(o.grpIndex-1)*s.colgspace+n.seriesXoffset;e.app.dispatch({type:"plot_edit",id:e.id,config:{settings:{matrix:{zoomLevel:p,zoomCenterPct:p<1&&n.mainw>=n.zoomedMainW?.5:m/n.mainw,zoomIndex:a,zoomGrpIndex:o.grpIndex}}}});e.resetInteractions()}}function be(e){e.legendLabelMouseover=t=>{const s=t.target.__data__;if(!s||s.dt==p||s.dt==m){return}if(!s.isLegendItem&&!s.dt){return}const i=e.config.legendGrpFilter.lst.find((e=>e.dt?.includes(s.dt)&&(!e.origin||e.origin==s.origin)))&&true;if(s.isLegendItem&&i){return}const a=e.termOrder.find((e=>e.tw.$id==s.$id));if(a?.tw?.q?.type=="predefined-groupset"||a?.tw?.q?.type=="custom-groupset"){return}if(t.target.nodeName=="rect")n(t.target).style("stroke","blue").style("cursor","pointer");else n(t.target).style("fill","blue").style("cursor","pointer")};e.legendLabelMouseout=e=>{if(e.target.nodeName=="rect")n(e.target).style("stroke","#aaa");else n(e.target).style("fill","")};e.legendLabelMouseup=t=>{const s=t.target.__data__;if(!s||s.dt==p||s.dt==m){return}const n=e.state.termdbConfig.assayAvailability?.byDt?.[parseInt(s.dt)]?.byOrigin;const i=e.dom.legendMenu.clear();if(!s.isLegendItem){if(!s.dt){return}const a=e.config.legendGrpFilter.lst.findIndex((e=>e.dt.slice().sort().toString()===s.dt.slice().sort().toString()&&(!n||e.origin==s.origin)));const o=e.config.legendValueFilter.lst.findIndex((e=>e.legendGrpName==s.name&&e.tvs.values.find((e=>s.dt.includes(e.dt)&&(!n||e.origin==s.origin)))));const l=i.d.append("div");if(a==-1){if(s.dt.includes(u)){l.append("div").attr("class","sja_menuoption sja_sharp_border").text(`Show only truncating mutations`).on("click",(()=>{ke(i,s,e)}));l.append("div").attr("class","sja_menuoption sja_sharp_border").text(`Show only protein-changing mutations`).on("click",(()=>{Se(i,s,e)}))}const t=e.legendData.filter((e=>e.dt&&!e.crossedOut&&(e.name==s.name||e.items.find((e=>!e.greyedOut&&!e.crossedOut))))).length<=1;l.append("div").attr("class",t?"sja_menuoption_not_interactive sja_sharp_border":"sja_menuoption sja_sharp_border").text(`Do not show ${s.name}`).style("opacity",t?"0.5":"1").on("click",(()=>{if(!t)$e(i,s,e)}))}if(a!==-1||o!==-1){l.append("div").attr("class","sja_menuoption sja_sharp_border").text(`Show all ${s.name}`).on("click",(()=>{Te(i,s,e)}))}i.showunder(t.target);return}const a=e.config.legendGrpFilter.lst.find((e=>e.dt?.includes(s.dt)&&(!e.origin||e.origin==s.origin)))&&true;if(s.isLegendItem&&a){return}const l=e.terms.find((e=>e.tw.$id==s.$id));if(l?.tw?.q?.type=="predefined-groupset"||l?.tw?.q?.type=="custom-groupset"){return}let r;if(s.dt){r=e.config.legendValueFilter.lst.findIndex((e=>e.legendGrpName==s.termid&&e.tvs.values.find((e=>e.dt==s.dt&&(!n||e.origin==s.origin)&&e.mclasslst[0]==s.key))))}else{const t=e.termOrder.find((e=>e.tw.$id==s.$id))?.tw?.term;if(!t){return}if(t.type=="categorical"||t.type=="survival"){r=e.config.legendValueFilter.lst.findIndex((e=>e.legendGrpName==s.termid&&e.tvs.values.find((e=>e.key==s.key))))}else if(j(t)){r=e.config.legendValueFilter.lst.findIndex((e=>e.legendGrpName==s.termid&&e.tvs.ranges.find((e=>e.name==s.key))))}}const d=e.settings.matrix.controlLabels;const c=i.d.append("div");if(!s.dt||e.type!=="hierCluster"||r!==-1){c.append("div").attr("class","sja_menuoption sja_sharp_border").text(s.dt?r==-1?`Hide ${d.samples} with ${o[s.key].label}`:`Show ${d.samples} with ${o[s.key].label}`:r==-1?"Hide":"Show").on("click",(()=>{i.hide();if(r==-1){if(s.dt){const t={legendGrpName:s.termid,type:"tvs",tvs:{isnot:true,legendFilterType:"geneVariant_hard",term:{type:"geneVariant"},values:[{dt:s.dt,origin:s.origin,mclasslst:[s.key]}]}};e.config.legendValueFilter.lst.push(t)}else{const t=e.termOrder.find((e=>e.tw.$id==s.$id)).tw.term;if(t.type=="categorical"||t.type=="survival"){t.$id=s.$id;const n=e.config.legendValueFilter.lst.findIndex((e=>e.legendGrpName==s.termid));if(n==-1){const n={legendGrpName:s.termid,type:"tvs",tvs:{isnot:true,term:t,values:[{key:s.key}]}};e.config.legendValueFilter.lst.push(n)}else{e.config.legendValueFilter.lst[n].tvs.values.push({key:s.key})}}else if(j(t)){t.$id=s.$id;const n={legendGrpName:s.termid,type:"tvs",tvs:{isnot:true,term:t,ranges:[e.data.refs.byTermId[s.$id].bins.find((e=>s.key==e.name))]}};e.config.legendValueFilter.lst.push(n)}}}else{if(s.dt)e.config.legendValueFilter.lst.splice(r,1);else{const t=e.termOrder.find((e=>e.tw.$id==s.$id)).tw.term;if(t.type=="categorical"||t.type=="survival"){const t=e.config.legendValueFilter.lst.findIndex((e=>e.legendGrpName==s.termid));const n=e.config.legendValueFilter.lst[t].tvs.values.findIndex((e=>e.key==s.key));e.config.legendValueFilter.lst[t].tvs.values.splice(n,1)}else e.config.legendValueFilter.lst.splice(r,1)}}if(e.state.config.settings.matrix.addMutationCNVButtons&&e.chartType!=="hierCluster"){if(s.dt==u){e.config.settings.matrix.showMatrixMutation="bySelection";const t=e.settings.matrix.controlLabels;if(e.legendData.find((e=>e.name==t.Mutations))?.items?.length==e.config.legendValueFilter.lst.filter((e=>e.legendGrpName==t.Mutations))?.length){e.config.settings.matrix.allMatrixMutationHidden=true}else e.config.settings.matrix.allMatrixMutationHidden=false}if(s.dt==g){e.config.settings.matrix.showMatrixCNV="bySelection";if(e.legendData.find((e=>e.name=="CNV"))?.items?.length==e.config.legendValueFilter.lst.filter((e=>e.legendGrpName=="CNV"))?.length){e.config.settings.matrix.allMatrixCNVHidden=true;if(e.config.settings.matrix.cellEncoding=="oncoprint")e.config.settings.matrix.cellEncoding="single"}else{e.config.settings.matrix.allMatrixCNVHidden=false;if(e.config.settings.matrix.cellEncoding!=="")e.config.settings.matrix.cellEncoding="oncoprint"}}}e.app.dispatch({type:"plot_edit",id:e.id,config:e.config})}))}if(s.isLegendItem){if(s.dt&&r==-1){c.append("div").attr("class","sja_menuoption sja_sharp_border").text(`Do not show ${o[s.key]?.label}`).on("click",(()=>{i.hide();const t={legendGrpName:s.termid,type:"tvs",tvs:{isnot:true,legendFilterType:"geneVariant_soft",term:{type:"geneVariant"},values:[{dt:s.dt,origin:s.origin,mclasslst:[s.key]}]}};e.config.legendValueFilter.lst.push(t);if(e.state.config.settings.matrix.addMutationCNVButtons&&e.chartType!=="hierCluster"){if(s.dt==u){e.config.settings.matrix.showMatrixMutation="bySelection";const t=e.settings.matrix.controlLabels;if(e.legendData.find((e=>e.name==t.Mutations))?.items?.length==e.config.legendValueFilter.lst.filter((e=>e.legendGrpName==t.Mutations))?.length){e.config.settings.matrix.allMatrixMutationHidden=true}else e.config.settings.matrix.allMatrixMutationHidden=false}if(s.dt==g){e.config.settings.matrix.showMatrixCNV="bySelection";if(e.legendData.find((e=>e.name=="CNV"))?.items?.length==e.config.legendValueFilter.lst.filter((e=>e.legendGrpName=="CNV"))?.length){e.config.settings.matrix.allMatrixCNVHidden=true;if(e.config.settings.matrix.cellEncoding=="oncoprint")e.config.settings.matrix.cellEncoding="single"}else e.config.settings.matrix.allMatrixCNVHidden=false}}e.app.dispatch({type:"plot_edit",id:e.id,config:e.config})}))}if(!s.dt){c.append("div").attr("class","sja_menuoption sja_sharp_border").text("Show only").on("click",(()=>{i.hide();const t=e.termOrder.find((e=>e.tw.$id==s.$id))?.tw?.term;const n=e.legendData.find((e=>e.name==s.termid))||e.legendData.find((e=>e.$id==s.$id));e.config.legendValueFilter.lst=e.config.legendValueFilter.lst.filter((e=>e.legendGrpName!==s.termid));if(t.type=="categorical"||t.type=="survival"){t.$id=s.$id;for(const i of n.items){if(i.key==s.key)continue;const n=e.config.legendValueFilter.lst.findIndex((e=>e.legendGrpName==s.termid));if(n==-1){const n={legendGrpName:s.termid,type:"tvs",tvs:{isnot:true,term:t,values:[{key:i.key}]}};e.config.legendValueFilter.lst.push(n)}else{e.config.legendValueFilter.lst[n].tvs.values.push({key:i.key})}}}else if(j(t)){t.$id=s.$id;for(const i of n.items){if(i.key==s.key)continue;const n={legendGrpName:s.termid,type:"tvs",tvs:{isnot:true,term:t,ranges:[e.data.refs.byTermId[s.$id].bins.find((e=>i.key==e.name))]}};if(!e.config.legendValueFilter.lst.length)e.config.legendValueFilter.lst=[n];else e.config.legendValueFilter.lst.push(n)}}e.app.dispatch({type:"plot_edit",id:e.id,config:e.config})}))}if(!s.dt){c.append("div").attr("class","sja_menuoption sja_sharp_border").text("Show all").on("click",(()=>{i.hide();e.config.legendValueFilter.lst=e.config.legendValueFilter.lst.filter((e=>e.legendGrpName!==s.termid));e.app.dispatch({type:"plot_edit",id:e.id,config:e.config})}))}i.showunder(t.target)}}}function xe(e){e.mutationSelectionActions={onlyTruncating:ke,onlyPC:Se,none:$e,all:Te,bySelection:Ge};e.mutationControlCallback=t=>{const s=e.dom.legendMenu.clear();const n=e.legendData.find((e=>e.dt?.includes(u)));e.mutationSelectionActions[t](s,n,e,"mutation")};e.CNVControlCallback=t=>{const s=e.dom.legendMenu.clear();const n=e.legendData.find((e=>e.dt?.includes(g)));e.mutationSelectionActions[t](s,n,e,"CNV")};e.geneStyleControlCallback=t=>{const s=e.legendData.find((e=>e.dt?.includes(g)));if(t=="")Ce(s,e);else if(t=="single")ve(s,e);else if(t=="oncoprint")we(s,e)}}function ve(e,t){if(t.state.config.settings.matrix.addMutationCNVButtons&&t.chartType!=="hierCluster"){if(e){const s=t.state.termdbConfig.assayAvailability?.byDt?.[parseInt(e.dt)]?.byOrigin;const n=t.config.legendGrpFilter.lst.findIndex((t=>t.dt.slice().sort().toString()===e.dt.slice().sort().toString()&&(!s||t.origin==e.origin)));if(n==-1){const n={dt:e.dt};if(s){n.origin=e.origin}t.config.legendValueFilter.lst=t.config.legendValueFilter.lst.filter((t=>t.legendGrpName!==e.name));t.config.legendGrpFilter.lst.push(n)}}t.config.settings.matrix.cellEncoding="single"}t.app.dispatch({type:"plot_edit",id:t.id,config:t.config})}function we(e,t){if(t.state.config.settings.matrix.addMutationCNVButtons&&t.chartType!=="hierCluster"){if(e){const s=t.state.termdbConfig.assayAvailability?.byDt?.[parseInt(e.dt)]?.byOrigin;const n=t.config.legendGrpFilter.lst.findIndex((t=>t.dt.slice().sort().toString()===e.dt.slice().sort().toString()&&(!s||t.origin==e.origin)));if(n!==-1)t.config.legendGrpFilter.lst.splice(n,1);t.config.legendValueFilter.lst=t.config.legendValueFilter.lst.filter((t=>t.legendGrpName!==e.name))}t.config.settings.matrix.showMatrixCNV="all";t.config.settings.matrix.allMatrixCNVHidden=false}t.config.settings.matrix.cellEncoding="oncoprint";t.app.dispatch({type:"plot_edit",id:t.id,config:t.config})}function Ce(e,t){if(t.state.config.settings.matrix.addMutationCNVButtons&&t.chartType!=="hierCluster"){if(e){const s=t.state.termdbConfig.assayAvailability?.byDt?.[parseInt(e.dt)]?.byOrigin;const n=t.config.legendGrpFilter.lst.findIndex((t=>t.dt.slice().sort().toString()===e.dt.slice().sort().toString()&&(!s||t.origin==e.origin)));if(n!==-1)t.config.legendGrpFilter.lst.splice(n,1);t.config.legendValueFilter.lst=t.config.legendValueFilter.lst.filter((t=>t.legendGrpName!==e.name))}}t.config.settings.matrix.cellEncoding="";t.app.dispatch({type:"plot_edit",id:t.id,config:t.config})}function ke(e,t,s){e.hide();if(t){s.config.legendValueFilter.lst=s.config.legendValueFilter.lst.filter((e=>e.legendGrpName!==t.name));s.config.legendGrpFilter.lst=s.config.legendGrpFilter.lst.filter((e=>!(e.dt.includes(u)&&e.origin==t.origin)));const e=s.config.settings.matrix.truncatingMutations;const n=s.config.settings.matrix.controlLabels;for(const[i,a]of Object.entries(o)){if(e.includes(i)||a.dt!=u)continue;const o={legendGrpName:t.origin?`${t.origin[0].toUpperCase()+t.origin.slice(1)} ${n.Mutations}`:n.Mutations,type:"tvs",tvs:{isnot:true,legendFilterType:"geneVariant_soft",term:{type:"geneVariant"},values:[{dt:u,origin:t.origin,mclasslst:[i]}]}};s.config.legendValueFilter.lst.push(o)}}s.app.dispatch({type:"plot_edit",id:s.id,config:s.config})}function Se(e,t,s){e.hide();if(t){s.config.legendValueFilter.lst=s.config.legendValueFilter.lst.filter((e=>e.legendGrpName!==t.name));s.config.legendGrpFilter.lst=s.config.legendGrpFilter.lst.filter((e=>!(e.dt.includes(u)&&e.origin==t.origin)));const e=s.config.settings.matrix.proteinChangingMutations;const n=s.config.settings.matrix.controlLabels;for(const[i,a]of Object.entries(o)){if(e.includes(i)||a.dt!=u)continue;const o={legendGrpName:t.origin?`${t.origin[0].toUpperCase()+t.origin.slice(1)} ${n.Mutations}`:n.Mutations,type:"tvs",tvs:{isnot:true,legendFilterType:"geneVariant_soft",term:{type:"geneVariant"},values:[{dt:u,origin:t.origin,mclasslst:[i]}]}};s.config.legendValueFilter.lst.push(o)}}s.app.dispatch({type:"plot_edit",id:s.id,config:s.config})}function $e(e,t,s,n){e.hide();if(t){const e=s.state.termdbConfig.assayAvailability?.byDt?.[parseInt(t.dt)]?.byOrigin;const n=s.config.legendGrpFilter.lst.findIndex((s=>s.dt.slice().sort().toString()===t.dt.slice().sort().toString()&&(!e||s.origin==t.origin)));if(n==-1){const n={dt:t.dt};if(e){n.origin=t.origin}s.config.legendValueFilter.lst=s.config.legendValueFilter.lst.filter((e=>e.legendGrpName!==t.name));s.config.legendGrpFilter.lst.push(n)}}if(s.state.config.settings.matrix.addMutationCNVButtons&&s.chartType!=="hierCluster"&&(n=="CNV"||t?.dt?.includes(g))&&s.config.settings.matrix.cellEncoding=="oncoprint"){s.config.settings.matrix.cellEncoding="single"}s.app.dispatch({type:"plot_edit",id:s.id,config:s.config})}function Me(e,t,s){if(t){const s=e.state.termdbConfig.assayAvailability?.byDt?.[parseInt(t.dt)]?.byOrigin;const n=e.config.legendGrpFilter.lst.findIndex((e=>e.dt.slice().sort().toString()===t.dt.slice().sort().toString()&&(!s||e.origin==t.origin)));const i=e.config.legendValueFilter.lst.findIndex((e=>e.legendGrpName==t.name&&e.tvs.values.find((e=>t.dt.includes(e.dt)&&(!s||e.origin==t.origin)))));if(n!==-1)e.config.legendGrpFilter.lst.splice(n,1);if(i!==-1)e.config.legendValueFilter.lst=e.config.legendValueFilter.lst.filter((e=>e.legendGrpName!=t.name))}const n=e.config.settings.matrix;if(n.addMutationCNVButtons&&e.chartType!=="hierCluster"&&(s=="CNV"||t?.dt?.includes(g))&&n.cellEncoding!==""){n.cellEncoding="oncoprint"}return e.config}function Te(e,t,s,n){e.hide();s.app.dispatch({type:"plot_edit",id:s.id,config:Me(s,t,n)})}function Ge(e,t,s,i){e.hide();const a=s.config.settings.matrix;if(!t){if(a.addMutationCNVButtons&&s.chartType!=="hierCluster"&&i=="mutation"){a.showMatrixMutation="bySelection"}else if(a.addMutationCNVButtons&&s.chartType!=="hierCluster"&&i=="CNV"){a.showMatrixCNV="bySelection"}s.app.dispatch({type:"plot_edit",id:s.id,config:s.config});return}s.app.tip.d.selectAll(".byLFClassDiv").remove();const l=s.app.tip.d.append("div").attr("class","byLFClassDiv");const r=Math.random().toString();const d=l.selectAll(":scope>div").data(i=="mutation"?a.mutationClasses:a.CNVClasses).enter().append("label").style("margin","5px").style("margin-left","30px").style("display","block").each((function(e){const t=s.config.legendValueFilter.lst.find((t=>t.tvs.legendFilterType=="geneVariant_hard"&&t.tvs.values[0].dt==o[e].dt&&t.tvs.values[0].mclasslst.includes(e)));const l=i=="mutation"?a.hiddenMutations.includes(e):a.hiddenCNVs.includes(e);const p=n(this).attr("class","sjpp_row_wrapper");p.append("input").attr("type","checkbox").attr("name",r).property("disabled",t?true:false).property("checked",t||l?false:true).style("vertical-align","top").style("margin-right","3px").on("change",(function(){const e=d.selectAll(`input[type='checkbox'][name='${r}']:checked`).empty();c.property("disabled",e)}));p.append("span").style("margin-left","3px").html(o[e].label).style("text-decoration",t?"line-through":"")}));const c=l.append("button").property("disabled",true).style("margin-top","3px").text("Apply").on("click",(()=>{const l=d.selectAll(`input[type='checkbox'][name='${r}']:checked`);const c=l.nodes().map((e=>n(e).datum()));e.hide();s.config.legendValueFilter.lst=s.config.legendValueFilter.lst.filter((e=>e.legendGrpName!==t.name||e.tvs.legendFilterType=="geneVariant_hard"));s.config.legendGrpFilter.lst=s.config.legendGrpFilter.lst.filter((e=>!(e.dt.includes(u)&&t.dt.includes(u)||e.dt.includes(g)&&t.dt.includes(g))));for(const e of i=="mutation"?a.mutationClasses:a.CNVClasses){if(c.includes(e))continue;const n={legendGrpName:t.name,type:"tvs",tvs:{isnot:true,legendFilterType:"geneVariant_soft",term:{type:"geneVariant"},values:[{dt:o[e].dt,origin:t.origin,mclasslst:[e]}]}};s.config.legendValueFilter.lst.push(n)}if(s.state.config.settings.matrix.addMutationCNVButtons&&s.chartType!=="hierCluster"&&(i=="CNV"||t?.dt?.includes(g))){if(c.length==0&&s.config.settings.matrix.cellEncoding=="oncoprint"){s.config.settings.matrix.cellEncoding="single"}else if(c.length>0&&s.config.settings.matrix.cellEncoding=="single"){s.config.settings.matrix.cellEncoding="oncoprint"}}s.app.dispatch({type:"plot_edit",id:s.id,config:s.config})}))}function Ie(e){e.render=function(){const t=e.settings.matrix;const s=e.layout;const n=e.dimensions;const i=e.dom.svg.attr("width")?t.duration:0;e.dom.clipRect.attr("x",n.xOffset-1).attr("y",0).attr("width",n.mainw+3).attr("height",n.mainh+500);e.renderSerieses(t,s,n,i);e.renderLabels(t,s,n,i);e.renderDivideByLabel(t,s,n,i);e.dom.colBeam.attr("width",n.dx).attr("height",n.mainh).style("stroke",t.beamStroke);e.dom.rowBeam.attr("width",n.zoomedMainW).attr("height",t.rowh).style("stroke",t.beamStroke)};e.renderSerieses=function(t,s,n,i){if(e.prevUseCanvas!=t.useCanvas){e.dom.seriesesG.selectAll("g").remove()}if(t.useCanvas){const s=e.dom.seriesesG.selectAll("g");const a=e.dom.seriesesG.append("g").datum(this.serieses);e.renderCanvas(this.serieses,a,n,t,s,i)}else{e.dom.seriesesG.attr("transform",`translate(${n.xOffset+n.seriesXoffset},${n.yOffset})`);const t=e.dom.seriesesG.selectAll(".sjpp-mass-series-g").data(this.serieses,(e=>e.tw.$id));t.exit().remove();t.each(e.renderSeries);t.enter().append("g").attr("class","sjpp-mass-series-g").style("opacity",.001).each(e.renderSeries);e.mouseout()}e.prevUseCanvas=t.useCanvas};e.renderSeries=async function(t){const s=e.settings.matrix;e.dimensions;const i=n(this);i.attr("transform")?s.duration:0;i.attr("transform",`translate(${t.x},${t.y})`).style("opacity",1);const a=t.cells[t.cells.length-1];t.y+a?.y+s.rowh;const o=i.selectAll("rect").data(t.cells,(e=>e.sample+";;"+e.tw.$id+";;"+e.valueIndex));o.exit().remove();o.each(e.renderCell);o.enter().append("rect").each(e.renderCell)};e.renderCanvas=async function(t,s,n,i,a,o){const l=window.devicePixelRatio<=1?1:window.devicePixelRatio;s.selectAll("*").remove();const r=n.imgW;const d=e.dimensions.mainh;const c=window.OffscreenCanvas?new OffscreenCanvas(r*l,d*l):e.dom.holder.append("canvas").attr("width",l*r).attr("height",l*d).style("opacity",0).node();const p=c.getContext("2d");p.imageSmoothingEnabled=false;p.imageSmoothingQuality="high";p.scale(l,l);for(const s of t){for(const t of s.cells){e.renderCellWithCanvas(p,t,s,i,n,s.y)}}if(window.OffscreenCanvas){const t=new FileReader;t.addEventListener("load",(()=>{a?.remove();e.dom.seriesesG.attr("transform",`translate(${n.xOffset+n.seriesXoffset},${n.yOffset})`);s.selectAll("image").remove();s.append("image").attr("xlink:href",t.result).attr("x",n.xMin).attr("width",r).attr("height",d)}),false);const i=await c.convertToBlob({quality:1});t.readAsDataURL(i)}else{a?.remove();e.dom.seriesesG.attr("transform",`translate(${n.xOffset+n.seriesXoffset},${n.yOffset})`);const t=c.toDataURL();s.append("image").attr("width",r).attr("height",d).attr("xlink:href",t);if(!window.OffscreenCanvas)c.remove()}e.mouseout()};e.renderCellWithCanvas=function(t,s,n,i,a,o){if(!s.fill)s.fill=s.$id in e.colorScaleByTermId?e.colorScaleByTermId[s.$id](s.key):Ve(s);const l=s.x?s.x-a.xMin:0;const r=o?o+s.y:s.y||0;const d=i.useMinPixelWidth?Math.max(s.width||a.colw,a.pxw):s.width||a.colw;const c="height"in s?s.height:i.rowh;t.fillStyle=s.fill;t.fillRect(l,r,d,c)};e.renderCell=function(t){if(!t.fill)t.fill=t.$id in e.colorScaleByTermId?e.colorScaleByTermId[t.$id](t.key):Ve(t);const s=e.settings.matrix;n(this).attr("x",t.x||0).attr("y",t.y||0).attr("width",t.width||e.dimensions.colw).attr("height","height"in t?Math.max(0,t.height):s.rowh).attr("shape-rendering","crispEdges").attr("stroke-width",0).attr("fill",t.fill)};e.renderLabels=function(t,s,i,a){for(const o of["top","btm","left","right"]){const l=s[o];l.box.style("display",l.display||"").attr("transform",l.attr.boxTransform);const r=l.box.selectAll(".sjpp-matrix-label").data(l.data,l.key);r.exit().remove();r.each(d);r.enter().append("g").attr("class","sjpp-matrix-label").each(d);function d(s){const i=n(this);i.attr("transform",l.attr.labelGTransform);if(!i.select(":scope>text").size())i.append("text");const a=!l.isGroup&&s.grp?.type!=="hierCluster"&&s.tw?.q?.mode=="continuous";const o=l.label(s);const r=i.select(":scope>text").attr("fill","#000");r.attr("display",s.grp?.type==="hierCluster"&&t.clusterRowh<6?"none":l.attr.fontSize<6||o==="configure"?"none":"").attr("font-size",s.grp?.type==="hierCluster"?t.clusterRowh:l.attr.fontSize).attr("text-anchor",l.attr.labelAnchor).attr("transform",l.attr.labelTransform).attr("cursor","pointer").attr(l.attr.textpos.coord,l.attr.textpos.factor*(a?30:0));if(!Array.isArray(o)){r.text(o);r.attr("y",s.grp?.type!=="hierCluster"&&s.tw?.q?.mode=="continuous"?10:s.grp?.type==="hierCluster"?.3*t.clusterRowh:0)}else{r.text("");const e=r.selectAll("tspan").data(o);e.enter().append("tspan").attr("class",c).attr("dx",p).attr("font-size",m).text(u)}r.on("mouseover",o==="configure"?()=>r.attr("opacity",.5):null).on("mouseout",o==="configure"?()=>r.attr("opacity",0):null);const d=i.select(".sjpp-matrix-cell-axis").size()&&true;if(a&&o){if(!d){i.append("g").attr("class","sjpp-matrix-cell-axis").attr("shape-rendering","crispEdges")}const n=i.select(".sjpp-matrix-cell-axis");n.selectAll("*").remove();[s.counts.maxval,s.counts.minval];if(t.transpose);e.dimensions;const a=!t.transpose?0:s.tw.settings.gap-1-s.labelOffset;const o=!t.transpose?s.tw.settings.gap-1-s.labelOffset:0;n.attr("shape-rendering","crispEdges").attr("transform",`translate(${a},${o})`).call(l.attr.axisFxn(s.scales.full.domain(s.scales.tickValues)).tickValues(s.scales.tickValues))}else if(d){i.select(".sjpp-matrix-cell-axis").remove()}}function c(e){return e.cls}function p(e){return e.dx}function m(e){return e.fontSize||l.attr.fontSize}function u(e){return e.text}}};e.colLabelGTransform=(t,s)=>{const n=e.settings.matrix;const i=e.dimensions;t.labelOffset=.8*i.colw;const a=t.grpIndex*n.colgspace+t.totalIndex*i.dx+t.labelOffset+t.totalHtAdjustments;const o=0;return`translate(${a+i.seriesXoffset},${o})`};e.colGrpLabelGTransform=(t,s)=>{const n=e.settings.matrix;const i=e.dimensions;const a=(t.processedLst||t.grp.lst).length;const o=t.grpIndex*n.colgspace+t.prevGrpTotalIndex*i.dx+a*i.dx/2+n.grpLabelFontSize/2+t.totalHtAdjustments;return`translate(${o+i.seriesXoffset},0)`};e.rowLabelGTransform=(t,s)=>{const n=e.settings.matrix;const i=e.dimensions;const a=0;t.labelOffset=.7*(t.grp.type=="hierCluster"?n.clusterRowh:n.rowh);const o=t.grpIndex*n.rowgspace+t.totalIndex*i.dy+t.labelOffset+t.totalHtAdjustments;return`translate(${a},${o})`};e.rowGrpLabelGTransform=(t,s)=>{const n=e.settings.matrix;const i=e.dimensions;const a=(t.processedLst||t.grp.lst).length;const o=t.grpIndex*n.rowgspace+t.prevGrpTotalIndex*i.dy+a*i.dy/2+n.grpLabelFontSize/2+t.totalHtAdjustments;return`translate(0,${o})`};e.rowAxisGTransform=(t,s)=>{const n=e.settings.matrix;const i=e.dimensions;const a=0;const o=t.grpIndex*n.rowgspace+t.totalIndex*i.dy+.7*n.rowh+t.totalHtAdjustments;return`translate(${a},${o})`};e.renderDivideByLabel=async(t,s,n)=>{e.dom.mainG.selectAll(".sjpp-matrix-divide-by-label").remove();if(!e.config.divideBy)return;const i=e.config.divideBy?.term.name||"";const a=i.length<=t.rowlabelmaxchars?i:i.slice(0,t.rowlabelmaxchars)+"…";const o=!t.transpose?[s.left,s.right]:[s.top,s.bottom];const l=o.find((e=>!e.isGroup))?.box;const r=(t.collabelpos=="top"?n.mainh+t.collabelmaxchars:-t.collabelmaxchars)+8;const d=t.rowlabelpos=="left"?"end":"start";const c=t.controlLabels;const p=l.append("g").attr("class","sjpp-matrix-divide-by-label").attr("transform",`translate(0, ${r})`);p.append("text").attr("text-anchor",d).attr("font-style","italic").attr("y",-20).text(`${c.Samples} grouped by`);const m=l.datum({tw:e.config.divideBy}).append("g").attr("class","sjpp-matrix-divide-by-label").attr("transform",`translate(0, ${r})`);const u=m.append("text").attr("text-anchor",d).attr("font-weight",600).text(a).on("click",((e,t)=>{f.showMenu(e,u.node())}));m.append("title").text(`${c.Samples} are grouped by this gene or variable. Click to edit.`);const g=[];const h=j(e.config.divideBy.term)?"ranges":"values";if(e.config.legendValueFilter.lst?.find((t=>t.legendGrpName==e.config.divideBy.term.id||t.legendGrpName==e.config.divideBy.term.name))?.tvs[h]?.length){g.push({label:`Show filtered ${c.samples}`,callback:e.showDeletedSampleGroups})}const f=await B({menuOptions:"{edit,replace,remove}",customMenuOptions:g,vocabApi:e.app.vocabApi,vocab:e.state.vocab,holder:m,debug:e.opts.debug,usecase:{target:"matrix"},getBodyParams:()=>{const t=e.termOrder.filter((e=>e.tw.term.type==="geneVariant")).map((e=>e.tw.term.chr?`${e.tw.term.chr}:${e.tw.term.start}-${e.tw.term.stop}`:e.tw.term.gene||e.tw.term.name));return{currentGeneNames:t}},callback:async t=>{if(e.dom.loadingDiv&&e.dom.svg){e.dom.loadingDiv.selectAll("*").remove();e.dom.loadingDiv.html("").style("display","").style("position","relative").style("left","45%");e.dom.loadingDiv.html("Processing data ...");e.dom.svg.style("opacity",.1).style("pointer-events","none")}if(t&&!t.q)throw"data.q{} missing from pill callback";if(t?.term&&j(t.term)){t.q={...t.q,mode:"discrete"}}if(t)await A(t,e.app.vocabApi);await f.main(t?t:{term:null,q:null});l.datum({tw:t});e.app.dispatch({type:"plot_edit",id:e.id,config:{divideBy:t,legendValueFilter:e.mayRemoveTvsEntry(e.config.divideBy)}})}});const y={term:e.config.divideBy.term,q:e.config.divideBy.q};if(e.config.divideBy.$id)y.$id=e.config.divideBy.$id;f.main(y)};e.adjustSvgDimensions=async function(t){const s=e.settings.matrix;const n=e.settings.hierCluster||{};const i=n.yDendrogramHeight||0;const a=n.xDendrogramHeight||0;const o=e.dimensions;const l=e.dom.svg.attr("width")?s.duration:0;await Oe(t==s.transpose?l:s.duration);const r=e.layout;const d=r.top.box.node().getBBox();const c=r.btm.box.node().getBBox();const p=r.left.box.node().getBBox();const m=r.right.box.node().getBBox();const u=e.dom.legendG.node().getBBox();e.dom.seriesesG.node().getBBox();o.extraWidth=p.width+m.width+s.margin.left+s.margin.right+s.rowlabelgap*2;o.extraHeight=d.height+c.height+s.margin.top+s.margin.bottom+s.collabelgap*2;o.svgw=o.mainw+o.extraWidth+a;o.svgh=o.mainh+o.extraHeight+u.height+20+s.scrollHeight+i;e.dom.svg.attr("width",o.svgw).attr("height",o.svgh);let g=e.type=="hierCluster"?0:p.width;if(n.xDendrogramHeight){e.dom.termLabelG.selectAll(".sjpp-matrix-label").each((function(e){if(e.grp.type!=="hierCluster")return;const t=this.getBBox();if(t.width>g){g=t.width;e.label.length}}))}const h=-r.left.offset+a+g;const f=!n.xDendrogramHeight?0:Math.max(p.width-(n.xDendrogramHeight+g),0);const y=(r.top.display=="none"?0:d.height)-r.top.offset+i;e.dom.mainG.attr("transform",`translate(${h+f},${y})`);e.dom.clipRect.attr("y",-y).attr("height",o.mainh+500+y);const b=o.xOffset+(s.transpose?20:0);const x=o.yOffset+o.mainh+s.collabelgap+(r.btm.display=="none"?0:c.height)+20;e.dom.legendG.attr("transform",`translate(${b},${x})`);if(n.xDendrogramHeight){const t=g+f-r.left.offset+o.xOffset-o.dx/2;e.dom.hcClipRect.attr("x",t+a+o.dx/2).attr("y",0).attr("width",o.mainw+3).attr("height",o.mainh+n.yDendrogramHeight+500);e.topDendroX=t+o.seriesXoffset;e.dom.topDendrogram.attr("transform",`translate(${e.topDendroX}, 0)`);const i=r.top.display=="none"?0:d.height+s.collabelgap;e.dom.leftDendrogram.attr("transform",`translate(${t-g-10}, ${i})`)}}}function Ve(e){if(e.fill)return e.fill;const t=e.class||Array.isArray(e.values)&&e.values[0].class;return t?mclass[t].color:"#555"}function Oe(e){return new Promise((t=>setTimeout(t,e)))}class _e{constructor(e){this.parent=e.parent;e.svg;this.patternId=`sjpp-matrix-grid-pattern-${this.parent.id}`;this.patternIdSuffix=0;this.dom={holder:e.holder,clusterbg:e.holder.insert("g","g").attr("class","sjpp-matrix-clusterbg").on("mouseover",this.mouseout),outlines:e.holder.append("g").attr("class","sjpp-matrix-clusteroutlines")};Le(this)}main(e){this.currData=e;this.settings=e.settings;this.xGrps=e.xGrps;this.xGrpKey=!this.settings.transpose?"samplegrp":"termgrp";this.yGrps=e.yGrps;this.yGrpKey=!this.settings.transpose?"termgrp":"samplegrp";this.clusters=this.processData();this.render(this.clusters)}processData(){const e=this.settings;const t=this.currData.dimensions;const s=[];this.totalWidth=e.zoomLevel==1?-4:0;for(const n of this.xGrps){const i=t.dx;const a=n.prevGrpTotalIndex*i+e.colgspace*n.grpIndex+n.totalHtAdjustments;const o=i*(n.processedLst||n.grp.lst).length+n.grpTotals.htAdjustment-e.colspace;this.totalWidth+=o+2*Math.max(1,e.colspace);for(const i of this.yGrps){const l=i.prevGrpTotalIndex*t.dy+i.grpIndex*e.rowgspace+i.totalHtAdjustments;const r=t.dy*(i.processedLst||i.grp.lst).length+i.grpTotals.htAdjustment-e.rowspace;const d=1;const c=1;s.push({xg:n,yg:i,x:a-d,y:l-c,width:o+2*d,height:r+2*c})}}return s}}function Le(e){e.render=function(s){const n=e.settings;const o=e.currData.dimensions;const l=e.dom.outlines.attr("transform")?n.duration:0;e.translateElems(0,n,o,l);if(n.prevShowGrid!=n.showGrid){e.dom.outlines.selectAll("*").remove()}if(n.showGrid!="pattern"){t(s)}else{const t=e.dom.outlines.selectAll("g").data(s,(e=>e.xg.grp.name+";;"+e.yg.grp.name));t.exit().remove();t.each(a);t.enter().append("g").each(i)}n.prevShowGrid=n.showGrid;e.parent.delayedMouseoutHandler()};e.translateElems=function(t,s,n,i=0){const a=!i?e.dom.outlines:e.dom.outlines.transition().duration(i);a.attr("transform",`translate(${n.xOffset+n.seriesXoffset+t},${n.yOffset})`)};function t(t,n,i){const a=e.dom.outlines.selectAll("rect").data(t,(e=>e.xg.grp.name+";;"+e.yg.grp.name));a.exit().remove();a.each(s);a.enter().append("rect").each(s)}function s(t){const s=e.settings;n(this).transition().duration("x"in this?s.duration:0).attr("x",t.x).attr("y",t.y).attr("width",t.width).attr("height",t.height).attr("shape-rendering","crispEdges").attr("fill",!s.showGrid?s.cellbg:s.gridStroke).attr("stroke",s.outlineStroke).attr("stroke-width",1)}function i(t){const s=n(this);const i=s.append("pattern").attr("id",`${e.patternId}-${e.patternIdSuffix++}`).attr("patternUnits","userSpaceOnUse").attr("patternUnits","userSpaceOnUse");i.append("line");i.append("line");s.append("rect");s.append("rect");a.call(this,t)}function a(t){const s=e.settings;const i=e.parent.dimensions;const a=n(this);const r=o(a,s,i);const d=a.node().querySelectorAll("rect");l.call(d[0],t,Object.assign({},s,{fill:s.cellbg}));const c=s.showGrid?`url(#${r})`:"none";l.call(d[1],t,Object.assign({},s,{fill:c,stroke:s.gridStroke}))}function o(e,t,s,i){const a=e.select("pattern").attr("x",0).attr("y",0).attr("width",s.colw+t.colspace).attr("height",t.rowh+t.rowspace);const o=.5*t.rowspace;const l=t.rowh+o;const[r,d]=a.node().querySelectorAll("line");n(r).attr("x1",0).attr("y1",l).attr("x2",s.colw+t.colspace).attr("y2",l).attr("stroke",t.gridStroke).attr("stroke-width",t.rowspace);const c=.5*t.colspace;const p=s.colw+c;n(d).attr("x1",p).attr("y1",0).attr("x2",p).attr("y2",t.rowh).attr("stroke",t.gridStroke).attr("stroke-width",t.colspace);return a.attr("id")}function l(e,t){const s=n(this);s.transition().duration(s.attr("x")?t.duration:0).attr("x",e.x).attr("y",e.y).attr("width",e.width).attr("height",e.height).attr("shape-rendering","crispEdges").attr("fill",t.fill||"none").attr("stroke",t.stroke||"none")}}const Ne=`ABCDEFGHIJKLMNOPQRSTUVWXYZ`.split("");function Be(e){const{controls:t,holder:i}=e;const a=t.parent;const l=structuredClone(a.config.settings.matrix);const r=l.controlLabels;const d=new s({padding:"",parent_menu:a.app.tip?.d.node()});let c=[],p,m={};const u={dom:{tip:d},opts:e,highlightColor:"none",label:`Sort ${r.Samples}`,title:`Set how to sort ${r.samples}`,type:"custom",expanded:e.expanded||false,expandedSection:e.expandedSection||"",init(t={},s={}){d.clear().hide();if(a.config.settings.matrix!=l)h(l,a.config.settings.matrix);if(l!==t)h(l,t);u.settings=l;u.activeOption=structuredClone(l.sortOptions[l.sortSamplesBy]);p=[{label:`For each selected row, sort ${r.samples} by matching data`,notDraggable:true,tiebreakers:[],handler:N},...u.activeOption.sortPriority,{label:`Sort ${r.samples} by name, alphabetically`,notDraggable:true,tiebreakers:[]}];Object.assign(e,s);e.holder.selectAll("*").remove();const i=e.holder.append("div").style("text-align","right");i.append("button").html("Apply").on("click",_);i.append("button").html("Reset").on("click",((e,t)=>u.init()));const m=e.holder.append("table");const B=m.append("thead");B.append("th").html("Priority").style("text-align","left").style("max-width","0px");B.append("th").html("Description");B.append("th").html("Action");let A=0,j=0;for(const e of p){const t=e.tiebreakers?.[0]?.order||e.handler;const s=m.append("thead").datum(e).property("draggable",!e.notDraggable).attr("droppable",true).on("dragstart",f).on("dragover",y).on("dragleave",b).on("drop",x);c.push(n(s));const i=s.append("tr").style("background-color","#eee").on("mouseover",L);i.append("th").style("padding","5px").style("vertical-align","top").style("font-weight",400).html(Ne[j++]).on("click",t?g:null);const a=i.append("th").style("padding","5px").style("vertical-align","top").style("text-align","left").style("cursor",t?"pointer":"").on("click",t?g:null);a.append("span").style("margin-right","12px").style("font-weight",400).html(e.label);i.append("th").style("padding","5px").style("vertical-align","top").style("text-align","center").style("font-weight",400).style("cursor",t?"pointer":"").append("span").html(t?"Details":" ").on("click",t?g:null);const d=m.append("tbody").datum(e).style("display",u.expandedSection=="all"||u.expandedSection==e.label?"":"none");for(const t of e.tiebreakers){if(t.skip)continue;if(!e.types?.includes("geneVariant")){continue}const s=d.append("tr").on("mouseover",L).datum(t).attr("draggable",!t.disabled&&e.types?.length!==0).attr("droppable",!t.disabled&&e.types?.length!==0).on("dragstart",v).on("dragover",w).on("dragleave",C).on("drop",$);if(!t.disabled)A++;const n=s.append("td").attr("title",t.disabled?`This tiebreaker is currently not being used to sort ${r.cases}. Check the box to use.`:`The number indicates the order in which this tiebreaker is used. Unched the box to skip.`).datum(t);n.style("padding","5px").style("vertical-align","top").style("text-align","center");n.append("span").html(!t.disabled?A:"");const i=s.append("td").style("opacity",t.disabled?.5:1).style("padding","5px").style("vertical-align","top").style("max-width","500px");i.append("span").html(t.label||"");if(!t.disabled){const e=i.append("label");e.append("span").html("<br>(use data list order ");if(!t.isOrdered)t.isOrdered=false;e.append("input").datum(t).attr("type","checkbox").property("checked",t.isOrdered).style("vertical-align","bottom").on("change",k);e.append("span").html(")");const s=t.order;i.append("div").attr("class","sjpp-matrix-sorter-ui-value").selectAll("div").data(s.map(((e,s)=>({lstName:"order",key:e,cls:o[e],tb:t,dragstart:T,dragover:G,dragleave:I,drop:V,filterByClass:l.filterByClass,index:s})))).enter().append("div").style("display",t.isOrdered?"block":"inline-block").each(M);if(t.notUsed?.length){const e=i.append("div");e.append("div").attr("data-testid","sjpp-matrix-sorter-ui-hidden-add").style("display","inline-block").style("padding","5x").style("vertical-align","top").style("padding","3px 5px").style("cursor","pointer").html(`+Add`).on("click",O)}}const a=s.append("td").style("text-align","center").style("vertical-align","top");if(t.mayToggle){a.append("button").datum(t).html(t.disabled?"Enable":"Disable").on("click",S)}}const p=d.append("tr").attr("draggable",true).on("mouseover",L);p.append("td").html(" ");const h=p.append("td").style("text-align","left").html(e.details&&!e.order?.length?e.details:" ");if(e.handler)e.handler(h,p,d);p.append("td").html(" ")}},toggleSection:g,trackDraggedSection:f,highlightSection:y,unhighlightSection:b,adjustSortPriority:x,trackDraggedTieBreaker:v,highlightTieBreaker:w,unhighlightTieBreaker:C,adjustTieBreakers:$,trackDraggedValue:T,highlightValue:G,unhighlightValue:I,adjustValueOrder:V,apply:_};function g(e,t={label:"all"}){u.expandedSection=u.expandedSection===t.label?"":t.label;u.expanded=!!u.expandedSection;u.init()}function f(e,t){m.type="sortPriority";m.data=t;m.index=u.activeOption.sortPriority.indexOf(t)}function y(e,t){if(m.type!="sortPriority"||t==m.data)return;e.preventDefault();const s=u.activeOption.sortPriority.indexOf(t);const i=s<m.index?"border-top":s>m.index?"border-bottom":"";if(!i)return;n(this).selectAll("th").style(i,"2px solid blue")}function b(e,t){if(m.type!="sortPriority")return;e.preventDefault();n(this).selectAll("th").style("border","none")}function x(e,t){if(t==m.data)return;const s=u.activeOption.sortPriority.indexOf(t);const n=a.config.settings.matrix;u.activeOption.sortPriority.splice(m.index,1);u.activeOption.sortPriority.splice(s,0,m.data);u.init({sortOptions:{[n.sortSamplesBy]:u.activeOption}})}function v(e,t){m.type="tiebreaker";m.data=t;m.sectionData=e.target.closest("tbody").__data__;m.priorityIndex=u.activeOption.sortPriority.indexOf(m.sectionData);m.index=m.sectionData.tiebreakers.indexOf(t)}function w(e,t){if(m.type!="tiebreaker"||t==m.data)return;e.preventDefault();const s=m.sectionData.tiebreakers.indexOf(t);const i=s<m.index?"border-top":s>m.index?"border-bottom":"";if(!i)return;n(this).selectAll("td:nth-child(2)").style(i,"2px solid blue")}function C(e,t){if(m.type!="tiebreaker")return;e.preventDefault();n(this).selectAll("td:nth-child(2)").style("border","none")}function k(e,t){e.stopPropagation();t.isOrdered=!t.isOrdered;u.init({sortOptions:{[l.sortSamplesBy]:u.activeOption}})}function S(e,t){e.stopPropagation();t.disabled=!t.disabled;u.init({sortOptions:{[l.sortSamplesBy]:u.activeOption}})}function $(e,t){if(m.type!="tiebreaker"||t==m.data)return;e.preventDefault();const s=m.sectionData.tiebreakers.indexOf(t);const n=a.config.settings.matrix;m.sectionData.tiebreakers.splice(m.index,1);m.sectionData.tiebreakers.splice(s,0,m.data);u.init({sortOptions:{[n.sortSamplesBy]:u.activeOption}})}function M(e){const t=[];if(e.tb.notUsed?.includes(e.key))t.push(`- Click on this label to include in used data values.`);if(e.filterByClass[e.key])t.unshift("- Click on the corresponding entry in the matrix legend or Mutation/CNV menus to unhide");if(t.length)t.unshift(`To use this data value for sorting ${r.samples}:`);e.tb.notUsed?.includes(e.key);const s=e.filterByClass[e.key]=="value"?.5:1;const i=n(this).attr("aria-label",t.length?t.join("\n"):`Click to not use this data value to sort ${r.samples}`).attr("draggable",e.tb.isOrdered?true:false).attr("droppable",e.tb.isOrdered?true:false).style("width","fit-content").style("margin-right","10px").style("overflow","hidden").style("white-space","nowrap").style("opacity",s).style("cursor","pointer").on("dragstart",e.dragstart).on("dragover",e.dragover).on("dragleave",e.dragleave).on("drop",e.drop).on("mouseenter",(()=>a.style("opacity",1))).on("mouseleave",(()=>a.style("opacity",0))).on("click",(()=>{if(t.length){const s="sjpp-matrix-sorter-value-note";i.selectAll(`.${s}`).remove();const n=i.append("div").attr("class",s).style("max-width","200px").style("padding","5px");n.html(t.join("<br>"));if(e.filterByClass[e.key])return}const s=e.lstName=="order"?"notUsed":"order";if(!e.tb[s])e.tb[s]=[];const n=e.tb[s];e.tb[e.lstName].splice(e.index,1);if(e.lstName=="order")n.unshift(e.key);else n.push(e.key);u.init({sortOptions:{[l.sortSamplesBy]:u.activeOption}})}));i.append("div").style("display","inline-block").style("cursor","pointer").style("width","12px").style("height","12px").style("margin-right","3px").style("background-color",e.cls.color);i.append("span").style("cursor","pointer").style("text-decoration",e.filterByClass[e.key]=="case"?"line-through":"").html(e.cls.label+(e.filterByClass[e.key]?" (<i>not used since this value is hidden</i>)":""));const a=i.append("div").style("display","inline-block").style("width","12px").style("cursor","pointer").style("opacity",0).style("color",e.lstName=="order"?"red":"green").html(e.lstName=="order"?"✗":"✓")}function T(e,t){e.stopPropagation?.();m.type="value";m.data=t;m.sectionData=e.target.closest("tbody").__data__;m.priorityIndex=u.activeOption.sortPriority.indexOf(m.sectionData);m.tiebreaker=e.target.closest("tr").__data__;m.tbIndex=m.sectionData.tiebreakers.indexOf(m.priorityIndex);m.order=m.tiebreaker.order}function G(e,t){e.stopPropagation?.();if(m.type!="value"||t==m.data)return;if(t.tb!=m.data.tb)return;e.preventDefault();m.order.indexOf(t);n(this).style("border","2px solid blue")}function I(e,t){e.stopPropagation?.();if(m.type!="value")return;e.preventDefault();n(this).style("border","none")}function V(e,t){e.stopPropagation?.();if(m.type!="value"||t==m.data)return;e.preventDefault();const s=u.settings;m.data.tb[m.data.lstName].splice(m.data.index,1);t.tb[t.lstName].splice(t.index,0,m.data.key);const n=s.hiddenVariants.indexOf(m.data.key);const i=structuredClone(s.hiddenVariants);const a=structuredClone(s.filterByClass);if(n!=-1){i.splice(n,1);a[m.data.key]=false}u.init({hiddenVariants:i,filterByClass:a,sortOptions:{[s.sortSamplesBy]:u.activeOption}})}function O(e,t){e?.stopPropagation();const s=d.clear().d.append("div").attr("data-testid","sjpp-matrix-sorter-ui-hidden-vals").style("margin-top","3px").style("vertical-align","top").style("padding-left","12px");s.selectAll("div").data(t.notUsed.map(((e,s)=>({lstName:"notUsed",key:e,cls:o[e],tb:t,dragstart:T,dragover:G,dragleave:I,drop:V,filterByClass:l.filterByClass,index:s})))).enter().append("div").style("display","block").each(M);d.showunder(e.target)}function _(){a.app.tip?.hide();a.app.dispatch({type:"plot_edit",id:a.id,config:{settings:{matrix:{sortOptions:{[l.sortSamplesBy]:u.activeOption}}}}})}function L(){}function N(e,t){if(!a.selectedTermsToSortAgainst?.length){e.html(`Click on a matrix row label and the left triangle to add an entry here`);return}const s=a.selectedTermsToSortAgainst.map((e=>({t:e,label:e.tw.term.name+(e.tw.term.type=="geneVariant"?" alterations":" values")})));const i=n(t.node().parentNode);i.selectAll("tr").remove();i.selectAll("tr").data(s).enter().append("tr").selectAll("td").data(((e,t)=>[{label:t+1,textAlign:"center",cursor:"",t:e.t},{label:e.label,textAlign:"left",cursor:""},{label:"Delete",textAlign:"center",cursor:"pointer",click:a.unsortSamplesAgainstTerm,data:e}])).enter().append("td").style("text-align",(e=>e.textAlign)).style("cursor",(e=>e.cursor)).html((e=>e.label)).on("click",((e,t)=>t.click?.(e,t)))}u.init();u.api={main:u.init,destroy:()=>{e.holder.selectAll("*").remove()}};if(e.debug)u.api.Inner=u;return u.api}const Ae=new s({padding:""});class je{constructor(e,t){this.type="matrixControls";this.opts=e;this.parent=e.parent;this.overrides={};this.opts.holder.style("margin","10px 10px 20px 10px").style("white-space","nowrap");const s=this.parent.getState(t);const n=s.config.settings.matrix;if(this.parent.setClusteringBtn)this.parent.setClusteringBtn(this.opts.holder,((e,t)=>this.callback(e,t)));this.setSamplesBtn(n);this.setGenesBtn(n);if(n.addMutationCNVButtons&&this.parent.chartType!=="hierCluster"){this.setMutationBtn();this.setCNVBtn()}this.setVariablesBtn(n);this.setDimensionsBtn(n);this.setLegendBtn(n);this.setDownloadBtn(n);this.setZoomInput();this.setDragToggle({holder:this.opts.holder.append("div").style("display","inline-block"),target:this.parent.dom.seriesesG});this.setSvgScroll(s);this.keyboardNavHandler=async e=>{if(e.target.tagName=="BUTTON")this.keyEventTarget=e.target;if(e.key=="Escape"){this.parent.app.tip.hide()}else if(e.key=="Enter"||e.key=="ArrowDown"){const t=e.target.tagName=="BUTTON"?this.parent.app.tip.d.node().querySelectorAll("input, select"):e.target.querySelectorAll("input, select");for(const e of t){if(e.checkVisibility?.()||!e.checkVisibility&&e.getBoundingClientRect().height){e.focus();return false}}}else if(e.key=="Tab"&&e.shiftKey||e.key=="Backspace"||e.key=="ArrowUp"){this.keyEventTarget.focus();return false}};this.btns=this.opts.holder.selectAll(":scope>button").filter((e=>e&&e.label)).on(`keyup.matrix-${this.parent.id}`,this.keyboardNavHandler)}setSamplesBtn(e){const t=e.controlLabels;const s=this;const n=this.parent;const i=[{label:`Maximum # ${t.Samples}`,title:`Limit the number of displayed ${t.samples}`,type:"number",chartType:"matrix",settingsKey:"maxSample",getDisplayStyle(e){return e.chartType=="hierCluster"?"none":"table-row"}},{label:`Sort ${t.Sample} Groups`,title:`Set how to sort ${t.sample} groups`,type:"radio",chartType:"matrix",settingsKey:"sortSampleGrpsBy",options:[{label:"Predefined or Group Name",value:"name",title:`Sort by group name`},{label:`${t.Sample} Count`,value:"sampleCount",title:`Sort by the number of samples in the group`},{label:`Hits`,value:"hits",title:`Sort by the total number of variants for every ${t.sample} in the group`}],getDisplayStyle(e){return e.divideBy&&!e.hierCluster?"table-row":"none"}},{label:`${t.Sample} Group Label Character Limit`,title:`Truncate the ${t.sample} group label if it exceeds this maximum number of characters`,type:"number",chartType:"matrix",settingsKey:"sampleGrpLabelMaxChars",getDisplayStyle(e){return e.divideBy&&!e.hierCluster?"table-row":"none"}},{label:`${t.Sample} Label Character Limit`,title:`Truncate the ${t.sample} label if it exceeds this maximum number of characters`,type:"number",chartType:"matrix",settingsKey:"collabelmaxchars"},{label:`Group ${t.Samples} By`,title:`Select a variable with discrete values to group ${t.samples}`,type:"term",chartType:"matrix",configKey:"divideBy",vocabApi:this.opts.app.vocabApi,state:{vocab:this.opts.vocab},processInput:async e=>{if(e?.term&&j(e.term)){e.q={...e.q,mode:"discrete"}}if(e)await A(e,this.opts.app.vocabApi);return e},processConfig:e=>{if(this.parent.chartType=="hierCluster"&&e["divideBy"]){e.settings={hierCluster:{yDendrogramHeight:0,clusterSamples:false}}}if(this.parent.config.divideBy)e.legendValueFilter=this.parent.mayRemoveTvsEntry(this.parent.config.divideBy)},getBodyParams:()=>{const e=this.parent.termOrder.filter((e=>e.tw.term.type==="geneVariant")).map((e=>e.tw.term.chr?`${e.tw.term.chr}:${e.tw.term.start}-${e.tw.term.stop}`:e.tw.term.gene||e.tw.term.name));return{currentGeneNames:e}}}];i.push({label:`Sort ${t.Sample} Priority`,title:`Set how to sort ${t.samples}`,type:"custom",init(e){const t=n.config.settings.matrix;if(!s.activeTab)s.activeTab="basic";e.dom.inputTd.style("padding","5px");const i=e.dom.inputTd.append("div").style("margin-bottom","5px");const a=i.append("div").style("display","inline-block").style("padding-right","5px").style("border-right","2px solid black").style("text-decoration",s.activeTab=="basic"?"underline":"").style("cursor","pointer").html("Basic").on("click",(()=>{s.activeTab="basic";a.style("text-decoration","underline");o.style("text-decoration","");l.style("display","");m.style("display","none")}));const o=i.append("div").style("display","inline-block").style("margin-left","5px").style("text-decoration",s.activeTab=="advanced"?"underline":"").style("cursor","pointer").html("Advanced").on("click",(()=>{s.activeTab="advanced";a.style("text-decoration","");o.style("text-decoration","underline");l.style("display","none");m.style("display","")}));const l=e.dom.inputTd.append("div").style("display",s.activeTab=="basic"?"":"none");const r=l.append("div");r.append("span").html("SSM");const{inputs:d}=W({holder:r.append("span"),options:[{label:"by consequence",value:"consequence",checked:t.sortByMutation==="consequence"},{label:"by presence",value:"presence",checked:t.sortByMutation==="presence"}],styles:{display:"inline-block"},callback:e=>{const t=n.config.settings.matrix.sortOptions;const s=t.a;const i=s.sortPriority[0].tiebreakers[1];i.disabled=!e;i.isOrdered=e==="consequence";n.app.dispatch({type:"plot_edit",id:n.id,config:{settings:{matrix:{sortByMutation:e,sortOptions:t}}}})}});d.style("margin","2px 0 0 2px").style("vertical-align","top");const c=l.append("div").style("display",t.showMatrixCNV!="none"&&!t.allMatrixCNVHidden?"block":"none");c.append("span").html("CNV");const p=q({holder:c.append("span"),divstyle:{display:"inline-block"},checked:t.sortByCNV,labeltext:"sort by CNV",callback:()=>{const e=p.property("checked");const t=n.config.settings.matrix.sortOptions;const s=t.a;const i=s.sortPriority[0].tiebreakers[2];i.disabled=!e;i.isOrdered=e;n.app.dispatch({type:"plot_edit",id:n.id,config:{settings:{matrix:{sortByCNV:e,sortOptions:t}}}})}});const m=e.dom.inputTd.append("div").style("display",s.activeTab=="advanced"?"":"none");e.dom.row.on("mouseover",(function(){this.style.backgroundColor="#fff";this.style.textShadow="none"}));if(!s.sorterUi){s.sorterUi=Be({controls:this,holder:m,tip:this.parent.app.tip})}else{s.sorterUi.main(this.parent.config.settings.matrix,{holder:m})}return{main:e=>{const t=e.settings.matrix;d.property("checked",(e=>e.value==t.sortByMutation));p.property("checked",t.sortByCNV);c.style("display",t.showMatrixCNV!="none"&&!t.allMatrixCNVHidden?"block":"none")}}}});this.opts.holder.append("button").datum({label:t.Samples||`Samples`,getCount:()=>"sampleCount"in this.overrides?this.overrides.sampleCount:this.parent.sampleOrder?.length||0,rows:i,customInputs:this.updateSamplesControls}).html((e=>e.label)).style("margin","2px 0").on("click",((e,t)=>this.callback(e,t)))}setGenesBtn(e){const t=e.controlLabels;const s=[{label:` Stacked <span style="font-size:.7em;color:#555;">Show stacked rectangles in the same matrix cell to render variants for the same ${t.sample} and gene</span>`,value:"",title:`Show stacked rectangles in the same matrix cell to render variants for the same ${t.sample} and gene`},{label:` OncoPrint <span style="font-size:.7em;color:#555;">Show overlapping rectangles in the same matrix cell to render variants for the same ${t.sample} and gene</span>`,value:"oncoprint",title:`Show overlapping rectangles in the same matrix cell to render variants for the same ${t.sample} and gene`}];if(e.addMutationCNVButtons&&this.parent.chartType!=="hierCluster")s.unshift({label:` Single <span style="font-size:.7em;color:#555;">Show a single rectangle in a matrix cell to render the most severe variant (truncating > indels > missense > synonymous) for the same ${t.sample} and gene</span>`,value:"single",title:`Show a single rectangle in a matrix cell to render the most severe variant (truncating > indels > missense > synonymous) for the same ${t.sample} and gene`});this.opts.holder.append("button").datum({label:"Genes",getCount:()=>this.parent.termOrder?.filter((e=>e.tw.term.type=="geneVariant"||e.tw.term.type==N.GENE_EXPRESSION)).length||0,customInputs:this.appendGeneInputs,rows:[{label:`Display ${t.Sample} Counts for Gene`,title:`Include the ${t.sample} count in the gene label`,type:"radio",chartType:"matrix",settingsKey:"samplecount4gene",options:[{label:"Absolute",value:"abs"},{label:`Percent`,value:"pct"},{label:`None`,value:""}]},{label:"Genomic Alterations Rendering",title:`Set how to indicate a ${t.sample}'s applicable variant types in the same matrix cell`,type:"radio",chartType:"matrix",settingsKey:"cellEncoding",options:s,styles:{padding:"5px 0px",margin:0},labelDisplay:"block",callback:this.parent.geneStyleControlCallback},{label:"Sort Genes",title:"Set how to order the genes as rows",type:"radio",chartType:"matrix",settingsKey:"sortTermsBy",options:[{label:"By Input Data Order",value:"asListed"},{label:`By ${t.sample} Count`,value:"sampleCount"}],styles:{padding:0,"padding-right":"10px",margin:0}}]}).html((e=>e.label)).style("margin","2px 0").on("click",((e,t)=>this.callback(e,t)))}setVariablesBtn(e){e.controlLabels;this.opts.holder.append("button").datum({label:e.controlLabels.Terms||`Variables`,rows:[{label:`Row Group Label Max Length`,title:`Truncate the row group label if it exceeds this maximum number of characters`,type:"number",chartType:"matrix",settingsKey:"termGrpLabelMaxChars"},{label:`Row Label Max Length`,title:`Truncate the row label if it exceeds this maximum number of characters`,type:"number",chartType:"matrix",settingsKey:"rowlabelmaxchars"}],customInputs:this.appendDictInputs}).html((e=>e.label)).style("margin","2px 0").on("click",((e,t)=>this.callback(e,t)))}setDimensionsBtn(e){const t=e.controlLabels;this.opts.holder.append("button").datum({label:"Cell Layout",tables:[{rows:[{label:"Grid",title:"Show grid lines, which creates borders around each matrix cells. "+" Note that grid lines are hidden when the auto-computed width <= 2, or when either the column and row spacing is set to 0.",type:"checkbox",boxLabel:"show",processInput:e=>e===true?"rect":e==="rect",chartType:"matrix",settingsKey:"showGrid",colspan:2,align:"center"},{label:"Outline Color",title:"Set a border color for the whole matrix",type:"color",chartType:"matrix",settingsKey:"outlineStroke",colspan:2,align:"center"},{label:"Beam Color",title:"Set a color for the beam highlighter",type:"color",chartType:"matrix",settingsKey:"beamStroke",colspan:2,align:"center"},{label:"Grid Line Color",title:"Set the grid color, equivalent to applying the same border color for each matrix cell",type:"color",chartType:"matrix",settingsKey:"gridStroke",colspan:2,align:"center"},{label:"Background Color",title:`Set the background color when there are no alterations or annotation data for a ${t.sample}`,type:"color",chartType:"matrix",settingsKey:"cellbg",colspan:2,align:"center"},{label:`Use Canvas If # ${t.sample} Exceeds`,title:`Switch from SVG to canvas rendering when the number of ${t.samples} exceeds this number`,type:"number",chartType:"matrix",settingsKey:"svgCanvasSwitch",colspan:2,align:"center",width:60,min:0,max:1e4,step:1},{label:"Canvas Min. Pixel Width",title:"Set a minimum pixel width for a matrix cell when using canvas, may affect the perceived sharpness of the canvas image",type:"checkbox",boxLabel:"apply",chartType:"matrix",settingsKey:"useMinPixelWidth",colspan:2,align:"center",getDisplayStyle:()=>this.parent.settings.matrix.useCanvas?"":"none"}]},{header:["Cells","Columns","Rows"],rows:[{label:"Row Height",title:"Set the height of a matrix row",type:"number",width:50,align:"center",chartType:"matrix",inputs:[{label:"N/A"},{settingsKey:"rowh",min:8,max:30,step:1}],getDisplayStyle(e){return e.chartType=="hierCluster"?"none":"table-row"}},{label:"Min Col. Width",title:"Set the minimum width of the auto-computed matrix column width",type:"number",width:50,align:"center",chartType:"matrix",inputs:[{settingsKey:"colwMin",min:.1,max:16,step:.2},{label:"N/A"}]},{label:"Max Col. Width",title:"Set the maximum width of the auto-computed matrix column width",type:"number",width:50,align:"center",chartType:"matrix",inputs:[{settingsKey:"colwMax",min:1,max:24,step:.2},{label:"N/A"}]},{label:"Spacing",title:"Set the column spacing. Note that this will be set to 0 when the auto-computed width < 2.",type:"number",width:50,align:"center",chartType:"matrix",inputs:[{settingsKey:"colspace",min:0,max:20,step:1},{settingsKey:"rowspace",min:0,max:20,step:1}],getDisplayStyle(e){return e.chartType=="hierCluster"?"none":"table-row"}},{label:"Group spacing",title:"Set the spacing between column and row groups.",type:"number",width:50,align:"center",chartType:"matrix",inputs:[this.parent.chartType=="hierCluster"?{label:"N/A"}:{settingsKey:"colgspace",min:0,max:20,step:1},{settingsKey:"rowgspace",min:0,max:20,step:1}]}]},{header:["Labels","Columns","Rows"],rows:[{label:"Offset",title:"Set the gap between the label text and matrix edge",type:"number",width:50,align:"center",chartType:"matrix",inputs:[{settingsKey:"collabelgap",min:0,max:20,step:1},{settingsKey:"rowlabelgap",min:0,max:20,step:1}]},{label:"Spacing",title:"Set the gap between labels",type:"number",width:50,align:"center",chartType:"matrix",inputs:[{settingsKey:"collabelpad",min:0,max:20,step:1},{settingsKey:"rowlabelpad",min:0,max:20,step:1}]},{label:"Min font size",title:"Set the minimum auto-computed font size for labels. Note that labels will be hidden if the auto-computed values falls below this minimum.",type:"number",width:50,align:"center",colspan:2,chartType:"matrix",settingsKey:"minLabelFontSize",min:0,max:24,step:.1},{label:"Max font size",title:"Set the maximum auto-computed font size for labels",type:"number",width:50,align:"center",colspan:2,chartType:"matrix",settingsKey:"maxLabelFontSize",min:0,max:24,step:.1},{label:"Group label<br/>position",title:"Set which side of the matrix to display group labels",type:"radio",width:50,chartType:"matrix",labelDisplay:"block",getDisplayStyle(e){return e.chartType=="hierCluster"?"none":"table-row"},inputs:[{settingsKey:"collabelpos",options:[{label:"Top",value:"bottom",title:`Display ${t.sample} group labels at the bottom`},{label:"Bottom",value:"top",title:`Display ${t.sample} group labels on top`}]},{settingsKey:"rowlabelpos",options:[{label:"Left",value:"right",title:`Display gene or variable group labels on the left side`},{label:"Right",value:"left",title:`Display gene or variable group labels on the right side`}]}]}]}]}).html((e=>e.label)).style("margin","2px 0").on("click",((e,t)=>this.callback(e,t)))}setLegendBtn(e){this.opts.holder.append("button").style("margin","2px 0").datum({label:"Legend Layout",rows:[{label:"Font Size",title:"Set the font size for the legend text",type:"number",chartType:"legend",settingsKey:"fontsize"},{label:"Line Height",title:"Set the line height for a legend group",type:"number",chartType:"legend",settingsKey:"lineh"},{label:"Icon Height",title:"Set the icon height for a legend item",type:"number",chartType:"legend",settingsKey:"iconh"},{label:"Icon Width",title:"Set the icon width for a legend item",type:"number",chartType:"legend",settingsKey:"iconw"},{label:"Item Left Pad",title:"Set a left margin for each legend item",type:"number",chartType:"legend",settingsKey:"padx"},{label:"Left Margin",title:"Set a left margin for the whole legend",type:"number",chartType:"legend",settingsKey:"padleft"},{label:"Left Indent",title:`Set a left margin for the first legend item in each group, and should be set to the length of the longest group label.`+` The left indent will align the legend group label text to the right.`,type:"number",chartType:"legend",settingsKey:"hangleft"},{label:"Item Layout",title:"Option to separate each legend item into a new line, instead of a horizontal layout in the same line.",type:"checkbox",chartType:"legend",settingsKey:"linesep",boxLabel:"Line separated"}]}).html((e=>e.label)).style("margin","2px 0").on("click",((e,t)=>this.callback(e,t)))}setMutationBtn(){this.opts.holder.append("button").style("margin","2px 0").datum({label:"Mutation",updateBtn:e=>{const t=this.parent.config.settings.matrix;e.style("text-decoration",t.allMatrixMutationHidden?"line-through":"").style("text-decoration-thickness",t.allMatrixMutationHidden?"2px":"")},rows:[{title:`Show mutation options`,type:"radio",chartType:"matrix",settingsKey:"showMatrixMutation",options:[{label:"Show all mutations",value:"all"},{label:`Show only truncating mutations`,value:"onlyTruncating"},{label:`Show only protein-changing mutations`,value:"onlyPC"},{label:`Do not show mutations`,value:"none"},{label:`Show selected mutation`,value:"bySelection"}],labelDisplay:"block",getDisplayStyle(e){return e.chartType=="hierCluster"?"none":"table-row"},callback:this.parent.mutationControlCallback}],customInputs:this.generateMutationItems}).html((e=>e.label)).style("margin","2px 0").on("click",((e,t)=>this.callback(e,t)))}setCNVBtn(){this.opts.holder.append("button").style("margin","2px 0").datum({label:"CNV",updateBtn:e=>{const t=this.parent.config.settings.matrix;const s=t.allMatrixCNVHidden;e.style("text-decoration",s?"line-through":"").style("text-decoration-thickness",s?"2px":"")},rows:[{title:`Show CNV options`,type:"radio",chartType:"matrix",settingsKey:"showMatrixCNV",options:[{label:"Show all CNV",value:"all"},{label:`Do not show CNV`,value:"none"},{label:`Show selected CNV`,value:"bySelection"}],labelDisplay:"block",getDisplayStyle(e){return e.chartType=="hierCluster"?"none":"table-row"},callback:this.parent.CNVControlCallback}],customInputs:this.generateCNVItems}).html((e=>e.label)).style("margin","2px 0").on("click",((e,t)=>this.callback(e,t)))}setDownloadBtn(e){this.opts.holder.append("button").style("margin","2px 0").text("Download").on("focus",(()=>this.parent.app.tip.hide())).on("click.sjpp-matrix-download",(e=>{const t=this.parent;if(!t.dom.downloadMenu)t.dom.downloadMenu=new s({padding:""});const n=t.dom.downloadMenu.clear();const i=n.d.append("div");i.append("div").attr("class","sja_menuoption sja_sharp_border").text(`SVG image`).on("click.sjpp-matrix-download",(()=>{f(this.opts.getSvg(),"matrix",{apply_dom_styles:true});t.dom.downloadMenu.destroy()}));i.append("div").attr("class","sja_menuoption sja_sharp_border").text(`TSV data`).on("click.sjpp-matrix-download",(()=>{const e=t.data.lst;const s=t.termOrder.map((e=>e.tw));const n=t.state.termdbConfig.assayAvailability;const i=t.settings.matrix.controlLabels;if(t.config.divideBy?.id&&!s.find((e=>e.id==t.config.divideBy.id))){s.push(t.config.divideBy)}const l=[];for(const t of e){for(const e of s){if(e.$id in t){l.push(t);break}}}const r=[i.Sample];for(const e of s)r.push(e.term.name);const d=[r];for(const e of l){const t=[e._ref_.label];for(const i of s){if(!e[i.$id]){t.push("")}else{if(i.term.type=="geneVariant"){const s=[];for(const t of e[i.$id].renderedValues){const e=n?.byDt?.[parseInt(t.dt)];if(t.dt==u){s.push((t.origin?`${t.origin} `:"")+(e?`${a[t.dt]}:`:"")+`${o[t.class]?.label}`+(t.mname?`,${t.mname}`:""))}else if(t.dt==g){const n=t.value?`${e?"":"CNV:"}${t.value}`:t.class=="CNV_amp"?"CNV gain":t.class=="CNV_loss"?"CNV loss":o[t.class]?.label;s.push((t.origin?`${t.origin} `:"")+(e?`${a[t.dt]}:`:"")+n)}else if(t.dt==y||t.dt==b){s.push((t.origin?`${t.origin} `:"")+(e?`${a[t.dt]}:`:"")+`${o[t.class]?.label}`+(t.gene&&t.mname?`(${t.gene}::${t.mname})`:""))}else{s.push(`DO NOT SUPPORT dt='${t.dt}'`)}}t.push(s.join("|"))}else if(i.term.type==N.GENE_EXPRESSION||i.term.type==N.METABOLITE_INTENSITY){t.push(e[i.$id]?.renderedValues?.[0]?.value||"")}else{t.push(e[i.$id]?.renderedValues?.[0]||e[i.$id]?.value||"")}}}d.push(t)}const c=d.map((e=>e.join("\t"))).join("\n");const p=document.createElement("a");document.body.appendChild(p);p.addEventListener("click",(function(){const e=(new Date).toISOString().split("T")[0];p.download=t.config.settings?.hierCluster?.termGroupName?.startsWith("Gene Expression")?`GeneExpression.${e}.tsv`:t.chartType=="hierCluster"?`HierCluster.${e}.tsv`:`${t.app.vocabApi.termdbConfig.matrix?.appName||"Matrix"}.${e}.tsv`;p.href=URL.createObjectURL(new Blob([c],{type:"text/tab-separated-values"}));document.body.removeChild(p)}),false);p.click();t.dom.downloadMenu.destroy()}));n.showunder(e.target)}))}main(e={}){this.overrides=e;this.parent.app.tip.hide();this.btns.text((e=>(e.getCount?`${e.getCount()} `:"")+e.label)).each((function(e){if(e.updateBtn)e.updateBtn(n(this))}));const t=this.parent.config.settings.matrix;const s=this.parent.dimensions;if(this.zoomApi)this.zoomApi.update({value:t.zoomLevel.toFixed(1),min:t.colwMin/t.colw,max:t.colwMax/t.colw,increment:t.zoomIncrement,step:t.zoomStep||1});if(this.svgScrollApi&&s){this.svgScrollApi.update({x:s.xOffset,y:s.yOffset-t.scrollHeight,totalWidth:s.zoomedMainW,visibleWidth:s.mainw,zoomCenter:t.zoomCenterPct*s.mainw-s.seriesXoffset})}if(this.dragToggleApi){this.dragToggleApi.update(t.mouseMode?{mouseMode:t.mouseMode}:{})}}getSettings(){return{mouseMode:this.dragToggleApi.getSettings().mouseMode}}async callback(e,t){const s=this.opts.app;const n=this.opts.parent;const i=t.tables||[t];e.target.focus();s.tip.clear();const a=s.tip.d.append("table").attr("class","sjpp-controls-table");for(const e of i){if(e.header){a.append("tr").selectAll("th").data(e.header).enter().append("th").html((e=>e))}for(const t of e.rows){const e=a.append("tr");const i=await R[t.type](Object.assign({},{holder:e,dispatch:s.dispatch,id:n.id,debug:this.opts.debug,parent:n},t));i.main(n.config)}if(e.customInputs)e.customInputs(this,s,n,a);a.selectAll("select, input, button").attr("tabindex",0).on("keydown",self.keyboardNavHandler)}s.tip.showunder(e.target)}prependInfo(e,t,s){const n=e.append("tr");n.append("td").text(t).attr("class","sja-termdb-config-row-label");n.append("td").text(s)}async appendGeneInputs(e,t,s,n){Ae.clear();if(!s.selectedGroup)s.selectedGroup=0;if(s.opts.customInputs?.genes){for(const t of s.opts.customInputs.genes){t.chartType="matrix";const i=n.append("tr");if(t.title)i.attr("aria-label",t.title);const a=await R[t.type](Object.assign({},{holder:i,id:s.id,debug:e.opts.debug,parent:s},t));a.main(s.config)}}e.addGenesetInput(event,t,s,n.append("tr"))}addGenesetInput(e,t,s,n){const i=this.btns.filter((e=>e.label=="Genes"))?.node();const a=t.tip;const o=s.config.termgroups;let l;const r=e=>{e.selectAll("*").remove();const s=l.lst.map((e=>({gene:e.name})));new H({holder:e,genome:t.opts.genome,geneList:s,customInputs:this.parent.opts.customInputs?.geneset,mode:l.mode,minNumGenes:l.mode=="geneExpression"?3:1,vocabApi:this.opts.app.vocabApi,callback:async({geneList:e,groupName:s})=>{if(!l)throw`missing selectedGroup`;a.hide();const n=l.status=="new"?{name:s,lst:[]}:o[l.index];if(l.status=="new")o.push(n);const i=l.mode=="geneExpression"?"geneExpression":"geneVariant";const r=n.lst.filter((e=>e.term.type!=i));const d=await Promise.all(e.map((async e=>{const t={gene:e.symbol||e.gene,name:e.symbol||e.gene,type:i};let s=n.lst.find((t=>t.term.name==e.symbol||t.term.name==e.gene));if(!s){s={term:t,q:{}};s.$id=await D(this.opts.app.vocabApi.getTwMinCopy(s))}else if(!s.$id){s.$id=await D(this.opts.app.vocabApi.getTwMinCopy({term:t}))}return s})));n.lst=[...r,...d];if(!n.lst.length)o.splice(l.index,1);t.dispatch({type:"plot_edit",id:this.parent.id,config:{termgroups:o}})},backBtn:{target:"Genes Menu",callback:()=>{i.click()}}})};const d=o.filter((e=>e.type!="hierCluster"||e.lst.find((e=>e.term.type=="geneExpression")))).length;n.append("td").attr("class","sja-termdb-config-row-label").html("Gene Set");if(d>0){const e=n.append("td").style("display","block").style("padding","5px 0px");const t=e.append("div").append("label");t.append("button").html(d>1?"Edit Selected Group":"Edit Current Group").on("click",(()=>{a.clear();this.setMenuBackBtn(a.d.append("div").style("padding","5px"),(()=>i.click()));const e=a.d.append("div");r(e)}));if(d>1){const{groups:e,groupSelect:s}=this.setTermGroupSelector(t,o);l=e.find((e=>e.selected));s.on("change",(()=>{l=e[s.property("value")]}))}else{const e=s.config.settings.hierCluster;const t=o.find((e=>e.type!="hierCluster"||e.lst.find((e=>e.term.type=="geneExpression"))));l={index:0,name:t.name,type:t.type,lst:t.lst.filter((e=>e.term.type.startsWith("gene"))).map((e=>({name:e.term.name}))),mode:this.parent.chartType=="hierCluster"&&(t.type=="hierCluster"||t.name==e?.termGroupName)?e.dataType:this.parent.state.termdbConfig.queries?.snvindel?N.GENE_VARIANT:"",selected:true}}}const c=n.append("td").style("display","block").style("padding","5px 0px");const p=c.append("div").append("label");const m=p.append("button").html("Create New Group").property("disabled",true).on("click",(()=>{a.clear();this.setMenuBackBtn(a.d.append("div"),(()=>i.click()));const e=u.property("value");s.config.settings.hierCluster;l={index:o.length,name:e,label:e,lst:[],status:"new",mode:s.state.termdbConfig.queries?.snvindel?N.GENE_VARIANT:""};r(a.d.append("div"))}));const u=p.append("input").style("margin","2px 5px").style("width","210px").attr("placeholder","Group Name").on("input",(()=>{m.property("disabled",!u.property("value"))})).on("keyup",(e=>{if(e.key=="Enter"&&!m.property("disabled")){m.node().click()}}))}setMenuBackBtn(e,t){e.attr("tabindex",0).style("padding","5px").style("text-decoration","underline").style("cursor","pointer").style("margin-bottom","12px").html(`« Back to Genes`).on("click",t).on("keyup",(e=>{if(e.key=="Enter")e.target.click()}))}setTermGroupSelector(e,t){const s=t.find((e=>e.lst.find((e=>e.term.type.startsWith("gene")))));const n=this.parent.config.settings.hierCluster;const i=t.map(((e,t)=>({index:t,name:e.name,type:e.type,lst:e.lst.filter((e=>e.term.type.startsWith("gene"))).map((e=>({name:e.term.name}))),mode:this.parent.chartType=="hierCluster"&&(e.type=="hierCluster"||e.name==n?.termGroupName)?n.dataType:this.parent.state.termdbConfig.queries?.snvindel?N.GENE_VARIANT:"",selected:this.parent.chartType=="hierCluster"&&(e.type=="hierCluster"||e.name&&e.name==n?.termGroupName)||e===s})));const a=e.append("select").style("width","218px").style("margin","2px 5px");for(const[e,t]of i.entries()){if(t.label)continue;if(t.name)t.label=t.name;else t.label=`Unlabeled group #${e+1}`}a.selectAll("option").data(i).enter().append("option").property("selected",(e=>e.selected)).attr("value",((e,t)=>t)).html((e=>e.label));return{groups:i,groupSelect:a}}appendDictInputs(e,t,s,n){Ae.clear();if(!s.selectedGroup)s.selectedGroup=e.chartType=="hierCluster"?1:0;t.tip.d.append("hr");e.addDictMenu(t,s,t.tip.d.append("div"))}generateCNVItems(e,t,s,n){n.attr("class",null);const i=s.config.settings.matrix;const a=s.legendData.find((e=>e.dt?.includes(u)));if(i.showMatrixCNV!=="none"&&(i.allMatrixMutationHidden||!a||a.crossedOut||!a.items.find((e=>!e.greyedOut&&!e.crossedOut)))){n.select("input[type='radio'][value='none']").property("disabled",true);n.select("input[type='radio'][value='none'] + span").style("opacity","0.5").on("mouseup",null)}if(i.addMutationCNVButtons&&s.chartType!=="hierCluster"&&i.showMatrixCNV=="bySelection")s.CNVControlCallback("bySelection")}generateMutationItems(e,t,s,n){n.attr("class",null);const i=s.config.settings.matrix;const a=s.legendData.find((e=>e.dt?.includes(g)));if(i.showMatrixMutation!=="none"&&(i.allMatrixCNVHidden||!a||a.crossedOut||!a.items.find((e=>!e.greyedOut&&!e.crossedOut)))){n.select("input[type='radio'][value='none']").property("disabled",true);n.select("input[type='radio'][value='none'] + span").style("opacity","0.5").on("mouseup",null)}if(i.addMutationCNVButtons&&s.chartType!=="hierCluster"&&i.showMatrixMutation=="bySelection")s.mutationControlCallback("bySelection")}updateSamplesControls(e,t,s,n){if(s.chartType=="hierCluster"&&s.config.settings.hierCluster.clusterSamples){const e=s.config.settings.matrix.controlLabels;const t=n.select(`tr[title='Set how to sort ${e.samples}']`);t.style("display","none")}}async addDictMenu(e,t,s,n=undefined){const i=await import("./app-5aa892cb.js");i.appInit({holder:n||e.tip.d,vocabApi:this.parent.app.vocabApi,focus:"off",state:{vocab:this.parent.state.vocab,activeCohort:this.parent.activeCohort,nav:{header_mode:"search_only"},tree:{usecase:{target:"matrix",detail:"termgroups"}}},tree:{submit_lst:t=>{this.submit_lst(t);e.tip.hide()}},search:{focus:"off"}})}async submit_lst(e){const t=await Promise.all(e.map((async e=>{const t=structuredClone(e);const s="id"in t?{id:t.id,term:t}:{term:t};await A(s,this.opts.app.vocabApi);return s})));this.parent.settings.matrix;const s=structuredClone(this.parent.config.termgroups);const n=s.findIndex((e=>e.name=="Variables"));if(n!==-1){const e=s[n];e.lst.push(...t);this.parent.app.dispatch({type:"plot_nestedEdits",id:this.parent.id,edits:[{nestedKeys:["termgroups",n,"lst"],value:e.lst}]})}else{const e={name:"Variables",lst:t};s.push(e);this.parent.app.dispatch({type:"plot_edit",id:this.parent.id,config:{termgroups:s}})}}setZoomInput(){const e=this.opts.holder.append("div").style("display","inline-block").style("margin-left","50px");const t=this.parent.config.settings.matrix;this.zoomApi=re({holder:e,title:"Zoom factor relative to the ideal column width, as computed for the number of columns versus available screen width",unit:"",width:"80px",settings:{value:1,min:.1,max:10,increment:t.zoomIncrement,step:t.zoomStep||5},callback:e=>{const t=this.parent;t.dimensions;t.settings.matrix;const s=t.getVisibleCenterCell(0);t.app.dispatch({type:"plot_edit",id:t.id,config:{settings:{matrix:{zoomLevel:e,zoomCenterPct:.5,zoomIndex:s.totalIndex,zoomGrpIndex:s.grpIndex}}}})},reset:()=>{this.parent.settings.matrix;this.parent.dimensions;this.parent.app.dispatch({type:"plot_edit",id:this.parent.id,config:{settings:{matrix:{zoomLevel:1,zoomCenterPct:0}}}})}})}setDragToggle(e={}){const t={mouseMode:"select",activeBgColor:"rgb(255, 255, 255)"};e.target.style("cursor","default");const s={opts:Object.assign({},t,e),dom:{selectBtn:e.holder.append("button").attr("aria-label","Click the matrix to select data").style("display","inline-block").style("width","25px").style("height","24.5px").style("background-color",t.activeBgColor).on("click",(()=>i("select"))),grabBtn:e.holder.append("button").attr("aria-label","Click the matrix to drag and move").style("display","inline-block").style("width","25px").style("height","24.5px").on("click",(()=>i("pan")))}};d.arrowPointer(s.dom.selectBtn,{width:14,height:14,transform:"translate(50,50)"});d.grab(s.dom.grabBtn,{width:14,height:14,transform:"translate(30,50)"});const n=this;function i(t){s.opts.mouseMode=t;n.parent.settings.matrix.mouseMode=t;e.target.style("cursor",t=="select"?"default":"grab");s.dom.selectBtn.style("background-color",t=="select"?s.opts.activeBgColor:"");s.dom.grabBtn.style("background-color",t=="pan"?s.opts.activeBgColor:"")}this.dragToggleApi={update(e={}){Object.assign(s.opts,e);i(s.opts.mouseMode)},getSettings(){return{mouseMode:s.opts.mouseMode}}}}setSvgScroll(e){this.svgScrollApi=le({holder:this.parent.dom.scroll,height:e.config.settings.matrix.scrollHeight,callback:(e,t)=>{const s=this.parent;const n=s.settings.matrix;const i=s.dimensions;if(t=="move"){s.dom.seriesesG.attr("transform",`translate(${i.xOffset+i.seriesXoffset-e},${i.yOffset})`);s.clusterRenderer.translateElems(-e,n,i);s.layout.top.attr.adjustBoxTransform(-e);s.layout.btm.attr.adjustBoxTransform(-e);if(s.dom.topDendrogram){s.dom.topDendrogram.attr("transform",`translate(${s.topDendroX-e},0)`)}}else if(t=="up"){const t=s.getVisibleCenterCell(-e);s.app.dispatch({type:"plot_edit",id:s.id,config:{settings:{matrix:{zoomCenterPct:.5,zoomIndex:t.totalIndex,zoomGrpIndex:t.grpIndex}}}})}}})}}function De(e=""){const t=e||this.state.tokenVerificationMessage;if(!t&&this.state.hasVerifiedToken){this.dom.errdiv.style("display","none").html();this.dom.controls.style("display",this.opts.controls?"inline-block":"");this.dom.svg.style("display","");return false}else{this.dom.errdiv.style("display","").html(t||"Requires login");this.dom.controls.style("display","none");this.dom.svg.style("display","none");return true}}function Fe(e){const t=[];const s=this.chartType=="hierCluster"?e.config.termgroups.filter((e=>e.type!="hierCluster")):e.config.termgroups;for(const e of s){t.push(...Ee(e.lst))}if(e.config.divideBy)t.push(ze(structuredClone(e.config.divideBy)));const n={terms:t,filter:e.filter,filter0:e.filter0,maxGenes:e.config.settings.matrix.maxGenes};if(this.chartType=="hierCluster"){n.isHierCluster=1}return n}function Ee(e){const t=structuredClone(e);t.forEach(ze);t.sort(Pe);return t}function ze(e){if(!e?.term)return;delete e.term.category2samplecount;delete e.term.values;return e}function Pe(e,t){const s=e?.$id||e.term?.id||e?.term?.name;const n=t?.$id||t.term?.id||t?.term?.name;return s<n?-1:1}async function Re(e){const t=this.currRequestOpts?.matrix||this.getMatrixRequestOpts(this.state);this.numTerms=t.terms.length;const s=new AbortController;t.signal=s.signal;t.loadingDiv=this.chartType!="hierCluster"&&this.dom.loadingDiv;const[n,i]=await this.api.detectStale((()=>this.app.vocabApi.getAnnotatedSampleData(t,e)),{abortCtrl:s});if(i)throw`stale sequenceId`;this.data=n;this.origData=structuredClone(this.data);this.sampleIdMap={};for(const e of this.data.lst){this.sampleIdMap[e.sample]=e._ref_.label}}function qe(){const e=this;if(!e.config.legendValueFilter.lst.length&&!e.config.legendGrpFilter.lst.length)return;for(const t of e.config.legendGrpFilter.lst){if(t.dt){const s=new Set;for(const n of e.origData.lst){for(const e of Object.values(n)){if(e.values){const n=[];for(const i of e.values){if(!(t.dt.includes(i.dt)&&(!t.origin||i.origin==t.origin))){n.push(i)}else{s.add(i.class)}}e.values=n}}}t.filteredOutCats=[...s];for(const s of Object.values(e.origData.samples)){for(const e of Object.values(s)){if(e.values)e.values=e.values.filter((e=>!(t.dt.includes(e.dt)&&(!t.origin||e.origin==t.origin))))}}}}const t=Object.values(e.data.refs.byTermId).filter((e=>e.term?.type=="geneVariant")).map((e=>e.$id));const s={samples:{},lst:[],refs:e.data.refs};const n=structuredClone(e.config.legendValueFilter);n.lst=n.lst.filter((e=>!e.tvs.legendFilterType||e.tvs.legendFilterType!=="geneVariant_soft"));for(const i of e.origData.lst){const a=K(i,n,t);if(a||e.chartType=="hierCluster"){s.samples[i.sample]=i;s.lst.push(i)}}for(const t of e.config.legendValueFilter.lst){if(t.tvs.legendFilterType!=="geneVariant_soft")continue;const e=t.tvs.values[0];const n=new Set;for(const t of s.lst){for(const s of Object.values(t)){if(s.values){const t=[];for(const i of s.values){if(!(i.dt==e.dt&&(!e.origin||i.origin==e.origin)&&e.mclasslst.includes(i.class))){t.push(i)}else{n.add(i.class)}}s.values=t}}}t.filteredOutCats=[...n];for(const t of Object.values(s.samples)){for(const s of Object.values(t)){if(s.values)s.values=s.values.filter((t=>!(t.dt==e.dt&&(!e.origin||t.origin==e.origin)&&e.mclasslst.includes(t.class))))}}}if(e.chartType!=="hierCluster"&&t.length&&e.app.vocabApi.vocab?.dslabel=="GDC")He(s);e.data=s}function He(e){for(const t of e.lst){let s=true;for(const[n,i]of Object.entries(t)){if(!i.values)continue;const t=e.refs.byTermId[n].term.type;if(t!="geneVariant")continue;if(i.values.length)s=false}if(s){e.lst=e.lst.filter((e=>e.sample!==t.sample));delete e.samples[parseInt(t.sample)]}}return e}var We=Object.freeze({__proto__:null,mayRequireToken:De,getMatrixRequestOpts:Fe,setData:Re,applyLegendValueFilter:qe});function Ke(e){const t=this.state.config.settings.matrix;if(!this.autoDimensions)this.autoDimensions=new Set;if(!t.colw)this.autoDimensions.add("colw");else this.autoDimensions.delete("colw");if(!t.rowh)this.autoDimensions.add("rowh");else this.autoDimensions.delete("rowh");const s=this.settings.matrix;this.computedSettings={useCanvas:this.sampleOrder.length>t.svgCanvasSwitch};if(s.availContentWidth){this.availContentWidth=s.availContentWidth}else{let t=this.dom.contentNode.getBoundingClientRect().width;if(t<600)t=window.document.body.clientWidth;const n=this.getMaxGrpLabelWidth();const i=Math.max(65,n);const a=this.state.config.settings.hierCluster?.xDendrogramHeight||0;this.availContentWidth=t-i-s.margin.right-e-a}if(this.autoDimensions.has("colw")){const e=s.colgspace*Math.max(0,this.visibleSampleGrps.size-1);const t=this.sampleOrder.length*s.colspace+e;const n=(this.availContentWidth-t)/this.sampleOrder.length;const i=Math.max(s.colwMin,Math.min(n,s.colwMax));const a=(this.availContentWidth-e)/this.sampleOrder.length;const o=Math.max(s.colwMin,Math.min(a,s.colwMax));if(s.zoomLevel<1||o*s.zoomLevel<2){this.computedSettings.colw=a;this.computedSettings.colspace=0}else{this.computedSettings.colw=i;this.computedSettings.colspace=s.colspace}}const n=this.state.config.settings.hierCluster?.yDendrogramHeight||0;const i=screen.availHeight-n;this.computedSettings.clusterRowh=Math.min(s.rowhMax,Math.max(s.rowhMin,Math.floor(i/this.numClusterTerms)));h(this.settings.matrix,this.computedSettings)}function Xe(){const e=this.settings.matrix;const t=this.dom.svg.append("g").attr("opacity",.01);let s=0;for(const n of this.termGroups){const i=!n.name?"":n.name.length<=e.termGrpLabelMaxChars?n.name:n.name.slice(0,e.termGrpLabelMaxChars)+"…";const a=t.append("text").text(i).attr("font-size",12);const o=a.node().getBBox();if(s<o.width)s=o.width}t.remove();return s}function Ue(){const e=this.settings.matrix;this.cnvValues={};const t=e.transpose?e.colw:e.rowh;const s={};const n={sampleGrpByName:{},termGrpByName:{}};let i=0;for(const a of this.termOrder){const o=new Set;a.counts={samples:0,hits:0};const l=[];a.counts.subGroupCounts={};for(const e of this.sampleGroups){a.counts.subGroupCounts[e.name]={samplesTotal:0,classes:{}};if(a.tw.term.type=="geneVariant"){a.counts.subGroupCounts[e.name].samplesNotTested=0}}if(!n.termGrpByName[a.grp.name||""]){const t=a.grp.name||"";a.grp.label=t.length<=e.termGrpLabelMaxChars?t:t.slice(0,e.termGrpLabelMaxChars)+"…";n.termGrpByName[t]=a.grp.label}for(const t of this.sampleOrder){if(o.has(t.row.sample))continue;const s=t.grp.name||"";if(!(s in n.sampleGrpByName)){t.grp.label=s.length<=e.sampleGrpLabelMaxChars?s:s.slice(0,e.sampleGrpLabelMaxChars)+"…";if(this.config.divideBy)t.grp.label+=` (${t.grp.lst.length})`;n.sampleGrpByName[s]=t.grp.label}const i=t.row._ref_.label||"";t.label=i.length<=e.collabelmaxchars?i:i.slice(0,e.collabelmaxchars)+"…";const r=t.row[a.tw.$id];if(!r)continue;const{filteredValues:d,countedValues:c,renderedValues:p}=this.classifyValues(r,a.tw,a.grp,this.settings.matrix,t.row);r.filteredValues=d;r.countedValues=c;r.renderedValues=p;if(r.countedValues?.length){a.counts.samples+=1;a.counts.hits+=r.countedValues.length;if(a.tw.q?.mode=="continuous"){const e=r.value;if(!a.tw.term.values?.[e]?.uncomputable){if(!("minval"in a.counts)||a.counts.minval>e)a.counts.minval=e;if(!("maxval"in a.counts)||a.counts.maxval<e)a.counts.maxval=e}}if(a.tw.term.type=="geneVariant"&&r.values){for(const t of r.values){if(t.dt==g&&"value"in t&&!e.ignoreCnvValues){const e=t.value;if(e<0){if(!("minLoss"in this.cnvValues)||this.cnvValues["minLoss"]>e)this.cnvValues["minLoss"]=e;if(!("maxLoss"in this.cnvValues)||this.cnvValues["maxLoss"]<e)this.cnvValues["maxLoss"]=e}else{if(!("minGain"in this.cnvValues)||this.cnvValues["minGain"]>e)this.cnvValues["minGain"]=e;if(!("maxGain"in this.cnvValues)||this.cnvValues["maxGain"]<e)this.cnvValues["maxGain"]=e}}}}}if(a.tw.q?.mode=="continuous"&&p?.length&&a.grp.type!="hierCluster"){l.push(a.tw.term.valueConversion?a.tw.term.valueConversion.scaleFactor*(p[0].value||p[0]):p[0].value||p[0])}const m=a.counts.subGroupCounts?.[t.grp.name];const u=r.filteredValues.filter((e=>{if(a.tw.term.type=="geneVariant"){if(e.class=="WT"||e.class=="Blank")return false}return true}));if(u.length){if(a.tw.term.type=="geneVariant"){let t=false;for(const s of u){if(e.geneVariantCountSamplesSkipMclass.includes(s.class)){if(!m.notTestedClasses)m.notTestedClasses={};if(!(s.class in m.notTestedClasses))m.notTestedClasses[s.class]=1;else m.notTestedClasses[s.class]+=1}else if(!(s.class in m.classes)){if(!t){m.samplesTotal+=1;t=true}m.classes[s.class]=1}else{if(!t){m.samplesTotal+=1;t=true}m.classes[s.class]+=1}}}else{m.samplesTotal+=1;for(const e of u){if(!(e in m.classes))m.classes[e]=1;else m.classes[e]+=1}}}if(r.filteredValues?.length&&a.tw.term.type=="geneVariant"){const e=r.filteredValues.every((e=>e.class=="Blank"));if(e){m.samplesNotTested+=1}}}a.label=a.tw.label||a.tw.term.name;if(a.label.length>e.rowlabelmaxchars)a.label=a.label.slice(0,e.rowlabelmaxchars-1)+"…";const r=this.config?.settings.hierCluster?.termGroupName;if(e.samplecount4gene&&a.tw.term.type.startsWith("gene")&&(!r||a.grp.name!==r)){const t=e.samplecount4gene==="abs"?a.counts.samples:(100*a.counts.samples/this.sampleOrder.length).toFixed(1)+"%";a.label=`${a.label} (${t})`}if(a.grp.type!=="hierCluster"&&a.tw.q?.mode=="continuous"){const t=a.tw.term.valueConversion;if(t){a.counts.minval*=t.scaleFactor;a.counts.maxval*=t.scaleFactor}if(l.length&&a.tw.q.convert2ZScore){const e=l.reduce(((e,t)=>e+t),0)/l.length;const t=Math.sqrt(l.reduce(((t,s)=>t+Math.pow(s-e,2)),0)/l.length);a.mean=e;a.std=t;a.counts.minval=(a.counts.minval-e)/t;a.counts.maxval=(a.counts.maxval-e)/t}if(!a.tw.settings)a.tw.settings={};if(!a.tw.settings.barh)a.tw.settings.barh=e.barh;if(!("gap"in a.tw.settings))a.tw.settings.gap=4;const s=a.tw.settings.barh;const n=Math.abs(a.counts.minval);const i=a.counts.minval<0&&a.counts.maxval>0;const o=a.counts.minval>=0?1:a.counts.maxval/(n+a.counts.maxval);a.counts.posMaxHt=o*s;const r=[a.counts.maxval,a.counts.minval];a.scales={tickValues:r,full:x().domain(r).range([1,s])};if(a.counts.maxval>=0){const e=i?0:a.counts.minval;a.scales.pos=x().domain([e,a.counts.maxval]).range([1,a.counts.posMaxHt])}if(a.counts.minval<0){const e=i?0:a.counts.maxval;a.scales.neg=x().domain([e,a.counts.minval]).range([1,s-a.counts.posMaxHt])}}a.totalHtAdjustments=i;a.rowHt=a.grp.type=="hierCluster"?e.clusterRowh:a.tw.settings?a.tw.settings.barh+2*a.tw.settings.gap:t;const d=a.rowHt-t-(a.grp.type=="hierCluster"?e.rowspace:0);i+=d;a.cumulativeAdjustment=i;if(!(a.visibleGrpIndex in s))s[a.visibleGrpIndex]={htAdjustment:0};s[a.visibleGrpIndex].htAdjustment+=d;a.grpTotals=s[a.visibleGrpIndex]}for(const e of this.termOrder){if(e.tw.term.type=="geneVariant"){if("maxLoss"in this.cnvValues||"maxGain"in this.cnvValues){e.scales={loss:ne,gain:ae,maxLoss:this.cnvValues.maxLoss,maxGain:this.cnvValues.maxGain,minLoss:this.cnvValues.minLoss,minGain:this.cnvValues.minGain}}}}}function Ze(){const e=this.settings.matrix;const[t,s]=!e.transpose?["sample","term"]:["term","sample"];const[n,i]=e.collabelpos=="top"?["","Grp"]:["Grp",""];const[a,o]=e.rowlabelpos=="left"?["","Grp"]:["Grp",""];const l=t+n;const r=t+i;const d=s+a;const c=s+o;this.samples=this.sampleOrder;this.sampleGrps=this.sampleOrder.filter((e=>e.index===0));this.terms=this.termOrder;this.termGrps=this.termOrder.filter((e=>e.index===0));const p={};const m={top:l,btm:r,left:d,right:c};for(const t in m){const s=m[t];const n=t[0].toUpperCase()+t.slice(1);p[t]={prefix:s,data:this[`${s}s`],offset:e[`${s}LabelOffset`],box:this.dom[`${s}LabelG`],key:this[`${s}Key`],label:this[`${s}Label`],render:this[`render${n}Label`],isGroup:m[t].includes("Grp")}}const u=p.top.offset+e.margin.top+e.scrollHeight;const g=p.left.offset+e.margin.left;this.setAutoDimensions(g);this.setLabelsAndScales();const h=Math.max(e.colwMin,Math.min(e.colwMax,e.colw*e.zoomLevel));const f=h+e.colspace;const y=this[`${t}s`].length;const b=e.rowh+e.rowspace;const x=this[`${s}s`].length;const v=y*(h+e.colspace)+this[`${t}Grps`].length*e.colgspace+(this[`${t}s`].slice(-1)[0]?.totalHtAdjustments||0);const w=Math.min(v,this.availContentWidth);const C=this[`${s}s`].slice(-1)[0];const k=x*b+(this[`${s}Grps`].length-1)*e.rowgspace+(C?.cumulativeAdjustment||0);const S=Math.min(Math.max(h+e.colspace-2*e.collabelpad-e.colspace,e.minLabelFontSize),e.maxLabelFontSize);const $=n=="Grp"?e.grpLabelFontSize:S;p.top.attr={boxTransform:`translate(${g}, ${u-e.collabelgap})`,adjustBoxTransform:t=>p.top.box.attr("transform",`translate(${g+t}, ${u-e.collabelgap})`),labelTransform:"rotate(-90)",labelAnchor:"start",labelGY:0,labelGTransform:this[`col${n}LabelGTransform`],fontSize:$,textpos:{coord:"y",factor:-1},axisFxn:X};if(p.top.prefix=="sample")p.top.display=this.chartType!=="hierCluster"&&h>=e.minLabelFontSize?"":"none";const M=i=="Grp"?e.grpLabelFontSize:S;p.btm.attr={boxTransform:`translate(${g}, ${u+k+e.collabelgap})`,adjustBoxTransform:t=>p.btm.box.attr("transform",`translate(${g+t}, ${u+k+e.collabelgap})`),labelTransform:"rotate(-90)",labelAnchor:"end",labelGY:0,labelGTransform:this[`col${i}LabelGTransform`],fontSize:M,textpos:{coord:"y",factor:1},axisFxn:U};if(p.btm.prefix=="sample")p.btm.display=h>=e.minLabelFontSize?"":"none";const T=a=="Grp"?e.grpLabelFontSize:Math.max(e.rowh+e.rowspace-2*e.rowlabelpad-e.rowspace,e.minLabelFontSize);p.left.attr={boxTransform:`translate(${g-e.rowlabelgap}, ${u})`,labelTransform:"",labelAnchor:"end",labelGX:0,labelGTransform:this[`row${a}LabelGTransform`],fontSize:T,textpos:{coord:"x",factor:-1},axisFxn:Z};const G=o=="Grp"?e.grpLabelFontSize:Math.max(e.rowh+e.rowspace-2*e.rowlabelpad,e.minLabelFontSize);p.right.attr={boxTransform:`translate(${g+w+e.rowlabelgap}, ${u})`,labelTransform:"",labelAnchor:"start",labelGX:0,labelGTransform:this[`row${o}LabelGTransform`],fontSize:G,textpos:{coord:"x",factor:1},axisFxn:Y};this.dom.sampleLabelsPG.attr("clip-path",e.transpose?"":`url(#${this.seriesClipId})`);this.dom.termLabelsPG.attr("clip-path",e.transpose?`url(#${this.seriesClipId})`:"");this.layout=p;if(!e.zoomCenterPct){e.zoomCenterPct=.5;e.zoomIndex=Math.round(e.zoomCenterPct*w/f);e.zoomGrpIndex=this.sampleOrder[e.zoomIndex]?.grpIndex||0}const I=e.zoomCenterPct*w;const V=e.zoomIndex*f+e.zoomGrpIndex*e.colgspace;const O=y*f+(this[`${t}Grps`].length-1)*e.colgspace;const _=e.zoomLevel<=1&&w>=O?0:Math.max(I-V,w-O);const L=(e.imgWMax>O?O:e.imgWMax)-1e-7;const N=.5*L;const B=Math.max(0,V+N-O);const A=Math.max(0,V-Math.min(N,L)-B);const j=e.zoomLevel<=1&&w>=O?0:A;const D=L+j;this.dimensions={xMin:j,xMax:D,dx:f,dy:b,xOffset:g,yOffset:u,mainw:w,mainh:k,colw:h,zoomedMainW:O,seriesXoffset:_>0?0:_,maxMainW:Math.max(v,this.availContentWidth),imgW:L,pxw:1/window.devicePixelRatio}}var Ye=Object.freeze({__proto__:null,setAutoDimensions:Ke,getMaxGrpLabelWidth:Xe,setLabelsAndScales:Ue,setLayout:Ze});function Je(e,t,s,n,i,a,o,l,r,d,c,p){const m=s.key;const u=t.term.values||{};e.label="label"in s?s.label:u[m]?.label?u[m].label:m;e.fill=s.color||u[s.key]?.color;e.order=a.ref.bins?a.ref.bins.findIndex((e=>e.name==m)):0;if(t.q?.mode=="continuous"){if(!t.settings)t.settings={};if(!t.settings.barh)t.settings.barh=i.barh;if(!("gap"in t.settings))t.settings.gap=4;const n=t.term.values?.[e.key];if(n?.uncomputable){e.x=e.totalIndex*d+e.grpIndex*i.colgspace;e.y=r*p;e.height=t.settings.barh;e.fill="transparent";t.legend?.group||t.$id;return}e.fill="#555";if(i.transpose){e.height=a.scale(e.key);e.x=t.settings.gap}else{const n=e.term.valueConversion;let o=n?e.key*n.scaleFactor:e.key;if(t.q.convert2ZScore){o=(o-a.mean)/a.std;e.fill=o>0?"#FF6666":"#6666FF";e.zscoreLabel=` (z-score: ${o.toFixed(2)})`}e.label="label"in s?s.label:u[m]?.label?u[m].label:t.term.unit?`${e.key.toFixed(2)} ${t.term.unit}`:e.key.toFixed(2);e.height=o>=0?a.scales.pos(o):a.scales.neg(o);e.x=e.totalIndex*d+e.grpIndex*i.colgspace;e.y=o>=0?a.counts.posMaxHt+a.tw.settings.gap-e.height:a.counts.posMaxHt+a.tw.settings.gap;e.convertedValueLabel=!n?"":v(e.key,n.fromUnit,n.toUnit,n.scaleFactor)}}else{e.x=e.totalIndex*d+e.grpIndex*i.colgspace;e.y=r*p;const s=t.legend?.group||t.$id;return{ref:a.ref,group:s,value:m,entry:{key:m,label:e.label,fill:e.fill}}}}function Qe(e,t,s,n,i,a,o,l,r,d,c,p){const m=t.q?.mode=="continuous"?s.value:s.key;e.key=m;e.label=t.q?.mode=="continuous"?t.term.unit?`${m} ${t.term.unit}`:m:t.term.values?.[m].label?t.term.values?.[m].label:"Exit code: "+m;e.fill=m==1?"#a1a3a6":"#a3c88b";e.order=0;if(t.q?.mode=="continuous"){if(!t.settings)t.settings={};if(!t.settings.barh)t.settings.barh=i.barh;if(!("gap"in t.settings))t.settings.gap=4;e.exitCodeKey=t.term.values?.[s.key].label||"Exit code: "+s.key;e.fill=s.key==1?"#a1a3a6":"#a3c88b";if(i.transpose){e.height=a.scale(e.key);e.x=t.settings.gap}else{const s=e.term.valueConversion;let n=s?e.key*s.scaleFactor:e.key;if(t.q.convert2ZScore){n=(n-a.mean)/a.std;e.zscoreLabel=` (z-score: ${n.toFixed(2)})`}e.label=t.term.unit?`${e.key.toFixed(2)} ${t.term.unit}`:e.key.toFixed(2);e.height=n>=0?a.scales.pos(n):a.scales.neg(n);e.x=e.totalIndex*d+e.grpIndex*i.colgspace;e.y=n>=0?a.counts.posMaxHt+a.tw.settings.gap-e.height:a.counts.posMaxHt+a.tw.settings.gap;e.convertedValueLabel=!s?"":v(e.key,s.fromUnit,s.toUnit,s.scaleFactor)}}else{const n=e.term.valueConversion;e.timeToEventKey=n?v(s.value,n.fromUnit,n.toUnit,n.scaleFactor):s.value.toFixed(2);e.x=e.totalIndex*d+e.grpIndex*i.colgspace;e.y=r*p;const o=t.legend?.group||t.$id;return{ref:a.ref,group:o,value:m,entry:{key:m,label:e.label,fill:e.fill}}}}function et(e,t,s,n,i,a,o,l,r,d,c,p){const m=t.term.values||{};const u=s.key;e.label="label"in s?s.label:m[u]?.label?m[u].label:u;e.fill=s.color||m[u]?.color;e.x=e.totalIndex*d+e.grpIndex*i.colgspace;e.y=r*p;const g=t.legend?.group||t.$id;return{ref:a.ref,group:g,value:s.key,entry:{key:u,label:e.label,fill:e.fill}}}function tt(e,t,s,n,i,a,o,l,r,d,c,m){const h=s.renderedValues||s.filteredValues||s.values||[s.value];const f=t.q?.values&&t.q?.values[n.class]?.color;if(t.q?.type=="predefined-groupset"||t.q?.type=="custom-groupset"){e.label=n;e.fill=["Mutated","Protein-changing","Truncating"].includes(n)?"#FF0000":["Wildtype","Rest"].includes(s.key)?"#0000FF":s.key=="Not tested"?"#00FF00":"#000000";e.value={value:n,dt:t.q.dt,origin:t.q.origin};e.x=e.totalIndex*d+e.grpIndex*i.colgspace;e.y=r*m;const l=t.legend?.group||t.q.origin?`${t.q.origin[0].toUpperCase()+t.q.origin.slice(1)} ${o.dt2label[t.q.dt]}`:o.dt2label[t.q.dt];return{ref:a.ref,group:l,value:s.key,order:-2,entry:{key:s.key,label:e.label,fill:e.fill,dt:t.q.dt,origin:t.q.origin}}}else{e.label=n.label||o.mclass[n.class].label;e.fill=o.getValueColor?.(n.value)||f||n.color||o.mclass[n.class]?.color;e.class=n.class;e.value=n;const s=o.dimensions.colw;if(i.cellEncoding==""){e.height=i.rowh/h.length;e.width=s;e.x=e.totalIndex*d+e.grpIndex*i.colgspace;e.y=r*m}else if(n.dt==u||n.dt==y){if(i.cellEncoding=="single"){e.height=i.rowh;e.width=s;e.x=e.totalIndex*d+e.grpIndex*i.colgspace;e.y=0}else{const t=3;e.height=i.rowh/t;e.width=s;e.x=e.totalIndex*d+e.grpIndex*i.colgspace;e.y=r*.33333}}else if(n.dt==g||n.dt==p){e.height=i.rowh;e.width=s;e.x=e.totalIndex*d+e.grpIndex*i.colgspace;e.y=0}else{throw`cannot set cell props for dt='${n.dt}'`}if(n.class=="Blank"||n.class=="WT"){e.label=`${o.dt2label[n.dt]} ${e.label}`}const l=o.state.termdbConfig.assayAvailability?.byDt;const c=n.class=="CNV_loss"?-2:n.class.startsWith("CNV_")?-1:0;if(n.dt==g){if(a.scales&&n.class.startsWith("CNV_")){a.scales.max;const{maxLoss:t,maxGain:s,minLoss:i,minGain:o}=a.scales;n.scaledValue=n.value<0?n.value/i:n.value/s;e.fill=n.value<0?a.scales.loss(n.scaledValue):a.scales.gain(n.scaledValue);return{ref:a.ref,group:"CNV",value:n.class,order:-1,entry:{key:n.class,label:e.label,scale:n.class=="CNV_loss"?a.scales.loss:a.scales.gain,domain:n.class=="CNV_loss"?[0,-i]:[0,s],minLabel:0,maxLabel:n.class=="CNV_loss"?i:s,order:c,dt:n.dt,origin:n.origin}}}else{const t="CNV";return{ref:a.ref,group:t,value:n.class,order:-1,entry:{key:n.class,label:e.label,fill:e.fill,order:c,dt:n.dt,origin:n.origin}}}}else if(n.dt==y&&l?.[y]){const t="Fusion RNA";return{ref:a.ref,group:t,value:n.class,order:-1,entry:{key:n.class,label:e.label,fill:e.fill,order:c,dt:n.dt,origin:n.origin}}}else if(n.dt==b&&l?.[b]){const t="Structural Variation";return{ref:a.ref,group:t,value:n.class,order:-1,entry:{key:n.class,label:e.label,fill:e.fill,order:c,dt:n.dt,origin:n.origin}}}else if(n.dt==p){return{ref:a.ref,group:o.config.settings.hierCluster?.termGroupName||"Gene Expression",value:n.class,order:-1,entry:{key:n.class,label:"",scale:o.geneExpValues.scale,domain:[0,.5,1],minLabel:o.geneExpValues.min,maxLabel:o.geneExpValues.max,order:c,dt:n.dt,origin:n.origin}}}else{const s=o.settings.matrix.controlLabels;const i=t.legend?.group||(n.origin?`${n.origin[0].toUpperCase()+n.origin.slice(1)} ${s.Mutations}`:s.Mutations);return{ref:a.ref,group:i,value:n.class,order:-2,entry:{key:n.class,label:e.label,fill:e.fill,order:c,dt:n.dt,origin:n.origin}}}}}function st(e,t,s,n,i,a,o,l,r,d,c,p){s.renderedValues||s.filteredValues||s.values||[s.value];e.label=n.value;e.fill=o.getValueColor?.(n.value);e.value=n;const m=o.dimensions.colw;e.height=i.clusterRowh;e.width=m;e.x=e.totalIndex*d+e.grpIndex*i.colgspace;e.y=r*p;const u=o.config.settings.hierCluster?.termGroupName?o.config.settings.hierCluster?.termGroupName:t.term.type=="geneExpression"?"Expression":t.term.type=="metaboliteIntensity"?"Intensity":"Heatmap color scale";return{ref:a.ref,group:u,order:-1,entry:{label:"",scale:o.hierClusterValues.scale,domain:w[o.settings.hierCluster.colorScale].domain,minLabel:o.hierClusterValues.min,maxLabel:o.hierClusterValues.max,order:0,dt:n.dt}}}function nt(e,t,s){const n=Object.assign({},e);n.fill=t.cellbg;n.height=t.rowh;n.width=s.colw;n.x=n.totalIndex*s.dx+n.grpIndex*t.colgspace;n.y=0;return n}const it={categorical:et,condition:et,integer:Je,float:Je,survival:Qe,geneVariant:tt,hierCluster:st,[N.GENE_EXPRESSION]:Je,[N.METABOLITE_INTENSITY]:Je};const at={geneVariant:ot,integer:lt,float:lt,categorical:rt,condition:rt,survival:lt,[N.GENE_EXPRESSION]:lt,[N.METABOLITE_INTENSITY]:lt};function ot(e,t,s,n){if(e.find((e=>e.value.dt==g)))return;const i=Object.assign({},t);i.fill=s.cellbg;i.height=s.rowh;i.width=n.colw;i.x=i.totalIndex*n.dx+i.grpIndex*s.colgspace;i.y=0;return i}function lt(e,t,s,n){const i=t.tw.q;if(i.mode!="continuous"){if(e.length)return;rt(e,t,s,n)}else{if(i?.mode!="continuous")return;const e=t.tw.settings;const a=e?e.barh+2*e.gap:s.rowh;if(t.height>=a)return;const o=Object.assign({},t);o.fill=s.cellbg;o.height=a||s.rowh;o.width=n.colw;o.x=o.totalIndex*n.dx+o.grpIndex*s.colgspace;o.y=0;return o}}function rt(e,t,s,n){if(e.length)return;const i=Object.assign({},t);i.fill=s.cellbg;i.height=s.rowh;i.width=n.colw;i.x=i.totalIndex*n.dx+i.grpIndex*s.colgspace;i.y=0;return i}function dt(e){const t=this.settings.matrix;const s=[];const{colw:n,dx:i,dy:a,xMin:o,xMax:l}=this.dimensions;const r=this.config.divideBy||{};const d="id"in r?r.id:r.name;const c={};this.colorScaleByTermId={};for(const e of this.termOrder){const r=e.tw.$id;const p="id"in e.tw.term?e.tw.term.id:e.tw.term.name;const m=p===d;const u=[];const g=e.grp.type=="hierCluster"?t.clusterRowh:a;const h=e.grp.type=="hierCluster"?0:e.totalHtAdjustments;const f=t.transpose?0:e.totalIndex*g+e.visibleGrpIndex*t.rowgspace+h;const y=(e.tw.settings?.gap||0)+f;const b={t:e,tw:e.tw,cells:[],y:f,hoverY0:y,hoverY1:y+(e.tw.settings?.barh||g)};for(const s of this.unfilteredSampleOrder){const{totalIndex:d,grpIndex:g,row:h}=s;b.x=!t.transpose?0:e.totalIndex*i+e.visibleGrpIndex*t.colgspace;const y=h[r];const x={s:s,sample:h.sample,tw:e.tw,term:e.tw.term,termid:p,$id:r,totalIndex:d,grpIndex:g,row:h,t:e,seriesY:f};if(!y){if(!s.grp.isExcluded&&(t.useCanvas||s.grp)){const e=nt(x,t,this.dimensions);b.cells.push(e)}continue}const v=y.key;const w=y.filteredValues||y.values||[y.value];const C=t.cellEncoding=="oncoprint"?1:w.length;const k=!t.transpose?t.rowh/C:n;const S=!t.transpose?n:n/w.length;const $=[];if(!y||!y.renderedValues?.length){if(!s.grp.isExcluded&&(t.useCanvas||s.grp)){const e=nt(x,t,this.dimensions);b.cells.push(e)}continue}for(const[n,d]of w.entries()){const p=Object.assign({key:v,siblingCells:$},x);p.valueIndex=n;let u;if(typeof e.tw.setCellProps=="function"){u=e.tw.setCellProps(p,y,d,t,e,this,S,k,i,a,n)}else{const s=e.grp.type=="hierCluster"?it["hierCluster"]:e.tw.term.type=="geneVariant"&&(e.tw?.q?.type=="predefined-groupset"||e.tw?.q?.type=="custom-groupset")?it["categorical"]:it[e.tw.term.type];u=s(p,e.tw,y,d,t,e,this,S,k,i,a,n)}if(!t.useCanvas&&(p.x+p.width<o||p.x-p.width>l))continue;if(u){for(const e of[c,s.grp.legendGroups]){if(!e)continue;if(!e[u.group]){e[u.group]={ref:u.ref,values:{},order:u.order,$id:r,origin:u.entry.origin};if(u.entry.dt)e[u.group].dt=[u.entry.dt]}const t=e[u.group];if(t.dt&&!t.dt.includes(u.entry.dt))t.dt.push(u.entry.dt);const n=u.entry.origin?u.entry.origin+u.value:u.value;if(!t.values[n]){t.values[n]=JSON.parse(JSON.stringify(u.entry));if(u.entry.scale)t.values[n].scale=u.entry.scale}if(!t.values[n].samples)t.values[n].samples=new Set;t.values[n].samples.add(h.sample);if(m){t.values[u.value].isExcluded=s.grp.isExcluded}}}if(!s.grp.isExcluded){if(y.renderedValues.includes(d))b.cells.push(p);$.push(p)}}if(t.showGrid=="rect"&&!s.grp.isExcluded){const s=e.grp.type=="hierCluster"?nt(x,t,this.dimensions):at[e.tw.term.type]?.($,x,t,this.dimensions);if(s)u.push(s)}}if(u.length)b.cells.unshift(...u);if(b.cells.length)s.push(b)}ct(c,this);this.legendData=this.getLegendData(c,e.refs,this);for(const t of this.sampleGroups){t.legendData=this.getLegendData(t.legendGroups,e.refs,this)}return s}function ct(e,t){for(const s of t.config.legendValueFilter.lst){if(s.tvs.term.type=="categorical"&&!e[s.tvs.term.$id]){e[s.tvs.term.$id]={ref:{},values:{},$id:s.tvs.term.$id}}else if(s.tvs.term.type=="geneVariant"&&!e[s.legendGrpName]){e[s.legendGrpName]={ref:{},values:{},dt:[s.tvs.values[0].dt],origin:s.tvs.values[0].origin}}else if((s.tvs.term.type=="integer"||s.tvs.term.type=="float")&&!e[s.tvs.term.$id]){e[s.tvs.term.$id]={ref:{},values:{},$id:s.tvs.term.$id}}}}var pt=Object.freeze({__proto__:null,getSerieses:dt});function mt(e,t,s){const n=this.settings.matrix;const i=[];const a=this.config.divideBy||{};const o=a&&"id"in a?a.id:a.name;for(const t in e){const l=e[t];if(t=="Consequences"){for(const e of this.config.legendValueFilter.lst){if(e.tvs.term.type!=="geneVariant")continue;if(e.legendGrpName!=t)continue;if(e.tvs.legendFilterType=="geneVariant_soft"&&e.filteredOutCats.length==0){continue}for(const t of e.tvs.values){for(const n of t.mclasslst){const i=t.origin?t.origin+n:n;l.values[i]={key:n,dt:t.dt,origin:t.origin,label:t.label||s.mclass[n].label,fill:t.color||s.mclass[n]?.color,order:n=="CNV_loss"?-2:n.startsWith("CNV_")?-1:0,crossedOut:e.tvs.legendFilterType=="geneVariant_hard"?true:false,greyedOut:e.tvs.legendFilterType=="geneVariant_soft"?true:false}}}}const e=Object.keys(l.values);if(!e.length)continue;i.unshift({name:"Consequences",order:l.order,$id:l.$id,dt:l.dt,origin:l.origin,items:e.map(((e,t)=>{const s=l.values[e];const i=s.samples?.size;return{termid:"Consequences",key:s.key,text:this.getLegendItemText(s,i,{},n),color:s.fill,order:t,border:"1px solid #ccc",count:i,isLegendItem:true,dt:s.dt,crossedOut:s.crossedOut,greyedOut:s.greyedOut,origin:s.origin}}))});i[0].items.sort(((e,t)=>e.text<t.text?-1:1));continue}const r=t==o?{tw:a}:this.termOrder.find((e=>e.tw.$id==t||e.tw.legend?.group==t))||{tw:{term:{id:t,name:t,type:t==="CNV"?"geneVariant":""}}};for(const e of this.config.legendValueFilter.lst){const n=r.tw.legend?.group||r.tw.label||r.tw.term.name;if(e.legendGrpName!=t&&e.legendGrpName!=n&&e.tvs.term.name!=n)continue;if(e.tvs.term.type=="geneVariant"){for(const t of e.tvs.values){if(l.dt&&!l.dt.includes(t.dt))l.dt.push(t.dt);if(e.tvs.legendFilterType=="geneVariant_soft"&&e.filteredOutCats.length==0){continue}for(const n of t.mclasslst){const i=t.origin?t.origin+n:n;l.values[i]={key:n,dt:t.dt,origin:t.origin,label:t.label||s.mclass[n].label,fill:t.color||s.mclass[n]?.color,order:n=="CNV_loss"?-2:n.startsWith("CNV_")?-1:0,crossedOut:e.tvs.legendFilterType=="geneVariant_hard"?true:false,greyedOut:e.tvs.legendFilterType=="geneVariant_soft"?true:false}}}}else{if(j(e.tvs.term)){if(r.ref?.bins){for(const t of e.tvs.ranges){const e=r.ref.bins;l.values[t.name]={key:t.name,label:e?.find((e=>e.name==t.name))?.name||t.name,fill:e?.find((e=>e.name==t.name))?.color,crossedOut:true}}}}else if(e.tvs.term.type=="survival"){for(const t of e.tvs.values){const e=r.tw.term.values;l.values[t.key]={key:t.key,label:e?.[t.key]?.label||"Exit code: "+t.key,fill:t.key==1?"#ff7f0e":"#1f77b4",crossedOut:true}}}else{for(const t of e.tvs.values){const e=r.tw.term.values;l.values[t.key]={key:t.key,label:e?.[t.key]?.label||t.key,fill:e?.[t.key]?.color,crossedOut:true}}}}}const d=Object.keys(l.values).sort();const c=Object.values(l.values).find((e=>e.scale));if(c){const e=n.legendGrpLabelMaxChars||26;i.push({name:t.length<e?t:t.slice(0,e)+"...",order:l.order,$id:l.$id,dt:l.dt,origin:l.origin,hasScale:c,items:d.map(((e,s)=>{const i=l.values[e];const a=i.samples?.size;if(i.scale){return{termid:t,key:i.key,text:this.getLegendItemText(i,a,r,n),width:100,scale:i.scale,domain:i.domain,minLabel:i.minLabel,maxLabel:i.maxLabel,order:"order"in i?i.order:s,count:a,isLegendItem:true,dt:i.dt,crossedOut:i.crossedOut,greyedOut:i.greyedOut,origin:i.origin}}else{return{termid:t,key:i.key,text:this.getLegendItemText(i,a,r,n),color:i.fill||this.colorScaleByTermId[t](e),order:"order"in i?i.order:s,count:a,isLegendItem:true,dt:i.dt,crossedOut:i.crossedOut,greyedOut:i.greyedOut,origin:i.origin}}}))})}else{const e=t;const s=r.tw.term;const a=l.ref;if(a.bins)d.sort(((e,t)=>a.bins.findIndex((t=>t.name===e))-a.bins.findIndex((e=>e.name===t))));else if(a.keyOrder)d.sort(((e,t)=>a.keyOrder.indexOf(e)-a.keyOrder.indexOf(t)));if(!this.colorScaleByTermId[e])this.colorScaleByTermId[e]=d.length<11?C(k):C(J);const o=r.tw.legend?.group||r.tw.label||s.name;const c=n.legendGrpLabelMaxChars||26;i.push({name:o.length<c?o:o.slice(0,c)+"...",order:l.order,$id:l.$id,dt:l.dt,origin:l.origin,items:d.map(((i,a)=>{const o=l.values[i];const d=o.samples?.size;return{$id:t,termid:s.id||s.name,key:o.key,text:this.getLegendItemText(o,d,r,n),color:r.scale||o.fill||this.colorScaleByTermId[e](i),order:"order"in o?o.order:a,count:d,isExcluded:o.isExcluded,isLegendItem:true,dt:o.dt,crossedOut:o.crossedOut,greyedOut:o.greyedOut,origin:o.origin}}))})}}for(const e of s.config.legendGrpFilter.lst){if(e.dt.length==1&&e.dt[0]==4&&!i.filter((e=>e.dt))?.find((e=>e.dt.length==1&&e.dt[0]==4))){i.push({name:"CNV",dt:e.dt,origin:e.origin,crossedOut:true,items:e.filteredOutCats.map((t=>({dt:4,termid:"CNV",origin:e.origin,key:t,text:s.mclass[t].label,color:s.mclass[t]?.color,isLegendItem:true})))})}else if(e.dt.includes(u)){const t=s.settings.matrix.controlLabels;const n=e.origin?`${e.origin[0].toUpperCase()+e.origin.slice(1)} ${t.Mutations}`:t.Mutations;if(!i.filter((e=>e.dt))?.find((t=>t.dt.includes(u)&&t.origin==e.origin))){i.push({name:n,dt:e.dt,origin:e.origin,crossedOut:true,items:e.filteredOutCats.map((t=>({dt:s.mclass[t].dt,origin:e.origin,termid:n,key:t,text:s.mclass[t].label,color:s.mclass[t]?.color,isLegendItem:true})))})}}else if(e.dt.length==1&&e.dt[0]==2&&!i.filter((e=>e.dt))?.find((e=>e.dt.length==1&&e.dt[0]==2))){i.push({name:"Fusion RNA",dt:e.dt,origin:e.origin,crossedOut:true,items:e.filteredOutCats.map((t=>({dt:2,origin:e.origin,termid:"Fusion RNA",key:t,text:s.mclass[t].label,color:s.mclass[t]?.color,isLegendItem:true})))})}else if(e.dt.length==1&&e.dt[0]==5&&!i.filter((e=>e.dt))?.find((e=>e.dt.length==1&&e.dt[0]==5))){i.push({name:"Structural Variation",dt:e.dt,origin:e.origin,crossedOut:true,items:e.filteredOutCats.map((t=>({dt:5,origin:e.origin,termid:"Structural Variation",key:t,text:s.mclass[t].label,color:s.mclass[t]?.color,isLegendItem:true})))})}}for(const e of i){e.items.sort(((e,t)=>{const s=e=>{if(!e.greyedOut&&!e.crossedOut)return 0;if(e.greyedOut&&!e.crossedOut)return 1;if(e.crossedOut)return 2;return 3};return s(e)-s(t)}))}return i.sort(((e,t)=>e.crossedOut&&t.crossedOut?0:e.crossedOut?1:t.crossedOut?-1:e.order&&t.order?e.order-t.order:e.order?-1:t.order?1:0))}function ut(e,t,s,n){if(e.crossedOut||e.greyedOut){return e.label}let i=e.label;const a=[t];if(e.isExcluded)a.push("hidden");if(s?.tw?.term?.type=="geneVariant"&&n.geneVariantCountSamplesSkipMclass.includes(e.key))a.push("not counted");if(!a.length)return i;return i+=` (${a.join(", ")})`}var gt=Object.freeze({__proto__:null,getLegendData:mt,getLegendItemText:ut});function ht(e,t,s,n={}){const i=t;ft(i);if(e.config.chartType=="hierCluster"&&e.config.settings.hierCluster.clusterSamples){return e.hcSampleSorter}if(i.sortSamplesBy=="asListed"){return(t,s)=>e.asListedSampleOrder.indexOf(t.sample)-e.asListedSampleOrder.indexOf(s.sample)}if(i.sortSamplesBy=="name"){return yt}const a=i.sortOptions[i.sortSamplesBy];if(!a)throw`unsupported s.sortSamplesBy='${i.sortSamplesBy}'`;e.selectedTermsToSortAgainst=e.termOrder.filter((e=>e.tw.sortSamples));const o=e.selectedTermsToSortAgainst.map((e=>e.tw)).sort(((e,t)=>e.sortSamples.priority-t.sortSamples.priority));const l=[];const r=a.sortPriority;if(r){for(const e of o){const t=structuredClone(e);if(t.sortSamples?.by){l.push(Object.assign({},t));continue}for(const e of r){if(n.skipSorter?.(e,t))continue;if(!e.types.includes(t.term.type))continue;for(const s of e.tiebreakers){const e=Object.assign(structuredClone(t.sortSamples||{}),s);const n=Object.assign(structuredClone(t),{sortSamples:e});l.push(n)}}}}if(r){for(const t of r){for(const s of e.termOrder){if(o.find((e=>e.$id===s.tw.$id)))continue;if(n.skipSorter?.(t,s.tw))continue;if(!t.types.includes(s.tw.term.type))continue;for(const e of t.tiebreakers){l.push(Object.assign({},s.tw,{sortSamples:e}))}}}}else{const t=e.app.vocabApi.vocab?.dslabel=="PNET"?[]:e.termOrder.filter((e=>!e.tw.sortSamples&&F(e.tw.term.type)&&!o.find((t=>t.$id===e.tw.$id)))).map((e=>Object.assign({sortSamples:{by:"values"}},e.tw)));const s=e.app.vocabApi.vocab?.dslabel=="PNET"?[]:e.termOrder.filter((e=>!e.tw.sortSamples&&!F(e.tw.term.type)&&!o.find((t=>t.$id===e.tw.$id)))).map((e=>Object.assign({sortSamples:{by:"hits"}},e.tw)));l.push(...s,...t)}if(n.tiebreaker)l.push(n.tiebreaker);l.push(...i.sortSamplesTieBreakers.map((e=>e)));const d=[];e.maxSampleSet=new Set;for(const t of l){if(typeof t==="function")d.push(t);else if(t.$id=="sample")d.push(yt);else if(t.sortSamples.by=="hits")d.push(bt(t,e,s));else if(t.term.type!="geneVariant")d.push(xt(t,e,s));else if(t.sortSamples.by=="values")d.push(xt(t,e,s));else if(t.sortSamples.by=="dt")d.push(vt(t));else if(t.sortSamples.by=="class")d.push(wt(t,e));else throw`unsupported sortSamplesBy entry by='${t.sortSamples.by}'`}if(!d.find((e=>e.$id==="sample"))){d.push(yt)}return(e,t)=>{for(const s of d){const n=s(e,t);if(n!==0)return n}}}function ft(e){if(!e.sortOptions)e.sortOptions="custom";if(["selectedTerms","class","dt","hits"].includes(e.sortSamplesBy))e.sortSamplesBy="custom"}function yt(e,t){if(e._ref_.label&&t._ref_.label){return e._ref_.label<t._ref_.label?-1:e._ref_.label>t._ref_.label?1:0}if(!e.sample&&!t.sample&&e.row.sample){return e.row.sample<t.row.sample?-1:e.row.sample>t.row.sample?1:0}return e.sample<t.sample?-1:e.sample>t.sample?1:0}function bt(e,t,s,n){const{$id:i,sortSamples:a}=e;const o={};for(const e of s){if(!o[e.sample])o[e.sample]=0;if(i in e){o[e.sample]+=e[i].countedValues?.length||0}}return(e,t)=>o[e.sample]==o[t.sample]?0:o[e.sample]>o[t.sample]?-1:1}function xt(e,t,s,n){const{$id:i,sortSamples:a}=e;const o=t.termOrder.find((e=>e.tw.$id===i));if(o.grp.type=="hierCluster"){return(e,t)=>{if(i in e&&i in t){return e[i]?.values[0].value-t[i]?.values[0].value}if(i in e)return-1;if(i in t)return 1;return 0}}if(o.tw.q?.mode=="continuous"){return(e,t)=>{if(i in e&&i in t){return e[i]?.value-t[i]?.value}if(i in e)return-1;if(i in t)return 1;return 0}}const l=[];if(o?.term?.values){for(const e of term.values){l.push(e.key)}l.sort(((e,t)=>term.values[e].order<term.values[e].order?-1:1))}else if(o?.ref?.bins){l.push(...o.ref.bins.map((e=>e.name)))}else{for(const e of s){if(!(i in e))continue;const t=e[i].override?.key||e[i].key;if(l.indexOf(t)==-1)l.push(t)}}return(e,t)=>{if(!e[i]&&!t[i])return 0;if(!e[i])return t[i].override?-1:1;if(!t[i])return e[i].override?1:-1;if(e[i].override&&t[i].override){const s="order"in e[i].override?e[i].override.order:l.indexOf(e[i].override.key);const n="order"in t[i].override?t[i].override.order:l.indexOf(t[i].override.key);return s-n}if(!e[i].override&&!t[i].override){return l.indexOf(e[i].key)-l.indexOf(t[i].key)}if(!e[i].override)return-1;if(!t[i].override)return 1;return 0}}function vt(e,t,s,n){const{$id:i,sortSamples:a,term:o}=e;const l=a.order;const r=l.length+1;const d=new Map;function c(e){if(!(i in e)){d.set(e.sample,r);return}if(a.filter&&!Ct(e[i].values,a.filter.values)){d.set(e.sample,r);return}const t=e[i].values.map((e=>l.indexOf(e.dt))).filter((e=>e!==-1));d.set(e.sample,t.length?Math.min(...t):r)}return(e,t)=>{if(!d.has(e.sample))c(e);if(!d.has(t.sample))c(t);return d.get(e.sample)-d.get(t.sample)}}function wt(e,t,s,n){const{$id:i,sortSamples:a}=e;if(a.disabled)return()=>0;const o=t.config.settings.matrix;const l=o.showMatrixMutation!="none"&&!o.allMatrixMutationHidden;const r=o.showMatrixCNV!="none"&&!o.allMatrixCNVHidden;const d=a.order.filter(l&&r?e=>!o.hiddenVariants.includes(e):!l&&!r?()=>false:l?e=>o.mutationClasses.includes(e)&&!o.hiddenVariants.includes(e):r?e=>e.startsWith("CNV_")&&!o.hiddenVariants.includes(e):e=>!e.startsWith("CNV_"));if(!d.length&&a.ignoreEmptyFilteredOrder)return()=>0;const c="z";const p=new Map;function m(e){if(!(i in e)){p.set(e.sample,c);return}const t=e[i].renderedValues||e[i].filteredValues||e[i].values;if(a.filter&&!Ct(t,a.filter.values)){p.set(e.sample,c);return}const s=t.map((e=>e.class));if(!d.find((e=>s.includes(e)))){p.set(e.sample,c);return}else if(!a.isOrdered){p.set(e.sample,"1")}else{const t=d.map((e=>s.includes(e)?"1":"x"));p.set(e.sample,t)}}return(e,t)=>{if(!p.has(e.sample))m(e);if(!p.has(t.sample))m(t);const s=p.get(e.sample);const n=p.get(t.sample);return s<n?-1:s>n?1:0}}function Ct(e,t){for(const s of e){for(const e of t){if((!e.dt||s.dt===e.dt)&&(!e.mclassLst||e.mclassLst.includes(s.class))&&(!e.class||e.class===s.class)&&(!e.origin||s.origin===e.origin)){return true}}}}function kt(e,t,s){if(s?.type=="hierCluster")return e.hcTermSorter;if(t.sortTermsBy=="asListed"){return(e,t)=>e.index-t.index}if(t.sortTermsBy!="sampleCount"){throw`unsupported s.sortTermsBy='${t.sortTermsBy}'`}return(t,s)=>{if(e.app.vocabApi.vocab?.dslabel==="GDC"){if(t.tw?.term?.id&&!s.tw?.term?.id)return-1;if(!t.tw?.term?.id&&s.tw?.term?.id)return 1}if(s.counts.samples!==t.counts.samples)return s.counts.samples-t.counts.samples;if(s.counts.hits!==t.counts.hits)return s.counts.hits-t.counts.hits;return t.index-s.index}}function St(e,t={},s){const n=s||e?.matrix?.settings||{};const i=Object.assign({sample:"sample"},t,n.controlLabels||{});const a={};if(n.sortPriority){const e=1;Object.values(a).forEach((t=>{if(t.order>=e)t.order+=1}));a.custom={label:n.sortPriority.label||"Custom sort",value:"custom",order:e,sortPriority:n.sortPriority}}a.a=n.sortOptions?.a?Gt(n.sortOptions.a,i):{value:"a",order:1,sortPriority:[{label:`For each gene mutation, sort ${i.samples} by matching data`,types:["geneVariant"],tiebreakers:[{skip:!n.mutationClasses.includes("Fuserna"),label:`${i.Samples} with Fusion RNASeq > without`,filter:{values:[{dt:y}]},by:"class",isOrdered:false,order:["Fuserna"]},{label:`${i.Samples} with truncating mutations > without`,filter:{values:[{dt:u}]},by:"class",isOrdered:false,order:[...n.truncatingMutations],notUsed:[]},{label:`${i.Samples} with CNV data > without`,mayToggle:true,filter:{values:[{dt:g}]},by:"class",isOrdered:true,disabled:true,order:[S,$]},{disabled:false,mayToggle:true,label:`${i.Samples} with protein-changing mutations > without`,filter:{values:[{dt:u}]},by:"class",isOrdered:false,order:n.proteinChangingMutations.filter((e=>!n.truncatingMutations.includes(e))),notUsed:n.truncatingMutations}]},{label:`For each dictionary variable, sort ${i.samples} by matching data`,types:["categorical","integer","float","survival"],tiebreakers:[{label:"Values",by:"values"}]}]};a.name={label:`By ${i.sample} name, ID, or label`,value:"name",order:Object.values(a).length};return a}function $t(e){const t=e.settings.matrix;if(t.sortSampleGrpsBy=="hits")return(e,t)=>{if(e.lst.length&&!t.lst.length)return-1;if(!e.lst.length&&t.lst.length)return 1;return t.totalCountedValues-e.totalCountedValues};if(t.sortSampleGrpsBy=="sampleCount")return(e,t)=>{if(e.lst.length&&!t.lst.length)return-1;if(!e.lst.length&&t.lst.length)return 1;if(e.lst.length==t.lst.length){return Mt(e,t)}return t.lst.length-e.lst.length};if(!e.config.divideBy?.$id)return Mt;const s=e.data.refs.byTermId[e.config.divideBy.$id];if(s&&!s.keyOrder)s.keyOrder=s.bins?s.bins.map((e=>e.name)):[];const n=e.data.refs.byTermId[e.config.divideBy.$id]?.keyOrder;if(!n)return Mt;return(e,t)=>{e.order=n.indexOf(e.id);if(e.order==-1)delete e.order;t.order=n.indexOf(t.id);if(t.order==-1)delete t.order;if("order"in e&&"order"in t)return e.order-t.order;if("order"in e)return-1;if("order"in t)return 1;if(e.tw?.term?.values?.[e.id]?.order&&t.tw?.term?.values?.[t.id]?.order){return e.tw.term.values[e.id].order-t.tw.term.values[t.id].order}return Mt(e,t)}}function Mt(e,t){return e.name<t.name?-1:1}function Tt(e){const t=e.settings.matrix;const s=t.sortOptions[t.sortSamplesBy].sortPriority?t.sortOptions[t.sortSamplesBy]:t.sortOptions.a;const n=[];s.sortPriority.forEach((e=>{if(e.types.includes("geneVariant")){e.tiebreakers.forEach((e=>{if(e.by=="class"&&e.order){n.push(...e.order.filter((e=>e!=="WT"&&e!=="Blank")))}}))}}));const i=(e,t)=>{const s=n.indexOf(e.class);const i=n.indexOf(t.class);return s==-1&&i==-1?0:n.indexOf(e.class)==-1?1:n.indexOf(t.class)==-1?-1:n.indexOf(e.class)-n.indexOf(t.class)};return i}function Gt(e,t){const s=t;let n;for(const t of e.sortPriority){if(t.types.includes("categorical")){if(!t.label)t.label=`For each dictionary variable, sort ${s.samples} by matching data`;continue}if(!t.types?.includes("geneVariant"))continue;if(!n){n=t;if(!t.label)t.label=`For each gene mutation, sort ${s.samples} by matching data`}else{n.tiebreakers.push(...t.tiebreakers);t.toBeDeleted=true}}for(const e of n.tiebreakers){if(e.filter?.values?.find((e=>e.dt==y))){const t={label:`${s.Samples} with Fusion RNASeq > without`,isOrdered:true,disabled:false,mayToggle:true};Object.assign(e,t,e)}else if(e.filter?.values?.find((e=>e.dt==u))){const t=e.order.includes(S)||e.order.includes($)?`${s.Samples} with SSM + CNV > SSM only`:`${s.Samples} with mutations`;const n={label:t,isOrdered:true,disabled:false,mayToggle:true};Object.assign(e,n,e)}else if(e.order.length==2&&e.order.includes(S)&&e.order.includes($)){const t={label:`${s.Samples} with CNV only > without`,filter:{values:[{dt:g}]},by:"class",isOrdered:true,disabled:false,mayToggle:true};Object.assign(e,t,e)}}e.sortPriority=e.sortPriority.filter((e=>!e.toBeDeleted));return e}function It(e){const t=this.settings.matrix;this.termSorter=kt(this,t);const s=[];let n=0,i=0,a=0;this.mclassSorter=Tt(this);for(const[o,l]of this.termGroups.entries()){const r=[];for(const[s,n]of l.lst.entries()){const i={samples:0,hits:0};const o=new Set;for(const s of e.lst){if(o.has(s.sample))continue;o.add(s.sample);const e=s[n.$id];if(e){const{filteredValues:a,countedValues:o,renderedValues:r}=this.classifyValues(e,n,l,t,s);e.filteredValues=a;e.countedValues=o;e.renderedValues=r;if(e.countedValues?.length){const t=n.term.values?.[e.value];if(t?.uncountable)continue;i.samples+=1;i.hits+=e.countedValues.length;if(n.q?.mode=="continuous"){const t=e.value;if(!("minval"in i)||i.minval>t)i.minval=t;if(!("maxval"in i)||i.maxval<t)i.maxval=t}}}}if(l.type!="hierCluster"||i.samples)r.push({tw:n,counts:i,index:s});if(l.type=="hierCluster")a++}const d=l.sortTermsBy||l.type=="hierCluster"?kt(this,t,l):this.termSorter;const c=r.filter((e=>{if("minNumSamples"in e.tw)return e.tw.minNumSamples<=e.counts.samples;if(!l.settings)return true;return!("minNumSamples"in l.settings)||e.counts.samples>=l.settings.minNumSamples})).sort(d);if(!c.length)continue;for(const[t,a]of c.entries()){const{tw:r,counts:d}=a;const p=e.refs.byTermId[a.tw.$id]||{};s.push({grp:l,grpIndex:o,visibleGrpIndex:i,tw:r,index:t,lstIndex:a.index,processedLst:c,prevGrpTotalIndex:n,totalIndex:n+t,ref:p,allCounts:d})}n+=c.length;i+=1}this.numTerms=s.length;this.numClusterTerms=a;return s}function Vt(e){const t=this.settings.matrix;const s={id:this.config.divideBy?.$id,name:this.config.divideBy?"Not annotated":"",lst:[]};const n=new Map;const i=this.config.divideBy?.term||{};const a=this.config.divideBy?.$id||"-";const o=this.config.divideBy?.exclude||[];const l=i.values||{};const r=e.refs.byTermId[a]||{};for(const i of e.lst){if(a in i){const e=i[a].key;const s=e in l&&l[e].label?l[e].label:e;if(!n.has(e)){const i={name:`${s}`,id:e,lst:[],tw:this.config.divideBy,legendGroups:{},isExcluded:o.includes(e)};if(r.bins&&t.sortSampleGrpsBy=="name")i.order=r.bins.findIndex((t=>t.name==e));else delete i.order;n.set(e,i)}n.get(e).lst.push(i)}else{s.lst.push(i)}}const d=[...n.values()];const c=n.size;if(c>100&&d.filter((e=>e.lst.length<3)).length>.8*c){const e=t.controlLabels;throw`Did not group ${e.samples} by "${i.name}": too many ${e.sample} groups (${c}), with the majority of groups having <= 2 ${e.samples} per group.`}if(s.lst.length&&!n.size){n.set(undefined,s);d.push(...n.values())}this.asListedSampleOrder=[];for(const e of d){this.asListedSampleOrder.push(...e.lst.map((e=>e.sample)))}const p=this.termOrder.filter((e=>e.tw.sortSamples&&e.tw.term.type!="geneVariant"));const m=ht(this,t,e.lst,{skipSorter:(e,t)=>!e.types?.includes("geneVariant")&&p.find((e=>e.tw.$id===t.$id))});const u=e.lst.sort(m);const g=u.slice(0,t.maxSample);const h=e=>g.includes(e);const f=(e,t)=>e+(typeof t=="object"&&t.countedValues?.length?1:0);const y=(e,t)=>e+(Object.values(t).reduce(f,0)?1:0);const b=ht(this,t,e.lst);for(const e of d){e.lst=e.lst.filter(h);e.totalCountedValues=e.lst.reduce(y,0);e.lst.sort(b)}const x=$t(this);return d.sort(x)}function Ot(e){this.settings.matrix;this.visibleSampleGrps=new Set;const t=[];let s=0,n=0;for(const[e,i]of this.sampleGroups.entries()){if(!i.lst.length)continue;if(i.isExcluded)n++;let a=i.lst;for(const[o,l]of a.entries()){t.push({grp:i,grpIndex:e-n,row:l,index:o,prevGrpTotalIndex:s,totalIndex:s+o,totalHtAdjustments:0,grpTotals:{htAdjustment:0},processedLst:a})}if(!i.isExcluded)s+=a.length;this.visibleSampleGrps.add(i)}this.unfilteredSampleOrder=t;return t.filter((e=>!e.grp.isExcluded))}function _t(e,t,s,n,i){const a="value"in e?[e.value]:e.values;if(!a)return{filteredValues:null,countedValues:null,renderedValues:null};const o=[t.valueFilter||s.valueFilter].filter((e=>e&&true));if(o.length&&o[0].type!=="tvs"&&o[0].type!=="tvslst")throw`unknown matrix value filter type='${o.type}'`;let l=!o.length?a:a.filter((e=>Q(e,o[0],t.term,i)));const r=[];if(t.term.type=="geneVariant"&&t.q?.type=="values"){l.sort(this.mclassSorter);if(n.cellEncoding=="")r.push(...l);else{const e=[];for(const t of[g,u,y,p]){const s=t==p?l.find((e=>e.dt===t)):l.find((e=>e.dt===t&&e.class!=="WT"&&e.class!=="Blank"));if(s)r.push(s);const n=l.filter((e=>e.dt===t));e.push(...n)}l=e}}else{r.push(...l)}return{filteredValues:l,countedValues:l.filter((e=>{if(t.term.type=="geneVariant"){if(t.q?.type=="predefined-groupset"||t.q?.type=="custom-groupset"){const s=t.q.type=="predefined-groupset"?t.term.groupsetting.lst[t.q.predefined_groupset_idx]:t.q.customset;if(!s)throw"groupset not found";const n=s.groups[0];if(e!=n.name)return false}else{if(e.class=="WT"||e.class=="Blank"||n.geneVariantCountSamplesSkipMclass.includes(e.class))return false}}return true})),renderedValues:r}}function Lt(e,t){return e.class===t.class?0:e.class==="Blank"?1:t.class=="Blank"?-1:e.class<t.class?-1:1}var Nt=Object.freeze({__proto__:null,getTermOrder:It,getSampleGroups:Vt,getSampleOrder:Ot,classifyValues:_t,stackSiblingCellsByClass:Lt});async function Bt(e={},t){const s={Samples:"Samples",samples:"samples",Sample:"Sample",sample:"sample",Terms:"Variables",terms:"variables",Term:"Variable",term:"Variable",Mutations:"Mutations"};const n={termgroups:[],samplegroups:[],divideBy:null,legendValueFilter:{isAtomic:true,type:"tvslst",in:true,join:"and",lst:[]},legendGrpFilter:{isAtomic:true,type:"tvslst",in:true,join:"and",lst:[]},settings:{matrix:{svgCanvasSwitch:1e3,useMinPixelWidth:true,cellEncoding:"",margin:{top:10,right:5,bottom:20,left:50},maxGenes:e.settings?.maxGenes||50,maxSample:e.settings?.maxSample||1e3,sampleNameFilter:"",sortSamplesBy:"a",sortPriority:undefined,sortSampleGrpsBy:"name",sortSamplesTieBreakers:[{$id:"sample",sortSamples:{}}],sortTermsBy:"sampleCount",samplecount4gene:e.chartType=="hierCluster"?"":"abs",geneVariantCountSamplesSkipMclass:[],cellbg:"#ececec",showGrid:"",addMutationCNVButtons:false,truncatingMutations:M,proteinChangingMutations:T,synonymousMutations:G,mutationClasses:I,CNVClasses:V,gridStroke:"#fff",outlineStroke:"#ccc",beamStroke:"#f00",colw:0,colwMin:.1/window.devicePixelRatio,colwMax:16,colspace:1,colgspace:8,colglabelpos:true,collabelpos:"bottom",collabelvisible:true,collabelgap:5,collabelpad:1,collabelmaxchars:32,rowh:18,rowhMin:1,rowhMax:20,rowspace:1,rowgspace:8,rowlabelpos:"left",rowlabelgap:5,rowlabelvisible:true,rowlabelpad:1,rowlabelmaxchars:32,legendGrpLabelMaxChars:26,grpLabelFontSize:12,minLabelFontSize:6,maxLabelFontSize:14,transpose:false,sampleLabelOffset:120,sampleGrpLabelOffset:120,sampleGrpLabelMaxChars:32,termLabelOffset:80,termGrpLabelOffset:80,termGrpLabelMaxChars:32,duration:0,zoomLevel:1,zoomCenterPct:0,zoomIndex:0,zoomGrpIndex:0,zoomMin:.5,zoomIncrement:.1,zoomStep:1,imgWMax:6e4/window.devicePixelRatio,scrollHeight:12,controlLabels:s,cnvUnit:"log2ratio",ignoreCnvValues:false,barh:32,showHints:[]}}};const i=n.settings;const a=Math.max(i.matrix.rowh+i.matrix.rowspace-3*i.matrix.rowlabelpad,12);i.legend={ontop:false,lineh:25,padx:5,padleft:0,padright:20,padbtm:30,fontsize:a,iconh:a-2,iconw:a-2,hangleft:1,linesep:false};const o=t.vocabApi.termdbConfig.matrix||{};h(n.settings.matrix,o.settings);if(o.legendGrpFilter)n.legendGrpFilter=o.legendGrpFilter;if(o.legendValueFilter)n.legendValueFilter=o.legendValueFilter;if(e.name){const s=await t.vocabApi.getMatrixByName(e.name);if(!s)throw"error from getMatrixByName()";if(s.error)throw s.error;h(n,s)}const l=e?.settings?.matrix;if(l){if((l.sortSamplesBy=="custom"||l.sortSamplesBy=="asListed")&&l.sortOptions?.custom.label=="against alteration type"){l.sortSamplesBy="a"}if(l.sortOptions){delete l.sortOptions.custom;delete l.sortOptions.asListed}}h(n,e);const r=n.settings.matrix;r.sortOptions=St(t.vocabApi.termdbConfig,s,r);r.duration=0;r.colw=0;if(r.sortSamplesBy!="asListed"&&!r.sortOptions?.[r.sortSamplesBy])r.sortSamplesBy="a";else if(["selectedTerms","class","dt","hits"].includes(r.sortSamplesBy))r.sortSamplesBy="a";if(r.samplecount4gene===true||r.samplecount4gene===1)r.samplecount4gene="abs";if(window.location.hostname=="localhost"){if(window.location.hash=="#canvas")r.svgCanvasSwitch=0}const d=[];for(const e of n.termgroups){e.lst=JSON.parse(JSON.stringify(e.lst));for(const s of e.lst){if(!s.term?.type||F(s.term.type)){if(!s.id){if(!s.term.id)throw`missing tw.id and tw.term.id`;s.id=s.term.id}delete s.term}d.push(A(s,t.vocabApi))}}if(n.divideBy)d.push(A(n.divideBy,t.vocabApi));await Promise.all(d);return n}function At(e){const t=e.settings.matrix;const s=[...t.mutationClasses,...t.CNVClasses];t.filterByClass={isAtomic:true};for(const n of e.legendGrpFilter.lst){if(!n.dt)continue;s.filter((e=>n.dt.includes(o[e].dt))).forEach((e=>{t.filterByClass[e]="value"}))}for(const s of e.legendValueFilter.lst){if(!s.legendGrpName||s.tvs?.term?.type!=="geneVariant")continue;if(s.tvs.values?.[0].mclasslst)s.tvs.values[0].mclasslst.forEach((e=>{t.filterByClass[e]=s.legendFilterType?.endsWith("_hard")?"case":"value"}));else if(s.tvs.values)s.tvs.values.forEach((e=>{t.filterByClass[key]="value"}));else throw`unhandled tvs from legendValueFilter`}t.hiddenVariants=Object.keys(t.filterByClass).filter((e=>e!=="isAtomic"));const n=new Set(t.hiddenVariants.filter((e=>o[e]?.dt===g)));t.hiddenCNVs=[...n];t.showMatrixCNV=!n.size?"all":n.size==t.CNVClasses.length?"none":"bySelection";t.allMatrixCNVHidden=n.size==t.CNVClasses.length;const i=new Set(t.hiddenVariants.filter((e=>t.mutationClasses.find((t=>t===e)))));t.hiddenMutations=[...i];const a=new Set(t.proteinChangingMutations);const l=new Set(t.truncatingMutations);t.showMatrixMutation=!i.size?"all":i.size==t.mutationClasses.length?"none":i.size===t.mutationClasses.length-a.size&&[...i].every((e=>!a.has(e)))?"onlyPC":i.size===t.mutationClasses.length-l.size&&[...i].every((e=>!l.has(e)))?"onlyTruncating":"bySelection";t.allMatrixMutationHidden=i.size==t.mutationClasses.length;const r=t.sortOptions.a?.sortPriority.find((e=>e.types.length==1&&e.types[0]=="geneVariant"))?.tiebreakers||[];t.sortByMutation=r.find((e=>e.filter?.values[0]?.dt===1))?.isOrdered?"consequence":"presence";t.sortByCNV=r.find((e=>e.filter?.values[0]?.dt===4))?.disabled!==true}let jt;function Dt(e,t){const s=structuredClone(e);if(!jt)jt={CatTWValues:Ft,CatTWPredefinedGS:Ft,CatTWCustomGS:Ft,NumTWRegularBin:Ft,NumTWCustomBin:Ft,NumTWCont:Et};const n={vocabApi:t.vocabApi,addons:jt};for(const e of s){const t=[];for(const s of e.lst){t.push(s.type in n.addons?E.init(s,n):s)}e.lst=t}return s}const Ft={setCellProps:{value:function(e,t,s,n,i,a,o,l,r,d,c){var p,m,u;const g=this.getTw();const h=t.key;const f=g.term.values||{};e.label="label"in t?t.label:((p=f[h])===null||p===void 0?void 0:p.label)?f[h].label:h;e.fill=t.color||((m=f[t.key])===null||m===void 0?void 0:m.color);e.order=i.ref.bins?i.ref.bins.findIndex((e=>e.name==h)):0;e.x=e.totalIndex*r+e.grpIndex*n.colgspace;e.y=l*c;const y=((u=g.legend)===null||u===void 0?void 0:u.group)||g.$id;return{ref:i.ref,group:y,value:h,entry:{key:h,label:e.label,fill:e.fill}}}}};const Et={setCellProps:{value:function(e,t,s,n,i,a,o,l,r,d,c){var p,m,u,g,h;const f=this.getTw();const y=t.key;const b=f.term.values||{};e.label="label"in t?t.label:((p=b[y])===null||p===void 0?void 0:p.label)?b[y].label:y;e.fill=t.color||((m=b[t.key])===null||m===void 0?void 0:m.color);if(!f.settings)f.settings={};if(!f.settings.barh)f.settings.barh=n.barh;if(!("gap"in f.settings))f.settings.gap=4;const x=(u=f.term.values)===null||u===void 0?void 0:u[e.key];if(x===null||x===void 0?void 0:x.uncomputable){e.x=e.totalIndex*r+e.grpIndex*n.colgspace;e.y=l*c;e.height=f.settings.barh;e.fill="transparent";e.label=x.label;const t=((g=f.legend)===null||g===void 0?void 0:g.group)||f.$id;return{ref:i.ref,group:t,value:x.label||x.key,entry:{key:y,label:e.label,fill:e.fill}}}e.fill="#555";if(n.transpose){e.height=i.scale(e.key);e.x=f.settings.gap}else{const s=e.term.valueConversion;let a=s?e.key*s.scaleFactor:e.key;if(this.q.convert2ZScore){a=(a-i.mean)/i.std;e.fill=a>0?"#FF6666":"#6666FF";e.zscoreLabel=` (z-score: ${a.toFixed(2)})`}e.label="label"in t?t.label:((h=b[y])===null||h===void 0?void 0:h.label)?b[y].label:this.term.unit?`${e.key.toFixed(2)} ${this.term.unit}`:e.key.toFixed(2);e.height=a>=0?i.scales.pos(a):i.scales.neg(a);e.x=e.totalIndex*r+e.grpIndex*n.colgspace;e.y=a>=0?i.counts.posMaxHt+i.tw.settings.gap-e.height:i.counts.posMaxHt+i.tw.settings.gap;e.convertedValueLabel=!s?"":v(e.key,s.fromUnit,s.toUnit,s.scaleFactor)}}}};class zt{constructor(e){this.type="matrix";this.holderTitle="Sample Matrix";this.optionalFeatures=JSON.parse(sessionStorage.getItem("optionalFeatures")||`{}`)?.matrix||[];pe(this);Ie(this)}async init(e){const t=this.opts;if(t.reactsTo)this.reactsTo=t.reactsTo;this.setDom=oe;this.setDom(t);this.config=e.plots.find((e=>e.id===this.id));this.settings=Object.assign({},this.config.settings.matrix);this.computed={};if(this.dom.header)this.dom.header.html(this.holderTitle);this.setControls(e);this.clusterRenderer=new _e({holder:this.dom.cluster,app:this.app,parent:this});this.legendRenderer=ee({holder:this.dom.legendG,rectFillFxn:e=>e.color,iconStroke:"#aaa",handlers:{legend:{click:this.legendClick}},settings:{isExcludedAttr:"isExcluded"},note:"CLICK A ROW LABEL OR ITEM TO APPLY FILTERING"});this.customTipApi=this.dom.tip.getCustomApi({d:this.dom.menubody,clear:e=>{if(e?.target)this.dom.menutop.style("display","none");this.dom.menubody.selectAll("*").remove();return this.customTipApi},show:()=>{this.dom.menubody.style("display","block")},hide:()=>{}});this.setPill(e);const s={mclass:o,dt2label:a,morigin:L};for(const t in s){const n=s[t];this[t]=h({},n,e.termdbConfig[t]||{},e.termdbConfig.matrix?.[t]||{})}}setControls(e){this.controlsRenderer=new je({app:this.app,id:this.id,parent:this,holder:this.dom.controls,getSvg:()=>this.dom.svg.node()},e)}getState(e){const t=e.plots.find((e=>e.id===this.id));const s=e.termfilter.filter0;this.prevFilter0=this.state?.filter0;return{isVisible:true,config:t,filter:e.termfilter.filter,filter0:s,hasVerifiedToken:this.app.vocabApi.hasVerifiedToken(),tokenVerificationMessage:this.app.vocabApi.tokenVerificationMessage,vocab:e.vocab,termdbConfig:e.termdbConfig,clusterMethod:t.settings.hierCluster?.clusterMethod,distanceMethod:t.settings.hierCluster?.distanceMethod,clusterSamples:t.settings.hierCluster?.clusterSamples,nav:e.nav}}async main(){try{this.config=structuredClone(this.state.config);if(this.mayRequireToken())return;this.termGroups=Dt(this.config.termgroups,this.app);const e=this.settings.transpose;Object.assign(this.settings,structuredClone(this.config.settings),this.controlsRenderer.getSettings());this.dom.loadingDiv.selectAll("*").remove();this.dom.loadingDiv.html("").style("display","").style("position","relative").style("left","45%");this.dom.svg.style("opacity",.1).style("pointer-events","none");delete this.clickedChildren;try{At(this.config);const e=[];if(this.setHierClusterData)e.push(this.setHierClusterData());e.push(this.setData());this.dom.loadingDiv.html("Processing data ...");await Promise.all(e);this.applyLegendValueFilter();if(this.combineData)this.combineData();this.app.save({type:"plot_edit",id:this.id,config:this.config})}catch(e){if(e=="no data"){this.showNoMatchingDataMessage();return}else if(e=="stale sequenceId"||e.name=="AbortError"){return}else{this.dom.svg.style("display","none");throw e}}this.dom.loadingDiv.html("Updating ...").style("display","");this.termOrder=this.getTermOrder(this.data);this.sampleGroups=this.getSampleGroups(this.hierClusterSamples||this.data);this.sampleOrder=this.getSampleOrder(this.data);if(!this.sampleOrder?.length&&!this.config.legendGrpFilter?.lst.length&&!this.config.legendValueFilter?.lst.length){this.showNoMatchingDataMessage();this.controlsRenderer.main();return}this.setLayout();if(this.setHierColorScale)this.setHierColorScale(this.hierClusterData.clustering);this.serieses=this.getSerieses(this.data);this.dom.loadingDiv.html("Rendering ...");if(this.plotDendrogramHclust)this.plotDendrogramHclust();this.render();this.mayDisplayCohortMessage();this.dom.svg.style("display","").style("opacity",1).style("pointer-events","");const[t,s]=!this.settings.matrix.transpose?["sampleGrps","termGrps"]:["termGrps","sampleGrps"];const n=this.dimensions;this.clusterRenderer.main({settings:this.settings.matrix,xGrps:this[t],yGrps:this[s],dimensions:n});this.legendRenderer(this.legendData,{settings:Object.assign({},this.settings.legend,{svgw:Math.max(400,n.mainw+n.xOffset-this.settings.matrix.margin.right),svgh:n.mainh+n.yOffset,dimensions:n,padleft:this.settings.legend.padleft})});await this.adjustSvgDimensions(e);this.controlsRenderer.main()}catch(e){const t=this.app.vocabApi.tokenVerificationMessage;this.mayRequireToken(t);if(!t){this.app.tip.hide();this.dom.loadingDiv.style("display","none");throw e}}this.resetInteractions()}showNoMatchingDataMessage(){this.forcedSampleCount=0;this.dom.svg.style("opacity",.001).style("display","none");if(this.termOrder&&this.dimensions)this.controlsRenderer.main({sampleCount:0});this.dom.loadingDiv.html("");const e=this.dom.loadingDiv.append("div").style("display","inline-block").style("text-align","center").style("position","relative").style("left","-150px");e.append("div").style("margin","5px 10px").html("No matching cohort sample data for the current gene list.");if(this.settings.matrix.showHints?.includes("genesetEdit")){const t=e.append("div").style("margin","5px 10px");t.append("span").html("You may change the selected cohort,");if(this.config.legendGrpFilter?.lst.length||this.config.legendValueFilter?.lst.length){t.append("br");t.append("span").html("show hidden ");t.append("span").html("CNV").style("cursor","pointer").style("text-decoration","underline").on("click",(()=>{this.controlsRenderer.btns.filter((e=>e.label=="CNV"))?.node().click()}));t.append("span").html(" or ");t.append("span").style("cursor","pointer").style("text-decoration","underline").html("Mutation").on("click",(()=>{this.controlsRenderer.btns.filter((e=>e.label=="Mutation"))?.node().click()}));t.append("span").html(" data,")}t.append("br");t.append("span").html("or edit the gene list from the ");t.append("span").style("cursor","pointer").style("text-decoration","underline").html("Gene Set Edit Group menu.").on("click",(()=>{this.controlsRenderer.btns.filter((e=>e.label=="Genes"))?.node().click();const e=setInterval((()=>{const t=this.app.tip.d.selectAll("button").filter((function(){return this.innerHTML=="Edit Group"})).node();if(t){t.click();clearInterval(e)}}),100)}))}this.dom.svg.style("display","none")}mayDisplayCohortMessage(){const e=!this.prevFilter0||O(this.state.filter0,this.prevFilter0)?"":"The gene list is persisted across cohorts.";if(e){this.dom.loadingDiv.html("");const t=this.dom.loadingDiv.append("div").style("display","inline-block").style("text-align","center").style("position","relative").style("left","-150px");t.append("div").html(e);if(this.settings.matrix.showHints?.includes("genesetEdit")){const e=t.append("div");e.append("span").html(" You may edit the gene list from the ");e.append("span").style("cursor","pointer").style("text-decoration","underline").html("Gene Set Edit Group menu.").on("click",(()=>{this.controlsRenderer.btns.filter((e=>e.label=="Genes"))?.node().click();const e=setInterval((()=>{const t=this.app.tip.d.selectAll("button").filter((function(){return this.innerHTML=="Edit Group"})).node();if(t){t.click();clearInterval(e)}}),100)}))}}this.dom.loadingDiv.style("display",e?"":"none")}sampleKey(e){return e.row.sample}sampleLabel(e){return e.label||e.row._ref_.label||""}sampleGrpKey(e){return e.grp.name}sampleGrpLabel(e){return e.grp.label||e.grp.name||""}termKey(e){return e.tw.$id}termLabel(e){return e.label}termGrpKey(e){return e.grp.name}termGrpLabel(e){return e.grp.label||e.grp.name||[{text:"⋮",dx:3,cls:"sjpp-exclude-svg-download"}]}}for(const e of[We,Nt,Ye,pt,gt]){for(const t in e){zt.prototype[t]=e[t]}}const Pt=_(zt);const Rt=Pt;function qt(e,t){t.dom.tip.clear();const s=e.append("div");if(t.state.termdbConfig.matrixplots){for(const e of t.state.termdbConfig.matrixplots){s.append("div").attr("class","sja_menuoption sja_sharp_border").text(e.name).on("click",(async()=>{t.dom.tip.hide();const s=await t.app.vocabApi.getMatrixByName(e.name);t.app.dispatch({type:"plot_create",config:s})}))}}s.append("div").datum({label:"Term tree & search",clickTo:t.showTree_selectlst,chartType:"matrix",usecase:{target:"matrix",detail:"termgroups"},processSelection:e=>[{name:"",lst:e.map((e=>({term:e})))}]}).attr("class","sja_menuoption sja_sharp_border").text((e=>e.label)).on("click",((e,s)=>t.showTree_selectlst(s)));s.append("div").datum({label:"Text input",chartType:"matrix",clickTo:Ht,usecase:{target:"matrix",detail:"termgroups"},placeholder:"term\tgroup",processInput:async e=>{const s=e.split("\n").map((e=>e.split("\t")));const n=s.map((e=>e[0])).filter((e=>!!e));const i=await t.app.vocabApi.getTermTypes(n);const a={};for(const[e,t]of s){if(!(e in i))continue;if(!(t in a))a[t]={name:t,lst:[]};a[t].lst.push({term:i[e]})}return Object.values(a)}}).attr("class","sja_menuoption sja_sharp_border").text((e=>e.label)).on("click",((e,s)=>Ht(s,t)))}function Ht(e,t){t.dom.tip.clear();t.dom.submenu=t.dom.tip.d.append("div").style("text-align","center");t.dom.submenu.append("span").html(e.label);t.dom.submenu.append("button").style("margin","0 5px").html("Submit").on("click",(async()=>{const n=await e.processInput(s.property("value"));t.dom.tip.hide();const i={type:"plot_create",id:Xt(),config:{chartType:e.usecase.target,[e.usecase.detail]:n}};t.app.dispatch(i)}));const s=t.dom.submenu.append("div").style("text-align","left").append("textarea").attr("placeholder",e.placeholder).style("width","300px").style("height","300px").style("margin","5px").style("padding","5px").on("keydown",(e=>{const t=e.keyCode||e.which;if(t==9){e.preventDefault();const t=e.target;const s=t.selectionStart;t.value=t.value.substring(0,t.selectionStart)+"\t"+t.value.substring(t.selectionEnd);t.selectionEnd=s+1}}))}const Wt="_CHART_AUTOID_";let Kt=Date.now();function Xt(){return Wt+Kt++}export{zt as M,qt as a,Rt as c,Bt as g,Pt as m,At as s};
|