@sjcrh/proteinpaint-client 2.219.1 → 2.220.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (969) hide show
  1. package/dist/2dmaf-KRIX5DBS.js +1362 -0
  2. package/dist/AggMatrixInput-GBQD74NV.js +402 -0
  3. package/dist/AggregateMatrix-U2MOQOSZ.js +37 -0
  4. package/dist/AppHeader-OBZWUCOD.js +826 -0
  5. package/dist/BoxPlot-ZK6Q5JGE.js +1229 -0
  6. package/dist/CorrelationVolcano-WGR4JIGK.js +613 -0
  7. package/dist/Cuminc-I6D6YSIL.js +1217 -0
  8. package/dist/DE-HO7UBKPC.js +85 -0
  9. package/dist/DEinput-6LX4I65N.js +479 -0
  10. package/dist/DM-WYKLX4IC.js +86 -0
  11. package/dist/DifferentialAnalysis-L5VVBCVZ.js +236 -0
  12. package/dist/Disco-HLARIYXU.js +3384 -0
  13. package/dist/Disco.UI-W64WFVC3.js +239 -0
  14. package/dist/DmrPlot-BKQOT4JM.js +361 -0
  15. package/dist/GB-WKFGDJYW.js +1388 -0
  16. package/dist/GSEA-DCCJI5JE.js +870 -0
  17. package/dist/GeneExpInput-APLFNE6N.js +38 -0
  18. package/dist/Geomap-FTKWCV4J.js +80 -0
  19. package/dist/HicApp-ZGZKO4Y4.js +2240 -0
  20. package/dist/IDCViewer-MXB3OZUZ.js +10808 -0
  21. package/dist/NumBinaryEditor-S3MHUVZ5.js +274 -0
  22. package/dist/NumBinaryEditor.unit.spec-264X5ULG.js +308 -0
  23. package/dist/NumContEditor-MKEZCZMR.js +100 -0
  24. package/dist/NumContEditor.unit.spec-KBRAIU7M.js +160 -0
  25. package/dist/NumCustomBinEditor-OSF64BFC.js +29 -0
  26. package/dist/NumCustomBinEditor.unit.spec-T2SRBXTV.js +393 -0
  27. package/dist/NumDiscreteEditor-PVW5HRRQ.js +165 -0
  28. package/dist/NumDiscreteEditor.unit.spec-GUK7VWMR.js +229 -0
  29. package/dist/NumRegularBinEditor-757VRGFQ.js +29 -0
  30. package/dist/NumRegularBinEditor.unit.spec-JUIGEH3Z.js +274 -0
  31. package/dist/NumSplineEditor-U6MVFSCZ.js +205 -0
  32. package/dist/NumSplineEditor.unit.spec-PSH6YENX.js +220 -0
  33. package/dist/NumericDensity-YIP25Z4Y.js +29 -0
  34. package/dist/NumericDensity.unit.spec-3OSIZJHH.js +414 -0
  35. package/dist/NumericHandler-D2CO3FTS.js +30 -0
  36. package/dist/NumericHandler.unit.spec-RNFVGO2I.js +225 -0
  37. package/dist/ProteomeInput-ZOBJ2VU6.js +610 -0
  38. package/dist/Regression-ABKJOOMQ.js +1412 -0
  39. package/dist/RunChart2-D5CEEFEE.js +744 -0
  40. package/dist/SC-RLVEECU5.js +1290 -0
  41. package/dist/Violin-PCNX2CWV.js +1092 -0
  42. package/dist/Volcano-NVFNO7NE.js +2661 -0
  43. package/dist/Volcano-NVFNO7NE.js.map +7 -0
  44. package/dist/Wsi-MAMCK5YZ.js +636 -0
  45. package/dist/aboutSunburst-VSQADTFD.js +86 -0
  46. package/dist/aboutSunburst-VSQADTFD.js.map +7 -0
  47. package/dist/adSandbox-5YFAQZO6.js +29 -0
  48. package/dist/animatedBubbleChart-GM2GXDP3.js +542 -0
  49. package/dist/app-FNNCH37H.js +28 -0
  50. package/dist/app-ID5S5FUP.js +38 -0
  51. package/dist/app.js +14 -14
  52. package/dist/bam-JZLYXHMF.js +872 -0
  53. package/dist/barchart-EAXXILCH.js +38 -0
  54. package/dist/barchart2-E6A4UMUB.js +305 -0
  55. package/dist/block-VMVJH77F.js +6203 -0
  56. package/dist/block-VMVJH77F.js.map +7 -0
  57. package/dist/block.init-TUCGKLXG.js +29 -0
  58. package/dist/block.mds.expressionrank-YVROHZVX.js +350 -0
  59. package/dist/block.mds.geneboxplot-TQNEWBJY.js +819 -0
  60. package/dist/block.mds.junction-ZOSTZQF5.js +1534 -0
  61. package/dist/block.mds.svcnv-XSTSJ4ZD.js +6413 -0
  62. package/dist/block.svg-D6HXL4SC.js +155 -0
  63. package/dist/block.tk.aicheck-7RNC4HRR.js +274 -0
  64. package/dist/block.tk.bam-L3U5YH3F.js +1897 -0
  65. package/dist/block.tk.bigwig.ui-UVSZ7LWQ.js +202 -0
  66. package/dist/block.tk.hicstraw-YFBJR5LO.js +814 -0
  67. package/dist/block.tk.junction-DNRK2JNQ.js +2353 -0
  68. package/dist/block.tk.junction.textmatrixui-EN4ADCAU.js +190 -0
  69. package/dist/block.tk.ld-I5CTAJ4K.js +90 -0
  70. package/dist/block.tk.menu-HUZBY7OM.js +1050 -0
  71. package/dist/block.tk.pgv-KA6BFYPY.js +934 -0
  72. package/dist/brainImaging-OQB2ZHCU.js +550 -0
  73. package/dist/brainRegions-2CRVMS24.js +213 -0
  74. package/dist/bubbleHeatmap-MANNFEG2.js +374 -0
  75. package/dist/cellTypeBubbleHeatmap-LRK4R4EC.js +274 -0
  76. package/dist/chunk-2NB5HVXB.js +159 -0
  77. package/dist/chunk-2OMX5AYB.js +195 -0
  78. package/dist/chunk-3E26ITYK.js +55 -0
  79. package/dist/chunk-3H4FCRAN.js +266 -0
  80. package/dist/chunk-4GKC43U3.js +480 -0
  81. package/dist/chunk-4NQS45KH.js +302 -0
  82. package/dist/chunk-4TJO2DGU.js +2297 -0
  83. package/dist/chunk-4TJO2DGU.js.map +7 -0
  84. package/dist/chunk-4ZV6SE4B.js +240 -0
  85. package/dist/chunk-5DI4UNH5.js +562 -0
  86. package/dist/chunk-5TA5LHPW.js +54 -0
  87. package/dist/chunk-5YQXNW6Y.js +1339 -0
  88. package/dist/chunk-67MD4UES.js +848 -0
  89. package/dist/chunk-6BBUIRHA.js +123 -0
  90. package/dist/chunk-6DESNDD5.js +468 -0
  91. package/dist/chunk-6DRRN5XP.js +243 -0
  92. package/dist/chunk-6T4MN7LV.js +397 -0
  93. package/dist/chunk-7SFK32JP.js +398 -0
  94. package/dist/chunk-7SFK32JP.js.map +7 -0
  95. package/dist/chunk-7TLUQH7J.js +82 -0
  96. package/dist/chunk-7YMZSVWW.js +1219 -0
  97. package/dist/chunk-AENUJ7UO.js +299 -0
  98. package/dist/chunk-AZSWQWKL.js +263 -0
  99. package/dist/chunk-B5IJAQG4.js +2054 -0
  100. package/dist/chunk-B5IJAQG4.js.map +7 -0
  101. package/dist/chunk-BOCU6PXO.js +257 -0
  102. package/dist/chunk-C7KUMZQM.js +59 -0
  103. package/dist/chunk-C7ROKWV2.js +140 -0
  104. package/dist/chunk-C7ZPDNOJ.js +70 -0
  105. package/dist/chunk-CAH6LJ5Z.js +31 -0
  106. package/dist/chunk-DEQREL5P.js +692 -0
  107. package/dist/chunk-DXKZBSSD.js +2799 -0
  108. package/dist/chunk-DZBPF5QI.js +550 -0
  109. package/dist/chunk-DZDK64XY.js +516 -0
  110. package/dist/chunk-E6C2EWHU.js +176 -0
  111. package/dist/chunk-EYKJQJ7R.js +382 -0
  112. package/dist/chunk-FE5TCBIT.js +30 -0
  113. package/dist/chunk-FJ2JV2VK.js +217 -0
  114. package/dist/chunk-FZYVPRVQ.js +38 -0
  115. package/dist/chunk-GBKQHVKJ.js +274 -0
  116. package/dist/chunk-GK5QS5BR.js +2685 -0
  117. package/dist/chunk-GLAR6VNF.js +626 -0
  118. package/dist/chunk-GUW7VTUL.js +281 -0
  119. package/dist/chunk-H6YM4NKS.js +134 -0
  120. package/dist/chunk-HJKVYTYK.js +379 -0
  121. package/dist/chunk-HN67TOA7.js +2008 -0
  122. package/dist/chunk-IXV7FX5B.js +255 -0
  123. package/dist/chunk-IZ4IPYQY.js +466 -0
  124. package/dist/chunk-JHLF2ZC2.js +472 -0
  125. package/dist/chunk-JPPNQVKA.js +56 -0
  126. package/dist/chunk-K2ARLT2A.js +26 -0
  127. package/dist/chunk-KCVBFXGO.js +2941 -0
  128. package/dist/chunk-KCVBFXGO.js.map +7 -0
  129. package/dist/chunk-LOX5GAVG.js +103 -0
  130. package/dist/chunk-M6OSJMVD.js +536 -0
  131. package/dist/chunk-M6OSJMVD.js.map +7 -0
  132. package/dist/chunk-MANAUI7R.js +54 -0
  133. package/dist/chunk-MEUSRAOE.js +170 -0
  134. package/dist/chunk-MHWYRNGA.js +348 -0
  135. package/dist/chunk-NX5IB4IY.js +37 -0
  136. package/dist/chunk-PEKCVKJK.js +26621 -0
  137. package/dist/chunk-PEKCVKJK.js.map +7 -0
  138. package/dist/chunk-PIGTIWSK.js +34 -0
  139. package/dist/chunk-PIN5YUVJ.js +6375 -0
  140. package/dist/chunk-PV7AYYRZ.js +50 -0
  141. package/dist/chunk-QI7OWVFY.js +54 -0
  142. package/dist/chunk-QWBNQYIF.js +182 -0
  143. package/dist/chunk-RIHO7ZD5.js +119 -0
  144. package/dist/chunk-S6WRMFWQ.js +418 -0
  145. package/dist/chunk-SUOEFEJO.js +96 -0
  146. package/dist/chunk-TVSNHVWX.js +194 -0
  147. package/dist/chunk-U3CWWOHL.js +340 -0
  148. package/dist/chunk-VGC4STKW.js +56 -0
  149. package/dist/chunk-VHC4FDEJ.js +141 -0
  150. package/dist/chunk-VLIOMJDR.js +276 -0
  151. package/dist/chunk-VSDJEPDN.js +5214 -0
  152. package/dist/chunk-WJLRU5OF.js +5786 -0
  153. package/dist/chunk-WJLRU5OF.js.map +7 -0
  154. package/dist/chunk-WTWHUZ4O.js +203 -0
  155. package/dist/chunk-XHZ723K4.js +2334 -0
  156. package/dist/chunk-XP4P55IC.js +14 -0
  157. package/dist/chunk-XVPPM25G.js +1253 -0
  158. package/dist/chunk-XYUERIZ6.js +4389 -0
  159. package/dist/chunk-XYUERIZ6.js.map +7 -0
  160. package/dist/chunk-YDIIKD7O.js +102 -0
  161. package/dist/chunk-YLGSRK75.js +102 -0
  162. package/dist/chunk-YR6EXI2K.js +184 -0
  163. package/dist/chunk-Z53VY5JV.js +296 -0
  164. package/dist/chunk-Z5ECCUNG.js +444 -0
  165. package/dist/chunk-Z7Q2O5Y7.js +237 -0
  166. package/dist/cohort-ERDL7EJU.js +66 -0
  167. package/dist/cohortSunburst-KSTVS3OQ.js +402 -0
  168. package/dist/condition-CTJYHRJG.js +323 -0
  169. package/dist/controls-MMMRBTZL.js +30 -0
  170. package/dist/controls.config-ZKMQI27Q.js +30 -0
  171. package/dist/correlation-NEQNBQTT.js +91 -0
  172. package/dist/customdata.inputui-THUR7DF5.js +280 -0
  173. package/dist/dataDownload-ZMAJUKBX.js +326 -0
  174. package/dist/dataDownload-ZMAJUKBX.js.map +7 -0
  175. package/dist/databrowser.ui-A6ZSIUG4.js +421 -0
  176. package/dist/dictionary-TQUVCHIN.js +109 -0
  177. package/dist/dnaMethylation-ZMJYY3ML.js +29 -0
  178. package/dist/dnaMethylation.integration.spec-5DTBGTYB.js +194 -0
  179. package/dist/dofetch-KBTN6OW4.js +49 -0
  180. package/dist/e2pca-DNWBF545.js +340 -0
  181. package/dist/ep-JNH3HMY4.js +1247 -0
  182. package/dist/expclust.gdc.spec-2NJ7JVJW.js +298 -0
  183. package/dist/facet-RWQFAVVU.js +556 -0
  184. package/dist/gb-OT2Z3Y7J.js +77 -0
  185. package/dist/geneExpClustering-TPYGSTMO.js +240 -0
  186. package/dist/geneExpression-4K3OTXBZ.js +29 -0
  187. package/dist/geneExpression-KPUOZ4PT.js +309 -0
  188. package/dist/geneExpression.unit.spec-26MCGRAP.js +151 -0
  189. package/dist/geneORA-GNXKCN45.js +269 -0
  190. package/dist/geneRanking-LV6W6TT7.js +544 -0
  191. package/dist/geneVariant-B2SYTHG6.js +289 -0
  192. package/dist/geneVariant-O4XG5VEM.js +32 -0
  193. package/dist/geneVariant.integration.spec-YYVPAFXT.js +672 -0
  194. package/dist/genefusion.ui-CVGGYVV3.js +299 -0
  195. package/dist/geneset-MBMCJNXT.js +199 -0
  196. package/dist/genomeBrowser.spec-OVXFKEIU.js +272 -0
  197. package/dist/grin2-OXRU465E.js +945 -0
  198. package/dist/grin2-YCJGBRFG.js +66 -0
  199. package/dist/hierCluster-KNPWL5KD.js +51 -0
  200. package/dist/hierCluster-L3LYQZQL.js +55 -0
  201. package/dist/hierCluster.config-VZBV5QIO.js +32 -0
  202. package/dist/hierCluster.integration.spec-ZM7K7WI4.js +479 -0
  203. package/dist/hierCluster.interactivity-EA7WVIQR.js +45 -0
  204. package/dist/hierCluster.renderers-YGX6MZZW.js +18 -0
  205. package/dist/imagePlot-OLVI26S5.js +152 -0
  206. package/dist/importPlot-3SSCNROC.js +8 -0
  207. package/dist/isoformExpression-BTMJNAAO.js +31 -0
  208. package/dist/isoformExpression.unit.spec-S2W5T42Z.js +233 -0
  209. package/dist/junction-GIS5OCRO.js +32 -0
  210. package/dist/junction.customTerm-3R2GNE3A.js +15 -0
  211. package/dist/junction.unit.spec-MSILW6QZ.js +178 -0
  212. package/dist/launch.adhoc-LLJY4LA5.js +33 -0
  213. package/dist/leftlabel.sample-P6DDVCOW.js +253 -0
  214. package/dist/lollipop-J34YCYIP.js +162 -0
  215. package/dist/maf-MFEEYT5P.js +451 -0
  216. package/dist/maftimeline-TGJ37QYA.js +583 -0
  217. package/dist/matrix-A6BNFCIH.js +55 -0
  218. package/dist/matrix-XTKRVPMQ.js +50 -0
  219. package/dist/matrix.cells-5RTZUJVN.js +25 -0
  220. package/dist/matrix.config-RMDDMOZ5.js +33 -0
  221. package/dist/matrix.data-Y5TPRGMW.js +22 -0
  222. package/dist/matrix.groups-6DXCAY4P.js +25 -0
  223. package/dist/matrix.integration.spec-2DVRXVNH.js +3156 -0
  224. package/dist/matrix.interactivity-MGOYEKDN.js +33 -0
  225. package/dist/matrix.layout-T7EC5ZC2.js +35 -0
  226. package/dist/matrix.legend-S3E76TVO.js +19 -0
  227. package/dist/matrix.renderers-GR77V3RL.js +30 -0
  228. package/dist/matrix.serieses-3UGLZW25.js +18 -0
  229. package/dist/matrix.sort-A7CNLDUJ.js +25 -0
  230. package/dist/matrix.sort.unit.spec-YUCV7G5L.js +464 -0
  231. package/dist/matrix.sorterUi-6PZR3YOD.js +15 -0
  232. package/dist/matrix.sorterUi.unit.spec-FESIQ2RC.js +334 -0
  233. package/dist/matrix.unit.spec-6QF3WKM7.js +146 -0
  234. package/dist/mavb-UXJBITZM.js +726 -0
  235. package/dist/mds.fimo-IPNWVBO4.js +509 -0
  236. package/dist/mds.samplescatterplot-KEG7RSN3.js +1545 -0
  237. package/dist/mds.survivalplot-LJF2CD33.js +472 -0
  238. package/dist/multivalue-YRQZ73DI.js +79 -0
  239. package/dist/numericDictTermCluster-6XDVVWLE.js +62 -0
  240. package/dist/oncomatrix-TIMH5JKS.js +286 -0
  241. package/dist/oncomatrix.spec-MUOKKCJN.js +439 -0
  242. package/dist/plot.2dvaf-3OL4S6QG.js +368 -0
  243. package/dist/plot.app-CMLHZV5F.js +32 -0
  244. package/dist/plot.barplot-NRYMIPK6.js +93 -0
  245. package/dist/plot.boxplot-ANGW3WUC.js +142 -0
  246. package/dist/plot.brainImaging-YUDBYKX5.js +51 -0
  247. package/dist/plot.disco-LV7RE3YO.js +98 -0
  248. package/dist/plot.ssgq-F2LOQFYD.js +130 -0
  249. package/dist/plot.vaf2cov-5OKC7X6D.js +249 -0
  250. package/dist/polar2-BGJA2GHZ.js +228 -0
  251. package/dist/profileForms-BKP3OBKV.js +937 -0
  252. package/dist/profilePlot-5PRRNUKD.js +45 -0
  253. package/dist/proteinView-VZIWIZZY.js +1346 -0
  254. package/dist/proteomeCohortCompare-XZI5OI4X.js +866 -0
  255. package/dist/pseudbulk.unit.spec-DXJQV7JQ.js +82 -0
  256. package/dist/pseudobulk-FCH3WW6O.js +31 -0
  257. package/dist/qualitative-ATX53V44.js +34 -0
  258. package/dist/qualitative-BRKLVRKW.js +241 -0
  259. package/dist/radar2-6BBT2FBT.js +323 -0
  260. package/dist/radarFacility2-76Q3IYP2.js +331 -0
  261. package/dist/rememberedGvQ.unit.spec-SHTMMZGG.js +210 -0
  262. package/dist/render-KUC3QH36.js +29 -0
  263. package/dist/report-KB4K7ZXC.js +213 -0
  264. package/dist/sampleView-QD2JLZ4T.js +39 -0
  265. package/dist/samplelst-6R5RYHNV.js +114 -0
  266. package/dist/samplematrix-NGORNBTR.js +2188 -0
  267. package/dist/sc-27AHZZDK.js +77 -0
  268. package/dist/scatter-FXLZMWD6.js +84 -0
  269. package/dist/scatter-OWFYLMSJ.js +919 -0
  270. package/dist/selectGenomeWithTklst-ZTGABCXC.js +125 -0
  271. package/dist/singleCellCellType-7XXJ5NWC.js +29 -0
  272. package/dist/singleCellCellType.unit.spec-Y3TEYYCF.js +150 -0
  273. package/dist/singleCellGeneExpression-EUAIEIYJ.js +29 -0
  274. package/dist/singleCellGeneExpression.unit.spec-JVHPFLML.js +144 -0
  275. package/dist/singleCellNumericValue-FHIECJDK.js +29 -0
  276. package/dist/singleCellNumericValue.unit.spec-ZFG56MIO.js +412 -0
  277. package/dist/singleCellPlot-NDGIW32L.js +44 -0
  278. package/dist/singlecell-JPWVPZEF.js +1562 -0
  279. package/dist/singlecell-N7RJMWZ2.js +77 -0
  280. package/dist/snp-APUTOL2F.js +29 -0
  281. package/dist/snp.unit.spec-4AN7AJKO.js +167 -0
  282. package/dist/snplocus-WIMFAMBE.js +200 -0
  283. package/dist/snplst-SUJ5AK4E.js +36 -0
  284. package/dist/spliceevent.a53ss.diagram-4UBI7PFJ.js +142 -0
  285. package/dist/spliceevent.exonskip.diagram-NVEXVRIC.js +274 -0
  286. package/dist/spliceevent.noeventdiagram-CKEWNLVF.js +451 -0
  287. package/dist/ssGSEA-CJOVXTAW.js +29 -0
  288. package/dist/ssGSEA.unit.spec-A7VRVJSF.js +79 -0
  289. package/dist/stattable-JBJVVLQE.js +112 -0
  290. package/dist/studyCatalog-NEL7XSIP.js +457 -0
  291. package/dist/summarizeCnvGeneexp-BZSCTA5W.js +154 -0
  292. package/dist/summarizeGeneexpSurvival-743KXNV7.js +101 -0
  293. package/dist/summarizeMutationCnv-CALMSQGV.js +155 -0
  294. package/dist/summarizeMutationDiagnosis-OTE7O4AS.js +31 -0
  295. package/dist/summarizeMutationSurvival-VOZOFTFM.js +95 -0
  296. package/dist/summary-XJKCD35N.js +40 -0
  297. package/dist/summary.integration.spec-OOEU6WNB.js +405 -0
  298. package/dist/summaryInput-JSOXVSMY.js +238 -0
  299. package/dist/sunburst-J3QHMYKW.js +34 -0
  300. package/dist/sunburst-LZPP6NPV.js +274 -0
  301. package/dist/survival-5GWRVTQ6.js +49 -0
  302. package/dist/survival-FW7N3YXZ.js +1248 -0
  303. package/dist/survival.integration.spec-WN36VUHL.js +609 -0
  304. package/dist/svgraph-N35EMK3G.js +1377 -0
  305. package/dist/svmr-EWL5WDDD.js +3834 -0
  306. package/dist/swimmer-Z6FUH4CD.js +993 -0
  307. package/dist/swimmer-Z6FUH4CD.js.map +7 -0
  308. package/dist/table-EI2OIRGE.js +192 -0
  309. package/dist/termCollection-K3EX5P3F.js +29 -0
  310. package/dist/termCollection-TBTAHLVH.js +247 -0
  311. package/dist/termCollection.unit.spec-ZVNAIPHZ.js +295 -0
  312. package/dist/termCollectionFractionSelection-ATNIPWVX.js +38 -0
  313. package/dist/termCollectionFractionSelection.unit.spec-VBRWWBML.js +184 -0
  314. package/dist/tk-P3RPLUVH.js +1193 -0
  315. package/dist/tk-P3RPLUVH.js.map +7 -0
  316. package/dist/tk-U6CYISBH.js +37 -0
  317. package/dist/tp.ui-KBFYUSWS.js +1453 -0
  318. package/dist/tvs.categorical-5USP772O.js +28 -0
  319. package/dist/tvs.condition-652MAA2Z.js +160 -0
  320. package/dist/tvs.dt-7BTARQUS.js +34 -0
  321. package/dist/tvs.dtcnv.categorical-GAOO3DGO.js +31 -0
  322. package/dist/tvs.dtcnv.continuous-P2QRD45O.js +72 -0
  323. package/dist/tvs.dtfusion-L3I65W7L.js +31 -0
  324. package/dist/tvs.dtitd-B3JPW6OL.js +31 -0
  325. package/dist/tvs.dtsnvindel-6Y6CJBZV.js +31 -0
  326. package/dist/tvs.dtsv-GL7CPATL.js +31 -0
  327. package/dist/tvs.multivalue-75IM23FZ.js +84 -0
  328. package/dist/tvs.numeric-XB3GBPHE.js +32 -0
  329. package/dist/tvs.samplelst-QUA45UE7.js +95 -0
  330. package/dist/tvs.survival-EKSDZZIO.js +110 -0
  331. package/dist/tvs.termCollection-5ATMDC7O.js +118 -0
  332. package/dist/vocabulary-5QBBQAYC.js +32 -0
  333. package/dist/vocabulary-5QBBQAYC.js.map +7 -0
  334. package/dist/wsi.direct-BU6BL5UR.js +11514 -0
  335. package/package.json +3 -3
  336. package/dist/2dmaf-O2SQ5RGD.js +0 -1362
  337. package/dist/AggMatrixInput-LUCTWXHU.js +0 -402
  338. package/dist/AggregateMatrix-JVMF27YL.js +0 -37
  339. package/dist/AppHeader-DJU6HRKO.js +0 -826
  340. package/dist/BoxPlot-22RXMPRL.js +0 -1229
  341. package/dist/CorrelationVolcano-PBZWPFSN.js +0 -613
  342. package/dist/Cuminc-EL74X5GY.js +0 -1217
  343. package/dist/DE-W5SAMMRW.js +0 -85
  344. package/dist/DEinput-ZKEFJZQU.js +0 -479
  345. package/dist/DM-ABKDXMDG.js +0 -86
  346. package/dist/DifferentialAnalysis-3JTZ5WCQ.js +0 -236
  347. package/dist/Disco-ME53U25C.js +0 -3384
  348. package/dist/Disco.UI-F7XKJMKR.js +0 -239
  349. package/dist/DmrPlot-OWBXUTON.js +0 -361
  350. package/dist/GB-7X6DBWKS.js +0 -1388
  351. package/dist/GSEA-GAZIEGD7.js +0 -870
  352. package/dist/GeneExpInput-BAOC6ICV.js +0 -38
  353. package/dist/Geomap-OZERLL7V.js +0 -80
  354. package/dist/HicApp-WDH5LVTD.js +0 -2240
  355. package/dist/IDCViewer-XBZFU3BU.js +0 -10808
  356. package/dist/NumBinaryEditor-5R4EUQOZ.js +0 -274
  357. package/dist/NumBinaryEditor.unit.spec-ULBXMOYY.js +0 -308
  358. package/dist/NumContEditor-EN6V4FLQ.js +0 -100
  359. package/dist/NumContEditor.unit.spec-VDWKNIFN.js +0 -160
  360. package/dist/NumCustomBinEditor-UB34ALNZ.js +0 -29
  361. package/dist/NumCustomBinEditor.unit.spec-WZXJ7GEC.js +0 -393
  362. package/dist/NumDiscreteEditor-H6J67YEL.js +0 -165
  363. package/dist/NumDiscreteEditor.unit.spec-KJ7YU22W.js +0 -229
  364. package/dist/NumRegularBinEditor-R5JVUG7J.js +0 -29
  365. package/dist/NumRegularBinEditor.unit.spec-RZ73FMNO.js +0 -274
  366. package/dist/NumSplineEditor-AOR6OAJA.js +0 -205
  367. package/dist/NumSplineEditor.unit.spec-Z6ZEI3UO.js +0 -220
  368. package/dist/NumericDensity-SRTFTDQA.js +0 -29
  369. package/dist/NumericDensity.unit.spec-MRREBAYU.js +0 -414
  370. package/dist/NumericHandler-7RALUACA.js +0 -30
  371. package/dist/NumericHandler.unit.spec-MDO23WRB.js +0 -225
  372. package/dist/ProteomeInput-MOBXHRD5.js +0 -610
  373. package/dist/Regression-XWT4NNTG.js +0 -1412
  374. package/dist/RunChart2-Q7W5MWJS.js +0 -744
  375. package/dist/SC-MM3JTEVL.js +0 -1290
  376. package/dist/Violin-XNTBDUPG.js +0 -1092
  377. package/dist/Volcano-GRKXU3WL.js +0 -2619
  378. package/dist/Volcano-GRKXU3WL.js.map +0 -7
  379. package/dist/Wsi-22KJSFVH.js +0 -636
  380. package/dist/adSandbox-TLYWQOOA.js +0 -29
  381. package/dist/animatedBubbleChart-67SY5JGP.js +0 -542
  382. package/dist/app-FG3KPE4R.js +0 -28
  383. package/dist/app-VK5LYO6B.js +0 -38
  384. package/dist/bam-TNLNISLV.js +0 -872
  385. package/dist/barchart-IGWRVB6W.js +0 -38
  386. package/dist/barchart2-TT6OBJJP.js +0 -305
  387. package/dist/block-5PV2TYWJ.js +0 -6232
  388. package/dist/block-5PV2TYWJ.js.map +0 -7
  389. package/dist/block.init-2Y6CNK7H.js +0 -29
  390. package/dist/block.mds.expressionrank-VZ4JVPTG.js +0 -350
  391. package/dist/block.mds.geneboxplot-NYMS32JP.js +0 -819
  392. package/dist/block.mds.junction-3R6C3B5W.js +0 -1534
  393. package/dist/block.mds.svcnv-SO5CYYIQ.js +0 -6413
  394. package/dist/block.svg-R4ASXXNW.js +0 -155
  395. package/dist/block.tk.aicheck-LYRTDZRA.js +0 -274
  396. package/dist/block.tk.bam-GR7CHGGQ.js +0 -1897
  397. package/dist/block.tk.bedgraphdot-GERXK2O6.js +0 -375
  398. package/dist/block.tk.bedgraphdot-GERXK2O6.js.map +0 -7
  399. package/dist/block.tk.bigwig.ui-3KMMZX2M.js +0 -202
  400. package/dist/block.tk.hicstraw-7HH4PGFY.js +0 -814
  401. package/dist/block.tk.junction-BPEKLYS2.js +0 -2353
  402. package/dist/block.tk.junction.textmatrixui-2QU5DL2X.js +0 -190
  403. package/dist/block.tk.ld-TJREYPNY.js +0 -90
  404. package/dist/block.tk.menu-HDBZK4YP.js +0 -1050
  405. package/dist/block.tk.pgv-G5GCYBK2.js +0 -934
  406. package/dist/brainImaging-ODWHF7WZ.js +0 -550
  407. package/dist/brainRegions-DC7DEA7N.js +0 -213
  408. package/dist/bubbleHeatmap-T5ACULRL.js +0 -374
  409. package/dist/cellTypeBubbleHeatmap-RQINXXTK.js +0 -274
  410. package/dist/chunk-24ZS2XWC.js +0 -176
  411. package/dist/chunk-2EPEWVKQ.js +0 -4378
  412. package/dist/chunk-2EPEWVKQ.js.map +0 -7
  413. package/dist/chunk-2PHFY3VP.js +0 -195
  414. package/dist/chunk-2QFMKWNS.js +0 -281
  415. package/dist/chunk-2UB6JZ3I.js +0 -466
  416. package/dist/chunk-3GQ54XTJ.js +0 -70
  417. package/dist/chunk-3IE6FDVA.js +0 -1253
  418. package/dist/chunk-4OOQ52ET.js +0 -182
  419. package/dist/chunk-5NI77Z3O.js +0 -119
  420. package/dist/chunk-5TPWMYBG.js +0 -274
  421. package/dist/chunk-64JHE3GV.js +0 -50
  422. package/dist/chunk-6MUJGVOH.js +0 -140
  423. package/dist/chunk-6YGSVJJD.js +0 -54
  424. package/dist/chunk-7PQVNQFR.js +0 -255
  425. package/dist/chunk-7XW4JWMJ.js +0 -170
  426. package/dist/chunk-7ZEJKFGW.js +0 -55
  427. package/dist/chunk-A6ZUYQHO.js +0 -159
  428. package/dist/chunk-ALIMVUHR.js +0 -1219
  429. package/dist/chunk-ANBGNYNP.js +0 -1339
  430. package/dist/chunk-ATZNXW5F.js +0 -237
  431. package/dist/chunk-AUPTEHV7.js +0 -257
  432. package/dist/chunk-B2KYLEYM.js +0 -30
  433. package/dist/chunk-BJCET6RU.js +0 -263
  434. package/dist/chunk-BKW35Z4U.js +0 -26619
  435. package/dist/chunk-BKW35Z4U.js.map +0 -7
  436. package/dist/chunk-CJHNPYFQ.js +0 -2292
  437. package/dist/chunk-CJHNPYFQ.js.map +0 -7
  438. package/dist/chunk-CTVPW77S.js +0 -194
  439. package/dist/chunk-D6U65W7Q.js +0 -626
  440. package/dist/chunk-DJMDETVU.js +0 -2685
  441. package/dist/chunk-DKPAOVJH.js +0 -243
  442. package/dist/chunk-DRESQF33.js +0 -38
  443. package/dist/chunk-DXM5MQCZ.js +0 -382
  444. package/dist/chunk-ETXOEP4N.js +0 -184
  445. package/dist/chunk-FOUMNTII.js +0 -134
  446. package/dist/chunk-FTGLS763.js +0 -56
  447. package/dist/chunk-GN2A5NL5.js +0 -472
  448. package/dist/chunk-GWNCQ5YI.js +0 -468
  449. package/dist/chunk-GX6G2SSW.js +0 -26
  450. package/dist/chunk-H3YF55ZI.js +0 -848
  451. package/dist/chunk-IANE75G3.js +0 -444
  452. package/dist/chunk-IKZQST6E.js +0 -5213
  453. package/dist/chunk-IPRYYK26.js +0 -96
  454. package/dist/chunk-JL3PYV5F.js +0 -6375
  455. package/dist/chunk-K6VYSDB5.js +0 -276
  456. package/dist/chunk-KSS26PXB.js +0 -54
  457. package/dist/chunk-LO2QBHP6.js +0 -418
  458. package/dist/chunk-LSRFRZNP.js +0 -59
  459. package/dist/chunk-LYX4S6WA.js +0 -266
  460. package/dist/chunk-ME3HB3V6.js +0 -5787
  461. package/dist/chunk-ME3HB3V6.js.map +0 -7
  462. package/dist/chunk-MP7BA3GK.js +0 -14
  463. package/dist/chunk-MVSUESEV.js +0 -141
  464. package/dist/chunk-NQMS7WV3.js +0 -2799
  465. package/dist/chunk-NR6WFCPF.js +0 -348
  466. package/dist/chunk-NS2MZN3C.js +0 -562
  467. package/dist/chunk-NUA66GW7.js +0 -37
  468. package/dist/chunk-NYEFSOKD.js +0 -550
  469. package/dist/chunk-OVHQFZAE.js +0 -34
  470. package/dist/chunk-QM724EG2.js +0 -103
  471. package/dist/chunk-RIL33JCW.js +0 -102
  472. package/dist/chunk-RJAJG5KN.js +0 -2954
  473. package/dist/chunk-RJAJG5KN.js.map +0 -7
  474. package/dist/chunk-SLHXR4BZ.js +0 -82
  475. package/dist/chunk-SO76DLSZ.js +0 -299
  476. package/dist/chunk-T7CKGRGP.js +0 -398
  477. package/dist/chunk-T7CKGRGP.js.map +0 -7
  478. package/dist/chunk-TUO5I6LP.js +0 -123
  479. package/dist/chunk-TWTPWEYL.js +0 -240
  480. package/dist/chunk-U2GHNZ4N.js +0 -54
  481. package/dist/chunk-UAB5PGOP.js +0 -56
  482. package/dist/chunk-UCB3W3OT.js +0 -217
  483. package/dist/chunk-UJIB7QM3.js +0 -2334
  484. package/dist/chunk-UYQGTW7I.js +0 -1857
  485. package/dist/chunk-UYQGTW7I.js.map +0 -7
  486. package/dist/chunk-VBDJG6GZ.js +0 -2008
  487. package/dist/chunk-VOXUMZMG.js +0 -379
  488. package/dist/chunk-WCNMP54T.js +0 -516
  489. package/dist/chunk-WETOH7YW.js +0 -692
  490. package/dist/chunk-WKGKKM6F.js +0 -480
  491. package/dist/chunk-WV44DGEJ.js +0 -397
  492. package/dist/chunk-XVEEMQAT.js +0 -31
  493. package/dist/chunk-YBOHXANC.js +0 -302
  494. package/dist/chunk-YNQFOPS6.js +0 -203
  495. package/dist/chunk-YVQ4USPP.js +0 -340
  496. package/dist/chunk-ZWLT5QS3.js +0 -102
  497. package/dist/chunk-ZYAZHJPZ.js +0 -296
  498. package/dist/cohort-QSLKB4ZO.js +0 -66
  499. package/dist/cohortSunburst-AQFSNJ5K.js +0 -402
  500. package/dist/condition-MLS6TJHV.js +0 -323
  501. package/dist/controls-ZT3GZ667.js +0 -30
  502. package/dist/controls.config-F7NIPLKB.js +0 -30
  503. package/dist/correlation-ZEIQJGSQ.js +0 -91
  504. package/dist/customdata.inputui-6PJSAJK2.js +0 -280
  505. package/dist/dataDownload-CHMPXHBY.js +0 -325
  506. package/dist/dataDownload-CHMPXHBY.js.map +0 -7
  507. package/dist/databrowser.ui-EMZ5L2Y7.js +0 -421
  508. package/dist/dictionary-U2BWGY6B.js +0 -109
  509. package/dist/dnaMethylation-R34E2XNC.js +0 -29
  510. package/dist/dnaMethylation.integration.spec-4Z2AJHWY.js +0 -194
  511. package/dist/dofetch-JY4A7BYI.js +0 -47
  512. package/dist/e2pca-WSSCXX6A.js +0 -340
  513. package/dist/ep-ATUWEHDJ.js +0 -1247
  514. package/dist/expclust.gdc.spec-QRIRRPO7.js +0 -298
  515. package/dist/facet-5VDCSP3S.js +0 -556
  516. package/dist/gb-Y4UG6LFA.js +0 -77
  517. package/dist/geneExpClustering-OO67JNJ2.js +0 -240
  518. package/dist/geneExpression-5KGV3MAA.js +0 -29
  519. package/dist/geneExpression-KPRFXKU7.js +0 -309
  520. package/dist/geneExpression.unit.spec-YV45EZ5O.js +0 -151
  521. package/dist/geneORA-R74JPUTC.js +0 -269
  522. package/dist/geneRanking-IJTXNMHV.js +0 -544
  523. package/dist/geneVariant-HBAHT6LU.js +0 -32
  524. package/dist/geneVariant-JT3EGAIH.js +0 -289
  525. package/dist/geneVariant.integration.spec-TFQYPUAS.js +0 -672
  526. package/dist/genefusion.ui-MMTQMTHC.js +0 -299
  527. package/dist/geneset-VMBICNCZ.js +0 -199
  528. package/dist/genomeBrowser.spec-2XLLIYGA.js +0 -272
  529. package/dist/grin2-2RYPEUWV.js +0 -66
  530. package/dist/grin2-Y6KAFVV2.js +0 -945
  531. package/dist/hierCluster-EKGFBQT4.js +0 -51
  532. package/dist/hierCluster-Z4PVNMGS.js +0 -55
  533. package/dist/hierCluster.config-Q6WUNK2K.js +0 -32
  534. package/dist/hierCluster.integration.spec-2LHSHNFC.js +0 -479
  535. package/dist/hierCluster.interactivity-OGQ3KUY6.js +0 -45
  536. package/dist/hierCluster.renderers-3GJZXG75.js +0 -18
  537. package/dist/imagePlot-ZJEZPBX7.js +0 -152
  538. package/dist/importPlot-GFEFYEHZ.js +0 -8
  539. package/dist/isoformExpression-A2X3DSR6.js +0 -31
  540. package/dist/isoformExpression.unit.spec-VKMEGCL4.js +0 -233
  541. package/dist/junction-HWIHLQU2.js +0 -32
  542. package/dist/junction.customTerm-C3VWXEYH.js +0 -15
  543. package/dist/junction.unit.spec-ZYJGDOXJ.js +0 -178
  544. package/dist/launch.adhoc-HW5AZM4T.js +0 -33
  545. package/dist/leftlabel.sample-MTW2HRRQ.js +0 -253
  546. package/dist/lollipop-VWW5H6CR.js +0 -162
  547. package/dist/maf-KEJYO3H4.js +0 -451
  548. package/dist/maftimeline-MJZDSGSR.js +0 -583
  549. package/dist/matrix-3UJW6LOA.js +0 -50
  550. package/dist/matrix-W4AX5OBM.js +0 -55
  551. package/dist/matrix.cells-5DAIZ3E5.js +0 -25
  552. package/dist/matrix.config-PK26VPQT.js +0 -33
  553. package/dist/matrix.data-UK5DGKBK.js +0 -22
  554. package/dist/matrix.groups-NM4Q5YDN.js +0 -25
  555. package/dist/matrix.integration.spec-FGWNBCRR.js +0 -3156
  556. package/dist/matrix.interactivity-4C37PII5.js +0 -33
  557. package/dist/matrix.layout-ODV7WXUP.js +0 -35
  558. package/dist/matrix.legend-5MY7OXWN.js +0 -19
  559. package/dist/matrix.renderers-QA7W7ZUL.js +0 -30
  560. package/dist/matrix.serieses-4FSFJPCK.js +0 -18
  561. package/dist/matrix.sort-3QLFMBJ5.js +0 -25
  562. package/dist/matrix.sort.unit.spec-HVOC6IYT.js +0 -464
  563. package/dist/matrix.sorterUi-EY3SA6CG.js +0 -15
  564. package/dist/matrix.sorterUi.unit.spec-OAXWPZZI.js +0 -334
  565. package/dist/matrix.unit.spec-RAL7AU22.js +0 -146
  566. package/dist/mavb-KIM63AC4.js +0 -726
  567. package/dist/mds.fimo-DMAVM56P.js +0 -509
  568. package/dist/mds.samplescatterplot-KILTR2C7.js +0 -1545
  569. package/dist/mds.survivalplot-PV76ANBP.js +0 -472
  570. package/dist/multivalue-2V5LMQY7.js +0 -79
  571. package/dist/numericDictTermCluster-TGL4X6UC.js +0 -62
  572. package/dist/oncomatrix-2O7SLXHX.js +0 -286
  573. package/dist/oncomatrix.spec-HZJKOF5G.js +0 -439
  574. package/dist/plot.2dvaf-424NNMMA.js +0 -368
  575. package/dist/plot.app-YBZDNST2.js +0 -32
  576. package/dist/plot.barplot-YZQBYJUY.js +0 -93
  577. package/dist/plot.boxplot-5OW6IBQL.js +0 -142
  578. package/dist/plot.brainImaging-H3ABPPD3.js +0 -51
  579. package/dist/plot.disco-X7KCDWGX.js +0 -98
  580. package/dist/plot.ssgq-GYRVHTC7.js +0 -130
  581. package/dist/plot.vaf2cov-B2TELPHL.js +0 -249
  582. package/dist/polar2-5KNZRLXY.js +0 -228
  583. package/dist/profileForms-FY34KXCL.js +0 -937
  584. package/dist/profilePlot-3FX2TPYC.js +0 -45
  585. package/dist/proteinView-WSEO3LD3.js +0 -1346
  586. package/dist/proteomeCohortCompare-KA2DF3EE.js +0 -866
  587. package/dist/pseudbulk.unit.spec-AT3TFCOW.js +0 -82
  588. package/dist/pseudobulk-4ZRHUC7W.js +0 -31
  589. package/dist/qualitative-3OBGJRP6.js +0 -241
  590. package/dist/qualitative-FHJD44OA.js +0 -34
  591. package/dist/radar2-X757WR6V.js +0 -323
  592. package/dist/radarFacility2-GUBAK4Y3.js +0 -331
  593. package/dist/rememberedGvQ.unit.spec-ADO4Y2OE.js +0 -210
  594. package/dist/render-MZEPNEMU.js +0 -29
  595. package/dist/report-TUAFDGAE.js +0 -213
  596. package/dist/sampleView-X6YKCBE7.js +0 -39
  597. package/dist/samplelst-UPNRALBH.js +0 -114
  598. package/dist/samplematrix-W3HZK3IS.js +0 -2188
  599. package/dist/sc-UL7233UR.js +0 -77
  600. package/dist/scatter-FTJ77NUM.js +0 -919
  601. package/dist/scatter-VQQRIW6N.js +0 -84
  602. package/dist/selectGenomeWithTklst-HPYPSPFI.js +0 -125
  603. package/dist/singleCellCellType-XTKGOH6H.js +0 -29
  604. package/dist/singleCellCellType.unit.spec-A62GT72A.js +0 -150
  605. package/dist/singleCellGeneExpression-X7H5GTU3.js +0 -29
  606. package/dist/singleCellGeneExpression.unit.spec-2KQBHG7O.js +0 -144
  607. package/dist/singleCellNumericValue-6YS42PZ2.js +0 -29
  608. package/dist/singleCellNumericValue.unit.spec-DNVXQFKI.js +0 -412
  609. package/dist/singleCellPlot-MGOQ7EQV.js +0 -44
  610. package/dist/singlecell-CIOB5XON.js +0 -77
  611. package/dist/singlecell-QW3SLQD6.js +0 -1562
  612. package/dist/snp-6B4MIPKL.js +0 -29
  613. package/dist/snp.unit.spec-HNILS56E.js +0 -167
  614. package/dist/snplocus-DDFLYZ2Y.js +0 -200
  615. package/dist/snplst-JYKOV73J.js +0 -36
  616. package/dist/spliceevent.a53ss.diagram-IBD5ITXR.js +0 -142
  617. package/dist/spliceevent.exonskip.diagram-ZJGEVUYW.js +0 -274
  618. package/dist/spliceevent.noeventdiagram-RNLNTFOW.js +0 -451
  619. package/dist/ssGSEA-42VQLAXL.js +0 -29
  620. package/dist/ssGSEA.unit.spec-FBJANIKG.js +0 -79
  621. package/dist/stattable-FROSNTJY.js +0 -112
  622. package/dist/studyCatalog-XIYNJ24U.js +0 -457
  623. package/dist/summarizeCnvGeneexp-N3OFI24L.js +0 -154
  624. package/dist/summarizeGeneexpSurvival-J4DO2AL4.js +0 -101
  625. package/dist/summarizeMutationCnv-Y43BBSI4.js +0 -155
  626. package/dist/summarizeMutationDiagnosis-JAEAUFCA.js +0 -31
  627. package/dist/summarizeMutationSurvival-4QZDDXDV.js +0 -95
  628. package/dist/summary-DTJZ7NNA.js +0 -40
  629. package/dist/summary.integration.spec-HRRE3J45.js +0 -405
  630. package/dist/summaryInput-WCADUZBK.js +0 -238
  631. package/dist/sunburst-BGXSCB63.js +0 -274
  632. package/dist/sunburst-DSFFFP33.js +0 -504
  633. package/dist/sunburst-DSFFFP33.js.map +0 -7
  634. package/dist/survival-LFXQIWRT.js +0 -49
  635. package/dist/survival-ONWZ5RFM.js +0 -1248
  636. package/dist/survival.integration.spec-ZP7XWHQH.js +0 -609
  637. package/dist/svgraph-2SL2SJVU.js +0 -1377
  638. package/dist/svmr-ONIPMLC2.js +0 -3834
  639. package/dist/swimmer-2EJZH5PP.js +0 -785
  640. package/dist/swimmer-2EJZH5PP.js.map +0 -7
  641. package/dist/table-LLCFO4KK.js +0 -192
  642. package/dist/termCollection-DAHJGR5P.js +0 -247
  643. package/dist/termCollection-QIN53TIL.js +0 -29
  644. package/dist/termCollection.unit.spec-FQOX2IVP.js +0 -295
  645. package/dist/termCollectionFractionSelection-UKEVVZXL.js +0 -38
  646. package/dist/termCollectionFractionSelection.unit.spec-URGEYBU2.js +0 -184
  647. package/dist/tk-4PYQ6WJQ.js +0 -1116
  648. package/dist/tk-4PYQ6WJQ.js.map +0 -7
  649. package/dist/tk-GM7CJ2LU.js +0 -37
  650. package/dist/tp.ui-TRUHW6GP.js +0 -1453
  651. package/dist/tvs.categorical-IY6YSFVN.js +0 -28
  652. package/dist/tvs.condition-YTD7GOPW.js +0 -160
  653. package/dist/tvs.dt-AQQIZD5Z.js +0 -34
  654. package/dist/tvs.dtcnv.categorical-WOAOGJSW.js +0 -31
  655. package/dist/tvs.dtcnv.continuous-TJBEPJGO.js +0 -72
  656. package/dist/tvs.dtfusion-SFMZQKKU.js +0 -31
  657. package/dist/tvs.dtitd-Q5RQTCLD.js +0 -31
  658. package/dist/tvs.dtsnvindel-UEK4O6WI.js +0 -31
  659. package/dist/tvs.dtsv-ECS4KEYG.js +0 -31
  660. package/dist/tvs.multivalue-CJIZ3I54.js +0 -84
  661. package/dist/tvs.numeric-UFAOJR2B.js +0 -32
  662. package/dist/tvs.samplelst-BVFY2P7Q.js +0 -95
  663. package/dist/tvs.survival-L56B3I55.js +0 -110
  664. package/dist/tvs.termCollection-BFIBVBSA.js +0 -118
  665. package/dist/vocabulary-MTKDDDGB.js +0 -32
  666. package/dist/wsi.direct-OSHY7VL4.js +0 -11514
  667. /package/dist/{2dmaf-O2SQ5RGD.js.map → 2dmaf-KRIX5DBS.js.map} +0 -0
  668. /package/dist/{AggMatrixInput-LUCTWXHU.js.map → AggMatrixInput-GBQD74NV.js.map} +0 -0
  669. /package/dist/{AggregateMatrix-JVMF27YL.js.map → AggregateMatrix-U2MOQOSZ.js.map} +0 -0
  670. /package/dist/{AppHeader-DJU6HRKO.js.map → AppHeader-OBZWUCOD.js.map} +0 -0
  671. /package/dist/{BoxPlot-22RXMPRL.js.map → BoxPlot-ZK6Q5JGE.js.map} +0 -0
  672. /package/dist/{CorrelationVolcano-PBZWPFSN.js.map → CorrelationVolcano-WGR4JIGK.js.map} +0 -0
  673. /package/dist/{Cuminc-EL74X5GY.js.map → Cuminc-I6D6YSIL.js.map} +0 -0
  674. /package/dist/{DE-W5SAMMRW.js.map → DE-HO7UBKPC.js.map} +0 -0
  675. /package/dist/{DEinput-ZKEFJZQU.js.map → DEinput-6LX4I65N.js.map} +0 -0
  676. /package/dist/{DM-ABKDXMDG.js.map → DM-WYKLX4IC.js.map} +0 -0
  677. /package/dist/{DifferentialAnalysis-3JTZ5WCQ.js.map → DifferentialAnalysis-L5VVBCVZ.js.map} +0 -0
  678. /package/dist/{Disco-ME53U25C.js.map → Disco-HLARIYXU.js.map} +0 -0
  679. /package/dist/{Disco.UI-F7XKJMKR.js.map → Disco.UI-W64WFVC3.js.map} +0 -0
  680. /package/dist/{DmrPlot-OWBXUTON.js.map → DmrPlot-BKQOT4JM.js.map} +0 -0
  681. /package/dist/{GB-7X6DBWKS.js.map → GB-WKFGDJYW.js.map} +0 -0
  682. /package/dist/{GSEA-GAZIEGD7.js.map → GSEA-DCCJI5JE.js.map} +0 -0
  683. /package/dist/{GeneExpInput-BAOC6ICV.js.map → GeneExpInput-APLFNE6N.js.map} +0 -0
  684. /package/dist/{Geomap-OZERLL7V.js.map → Geomap-FTKWCV4J.js.map} +0 -0
  685. /package/dist/{HicApp-WDH5LVTD.js.map → HicApp-ZGZKO4Y4.js.map} +0 -0
  686. /package/dist/{IDCViewer-XBZFU3BU.js.map → IDCViewer-MXB3OZUZ.js.map} +0 -0
  687. /package/dist/{NumBinaryEditor-5R4EUQOZ.js.map → NumBinaryEditor-S3MHUVZ5.js.map} +0 -0
  688. /package/dist/{NumBinaryEditor.unit.spec-ULBXMOYY.js.map → NumBinaryEditor.unit.spec-264X5ULG.js.map} +0 -0
  689. /package/dist/{NumContEditor-EN6V4FLQ.js.map → NumContEditor-MKEZCZMR.js.map} +0 -0
  690. /package/dist/{NumContEditor.unit.spec-VDWKNIFN.js.map → NumContEditor.unit.spec-KBRAIU7M.js.map} +0 -0
  691. /package/dist/{NumCustomBinEditor-UB34ALNZ.js.map → NumCustomBinEditor-OSF64BFC.js.map} +0 -0
  692. /package/dist/{NumCustomBinEditor.unit.spec-WZXJ7GEC.js.map → NumCustomBinEditor.unit.spec-T2SRBXTV.js.map} +0 -0
  693. /package/dist/{NumDiscreteEditor-H6J67YEL.js.map → NumDiscreteEditor-PVW5HRRQ.js.map} +0 -0
  694. /package/dist/{NumDiscreteEditor.unit.spec-KJ7YU22W.js.map → NumDiscreteEditor.unit.spec-GUK7VWMR.js.map} +0 -0
  695. /package/dist/{NumRegularBinEditor-R5JVUG7J.js.map → NumRegularBinEditor-757VRGFQ.js.map} +0 -0
  696. /package/dist/{NumRegularBinEditor.unit.spec-RZ73FMNO.js.map → NumRegularBinEditor.unit.spec-JUIGEH3Z.js.map} +0 -0
  697. /package/dist/{NumSplineEditor-AOR6OAJA.js.map → NumSplineEditor-U6MVFSCZ.js.map} +0 -0
  698. /package/dist/{NumSplineEditor.unit.spec-Z6ZEI3UO.js.map → NumSplineEditor.unit.spec-PSH6YENX.js.map} +0 -0
  699. /package/dist/{NumericDensity-SRTFTDQA.js.map → NumericDensity-YIP25Z4Y.js.map} +0 -0
  700. /package/dist/{NumericDensity.unit.spec-MRREBAYU.js.map → NumericDensity.unit.spec-3OSIZJHH.js.map} +0 -0
  701. /package/dist/{NumericHandler-7RALUACA.js.map → NumericHandler-D2CO3FTS.js.map} +0 -0
  702. /package/dist/{NumericHandler.unit.spec-MDO23WRB.js.map → NumericHandler.unit.spec-RNFVGO2I.js.map} +0 -0
  703. /package/dist/{ProteomeInput-MOBXHRD5.js.map → ProteomeInput-ZOBJ2VU6.js.map} +0 -0
  704. /package/dist/{Regression-XWT4NNTG.js.map → Regression-ABKJOOMQ.js.map} +0 -0
  705. /package/dist/{RunChart2-Q7W5MWJS.js.map → RunChart2-D5CEEFEE.js.map} +0 -0
  706. /package/dist/{SC-MM3JTEVL.js.map → SC-RLVEECU5.js.map} +0 -0
  707. /package/dist/{Violin-XNTBDUPG.js.map → Violin-PCNX2CWV.js.map} +0 -0
  708. /package/dist/{Wsi-22KJSFVH.js.map → Wsi-MAMCK5YZ.js.map} +0 -0
  709. /package/dist/{adSandbox-TLYWQOOA.js.map → adSandbox-5YFAQZO6.js.map} +0 -0
  710. /package/dist/{animatedBubbleChart-67SY5JGP.js.map → animatedBubbleChart-GM2GXDP3.js.map} +0 -0
  711. /package/dist/{app-FG3KPE4R.js.map → app-FNNCH37H.js.map} +0 -0
  712. /package/dist/{app-VK5LYO6B.js.map → app-ID5S5FUP.js.map} +0 -0
  713. /package/dist/{bam-TNLNISLV.js.map → bam-JZLYXHMF.js.map} +0 -0
  714. /package/dist/{barchart-IGWRVB6W.js.map → barchart-EAXXILCH.js.map} +0 -0
  715. /package/dist/{barchart2-TT6OBJJP.js.map → barchart2-E6A4UMUB.js.map} +0 -0
  716. /package/dist/{block.init-2Y6CNK7H.js.map → block.init-TUCGKLXG.js.map} +0 -0
  717. /package/dist/{block.mds.expressionrank-VZ4JVPTG.js.map → block.mds.expressionrank-YVROHZVX.js.map} +0 -0
  718. /package/dist/{block.mds.geneboxplot-NYMS32JP.js.map → block.mds.geneboxplot-TQNEWBJY.js.map} +0 -0
  719. /package/dist/{block.mds.junction-3R6C3B5W.js.map → block.mds.junction-ZOSTZQF5.js.map} +0 -0
  720. /package/dist/{block.mds.svcnv-SO5CYYIQ.js.map → block.mds.svcnv-XSTSJ4ZD.js.map} +0 -0
  721. /package/dist/{block.svg-R4ASXXNW.js.map → block.svg-D6HXL4SC.js.map} +0 -0
  722. /package/dist/{block.tk.aicheck-LYRTDZRA.js.map → block.tk.aicheck-7RNC4HRR.js.map} +0 -0
  723. /package/dist/{block.tk.bam-GR7CHGGQ.js.map → block.tk.bam-L3U5YH3F.js.map} +0 -0
  724. /package/dist/{block.tk.bigwig.ui-3KMMZX2M.js.map → block.tk.bigwig.ui-UVSZ7LWQ.js.map} +0 -0
  725. /package/dist/{block.tk.hicstraw-7HH4PGFY.js.map → block.tk.hicstraw-YFBJR5LO.js.map} +0 -0
  726. /package/dist/{block.tk.junction-BPEKLYS2.js.map → block.tk.junction-DNRK2JNQ.js.map} +0 -0
  727. /package/dist/{block.tk.junction.textmatrixui-2QU5DL2X.js.map → block.tk.junction.textmatrixui-EN4ADCAU.js.map} +0 -0
  728. /package/dist/{block.tk.ld-TJREYPNY.js.map → block.tk.ld-I5CTAJ4K.js.map} +0 -0
  729. /package/dist/{block.tk.menu-HDBZK4YP.js.map → block.tk.menu-HUZBY7OM.js.map} +0 -0
  730. /package/dist/{block.tk.pgv-G5GCYBK2.js.map → block.tk.pgv-KA6BFYPY.js.map} +0 -0
  731. /package/dist/{brainImaging-ODWHF7WZ.js.map → brainImaging-OQB2ZHCU.js.map} +0 -0
  732. /package/dist/{brainRegions-DC7DEA7N.js.map → brainRegions-2CRVMS24.js.map} +0 -0
  733. /package/dist/{bubbleHeatmap-T5ACULRL.js.map → bubbleHeatmap-MANNFEG2.js.map} +0 -0
  734. /package/dist/{cellTypeBubbleHeatmap-RQINXXTK.js.map → cellTypeBubbleHeatmap-LRK4R4EC.js.map} +0 -0
  735. /package/dist/{chunk-A6ZUYQHO.js.map → chunk-2NB5HVXB.js.map} +0 -0
  736. /package/dist/{chunk-2PHFY3VP.js.map → chunk-2OMX5AYB.js.map} +0 -0
  737. /package/dist/{chunk-7ZEJKFGW.js.map → chunk-3E26ITYK.js.map} +0 -0
  738. /package/dist/{chunk-LYX4S6WA.js.map → chunk-3H4FCRAN.js.map} +0 -0
  739. /package/dist/{chunk-WKGKKM6F.js.map → chunk-4GKC43U3.js.map} +0 -0
  740. /package/dist/{chunk-YBOHXANC.js.map → chunk-4NQS45KH.js.map} +0 -0
  741. /package/dist/{chunk-TWTPWEYL.js.map → chunk-4ZV6SE4B.js.map} +0 -0
  742. /package/dist/{chunk-NS2MZN3C.js.map → chunk-5DI4UNH5.js.map} +0 -0
  743. /package/dist/{chunk-KSS26PXB.js.map → chunk-5TA5LHPW.js.map} +0 -0
  744. /package/dist/{chunk-ANBGNYNP.js.map → chunk-5YQXNW6Y.js.map} +0 -0
  745. /package/dist/{chunk-H3YF55ZI.js.map → chunk-67MD4UES.js.map} +0 -0
  746. /package/dist/{chunk-TUO5I6LP.js.map → chunk-6BBUIRHA.js.map} +0 -0
  747. /package/dist/{chunk-GWNCQ5YI.js.map → chunk-6DESNDD5.js.map} +0 -0
  748. /package/dist/{chunk-DKPAOVJH.js.map → chunk-6DRRN5XP.js.map} +0 -0
  749. /package/dist/{chunk-WV44DGEJ.js.map → chunk-6T4MN7LV.js.map} +0 -0
  750. /package/dist/{chunk-SLHXR4BZ.js.map → chunk-7TLUQH7J.js.map} +0 -0
  751. /package/dist/{chunk-ALIMVUHR.js.map → chunk-7YMZSVWW.js.map} +0 -0
  752. /package/dist/{chunk-SO76DLSZ.js.map → chunk-AENUJ7UO.js.map} +0 -0
  753. /package/dist/{chunk-BJCET6RU.js.map → chunk-AZSWQWKL.js.map} +0 -0
  754. /package/dist/{chunk-AUPTEHV7.js.map → chunk-BOCU6PXO.js.map} +0 -0
  755. /package/dist/{chunk-LSRFRZNP.js.map → chunk-C7KUMZQM.js.map} +0 -0
  756. /package/dist/{chunk-6MUJGVOH.js.map → chunk-C7ROKWV2.js.map} +0 -0
  757. /package/dist/{chunk-3GQ54XTJ.js.map → chunk-C7ZPDNOJ.js.map} +0 -0
  758. /package/dist/{chunk-XVEEMQAT.js.map → chunk-CAH6LJ5Z.js.map} +0 -0
  759. /package/dist/{chunk-WETOH7YW.js.map → chunk-DEQREL5P.js.map} +0 -0
  760. /package/dist/{chunk-NQMS7WV3.js.map → chunk-DXKZBSSD.js.map} +0 -0
  761. /package/dist/{chunk-NYEFSOKD.js.map → chunk-DZBPF5QI.js.map} +0 -0
  762. /package/dist/{chunk-WCNMP54T.js.map → chunk-DZDK64XY.js.map} +0 -0
  763. /package/dist/{chunk-24ZS2XWC.js.map → chunk-E6C2EWHU.js.map} +0 -0
  764. /package/dist/{chunk-DXM5MQCZ.js.map → chunk-EYKJQJ7R.js.map} +0 -0
  765. /package/dist/{chunk-B2KYLEYM.js.map → chunk-FE5TCBIT.js.map} +0 -0
  766. /package/dist/{chunk-UCB3W3OT.js.map → chunk-FJ2JV2VK.js.map} +0 -0
  767. /package/dist/{chunk-DRESQF33.js.map → chunk-FZYVPRVQ.js.map} +0 -0
  768. /package/dist/{chunk-5TPWMYBG.js.map → chunk-GBKQHVKJ.js.map} +0 -0
  769. /package/dist/{chunk-DJMDETVU.js.map → chunk-GK5QS5BR.js.map} +0 -0
  770. /package/dist/{chunk-D6U65W7Q.js.map → chunk-GLAR6VNF.js.map} +0 -0
  771. /package/dist/{chunk-2QFMKWNS.js.map → chunk-GUW7VTUL.js.map} +0 -0
  772. /package/dist/{chunk-FOUMNTII.js.map → chunk-H6YM4NKS.js.map} +0 -0
  773. /package/dist/{chunk-VOXUMZMG.js.map → chunk-HJKVYTYK.js.map} +0 -0
  774. /package/dist/{chunk-VBDJG6GZ.js.map → chunk-HN67TOA7.js.map} +0 -0
  775. /package/dist/{chunk-7PQVNQFR.js.map → chunk-IXV7FX5B.js.map} +0 -0
  776. /package/dist/{chunk-2UB6JZ3I.js.map → chunk-IZ4IPYQY.js.map} +0 -0
  777. /package/dist/{chunk-GN2A5NL5.js.map → chunk-JHLF2ZC2.js.map} +0 -0
  778. /package/dist/{chunk-FTGLS763.js.map → chunk-JPPNQVKA.js.map} +0 -0
  779. /package/dist/{chunk-GX6G2SSW.js.map → chunk-K2ARLT2A.js.map} +0 -0
  780. /package/dist/{chunk-QM724EG2.js.map → chunk-LOX5GAVG.js.map} +0 -0
  781. /package/dist/{chunk-6YGSVJJD.js.map → chunk-MANAUI7R.js.map} +0 -0
  782. /package/dist/{chunk-7XW4JWMJ.js.map → chunk-MEUSRAOE.js.map} +0 -0
  783. /package/dist/{chunk-NR6WFCPF.js.map → chunk-MHWYRNGA.js.map} +0 -0
  784. /package/dist/{chunk-NUA66GW7.js.map → chunk-NX5IB4IY.js.map} +0 -0
  785. /package/dist/{chunk-OVHQFZAE.js.map → chunk-PIGTIWSK.js.map} +0 -0
  786. /package/dist/{chunk-JL3PYV5F.js.map → chunk-PIN5YUVJ.js.map} +0 -0
  787. /package/dist/{chunk-64JHE3GV.js.map → chunk-PV7AYYRZ.js.map} +0 -0
  788. /package/dist/{chunk-U2GHNZ4N.js.map → chunk-QI7OWVFY.js.map} +0 -0
  789. /package/dist/{chunk-4OOQ52ET.js.map → chunk-QWBNQYIF.js.map} +0 -0
  790. /package/dist/{chunk-5NI77Z3O.js.map → chunk-RIHO7ZD5.js.map} +0 -0
  791. /package/dist/{chunk-LO2QBHP6.js.map → chunk-S6WRMFWQ.js.map} +0 -0
  792. /package/dist/{chunk-IPRYYK26.js.map → chunk-SUOEFEJO.js.map} +0 -0
  793. /package/dist/{chunk-CTVPW77S.js.map → chunk-TVSNHVWX.js.map} +0 -0
  794. /package/dist/{chunk-YVQ4USPP.js.map → chunk-U3CWWOHL.js.map} +0 -0
  795. /package/dist/{chunk-UAB5PGOP.js.map → chunk-VGC4STKW.js.map} +0 -0
  796. /package/dist/{chunk-MVSUESEV.js.map → chunk-VHC4FDEJ.js.map} +0 -0
  797. /package/dist/{chunk-K6VYSDB5.js.map → chunk-VLIOMJDR.js.map} +0 -0
  798. /package/dist/{chunk-IKZQST6E.js.map → chunk-VSDJEPDN.js.map} +0 -0
  799. /package/dist/{chunk-YNQFOPS6.js.map → chunk-WTWHUZ4O.js.map} +0 -0
  800. /package/dist/{chunk-UJIB7QM3.js.map → chunk-XHZ723K4.js.map} +0 -0
  801. /package/dist/{chunk-MP7BA3GK.js.map → chunk-XP4P55IC.js.map} +0 -0
  802. /package/dist/{chunk-3IE6FDVA.js.map → chunk-XVPPM25G.js.map} +0 -0
  803. /package/dist/{chunk-RIL33JCW.js.map → chunk-YDIIKD7O.js.map} +0 -0
  804. /package/dist/{chunk-ZWLT5QS3.js.map → chunk-YLGSRK75.js.map} +0 -0
  805. /package/dist/{chunk-ETXOEP4N.js.map → chunk-YR6EXI2K.js.map} +0 -0
  806. /package/dist/{chunk-ZYAZHJPZ.js.map → chunk-Z53VY5JV.js.map} +0 -0
  807. /package/dist/{chunk-IANE75G3.js.map → chunk-Z5ECCUNG.js.map} +0 -0
  808. /package/dist/{chunk-ATZNXW5F.js.map → chunk-Z7Q2O5Y7.js.map} +0 -0
  809. /package/dist/{cohort-QSLKB4ZO.js.map → cohort-ERDL7EJU.js.map} +0 -0
  810. /package/dist/{cohortSunburst-AQFSNJ5K.js.map → cohortSunburst-KSTVS3OQ.js.map} +0 -0
  811. /package/dist/{condition-MLS6TJHV.js.map → condition-CTJYHRJG.js.map} +0 -0
  812. /package/dist/{controls-ZT3GZ667.js.map → controls-MMMRBTZL.js.map} +0 -0
  813. /package/dist/{controls.config-F7NIPLKB.js.map → controls.config-ZKMQI27Q.js.map} +0 -0
  814. /package/dist/{correlation-ZEIQJGSQ.js.map → correlation-NEQNBQTT.js.map} +0 -0
  815. /package/dist/{customdata.inputui-6PJSAJK2.js.map → customdata.inputui-THUR7DF5.js.map} +0 -0
  816. /package/dist/{databrowser.ui-EMZ5L2Y7.js.map → databrowser.ui-A6ZSIUG4.js.map} +0 -0
  817. /package/dist/{dictionary-U2BWGY6B.js.map → dictionary-TQUVCHIN.js.map} +0 -0
  818. /package/dist/{dnaMethylation-R34E2XNC.js.map → dnaMethylation-ZMJYY3ML.js.map} +0 -0
  819. /package/dist/{dnaMethylation.integration.spec-4Z2AJHWY.js.map → dnaMethylation.integration.spec-5DTBGTYB.js.map} +0 -0
  820. /package/dist/{dofetch-JY4A7BYI.js.map → dofetch-KBTN6OW4.js.map} +0 -0
  821. /package/dist/{e2pca-WSSCXX6A.js.map → e2pca-DNWBF545.js.map} +0 -0
  822. /package/dist/{ep-ATUWEHDJ.js.map → ep-JNH3HMY4.js.map} +0 -0
  823. /package/dist/{expclust.gdc.spec-QRIRRPO7.js.map → expclust.gdc.spec-2NJ7JVJW.js.map} +0 -0
  824. /package/dist/{facet-5VDCSP3S.js.map → facet-RWQFAVVU.js.map} +0 -0
  825. /package/dist/{gb-Y4UG6LFA.js.map → gb-OT2Z3Y7J.js.map} +0 -0
  826. /package/dist/{geneExpClustering-OO67JNJ2.js.map → geneExpClustering-TPYGSTMO.js.map} +0 -0
  827. /package/dist/{geneExpression-5KGV3MAA.js.map → geneExpression-4K3OTXBZ.js.map} +0 -0
  828. /package/dist/{geneExpression-KPRFXKU7.js.map → geneExpression-KPUOZ4PT.js.map} +0 -0
  829. /package/dist/{geneExpression.unit.spec-YV45EZ5O.js.map → geneExpression.unit.spec-26MCGRAP.js.map} +0 -0
  830. /package/dist/{geneORA-R74JPUTC.js.map → geneORA-GNXKCN45.js.map} +0 -0
  831. /package/dist/{geneRanking-IJTXNMHV.js.map → geneRanking-LV6W6TT7.js.map} +0 -0
  832. /package/dist/{geneVariant-JT3EGAIH.js.map → geneVariant-B2SYTHG6.js.map} +0 -0
  833. /package/dist/{geneVariant-HBAHT6LU.js.map → geneVariant-O4XG5VEM.js.map} +0 -0
  834. /package/dist/{geneVariant.integration.spec-TFQYPUAS.js.map → geneVariant.integration.spec-YYVPAFXT.js.map} +0 -0
  835. /package/dist/{genefusion.ui-MMTQMTHC.js.map → genefusion.ui-CVGGYVV3.js.map} +0 -0
  836. /package/dist/{geneset-VMBICNCZ.js.map → geneset-MBMCJNXT.js.map} +0 -0
  837. /package/dist/{genomeBrowser.spec-2XLLIYGA.js.map → genomeBrowser.spec-OVXFKEIU.js.map} +0 -0
  838. /package/dist/{grin2-Y6KAFVV2.js.map → grin2-OXRU465E.js.map} +0 -0
  839. /package/dist/{grin2-2RYPEUWV.js.map → grin2-YCJGBRFG.js.map} +0 -0
  840. /package/dist/{hierCluster-EKGFBQT4.js.map → hierCluster-KNPWL5KD.js.map} +0 -0
  841. /package/dist/{hierCluster-Z4PVNMGS.js.map → hierCluster-L3LYQZQL.js.map} +0 -0
  842. /package/dist/{hierCluster.config-Q6WUNK2K.js.map → hierCluster.config-VZBV5QIO.js.map} +0 -0
  843. /package/dist/{hierCluster.integration.spec-2LHSHNFC.js.map → hierCluster.integration.spec-ZM7K7WI4.js.map} +0 -0
  844. /package/dist/{hierCluster.interactivity-OGQ3KUY6.js.map → hierCluster.interactivity-EA7WVIQR.js.map} +0 -0
  845. /package/dist/{hierCluster.renderers-3GJZXG75.js.map → hierCluster.renderers-YGX6MZZW.js.map} +0 -0
  846. /package/dist/{imagePlot-ZJEZPBX7.js.map → imagePlot-OLVI26S5.js.map} +0 -0
  847. /package/dist/{importPlot-GFEFYEHZ.js.map → importPlot-3SSCNROC.js.map} +0 -0
  848. /package/dist/{isoformExpression-A2X3DSR6.js.map → isoformExpression-BTMJNAAO.js.map} +0 -0
  849. /package/dist/{isoformExpression.unit.spec-VKMEGCL4.js.map → isoformExpression.unit.spec-S2W5T42Z.js.map} +0 -0
  850. /package/dist/{junction-HWIHLQU2.js.map → junction-GIS5OCRO.js.map} +0 -0
  851. /package/dist/{junction.customTerm-C3VWXEYH.js.map → junction.customTerm-3R2GNE3A.js.map} +0 -0
  852. /package/dist/{junction.unit.spec-ZYJGDOXJ.js.map → junction.unit.spec-MSILW6QZ.js.map} +0 -0
  853. /package/dist/{launch.adhoc-HW5AZM4T.js.map → launch.adhoc-LLJY4LA5.js.map} +0 -0
  854. /package/dist/{leftlabel.sample-MTW2HRRQ.js.map → leftlabel.sample-P6DDVCOW.js.map} +0 -0
  855. /package/dist/{lollipop-VWW5H6CR.js.map → lollipop-J34YCYIP.js.map} +0 -0
  856. /package/dist/{maf-KEJYO3H4.js.map → maf-MFEEYT5P.js.map} +0 -0
  857. /package/dist/{maftimeline-MJZDSGSR.js.map → maftimeline-TGJ37QYA.js.map} +0 -0
  858. /package/dist/{matrix-3UJW6LOA.js.map → matrix-A6BNFCIH.js.map} +0 -0
  859. /package/dist/{matrix-W4AX5OBM.js.map → matrix-XTKRVPMQ.js.map} +0 -0
  860. /package/dist/{matrix.cells-5DAIZ3E5.js.map → matrix.cells-5RTZUJVN.js.map} +0 -0
  861. /package/dist/{matrix.config-PK26VPQT.js.map → matrix.config-RMDDMOZ5.js.map} +0 -0
  862. /package/dist/{matrix.data-UK5DGKBK.js.map → matrix.data-Y5TPRGMW.js.map} +0 -0
  863. /package/dist/{matrix.groups-NM4Q5YDN.js.map → matrix.groups-6DXCAY4P.js.map} +0 -0
  864. /package/dist/{matrix.integration.spec-FGWNBCRR.js.map → matrix.integration.spec-2DVRXVNH.js.map} +0 -0
  865. /package/dist/{matrix.interactivity-4C37PII5.js.map → matrix.interactivity-MGOYEKDN.js.map} +0 -0
  866. /package/dist/{matrix.layout-ODV7WXUP.js.map → matrix.layout-T7EC5ZC2.js.map} +0 -0
  867. /package/dist/{matrix.legend-5MY7OXWN.js.map → matrix.legend-S3E76TVO.js.map} +0 -0
  868. /package/dist/{matrix.renderers-QA7W7ZUL.js.map → matrix.renderers-GR77V3RL.js.map} +0 -0
  869. /package/dist/{matrix.serieses-4FSFJPCK.js.map → matrix.serieses-3UGLZW25.js.map} +0 -0
  870. /package/dist/{matrix.sort-3QLFMBJ5.js.map → matrix.sort-A7CNLDUJ.js.map} +0 -0
  871. /package/dist/{matrix.sort.unit.spec-HVOC6IYT.js.map → matrix.sort.unit.spec-YUCV7G5L.js.map} +0 -0
  872. /package/dist/{matrix.sorterUi-EY3SA6CG.js.map → matrix.sorterUi-6PZR3YOD.js.map} +0 -0
  873. /package/dist/{matrix.sorterUi.unit.spec-OAXWPZZI.js.map → matrix.sorterUi.unit.spec-FESIQ2RC.js.map} +0 -0
  874. /package/dist/{matrix.unit.spec-RAL7AU22.js.map → matrix.unit.spec-6QF3WKM7.js.map} +0 -0
  875. /package/dist/{mavb-KIM63AC4.js.map → mavb-UXJBITZM.js.map} +0 -0
  876. /package/dist/{mds.fimo-DMAVM56P.js.map → mds.fimo-IPNWVBO4.js.map} +0 -0
  877. /package/dist/{mds.samplescatterplot-KILTR2C7.js.map → mds.samplescatterplot-KEG7RSN3.js.map} +0 -0
  878. /package/dist/{mds.survivalplot-PV76ANBP.js.map → mds.survivalplot-LJF2CD33.js.map} +0 -0
  879. /package/dist/{multivalue-2V5LMQY7.js.map → multivalue-YRQZ73DI.js.map} +0 -0
  880. /package/dist/{numericDictTermCluster-TGL4X6UC.js.map → numericDictTermCluster-6XDVVWLE.js.map} +0 -0
  881. /package/dist/{oncomatrix-2O7SLXHX.js.map → oncomatrix-TIMH5JKS.js.map} +0 -0
  882. /package/dist/{oncomatrix.spec-HZJKOF5G.js.map → oncomatrix.spec-MUOKKCJN.js.map} +0 -0
  883. /package/dist/{plot.2dvaf-424NNMMA.js.map → plot.2dvaf-3OL4S6QG.js.map} +0 -0
  884. /package/dist/{plot.app-YBZDNST2.js.map → plot.app-CMLHZV5F.js.map} +0 -0
  885. /package/dist/{plot.barplot-YZQBYJUY.js.map → plot.barplot-NRYMIPK6.js.map} +0 -0
  886. /package/dist/{plot.boxplot-5OW6IBQL.js.map → plot.boxplot-ANGW3WUC.js.map} +0 -0
  887. /package/dist/{plot.brainImaging-H3ABPPD3.js.map → plot.brainImaging-YUDBYKX5.js.map} +0 -0
  888. /package/dist/{plot.disco-X7KCDWGX.js.map → plot.disco-LV7RE3YO.js.map} +0 -0
  889. /package/dist/{plot.ssgq-GYRVHTC7.js.map → plot.ssgq-F2LOQFYD.js.map} +0 -0
  890. /package/dist/{plot.vaf2cov-B2TELPHL.js.map → plot.vaf2cov-5OKC7X6D.js.map} +0 -0
  891. /package/dist/{polar2-5KNZRLXY.js.map → polar2-BGJA2GHZ.js.map} +0 -0
  892. /package/dist/{profileForms-FY34KXCL.js.map → profileForms-BKP3OBKV.js.map} +0 -0
  893. /package/dist/{profilePlot-3FX2TPYC.js.map → profilePlot-5PRRNUKD.js.map} +0 -0
  894. /package/dist/{proteinView-WSEO3LD3.js.map → proteinView-VZIWIZZY.js.map} +0 -0
  895. /package/dist/{proteomeCohortCompare-KA2DF3EE.js.map → proteomeCohortCompare-XZI5OI4X.js.map} +0 -0
  896. /package/dist/{pseudbulk.unit.spec-AT3TFCOW.js.map → pseudbulk.unit.spec-DXJQV7JQ.js.map} +0 -0
  897. /package/dist/{pseudobulk-4ZRHUC7W.js.map → pseudobulk-FCH3WW6O.js.map} +0 -0
  898. /package/dist/{qualitative-FHJD44OA.js.map → qualitative-ATX53V44.js.map} +0 -0
  899. /package/dist/{qualitative-3OBGJRP6.js.map → qualitative-BRKLVRKW.js.map} +0 -0
  900. /package/dist/{radar2-X757WR6V.js.map → radar2-6BBT2FBT.js.map} +0 -0
  901. /package/dist/{radarFacility2-GUBAK4Y3.js.map → radarFacility2-76Q3IYP2.js.map} +0 -0
  902. /package/dist/{rememberedGvQ.unit.spec-ADO4Y2OE.js.map → rememberedGvQ.unit.spec-SHTMMZGG.js.map} +0 -0
  903. /package/dist/{render-MZEPNEMU.js.map → render-KUC3QH36.js.map} +0 -0
  904. /package/dist/{report-TUAFDGAE.js.map → report-KB4K7ZXC.js.map} +0 -0
  905. /package/dist/{sampleView-X6YKCBE7.js.map → sampleView-QD2JLZ4T.js.map} +0 -0
  906. /package/dist/{samplelst-UPNRALBH.js.map → samplelst-6R5RYHNV.js.map} +0 -0
  907. /package/dist/{samplematrix-W3HZK3IS.js.map → samplematrix-NGORNBTR.js.map} +0 -0
  908. /package/dist/{sc-UL7233UR.js.map → sc-27AHZZDK.js.map} +0 -0
  909. /package/dist/{scatter-VQQRIW6N.js.map → scatter-FXLZMWD6.js.map} +0 -0
  910. /package/dist/{scatter-FTJ77NUM.js.map → scatter-OWFYLMSJ.js.map} +0 -0
  911. /package/dist/{selectGenomeWithTklst-HPYPSPFI.js.map → selectGenomeWithTklst-ZTGABCXC.js.map} +0 -0
  912. /package/dist/{singleCellCellType-XTKGOH6H.js.map → singleCellCellType-7XXJ5NWC.js.map} +0 -0
  913. /package/dist/{singleCellCellType.unit.spec-A62GT72A.js.map → singleCellCellType.unit.spec-Y3TEYYCF.js.map} +0 -0
  914. /package/dist/{singleCellGeneExpression-X7H5GTU3.js.map → singleCellGeneExpression-EUAIEIYJ.js.map} +0 -0
  915. /package/dist/{singleCellGeneExpression.unit.spec-2KQBHG7O.js.map → singleCellGeneExpression.unit.spec-JVHPFLML.js.map} +0 -0
  916. /package/dist/{singleCellNumericValue-6YS42PZ2.js.map → singleCellNumericValue-FHIECJDK.js.map} +0 -0
  917. /package/dist/{singleCellNumericValue.unit.spec-DNVXQFKI.js.map → singleCellNumericValue.unit.spec-ZFG56MIO.js.map} +0 -0
  918. /package/dist/{singleCellPlot-MGOQ7EQV.js.map → singleCellPlot-NDGIW32L.js.map} +0 -0
  919. /package/dist/{singlecell-QW3SLQD6.js.map → singlecell-JPWVPZEF.js.map} +0 -0
  920. /package/dist/{singlecell-CIOB5XON.js.map → singlecell-N7RJMWZ2.js.map} +0 -0
  921. /package/dist/{snp-6B4MIPKL.js.map → snp-APUTOL2F.js.map} +0 -0
  922. /package/dist/{snp.unit.spec-HNILS56E.js.map → snp.unit.spec-4AN7AJKO.js.map} +0 -0
  923. /package/dist/{snplocus-DDFLYZ2Y.js.map → snplocus-WIMFAMBE.js.map} +0 -0
  924. /package/dist/{snplst-JYKOV73J.js.map → snplst-SUJ5AK4E.js.map} +0 -0
  925. /package/dist/{spliceevent.a53ss.diagram-IBD5ITXR.js.map → spliceevent.a53ss.diagram-4UBI7PFJ.js.map} +0 -0
  926. /package/dist/{spliceevent.exonskip.diagram-ZJGEVUYW.js.map → spliceevent.exonskip.diagram-NVEXVRIC.js.map} +0 -0
  927. /package/dist/{spliceevent.noeventdiagram-RNLNTFOW.js.map → spliceevent.noeventdiagram-CKEWNLVF.js.map} +0 -0
  928. /package/dist/{ssGSEA-42VQLAXL.js.map → ssGSEA-CJOVXTAW.js.map} +0 -0
  929. /package/dist/{ssGSEA.unit.spec-FBJANIKG.js.map → ssGSEA.unit.spec-A7VRVJSF.js.map} +0 -0
  930. /package/dist/{stattable-FROSNTJY.js.map → stattable-JBJVVLQE.js.map} +0 -0
  931. /package/dist/{studyCatalog-XIYNJ24U.js.map → studyCatalog-NEL7XSIP.js.map} +0 -0
  932. /package/dist/{summarizeCnvGeneexp-N3OFI24L.js.map → summarizeCnvGeneexp-BZSCTA5W.js.map} +0 -0
  933. /package/dist/{summarizeGeneexpSurvival-J4DO2AL4.js.map → summarizeGeneexpSurvival-743KXNV7.js.map} +0 -0
  934. /package/dist/{summarizeMutationCnv-Y43BBSI4.js.map → summarizeMutationCnv-CALMSQGV.js.map} +0 -0
  935. /package/dist/{summarizeMutationDiagnosis-JAEAUFCA.js.map → summarizeMutationDiagnosis-OTE7O4AS.js.map} +0 -0
  936. /package/dist/{summarizeMutationSurvival-4QZDDXDV.js.map → summarizeMutationSurvival-VOZOFTFM.js.map} +0 -0
  937. /package/dist/{summary-DTJZ7NNA.js.map → summary-XJKCD35N.js.map} +0 -0
  938. /package/dist/{summary.integration.spec-HRRE3J45.js.map → summary.integration.spec-OOEU6WNB.js.map} +0 -0
  939. /package/dist/{summaryInput-WCADUZBK.js.map → summaryInput-JSOXVSMY.js.map} +0 -0
  940. /package/dist/{termCollection-QIN53TIL.js.map → sunburst-J3QHMYKW.js.map} +0 -0
  941. /package/dist/{sunburst-BGXSCB63.js.map → sunburst-LZPP6NPV.js.map} +0 -0
  942. /package/dist/{survival-LFXQIWRT.js.map → survival-5GWRVTQ6.js.map} +0 -0
  943. /package/dist/{survival-ONWZ5RFM.js.map → survival-FW7N3YXZ.js.map} +0 -0
  944. /package/dist/{survival.integration.spec-ZP7XWHQH.js.map → survival.integration.spec-WN36VUHL.js.map} +0 -0
  945. /package/dist/{svgraph-2SL2SJVU.js.map → svgraph-N35EMK3G.js.map} +0 -0
  946. /package/dist/{svmr-ONIPMLC2.js.map → svmr-EWL5WDDD.js.map} +0 -0
  947. /package/dist/{table-LLCFO4KK.js.map → table-EI2OIRGE.js.map} +0 -0
  948. /package/dist/{termCollectionFractionSelection-UKEVVZXL.js.map → termCollection-K3EX5P3F.js.map} +0 -0
  949. /package/dist/{termCollection-DAHJGR5P.js.map → termCollection-TBTAHLVH.js.map} +0 -0
  950. /package/dist/{termCollection.unit.spec-FQOX2IVP.js.map → termCollection.unit.spec-ZVNAIPHZ.js.map} +0 -0
  951. /package/dist/{tk-GM7CJ2LU.js.map → termCollectionFractionSelection-ATNIPWVX.js.map} +0 -0
  952. /package/dist/{termCollectionFractionSelection.unit.spec-URGEYBU2.js.map → termCollectionFractionSelection.unit.spec-VBRWWBML.js.map} +0 -0
  953. /package/dist/{tvs.categorical-IY6YSFVN.js.map → tk-U6CYISBH.js.map} +0 -0
  954. /package/dist/{tp.ui-TRUHW6GP.js.map → tp.ui-KBFYUSWS.js.map} +0 -0
  955. /package/dist/{tvs.dt-AQQIZD5Z.js.map → tvs.categorical-5USP772O.js.map} +0 -0
  956. /package/dist/{tvs.condition-YTD7GOPW.js.map → tvs.condition-652MAA2Z.js.map} +0 -0
  957. /package/dist/{tvs.numeric-UFAOJR2B.js.map → tvs.dt-7BTARQUS.js.map} +0 -0
  958. /package/dist/{tvs.dtcnv.categorical-WOAOGJSW.js.map → tvs.dtcnv.categorical-GAOO3DGO.js.map} +0 -0
  959. /package/dist/{tvs.dtcnv.continuous-TJBEPJGO.js.map → tvs.dtcnv.continuous-P2QRD45O.js.map} +0 -0
  960. /package/dist/{tvs.dtfusion-SFMZQKKU.js.map → tvs.dtfusion-L3I65W7L.js.map} +0 -0
  961. /package/dist/{tvs.dtitd-Q5RQTCLD.js.map → tvs.dtitd-B3JPW6OL.js.map} +0 -0
  962. /package/dist/{tvs.dtsnvindel-UEK4O6WI.js.map → tvs.dtsnvindel-6Y6CJBZV.js.map} +0 -0
  963. /package/dist/{tvs.dtsv-ECS4KEYG.js.map → tvs.dtsv-GL7CPATL.js.map} +0 -0
  964. /package/dist/{tvs.multivalue-CJIZ3I54.js.map → tvs.multivalue-75IM23FZ.js.map} +0 -0
  965. /package/dist/{vocabulary-MTKDDDGB.js.map → tvs.numeric-XB3GBPHE.js.map} +0 -0
  966. /package/dist/{tvs.samplelst-BVFY2P7Q.js.map → tvs.samplelst-QUA45UE7.js.map} +0 -0
  967. /package/dist/{tvs.survival-L56B3I55.js.map → tvs.survival-EKSDZZIO.js.map} +0 -0
  968. /package/dist/{tvs.termCollection-BFIBVBSA.js.map → tvs.termCollection-5ATMDC7O.js.map} +0 -0
  969. /package/dist/{wsi.direct-OSHY7VL4.js.map → wsi.direct-BU6BL5UR.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../plots/swimmer.ts"],
4
+ "sourcesContent": ["import { getCompInit, copyMerge, type RxComponent, type ComponentApi } from '#rx'\nimport { PlotBase } from '#plots/PlotBase.ts'\nimport { controlsInit } from './controls'\nimport { dofetch3 } from '#common/dofetch'\nimport { Menu, DownloadMenu, axisstyle, shapes, shapeSelector, make_radios, DataPointInteractions } from '#dom'\nimport { rgb } from 'd3-color'\nimport { getCombinedTermFilter } from '#filter'\nimport { getColors } from '#shared/common.js'\nimport { scaleLinear } from 'd3-scale'\nimport { axisBottom } from 'd3-axis'\nimport { create, pointer } from 'd3-selection'\nimport type {\n\tSwimmerLane,\n\tSwimmerLegendItem,\n\tSwimmerPoint,\n\tSwimmerRequest,\n\tSwimmerResponse,\n\tSwimmerTimeReference\n} from '#types'\nimport { getTermValue } from './sampleView.ts'\nimport { getT0T2defaultQ } from './summaryQ.ts'\nimport { fillTermWrapper, termsettingInit } from '#termsetting'\n\n/*\nswimmer plot: one horizontal lane per patient. the thin grey base bar spans from\ntime 0 to the lane end (the terminal event, e.g. death, else the latest event or interval end);\ncolored segments mark treatment intervals; dots mark clinical events. when the ds has time references\n(e.g. birth, diagnosis, treatment start), radio buttons above the plot switch time 0 between them.\n*/\n\ntype LegendEntry = {\n\tkey: string\n\tlabel: string\n\tcolor: string\n\tshape: string\n\t/** marker height relative to the other events */\n\tsize: number\n\tsampleTerms?: string[]\n\t/** hidden by the user in the legend: its segments or markers are not drawn */\n\thidden: boolean\n}\n\n/** user changes to one legend item, overriding the ds config */\ntype LegendOverride = { color?: string; shape?: string; hidden?: boolean }\n\n/** legend overrides by legend label (items of several keys merged under one label change together).\nhidden is stored as false rather than deleted, since plot_edit merges settings and cannot remove keys */\ntype LegendOverrides = {\n\tcategories: { [label: string]: LegendOverride }\n\tevents: { [label: string]: LegendOverride }\n\t/** categories of the \"mark by\" term on linked points (e.g. ctDNA status of CSF dots) */\n\tpointCategories: { [label: string]: LegendOverride }\n}\n\n/** linked points (with a point sample) that have no value for the \"mark by\" term */\nconst noValueCategory = 'No value'\n\n/** pixel gap between a lane name and the lane area */\nconst labelGap = 14\n\n/** pixel width of the legend column, right of the lanes */\nconst legendWidth = 190\n\n/** a drawn event marker, in the pixel space of its panel, for the hover and click hit test */\ntype MarkerHit = {\n\tp: SwimmerPoint\n\tlane: SwimmerLane\n\tentry: LegendEntry\n\t/** legend entry of the \"mark by\" category of a marked point */\n\tmark?: LegendEntry\n\tshape: string\n\tcolor: string\n\t/** marker center */\n\tx: number\n\ty: number\n\theight: number\n\t/** half the drawn width of the shape */\n\thalfWidth: number\n}\n\n/** one lane of a panel, for hovering its interval segments and base bar */\ntype LaneRow = {\n\tlane: SwimmerLane\n\tend: number\n\t/** drawn segments, with their pixel extent incl. the arrowhead of an ongoing interval */\n\tsegments: { r: SwimmerLane['ranges'][number]; entry: LegendEntry; x0: number; x1: number }[]\n}\n\n/** bounding box of each shape path within its 16x16 icon box, measured once per shape. the icons fill\nthat box unevenly (e.g. the cross spans 12px, the circle 16px), so sizing by the box would give markers\nof different heights */\nconst shapeBBox = new Map<string, { x: number; y: number; width: number; height: number }>()\n\n/** the #dom shape of a marker `height` px tall: its path transform, centering the shape at 0,0, and its drawn\nhalf width. uses the measured bbox of the shape, else its 16x16 icon box */\nfunction getMarkerGeometry(shapeKey: string, height: number) {\n\tconst key = shapes[shapeKey] ? shapeKey : 'filledCircle'\n\tconst shape = shapes[key]\n\tconst bb = shapeBBox.get(key) || { x: 0, y: 0, width: 16, height: 16 }\n\t// solid shapes get a thin white halo, to stand out on segments and on each other; line shapes (cross,\n\t// outlines) are thin filled paths, so a same-colored stroke thickens them to stay legible. the stroke (px)\n\t// is subtracted from the height\n\tconst strokePx = shape.isFilled ? Math.min(1, height * 0.1) : Math.max(1, height * 0.08)\n\tconst scale = Math.max(0.1, height - strokePx) / bb.height\n\treturn {\n\t\tshape,\n\t\tstrokePx,\n\t\tscale,\n\t\ttransform: `scale(${scale}) translate(${-(bb.x + bb.width / 2)},${-(bb.y + bb.height / 2)})`,\n\t\thalfWidth: (bb.width * scale + strokePx) / 2\n\t}\n}\n\n/** draw an event marker centered at (cx, cy) inside holder, scaled so the visible shape is `height` px tall.\nthe shape is a key of the shared #dom shapes */\nfunction drawMarker(holder, shapeKey: string, cx: number, cy: number, height: number, color: string) {\n\tconst key = shapes[shapeKey] ? shapeKey : 'filledCircle'\n\tconst g = holder.append('g').attr('transform', `translate(${cx},${cy})`)\n\tconst path = g.append('path').attr('d', shapes[key].path).attr('fill', color)\n\tif (!shapeBBox.has(key)) {\n\t\tconst b = path.node().getBBox()\n\t\t// getBBox() is all zeros while the svg is hidden or detached; the icon box is used then, without caching\n\t\tif (b.width && b.height) shapeBBox.set(key, { x: b.x, y: b.y, width: b.width, height: b.height })\n\t}\n\tconst m = getMarkerGeometry(key, height)\n\tpath\n\t\t.attr('transform', m.transform)\n\t\t.attr('stroke', m.shape.isFilled ? 'white' : color)\n\t\t.attr('stroke-width', m.strokePx / m.scale)\n\t\t.attr('stroke-linejoin', 'round')\n\treturn g\n}\n\n/** a 14px marker icon as svg markup, for html table cells */\nfunction getMarkerIconHtml(shapeKey: string, color: string): string {\n\tconst svg = create('svg').attr('width', 14).attr('height', 14).style('vertical-align', 'middle')\n\tdrawMarker(svg, shapeKey, 7, 7, 12, color)\n\treturn svg.node()!.outerHTML\n}\n\ntype SwimmerSettings = {\n\t/** pixel height of one lane, including spacing */\n\trowHeight: number\n\t/** pixel width of the lane area, excluding sample names and legend */\n\tplotWidth: number\n\t/** 'end': longest lane first; 'sample': by lane (patient) name */\n\tsortBy: 'end' | 'sample'\n\tshowSampleNames: boolean\n\tlegend: LegendOverrides\n\t/** key of a ds time reference (swimmer.timeReferences); unset: the ds default */\n\ttimeReference?: string\n}\n\nclass Swimmer extends PlotBase implements RxComponent {\n\tstatic type = 'swimmer'\n\n\ttype: string\n\tcomponents: { controls: any }\n\tdom!: {\n\t\tholder: any\n\t\tcontrolsHolder: any\n\t\terrdiv: any\n\t\tloadingDiv: any\n\t\tplotDiv: any\n\t\tnoteDiv: any\n\t\ttip: Menu\n\t}\n\trenderer!: SwimmerRenderer\n\n\tconstructor(opts: any, api: ComponentApi) {\n\t\tsuper(opts, api)\n\t\tthis.type = Swimmer.type\n\t\tthis.components = { controls: {} }\n\t\tif (this.opts.header) {\n\t\t\tthis.opts.header.style('padding-left', '7px').style('color', 'rgb(85, 85, 85)').html('Swimmer Plot')\n\t\t}\n\t}\n\n\tgetState(appState) {\n\t\tconst config = appState.plots.find(p => p.id === this.id)\n\t\tif (!config) throw `No plot with id='${this.id}' found`\n\t\treturn {\n\t\t\tconfig,\n\t\t\t// global mass filter combined with this plot's local filter (config.filter, set by the plot wrapper's filter UI)\n\t\t\ttermfilter: getCombinedTermFilter(appState, config.filter),\n\t\t\tgenome: appState.vocab.genome,\n\t\t\tdslabel: appState.vocab.dslabel,\n\t\t\tswimmer: appState.termdbConfig?.queries?.swimmer || {}\n\t\t}\n\t}\n\n\tasync init() {\n\t\tconst holder = this.opts.holder.append('div').attr('data-testid', 'sjpp-swimmer-holder')\n\t\tconst controlsHolder = holder.append('div').style('display', 'inline-block').style('vertical-align', 'top')\n\t\tconst rightDiv = holder.append('div').style('display', 'inline-block').style('vertical-align', 'top')\n\t\tthis.dom = {\n\t\t\tholder,\n\t\t\tcontrolsHolder,\n\t\t\terrdiv: rightDiv.append('div').attr('class', 'sja_errorbar').style('display', 'none'),\n\t\t\tloadingDiv: rightDiv.append('div').style('display', 'none').style('padding', '24px').text('Loading ...'),\n\t\t\tplotDiv: rightDiv.append('div').attr('data-testid', 'sjpp-swimmer-plot').style('padding', '10px'),\n\t\t\tnoteDiv: rightDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('padding', '0 10px 10px 10px')\n\t\t\t\t.style('font-size', '.9em')\n\t\t\t\t.style('opacity', 0.7),\n\t\t\ttip: new Menu({ padding: '5px' })\n\t\t}\n\t\tthis.renderer = new SwimmerRenderer(\n\t\t\tthis.app,\n\t\t\tthis.dom,\n\t\t\tsettings => this.app.dispatch({ type: 'plot_edit', id: this.id, config: { settings: { swimmer: settings } } }),\n\t\t\tpointTerm => this.app.dispatch({ type: 'plot_edit', id: this.id, config: { pointTerm } })\n\t\t)\n\t\tconst laneName = this.renderer.laneType?.name || 'sample'\n\t\tthis.components = {\n\t\t\tcontrols: await controlsInit({\n\t\t\t\tapp: this.app,\n\t\t\t\tid: this.id,\n\t\t\t\tholder: controlsHolder,\n\t\t\t\tinputs: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'term',\n\t\t\t\t\t\tconfigKey: 'term0',\n\t\t\t\t\t\tchartType: 'swimmer',\n\t\t\t\t\t\tusecase: { target: 'swimmer', detail: 'term0' },\n\t\t\t\t\t\tlabel: 'Divide by',\n\t\t\t\t\t\ttitle: 'Split lanes into one panel per category',\n\t\t\t\t\t\tvocabApi: this.app.vocabApi,\n\t\t\t\t\t\tnumericEditMenuVersion: ['discrete'],\n\t\t\t\t\t\tdefaultQ4fillTW: getT0T2defaultQ()\n\t\t\t\t\t},\n\t\t\t\t\t...this.getPointTermInputs(),\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Sort lanes by',\n\t\t\t\t\t\ttype: 'radio',\n\t\t\t\t\t\tchartType: 'swimmer',\n\t\t\t\t\t\tsettingsKey: 'sortBy',\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{ label: 'Lane length', value: 'end' },\n\t\t\t\t\t\t\t{ label: `${laneName[0].toUpperCase()}${laneName.slice(1)} name`, value: 'sample' }\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: `Show ${laneName} names`,\n\t\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\t\tchartType: 'swimmer',\n\t\t\t\t\t\tsettingsKey: 'showSampleNames',\n\t\t\t\t\t\tboxLabel: 'Yes'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Row height',\n\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\tchartType: 'swimmer',\n\t\t\t\t\t\tsettingsKey: 'rowHeight',\n\t\t\t\t\t\tmin: 6,\n\t\t\t\t\t\tmax: 50\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Plot width',\n\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\tchartType: 'swimmer',\n\t\t\t\t\t\tsettingsKey: 'plotWidth',\n\t\t\t\t\t\tmin: 200,\n\t\t\t\t\t\tmax: 3000\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t})\n\t\t}\n\t\tthis.components.controls.on('downloadClick.swimmer', event => {\n\t\t\tconst svg = this.renderer.dom.svg\n\t\t\tif (!svg) return\n\t\t\tnew DownloadMenu([{ name: 'Swimmer plot', svg }], 'swimmer_plot').show(event.clientX, event.clientY, event.target)\n\t\t})\n\t}\n\n\t/** \"Mark <event> by\" term input, only when the ds has points linked to samples (e.g. CSF dots). the\n\tterm picker lists only terms of those samples' types */\n\tgetPointTermInputs() {\n\t\tconst sw = this.app.vocabApi.termdbConfig?.queries?.swimmer\n\t\tif (!sw?.pointSampleTypes?.length) return []\n\t\tconst events = (sw.pointSampleEvents || []).map(k => sw.events?.[k]?.label || k)\n\t\tconst what = [...new Set(events)].join(' / ') || 'linked samples'\n\t\treturn [\n\t\t\t{\n\t\t\t\ttype: 'term',\n\t\t\t\tconfigKey: 'pointTerm',\n\t\t\t\tchartType: 'swimmer',\n\t\t\t\tusecase: { target: 'swimmer', detail: 'pointTerm', sampleTypes: sw.pointSampleTypes },\n\t\t\t\tlabel: `Mark ${what} by`,\n\t\t\t\ttitle: `Color the ${what} markers by a variable of their own samples`,\n\t\t\t\tvocabApi: this.app.vocabApi,\n\t\t\t\tnumericEditMenuVersion: ['discrete'],\n\t\t\t\tdefaultQ4fillTW: getT0T2defaultQ()\n\t\t\t}\n\t\t]\n\t}\n\n\tasync main() {\n\t\ttry {\n\t\t\tthis.toggleLoadingDiv()\n\t\t\tthis.dom.errdiv.style('display', 'none')\n\t\t\tconst result = await this.fetchLanes()\n\t\t\tthis.toggleLoadingDiv('none')\n\t\t\tthis.renderer.update({\n\t\t\t\tswimmer: this.state.swimmer,\n\t\t\t\tsettings: this.state.config.settings.swimmer,\n\t\t\t\tlanes: result.lanes,\n\t\t\t\tdivideByOrder: result.divideByOrder,\n\t\t\t\tterm0: this.state.config.term0,\n\t\t\t\tpointTerm: this.state.config.pointTerm,\n\t\t\t\tpointCategoryOrder: result.pointCategoryOrder,\n\t\t\t\ttimeReference: result.timeReference\n\t\t\t})\n\t\t} catch (e: any) {\n\t\t\tthis.toggleLoadingDiv('none')\n\t\t\tthis.printError(e)\n\t\t}\n\t}\n\n\tdestroy() {\n\t\tthis.renderer?.destroy()\n\t}\n\n\tasync fetchLanes(): Promise<SwimmerResponse> {\n\t\tconst body: any = {\n\t\t\tgenome: this.state.genome,\n\t\t\tdslabel: this.state.dslabel,\n\t\t\tfilter: this.state.termfilter?.filter\n\t\t}\n\t\tif (this.state.config.term0) body.term0 = this.state.config.term0\n\t\tif (this.state.config.pointTerm) body.pointTerm = this.state.config.pointTerm\n\t\tconst timeReference = this.state.config.settings.swimmer.timeReference\n\t\tif (timeReference) body.timeReference = timeReference\n\t\treturn await fetchSwimmerLanes(body)\n\t}\n}\n\n/** draws swimmer lanes, divide-by panels and the legend into dom.plotDiv, with notes in dom.noteDiv. used by\nthe swimmer chart and by sample view, which shows the lane of the viewed patient */\nexport class SwimmerRenderer {\n\tapp: any\n\t/** client copy of ds.queries.swimmer: timeLabel, timeReferences, categories, events, terminalEvent,\n\tpointSampleTypes, pointSampleEvents */\n\tswimmer: any = {}\n\tsettings!: SwimmerSettings\n\t/** divide-by tw, lanes are then split into one panel per category */\n\tterm0?: any\n\tlanes: SwimmerLane[] = []\n\t/** divide-by category order from the server, only with term0 */\n\tdivideByOrder: string[] = []\n\t/** \"mark by\" tw of the linked points (e.g. a CSF term); their markers are then colored by point.category */\n\tpointTerm?: any\n\t/** point category order from the server, only with pointTerm */\n\tpointCategoryOrder: string[] = []\n\t/** key of the time reference of the lanes, from the server; unset when the ds has none */\n\ttimeReference?: string\n\tdom: { plotDiv: any; noteDiv: any; tip: Menu; svg?: any }\n\t/** sample type of the lanes, which are patients: the root sample type when the db has exactly one, e.g.\n\t{name:'patient', plural_name:'patients'}, to name lanes in messages and controls. */\n\tlaneType?: { name: string; plural_name: string }\n\t/** annotations of point samples (e.g. CSF) shown on hover, fetched once per sample id */\n\tpointSampleAnno = new Map<string, Promise<{ label: string; value: string }[]>>()\n\t/** menu to edit a legend entry, reused across legend clicks */\n\tlegendMenu?: Menu\n\t/** menu of the \"mark by\" term pill in the legend, shared with pointTermPill */\n\tpointTermMenu?: Menu\n\t/** termsetting behind the legend's \"mark by\" pill, for the same edit, replace and remove options as the\n\tcontrols */\n\tpointTermPill?: any\n\t/** hover and click handling of each divide-by panel, replaced on every render */\n\tinteractions: DataPointInteractions<MarkerHit>[] = []\n\n\t/** called with changed settings (e.g. legend edits, time reference); without it the renderer keeps legend\n\tchanges itself and redraws, and offers no time reference radio buttons since switching needs new lanes */\n\tonSettingsChange?: (settings: Partial<SwimmerSettings>) => void\n\t/** called with the new \"mark by\" tw, or null when removed, from the legend pill of that term */\n\tonPointTermChange?: (tw: any) => void\n\n\tconstructor(\n\t\tapp: any,\n\t\tdom: { plotDiv: any; noteDiv: any; tip: Menu },\n\t\tonSettingsChange?: (settings: Partial<SwimmerSettings>) => void,\n\t\tonPointTermChange?: (tw: any) => void\n\t) {\n\t\tthis.app = app\n\t\tthis.dom = dom\n\t\tthis.onSettingsChange = onSettingsChange\n\t\tthis.onPointTermChange = onPointTermChange\n\t\tconst roots = Object.values(app.vocabApi?.termdbConfig?.sampleTypes || {}).filter((t: any) => t.parent_id == null)\n\t\tif (roots.length == 1) this.laneType = roots[0] as { name: string; plural_name: string }\n\t}\n\n\tupdate(d: {\n\t\tswimmer: any\n\t\tsettings: SwimmerSettings\n\t\tlanes: SwimmerLane[]\n\t\tdivideByOrder?: string[]\n\t\tterm0?: any\n\t\tpointTerm?: any\n\t\tpointCategoryOrder?: string[]\n\t\ttimeReference?: string\n\t}) {\n\t\tthis.swimmer = d.swimmer || {}\n\t\tthis.settings = d.settings\n\t\tthis.lanes = d.lanes\n\t\tthis.divideByOrder = d.divideByOrder || []\n\t\tthis.term0 = d.term0\n\t\tthis.pointTerm = d.pointTerm\n\t\tthis.pointCategoryOrder = d.pointCategoryOrder || []\n\t\tthis.timeReference = d.timeReference\n\t\tthis.render()\n\t}\n\n\t/** whether a point is colored by the \"mark by\" term: a linked point of a markBy event */\n\tisMarkedPoint(p: SwimmerPoint): boolean {\n\t\treturn !!this.pointTerm && p.sampleId !== undefined && !!this.swimmer.pointSampleEvents?.includes(p.event)\n\t}\n\n\t/** with pointTerm: legend of the marked points' categories, in server order, then \"No value\" when some\n\tmarked point lacks a value. colors come from term.values when set there, else a default palette; the shape\n\tis that of the point's event. user overrides apply as for the other legend sections */\n\tgetPointLegend(events: { byKey: Map<string, LegendEntry> }) {\n\t\tif (!this.pointTerm) return { byKey: new Map<string, LegendEntry>(), entries: [] as LegendEntry[] }\n\t\tlet hasNoValue = false\n\t\tlet shape: string | undefined\n\t\tfor (const lane of this.lanes) {\n\t\t\tfor (const p of lane.points) {\n\t\t\t\tif (!this.isMarkedPoint(p)) continue\n\t\t\t\tshape ||= events.byKey.get(p.event)?.shape\n\t\t\t\tif (!p.category) hasNoValue = true\n\t\t\t}\n\t\t}\n\t\tconst termColors = new Map<string, string>()\n\t\tfor (const [k, v] of Object.entries((this.pointTerm.term?.values || {}) as { [k: string]: any }))\n\t\t\tif (v.color) termColors.set(v.label || k, v.color)\n\t\tconst labels = [...this.pointCategoryOrder, ...(hasNoValue ? [noValueCategory] : [])]\n\t\tconst palette = getColors(Math.max(labels.length, 1))\n\t\tconst configured = {}\n\t\tfor (const label of labels)\n\t\t\tconfigured[label] = {\n\t\t\t\tlabel,\n\t\t\t\tcolor: label == noValueCategory ? '#aaa' : termColors.get(label) || palette(label),\n\t\t\t\tshape\n\t\t\t}\n\t\treturn this.getLegend(configured, new Set(labels), this.settings.legend?.pointCategories)\n\t}\n\n\t/** lanes split by divide-by category, in server order. without term0 there is one unlabeled group.\n\ta patient with several categories (a multivalue term, or samples in different categories) is in each\n\tof its groups; lanes without a value are left out and counted in the note below the plot */\n\tgetGroups<T extends { lane: SwimmerLane }>(lanes: T[]): { label?: string; lanes: T[] }[] {\n\t\tif (!this.term0) return [{ lanes }]\n\t\tconst byLabel = new Map<string, T[]>(this.divideByOrder.map(c => [c, []]))\n\t\tlet noValue = 0\n\t\tfor (const l of lanes) {\n\t\t\tif (!l.lane.divideBy?.length) {\n\t\t\t\tnoValue++\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor (const c of l.lane.divideBy) {\n\t\t\t\tif (!byLabel.has(c)) byLabel.set(c, [])\n\t\t\t\tbyLabel.get(c)!.push(l)\n\t\t\t}\n\t\t}\n\t\tif (noValue) {\n\t\t\tconst name = this.term0.term?.name || 'the divide-by variable'\n\t\t\tconst noun = noValue > 1 ? this.laneType?.plural_name || 'samples' : this.laneType?.name || 'sample'\n\t\t\tthis.dom.noteDiv\n\t\t\t\t.append('div')\n\t\t\t\t.attr('data-testid', 'sjpp-swimmer-novalue-note')\n\t\t\t\t.text(`${noValue} ${noun} without a value for ${name} not shown`)\n\t\t}\n\t\treturn [...byLabel].filter(([, l]) => l.length).map(([label, l]) => ({ label, lanes: l }))\n\t}\n\n\t/** lane end: the terminal event time when present, else the latest event or interval time */\n\tgetLaneEnd(lane: SwimmerLane): number {\n\t\tconst terminal = this.swimmer.terminalEvent\n\t\tif (terminal) {\n\t\t\tconst t = lane.points.find(p => p.event == terminal)\n\t\t\tif (t) return t.time\n\t\t}\n\t\tlet end = 0\n\t\tfor (const p of lane.points) end = Math.max(end, p.time)\n\t\tfor (const r of lane.ranges) end = Math.max(end, r.start, r.end ?? 0)\n\t\treturn end\n\t}\n\n\t/** legend entries for interval categories or events: configured items first (in config order,\n\tmerged by label), then any key found in the data that the ds did not configure, with a default color. a\n\tclipBeforeOrigin event with no drawn marker (e.g. birth in a treatment-referenced view) is left out. user\n\toverrides (by label) take precedence over the ds config */\n\tgetLegend(\n\t\tconfigured: { [key: string]: SwimmerLegendItem } | undefined,\n\t\tdataKeys: Set<string>,\n\t\toverrides: { [label: string]: LegendOverride } = {}\n\t) {\n\t\tconst byKey = new Map<string, LegendEntry>()\n\t\tconst entries: LegendEntry[] = []\n\t\tconst seenLabels = new Set<string>()\n\t\tconst unconfigured = [...dataKeys].filter(k => !configured?.[k])\n\t\tconst fallback = getColors(Math.max(unconfigured.length, 1))\n\t\tconst add = (key: string, item: SwimmerLegendItem) => {\n\t\t\tconst label = item.label || key\n\t\t\tconst o = overrides[label] || {}\n\t\t\tconst e: LegendEntry = {\n\t\t\t\tkey,\n\t\t\t\tlabel,\n\t\t\t\tcolor: o.color || item.color || fallback(key),\n\t\t\t\tshape: o.shape || item.shape || 'filledCircle',\n\t\t\t\tsize: item.size || 1,\n\t\t\t\tsampleTerms: item.sampleTerms,\n\t\t\t\thidden: !!o.hidden\n\t\t\t}\n\t\t\tbyKey.set(key, e)\n\t\t\tif (!seenLabels.has(e.label)) {\n\t\t\t\tseenLabels.add(e.label)\n\t\t\t\tentries.push(e)\n\t\t\t}\n\t\t}\n\t\tfor (const [key, item] of Object.entries(configured || {})) {\n\t\t\tif (item.clipBeforeOrigin && !dataKeys.has(key)) continue\n\t\t\tadd(key, item)\n\t\t}\n\t\tfor (const key of unconfigured) add(key, {})\n\t\treturn { byKey, entries }\n\t}\n\n\trender() {\n\t\tconst s = this.settings\n\t\tconst plotDiv = this.dom.plotDiv\n\t\tplotDiv.selectAll('*').remove()\n\t\tthis.dom.noteDiv.selectAll('*').remove()\n\t\tdelete this.dom.svg\n\t\tfor (const i of this.interactions) i.destroy()\n\t\tthis.interactions = []\n\n\t\tconst ref: SwimmerTimeReference | undefined = this.swimmer.timeReferences?.find(\n\t\t\t(r: SwimmerTimeReference) => r.key == this.timeReference\n\t\t)\n\t\tthis.renderTimeReferences()\n\n\t\tif (!this.lanes.length) {\n\t\t\tplotDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('opacity', 0.6)\n\t\t\t\t.text(`No ${this.laneType?.plural_name || 'samples'} with timeline data match the current filter`)\n\t\t\treturn\n\t\t}\n\n\t\tconst lanes = this.lanes.map(lane => ({ lane, end: this.getLaneEnd(lane) }))\n\t\tif (s.sortBy == 'sample') lanes.sort((a, b) => a.lane.sample.localeCompare(b.lane.sample))\n\t\telse lanes.sort((a, b) => b.end - a.end)\n\n\t\tconst categoryKeys = new Set<string>()\n\t\tconst eventKeys = new Set<string>()\n\t\tfor (const { lane } of lanes) {\n\t\t\tfor (const r of lane.ranges) categoryKeys.add(r.category)\n\t\t\t// a clipped event (e.g. birth in a treatment-referenced view) is not drawn\n\t\t\tfor (const p of lane.points) if (!this.isClipped(p)) eventKeys.add(p.event)\n\t\t}\n\t\tconst categories = this.getLegend(this.swimmer.categories, categoryKeys, s.legend?.categories)\n\t\tconst events = this.getLegend(this.swimmer.events, eventKeys, s.legend?.events)\n\t\tconst pointCategories = this.getPointLegend(events)\n\n\t\tconst fontSize = Math.min(12, Math.max(7, s.rowHeight - 3))\n\t\tconst axisHeight = 45\n\t\tconst topPad = 10\n\t\tconst rightPad = 20\n\t\t// lanes are separated by a thin fixed gap so the bar fills most of the row; segments and\n\t\t// event dots scale with the bar rather than the row\n\t\tconst laneGap = Math.max(1, Math.round(s.rowHeight * 0.1))\n\t\tconst barH = Math.max(2, s.rowHeight - laneGap)\n\t\tconst segH = Math.max(1, barH * 0.6)\n\t\t// the base bar is a thin line under the segments\n\t\tconst baseH = Math.max(1, barH * 0.25)\n\t\t// event markers are 70% of the bar height, all shapes the same height unless an event sets a relative size\n\t\tconst markerH = Math.max(4, barH * 0.7)\n\n\t\tconst svg = plotDiv.append('svg').attr('data-testid', 'sjpp-swimmer-svg')\n\t\tthis.dom.svg = svg\n\t\tconst names = lanes.map(l => l.lane.sample)\n\t\tconst labelWidth = s.showSampleNames ? getMaxTextWidth(svg, names, fontSize) + labelGap + 6 : 10\n\n\t\t// one shared time scale for all divide-by panels, so they can be compared\n\t\tconst maxEnd = Math.max(...lanes.map(l => l.end), 1)\n\t\t// events before the time origin (e.g. a CSF sample collected before treatment start) have\n\t\t// negative times; extend the axis left so they do not overlap the sample names. events with\n\t\t// clipBeforeOrigin (e.g. birth in a treatment-referenced view) do not; their markers before time 0 are\n\t\t// not drawn\n\t\tlet minTime = 0\n\t\tfor (const { lane } of lanes) {\n\t\t\tfor (const p of lane.points) {\n\t\t\t\tif (!this.isClipped(p)) minTime = Math.min(minTime, p.time)\n\t\t\t}\n\t\t\tfor (const r of lane.ranges) minTime = Math.min(minTime, r.start)\n\t\t}\n\t\tconst x = scaleLinear()\n\t\t\t.domain([minTime < 0 ? minTime - (maxEnd - minTime) * 0.01 : 0, maxEnd * 1.02])\n\t\t\t.range([0, s.plotWidth])\n\t\tconst ticks = x.ticks(Math.max(2, Math.floor(s.plotWidth / 90)))\n\n\t\tconst tip = this.dom.tip\n\t\tconst timeLabel = ref?.timeLabel || this.swimmer.timeLabel || 'Time'\n\t\tconst fmt = (d: number) => (Number.isInteger(d) ? String(d) : d.toFixed(1))\n\n\t\tconst groups = this.getGroups(lanes)\n\t\tif (!groups.length) {\n\t\t\tsvg.remove()\n\t\t\tdelete this.dom.svg\n\t\t\tplotDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('opacity', 0.6)\n\t\t\t\t.text(`No ${this.laneType?.plural_name || 'samples'} have a value for the divide-by variable`)\n\t\t\treturn\n\t\t}\n\t\tconst titleH = groups[0].label !== undefined ? 24 : 0\n\t\tconst groupGap = 16\n\t\tlet yOffset = topPad\n\t\tfor (const group of groups) {\n\t\t\tif (group.label !== undefined) {\n\t\t\t\tsvg\n\t\t\t\t\t.append('text')\n\t\t\t\t\t.attr('data-testid', 'sjpp-swimmer-group-title')\n\t\t\t\t\t.attr('x', labelWidth)\n\t\t\t\t\t.attr('y', yOffset + 15)\n\t\t\t\t\t.attr('font-size', 14)\n\t\t\t\t\t.attr('font-weight', 600)\n\t\t\t\t\t.attr('fill', '#333')\n\t\t\t\t\t.text(`${group.label} (n=${group.lanes.length})`)\n\t\t\t\tyOffset += titleH\n\t\t\t}\n\t\t\tconst plotHeight = group.lanes.length * s.rowHeight\n\t\t\tconst mainG = svg.append('g').attr('transform', `translate(${labelWidth},${yOffset})`)\n\t\t\tconst markers: MarkerHit[] = []\n\t\t\tconst rows: LaneRow[] = []\n\n\t\t\t// vertical grid lines behind the lanes\n\t\t\tmainG\n\t\t\t\t.append('g')\n\t\t\t\t.selectAll('line')\n\t\t\t\t.data(ticks)\n\t\t\t\t.enter()\n\t\t\t\t.append('line')\n\t\t\t\t.attr('x1', d => x(d))\n\t\t\t\t.attr('x2', d => x(d))\n\t\t\t\t.attr('y1', 0)\n\t\t\t\t.attr('y2', plotHeight)\n\t\t\t\t.attr('stroke', '#e6e6e6')\n\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\n\t\t\tfor (const [i, { lane, end }] of group.lanes.entries()) {\n\t\t\t\tconst y = i * s.rowHeight\n\t\t\t\tconst g = mainG.append('g').attr('transform', `translate(0,${y})`)\n\t\t\t\tconst row: LaneRow = { lane, end, segments: [] }\n\t\t\t\trows.push(row)\n\n\t\t\t\t// base bar: a thin line\n\t\t\t\tg.append('rect')\n\t\t\t\t\t.attr('x', x(0))\n\t\t\t\t\t.attr('y', (s.rowHeight - baseH) / 2)\n\t\t\t\t\t.attr('width', Math.max(0, x(end) - x(0)))\n\t\t\t\t\t.attr('height', baseH)\n\t\t\t\t\t.attr('fill', '#999')\n\t\t\t\t\t.attr('fill-opacity', 0.5)\n\t\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\n\t\t\t\t// interval segments. one without an end (blank or NA in the file) is ongoing: drawn up to the lane\n\t\t\t\t// end, with an arrowhead\n\t\t\t\tfor (const r of lane.ranges) {\n\t\t\t\t\tconst entry = categories.byKey.get(r.category)!\n\t\t\t\t\tif (entry.hidden) continue\n\t\t\t\t\tconst segEnd = r.end ?? Math.max(end, r.start)\n\t\t\t\t\tconst segTop = (s.rowHeight - segH) / 2\n\t\t\t\t\tconst seg = g.append('g')\n\t\t\t\t\t// translucent, so overlapping intervals and the base bar show through\n\t\t\t\t\tseg.attr('fill-opacity', 0.75)\n\t\t\t\t\tseg\n\t\t\t\t\t\t.append('rect')\n\t\t\t\t\t\t.attr('x', x(r.start))\n\t\t\t\t\t\t.attr('y', segTop)\n\t\t\t\t\t\t.attr('width', Math.max(1, x(segEnd) - x(r.start)))\n\t\t\t\t\t\t.attr('height', segH)\n\t\t\t\t\t\t.attr('fill', entry.color)\n\t\t\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\t\t\tconst xe = x(r.start) + Math.max(1, x(segEnd) - x(r.start))\n\t\t\t\t\trow.segments.push({ r, entry, x0: x(r.start), x1: r.end == null ? xe + segH * 0.8 : xe })\n\t\t\t\t\tif (r.end == null) {\n\t\t\t\t\t\tseg\n\t\t\t\t\t\t\t.append('path')\n\t\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\t'd',\n\t\t\t\t\t\t\t\t`M${xe},${segTop - segH / 3}L${xe + segH * 0.8},${s.rowHeight / 2}L${xe},${segTop + segH * 1.33}Z`\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.attr('fill', entry.color)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// events\n\t\t\t\tfor (const p of lane.points) {\n\t\t\t\t\tif (this.isClipped(p)) continue\n\t\t\t\t\tconst entry = events.byKey.get(p.event)!\n\t\t\t\t\tif (entry.hidden) continue\n\t\t\t\t\t// a marked point is drawn by its \"mark by\" category\n\t\t\t\t\tconst mark = this.isMarkedPoint(p) ? pointCategories.byKey.get(p.category || noValueCategory) : undefined\n\t\t\t\t\tif (mark?.hidden) continue\n\t\t\t\t\tconst shape = mark?.shape || entry.shape\n\t\t\t\t\tconst color = mark?.color || entry.color\n\t\t\t\t\tconst height = markerH * entry.size\n\t\t\t\t\tconst cx = x(p.time)\n\t\t\t\t\t// hover and click go through the panel cover, see attachInteractions()\n\t\t\t\t\tconst dot = drawMarker(g, shape, cx, s.rowHeight / 2, height, color).attr('data-event', p.event)\n\t\t\t\t\t// after drawMarker(), which measures the shape on its first use\n\t\t\t\t\tconst { halfWidth } = getMarkerGeometry(shape, height)\n\t\t\t\t\tmarkers.push({ p, lane, entry, mark, shape, color, x: cx, y: y + s.rowHeight / 2, height, halfWidth })\n\t\t\t\t\tif (p.sample && p.sampleId !== undefined) {\n\t\t\t\t\t\tconst sample = { sampleId: p.sampleId, sampleName: p.sample }\n\t\t\t\t\t\tdot\n\t\t\t\t\t\t\t.attr('data-testid', 'sjpp-swimmer-linked-point')\n\t\t\t\t\t\t\t.attr('role', 'button')\n\t\t\t\t\t\t\t.attr('tabindex', 0)\n\t\t\t\t\t\t\t.attr('aria-label', `Open sample view of ${p.sample}`)\n\t\t\t\t\t\t\t.on('keydown', (event: KeyboardEvent) => {\n\t\t\t\t\t\t\t\tif (event.key === 'Enter' || event.key === ' ') {\n\t\t\t\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\t\t\t\tthis.openSampleView(sample)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (s.showSampleNames) {\n\t\t\t\t\tg.append('text')\n\t\t\t\t\t\t.attr('x', -labelGap)\n\t\t\t\t\t\t.attr('y', s.rowHeight / 2)\n\t\t\t\t\t\t.attr('text-anchor', 'end')\n\t\t\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t\t\t.attr('font-size', fontSize)\n\t\t\t\t\t\t.attr('fill', '#333')\n\t\t\t\t\t\t.attr('role', 'button')\n\t\t\t\t\t\t.attr('tabindex', 0)\n\t\t\t\t\t\t.attr('aria-label', `Open sample view of ${lane.sample}`)\n\t\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t\t\t.text(lane.sample)\n\t\t\t\t\t\t.on('click', () => this.openSampleView({ sampleId: lane.sampleId, sampleName: lane.sample }, true))\n\t\t\t\t\t\t.on('keydown', (event: KeyboardEvent) => {\n\t\t\t\t\t\t\tif (event.key === 'Enter' || event.key === ' ') {\n\t\t\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\t\t\tthis.openSampleView({ sampleId: lane.sampleId, sampleName: lane.sample }, true)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('mouseover', event => {\n\t\t\t\t\t\t\ttip.clear().show(event.clientX, event.clientY)\n\t\t\t\t\t\t\ttip.d.append('div').text('Click to open sample view')\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('mouseout', () => tip.hide())\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.attachInteractions(mainG, markers, rows, {\n\t\t\t\tplotWidth: s.plotWidth,\n\t\t\t\trowHeight: s.rowHeight,\n\t\t\t\tsegH,\n\t\t\t\tbarH,\n\t\t\t\tx,\n\t\t\t\ttimeLabel,\n\t\t\t\tfmt\n\t\t\t})\n\n\t\t\t// x axis\n\t\t\tconst axisG = mainG.append('g').attr('transform', `translate(0,${plotHeight + 2})`)\n\t\t\taxisG.call(axisBottom(x).tickValues(ticks))\n\t\t\taxisstyle({ axis: axisG, showline: true, fontsize: 11 })\n\t\t\taxisG\n\t\t\t\t.append('text')\n\t\t\t\t.attr('x', s.plotWidth / 2)\n\t\t\t\t.attr('y', 34)\n\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t.attr('font-size', 12)\n\t\t\t\t.attr('fill', '#333')\n\t\t\t\t.text(timeLabel)\n\t\t\tyOffset += plotHeight + axisHeight + groupGap\n\t\t}\n\t\tconst legendHeight = this.renderLegend(\n\t\t\tsvg.append('g').attr('transform', `translate(${labelWidth + s.plotWidth + rightPad},${topPad})`),\n\t\t\tcategories.entries,\n\t\t\tevents.entries,\n\t\t\tpointCategories.entries\n\t\t)\n\t\t// a few lanes (e.g. one patient in sample view) can be shorter than the legend\n\t\tsvg\n\t\t\t.attr('width', labelWidth + s.plotWidth + rightPad + legendWidth)\n\t\t\t.attr('height', Math.max(yOffset - groupGap, topPad + legendHeight))\n\t}\n\n\t/** returns the legend height. events linked to samples (e.g. \"CSF sample\") are listed last. with a \"mark\n\tby\" term their markers take the term's category colors and shapes, so the event row has no icon and is\n\tfollowed by the term as a pill, as in the controls, then the term's categories, indented:\n\t Events\n\t Follow-up\n\t Mark CSF sample by\n\t [term name]\n\t category1\n\t category2 */\n\trenderLegend(g, categories: LegendEntry[], events: LegendEntry[], pointCategories: LegendEntry[] = []): number {\n\t\tconst lineH = 18\n\t\tconst indent = 20\n\t\tlet y = 0\n\t\tconst fit = (text: string, max: number) => (text.length > max ? text.slice(0, max - 1) + '\u2026' : text)\n\t\tconst title = (text: string) => {\n\t\t\tg.append('text')\n\t\t\t\t.attr('y', y + 10)\n\t\t\t\t.attr('font-size', 12)\n\t\t\t\t.attr('font-weight', 'bold')\n\t\t\t\t.text(text)\n\t\t\ty += lineH\n\t\t}\n\t\tconst item = (\n\t\t\ttype: keyof LegendOverrides,\n\t\t\te: LegendEntry,\n\t\t\tentries: LegendEntry[],\n\t\t\tdrawIcon: (holder: any, e: LegendEntry) => void,\n\t\t\t/** label: shown instead of e.label */\n\t\t\topts: { x?: number; allowColor?: boolean; allowShape?: boolean; label?: string } = {}\n\t\t) => {\n\t\t\tconst x = opts.x || 0\n\t\t\t// long labels (e.g. a term name, or a free-text note stored as a category) are cut to fit the legend\n\t\t\t// width, with the full text on hover\n\t\t\tconst max = Math.floor((26 * (legendWidth - x)) / legendWidth)\n\t\t\tconst row = g\n\t\t\t\t.append('g')\n\t\t\t\t.attr('transform', `translate(${x},${y})`)\n\t\t\t\t.attr('data-testid', 'sjpp-swimmer-legend-item')\n\t\t\t\t.attr('data-legend-type', type)\n\t\t\t\t.attr('role', 'button')\n\t\t\t\t.attr('tabindex', 0)\n\t\t\t\t.attr('aria-label', `Edit legend item ${opts.label || e.label}`)\n\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t.style('opacity', e.hidden ? 0.4 : 1)\n\t\t\tconst showMenu = event =>\n\t\t\t\tthis.showLegendMenu(event, type, e, entries, {\n\t\t\t\t\tallowColor: opts.allowColor !== false,\n\t\t\t\t\tallowShape: type != 'categories' && opts.allowShape !== false\n\t\t\t\t})\n\t\t\trow.on('click', showMenu).on('keydown', (event: KeyboardEvent) => {\n\t\t\t\tif (event.key === 'Enter' || event.key === ' ') {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tshowMenu(event)\n\t\t\t\t}\n\t\t\t})\n\t\t\t// transparent box so the gap between icon and label is clickable too\n\t\t\trow\n\t\t\t\t.append('rect')\n\t\t\t\t.attr('width', legendWidth - 20 - x)\n\t\t\t\t.attr('height', lineH)\n\t\t\t\t.attr('fill', 'transparent')\n\t\t\tdrawIcon(row, e)\n\t\t\trow\n\t\t\t\t.append('text')\n\t\t\t\t.attr('x', 20)\n\t\t\t\t.attr('y', 10)\n\t\t\t\t.attr('font-size', 12)\n\t\t\t\t.attr('fill', '#333')\n\t\t\t\t.style('text-decoration', e.hidden ? 'line-through' : 'none')\n\t\t\t\t.text(fit(opts.label || e.label, max))\n\t\t\tif ((opts.label || e.label).length > max) row.append('title').text(opts.label || e.label)\n\t\t\ty += lineH\n\t\t}\n\t\tconst rect = (row, e: LegendEntry) =>\n\t\t\trow.append('rect').attr('x', 0).attr('y', 3).attr('width', 14).attr('height', 8).attr('fill', e.color)\n\t\tconst marker = (row, e: LegendEntry) => drawMarker(row, e.shape, 7, 7, Math.max(6, 12 * e.size), e.color)\n\n\t\tif (categories.length) {\n\t\t\ttitle('Intervals')\n\t\t\tfor (const e of categories) item('categories', e, categories, rect)\n\t\t\ty += 8\n\t\t}\n\t\tif (events.length) {\n\t\t\tconst linkedKeys = new Set<string>(this.swimmer.pointSampleEvents || [])\n\t\t\tconst linked = events.filter(e => linkedKeys.has(e.key))\n\t\t\tconst ordered = [...events.filter(e => !linkedKeys.has(e.key)), ...linked]\n\t\t\tconst marked = this.pointTerm && pointCategories.length > 0\n\t\t\ttitle('Events')\n\t\t\tfor (const e of ordered) {\n\t\t\t\tif (!marked || !linkedKeys.has(e.key)) {\n\t\t\t\t\titem('events', e, ordered, marker)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\t// markers take the mark-by term's category colors and shapes: no icon. the event's legend options are\n\t\t\t\t// in the menu of the term pill\n\t\t\t\tg.append('text')\n\t\t\t\t\t.attr('x', 20)\n\t\t\t\t\t.attr('y', y + 10)\n\t\t\t\t\t.attr('font-size', 12)\n\t\t\t\t\t.attr('fill', '#333')\n\t\t\t\t\t.style('opacity', e.hidden ? 0.4 : 1)\n\t\t\t\t\t.style('text-decoration', e.hidden ? 'line-through' : 'none')\n\t\t\t\t\t.text(`Mark ${e.label} by`)\n\t\t\t\ty += lineH\n\t\t\t\tconst name = this.pointTerm.term?.name || ''\n\t\t\t\tconst pill = g\n\t\t\t\t\t.append('g')\n\t\t\t\t\t.attr('transform', `translate(${indent},${y})`)\n\t\t\t\t\t.attr('data-testid', 'sjpp-swimmer-legend-pointterm')\n\t\t\t\t\t.attr('role', 'button')\n\t\t\t\t\t.attr('tabindex', 0)\n\t\t\t\t\t.attr('aria-label', `Edit ${name}`)\n\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\tconst pillRect = pill.append('rect').attr('rx', 6).attr('height', 20).attr('fill', '#cfe2f3')\n\t\t\t\tconst max = Math.floor((26 * (legendWidth - indent - 12)) / legendWidth)\n\t\t\t\tconst pillText = pill.append('text').attr('x', 6).attr('y', 14).attr('font-size', 12).text(fit(name, max))\n\t\t\t\tif (name.length > max) pill.append('title').text(name)\n\t\t\t\tpillRect.attr('width', (pillText.node().getComputedTextLength() || name.length * 7) + 12)\n\t\t\t\tconst showMenu = () => this.showPointTermMenu(pill.node(), e, ordered)\n\t\t\t\tpill.on('click', showMenu).on('keydown', (event: KeyboardEvent) => {\n\t\t\t\t\tif (event.key === 'Enter' || event.key === ' ') {\n\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\tshowMenu()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\ty += 24\n\t\t\t}\n\t\t\tif (marked) {\n\t\t\t\tfor (const e of pointCategories) item('pointCategories', e, pointCategories, marker, { x: indent })\n\t\t\t}\n\t\t\ty += 8\n\t\t}\n\t\treturn y\n\t}\n\n\t/** a clipBeforeOrigin event before time 0 (e.g. birth in a treatment-referenced view), not drawn */\n\tisClipped(p: SwimmerPoint) {\n\t\treturn p.time < 0 && !!this.swimmer.events?.[p.event]?.clipBeforeOrigin\n\t}\n\n\t/** radio buttons to switch the time reference (e.g. birth, diagnosis, treatment start), above the plot. only\n\twith two or more ds time references and onSettingsChange, which refetches the lanes */\n\trenderTimeReferences() {\n\t\tconst refs: SwimmerTimeReference[] = this.swimmer.timeReferences || []\n\t\tif (refs.length < 2 || !this.onSettingsChange) return\n\t\tconst current = this.timeReference\n\t\tconst holder = this.dom.plotDiv\n\t\t\t.append('div')\n\t\t\t.attr('data-testid', 'sjpp-swimmer-time-references')\n\t\t\t.attr('role', 'radiogroup')\n\t\t\t.attr('aria-label', 'Time from')\n\t\t\t.style('margin-bottom', '8px')\n\t\tholder.append('span').style('margin-right', '8px').style('opacity', 0.8).text('Time from:')\n\t\tmake_radios({\n\t\t\tholder: holder.append('div').style('display', 'inline-block'),\n\t\t\toptions: refs.map(r => ({\n\t\t\t\tlabel: r.label || r.key,\n\t\t\t\tvalue: r.key,\n\t\t\t\tchecked: r.key == current,\n\t\t\t\ttestid: `sjpp-swimmer-time-reference-${r.key}`\n\t\t\t})),\n\t\t\tstyles: { display: 'inline-block', padding: '3px 10px 3px 0' },\n\t\t\t// the lanes are refetched and the plot redrawn, these radios included\n\t\t\tcallback: key => this.onSettingsChange!({ timeReference: key })\n\t\t})\n\t}\n\n\t/** legend item menu, as in the scatter plot legend: hide/show, show only, show all, color, and shape for\n\tevents. \"show only\" and \"show all\" act within the item's own section (intervals, events or mark-by\n\tcategories). color and shape options are left out for an event whose markers are drawn by the mark-by term */\n\tshowLegendMenu(\n\t\tevent,\n\t\ttype: keyof LegendOverrides,\n\t\te: LegendEntry,\n\t\tentries: LegendEntry[],\n\t\topts: { allowColor: boolean; allowShape: boolean }\n\t) {\n\t\tthis.dom.tip.hide()\n\t\tif (!this.legendMenu) this.legendMenu = new Menu({ padding: '0px' })\n\t\tconst menu = this.legendMenu\n\t\tthis.addLegendOptions(menu, menu.clear().d.append('div'), type, e, entries, opts)\n\t\tmenu.showunder(event.target)\n\t}\n\n\t/** menu of the \"mark by\" term pill in the legend: the edit, replace and remove options of the controls'\n\t\"Mark ... by\" pill, then the legend options of the marked event (e), without color or shape */\n\tasync showPointTermMenu(node: Element, e: LegendEntry, entries: LegendEntry[]) {\n\t\tthis.dom.tip.hide()\n\t\tthis.legendMenu?.hide()\n\t\tif (!this.pointTermMenu) this.pointTermMenu = new Menu({ padding: '0px' })\n\t\tconst menu = this.pointTermMenu\n\t\tif (!this.pointTermPill)\n\t\t\tthis.pointTermPill = termsettingInit({\n\t\t\t\tvocabApi: this.app.vocabApi,\n\t\t\t\trenderAs: 'none',\n\t\t\t\ttip: menu,\n\t\t\t\tmenuOptions: '*',\n\t\t\t\tusecase: { target: 'swimmer', detail: 'pointTerm', sampleTypes: this.swimmer.pointSampleTypes },\n\t\t\t\tnumericEditMenuVersion: ['discrete'],\n\t\t\t\tdefaultQ4fillTW: getT0T2defaultQ(),\n\t\t\t\tcallback: tw => {\n\t\t\t\t\tmenu.hide()\n\t\t\t\t\tthis.onPointTermChange?.(tw)\n\t\t\t\t}\n\t\t\t})\n\t\t// main() adds .tw to its argument and may fill its nested q in place (e.g. q.type of custom bins), so\n\t\t// clone the frozen state wrapper. a .tw in the state (the controls' pill adds one to the tw it dispatches)\n\t\t// is a plain copy, not the TwBase instance main() expects there, so it is dropped for main() to rebuild\n\t\tconst pointTerm = structuredClone(this.pointTerm)\n\t\tdelete pointTerm.tw\n\t\tawait this.pointTermPill.main(pointTerm)\n\t\t// clears the menu, adds the term options and shows the menu under node\n\t\tthis.pointTermPill.showMenu(null, node)\n\t\tthis.addLegendOptions(menu, menu.d.append('div'), 'events', e, entries, { allowColor: false, allowShape: false })\n\t}\n\n\t/** legend options of entry e, appended to div inside menu */\n\taddLegendOptions(\n\t\tmenu: Menu,\n\t\tdiv,\n\t\ttype: keyof LegendOverrides,\n\t\te: LegendEntry,\n\t\tentries: LegendEntry[],\n\t\topts: { allowColor: boolean; allowShape: boolean }\n\t) {\n\t\tconst option = (text: string, edit: () => { [label: string]: LegendOverride }) =>\n\t\t\tdiv\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t.text(text)\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tmenu.hide()\n\t\t\t\t\tthis.editLegend(type, edit())\n\t\t\t\t})\n\t\toption(e.hidden ? 'Show' : 'Hide', () => ({ [e.label]: { hidden: !e.hidden } }))\n\t\tif (entries.length > 1)\n\t\t\toption('Show only', () => Object.fromEntries(entries.map(x => [x.label, { hidden: x.label != e.label }])))\n\t\tif (entries.some(x => x.hidden))\n\t\t\toption('Show all', () => Object.fromEntries(entries.map(x => [x.label, { hidden: false }])))\n\t\tif (opts.allowColor)\n\t\t\tdiv\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sja_sharp_border')\n\t\t\t\t.style('padding', '0px 10px')\n\t\t\t\t.text('Color:')\n\t\t\t\t.append('input')\n\t\t\t\t.attr('type', 'color')\n\t\t\t\t.attr('value', rgb(e.color).formatHex())\n\t\t\t\t.on('change', (ev: Event) => {\n\t\t\t\t\tmenu.hide()\n\t\t\t\t\tthis.editLegend(type, { [e.label]: { color: (ev.target as HTMLInputElement).value } })\n\t\t\t\t})\n\t\tif (opts.allowShape) {\n\t\t\tdiv\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t.text('Change shape')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tdiv.selectAll('*').remove()\n\t\t\t\t\t// shapeSelector lists the shapes in the order of the shapes object\n\t\t\t\t\tshapeSelector(div, (index: number) => {\n\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t\tthis.editLegend(type, { [e.label]: { shape: Object.keys(shapes)[index] } })\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t}\n\t}\n\n\t/** remove the body-mounted menus and their body listeners */\n\tdestroy() {\n\t\tfor (const i of this.interactions) i.destroy()\n\t\tthis.dom.tip.destroy()\n\t\tthis.legendMenu?.destroy()\n\t\t// also destroys pointTermMenu, its tip\n\t\tthis.pointTermPill?.destroy()\n\t}\n\n\t/** merge changes into the legend overrides, then save them through onSettingsChange or redraw locally */\n\teditLegend(type: keyof LegendOverrides, changes: { [label: string]: LegendOverride }) {\n\t\tconst legend: LegendOverrides = structuredClone(\n\t\t\tthis.settings.legend || { categories: {}, events: {}, pointCategories: {} }\n\t\t)\n\t\tif (!legend[type]) legend[type] = {}\n\t\tfor (const [label, o] of Object.entries(changes)) legend[type][label] = { ...legend[type][label], ...o }\n\t\tif (this.onSettingsChange) this.onSettingsChange({ legend })\n\t\telse {\n\t\t\tthis.settings = { ...this.settings, legend }\n\t\t\tthis.render()\n\t\t}\n\t}\n\n\t/** whether a marker opens a sample view on click: a point linked to its own sample (e.g. a CSF dot) */\n\tisLinked(d: MarkerHit) {\n\t\treturn !!d.p.sample && d.p.sampleId !== undefined\n\t}\n\n\t/** hover and click of a panel, through a transparent cover over its lanes. the shared DataPointInteractions\n\thit-tests the markers; when none is under the cursor, a hover shows the interval segments or the base bar\n\tunder it. a marker is hit when the cursor is within its drawn left and right edges, anywhere in its lane's\n\trow, so only markers whose shapes overlap at the cursor are listed together. a click on several\n\tlinked markers opens a menu to pick the sample to view */\n\tattachInteractions(\n\t\tmainG,\n\t\tmarkers: MarkerHit[],\n\t\trows: LaneRow[],\n\t\to: {\n\t\t\tplotWidth: number\n\t\t\trowHeight: number\n\t\t\tsegH: number\n\t\t\tbarH: number\n\t\t\tx: (t: number) => number\n\t\t\ttimeLabel: string\n\t\t\tfmt: (d: number) => string\n\t\t}\n\t) {\n\t\tconst tip = this.dom.tip\n\t\tconst time = `(${o.timeLabel.toLowerCase()})`\n\t\tconst hoverLayer = mainG.append('g').style('pointer-events', 'none')\n\t\tconst minX = markers.reduce((v, d) => Math.min(v, d.x - d.halfWidth), 0)\n\t\tconst maxX = rows.reduce(\n\t\t\t(right, row) => row.segments.reduce((v, segment) => Math.max(v, segment.x1), right),\n\t\t\tmarkers.reduce((v, d) => Math.max(v, d.x + d.halfWidth), o.plotWidth)\n\t\t)\n\t\tconst cover = mainG\n\t\t\t.append('rect')\n\t\t\t.attr('data-testid', 'sjpp-swimmer-cover')\n\t\t\t.attr('x', minX)\n\t\t\t.attr('width', maxX - minX)\n\t\t\t.attr('height', rows.length * o.rowHeight)\n\t\t\t.attr('fill', 'transparent')\n\t\t\t.style('pointer-events', 'all')\n\t\t// cursor in panel pixels; the row number of the cursor, and y snapped to the center of that row, where its\n\t\t// markers are\n\t\tconst getCursor = (event: MouseEvent) => {\n\t\t\tconst [mx, my] = pointer(event, mainG.node())\n\t\t\tconst i = Math.floor(my / o.rowHeight)\n\t\t\treturn { mx, my, i, cy: (i + 0.5) * o.rowHeight }\n\t\t}\n\t\tlet hovered: MarkerHit[] = []\n\t\t// row of the cursor, set by toLocalCoords() before isHidden() runs on the candidates\n\t\tlet cursorRow = -1\n\t\tconst dpi = new DataPointInteractions<MarkerHit>({\n\t\t\tcover,\n\t\t\thoverLayer,\n\t\t\thoverTip: tip,\n\t\t\tpoints: markers,\n\t\t\tgetX: d => d.x,\n\t\t\tgetY: d => d.y,\n\t\t\ttoLocalCoords: event => {\n\t\t\t\tconst { mx, cy, i } = getCursor(event)\n\t\t\t\tcursorRow = i\n\t\t\t\treturn [mx, cy]\n\t\t\t},\n\t\t\thitRadius: Math.max(0, ...markers.map(d => d.halfWidth)),\n\t\t\tperDotRadius: d => d.halfWidth,\n\t\t\t// only markers of the cursor's row: a large marker (event size of about 3 or more) would otherwise be\n\t\t\t// within reach from the neighboring lanes. so the hit distance is the horizontal one\n\t\t\tisHidden: d => Math.floor(d.y / o.rowHeight) !== cursorRow,\n\t\t\t// outline of the marker's shape, 2px larger on each side\n\t\t\ttoHoverSpec: d => {\n\t\t\t\tconst m = getMarkerGeometry(d.shape, d.height + 4)\n\t\t\t\treturn {\n\t\t\t\t\tpath: m.shape.path,\n\t\t\t\t\ttransform: `translate(${d.x},${d.y}) ${m.transform}`,\n\t\t\t\t\tstroke: 'black',\n\t\t\t\t\tfill: 'none'\n\t\t\t\t}\n\t\t\t},\n\t\t\titemNoun: 'event',\n\t\t\trenderSingleHoverTooltip: (d, container) => this.renderMarkerTip(d, container, time, o.fmt),\n\t\t\tbuildMultiHitTableData: dots => this.buildMarkersTable(dots, o.timeLabel, o.fmt),\n\t\t\tonHover: dots => {\n\t\t\t\thovered = dots\n\t\t\t\tcover.style('cursor', dots.some(d => this.isLinked(d)) ? 'pointer' : 'default')\n\t\t\t},\n\t\t\tonSingleClick: (d, event, ctx) => this.openMarkerSamples([d], event, ctx, time, o.fmt),\n\t\t\tonMultiClick: (dots, event, ctx) => this.openMarkerSamples(dots, event, ctx, time, o.fmt)\n\t\t})\n\t\tdpi.attach()\n\t\tthis.interactions.push(dpi)\n\n\t\t// runs after the DataPointInteractions mousemove handler, which sets `hovered`\n\t\tcover.on('mousemove.lane', (event: MouseEvent) => {\n\t\t\tif (hovered.length || dpi.clickMenu.d.style('display') != 'none') return\n\t\t\tconst { mx, my, i, cy } = getCursor(event)\n\t\t\tconst row = rows[i]\n\t\t\tif (!row) return tip.hide()\n\t\t\tconst dy = Math.abs(my - cy)\n\t\t\tconst segments = row.segments.filter(sg => {\n\t\t\t\tif (mx < sg.x0 || mx > sg.x1) return false\n\t\t\t\tif (sg.r.end != null) return dy <= o.segH / 2\n\t\t\t\tconst arrowStart = sg.x1 - o.segH * 0.8\n\t\t\t\tif (mx < arrowStart) return dy <= o.segH / 2\n\t\t\t\tconst fraction = (sg.x1 - mx) / (o.segH * 0.8)\n\t\t\t\treturn my >= cy - (o.segH / 2 + o.segH / 3) * fraction && my <= cy + (o.segH * 1.33 - o.segH / 2) * fraction\n\t\t\t})\n\t\t\tconst onBase = dy <= o.barH / 2 && mx >= o.x(0) && mx <= o.x(row.end)\n\t\t\tif (!segments.length && !onBase) return tip.hide()\n\t\t\ttip.clear()\n\t\t\ttip.d.append('div').style('font-weight', 'bold').text(row.lane.sample)\n\t\t\tfor (const { r, entry } of segments) {\n\t\t\t\tconst div = tip.d.append('div').attr('data-testid', 'sjpp-swimmer-tip-interval')\n\t\t\t\tdiv\n\t\t\t\t\t.append('svg')\n\t\t\t\t\t.attr('width', 14)\n\t\t\t\t\t.attr('height', 10)\n\t\t\t\t\t.style('margin-right', '5px')\n\t\t\t\t\t.append('rect')\n\t\t\t\t\t.attr('y', 1)\n\t\t\t\t\t.attr('width', 14)\n\t\t\t\t\t.attr('height', 8)\n\t\t\t\t\t.attr('fill', entry.color)\n\t\t\t\tdiv.append('span').text(`${entry.label}${entry.label != r.category ? ` (${r.category})` : ''}`)\n\t\t\t\ttip.d\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('margin-left', '19px')\n\t\t\t\t\t.text(\n\t\t\t\t\t\tr.end == null ? `From ${o.fmt(r.start)}, ongoing ${time}` : `${o.fmt(r.start)} to ${o.fmt(r.end)} ${time}`\n\t\t\t\t\t)\n\t\t\t}\n\t\t\tif (!segments.length) tip.d.append('div').text(`Lane end: ${o.fmt(row.end)} ${time}`)\n\t\t\ttip.show(event.clientX, event.clientY)\n\t\t})\n\t}\n\n\t/** hover tooltip of one marker: the lane name, the event with its legend icon, and a linked point's sample\n\twith its annotations */\n\trenderMarkerTip(d: MarkerHit, container, time: string, fmt: (d: number) => string) {\n\t\tconst { p, lane, entry, mark } = d\n\t\tcontainer.append('div').style('font-weight', 'bold').text(lane.sample)\n\t\tconst row = container.append('div').attr('data-testid', 'sjpp-swimmer-tip-event')\n\t\trow.append('span').style('margin-right', '5px').html(getMarkerIconHtml(d.shape, d.color))\n\t\trow.append('span').text(`${entry.label}: ${fmt(p.time)} ${time}`)\n\t\tif (mark) container.append('div').text(`${this.pointTerm.term?.name}: ${mark.label}`)\n\t\tif (!p.sample) return\n\t\tcontainer.append('div').text(`Sample: ${p.sample}`)\n\t\tif (p.sampleId === undefined) return\n\t\tif (entry.sampleTerms?.length) this.showPointSampleAnno(container, p.sampleId, entry.sampleTerms)\n\t\tcontainer.append('div').style('font-size', '0.8em').style('opacity', 0.7).text('Click to open sample view')\n\t}\n\n\t/** multi-hit hover table of overlapping markers, one row per marker with its legend icon */\n\tbuildMarkersTable(dots: MarkerHit[], timeLabel: string, fmt: (d: number) => string) {\n\t\tconst hasSample = dots.some(d => d.p.sample)\n\t\tconst hasMark = dots.some(d => d.mark)\n\t\tconst columns: any[] = [\n\t\t\t{ label: '' },\n\t\t\t{ label: 'Event' },\n\t\t\t{ label: timeLabel, sortable: true },\n\t\t\t...(hasMark ? [{ label: this.pointTerm.term?.name || '' }] : []),\n\t\t\t...(hasSample ? [{ label: 'Sample' }] : [])\n\t\t]\n\t\tconst rows = dots.map(d => [\n\t\t\t{ html: getMarkerIconHtml(d.shape, d.color) },\n\t\t\t{ value: d.entry.label },\n\t\t\t{ value: fmt(d.p.time) },\n\t\t\t...(hasMark ? [{ value: d.mark?.label || '' }] : []),\n\t\t\t...(hasSample ? [{ value: d.p.sample || '' }] : [])\n\t\t])\n\t\treturn { columns, rows }\n\t}\n\n\t/** click on markers: opens the sample view of the one linked marker, or a menu to pick one of several */\n\topenMarkerSamples(dots: MarkerHit[], event: MouseEvent, ctx, time: string, fmt: (d: number) => string) {\n\t\tconst linked = dots.filter(d => this.isLinked(d))\n\t\tif (linked.length < 2) {\n\t\t\tctx.dismiss()\n\t\t\tif (linked.length) this.openSampleView({ sampleId: linked[0].p.sampleId!, sampleName: linked[0].p.sample! })\n\t\t\treturn\n\t\t}\n\t\tconst menu: Menu = ctx.clickMenu\n\t\tmenu.clear()\n\t\tmenu.d.append('div').style('padding', '5px 10px').style('opacity', 0.7).text('Open sample view of')\n\t\tfor (const d of linked) {\n\t\t\tconst sample = { sampleId: d.p.sampleId!, sampleName: d.p.sample! }\n\t\t\tconst option = menu.d\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t.attr('data-testid', 'sjpp-swimmer-sample-choice')\n\t\t\t\t.attr('role', 'button')\n\t\t\t\t.attr('tabindex', 0)\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tmenu.hide()\n\t\t\t\t\tthis.openSampleView(sample)\n\t\t\t\t})\n\t\t\t\t.on('keydown', (e: KeyboardEvent) => {\n\t\t\t\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t\tthis.openSampleView(sample)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\toption.append('span').style('margin-right', '5px').html(getMarkerIconHtml(d.shape, d.color))\n\t\t\toption.append('span').text(`${d.p.sample} (${d.entry.label}: ${fmt(d.p.time)} ${time})`)\n\t\t}\n\t\tmenu.show(event.clientX, event.clientY)\n\t}\n\n\t/** list annotations of a point's own sample (e.g. a CSF sample) in container of the open tooltip, using the\n\tsame single-sample query and value formatting as sample view. termIds comes from the event's sampleTerms in\n\tthe dataset config and sets which terms are shown and in what order. the table fills in only if the\n\ttooltip still shows this point */\n\tasync showPointSampleAnno(container, sampleId: number, termIds: string[]) {\n\t\tconst holder = container.append('div').attr('data-sampleid', sampleId).style('margin', '4px 0')\n\t\tholder.append('div').style('opacity', 0.6).text('Loading annotations ...')\n\t\tlet rows: { label: string; value: string }[]\n\t\ttry {\n\t\t\trows = await this.getPointSampleAnno(sampleId, termIds)\n\t\t} catch (e: any) {\n\t\t\trows = []\n\t\t\tconsole.warn('swimmer: cannot load sample annotations', e)\n\t\t}\n\t\tif (!holder.node()?.isConnected) return // tooltip moved on to another element\n\t\tholder.selectAll('*').remove()\n\t\tif (!rows.length) return\n\t\tconst table = holder.append('table').style('border-spacing', '0 1px').style('font-size', '0.9em')\n\t\tfor (const r of rows) {\n\t\t\tconst tr = table.append('tr')\n\t\t\ttr.append('td').style('padding-right', '8px').style('opacity', 0.7).text(r.label)\n\t\t\ttr.append('td').text(r.value)\n\t\t}\n\t}\n\n\tgetPointSampleAnno(sampleId: number, termIds: string[]) {\n\t\tconst cacheKey = `${sampleId}\\t${termIds.join('\\t')}`\n\t\tlet pr = this.pointSampleAnno.get(cacheKey)\n\t\tif (!pr) {\n\t\t\tpr = (async () => {\n\t\t\t\tconst data = await this.app.vocabApi.getSingleSampleData({ sampleId, term_ids: termIds })\n\t\t\t\tif ('error' in data) throw data.error\n\t\t\t\tconst rows: { label: string; value: string }[] = []\n\t\t\t\t// configured order; a term without a value for this sample is skipped\n\t\t\t\tfor (const id of termIds.filter(id => data[id])) {\n\t\t\t\t\tconst term = data[id].term\n\t\t\t\t\tconst value = getTermValue(term, data)\n\t\t\t\t\tif (value != null) rows.push({ label: term.name, value })\n\t\t\t\t}\n\t\t\t\treturn rows\n\t\t\t})()\n\t\t\t// a failed fetch is not cached, so the next hover retries\n\t\t\tpr.catch(() => this.pointSampleAnno.delete(cacheKey))\n\t\t\tthis.pointSampleAnno.set(cacheKey, pr)\n\t\t}\n\t\treturn pr\n\t}\n\n\t/** withRelated: open the sample with its related samples (e.g. a patient lane shows the patient and\n\tits primary/PDX/CSF samples as columns), as when the sample is picked in the sample view search box;\n\totherwise only this sample (e.g. a CSF dot). the sample view's swimmer lane uses the same time reference */\n\topenSampleView(sample: { sampleId: number; sampleName: string }, withRelated = false) {\n\t\tconst config: any = { chartType: 'sampleView', ...(withRelated ? { sample } : { samples: [sample] }) }\n\t\tif (this.timeReference) config.swimmerTimeReference = this.timeReference\n\t\tthis.app.dispatch({ type: 'plot_create', config })\n\t}\n}\n\n/** termdb/swimmer request. the route sends errors as a plain string, so they are not cached by dofetch3 */\nexport async function fetchSwimmerLanes(body: SwimmerRequest): Promise<SwimmerResponse> {\n\tconst result: SwimmerResponse | string = await dofetch3('termdb/swimmer', { body })\n\tif (typeof result == 'string') throw result\n\tif (!result?.lanes) throw 'invalid response from termdb/swimmer'\n\treturn result\n}\n\n/** default settings of the swimmer chart, reused by sample view */\nexport function getDefaultSwimmerSettings(): SwimmerSettings {\n\treturn {\n\t\trowHeight: 20,\n\t\tplotWidth: 800,\n\t\tsortBy: 'end',\n\t\tshowSampleNames: true,\n\t\tlegend: { categories: {}, events: {}, pointCategories: {} }\n\t}\n}\n\n/** widest rendered label in px at the given font size (px). getBBox() is 0 when the svg is hidden,\nwhich only shrinks the left margin; the plot is visible when render() runs */\nfunction getMaxTextWidth(svg, labels: string[], fontSize: number): number {\n\tlet max = 0\n\tfor (const label of labels) {\n\t\tconst t = svg.append('text').attr('font-size', fontSize).text(label)\n\t\tmax = Math.max(max, t.node().getBBox().width)\n\t\tt.remove()\n\t}\n\treturn max\n}\n\nexport async function getPlotConfig(opts, app) {\n\tconst settings = getDefaultSwimmerSettings()\n\tconst config: any = {\n\t\tchartType: 'swimmer',\n\t\tsettings: {\n\t\t\tcontrols: { isOpen: false },\n\t\t\tswimmer: settings\n\t\t}\n\t}\n\tcopyMerge(config, opts)\n\t// a divide-by or mark-by tw from a saved session or another chart is raw until filled here\n\tif (config.term0) config.term0 = await fillTermWrapper(config.term0, app.vocabApi)\n\tif (config.pointTerm) config.pointTerm = await fillTermWrapper(config.pointTerm, app.vocabApi)\n\treturn config\n}\n\nexport const swimmerInit = getCompInit(Swimmer)\n// this alias will allow abstracted dynamic imports\nexport const componentInit = swimmerInit\n"],
5
+ "mappings": "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",
6
+ "names": ["id"]
7
+ }
@@ -0,0 +1,192 @@
1
+ import {
2
+ PlotBase,
3
+ controlsInit
4
+ } from "./chunk-PEKCVKJK.js";
5
+ import "./chunk-HJ6L54YS.js";
6
+ import "./chunk-YR6EXI2K.js";
7
+ import "./chunk-CNFTQSNE.js";
8
+ import "./chunk-RIHO7ZD5.js";
9
+ import "./chunk-TVJOSRCH.js";
10
+ import "./chunk-3CIL7KH7.js";
11
+ import "./chunk-T4XPCSLP.js";
12
+ import "./chunk-4TJO2DGU.js";
13
+ import "./chunk-W5J3LTYS.js";
14
+ import "./chunk-MHWYRNGA.js";
15
+ import "./chunk-JHLF2ZC2.js";
16
+ import "./chunk-WJLRU5OF.js";
17
+ import {
18
+ getCompInit
19
+ } from "./chunk-HBNB5TRH.js";
20
+ import "./chunk-PF4DSFDR.js";
21
+ import "./chunk-4OLM3KSB.js";
22
+ import "./chunk-6XKAOSQE.js";
23
+ import "./chunk-TLT4YIG3.js";
24
+ import "./chunk-5R63Q5KH.js";
25
+ import {
26
+ select_default
27
+ } from "./chunk-I6Y4O3RR.js";
28
+ import "./chunk-Q5RDQNIT.js";
29
+ import "./chunk-HS5PO5ZQ.js";
30
+
31
+ // plots/table.js
32
+ var TdbTable = class _TdbTable extends PlotBase {
33
+ static type = "table";
34
+ constructor(opts, api) {
35
+ super(opts, api);
36
+ this.type = _TdbTable.type;
37
+ }
38
+ async init() {
39
+ const opts = this.opts;
40
+ const controls = opts.controls ? null : opts.holder.append("div");
41
+ const holder = opts.controls ? opts.holder : opts.holder.append("div");
42
+ this.dom = {
43
+ header: opts.header,
44
+ controls,
45
+ holder,
46
+ div: holder.style("margin", "10px 0px").style("display", "none"),
47
+ inputs: ["term1", "overlay"]
48
+ };
49
+ if (this.dom.header) this.dom.header.html("Crosstab");
50
+ setInteractivity(this);
51
+ setRenderers(this);
52
+ await this.setControls();
53
+ }
54
+ async setControls() {
55
+ if (this.opts.controls) {
56
+ this.opts.controls.on("downloadClick.table", this.download);
57
+ } else {
58
+ this.dom.holder.attr("class", "pp-termdb-plot-viz").style("display", "inline-block").style("min-width", "300px").style("margin-left", "50px");
59
+ this.components = {
60
+ controls: await controlsInit({
61
+ app: this.app,
62
+ id: this.id,
63
+ holder: this.dom.controls.style("display", "inline-block")
64
+ })
65
+ };
66
+ this.components.controls.on("downloadClick.table", this.download);
67
+ }
68
+ }
69
+ getState(appState, sub) {
70
+ const config = appState.plots.find((p) => p.id === this.id);
71
+ if (!config) {
72
+ throw `No plot with id='${this.id}' found. Did you set this.id before this.api = getComponentApi(this)?`;
73
+ }
74
+ return {
75
+ activeCohort: appState.activeCohort,
76
+ termfilter: appState.termfilter,
77
+ config: {
78
+ term: config.term,
79
+ term2: config.term2,
80
+ settings: {
81
+ common: config.settings.common,
82
+ table: config.settings.table
83
+ }
84
+ }
85
+ };
86
+ }
87
+ async main() {
88
+ try {
89
+ this.config = structuredClone(this.state.config);
90
+ if (!this.config.term2) {
91
+ this.dom.div.style("display", "none");
92
+ throw "term2 is required for table view";
93
+ }
94
+ const c = this.state.config;
95
+ if (this.dom.header) this.dom.header.html(c.term.term.name + " vs " + c.term2.term.name);
96
+ const reqOpts = this.getDataRequestOpts();
97
+ this.data = await this.vocabApi.getNestedChartSeriesData(reqOpts);
98
+ this.app.vocabApi.syncTermData(this.state.config, this.data);
99
+ const [columns, rows] = this.processData(this.data);
100
+ this.render(columns, rows);
101
+ } catch (e) {
102
+ throw e;
103
+ }
104
+ }
105
+ // creates an opts object for the vocabApi.getNestedChartsData()
106
+ getDataRequestOpts() {
107
+ const c = this.config;
108
+ const opts = { term: c.term, filter: this.state.termfilter.filter };
109
+ if (c.term2) opts.term2 = c.term2;
110
+ if (c.term0) opts.term0 = c.term0;
111
+ return opts;
112
+ }
113
+ processData(data) {
114
+ const t2 = this.config.term2.term;
115
+ const columns = data.refs.rows.map((key) => {
116
+ const label = t2.values && key in t2.values ? t2.values[key].label : key;
117
+ return { key, label };
118
+ });
119
+ const column_keys = data.refs.rows;
120
+ const t1 = this.config.term.term;
121
+ const rows = data.refs.cols.map((v1) => {
122
+ const series = data.charts[0].serieses.find((d) => d.seriesId == v1);
123
+ const label = t1.values && v1 in t1.values ? t1.values[v1].label : v1;
124
+ return {
125
+ label,
126
+ lst: !series ? [] : series.data.slice().sort((a, b) => column_keys.indexOf(a.dataId) - column_keys.indexOf(b.dataId)).map((d) => {
127
+ return {
128
+ label: d.dataId,
129
+ value: d.total
130
+ };
131
+ })
132
+ };
133
+ });
134
+ return [columns, rows];
135
+ }
136
+ };
137
+ function setInteractivity(self) {
138
+ self.download = () => {
139
+ if (!self.state || !self.state.isVisible) return;
140
+ const data = [];
141
+ self.dom.div.selectAll("tr").each(function() {
142
+ const series = [];
143
+ select_default(this).selectAll("th, td").each(function() {
144
+ series.push(select_default(this).text());
145
+ });
146
+ data.push(series);
147
+ });
148
+ const matrix = data.map((row) => row.join(" ")).join("\n");
149
+ const a = document.createElement("a");
150
+ document.body.appendChild(a);
151
+ a.addEventListener(
152
+ "click",
153
+ function() {
154
+ a.download = self.config.term.term.name + " table.txt";
155
+ a.href = URL.createObjectURL(new Blob([matrix], { type: "text/tab-separated-values" }));
156
+ document.body.removeChild(a);
157
+ },
158
+ false
159
+ );
160
+ a.click();
161
+ };
162
+ }
163
+ function setRenderers(self) {
164
+ self.render = function render(columns, rows) {
165
+ self.dom.div.style("display", "inline-block").selectAll("*").remove();
166
+ const table = self.dom.div.append("table").style("margin-right", "20px").style("border-spacing", "3px").style("border-collapse", "collapse").style("border", "1px solid black");
167
+ const tr = table.append("tr").style("white-space", "normal").style("background-color", "#ececec");
168
+ tr.append("td");
169
+ for (const value of columns) {
170
+ const label = value.label;
171
+ tr.append("th").text(label.length > 20 ? label.slice(0, 16) + "..." : label).attr("aria-label", label).style("border", "1px solid black").style("padding", "3px").style("text-align", "center").style("min-width", "80px").style("max-width", "150px").style("word-break", label.length > 12 ? "break-word" : "normal").style("vertical-align", "top");
172
+ }
173
+ let i = 0;
174
+ for (const t1v of rows) {
175
+ const tr2 = table.append("tr").style("background-color", i++ % 2 == 0 ? "#fff" : "#ececec");
176
+ tr2.append("th").text(t1v.label.length > 20 ? t1v.label.slice(0, 20) + "..." : t1v.label).attr("aria-label", t1v.label).style("border", "1px solid black").style("padding", "3px").style("word-break", t1v.label.length > 12 ? "break-all" : "normal");
177
+ const column_keys = columns.map((d) => d.key);
178
+ for (const t2label of column_keys) {
179
+ const td = tr2.append("td").style("border", "1px solid black").style("padding", "3px 5px").style("text-align", "center");
180
+ const v = t1v.lst.find((i2) => i2.label == t2label);
181
+ if (v) {
182
+ td.html(v.value);
183
+ }
184
+ }
185
+ }
186
+ };
187
+ }
188
+ var tableInit = getCompInit(TdbTable);
189
+ export {
190
+ tableInit
191
+ };
192
+ //# sourceMappingURL=table-EI2OIRGE.js.map
@@ -0,0 +1,29 @@
1
+ import {
2
+ SearchHandler
3
+ } from "./chunk-6BBUIRHA.js";
4
+ import "./chunk-PEKCVKJK.js";
5
+ import "./chunk-HJ6L54YS.js";
6
+ import "./chunk-YR6EXI2K.js";
7
+ import "./chunk-CNFTQSNE.js";
8
+ import "./chunk-RIHO7ZD5.js";
9
+ import "./chunk-TVJOSRCH.js";
10
+ import "./chunk-3CIL7KH7.js";
11
+ import "./chunk-T4XPCSLP.js";
12
+ import "./chunk-4TJO2DGU.js";
13
+ import "./chunk-W5J3LTYS.js";
14
+ import "./chunk-MHWYRNGA.js";
15
+ import "./chunk-JHLF2ZC2.js";
16
+ import "./chunk-WJLRU5OF.js";
17
+ import "./chunk-HBNB5TRH.js";
18
+ import "./chunk-PF4DSFDR.js";
19
+ import "./chunk-4OLM3KSB.js";
20
+ import "./chunk-6XKAOSQE.js";
21
+ import "./chunk-TLT4YIG3.js";
22
+ import "./chunk-5R63Q5KH.js";
23
+ import "./chunk-I6Y4O3RR.js";
24
+ import "./chunk-Q5RDQNIT.js";
25
+ import "./chunk-HS5PO5ZQ.js";
26
+ export {
27
+ SearchHandler
28
+ };
29
+ //# sourceMappingURL=termCollection-K3EX5P3F.js.map