@jbrowse/plugin-alignments 1.7.3 → 1.7.6

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 (67) hide show
  1. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +26 -26
  2. package/dist/AlignmentsFeatureDetail/index.js +3 -3
  3. package/dist/AlignmentsFeatureDetail/index.test.js +2 -2
  4. package/dist/AlignmentsTrack/index.js +2 -2
  5. package/dist/BamAdapter/BamAdapter.js +31 -31
  6. package/dist/BamAdapter/BamAdapter.test.js +10 -10
  7. package/dist/BamAdapter/BamSlightlyLazyFeature.js +6 -6
  8. package/dist/BamAdapter/MismatchParser.js +6 -6
  9. package/dist/BamAdapter/MismatchParser.test.js +2 -2
  10. package/dist/BamAdapter/configSchema.js +2 -2
  11. package/dist/BamAdapter/index.js +6 -6
  12. package/dist/CramAdapter/CramAdapter.js +31 -31
  13. package/dist/CramAdapter/CramAdapter.test.js +10 -10
  14. package/dist/CramAdapter/CramSlightlyLazyFeature.js +6 -6
  15. package/dist/CramAdapter/CramTestAdapters.js +18 -18
  16. package/dist/CramAdapter/configSchema.js +2 -2
  17. package/dist/CramAdapter/index.js +6 -6
  18. package/dist/HtsgetBamAdapter/HtsgetBamAdapter.js +9 -9
  19. package/dist/HtsgetBamAdapter/configSchema.js +2 -2
  20. package/dist/HtsgetBamAdapter/index.js +6 -6
  21. package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +8 -8
  22. package/dist/LinearAlignmentsDisplay/index.js +5 -5
  23. package/dist/LinearAlignmentsDisplay/models/configSchema.js +2 -2
  24. package/dist/LinearAlignmentsDisplay/models/configSchema.test.js +11 -11
  25. package/dist/LinearAlignmentsDisplay/models/model.js +15 -15
  26. package/dist/LinearPileupDisplay/components/ColorByModifications.js +18 -18
  27. package/dist/LinearPileupDisplay/components/ColorByTag.js +11 -11
  28. package/dist/LinearPileupDisplay/components/FilterByTag.js +26 -26
  29. package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js +4 -4
  30. package/dist/LinearPileupDisplay/components/SetFeatureHeight.js +12 -12
  31. package/dist/LinearPileupDisplay/components/SetMaxHeight.js +10 -10
  32. package/dist/LinearPileupDisplay/components/SortByTag.js +10 -10
  33. package/dist/LinearPileupDisplay/configSchema.js +5 -7
  34. package/dist/LinearPileupDisplay/configSchema.test.js +12 -12
  35. package/dist/LinearPileupDisplay/index.js +4 -4
  36. package/dist/LinearPileupDisplay/model.d.ts +2 -3
  37. package/dist/LinearPileupDisplay/model.js +189 -63
  38. package/dist/LinearSNPCoverageDisplay/components/Tooltip.js +10 -10
  39. package/dist/LinearSNPCoverageDisplay/index.js +4 -4
  40. package/dist/LinearSNPCoverageDisplay/models/configSchema.js +1 -1
  41. package/dist/LinearSNPCoverageDisplay/models/configSchema.test.js +7 -7
  42. package/dist/LinearSNPCoverageDisplay/models/model.d.ts +1 -1
  43. package/dist/LinearSNPCoverageDisplay/models/model.js +11 -11
  44. package/dist/NestedFrequencyTable.js +7 -7
  45. package/dist/PileupRPC/rpcMethods.js +23 -23
  46. package/dist/PileupRenderer/PileupLayoutSession.js +8 -8
  47. package/dist/PileupRenderer/PileupRenderer.d.ts +2 -3
  48. package/dist/PileupRenderer/PileupRenderer.js +40 -40
  49. package/dist/PileupRenderer/components/PileupRendering.js +13 -13
  50. package/dist/PileupRenderer/components/PileupRendering.test.js +2 -2
  51. package/dist/PileupRenderer/configSchema.js +2 -2
  52. package/dist/PileupRenderer/index.js +4 -4
  53. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js +22 -22
  54. package/dist/SNPCoverageAdapter/configSchema.js +2 -2
  55. package/dist/SNPCoverageAdapter/index.js +6 -6
  56. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js +12 -12
  57. package/dist/SNPCoverageRenderer/configSchema.js +2 -2
  58. package/dist/SNPCoverageRenderer/index.js +3 -3
  59. package/dist/index.js +10 -10
  60. package/dist/index.test.js +2 -2
  61. package/dist/shared.js +5 -5
  62. package/dist/util.d.ts +1 -1
  63. package/dist/util.js +3 -3
  64. package/package.json +4 -5
  65. package/src/LinearPileupDisplay/configSchema.ts +1 -4
  66. package/src/LinearPileupDisplay/model.ts +96 -19
  67. package/src/PileupRenderer/PileupRenderer.tsx +6 -2
package/dist/util.d.ts CHANGED
@@ -14,6 +14,6 @@ export declare const orientationTypes: {
14
14
  [key: string]: string;
15
15
  };
16
16
  };
17
- export declare function getColorWGBS(strand: number, base: string): "#f00" | "#00f" | "#888";
17
+ export declare function getColorWGBS(strand: number, base: string): "#888" | "#f00" | "#00f";
18
18
  export declare function fetchSequence(region: AugmentedRegion, adapter: BaseFeatureDataAdapter): Promise<any>;
19
19
  export declare function shouldFetchReferenceSequence(type?: string): boolean;
package/dist/util.js CHANGED
@@ -22,7 +22,7 @@ var _operators = require("rxjs/operators");
22
22
 
23
23
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
24
24
 
25
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
25
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
26
26
 
27
27
  // get tag from BAM or CRAM feature, where CRAM uses feature.get('tags') and
28
28
  // BAM does not
@@ -101,11 +101,11 @@ function fetchSequence(_x, _x2) {
101
101
 
102
102
 
103
103
  function _fetchSequence() {
104
- _fetchSequence = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(region, adapter) {
104
+ _fetchSequence = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(region, adapter) {
105
105
  var _feats$;
106
106
 
107
107
  var end, originalRefName, refName, feats;
108
- return _regenerator["default"].wrap(function _callee$(_context) {
108
+ return _regenerator.default.wrap(function _callee$(_context) {
109
109
  while (1) {
110
110
  switch (_context.prev = _context.next) {
111
111
  case 0:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbrowse/plugin-alignments",
3
- "version": "1.7.3",
3
+ "version": "1.7.6",
4
4
  "description": "JBrowse 2 alignments adapters, tracks, etc.",
5
5
  "keywords": [
6
6
  "jbrowse",
@@ -33,15 +33,14 @@
33
33
  "useSrc": "node ../../scripts/useSrc.js"
34
34
  },
35
35
  "dependencies": {
36
+ "@babel/runtime": "^7.17.9",
36
37
  "@gmod/bam": "^1.1.15",
37
38
  "@gmod/cram": "^1.6.1",
38
39
  "@material-ui/icons": "^4.9.1",
39
- "abortable-promise-cache": "^1.5.0",
40
40
  "color": "^3.1.2",
41
41
  "copy-to-clipboard": "^3.3.1",
42
42
  "fast-deep-equal": "^3.1.3",
43
- "generic-filehandle": "^2.2.2",
44
- "json-stable-stringify": "^1.0.1"
43
+ "generic-filehandle": "^2.2.2"
45
44
  },
46
45
  "peerDependencies": {
47
46
  "@jbrowse/core": "^1.0.0",
@@ -58,5 +57,5 @@
58
57
  "publishConfig": {
59
58
  "access": "public"
60
59
  },
61
- "gitHead": "09b13c85acf4ac68dd71ab23af87656c7552fdaf"
60
+ "gitHead": "dbd73f99714e395cf20877d5e05d26855857a0e3"
62
61
  }
@@ -6,8 +6,6 @@ import PluginManager from '@jbrowse/core/PluginManager'
6
6
  function PileupConfigFactory(pluginManager: PluginManager) {
7
7
  const PileupRendererConfigSchema =
8
8
  pluginManager.getRendererType('PileupRenderer').configSchema
9
- const SvgFeatureRendererConfigSchema =
10
- pluginManager.getRendererType('SvgFeatureRenderer').configSchema
11
9
 
12
10
  // modify config schema to take in a sub coverage display
13
11
  return ConfigurationSchema(
@@ -15,12 +13,11 @@ function PileupConfigFactory(pluginManager: PluginManager) {
15
13
  {
16
14
  defaultRendering: {
17
15
  type: 'stringEnum',
18
- model: types.enumeration('Rendering', ['pileup', 'svg']),
16
+ model: types.enumeration('Rendering', ['pileup']),
19
17
  defaultValue: 'pileup',
20
18
  },
21
19
  renderers: ConfigurationSchema('RenderersConfiguration', {
22
20
  PileupRenderer: PileupRendererConfigSchema,
23
- SvgFeatureRenderer: SvgFeatureRendererConfigSchema,
24
21
  }),
25
22
  renderer: '',
26
23
  maxFeatureScreenDensity: {
@@ -9,6 +9,8 @@ import {
9
9
  getSession,
10
10
  isSessionModelWithWidgets,
11
11
  getContainingView,
12
+ SimpleFeature,
13
+ Feature,
12
14
  } from '@jbrowse/core/util'
13
15
 
14
16
  import VisibilityIcon from '@material-ui/icons/Visibility'
@@ -19,7 +21,6 @@ import {
19
21
  } from '@jbrowse/plugin-linear-genome-view'
20
22
  import { cast, types, addDisposer, getEnv, Instance } from 'mobx-state-tree'
21
23
  import copy from 'copy-to-clipboard'
22
- import { Feature } from '@jbrowse/core/util/simpleFeature'
23
24
  import MenuOpenIcon from '@material-ui/icons/MenuOpen'
24
25
  import SortIcon from '@material-ui/icons/Sort'
25
26
  import PaletteIcon from '@material-ui/icons/Palette'
@@ -158,8 +159,15 @@ const stateModelFactory = (configSchema: LinearPileupDisplayConfigModel) =>
158
159
  async () => {
159
160
  try {
160
161
  const { rpcManager } = getSession(self)
161
- const { sortedBy, colorBy } = self
162
162
  const view = getContainingView(self) as LGV
163
+ const {
164
+ sortedBy,
165
+ colorBy,
166
+ parentTrack,
167
+ adapterConfig,
168
+ rendererType,
169
+ } = self
170
+ const { staticBlocks, bpPerPx } = view
163
171
 
164
172
  // continually generate the vc pairing, set and rerender if any
165
173
  // new values seen
@@ -167,44 +175,46 @@ const stateModelFactory = (configSchema: LinearPileupDisplayConfigModel) =>
167
175
  const uniqueTagSet = await getUniqueTagValues(
168
176
  self,
169
177
  colorBy,
170
- view.staticBlocks,
178
+ staticBlocks,
171
179
  )
172
180
  self.updateColorTagMap(uniqueTagSet)
173
181
  }
174
182
 
175
183
  if (colorBy?.type === 'modifications') {
176
- const uniqueModificationsSet =
184
+ const adapter = getConf(parentTrack, ['adapter'])
185
+ self.updateModificationColorMap(
177
186
  await getUniqueModificationValues(
178
187
  self,
179
- getConf(self.parentTrack, ['adapter']),
188
+ adapter,
180
189
  colorBy,
181
- view.staticBlocks,
182
- )
183
- self.updateModificationColorMap(uniqueModificationsSet)
190
+ staticBlocks,
191
+ ),
192
+ )
184
193
  }
185
194
 
186
195
  if (sortedBy) {
187
196
  const { pos, refName, assemblyName } = sortedBy
188
197
 
189
- const region = {
190
- start: pos,
191
- end: pos + 1,
192
- refName,
193
- assemblyName,
194
- }
195
-
196
198
  // render just the sorted region first
197
199
  await self.rendererType.renderInClient(rpcManager, {
198
200
  assemblyName,
199
- regions: [region],
200
- adapterConfig: self.adapterConfig,
201
- rendererType: self.rendererType.name,
201
+ regions: [
202
+ {
203
+ start: pos,
204
+ end: pos + 1,
205
+ refName,
206
+ assemblyName,
207
+ },
208
+ ],
209
+ adapterConfig: adapterConfig,
210
+ rendererType: rendererType.name,
202
211
  sessionId: getRpcSessionId(self),
212
+ layoutId: view.id,
203
213
  timeout: 1000000,
204
214
  ...self.renderProps(),
205
215
  })
206
216
  self.setReady(true)
207
- self.setCurrBpPerPx(view.bpPerPx)
217
+ self.setCurrBpPerPx(bpPerPx)
208
218
  } else {
209
219
  self.setReady(true)
210
220
  }
@@ -404,6 +414,73 @@ const stateModelFactory = (configSchema: LinearPileupDisplayConfigModel) =>
404
414
  modificationTagMap: JSON.parse(JSON.stringify(modificationTagMap)),
405
415
  showSoftClip: self.showSoftClipping,
406
416
  config: self.rendererConfig,
417
+ async onFeatureClick(_: unknown, featureId: string | undefined) {
418
+ const session = getSession(self)
419
+ const { rpcManager } = session
420
+ try {
421
+ const f = featureId || self.featureIdUnderMouse
422
+ if (!f) {
423
+ self.clearFeatureSelection()
424
+ } else {
425
+ const sessionId = getRpcSessionId(self)
426
+ const { feature } = (await rpcManager.call(
427
+ sessionId,
428
+ 'CoreGetFeatureDetails',
429
+ {
430
+ featureId: f,
431
+ sessionId,
432
+ layoutId: getContainingView(self).id,
433
+ rendererType: 'PileupRenderer',
434
+ },
435
+ )) as { feature: unknown }
436
+
437
+ if (feature) {
438
+ // @ts-ignore
439
+ self.selectFeature(new SimpleFeature(feature))
440
+ }
441
+ }
442
+ } catch (e) {
443
+ console.error(e)
444
+ session.notify(`${e}`)
445
+ }
446
+ },
447
+ onClick() {
448
+ self.clearFeatureSelection()
449
+ },
450
+ // similar to click but opens a menu with further options
451
+ async onFeatureContextMenu(
452
+ _: unknown,
453
+ featureId: string | undefined,
454
+ ) {
455
+ const session = getSession(self)
456
+ const { rpcManager } = session
457
+ try {
458
+ const f = featureId || self.featureIdUnderMouse
459
+ if (!f) {
460
+ self.clearFeatureSelection()
461
+ } else {
462
+ const sessionId = getRpcSessionId(self)
463
+ const { feature } = (await rpcManager.call(
464
+ sessionId,
465
+ 'CoreGetFeatureDetails',
466
+ {
467
+ featureId: f,
468
+ sessionId,
469
+ layoutId: getContainingView(self).id,
470
+ rendererType: 'PileupRenderer',
471
+ },
472
+ )) as { feature: unknown }
473
+
474
+ if (feature) {
475
+ // @ts-ignore
476
+ self.setContextMenuFeature(new SimpleFeature(feature))
477
+ }
478
+ }
479
+ } catch (e) {
480
+ console.error(e)
481
+ session.notify(`${e}`)
482
+ }
483
+ },
407
484
  }
408
485
  },
409
486
 
@@ -191,6 +191,7 @@ export default class PileupRenderer extends BoxRendererType {
191
191
  feature.get('start') - expansionBefore,
192
192
  feature.get('end') + expansionAfter,
193
193
  heightPx,
194
+ feature,
194
195
  )
195
196
  if (topPx === null) {
196
197
  return null
@@ -814,7 +815,10 @@ export default class PileupRenderer extends BoxRendererType {
814
815
  ctx.fillStyle = 'purple'
815
816
  const pos = leftPx + extraHorizontallyFlippedOffset
816
817
  const len = +mismatch.base || mismatch.length
817
- const insW = Math.max(minSubfeatureWidth, Math.min(1.2, 1 / bpPerPx))
818
+ const insW = Math.max(
819
+ minSubfeatureWidth / 2,
820
+ Math.min(1.2, 1 / bpPerPx),
821
+ )
818
822
  if (len < 10) {
819
823
  ctx.fillRect(pos, topPx, insW, heightPx)
820
824
  if (1 / bpPerPx >= charWidth && heightPx >= heightLim) {
@@ -1117,7 +1121,7 @@ export default class PileupRenderer extends BoxRendererType {
1117
1121
  return {
1118
1122
  ...results,
1119
1123
  ...res,
1120
- features,
1124
+ features: new Map(),
1121
1125
  layout,
1122
1126
  height,
1123
1127
  width,