@jbrowse/plugin-linear-genome-view 2.11.2 → 2.12.1

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 (63) hide show
  1. package/dist/BaseLinearDisplay/components/Block.js +3 -3
  2. package/dist/BaseLinearDisplay/components/BlockMsg.js +1 -1
  3. package/dist/BaseLinearDisplay/models/BaseLinearDisplayModel.d.ts +22 -24
  4. package/dist/BaseLinearDisplay/models/FeatureDensityMixin.d.ts +2 -2
  5. package/dist/BaseLinearDisplay/models/FeatureDensityMixin.js +1 -1
  6. package/dist/BaseLinearDisplay/models/TrackHeightMixin.js +1 -1
  7. package/dist/BaseLinearDisplay/models/autorunFeatureDensityStats.js +1 -1
  8. package/dist/BaseLinearDisplay/models/renderSvg.js +1 -2
  9. package/dist/BaseLinearDisplay/models/serverSideRenderedBlock.d.ts +4 -4
  10. package/dist/BaseLinearDisplay/models/serverSideRenderedBlock.js +1 -2
  11. package/dist/BaseLinearDisplay/models/util.js +3 -4
  12. package/dist/BasicTrack/index.js +1 -1
  13. package/dist/FeatureTrack/index.js +1 -1
  14. package/dist/LaunchLinearGenomeView/index.js +1 -1
  15. package/dist/LinearBareDisplay/configSchema.js +1 -2
  16. package/dist/LinearBareDisplay/index.js +1 -1
  17. package/dist/LinearBareDisplay/model.d.ts +26 -33
  18. package/dist/LinearBareDisplay/model.js +1 -2
  19. package/dist/LinearBasicDisplay/index.js +1 -1
  20. package/dist/LinearBasicDisplay/model.d.ts +52 -53
  21. package/dist/LinearGenomeView/components/ExportSvgDialog.js +1 -1
  22. package/dist/LinearGenomeView/components/RefNameAutocomplete/AutocompleteTextField.js +1 -1
  23. package/dist/LinearGenomeView/components/RefNameAutocomplete/EndAdornment.js +1 -1
  24. package/dist/LinearGenomeView/components/RefNameAutocomplete/HelpDialog.js +1 -1
  25. package/dist/LinearGenomeView/components/RefNameAutocomplete/util.js +3 -4
  26. package/dist/LinearGenomeView/components/RubberbandSpan.js +1 -1
  27. package/dist/LinearGenomeView/components/SearchResultsDialog.js +1 -1
  28. package/dist/LinearGenomeView/components/SearchResultsTable.js +1 -1
  29. package/dist/LinearGenomeView/components/TrackLabel.js +4 -4
  30. package/dist/LinearGenomeView/components/TrackRenderingContainer.js +10 -5
  31. package/dist/LinearGenomeView/components/hooks.d.ts +2 -2
  32. package/dist/LinearGenomeView/components/hooks.js +11 -17
  33. package/dist/LinearGenomeView/components/util.js +4 -5
  34. package/dist/LinearGenomeView/index.js +1 -1
  35. package/dist/LinearGenomeView/model.d.ts +12 -30
  36. package/dist/LinearGenomeView/model.js +4 -4
  37. package/dist/LinearGenomeView/svgcomponents/SVGBackground.js +1 -1
  38. package/dist/LinearGenomeView/svgcomponents/SVGHeader.js +1 -1
  39. package/dist/LinearGenomeView/svgcomponents/SVGLinearGenomeView.js +2 -2
  40. package/dist/LinearGenomeView/svgcomponents/SVGRegionSeparators.js +1 -1
  41. package/dist/LinearGenomeView/svgcomponents/SVGRuler.js +1 -1
  42. package/dist/LinearGenomeView/svgcomponents/SVGScalebar.js +1 -1
  43. package/dist/LinearGenomeView/svgcomponents/SVGTrackLabel.js +1 -1
  44. package/dist/LinearGenomeView/svgcomponents/SVGTracks.js +1 -1
  45. package/dist/LinearGenomeView/svgcomponents/util.js +1 -2
  46. package/dist/LinearGenomeView/util.d.ts +3 -3
  47. package/dist/LinearGenomeView/util.js +4 -5
  48. package/dist/index.d.ts +81 -2352
  49. package/dist/searchUtils.js +5 -6
  50. package/esm/BaseLinearDisplay/models/BaseLinearDisplayModel.d.ts +22 -24
  51. package/esm/BaseLinearDisplay/models/FeatureDensityMixin.d.ts +2 -2
  52. package/esm/BaseLinearDisplay/models/serverSideRenderedBlock.d.ts +4 -4
  53. package/esm/LinearBareDisplay/model.d.ts +26 -33
  54. package/esm/LinearBasicDisplay/model.d.ts +52 -53
  55. package/esm/LinearGenomeView/components/TrackLabel.js +4 -4
  56. package/esm/LinearGenomeView/components/TrackRenderingContainer.js +10 -5
  57. package/esm/LinearGenomeView/components/hooks.d.ts +2 -2
  58. package/esm/LinearGenomeView/components/hooks.js +8 -10
  59. package/esm/LinearGenomeView/model.d.ts +12 -30
  60. package/esm/LinearGenomeView/model.js +3 -3
  61. package/esm/LinearGenomeView/util.d.ts +3 -3
  62. package/esm/index.d.ts +81 -2352
  63. package/package.json +2 -4
@@ -25,10 +25,7 @@ const useStyles = makeStyles()(theme => ({
25
25
  },
26
26
  },
27
27
  trackName: {
28
- margin: '0 auto',
29
- width: '90%',
30
28
  fontSize: '0.8rem',
31
- pointerEvents: 'none',
32
29
  },
33
30
  iconButton: {
34
31
  padding: theme.spacing(1),
@@ -82,7 +79,10 @@ const TrackLabel = observer(React.forwardRef(function TrackLabel2({ track, class
82
79
  React.createElement(TrackLabelDragHandle, { track: track, trackId: trackId, view: view }),
83
80
  React.createElement(IconButton, { onClick: () => view.hideTrack(trackId), className: classes.iconButton, title: "close this track" },
84
81
  React.createElement(CloseIcon, { fontSize: "small" })),
85
- React.createElement(Typography, { variant: "body1", component: "span", className: classes.trackName },
82
+ React.createElement(Typography, { variant: "body1", component: "span", className: classes.trackName, onMouseDown: event => {
83
+ // avoid becoming a click-and-drag action on the lgv
84
+ event.stopPropagation();
85
+ } },
86
86
  React.createElement(SanitizedHTML, { html: [trackName, minimized ? '(minimized)' : '']
87
87
  .filter(f => !!f)
88
88
  .join(' ') })),
@@ -26,19 +26,24 @@ const TrackRenderingContainer = observer(function ({ model, track, onDragEnter,
26
26
  const { classes } = useStyles();
27
27
  const display = track.displays[0];
28
28
  const { height, RenderingComponent, DisplayBlurb } = display;
29
+ const { trackRefs, id, scaleFactor } = model;
29
30
  const trackId = getConf(track, 'trackId');
30
31
  const ref = useRef(null);
31
32
  const minimized = track.minimized;
32
33
  useEffect(() => {
33
34
  if (ref.current) {
34
- model.trackRefs[trackId] = ref.current;
35
+ trackRefs[trackId] = ref.current;
35
36
  }
36
37
  return () => {
37
- delete model.trackRefs[trackId];
38
+ delete trackRefs[trackId];
38
39
  };
39
- }, [model.trackRefs, trackId]);
40
- return (React.createElement("div", { className: classes.trackRenderingContainer, style: { height: minimized ? 20 : height }, onScroll: evt => display.setScrollTop(evt.currentTarget.scrollTop), onDragEnter: onDragEnter, "data-testid": `trackRenderingContainer-${model.id}-${trackId}` }, !minimized ? (React.createElement(React.Fragment, null,
41
- React.createElement("div", { ref: ref, className: classes.renderingComponentContainer, style: { transform: `scaleX(${model.scaleFactor})` } },
40
+ }, [trackRefs, trackId]);
41
+ return (React.createElement("div", { className: classes.trackRenderingContainer, style: {
42
+ height: minimized ? 20 : height,
43
+ }, onScroll: evt => display.setScrollTop(evt.currentTarget.scrollTop), onDragEnter: onDragEnter, "data-testid": `trackRenderingContainer-${id}-${trackId}` }, !minimized ? (React.createElement(React.Fragment, null,
44
+ React.createElement("div", { ref: ref, className: classes.renderingComponentContainer, style: {
45
+ transform: scaleFactor !== 1 ? `scaleX(${scaleFactor})` : undefined,
46
+ } },
42
47
  React.createElement(Suspense, { fallback: React.createElement(LoadingEllipses, null) },
43
48
  React.createElement(RenderingComponent, { model: display, onHorizontalScroll: model.horizontalScroll }))),
44
49
  DisplayBlurb ? (React.createElement("div", { style: {
@@ -42,7 +42,7 @@ export declare function useRangeSelect(ref: React.RefObject<HTMLDivElement>, mod
42
42
  offset: number;
43
43
  start: number;
44
44
  end: number;
45
- reversed: boolean;
45
+ reversed?: boolean;
46
46
  };
47
47
  rightBpOffset: {
48
48
  coord: number;
@@ -53,7 +53,7 @@ export declare function useRangeSelect(ref: React.RefObject<HTMLDivElement>, mod
53
53
  offset: number;
54
54
  start: number;
55
55
  end: number;
56
- reversed: boolean;
56
+ reversed?: boolean;
57
57
  };
58
58
  anchorPosition: AnchorPosition | undefined;
59
59
  numOfBpSelected: number;
@@ -1,5 +1,4 @@
1
1
  import { useRef, useEffect, useState } from 'react';
2
- import normalizeWheel from 'normalize-wheel';
3
2
  import { getRelativeX } from './util';
4
3
  export function useSideScroll(model) {
5
4
  const [mouseDragging, setMouseDragging] = useState(false);
@@ -206,11 +205,10 @@ export function useWheelScroll(ref, model) {
206
205
  const curr = ref.current;
207
206
  // if ctrl is held down, zoom in with y-scroll
208
207
  // else scroll horizontally with x-scroll
209
- function onWheel(origEvent) {
210
- const event = normalizeWheel(origEvent);
211
- if (origEvent.ctrlKey === true) {
212
- origEvent.preventDefault();
213
- delta.current += event.pixelY / 500;
208
+ function onWheel(event) {
209
+ if (event.ctrlKey === true) {
210
+ event.preventDefault();
211
+ delta.current += event.deltaY / 500;
214
212
  model.setScaleFactor(delta.current < 0 ? 1 - delta.current : 1 / (1 + delta.current));
215
213
  if (timeout.current) {
216
214
  clearTimeout(timeout.current);
@@ -219,7 +217,7 @@ export function useWheelScroll(ref, model) {
219
217
  model.setScaleFactor(1);
220
218
  model.zoomTo(delta.current > 0
221
219
  ? model.bpPerPx * (1 + delta.current)
222
- : model.bpPerPx / (1 - delta.current), origEvent.clientX - ((curr === null || curr === void 0 ? void 0 : curr.getBoundingClientRect().left) || 0));
220
+ : model.bpPerPx / (1 - delta.current), event.clientX - ((curr === null || curr === void 0 ? void 0 : curr.getBoundingClientRect().left) || 0));
223
221
  delta.current = 0;
224
222
  }, 300);
225
223
  }
@@ -227,10 +225,10 @@ export function useWheelScroll(ref, model) {
227
225
  // this is needed to stop the event from triggering "back button
228
226
  // action" on MacOSX etc. but is a heuristic to avoid preventing the
229
227
  // inner-track scroll behavior
230
- if (Math.abs(event.pixelX) > Math.abs(2 * event.pixelY)) {
231
- origEvent.preventDefault();
228
+ if (Math.abs(event.deltaX) > Math.abs(2 * event.deltaY)) {
229
+ event.preventDefault();
232
230
  }
233
- delta.current += event.pixelX;
231
+ delta.current += event.deltaX;
234
232
  if (!scheduled.current) {
235
233
  // use rAF to make it so multiple event handlers aren't fired per-frame
236
234
  // see https://calendar.perfplanet.com/2013/the-runtime-performance-checklist/
@@ -62,16 +62,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
62
62
  type: import("mobx-state-tree").IType<string | undefined, string, string>;
63
63
  offsetPx: import("mobx-state-tree").IType<number | undefined, number, number>;
64
64
  bpPerPx: import("mobx-state-tree").IType<number | undefined, number, number>;
65
- displayedRegions: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
66
- refName: import("mobx-state-tree").ISimpleType<string>;
67
- start: import("mobx-state-tree").ISimpleType<number>;
68
- end: import("mobx-state-tree").ISimpleType<number>;
69
- reversed: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
70
- } & {
71
- assemblyName: import("mobx-state-tree").ISimpleType<string>;
72
- }, {
73
- setRefName(newRefName: string): void;
74
- }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
65
+ displayedRegions: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IType<Region[], Region[], Region[]>, [undefined]>;
75
66
  tracks: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
76
67
  hideHeader: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
77
68
  hideHeaderOverview: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
@@ -94,15 +85,15 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
94
85
  } & {
95
86
  volatileWidth: number | undefined;
96
87
  minimumBlockWidth: number;
97
- draggingTrackId: string | undefined;
88
+ draggingTrackId: undefined | string;
98
89
  volatileError: unknown;
99
90
  afterDisplayedRegionsSetCallbacks: Function[];
100
91
  scaleFactor: number;
101
92
  trackRefs: Record<string, HTMLDivElement>;
102
93
  coarseDynamicBlocks: BaseBlock[];
103
94
  coarseTotalBp: number;
104
- leftOffset: BpOffset | undefined;
105
- rightOffset: BpOffset | undefined;
95
+ leftOffset: undefined | BpOffset;
96
+ rightOffset: undefined | BpOffset;
106
97
  } & {
107
98
  /**
108
99
  * #getter
@@ -336,7 +327,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
336
327
  /**
337
328
  * #action
338
329
  */
339
- setTrackLabels(setting: 'overlapping' | 'offset' | 'hidden'): void;
330
+ setTrackLabels(setting: "overlapping" | "offset" | "hidden"): void;
340
331
  /**
341
332
  * #action
342
333
  */
@@ -365,15 +356,15 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
365
356
  start: number;
366
357
  end: number;
367
358
  type: string;
368
- regionNumber?: number | undefined;
369
- reversed?: boolean | undefined;
359
+ regionNumber?: number;
360
+ reversed?: boolean;
370
361
  refName: string;
371
362
  assemblyName: string;
372
363
  key: string;
373
364
  offsetPx: number;
374
365
  widthPx: number;
375
- variant?: string | undefined;
376
- isLeftEndOfDisplayedRegion?: boolean | undefined;
366
+ variant?: string;
367
+ isLeftEndOfDisplayedRegion?: boolean;
377
368
  }[];
378
369
  /**
379
370
  * #action
@@ -585,7 +576,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
585
576
  offset: number;
586
577
  start: number;
587
578
  end: number;
588
- reversed: boolean;
579
+ reversed?: boolean;
589
580
  };
590
581
  /**
591
582
  * #getter
@@ -599,7 +590,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
599
590
  offset: number;
600
591
  start: number;
601
592
  end: number;
602
- reversed: boolean;
593
+ reversed?: boolean;
603
594
  } | undefined;
604
595
  } & {
605
596
  afterCreate(): void;
@@ -612,16 +603,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
612
603
  type: import("mobx-state-tree").IType<string | undefined, string, string>;
613
604
  offsetPx: import("mobx-state-tree").IType<number | undefined, number, number>;
614
605
  bpPerPx: import("mobx-state-tree").IType<number | undefined, number, number>;
615
- displayedRegions: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
616
- refName: import("mobx-state-tree").ISimpleType<string>;
617
- start: import("mobx-state-tree").ISimpleType<number>;
618
- end: import("mobx-state-tree").ISimpleType<number>;
619
- reversed: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
620
- } & {
621
- assemblyName: import("mobx-state-tree").ISimpleType<string>;
622
- }, {
623
- setRefName(newRefName: string): void;
624
- }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
606
+ displayedRegions: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IType<Region[], Region[], Region[]>, [undefined]>;
625
607
  tracks: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IAnyType>;
626
608
  hideHeader: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
627
609
  hideHeaderOverview: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
@@ -1,7 +1,7 @@
1
1
  import { lazy } from 'react';
2
2
  import { getConf } from '@jbrowse/core/configuration';
3
3
  import { BaseViewModel } from '@jbrowse/core/pluggableElementTypes/models';
4
- import { ElementId, Region as MUIRegion } from '@jbrowse/core/util/types/mst';
4
+ import { ElementId } from '@jbrowse/core/util/types/mst';
5
5
  import { assembleLocString, clamp, findLast, getContainingView, getSession, isViewContainer, isSessionModelWithWidgets, isSessionWithAddTracks, localStorageGetItem, localStorageSetItem, measureText, springAnimate, sum, } from '@jbrowse/core/util';
6
6
  import calculateDynamicBlocks from '@jbrowse/core/util/calculateDynamicBlocks';
7
7
  import calculateStaticBlocks from '@jbrowse/core/util/calculateStaticBlocks';
@@ -91,7 +91,7 @@ export function stateModelFactory(pluginManager) {
91
91
  * advised to use the entire set of chromosomes if your assembly is very
92
92
  * fragmented
93
93
  */
94
- displayedRegions: types.array(MUIRegion),
94
+ displayedRegions: types.optional(types.frozen(), []),
95
95
  /**
96
96
  * #property
97
97
  * array of currently displayed tracks state models instances
@@ -288,7 +288,7 @@ export function stateModelFactory(pluginManager) {
288
288
  * #getter
289
289
  */
290
290
  get totalBp() {
291
- return self.displayedRegions.reduce((a, b) => a + b.end - b.start, 0);
291
+ return sum(self.displayedRegions.map(r => r.end - r.start));
292
292
  },
293
293
  /**
294
294
  * #getter
@@ -23,9 +23,9 @@ export declare function makeTicks(start: number, end: number, bpPerPx: number, e
23
23
  export declare function generateLocations(regions: ParsedLocString[] | undefined, assemblyManager: AssemblyManager, assemblyName?: string): Promise<{
24
24
  assemblyName: string;
25
25
  parentRegion: import("@jbrowse/core/assemblyManager/assembly").BasicRegion;
26
- end?: number | undefined;
27
- start?: number | undefined;
28
- reversed?: boolean | undefined;
26
+ end?: number;
27
+ start?: number;
28
+ reversed?: boolean;
29
29
  refName: string;
30
30
  }[]>;
31
31
  /**