@jbrowse/plugin-alignments 2.13.1 → 2.15.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 (155) hide show
  1. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +5 -3
  2. package/dist/AlignmentsFeatureDetail/BreakendOptionDialog.js +12 -4
  3. package/dist/AlignmentsFeatureDetail/Formatter.js +6 -2
  4. package/dist/AlignmentsFeatureDetail/SuppAlignmentsLocStrings.js +4 -2
  5. package/dist/AlignmentsFeatureDetail/getSAFeatures.js +4 -4
  6. package/dist/AlignmentsFeatureDetail/launchBreakpointSplitView.js +2 -2
  7. package/dist/BamAdapter/BamAdapter.js +12 -18
  8. package/dist/BamAdapter/BamSlightlyLazyFeature.js +0 -1
  9. package/dist/CramAdapter/CramAdapter.d.ts +1 -1
  10. package/dist/CramAdapter/CramAdapter.js +7 -6
  11. package/dist/CramAdapter/CramTestAdapters.js +8 -2
  12. package/dist/GuessAlignmentsTypes/index.js +2 -2
  13. package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.d.ts +2 -2
  14. package/dist/LinearAlignmentsDisplay/models/model.d.ts +13 -20
  15. package/dist/LinearAlignmentsDisplay/models/model.js +13 -3
  16. package/dist/LinearPileupDisplay/SharedLinearPileupDisplayMixin.d.ts +9 -4
  17. package/dist/LinearPileupDisplay/SharedLinearPileupDisplayMixin.js +41 -22
  18. package/dist/LinearPileupDisplay/components/{ColorByModifications.js → ColorByModificationsDialog.js} +3 -1
  19. package/dist/LinearPileupDisplay/components/{ColorByTag.js → ColorByTagDialog.js} +4 -2
  20. package/dist/LinearPileupDisplay/components/GroupByDialog.d.ts +11 -0
  21. package/dist/LinearPileupDisplay/components/GroupByDialog.js +129 -0
  22. package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js +1 -3
  23. package/dist/LinearPileupDisplay/components/{SetFeatureHeight.js → SetFeatureHeightDialog.js} +9 -3
  24. package/{esm/LinearPileupDisplay/components/SetMaxHeight.d.ts → dist/LinearPileupDisplay/components/SetMaxHeightDialog.d.ts} +1 -1
  25. package/dist/LinearPileupDisplay/components/{SetMaxHeight.js → SetMaxHeightDialog.js} +7 -3
  26. package/dist/LinearPileupDisplay/components/{SortByTag.d.ts → SortByTagDialog.d.ts} +1 -1
  27. package/dist/LinearPileupDisplay/components/{SortByTag.js → SortByTagDialog.js} +7 -3
  28. package/dist/LinearPileupDisplay/configSchema.js +0 -1
  29. package/dist/LinearPileupDisplay/model.d.ts +58 -46
  30. package/dist/LinearPileupDisplay/model.js +69 -41
  31. package/dist/LinearReadArcsDisplay/components/ReactComponent.js +1 -0
  32. package/dist/LinearReadArcsDisplay/model.d.ts +2 -2
  33. package/dist/LinearReadArcsDisplay/model.js +37 -13
  34. package/dist/LinearReadCloudDisplay/components/ReactComponent.js +4 -1
  35. package/dist/LinearReadCloudDisplay/drawPairChains.js +3 -3
  36. package/dist/LinearReadCloudDisplay/model.d.ts +4 -8
  37. package/dist/LinearReadCloudDisplay/model.js +16 -6
  38. package/dist/LinearSNPCoverageDisplay/components/Tooltip.d.ts +1 -1
  39. package/dist/LinearSNPCoverageDisplay/components/Tooltip.js +1 -1
  40. package/dist/LinearSNPCoverageDisplay/models/model.d.ts +1 -1
  41. package/dist/LinearSNPCoverageDisplay/models/model.js +15 -5
  42. package/dist/MismatchParser/index.js +12 -10
  43. package/dist/PileupRPC/base.d.ts +1 -1
  44. package/dist/PileupRPC/methods/GetGlobalValueForTag.d.ts +1 -1
  45. package/dist/PileupRPC/methods/GetReducedFeatures.d.ts +3 -3
  46. package/dist/PileupRPC/methods/GetVisibleModifications.d.ts +1 -1
  47. package/dist/PileupRenderer/PileupLayoutSession.d.ts +1 -1
  48. package/dist/PileupRenderer/PileupLayoutSession.js +3 -2
  49. package/dist/PileupRenderer/PileupRenderer.d.ts +1 -1
  50. package/dist/PileupRenderer/PileupRenderer.js +16 -13
  51. package/dist/PileupRenderer/colorBy.js +3 -5
  52. package/dist/PileupRenderer/components/PileupRendering.d.ts +1 -1
  53. package/dist/PileupRenderer/components/PileupRendering.js +65 -60
  54. package/dist/PileupRenderer/getAlignmentShapeColor.js +24 -16
  55. package/dist/PileupRenderer/layoutFeature.js +6 -1
  56. package/dist/PileupRenderer/layoutFeatures.js +1 -7
  57. package/dist/PileupRenderer/makeImageData.d.ts +1 -1
  58. package/dist/PileupRenderer/makeImageData.js +1 -0
  59. package/dist/PileupRenderer/renderAlignmentShape.js +1 -1
  60. package/dist/PileupRenderer/renderMismatches.js +1 -1
  61. package/dist/PileupRenderer/renderSoftClipping.js +1 -1
  62. package/dist/PileupRenderer/util.js +3 -5
  63. package/dist/SNPCoverageAdapter/generateCoverageBins.js +4 -10
  64. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +2 -2
  65. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js +2 -5
  66. package/dist/index.js +3 -1
  67. package/dist/shared/BaseDisplayComponent.js +3 -1
  68. package/dist/shared/{FilterByTag.js → FilterByTagDialog.js} +16 -6
  69. package/dist/shared/color.js +2 -2
  70. package/dist/shared/index.d.ts +24 -20
  71. package/dist/shared/index.js +4 -5
  72. package/dist/shared/renderSvg.js +1 -3
  73. package/dist/util.d.ts +1 -1
  74. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +5 -3
  75. package/esm/AlignmentsFeatureDetail/BreakendOptionDialog.js +12 -4
  76. package/esm/AlignmentsFeatureDetail/Formatter.js +6 -2
  77. package/esm/AlignmentsFeatureDetail/SuppAlignmentsLocStrings.js +4 -2
  78. package/esm/AlignmentsFeatureDetail/getSAFeatures.js +4 -4
  79. package/esm/AlignmentsFeatureDetail/launchBreakpointSplitView.js +2 -2
  80. package/esm/BamAdapter/BamAdapter.js +12 -18
  81. package/esm/BamAdapter/BamSlightlyLazyFeature.js +0 -1
  82. package/esm/CramAdapter/CramAdapter.d.ts +1 -1
  83. package/esm/CramAdapter/CramAdapter.js +7 -6
  84. package/esm/CramAdapter/CramTestAdapters.js +8 -2
  85. package/esm/GuessAlignmentsTypes/index.js +2 -2
  86. package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.d.ts +2 -2
  87. package/esm/LinearAlignmentsDisplay/models/model.d.ts +13 -20
  88. package/esm/LinearAlignmentsDisplay/models/model.js +13 -3
  89. package/esm/LinearPileupDisplay/SharedLinearPileupDisplayMixin.d.ts +9 -4
  90. package/esm/LinearPileupDisplay/SharedLinearPileupDisplayMixin.js +42 -23
  91. package/esm/LinearPileupDisplay/components/{ColorByModifications.js → ColorByModificationsDialog.js} +3 -1
  92. package/esm/LinearPileupDisplay/components/{ColorByTag.js → ColorByTagDialog.js} +4 -2
  93. package/esm/LinearPileupDisplay/components/GroupByDialog.d.ts +11 -0
  94. package/esm/LinearPileupDisplay/components/GroupByDialog.js +104 -0
  95. package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js +1 -3
  96. package/esm/LinearPileupDisplay/components/{SetFeatureHeight.js → SetFeatureHeightDialog.js} +9 -3
  97. package/{dist/LinearPileupDisplay/components/SetMaxHeight.d.ts → esm/LinearPileupDisplay/components/SetMaxHeightDialog.d.ts} +1 -1
  98. package/esm/LinearPileupDisplay/components/{SetMaxHeight.js → SetMaxHeightDialog.js} +7 -3
  99. package/esm/LinearPileupDisplay/components/{SortByTag.d.ts → SortByTagDialog.d.ts} +1 -1
  100. package/esm/LinearPileupDisplay/components/{SortByTag.js → SortByTagDialog.js} +7 -3
  101. package/esm/LinearPileupDisplay/configSchema.js +0 -1
  102. package/esm/LinearPileupDisplay/model.d.ts +58 -46
  103. package/esm/LinearPileupDisplay/model.js +69 -41
  104. package/esm/LinearReadArcsDisplay/components/ReactComponent.js +1 -0
  105. package/esm/LinearReadArcsDisplay/model.d.ts +2 -2
  106. package/esm/LinearReadArcsDisplay/model.js +37 -13
  107. package/esm/LinearReadCloudDisplay/components/ReactComponent.js +4 -1
  108. package/esm/LinearReadCloudDisplay/drawPairChains.js +3 -3
  109. package/esm/LinearReadCloudDisplay/model.d.ts +4 -8
  110. package/esm/LinearReadCloudDisplay/model.js +16 -6
  111. package/esm/LinearSNPCoverageDisplay/components/Tooltip.d.ts +1 -1
  112. package/esm/LinearSNPCoverageDisplay/components/Tooltip.js +1 -1
  113. package/esm/LinearSNPCoverageDisplay/models/model.d.ts +1 -1
  114. package/esm/LinearSNPCoverageDisplay/models/model.js +15 -5
  115. package/esm/MismatchParser/index.js +12 -10
  116. package/esm/PileupRPC/base.d.ts +1 -1
  117. package/esm/PileupRPC/methods/GetGlobalValueForTag.d.ts +1 -1
  118. package/esm/PileupRPC/methods/GetReducedFeatures.d.ts +3 -3
  119. package/esm/PileupRPC/methods/GetVisibleModifications.d.ts +1 -1
  120. package/esm/PileupRenderer/PileupLayoutSession.d.ts +1 -1
  121. package/esm/PileupRenderer/PileupLayoutSession.js +3 -2
  122. package/esm/PileupRenderer/PileupRenderer.d.ts +1 -1
  123. package/esm/PileupRenderer/PileupRenderer.js +16 -13
  124. package/esm/PileupRenderer/colorBy.js +3 -5
  125. package/esm/PileupRenderer/components/PileupRendering.d.ts +1 -1
  126. package/esm/PileupRenderer/components/PileupRendering.js +65 -60
  127. package/esm/PileupRenderer/getAlignmentShapeColor.js +24 -16
  128. package/esm/PileupRenderer/layoutFeature.js +6 -1
  129. package/esm/PileupRenderer/layoutFeatures.js +1 -7
  130. package/esm/PileupRenderer/makeImageData.d.ts +1 -1
  131. package/esm/PileupRenderer/makeImageData.js +1 -0
  132. package/esm/PileupRenderer/renderAlignmentShape.js +1 -1
  133. package/esm/PileupRenderer/renderMismatches.js +1 -1
  134. package/esm/PileupRenderer/renderSoftClipping.js +1 -1
  135. package/esm/PileupRenderer/util.js +3 -5
  136. package/esm/SNPCoverageAdapter/generateCoverageBins.js +4 -10
  137. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +2 -2
  138. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js +2 -5
  139. package/esm/index.js +3 -1
  140. package/esm/shared/BaseDisplayComponent.js +3 -1
  141. package/esm/shared/{FilterByTag.js → FilterByTagDialog.js} +16 -6
  142. package/esm/shared/color.js +2 -2
  143. package/esm/shared/index.d.ts +24 -20
  144. package/esm/shared/index.js +4 -5
  145. package/esm/shared/renderSvg.js +1 -3
  146. package/esm/util.d.ts +1 -1
  147. package/package.json +6 -6
  148. /package/dist/LinearPileupDisplay/components/{ColorByModifications.d.ts → ColorByModificationsDialog.d.ts} +0 -0
  149. /package/dist/LinearPileupDisplay/components/{ColorByTag.d.ts → ColorByTagDialog.d.ts} +0 -0
  150. /package/dist/LinearPileupDisplay/components/{SetFeatureHeight.d.ts → SetFeatureHeightDialog.d.ts} +0 -0
  151. /package/dist/shared/{FilterByTag.d.ts → FilterByTagDialog.d.ts} +0 -0
  152. /package/esm/LinearPileupDisplay/components/{ColorByModifications.d.ts → ColorByModificationsDialog.d.ts} +0 -0
  153. /package/esm/LinearPileupDisplay/components/{ColorByTag.d.ts → ColorByTagDialog.d.ts} +0 -0
  154. /package/esm/LinearPileupDisplay/components/{SetFeatureHeight.d.ts → SetFeatureHeightDialog.d.ts} +0 -0
  155. /package/esm/shared/{FilterByTag.d.ts → FilterByTagDialog.d.ts} +0 -0
@@ -19,13 +19,15 @@ const Formatter_1 = __importDefault(require("./Formatter"));
19
19
  const omit = ['clipPos', 'flags'];
20
20
  const AlignmentsFeatureDetails = (0, mobx_react_1.observer)(function (props) {
21
21
  const { model } = props;
22
- const feat = (0, clone_1.default)(model.featureData);
22
+ const { featureData } = model;
23
+ const feat = (0, clone_1.default)(featureData);
23
24
  const SA = (0, util_1.getTag)('SA', feat);
25
+ const { flags } = feat;
24
26
  return (react_1.default.createElement(material_1.Paper, { "data-testid": "alignment-side-drawer" },
25
27
  react_1.default.createElement(BaseFeatureDetail_1.FeatureDetails, { ...props, omit: omit,
26
28
  // @ts-expect-error
27
29
  descriptions: { ...tagInfo_1.tags, tags: tagInfo_1.tags }, feature: feat, formatter: (value, key) => key === 'next_segment_position' ? (react_1.default.createElement(PairLink_1.default, { model: model, locString: value })) : (react_1.default.createElement(Formatter_1.default, { value: value })) }),
28
- SA ? react_1.default.createElement(SuppAlignments_1.default, { model: model, tag: SA, feature: feat }) : null,
29
- feat.flags !== undefined ? react_1.default.createElement(Flags_1.default, { feature: feat, ...props }) : null));
30
+ SA !== undefined ? (react_1.default.createElement(SuppAlignments_1.default, { model: model, tag: SA, feature: feat })) : null,
31
+ flags !== undefined ? react_1.default.createElement(Flags_1.default, { feature: feat, ...props }) : null));
30
32
  });
31
33
  exports.default = AlignmentsFeatureDetails;
@@ -51,15 +51,21 @@ const BreakendOptionDialog = (0, mobx_react_1.observer)(function ({ model, handl
51
51
  const [mirror, setMirror] = (0, react_1.useState)(true);
52
52
  return (react_1.default.createElement(ui_1.Dialog, { open: true, onClose: handleClose, title: "Breakpoint split view options" },
53
53
  react_1.default.createElement(material_1.DialogContent, null,
54
- react_1.default.createElement(Checkbox2, { checked: copyTracks, onChange: event => setCopyTracks(event.target.checked), label: "Copy tracks into the new view" }),
55
- react_1.default.createElement(Checkbox2, { checked: mirror, onChange: event => setMirror(event.target.checked), label: "Mirror tracks vertically in vertically stacked view" })),
54
+ react_1.default.createElement(Checkbox2, { checked: copyTracks, onChange: event => {
55
+ setCopyTracks(event.target.checked);
56
+ }, label: "Copy tracks into the new view" }),
57
+ react_1.default.createElement(Checkbox2, { checked: mirror, onChange: event => {
58
+ setMirror(event.target.checked);
59
+ }, label: "Mirror tracks vertically in vertically stacked view" })),
56
60
  react_1.default.createElement(material_1.DialogActions, null,
57
61
  react_1.default.createElement(material_1.Button, { onClick: () => {
58
62
  const { view } = model;
59
63
  const session = (0, util_1.getSession)(model);
60
64
  try {
61
65
  const viewSnapshot = (0, launchBreakpointSplitView_1.getBreakpointSplitView)({ view, f1, f2 });
62
- const [view1, view2] = viewSnapshot.views;
66
+ const views = viewSnapshot.views;
67
+ const view1 = views[0];
68
+ const view2 = views[1];
63
69
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
64
70
  const viewTracks = (0, mobx_state_tree_1.getSnapshot)(view.tracks);
65
71
  session.addView('BreakpointSplitView', {
@@ -84,6 +90,8 @@ const BreakendOptionDialog = (0, mobx_react_1.observer)(function ({ model, handl
84
90
  }
85
91
  handleClose();
86
92
  }, variant: "contained", color: "primary", autoFocus: true }, "OK"),
87
- react_1.default.createElement(material_1.Button, { onClick: () => handleClose(), color: "secondary", variant: "contained" }, "Cancel"))));
93
+ react_1.default.createElement(material_1.Button, { onClick: () => {
94
+ handleClose();
95
+ }, color: "secondary", variant: "contained" }, "Cancel"))));
88
96
  });
89
97
  exports.default = BreakendOptionDialog;
@@ -40,8 +40,12 @@ function Formatter({ value }) {
40
40
  react_1.default.createElement("button", { type: "button", onClick: () => {
41
41
  (0, copy_to_clipboard_1.default)(display);
42
42
  setCopied(true);
43
- setTimeout(() => setCopied(false), 700);
43
+ setTimeout(() => {
44
+ setCopied(false);
45
+ }, 700);
44
46
  } }, copied ? 'Copied to clipboard' : 'Copy'),
45
- react_1.default.createElement("button", { type: "button", onClick: () => setShow(val => !val) }, show ? 'Show less' : 'Show more'),
47
+ react_1.default.createElement("button", { type: "button", onClick: () => {
48
+ setShow(val => !val);
49
+ } }, show ? 'Show less' : 'Show more'),
46
50
  react_1.default.createElement("div", null, show ? display : `${display.slice(0, 100)}...`))) : (react_1.default.createElement("div", null, display));
47
51
  }
@@ -15,7 +15,7 @@ function SuppAlignmentsLocStrings({ tag, model, }) {
15
15
  react_1.default.createElement("ul", null, tag
16
16
  .split(';')
17
17
  .filter(SA => !!SA)
18
- .map((SA, index) => {
18
+ .map((SA, idx) => {
19
19
  const [saRef, saStart, saStrand, saCigar] = SA.split(',');
20
20
  const saLength = (0, MismatchParser_1.getLengthOnRef)(saCigar);
21
21
  const extra = Math.floor(saLength / 5);
@@ -27,7 +27,9 @@ function SuppAlignmentsLocStrings({ tag, model, }) {
27
27
  const displayStart = start.toLocaleString('en-US');
28
28
  const displayEnd = end.toLocaleString('en-US');
29
29
  const displayString = `${saRef}:${displayStart}-${displayEnd} (${saStrand}) [${saLength}bp]`;
30
- return (react_1.default.createElement("li", { key: `${locString}-${index}` },
30
+ return (
31
+ /* biome-ignore lint/suspicious/noArrayIndexKey: */
32
+ react_1.default.createElement("li", { key: `${locString}-${idx}` },
31
33
  react_1.default.createElement(material_1.Link, { href: "#", onClick: async (event) => {
32
34
  event.preventDefault();
33
35
  // eslint-disable-next-line @typescript-eslint/no-floating-promises
@@ -12,9 +12,9 @@ async function getSAFeatures({ view, feature, }) {
12
12
  const SA = (0, util_2.getTag)(feature, 'SA') || '';
13
13
  const readName = feature.get('name');
14
14
  const clipPos = (0, MismatchParser_1.getClip)(cigar, 1);
15
- // get the canonical refname for the read because if the
16
- // read.get('refName') is chr1 and the actual fasta refName is 1 then no
17
- // tracks can be opened on the top panel of the linear read vs ref
15
+ // get the canonical refname for the read because if the read.get('refName')
16
+ // is chr1 and the actual fasta refName is 1 then no tracks can be opened on
17
+ // the top panel of the linear read vs ref
18
18
  const assembly = await assemblyManager.waitForAssembly(view.assemblyNames[0]);
19
19
  if (!assembly) {
20
20
  throw new Error('assembly not found');
@@ -30,7 +30,7 @@ async function getSAFeatures({ view, feature, }) {
30
30
  };
31
31
  const features = [feat, ...suppAlns];
32
32
  features.forEach((f, idx) => {
33
- f.refName = (assembly === null || assembly === void 0 ? void 0 : assembly.getCanonicalRefName(f.refName)) || f.refName;
33
+ f.refName = assembly.getCanonicalRefName(f.refName) || f.refName;
34
34
  f.syntenyId = idx;
35
35
  f.mate.syntenyId = idx;
36
36
  f.mate.uniqueId = `${f.uniqueId}_mate`;
@@ -15,7 +15,7 @@ function getBreakpointSplitView({ f1, f2, view, }) {
15
15
  const topRegion = assembly.regions.find(f => f.refName === f1.refName);
16
16
  const bottomRegion = assembly.regions.find(f => f.refName === f2.refName);
17
17
  if (!topRegion || !bottomRegion) {
18
- throw new Error(`unable to find the refName for the top or bottom of the breakpoint view`);
18
+ throw new Error('unable to find the refName for the top or bottom of the breakpoint view');
19
19
  }
20
20
  const topMarkedRegion = [{ ...topRegion }, { ...topRegion }];
21
21
  const bottomMarkedRegion = [{ ...bottomRegion }, { ...bottomRegion }];
@@ -44,6 +44,6 @@ function getBreakpointSplitView({ f1, f2, view, }) {
44
44
  offsetPx: (bottomRegion.start + e) / bpPerPx,
45
45
  },
46
46
  ],
47
- displayName: `breakend split detail`,
47
+ displayName: 'breakend split detail',
48
48
  };
49
49
  }
@@ -13,8 +13,8 @@ const rxjs_2 = require("rxjs");
13
13
  // locals
14
14
  const BamSlightlyLazyFeature_1 = __importDefault(require("./BamSlightlyLazyFeature"));
15
15
  class BamAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
16
- // derived classes may not use the same configuration so a custom
17
- // configure method allows derived classes to override this behavior
16
+ // derived classes may not use the same configuration so a custom configure
17
+ // method allows derived classes to override this behavior
18
18
  async configurePre() {
19
19
  const bamLocation = this.getConf('bamLocation');
20
20
  const location = this.getConf(['index', 'location']);
@@ -25,10 +25,7 @@ class BamAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
25
25
  bamFilehandle: (0, io_1.openLocation)(bamLocation, pm),
26
26
  csiFilehandle: csi ? (0, io_1.openLocation)(location, pm) : undefined,
27
27
  baiFilehandle: !csi ? (0, io_1.openLocation)(location, pm) : undefined,
28
- // chunkSizeLimit and fetchSizeLimit are more troublesome than
29
- // helpful, and have given overly large values on the ultra long
30
- // nanopore reads even with 500MB limits, so disabled with infinity
31
- yieldThreadTime: Infinity,
28
+ yieldThreadTime: Number.POSITIVE_INFINITY,
32
29
  });
33
30
  const adapterConfig = this.getConf('sequenceAdapter');
34
31
  if (adapterConfig && this.getSubAdapter) {
@@ -38,13 +35,11 @@ class BamAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
38
35
  sequenceAdapter: dataAdapter,
39
36
  };
40
37
  }
41
- else {
42
- return { bam };
43
- }
38
+ return { bam };
44
39
  }
45
40
  async configure() {
46
41
  if (!this.configureP) {
47
- this.configureP = this.configurePre().catch(e => {
42
+ this.configureP = this.configurePre().catch((e) => {
48
43
  this.configureP = undefined;
49
44
  throw e;
50
45
  });
@@ -79,7 +74,7 @@ class BamAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
79
74
  }
80
75
  async setup(opts) {
81
76
  if (!this.setupP) {
82
- this.setupP = this.setupPre(opts).catch(e => {
77
+ this.setupP = this.setupPre(opts).catch((e) => {
83
78
  this.setupP = undefined;
84
79
  throw e;
85
80
  });
@@ -142,10 +137,11 @@ class BamAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
142
137
  continue;
143
138
  }
144
139
  if (tagFilter) {
145
- const v = record.get(tagFilter.tag);
146
- if (!(tagFilter.value === '*'
147
- ? v !== undefined
148
- : `${v}` === tagFilter.value)) {
140
+ const readVal = record.get(tagFilter.tag);
141
+ const filterVal = tagFilter.value;
142
+ if (filterVal === '*'
143
+ ? readVal !== undefined
144
+ : `${readVal}` !== `${filterVal}`) {
149
145
  continue;
150
146
  }
151
147
  }
@@ -166,9 +162,7 @@ class BamAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
166
162
  const fetchSizeLimit = this.getConf('fetchSizeLimit');
167
163
  return { bytes, fetchSizeLimit };
168
164
  }
169
- else {
170
- return super.getMultiRegionFeatureDensityStats(regions, opts);
171
- }
165
+ return super.getMultiRegionFeatureDensityStats(regions, opts);
172
166
  }
173
167
  freeResources( /* { region } */) { }
174
168
  // depends on setup being called before the BAM constructor
@@ -62,7 +62,6 @@ class BamSlightlyLazyFeature {
62
62
  id() {
63
63
  return `${this.adapter.id}-${this.record.id()}`;
64
64
  }
65
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
66
65
  get(field) {
67
66
  const methodName = `_get_${field}`;
68
67
  // @ts-expect-error
@@ -29,7 +29,7 @@ export default class CramAdapter extends BaseFeatureDataAdapter {
29
29
  getRefNames(opts?: BaseOptions): Promise<string[]>;
30
30
  refNameToId(refName: string): number | undefined;
31
31
  refIdToName(refId: number): string | undefined;
32
- refIdToOriginalName(refId: number): string;
32
+ refIdToOriginalName(refId: number): string | undefined;
33
33
  getFeatures(region: Region & {
34
34
  originalRefName?: string;
35
35
  }, opts?: BaseOptions & {
@@ -44,7 +44,7 @@ class CramAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
44
44
  }
45
45
  async configure() {
46
46
  if (!this.configureP) {
47
- this.configureP = this.configurePre().catch(e => {
47
+ this.configureP = this.configurePre().catch((e) => {
48
48
  this.configureP = undefined;
49
49
  throw e;
50
50
  });
@@ -118,7 +118,7 @@ class CramAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
118
118
  }
119
119
  async setup(opts) {
120
120
  if (!this.setupP) {
121
- this.setupP = this.setupPre(opts).catch(e => {
121
+ this.setupP = this.setupPre(opts).catch((e) => {
122
122
  this.setupP = undefined;
123
123
  throw e;
124
124
  });
@@ -177,12 +177,13 @@ class CramAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
177
177
  continue;
178
178
  }
179
179
  if (tagFilter) {
180
- const v = tagFilter.tag === 'RG'
180
+ const readVal = tagFilter.tag === 'RG'
181
181
  ? (_a = samHeader.readGroups) === null || _a === void 0 ? void 0 : _a[record.readGroupId]
182
182
  : record.tags[tagFilter.tag];
183
- if (!(tagFilter.value === '*'
184
- ? v !== undefined
185
- : `${v}` === tagFilter.value)) {
183
+ const filterVal = tagFilter.value;
184
+ if (filterVal === '*'
185
+ ? readVal !== undefined
186
+ : `${readVal}` !== `${filterVal}`) {
186
187
  continue;
187
188
  }
188
189
  }
@@ -19,7 +19,11 @@ function parseSmallFasta(text) {
19
19
  const [id, ...descriptionLines] = defLine.split(' ');
20
20
  const description = descriptionLines.join(' ');
21
21
  const sequence = seqLines.join('').replaceAll(/\s/g, '');
22
- return { id, description, sequence };
22
+ return {
23
+ id: id,
24
+ description,
25
+ sequence,
26
+ };
23
27
  });
24
28
  }
25
29
  class FetchableSmallFasta {
@@ -71,7 +75,9 @@ class SequenceAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
71
75
  }));
72
76
  observer.complete();
73
77
  })
74
- .catch(e => observer.error(e));
78
+ .catch((e) => {
79
+ observer.error(e);
80
+ });
75
81
  return { unsubscribe: () => { } };
76
82
  });
77
83
  }
@@ -16,7 +16,7 @@ function GuessAlignmentsTypesF(pluginManager) {
16
16
  if (regexGuess.test(fileName) && !adapterHint) {
17
17
  return obj;
18
18
  }
19
- else if (adapterHint === adapterName) {
19
+ if (adapterHint === adapterName) {
20
20
  return obj;
21
21
  }
22
22
  return adapterGuesser(file, index, adapterHint);
@@ -39,7 +39,7 @@ function GuessAlignmentsTypesF(pluginManager) {
39
39
  if (regexGuess.test(fileName) && !adapterHint) {
40
40
  return obj;
41
41
  }
42
- else if (adapterHint === adapterName) {
42
+ if (adapterHint === adapterName) {
43
43
  return obj;
44
44
  }
45
45
  return adapterGuesser(file, index, adapterHint);
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
- import { AlignmentsDisplayModel } from '../models/model';
2
+ import { LinearAlignmentsDisplayModel } from '../models/model';
3
3
  declare const AlignmentsDisplay: ({ model, }: {
4
- model: AlignmentsDisplayModel;
4
+ model: LinearAlignmentsDisplayModel;
5
5
  }) => React.JSX.Element | null;
6
6
  export default AlignmentsDisplay;
@@ -4,6 +4,7 @@ import { AnyConfigurationModel, AnyConfigurationSchemaType } from '@jbrowse/core
4
4
  import PluginManager from '@jbrowse/core/PluginManager';
5
5
  import { MenuItem } from '@jbrowse/core/ui';
6
6
  import { FeatureDensityStats } from '@jbrowse/core/data_adapters/BaseAdapter';
7
+ import { IFilter } from '../../shared';
7
8
  /**
8
9
  * #stateModel LinearAlignmentsDisplay
9
10
  * extends
@@ -46,7 +47,7 @@ declare function stateModelFactory(pluginManager: PluginManager, configSchema: A
46
47
  error: unknown;
47
48
  message: string | undefined;
48
49
  }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
49
- onHorizontalScroll?: Function;
50
+ onHorizontalScroll?: () => void;
50
51
  blockState?: Record<string, any>;
51
52
  }>;
52
53
  readonly DisplayBlurb: React.FC<{
@@ -59,26 +60,14 @@ declare function stateModelFactory(pluginManager: PluginManager, configSchema: A
59
60
  error: unknown;
60
61
  message: string | undefined;
61
62
  } & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IModelType<{
62
- id: import("mobx-state-tree").IOptionalIType<import(
63
- /**
64
- * #action
65
- */
66
- "mobx-state-tree").ISimpleType<string>, [undefined]>;
67
- type: import("mobx-state-tree" /**
68
- * #getter
69
- */).ISimpleType<string>;
70
- rpcDriverName: import("mobx-state-tree" /**
71
- * #getter
72
- */).IMaybe<import("mobx-state-tree").ISimpleType<string>>;
63
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
64
+ type: import("mobx-state-tree").ISimpleType<string>;
65
+ rpcDriverName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
73
66
  }, {
74
67
  rendererTypeName: string;
75
68
  error: unknown;
76
69
  message: string | undefined;
77
- }, import("mobx-state-tree")._NotCustomized, import(
78
- /**
79
- * #getter
80
- */
81
- "mobx-state-tree")._NotCustomized>>;
70
+ }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
82
71
  }> | null;
83
72
  readonly adapterConfig: any;
84
73
  readonly parentTrack: any;
@@ -131,7 +120,7 @@ declare function stateModelFactory(pluginManager: PluginManager, configSchema: A
131
120
  */
132
121
  readonly features: any;
133
122
  /**
134
- * #getter
123
+ * #getteralignmentsdisplaymodel
135
124
  */
136
125
  readonly DisplayBlurb: any;
137
126
  /**
@@ -159,6 +148,10 @@ declare function stateModelFactory(pluginManager: PluginManager, configSchema: A
159
148
  * #action
160
149
  */
161
150
  setHeight(n: number): number;
151
+ /**
152
+ * #action
153
+ */
154
+ setFilterBy(filter: IFilter): void;
162
155
  /**
163
156
  * #action
164
157
  */
@@ -195,5 +188,5 @@ declare function stateModelFactory(pluginManager: PluginManager, configSchema: A
195
188
  lowerPanelType: import("mobx-state-tree").IType<string | undefined, string, string>;
196
189
  }>>, import("mobx-state-tree")._NotCustomized>;
197
190
  export default stateModelFactory;
198
- export type AlignmentsDisplayStateModel = ReturnType<typeof stateModelFactory>;
199
- export type AlignmentsDisplayModel = Instance<AlignmentsDisplayStateModel>;
191
+ export type LinearAlignmentsDisplayStateModel = ReturnType<typeof stateModelFactory>;
192
+ export type LinearAlignmentsDisplayModel = Instance<LinearAlignmentsDisplayStateModel>;
@@ -116,7 +116,7 @@ function stateModelFactory(pluginManager, configSchema) {
116
116
  return self.PileupDisplay.features;
117
117
  },
118
118
  /**
119
- * #getter
119
+ * #getteralignmentsdisplaymodel
120
120
  */
121
121
  get DisplayBlurb() {
122
122
  var _a;
@@ -173,6 +173,13 @@ function stateModelFactory(pluginManager, configSchema) {
173
173
  self.heightPreConfig = Math.max(n, minDisplayHeight);
174
174
  return self.heightPreConfig;
175
175
  },
176
+ /**
177
+ * #action
178
+ */
179
+ setFilterBy(filter) {
180
+ self.PileupDisplay.setFilterBy(filter);
181
+ self.SNPCoverageDisplay.setFilterBy(filter);
182
+ },
176
183
  /**
177
184
  * #action
178
185
  */
@@ -244,7 +251,9 @@ function stateModelFactory(pluginManager, configSchema) {
244
251
  type: 'radio',
245
252
  label: d.displayName,
246
253
  checked: d.name === self.PileupDisplay.type,
247
- onClick: () => self.setLowerPanelType(d.name),
254
+ onClick: () => {
255
+ self.setLowerPanelType(d.name);
256
+ },
248
257
  }));
249
258
  return [
250
259
  ...superTrackMenuItems(),
@@ -260,7 +269,7 @@ function stateModelFactory(pluginManager, configSchema) {
260
269
  },
261
270
  {
262
271
  type: 'subMenu',
263
- label: `Replace lower panel with...`,
272
+ label: 'Replace lower panel with...',
264
273
  subMenu: extra,
265
274
  },
266
275
  ];
@@ -268,6 +277,7 @@ function stateModelFactory(pluginManager, configSchema) {
268
277
  };
269
278
  })
270
279
  .preProcessSnapshot(snap => {
280
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
271
281
  if (!snap) {
272
282
  return snap;
273
283
  }
@@ -138,7 +138,7 @@ export declare function SharedLinearPileupDisplayMixin(configSchema: AnyConfigur
138
138
  readName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
139
139
  tagFilter: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IModelType<{
140
140
  tag: import("mobx-state-tree").ISimpleType<string>;
141
- value: import("mobx-state-tree").ISimpleType<string>;
141
+ value: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
142
142
  }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
143
143
  }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>, [undefined]>;
144
144
  /**
@@ -168,7 +168,7 @@ export declare function SharedLinearPileupDisplayMixin(configSchema: AnyConfigur
168
168
  error: unknown;
169
169
  message: string | undefined;
170
170
  }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
171
- onHorizontalScroll?: Function;
171
+ onHorizontalScroll?: () => void;
172
172
  blockState?: Record<string, any>;
173
173
  }>;
174
174
  readonly DisplayBlurb: import("react").FC<{
@@ -284,7 +284,7 @@ export declare function SharedLinearPileupDisplayMixin(configSchema: AnyConfigur
284
284
  /**
285
285
  * #action
286
286
  */
287
- setMaxHeight(n: number): void;
287
+ setMaxHeight(n?: number): void;
288
288
  /**
289
289
  * #action
290
290
  */
@@ -343,7 +343,11 @@ export declare function SharedLinearPileupDisplayMixin(configSchema: AnyConfigur
343
343
  setSubschema(slotName: string, data: Record<string, unknown>): Record<string, unknown> | ({
344
344
  [x: string]: any;
345
345
  } & import("mobx-state-tree/dist/internal").NonEmptyObject & any & import("mobx-state-tree").IStateTreeNode<AnyConfigurationSchemaType>);
346
- } & import("mobx-state-tree").IStateTreeNode<AnyConfigurationSchemaType>);
346
+ } & import("mobx-state-tree" /**
347
+ * #stateModel SharedLinearPileupDisplayMixin
348
+ * #category display
349
+ * extends `BaseLinearDisplay`
350
+ */).IStateTreeNode<AnyConfigurationSchemaType>);
347
351
  } & import("mobx-state-tree").IStateTreeNode<AnyConfigurationSchemaType>;
348
352
  } & {
349
353
  /**
@@ -417,6 +421,7 @@ export declare function SharedLinearPileupDisplayMixin(configSchema: AnyConfigur
417
421
  icon: import("@mui/material/OverridableComponent").OverridableComponent<import("@mui/material").SvgIconTypeMap<{}, "svg">> & {
418
422
  muiName: string;
419
423
  };
424
+ priority: number;
420
425
  onClick: () => void;
421
426
  })[];
422
427
  } & {
@@ -45,11 +45,11 @@ const LinearPileupDisplayBlurb_1 = __importDefault(require("./components/LinearP
45
45
  const shared_1 = require("../shared");
46
46
  const util_2 = require("../util");
47
47
  const color_1 = require("../shared/color");
48
- // async
49
- const FilterByTagDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../shared/FilterByTag'))));
50
- const ColorByTagDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/ColorByTag'))));
51
- const SetFeatureHeightDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/SetFeatureHeight'))));
52
- const SetMaxHeightDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/SetMaxHeight'))));
48
+ // lazies
49
+ const FilterByTagDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../shared/FilterByTagDialog'))));
50
+ const ColorByTagDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/ColorByTagDialog'))));
51
+ const SetFeatureHeightDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/SetFeatureHeightDialog'))));
52
+ const SetMaxHeightDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/SetMaxHeightDialog'))));
53
53
  // using a map because it preserves order
54
54
  const rendererTypes = new Map([
55
55
  ['pileup', 'PileupRenderer'],
@@ -182,7 +182,11 @@ function SharedLinearPileupDisplayMixin(configSchema) {
182
182
  selectFeature(feature) {
183
183
  const session = (0, util_1.getSession)(self);
184
184
  if ((0, util_1.isSessionModelWithWidgets)(session)) {
185
- const featureWidget = session.addWidget('AlignmentsFeatureWidget', 'alignmentFeature', { featureData: feature.toJSON(), view: (0, util_1.getContainingView)(self) });
185
+ const featureWidget = session.addWidget('AlignmentsFeatureWidget', 'alignmentFeature', {
186
+ featureData: feature.toJSON(),
187
+ view: (0, util_1.getContainingView)(self),
188
+ track: (0, util_1.getContainingTrack)(self),
189
+ });
186
190
  session.showWidget(featureWidget);
187
191
  }
188
192
  session.setSelection(feature);
@@ -291,18 +295,14 @@ function SharedLinearPileupDisplayMixin(configSchema) {
291
295
  icon: MenuOpen_1.default,
292
296
  onClick: () => {
293
297
  self.clearFeatureSelection();
294
- if (feat) {
295
- self.selectFeature(feat);
296
- }
298
+ self.selectFeature(feat);
297
299
  },
298
300
  },
299
301
  {
300
302
  label: 'Copy info to clipboard',
301
303
  icon: Icons_1.ContentCopy,
302
304
  onClick: () => {
303
- if (feat) {
304
- self.copyFeatureToClipboard(feat);
305
- }
305
+ self.copyFeatureToClipboard(feat);
306
306
  },
307
307
  },
308
308
  ]
@@ -395,27 +395,39 @@ function SharedLinearPileupDisplayMixin(configSchema) {
395
395
  return [
396
396
  {
397
397
  label: 'Normal',
398
- onClick: () => self.setColorScheme({ type: 'normal' }),
398
+ onClick: () => {
399
+ self.setColorScheme({ type: 'normal' });
400
+ },
399
401
  },
400
402
  {
401
403
  label: 'Mapping quality',
402
- onClick: () => self.setColorScheme({ type: 'mappingQuality' }),
404
+ onClick: () => {
405
+ self.setColorScheme({ type: 'mappingQuality' });
406
+ },
403
407
  },
404
408
  {
405
409
  label: 'Strand',
406
- onClick: () => self.setColorScheme({ type: 'strand' }),
410
+ onClick: () => {
411
+ self.setColorScheme({ type: 'strand' });
412
+ },
407
413
  },
408
414
  {
409
415
  label: 'Per-base quality',
410
- onClick: () => self.setColorScheme({ type: 'perBaseQuality' }),
416
+ onClick: () => {
417
+ self.setColorScheme({ type: 'perBaseQuality' });
418
+ },
411
419
  },
412
420
  {
413
421
  label: 'Per-base lettering',
414
- onClick: () => self.setColorScheme({ type: 'perBaseLettering' }),
422
+ onClick: () => {
423
+ self.setColorScheme({ type: 'perBaseLettering' });
424
+ },
415
425
  },
416
426
  {
417
427
  label: 'First-of-pair strand',
418
- onClick: () => self.setColorScheme({ type: 'stranded' }),
428
+ onClick: () => {
429
+ self.setColorScheme({ type: 'stranded' });
430
+ },
419
431
  },
420
432
  {
421
433
  label: 'Color by tag...',
@@ -435,8 +447,9 @@ function SharedLinearPileupDisplayMixin(configSchema) {
435
447
  return [
436
448
  ...superTrackMenuItems(),
437
449
  {
438
- label: 'Filter by',
450
+ label: 'Filter by...',
439
451
  icon: ClearAll_1.default,
452
+ priority: -1,
440
453
  onClick: () => {
441
454
  (0, util_1.getSession)(self).queueDialog(doneCallback => [
442
455
  FilterByTagDialog,
@@ -445,7 +458,8 @@ function SharedLinearPileupDisplayMixin(configSchema) {
445
458
  },
446
459
  },
447
460
  {
448
- label: 'Set feature height',
461
+ label: 'Set feature height...',
462
+ priority: -1,
449
463
  subMenu: [
450
464
  {
451
465
  label: 'Normal',
@@ -500,7 +514,11 @@ function SharedLinearPileupDisplayMixin(configSchema) {
500
514
  const { colorBy, tagsReady } = self;
501
515
  const { staticBlocks } = view;
502
516
  if ((colorBy === null || colorBy === void 0 ? void 0 : colorBy.tag) && !tagsReady) {
503
- const vals = await (0, shared_1.getUniqueTagValues)(self, colorBy, staticBlocks);
517
+ const vals = await (0, shared_1.getUniqueTagValues)({
518
+ self,
519
+ tag: colorBy.tag,
520
+ blocks: staticBlocks,
521
+ });
504
522
  self.updateColorTagMap(vals);
505
523
  }
506
524
  self.setTagsReady(true);
@@ -530,7 +548,8 @@ function SharedLinearPileupDisplayMixin(configSchema) {
530
548
  // feature.id that was returned e.g. that the user hasn't
531
549
  // moused over to a new position during the async operation
532
550
  // above
533
- if (self.featureIdUnderMouse === (feature === null || feature === void 0 ? void 0 : feature.uniqueId)) {
551
+ if (feature &&
552
+ self.featureIdUnderMouse === feature.uniqueId) {
534
553
  self.setFeatureUnderMouse(new util_1.SimpleFeature(feature));
535
554
  }
536
555
  }
@@ -34,6 +34,8 @@ const ColorByModificationsDialog = (0, mobx_react_1.observer)(function ({ model,
34
34
  model.setColorScheme({ type: 'methylation' });
35
35
  handleClose();
36
36
  } }, "Methylation"),
37
- react_1.default.createElement(material_1.Button, { variant: "contained", color: "secondary", onClick: () => handleClose() }, "Cancel")))));
37
+ react_1.default.createElement(material_1.Button, { variant: "contained", color: "secondary", onClick: () => {
38
+ handleClose();
39
+ } }, "Cancel")))));
38
40
  });
39
41
  exports.default = ColorByModificationsDialog;