@jbrowse/plugin-variants 3.2.0 → 3.4.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 (239) hide show
  1. package/dist/LinearVariantDisplay/model.d.ts +1 -1
  2. package/dist/MultiLinearVariantDisplay/components/VariantDisplayComponent.js +3 -3
  3. package/dist/MultiLinearVariantDisplay/index.js +1 -1
  4. package/dist/MultiLinearVariantDisplay/model.d.ts +40 -4
  5. package/dist/MultiLinearVariantDisplay/model.js +0 -1
  6. package/dist/MultiLinearVariantDisplay/renderSvg.js +2 -2
  7. package/dist/MultiLinearVariantMatrixDisplay/components/LinesConnectingMatrixToGenomicPosition.js +15 -5
  8. package/dist/MultiLinearVariantMatrixDisplay/components/VariantDisplayComponent.js +3 -3
  9. package/dist/MultiLinearVariantMatrixDisplay/index.js +1 -1
  10. package/dist/MultiLinearVariantMatrixDisplay/model.d.ts +40 -3
  11. package/dist/MultiLinearVariantMatrixDisplay/model.js +1 -0
  12. package/dist/MultiLinearVariantMatrixDisplay/renderSvg.js +2 -2
  13. package/dist/MultiLinearVariantMatrixRenderer/{LinearVariantMatrixRenderer.d.ts → MultiLinearVariantMatrixRenderer.d.ts} +14 -11
  14. package/dist/MultiLinearVariantMatrixRenderer/{LinearVariantMatrixRenderer.js → MultiLinearVariantMatrixRenderer.js} +3 -3
  15. package/dist/MultiLinearVariantMatrixRenderer/components/MultiLinearVariantMatrixRendering.d.ts +8 -0
  16. package/dist/MultiLinearVariantMatrixRenderer/components/MultiLinearVariantMatrixRendering.js +41 -0
  17. package/dist/MultiLinearVariantMatrixRenderer/index.js +4 -4
  18. package/dist/MultiLinearVariantMatrixRenderer/makeImageData.d.ts +3 -3
  19. package/dist/MultiLinearVariantMatrixRenderer/makeImageData.js +71 -17
  20. package/dist/MultiLinearVariantMatrixRenderer/types.d.ts +2 -4
  21. package/dist/MultiLinearVariantRenderer/MultiVariantRenderer.d.ts +34 -5
  22. package/dist/MultiLinearVariantRenderer/MultiVariantRenderer.js +13 -7
  23. package/dist/MultiLinearVariantRenderer/components/{MultiVariantRendering.d.ts → MultiLinearVariantRendering.d.ts} +10 -4
  24. package/dist/MultiLinearVariantRenderer/{MultiVariantRendering.js → components/MultiLinearVariantRendering.js} +25 -7
  25. package/dist/MultiLinearVariantRenderer/components/util.d.ts +1 -0
  26. package/dist/MultiLinearVariantRenderer/components/util.js +15 -0
  27. package/dist/MultiLinearVariantRenderer/index.js +2 -2
  28. package/dist/MultiLinearVariantRenderer/makeImageData.d.ts +9 -0
  29. package/dist/MultiLinearVariantRenderer/makeImageData.js +104 -41
  30. package/dist/MultiLinearVariantRenderer/types.d.ts +2 -0
  31. package/dist/MultiVariantBaseRenderer.d.ts +4 -4
  32. package/dist/SplitVcfTabixAdapter/SplitVcfTabixAdapter.d.ts +0 -1
  33. package/dist/SplitVcfTabixAdapter/SplitVcfTabixAdapter.js +0 -1
  34. package/dist/SplitVcfTabixAdapter/configSchema.js +4 -2
  35. package/dist/VariantFeatureWidget/AltFormatter.d.ts +4 -0
  36. package/dist/VariantFeatureWidget/AltFormatter.js +13 -0
  37. package/dist/VariantFeatureWidget/Checkbox2.js +1 -8
  38. package/dist/VariantFeatureWidget/Formatter.d.ts +3 -0
  39. package/dist/VariantFeatureWidget/Formatter.js +23 -0
  40. package/dist/VariantFeatureWidget/{VariantConsequenceDataGridWrapper.js → VariantConsequence/VariantConsequenceDataGridWrapper.js} +3 -5
  41. package/dist/VariantFeatureWidget/VariantFeatureWidget.js +16 -6
  42. package/dist/VariantFeatureWidget/VariantSampleGrid/VariantGenotypeFrequencyTable.d.ts +4 -0
  43. package/dist/VariantFeatureWidget/VariantSampleGrid/VariantGenotypeFrequencyTable.js +80 -0
  44. package/dist/VariantFeatureWidget/VariantSampleGrid/VariantSampleGrid.d.ts +3 -9
  45. package/dist/VariantFeatureWidget/VariantSampleGrid/VariantSampleGrid.js +41 -20
  46. package/dist/VariantFeatureWidget/VariantSampleGrid/types.d.ts +21 -0
  47. package/dist/VariantFeatureWidget/VariantSampleGrid/util.d.ts +1 -0
  48. package/dist/VariantFeatureWidget/VariantSampleGrid/util.js +14 -0
  49. package/dist/VariantFeatureWidget/stateModelFactory.d.ts +9 -6
  50. package/dist/VariantRPC/MultiVariantClusterGenotypeMatrix.d.ts +2 -16
  51. package/dist/VariantRPC/MultiVariantClusterGenotypeMatrix.js +4 -7
  52. package/dist/VariantRPC/MultiVariantGetGenotypeMatrix.d.ts +2 -15
  53. package/dist/VariantRPC/MultiVariantGetSimplifiedFeatures.d.ts +3 -13
  54. package/dist/VariantRPC/MultiVariantGetSimplifiedFeatures.js +14 -8
  55. package/dist/VariantRPC/getGenotypeMatrix.js +20 -7
  56. package/dist/VariantRPC/types.d.ts +23 -0
  57. package/dist/VcfAdapter/VcfAdapter.d.ts +0 -1
  58. package/dist/VcfAdapter/VcfAdapter.js +0 -1
  59. package/dist/VcfFeature/index.js +0 -1
  60. package/dist/VcfFeature/util.d.ts +2 -0
  61. package/dist/VcfFeature/util.js +123 -25
  62. package/dist/VcfTabixAdapter/VcfTabixAdapter.d.ts +0 -1
  63. package/dist/VcfTabixAdapter/VcfTabixAdapter.js +12 -8
  64. package/dist/getMultiVariantFeaturesAutorun.d.ts +2 -0
  65. package/dist/getMultiVariantFeaturesAutorun.js +9 -2
  66. package/dist/getMultiVariantSourcesAutorun.js +3 -2
  67. package/dist/shared/MultiVariantBaseModel.d.ts +41 -4
  68. package/dist/shared/MultiVariantBaseModel.js +69 -3
  69. package/dist/shared/SharedVariantMixin.d.ts +1 -1
  70. package/dist/shared/components/AddFiltersDialog.d.ts +9 -0
  71. package/dist/shared/components/AddFiltersDialog.js +61 -0
  72. package/dist/shared/components/MultiVariantBaseDisplayComponent.d.ts +5 -0
  73. package/dist/shared/components/MultiVariantBaseDisplayComponent.js +29 -0
  74. package/dist/shared/components/{ClusterDialog → MultiVariantClusterDialog}/ClusterDialog.js +2 -2
  75. package/dist/shared/components/{ClusterDialog → MultiVariantClusterDialog}/ClusterDialogAuto.js +8 -3
  76. package/dist/shared/components/{ClusterDialog → MultiVariantClusterDialog}/ClusterDialogManual.js +29 -28
  77. package/dist/shared/components/{ClusterDialog → MultiVariantClusterDialog}/types.d.ts +1 -0
  78. package/dist/shared/components/MultiVariantClusterDialog/types.js +2 -0
  79. package/{esm/shared/components/ColorLegend.d.ts → dist/shared/components/MultiVariantColorLegend.d.ts} +2 -2
  80. package/dist/shared/components/{ColorLegend.js → MultiVariantColorLegend.js} +5 -3
  81. package/dist/shared/components/MultiVariantCrosshairs.d.ts +7 -0
  82. package/dist/shared/components/MultiVariantCrosshairs.js +40 -0
  83. package/dist/shared/components/MultiVariantLegendBar.d.ts +7 -0
  84. package/dist/shared/components/{LegendBar.js → MultiVariantLegendBar.js} +2 -2
  85. package/dist/shared/components/MultiVariantTooltip.d.ts +4 -0
  86. package/dist/shared/components/MultiVariantTooltip.js +3 -2
  87. package/dist/shared/components/RectBg.js +4 -2
  88. package/dist/shared/components/SetColorDialog.js +1 -1
  89. package/dist/shared/components/SourcesDataGrid.d.ts +2 -1
  90. package/dist/shared/components/SourcesDataGrid.js +40 -47
  91. package/dist/shared/components/SourcesGrid.js +1 -1
  92. package/dist/shared/components/SourcesGridHeader.d.ts +2 -1
  93. package/dist/shared/drawAlleleCount.d.ts +2 -1
  94. package/dist/shared/drawAlleleCount.js +26 -24
  95. package/dist/shared/drawPhased.d.ts +1 -1
  96. package/dist/shared/drawPhased.js +14 -10
  97. package/dist/shared/minorAlleleFrequencyUtils.d.ts +9 -4
  98. package/dist/shared/minorAlleleFrequencyUtils.js +19 -14
  99. package/dist/shared/sourcesGridUtils.d.ts +3 -2
  100. package/esm/LinearVariantDisplay/model.d.ts +1 -1
  101. package/esm/MultiLinearVariantDisplay/components/VariantDisplayComponent.js +2 -2
  102. package/esm/MultiLinearVariantDisplay/index.js +1 -1
  103. package/esm/MultiLinearVariantDisplay/model.d.ts +40 -4
  104. package/esm/MultiLinearVariantDisplay/model.js +0 -1
  105. package/esm/MultiLinearVariantDisplay/renderSvg.js +1 -1
  106. package/esm/MultiLinearVariantMatrixDisplay/components/LinesConnectingMatrixToGenomicPosition.js +15 -8
  107. package/esm/MultiLinearVariantMatrixDisplay/components/VariantDisplayComponent.js +2 -2
  108. package/esm/MultiLinearVariantMatrixDisplay/index.js +1 -1
  109. package/esm/MultiLinearVariantMatrixDisplay/model.d.ts +40 -3
  110. package/esm/MultiLinearVariantMatrixDisplay/model.js +1 -0
  111. package/esm/MultiLinearVariantMatrixDisplay/renderSvg.js +1 -1
  112. package/esm/MultiLinearVariantMatrixRenderer/{LinearVariantMatrixRenderer.d.ts → MultiLinearVariantMatrixRenderer.d.ts} +14 -11
  113. package/esm/MultiLinearVariantMatrixRenderer/{LinearVariantMatrixRenderer.js → MultiLinearVariantMatrixRenderer.js} +3 -3
  114. package/esm/MultiLinearVariantMatrixRenderer/components/MultiLinearVariantMatrixRendering.d.ts +8 -0
  115. package/esm/MultiLinearVariantMatrixRenderer/components/MultiLinearVariantMatrixRendering.js +39 -0
  116. package/esm/MultiLinearVariantMatrixRenderer/index.js +4 -4
  117. package/esm/MultiLinearVariantMatrixRenderer/makeImageData.d.ts +3 -3
  118. package/esm/MultiLinearVariantMatrixRenderer/makeImageData.js +73 -19
  119. package/esm/MultiLinearVariantMatrixRenderer/types.d.ts +2 -4
  120. package/esm/MultiLinearVariantRenderer/MultiVariantRenderer.d.ts +34 -5
  121. package/esm/MultiLinearVariantRenderer/MultiVariantRenderer.js +13 -7
  122. package/esm/MultiLinearVariantRenderer/components/{MultiVariantRendering.d.ts → MultiLinearVariantRendering.d.ts} +10 -4
  123. package/esm/MultiLinearVariantRenderer/components/{MultiVariantRendering.js → MultiLinearVariantRendering.js} +25 -7
  124. package/esm/MultiLinearVariantRenderer/components/util.d.ts +1 -0
  125. package/esm/MultiLinearVariantRenderer/components/util.js +12 -0
  126. package/esm/MultiLinearVariantRenderer/index.js +1 -1
  127. package/esm/MultiLinearVariantRenderer/makeImageData.d.ts +9 -0
  128. package/esm/MultiLinearVariantRenderer/makeImageData.js +106 -43
  129. package/esm/MultiLinearVariantRenderer/types.d.ts +2 -0
  130. package/esm/MultiVariantBaseRenderer.d.ts +4 -4
  131. package/esm/SplitVcfTabixAdapter/SplitVcfTabixAdapter.d.ts +0 -1
  132. package/esm/SplitVcfTabixAdapter/SplitVcfTabixAdapter.js +0 -1
  133. package/esm/SplitVcfTabixAdapter/configSchema.js +4 -2
  134. package/esm/VariantFeatureWidget/AltFormatter.d.ts +4 -0
  135. package/esm/VariantFeatureWidget/AltFormatter.js +10 -0
  136. package/esm/VariantFeatureWidget/Checkbox2.js +2 -9
  137. package/esm/VariantFeatureWidget/Formatter.d.ts +3 -0
  138. package/esm/VariantFeatureWidget/Formatter.js +17 -0
  139. package/esm/VariantFeatureWidget/{VariantConsequenceDataGridWrapper.js → VariantConsequence/VariantConsequenceDataGridWrapper.js} +4 -6
  140. package/esm/VariantFeatureWidget/VariantFeatureWidget.js +16 -6
  141. package/esm/VariantFeatureWidget/VariantSampleGrid/VariantGenotypeFrequencyTable.d.ts +4 -0
  142. package/esm/VariantFeatureWidget/VariantSampleGrid/VariantGenotypeFrequencyTable.js +74 -0
  143. package/esm/VariantFeatureWidget/VariantSampleGrid/VariantSampleGrid.d.ts +3 -9
  144. package/esm/VariantFeatureWidget/VariantSampleGrid/VariantSampleGrid.js +43 -22
  145. package/esm/VariantFeatureWidget/VariantSampleGrid/types.d.ts +21 -0
  146. package/esm/VariantFeatureWidget/VariantSampleGrid/util.d.ts +1 -0
  147. package/esm/VariantFeatureWidget/VariantSampleGrid/util.js +11 -0
  148. package/esm/VariantFeatureWidget/stateModelFactory.d.ts +9 -6
  149. package/esm/VariantRPC/MultiVariantClusterGenotypeMatrix.d.ts +2 -16
  150. package/esm/VariantRPC/MultiVariantClusterGenotypeMatrix.js +4 -7
  151. package/esm/VariantRPC/MultiVariantGetGenotypeMatrix.d.ts +2 -15
  152. package/esm/VariantRPC/MultiVariantGetSimplifiedFeatures.d.ts +3 -13
  153. package/esm/VariantRPC/MultiVariantGetSimplifiedFeatures.js +14 -8
  154. package/esm/VariantRPC/getGenotypeMatrix.js +20 -7
  155. package/esm/VariantRPC/types.d.ts +23 -0
  156. package/esm/VcfAdapter/VcfAdapter.d.ts +0 -1
  157. package/esm/VcfAdapter/VcfAdapter.js +0 -1
  158. package/esm/VcfFeature/index.js +0 -1
  159. package/esm/VcfFeature/util.d.ts +2 -0
  160. package/esm/VcfFeature/util.js +121 -25
  161. package/esm/VcfTabixAdapter/VcfTabixAdapter.d.ts +0 -1
  162. package/esm/VcfTabixAdapter/VcfTabixAdapter.js +13 -9
  163. package/esm/getMultiVariantFeaturesAutorun.d.ts +2 -0
  164. package/esm/getMultiVariantFeaturesAutorun.js +9 -2
  165. package/esm/getMultiVariantSourcesAutorun.js +3 -2
  166. package/esm/shared/MultiVariantBaseModel.d.ts +41 -4
  167. package/esm/shared/MultiVariantBaseModel.js +71 -5
  168. package/esm/shared/SharedVariantMixin.d.ts +1 -1
  169. package/esm/shared/components/AddFiltersDialog.d.ts +9 -0
  170. package/esm/shared/components/AddFiltersDialog.js +59 -0
  171. package/esm/shared/components/MultiVariantBaseDisplayComponent.d.ts +5 -0
  172. package/esm/shared/components/MultiVariantBaseDisplayComponent.js +24 -0
  173. package/esm/shared/components/{ClusterDialog → MultiVariantClusterDialog}/ClusterDialog.js +2 -2
  174. package/esm/shared/components/{ClusterDialog → MultiVariantClusterDialog}/ClusterDialogAuto.js +9 -4
  175. package/esm/shared/components/{ClusterDialog → MultiVariantClusterDialog}/ClusterDialogManual.js +29 -28
  176. package/esm/shared/components/{ClusterDialog → MultiVariantClusterDialog}/types.d.ts +1 -0
  177. package/esm/shared/components/MultiVariantClusterDialog/types.js +1 -0
  178. package/{dist/shared/components/ColorLegend.d.ts → esm/shared/components/MultiVariantColorLegend.d.ts} +2 -2
  179. package/esm/shared/components/{ColorLegend.js → MultiVariantColorLegend.js} +6 -4
  180. package/esm/shared/components/MultiVariantCrosshairs.d.ts +7 -0
  181. package/esm/shared/components/MultiVariantCrosshairs.js +35 -0
  182. package/esm/shared/components/MultiVariantLegendBar.d.ts +7 -0
  183. package/esm/shared/components/{LegendBar.js → MultiVariantLegendBar.js} +1 -1
  184. package/esm/shared/components/MultiVariantTooltip.d.ts +4 -0
  185. package/esm/shared/components/MultiVariantTooltip.js +3 -2
  186. package/esm/shared/components/RectBg.js +4 -2
  187. package/esm/shared/components/SetColorDialog.js +1 -1
  188. package/esm/shared/components/SourcesDataGrid.d.ts +2 -1
  189. package/esm/shared/components/SourcesDataGrid.js +40 -47
  190. package/esm/shared/components/SourcesGrid.js +1 -1
  191. package/esm/shared/components/SourcesGridHeader.d.ts +2 -1
  192. package/esm/shared/drawAlleleCount.d.ts +2 -1
  193. package/esm/shared/drawAlleleCount.js +25 -24
  194. package/esm/shared/drawPhased.d.ts +1 -1
  195. package/esm/shared/drawPhased.js +14 -10
  196. package/esm/shared/minorAlleleFrequencyUtils.d.ts +9 -4
  197. package/esm/shared/minorAlleleFrequencyUtils.js +20 -15
  198. package/esm/shared/sourcesGridUtils.d.ts +3 -2
  199. package/package.json +12 -11
  200. package/dist/MultiLinearVariantDisplay/components/Crosshair.d.ts +0 -7
  201. package/dist/MultiLinearVariantDisplay/components/Crosshair.js +0 -35
  202. package/dist/MultiLinearVariantMatrixDisplay/components/Crosshair.d.ts +0 -7
  203. package/dist/MultiLinearVariantMatrixDisplay/components/Crosshair.js +0 -28
  204. package/dist/MultiLinearVariantMatrixRenderer/components/LinearVariantMatrixRendering.d.ts +0 -7
  205. package/dist/MultiLinearVariantMatrixRenderer/components/LinearVariantMatrixRendering.js +0 -38
  206. package/dist/MultiLinearVariantRenderer/MultiVariantRendering.d.ts +0 -22
  207. package/dist/MultiLinearVariantRenderer/components/MultiVariantRendering.js +0 -52
  208. package/dist/VariantFeatureWidget/VariantConsequencePanel.d.ts +0 -5
  209. package/dist/VariantFeatureWidget/VariantConsequencePanel.js +0 -15
  210. package/dist/VariantRPC/cluster.d.ts +0 -17
  211. package/dist/VariantRPC/cluster.js +0 -84
  212. package/dist/shared/components/LegendBar.d.ts +0 -18
  213. package/esm/MultiLinearVariantDisplay/components/Crosshair.d.ts +0 -7
  214. package/esm/MultiLinearVariantDisplay/components/Crosshair.js +0 -30
  215. package/esm/MultiLinearVariantMatrixDisplay/components/Crosshair.d.ts +0 -7
  216. package/esm/MultiLinearVariantMatrixDisplay/components/Crosshair.js +0 -23
  217. package/esm/MultiLinearVariantMatrixRenderer/components/LinearVariantMatrixRendering.d.ts +0 -7
  218. package/esm/MultiLinearVariantMatrixRenderer/components/LinearVariantMatrixRendering.js +0 -36
  219. package/esm/MultiLinearVariantRenderer/MultiVariantRendering.d.ts +0 -22
  220. package/esm/MultiLinearVariantRenderer/MultiVariantRendering.js +0 -47
  221. package/esm/VariantFeatureWidget/VariantConsequencePanel.d.ts +0 -5
  222. package/esm/VariantFeatureWidget/VariantConsequencePanel.js +0 -9
  223. package/esm/VariantRPC/cluster.d.ts +0 -17
  224. package/esm/VariantRPC/cluster.js +0 -79
  225. package/esm/shared/components/LegendBar.d.ts +0 -18
  226. /package/dist/VariantFeatureWidget/{VariantConsequenceDataGrid.d.ts → VariantConsequence/VariantConsequenceDataGrid.d.ts} +0 -0
  227. /package/dist/VariantFeatureWidget/{VariantConsequenceDataGrid.js → VariantConsequence/VariantConsequenceDataGrid.js} +0 -0
  228. /package/dist/VariantFeatureWidget/{VariantConsequenceDataGridWrapper.d.ts → VariantConsequence/VariantConsequenceDataGridWrapper.d.ts} +0 -0
  229. /package/dist/{shared/components/ClusterDialog → VariantFeatureWidget/VariantSampleGrid}/types.js +0 -0
  230. /package/dist/shared/components/{ClusterDialog → MultiVariantClusterDialog}/ClusterDialog.d.ts +0 -0
  231. /package/dist/shared/components/{ClusterDialog → MultiVariantClusterDialog}/ClusterDialogAuto.d.ts +0 -0
  232. /package/dist/shared/components/{ClusterDialog → MultiVariantClusterDialog}/ClusterDialogManual.d.ts +0 -0
  233. /package/esm/VariantFeatureWidget/{VariantConsequenceDataGrid.d.ts → VariantConsequence/VariantConsequenceDataGrid.d.ts} +0 -0
  234. /package/esm/VariantFeatureWidget/{VariantConsequenceDataGrid.js → VariantConsequence/VariantConsequenceDataGrid.js} +0 -0
  235. /package/esm/VariantFeatureWidget/{VariantConsequenceDataGridWrapper.d.ts → VariantConsequence/VariantConsequenceDataGridWrapper.d.ts} +0 -0
  236. /package/esm/{shared/components/ClusterDialog → VariantFeatureWidget/VariantSampleGrid}/types.js +0 -0
  237. /package/esm/shared/components/{ClusterDialog → MultiVariantClusterDialog}/ClusterDialog.d.ts +0 -0
  238. /package/esm/shared/components/{ClusterDialog → MultiVariantClusterDialog}/ClusterDialogAuto.d.ts +0 -0
  239. /package/esm/shared/components/{ClusterDialog → MultiVariantClusterDialog}/ClusterDialogManual.d.ts +0 -0
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useRef } from 'react';
3
+ import { PrerenderedCanvas } from '@jbrowse/core/ui';
4
+ import { observer } from 'mobx-react';
5
+ const MultiLinearVariantMatrixRendering = observer(function (props) {
6
+ const { arr, width, height, displayModel } = props;
7
+ const ref = useRef(null);
8
+ function getFeatureUnderMouse(eventClientX, eventClientY) {
9
+ var _a, _b, _c;
10
+ if (!ref.current) {
11
+ return;
12
+ }
13
+ const r = ref.current.getBoundingClientRect();
14
+ const offsetX = eventClientX - r.left;
15
+ const offsetY = eventClientY - r.top;
16
+ const dimY = arr.length;
17
+ const dimX = ((_a = arr[0]) === null || _a === void 0 ? void 0 : _a.length) || 0;
18
+ const name = (_b = displayModel.sources[Math.floor((offsetY / height) * dimX)]) === null || _b === void 0 ? void 0 : _b.name;
19
+ const genotype = (_c = arr[Math.floor((offsetX / width) * dimY)]) === null || _c === void 0 ? void 0 : _c[Math.floor((offsetY / height) * dimX)];
20
+ return genotype && name
21
+ ? {
22
+ name,
23
+ genotype,
24
+ }
25
+ : undefined;
26
+ }
27
+ return (_jsx("div", { ref: ref, onMouseMove: e => {
28
+ displayModel.setHoveredGenotype(getFeatureUnderMouse(e.clientX, e.clientY));
29
+ }, onMouseLeave: () => {
30
+ displayModel.setHoveredGenotype(undefined);
31
+ }, onMouseOut: () => {
32
+ displayModel.setHoveredGenotype(undefined);
33
+ }, style: {
34
+ overflow: 'visible',
35
+ position: 'relative',
36
+ height,
37
+ }, children: _jsx(PrerenderedCanvas, { ...props }) }));
38
+ });
39
+ export default MultiLinearVariantMatrixRendering;
@@ -1,12 +1,12 @@
1
- import LinearVariantMatrixRenderer from './LinearVariantMatrixRenderer';
2
- import PrerenderedCanvas from './components/LinearVariantMatrixRendering';
1
+ import MultiLinearVariantMatrixRenderer from './MultiLinearVariantMatrixRenderer';
2
+ import ReactComponent from './components/MultiLinearVariantMatrixRendering';
3
3
  import configSchema from './configSchema';
4
4
  export default function LinearVariantMatrixRendererF(pluginManager) {
5
5
  pluginManager.addRendererType(() => {
6
- return new LinearVariantMatrixRenderer({
6
+ return new MultiLinearVariantMatrixRenderer({
7
7
  name: 'LinearVariantMatrixRenderer',
8
8
  displayName: 'Linear variant matrix renderer',
9
- ReactComponent: PrerenderedCanvas,
9
+ ReactComponent,
10
10
  configSchema,
11
11
  pluginManager,
12
12
  });
@@ -1,14 +1,14 @@
1
- import type { RenderArgsDeserializedWithFeaturesAndLayout } from './types';
1
+ import type { RenderArgsDeserialized } from './types';
2
2
  export declare function makeImageData({ ctx, canvasWidth, canvasHeight, renderArgs, }: {
3
3
  ctx: CanvasRenderingContext2D;
4
4
  canvasWidth: number;
5
5
  canvasHeight: number;
6
- renderArgs: RenderArgsDeserializedWithFeaturesAndLayout;
6
+ renderArgs: RenderArgsDeserialized;
7
7
  }): Promise<{
8
8
  mafs: {
9
9
  feature: import("@jbrowse/core/util").Feature;
10
10
  mostFrequentAlt: string;
11
- alleleCounts: Map<string, number>;
11
+ alleleCounts: Record<string, number>;
12
12
  }[];
13
13
  arr: string[][];
14
14
  }>;
@@ -1,33 +1,33 @@
1
- import { updateStatus } from '@jbrowse/core/util';
1
+ import { forEachWithStopTokenCheck, updateStatus } from '@jbrowse/core/util';
2
2
  import { checkStopToken } from '@jbrowse/core/util/stopToken';
3
3
  import { f2 } from '../shared/constants';
4
- import { drawColorAlleleCount } from '../shared/drawAlleleCount';
4
+ import { drawColorAlleleCount, getColorAlleleCount, } from '../shared/drawAlleleCount';
5
5
  import { drawPhased } from '../shared/drawPhased';
6
6
  import { getFeaturesThatPassMinorAlleleFrequencyFilter } from '../shared/minorAlleleFrequencyUtils';
7
7
  export async function makeImageData({ ctx, canvasWidth, canvasHeight, renderArgs, }) {
8
- const { renderingMode: renderingMode, minorAlleleFrequencyFilter, sources, features, stopToken, } = renderArgs;
8
+ const { renderingMode, minorAlleleFrequencyFilter, sources, features, stopToken, lengthCutoffFilter, } = renderArgs;
9
9
  const { statusCallback = () => { } } = renderArgs;
10
10
  const h = canvasHeight / sources.length;
11
11
  checkStopToken(stopToken);
12
- const mafs = getFeaturesThatPassMinorAlleleFrequencyFilter(features.values(), minorAlleleFrequencyFilter);
12
+ const mafs = await updateStatus('Calculating stats', statusCallback, () => getFeaturesThatPassMinorAlleleFrequencyFilter({
13
+ stopToken,
14
+ features: features.values(),
15
+ minorAlleleFrequencyFilter,
16
+ lengthCutoffFilter,
17
+ }));
13
18
  checkStopToken(stopToken);
14
19
  const arr = [];
15
20
  const m = mafs.length;
16
21
  const w = canvasWidth / m;
17
22
  await updateStatus('Drawing variant matrix', statusCallback, () => {
18
- var _a, _b, _c;
19
- let start = performance.now();
20
- for (let i = 0; i < m; i++) {
21
- if (performance.now() - start > 400) {
22
- checkStopToken(stopToken);
23
- start = performance.now();
24
- }
23
+ const colorCache = {};
24
+ forEachWithStopTokenCheck(mafs, stopToken, ({ feature, mostFrequentAlt }, idx) => {
25
+ var _a, _b, _c;
25
26
  const arr2 = [];
26
- const { feature, mostFrequentAlt } = mafs[i];
27
27
  const hasPhaseSet = (_a = feature.get('FORMAT')) === null || _a === void 0 ? void 0 : _a.includes('PS');
28
28
  if (hasPhaseSet) {
29
29
  const samp = feature.get('samples');
30
- const x = (i / mafs.length) * canvasWidth;
30
+ const x = (idx / mafs.length) * canvasWidth;
31
31
  const sln = sources.length;
32
32
  for (let j = 0; j < sln; j++) {
33
33
  const y = (j / sln) * canvasHeight;
@@ -50,8 +50,35 @@ export async function makeImageData({ ctx, canvasWidth, canvasHeight, renderArgs
50
50
  }
51
51
  }
52
52
  else {
53
- const alleles = genotype.split(/[/|]/);
54
- drawColorAlleleCount(alleles, ctx, x, y, w, h, mostFrequentAlt);
53
+ let c = colorCache[genotype];
54
+ if (c === undefined) {
55
+ let alt = 0;
56
+ let uncalled = 0;
57
+ let alt2 = 0;
58
+ let ref = 0;
59
+ const alleles = genotype.split(/[/|]/);
60
+ const total = alleles.length;
61
+ for (let i = 0; i < total; i++) {
62
+ const allele = alleles[i];
63
+ if (allele === mostFrequentAlt) {
64
+ alt++;
65
+ }
66
+ else if (allele === '0') {
67
+ ref++;
68
+ }
69
+ else if (allele === '.') {
70
+ uncalled++;
71
+ }
72
+ else {
73
+ alt2++;
74
+ }
75
+ }
76
+ c = getColorAlleleCount(ref, alt, alt2, uncalled, total, true);
77
+ colorCache[genotype] = c;
78
+ }
79
+ if (c) {
80
+ drawColorAlleleCount(c, ctx, x, y, w, h);
81
+ }
55
82
  }
56
83
  }
57
84
  }
@@ -59,7 +86,7 @@ export async function makeImageData({ ctx, canvasWidth, canvasHeight, renderArgs
59
86
  }
60
87
  else {
61
88
  const samp = feature.get('genotypes');
62
- const x = (i / mafs.length) * canvasWidth;
89
+ const x = (idx / mafs.length) * canvasWidth;
63
90
  const sln = sources.length;
64
91
  for (let j = 0; j < sln; j++) {
65
92
  const y = (j / sln) * canvasHeight;
@@ -79,14 +106,41 @@ export async function makeImageData({ ctx, canvasWidth, canvasHeight, renderArgs
79
106
  }
80
107
  }
81
108
  else {
82
- const alleles = genotype.split(/[/|]/);
83
- drawColorAlleleCount(alleles, ctx, x, y, w, h, mostFrequentAlt);
109
+ let c = colorCache[genotype];
110
+ if (c === undefined) {
111
+ let alt = 0;
112
+ let uncalled = 0;
113
+ let alt2 = 0;
114
+ let ref = 0;
115
+ const alleles = genotype.split(/[/|]/);
116
+ const total = alleles.length;
117
+ for (let i = 0; i < total; i++) {
118
+ const allele = alleles[i];
119
+ if (allele === mostFrequentAlt) {
120
+ alt++;
121
+ }
122
+ else if (allele === '0') {
123
+ ref++;
124
+ }
125
+ else if (allele === '.') {
126
+ uncalled++;
127
+ }
128
+ else {
129
+ alt2++;
130
+ }
131
+ }
132
+ c = getColorAlleleCount(ref, alt, alt2, uncalled, total, true);
133
+ colorCache[genotype] = c;
134
+ }
135
+ if (c) {
136
+ drawColorAlleleCount(c, ctx, x, y, w, h);
137
+ }
84
138
  }
85
139
  }
86
140
  }
87
141
  }
88
142
  arr.push(arr2);
89
- }
143
+ });
90
144
  });
91
145
  return {
92
146
  mafs,
@@ -6,11 +6,9 @@ export interface RenderArgsDeserialized extends BoxRenderArgsDeserialized {
6
6
  minorAlleleFrequencyFilter: number;
7
7
  highResolutionScaling: number;
8
8
  height: number;
9
- renderingMode: string;
10
- }
11
- export interface RenderArgsDeserializedWithFeaturesAndLayout extends RenderArgsDeserialized {
12
- sources: Source[];
13
9
  features: Map<string, Feature>;
14
10
  renderingMode: string;
15
11
  statusCallback?: (arg: string) => void;
12
+ lengthCutoffFilter: number;
13
+ stopToken: string;
16
14
  }
@@ -8,7 +8,17 @@ export default class MultiVariantBaseRenderer extends FeatureRendererType {
8
8
  height: number;
9
9
  width: number;
10
10
  containsNoTransferables: boolean;
11
- canvasRecordedData: any;
11
+ rbush: any;
12
+ featureGenotypeMap: {
13
+ [k: string]: {
14
+ alt: any;
15
+ ref: any;
16
+ name: any;
17
+ description: any;
18
+ length: number;
19
+ };
20
+ };
21
+ canvasRecordedData: Record<string, unknown>;
12
22
  reactElement?: React.ReactElement;
13
23
  html?: string;
14
24
  } | {
@@ -16,16 +26,35 @@ export default class MultiVariantBaseRenderer extends FeatureRendererType {
16
26
  height: number;
17
27
  width: number;
18
28
  containsNoTransferables: boolean;
19
- reactElement: import("react/jsx-runtime").JSX.Element;
29
+ rbush: any;
30
+ featureGenotypeMap: {
31
+ [k: string]: {
32
+ alt: any;
33
+ ref: any;
34
+ name: any;
35
+ description: any;
36
+ length: number;
37
+ };
38
+ };
39
+ imageData: any;
40
+ reactElement?: React.ReactElement;
20
41
  html?: string;
21
42
  } | {
22
43
  features: Map<string, Feature>;
23
44
  height: number;
24
45
  width: number;
25
46
  containsNoTransferables: boolean;
26
- imageData: any;
27
- reactElement?: React.ReactElement;
47
+ rbush: any;
48
+ featureGenotypeMap: {
49
+ [k: string]: {
50
+ alt: any;
51
+ ref: any;
52
+ name: any;
53
+ description: any;
54
+ length: number;
55
+ };
56
+ };
57
+ reactElement: React.ReactElement;
28
58
  html?: string;
29
59
  }>;
30
60
  }
31
- export type { RenderArgsSerialized, RenderResults, ResultsDeserialized, ResultsSerialized, } from '@jbrowse/core/pluggableElementTypes/renderers/FeatureRendererType';
@@ -7,24 +7,30 @@ export default class MultiVariantBaseRenderer extends FeatureRendererType {
7
7
  }
8
8
  async render(renderProps) {
9
9
  const features = await this.getFeatures(renderProps);
10
- const { height, regions, bpPerPx } = renderProps;
10
+ const { height, referenceDrawingMode, regions, bpPerPx } = renderProps;
11
11
  const region = regions[0];
12
12
  const width = (region.end - region.start) / bpPerPx;
13
13
  const { makeImageData } = await import('./makeImageData');
14
- const rest = await renderToAbstractCanvas(width, height, renderProps, ctx => makeImageData(ctx, {
15
- ...renderProps,
16
- features,
17
- }));
14
+ const ret = await renderToAbstractCanvas(width, height, renderProps, ctx => {
15
+ if (referenceDrawingMode === 'skip') {
16
+ ctx.fillStyle = '#ccc';
17
+ ctx.fillRect(0, 0, width, height);
18
+ }
19
+ return makeImageData(ctx, {
20
+ ...renderProps,
21
+ features,
22
+ });
23
+ });
18
24
  const results = await super.render({
19
25
  ...renderProps,
20
- ...rest,
26
+ ...ret,
21
27
  features,
22
28
  height,
23
29
  width,
24
30
  });
25
31
  return {
26
32
  ...results,
27
- ...rest,
33
+ ...ret,
28
34
  features: new Map(),
29
35
  height,
30
36
  width,
@@ -1,7 +1,14 @@
1
- import RBush from 'rbush';
2
1
  import type { Source } from '../../shared/types';
3
2
  import type { Feature } from '@jbrowse/core/util';
4
3
  import type { Region } from '@jbrowse/core/util/types';
4
+ type SerializedRBush = any;
5
+ interface MinimizedVariantRecord {
6
+ alt: string[];
7
+ ref: string;
8
+ name: string;
9
+ description: string;
10
+ length: number;
11
+ }
5
12
  declare const MultiVariantRendering: (props: {
6
13
  regions: Region[];
7
14
  features: Map<string, Feature>;
@@ -10,10 +17,9 @@ declare const MultiVariantRendering: (props: {
10
17
  height: number;
11
18
  sources: Source[];
12
19
  scrollTop: number;
20
+ featureGenotypeMap: Record<string, MinimizedVariantRecord>;
13
21
  totalHeight: number;
14
- rbush: RBush<{
15
- genotype: string;
16
- }>;
22
+ rbush: SerializedRBush;
17
23
  displayModel: any;
18
24
  onMouseLeave?: (event: React.MouseEvent) => void;
19
25
  onMouseMove?: (event: React.MouseEvent, arg?: Feature) => void;
@@ -1,29 +1,47 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useMemo, useRef } from 'react';
3
3
  import { PrerenderedCanvas } from '@jbrowse/core/ui';
4
+ import { getBpDisplayStr } from '@jbrowse/core/util';
4
5
  import { observer } from 'mobx-react';
5
6
  import RBush from 'rbush';
7
+ import { minElt } from './util';
8
+ import { makeSimpleAltString } from '../../VcfFeature/util';
6
9
  const MultiVariantRendering = observer(function (props) {
7
- const { totalHeight, scrollTop } = props;
10
+ const { featureGenotypeMap, totalHeight, scrollTop } = props;
8
11
  const { rbush, displayModel } = props;
9
12
  const ref = useRef(null);
10
13
  const rbush2 = useMemo(() => new RBush().fromJSON(rbush), [rbush]);
11
14
  function getFeatureUnderMouse(eventClientX, eventClientY) {
12
- var _a;
13
15
  let offsetX = 0;
14
16
  let offsetY = 0;
15
17
  if (ref.current) {
16
18
  const r = ref.current.getBoundingClientRect();
17
19
  offsetX = eventClientX - r.left;
18
- offsetY = eventClientY - r.top;
20
+ offsetY = eventClientY - r.top - ((displayModel === null || displayModel === void 0 ? void 0 : displayModel.scrollTop) || 0);
19
21
  }
20
- const ret = rbush2.search({
22
+ const x = rbush2.search({
21
23
  minX: offsetX,
22
- maxX: offsetX + 3,
24
+ maxX: offsetX + 1,
23
25
  minY: offsetY,
24
- maxY: offsetY + 3,
26
+ maxY: offsetY + 1,
25
27
  });
26
- return (_a = ret[0]) === null || _a === void 0 ? void 0 : _a.genotype;
28
+ if (x.length) {
29
+ const { minX, minY, maxX, maxY, genotype, featureId, ...rest } = minElt(x, elt => elt.maxX - elt.minX);
30
+ const ret = featureGenotypeMap[featureId];
31
+ if (ret) {
32
+ const { ref, alt, name, description, length } = ret;
33
+ const alleles = makeSimpleAltString(genotype, ref, alt);
34
+ return {
35
+ ...rest,
36
+ genotype,
37
+ alleles,
38
+ featureName: name,
39
+ description: alt.length >= 3 ? 'multiple ALT alleles' : description,
40
+ length: getBpDisplayStr(length),
41
+ };
42
+ }
43
+ }
44
+ return undefined;
27
45
  }
28
46
  return (_jsx("div", { ref: ref, onMouseMove: e => {
29
47
  var _a;
@@ -0,0 +1 @@
1
+ export declare function minElt<T>(arr: Iterable<T>, cb: (arg: T) => number): T | undefined;
@@ -0,0 +1,12 @@
1
+ export function minElt(arr, cb) {
2
+ let min = Infinity;
3
+ let minElement;
4
+ for (const entry of arr) {
5
+ const val = cb(entry);
6
+ if (val < min) {
7
+ min = val;
8
+ minElement = entry;
9
+ }
10
+ }
11
+ return minElement;
12
+ }
@@ -1,5 +1,5 @@
1
1
  import MultiVariantRenderer from './MultiVariantRenderer';
2
- import ReactComponent from './components/MultiVariantRendering';
2
+ import ReactComponent from './components/MultiLinearVariantRendering';
3
3
  import configSchema from './configSchema';
4
4
  export default function MultiVariantRendererF(pluginManager) {
5
5
  pluginManager.addRendererType(() => {
@@ -1,4 +1,13 @@
1
1
  import type { MultiRenderArgsDeserialized } from './types';
2
2
  export declare function makeImageData(ctx: CanvasRenderingContext2D, props: MultiRenderArgsDeserialized): Promise<{
3
3
  rbush: any;
4
+ featureGenotypeMap: {
5
+ [k: string]: {
6
+ alt: any;
7
+ ref: any;
8
+ name: any;
9
+ description: any;
10
+ length: number;
11
+ };
12
+ };
4
13
  }>;
@@ -1,61 +1,124 @@
1
- import { featureSpanPx } from '@jbrowse/core/util';
1
+ import { featureSpanPx, forEachWithStopTokenCheck, updateStatus, } from '@jbrowse/core/util';
2
2
  import { checkStopToken } from '@jbrowse/core/util/stopToken';
3
3
  import RBush from 'rbush';
4
4
  import { f2 } from '../shared/constants';
5
- import { drawColorAlleleCount } from '../shared/drawAlleleCount';
5
+ import { drawColorAlleleCount, getColorAlleleCount, } from '../shared/drawAlleleCount';
6
6
  import { drawPhased } from '../shared/drawPhased';
7
7
  import { getFeaturesThatPassMinorAlleleFrequencyFilter } from '../shared/minorAlleleFrequencyUtils';
8
8
  export async function makeImageData(ctx, props) {
9
- const { scrollTop, minorAlleleFrequencyFilter, sources, rowHeight, features, regions, bpPerPx, renderingMode, stopToken, } = props;
9
+ const { scrollTop, minorAlleleFrequencyFilter, sources, rowHeight, features, regions, bpPerPx, renderingMode, stopToken, lengthCutoffFilter, referenceDrawingMode, } = props;
10
10
  const region = regions[0];
11
+ const { statusCallback = () => { } } = props;
11
12
  checkStopToken(stopToken);
12
- const mafs = getFeaturesThatPassMinorAlleleFrequencyFilter(features.values(), minorAlleleFrequencyFilter);
13
+ const mafs = await updateStatus('Calculating stats', statusCallback, () => getFeaturesThatPassMinorAlleleFrequencyFilter({
14
+ stopToken,
15
+ features: features.values(),
16
+ minorAlleleFrequencyFilter,
17
+ lengthCutoffFilter,
18
+ }));
13
19
  checkStopToken(stopToken);
14
20
  const rbush = new RBush();
15
- let start = performance.now();
16
- for (const { mostFrequentAlt, feature } of mafs) {
17
- if (performance.now() - start > 400) {
18
- checkStopToken(stopToken);
19
- start = performance.now();
20
- }
21
- const [leftPx, rightPx] = featureSpanPx(feature, region, bpPerPx);
22
- const w = Math.max(Math.round(rightPx - leftPx), 2);
23
- const samp = feature.get('genotypes');
24
- let y = -scrollTop;
25
- const s = sources.length;
26
- for (let j = 0; j < s; j++) {
27
- const { name, HP } = sources[j];
28
- const genotype = samp[name];
29
- const x = Math.floor(leftPx);
30
- const h = Math.max(rowHeight, 1);
31
- if (genotype) {
32
- rbush.insert({
33
- minX: x - f2,
34
- maxX: x + w + f2,
35
- minY: y - f2,
36
- maxY: y + h + f2,
37
- genotype,
38
- });
39
- const isPhased = genotype.includes('|');
40
- if (renderingMode === 'phased') {
41
- if (isPhased) {
42
- const alleles = genotype.split('|');
43
- drawPhased(alleles, ctx, x, y, w, h, HP);
44
- }
45
- else {
46
- ctx.fillStyle = 'black';
47
- ctx.fillRect(x - f2, y - f2, w + f2, h + f2);
21
+ await updateStatus('Drawing variants', statusCallback, () => {
22
+ forEachWithStopTokenCheck(mafs, stopToken, ({ mostFrequentAlt, feature }) => {
23
+ const [leftPx, rightPx] = featureSpanPx(feature, region, bpPerPx);
24
+ const flen = feature.get('end') - feature.get('start');
25
+ const w = Math.max(Math.round(rightPx - leftPx), 2);
26
+ const samp = feature.get('genotypes');
27
+ let y = -scrollTop;
28
+ const s = sources.length;
29
+ if (renderingMode === 'phased') {
30
+ for (let j = 0; j < s; j++) {
31
+ const { name, HP } = sources[j];
32
+ const genotype = samp[name];
33
+ const x = Math.floor(leftPx);
34
+ const h = Math.max(rowHeight, 1);
35
+ if (genotype) {
36
+ const isPhased = genotype.includes('|');
37
+ if (isPhased) {
38
+ const alleles = genotype.split('|');
39
+ if (drawPhased(alleles, ctx, x, y, w, h, HP, undefined, referenceDrawingMode === 'draw')) {
40
+ rbush.insert({
41
+ minX: x,
42
+ maxX: x + w,
43
+ minY: y,
44
+ maxY: y + h,
45
+ genotype,
46
+ name,
47
+ featureId: feature.id(),
48
+ });
49
+ }
50
+ }
51
+ else {
52
+ ctx.fillStyle = 'black';
53
+ ctx.fillRect(x - f2, y - f2, w + f2, h + f2);
54
+ }
48
55
  }
56
+ y += rowHeight;
49
57
  }
50
- else {
51
- const alleles = genotype.split(/[/|]/);
52
- drawColorAlleleCount(alleles, ctx, x, y, w, h, mostFrequentAlt);
58
+ }
59
+ else {
60
+ const colorCache = {};
61
+ for (let j = 0; j < s; j++) {
62
+ const { name } = sources[j];
63
+ const genotype = samp[name];
64
+ const x = Math.floor(leftPx);
65
+ const h = Math.max(rowHeight, 1);
66
+ if (genotype) {
67
+ let c = colorCache[genotype];
68
+ if (c === undefined) {
69
+ let alt = 0;
70
+ let uncalled = 0;
71
+ let alt2 = 0;
72
+ let ref = 0;
73
+ const alleles = genotype.split(/[/|]/);
74
+ const total = alleles.length;
75
+ for (let i = 0; i < total; i++) {
76
+ const allele = alleles[i];
77
+ if (allele === mostFrequentAlt) {
78
+ alt++;
79
+ }
80
+ else if (allele === '0') {
81
+ ref++;
82
+ }
83
+ else if (allele === '.') {
84
+ uncalled++;
85
+ }
86
+ else {
87
+ alt2++;
88
+ }
89
+ }
90
+ c = getColorAlleleCount(ref, alt, alt2, uncalled, total, referenceDrawingMode === 'draw');
91
+ colorCache[genotype] = c;
92
+ }
93
+ if (c) {
94
+ drawColorAlleleCount(c, ctx, x, y, w, h, feature.get('type'), feature.get('strand'), flen > 5 ? 0.75 : 1);
95
+ rbush.insert({
96
+ minX: x,
97
+ maxX: x + w,
98
+ minY: y,
99
+ maxY: y + h,
100
+ genotype,
101
+ name,
102
+ featureId: feature.id(),
103
+ });
104
+ }
105
+ }
106
+ y += rowHeight;
53
107
  }
54
108
  }
55
- y += rowHeight;
56
- }
57
- }
109
+ });
110
+ });
58
111
  return {
59
112
  rbush: rbush.toJSON(),
113
+ featureGenotypeMap: Object.fromEntries(mafs.map(({ feature }) => [
114
+ feature.id(),
115
+ {
116
+ alt: feature.get('ALT'),
117
+ ref: feature.get('REF'),
118
+ name: feature.get('name'),
119
+ description: feature.get('description'),
120
+ length: feature.get('end') - feature.get('start'),
121
+ },
122
+ ])),
60
123
  };
61
124
  }
@@ -16,4 +16,6 @@ export interface MultiRenderArgsDeserialized extends RenderArgsDeserializedWithF
16
16
  rowHeight: number;
17
17
  scrollTop: number;
18
18
  minorAlleleFrequencyFilter: number;
19
+ lengthCutoffFilter: number;
20
+ statusCallback?: (arg: string) => void;
19
21
  }