@jbrowse/plugin-linear-genome-view 2.6.2 → 2.7.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 (111) hide show
  1. package/dist/BaseLinearDisplay/components/LinearBlocks.d.ts +4 -14
  2. package/dist/BaseLinearDisplay/components/LinearBlocks.js +4 -5
  3. package/dist/BaseLinearDisplay/components/Tooltip.js +1 -1
  4. package/dist/BaseLinearDisplay/models/util.d.ts +2 -6
  5. package/dist/LinearBasicDisplay/components/SetMaxHeight.d.ts +4 -5
  6. package/dist/LinearBasicDisplay/components/SetMaxHeight.js +3 -3
  7. package/dist/LinearBasicDisplay/model.d.ts +3 -1
  8. package/dist/LinearGenomeView/components/CenterLine.d.ts +3 -4
  9. package/dist/LinearGenomeView/components/CenterLine.js +3 -3
  10. package/dist/LinearGenomeView/components/Cytobands.d.ts +6 -2
  11. package/dist/LinearGenomeView/components/Cytobands.js +37 -38
  12. package/dist/LinearGenomeView/components/GetSequenceDialog.d.ts +3 -4
  13. package/dist/LinearGenomeView/components/GetSequenceDialog.js +3 -3
  14. package/dist/LinearGenomeView/components/Gridlines.d.ts +3 -4
  15. package/dist/LinearGenomeView/components/Gridlines.js +21 -18
  16. package/dist/LinearGenomeView/components/ImportForm.d.ts +2 -2
  17. package/dist/LinearGenomeView/components/ImportForm.js +2 -1
  18. package/dist/LinearGenomeView/components/LinearGenomeView.js +19 -1
  19. package/dist/LinearGenomeView/components/MiniControls.js +13 -5
  20. package/dist/LinearGenomeView/components/OverviewRubberband.d.ts +2 -2
  21. package/dist/LinearGenomeView/components/OverviewRubberband.js +2 -1
  22. package/dist/LinearGenomeView/components/OverviewScalebar.d.ts +2 -2
  23. package/dist/LinearGenomeView/components/OverviewScalebar.js +41 -13
  24. package/dist/LinearGenomeView/components/RefNameAutocomplete/index.d.ts +2 -2
  25. package/dist/LinearGenomeView/components/RefNameAutocomplete/index.js +2 -1
  26. package/dist/LinearGenomeView/components/RefNameAutocomplete/util.d.ts +1 -3
  27. package/dist/LinearGenomeView/components/Rubberband.d.ts +4 -5
  28. package/dist/LinearGenomeView/components/Rubberband.js +3 -3
  29. package/dist/LinearGenomeView/components/Scalebar.d.ts +2 -2
  30. package/dist/LinearGenomeView/components/Scalebar.js +29 -24
  31. package/dist/LinearGenomeView/components/SearchBox.d.ts +4 -5
  32. package/dist/LinearGenomeView/components/SearchBox.js +3 -3
  33. package/dist/LinearGenomeView/components/SequenceSearchDialog.d.ts +4 -5
  34. package/dist/LinearGenomeView/components/SequenceSearchDialog.js +20 -18
  35. package/dist/LinearGenomeView/components/TrackContainer.d.ts +2 -2
  36. package/dist/LinearGenomeView/components/TrackContainer.js +2 -1
  37. package/dist/LinearGenomeView/components/TrackLabel.d.ts +2 -2
  38. package/dist/LinearGenomeView/components/TrackLabel.js +3 -3
  39. package/dist/LinearGenomeView/components/TrackRenderingContainer.d.ts +2 -2
  40. package/dist/LinearGenomeView/components/TrackRenderingContainer.js +5 -2
  41. package/dist/LinearGenomeView/components/TracksContainer.d.ts +2 -2
  42. package/dist/LinearGenomeView/components/TracksContainer.js +2 -1
  43. package/dist/LinearGenomeView/components/VerticalGuide.d.ts +3 -4
  44. package/dist/LinearGenomeView/components/VerticalGuide.js +3 -3
  45. package/dist/LinearGenomeView/components/ZoomControls.d.ts +3 -4
  46. package/dist/LinearGenomeView/components/ZoomControls.js +3 -3
  47. package/dist/LinearGenomeView/components/util.d.ts +1 -1
  48. package/dist/LinearGenomeView/model.d.ts +6 -6
  49. package/dist/LinearGenomeView/model.js +33 -0
  50. package/dist/LinearGenomeView/svgcomponents/SVGBackground.js +2 -1
  51. package/dist/LinearGenomeView/svgcomponents/SVGHeader.js +5 -6
  52. package/dist/LinearGenomeView/svgcomponents/SVGLinearGenomeView.js +1 -0
  53. package/dist/LinearGenomeView/svgcomponents/SVGRuler.js +5 -3
  54. package/dist/LinearGenomeView/svgcomponents/SVGScalebar.js +7 -4
  55. package/dist/index.d.ts +37 -37
  56. package/esm/BaseLinearDisplay/components/LinearBlocks.d.ts +4 -14
  57. package/esm/BaseLinearDisplay/components/LinearBlocks.js +4 -4
  58. package/esm/BaseLinearDisplay/components/Tooltip.js +1 -1
  59. package/esm/BaseLinearDisplay/models/util.d.ts +2 -6
  60. package/esm/LinearBasicDisplay/components/SetMaxHeight.d.ts +4 -5
  61. package/esm/LinearBasicDisplay/components/SetMaxHeight.js +3 -3
  62. package/esm/LinearBasicDisplay/model.d.ts +3 -1
  63. package/esm/LinearGenomeView/components/CenterLine.d.ts +3 -4
  64. package/esm/LinearGenomeView/components/CenterLine.js +3 -3
  65. package/esm/LinearGenomeView/components/Cytobands.d.ts +6 -2
  66. package/esm/LinearGenomeView/components/Cytobands.js +37 -38
  67. package/esm/LinearGenomeView/components/GetSequenceDialog.d.ts +3 -4
  68. package/esm/LinearGenomeView/components/GetSequenceDialog.js +3 -3
  69. package/esm/LinearGenomeView/components/Gridlines.d.ts +3 -4
  70. package/esm/LinearGenomeView/components/Gridlines.js +21 -18
  71. package/esm/LinearGenomeView/components/ImportForm.d.ts +2 -2
  72. package/esm/LinearGenomeView/components/ImportForm.js +2 -1
  73. package/esm/LinearGenomeView/components/LinearGenomeView.js +20 -2
  74. package/esm/LinearGenomeView/components/MiniControls.js +13 -5
  75. package/esm/LinearGenomeView/components/OverviewRubberband.d.ts +2 -2
  76. package/esm/LinearGenomeView/components/OverviewRubberband.js +2 -1
  77. package/esm/LinearGenomeView/components/OverviewScalebar.d.ts +2 -2
  78. package/esm/LinearGenomeView/components/OverviewScalebar.js +18 -13
  79. package/esm/LinearGenomeView/components/RefNameAutocomplete/index.d.ts +2 -2
  80. package/esm/LinearGenomeView/components/RefNameAutocomplete/index.js +2 -1
  81. package/esm/LinearGenomeView/components/RefNameAutocomplete/util.d.ts +1 -3
  82. package/esm/LinearGenomeView/components/Rubberband.d.ts +4 -5
  83. package/esm/LinearGenomeView/components/Rubberband.js +3 -3
  84. package/esm/LinearGenomeView/components/Scalebar.d.ts +2 -2
  85. package/esm/LinearGenomeView/components/Scalebar.js +29 -24
  86. package/esm/LinearGenomeView/components/SearchBox.d.ts +4 -5
  87. package/esm/LinearGenomeView/components/SearchBox.js +3 -3
  88. package/esm/LinearGenomeView/components/SequenceSearchDialog.d.ts +4 -5
  89. package/esm/LinearGenomeView/components/SequenceSearchDialog.js +21 -19
  90. package/esm/LinearGenomeView/components/TrackContainer.d.ts +2 -2
  91. package/esm/LinearGenomeView/components/TrackContainer.js +2 -1
  92. package/esm/LinearGenomeView/components/TrackLabel.d.ts +2 -2
  93. package/esm/LinearGenomeView/components/TrackLabel.js +3 -3
  94. package/esm/LinearGenomeView/components/TrackRenderingContainer.d.ts +2 -2
  95. package/esm/LinearGenomeView/components/TrackRenderingContainer.js +6 -3
  96. package/esm/LinearGenomeView/components/TracksContainer.d.ts +2 -2
  97. package/esm/LinearGenomeView/components/TracksContainer.js +2 -1
  98. package/esm/LinearGenomeView/components/VerticalGuide.d.ts +3 -4
  99. package/esm/LinearGenomeView/components/VerticalGuide.js +3 -3
  100. package/esm/LinearGenomeView/components/ZoomControls.d.ts +3 -4
  101. package/esm/LinearGenomeView/components/ZoomControls.js +3 -3
  102. package/esm/LinearGenomeView/components/util.d.ts +1 -1
  103. package/esm/LinearGenomeView/model.d.ts +6 -6
  104. package/esm/LinearGenomeView/model.js +33 -0
  105. package/esm/LinearGenomeView/svgcomponents/SVGBackground.js +2 -1
  106. package/esm/LinearGenomeView/svgcomponents/SVGHeader.js +6 -7
  107. package/esm/LinearGenomeView/svgcomponents/SVGLinearGenomeView.js +1 -0
  108. package/esm/LinearGenomeView/svgcomponents/SVGRuler.js +6 -4
  109. package/esm/LinearGenomeView/svgcomponents/SVGScalebar.js +8 -5
  110. package/esm/index.d.ts +37 -37
  111. package/package.json +4 -4
@@ -1,20 +1,10 @@
1
1
  import React from 'react';
2
2
  import { BaseLinearDisplayModel } from '../models/BaseLinearDisplayModel';
3
- declare const useStyles: (params: void, styleOverrides?: {
4
- props: any;
5
- ownerState?: Record<string, unknown> | undefined;
6
- } | undefined) => {
7
- classes: Record<"linearBlocks" | "heightOverflowed", string>;
8
- theme: import("@mui/material").Theme;
9
- css: import("tss-react").Css;
10
- cx: import("tss-react").Cx;
11
- };
12
3
  declare const RenderedBlocks: ({ model, }: {
13
4
  model: BaseLinearDisplayModel;
14
5
  }) => React.JSX.Element;
15
- declare function LinearBlocks({ model }: {
6
+ export { RenderedBlocks };
7
+ declare const LinearBlocks: ({ model, }: {
16
8
  model: BaseLinearDisplayModel;
17
- }): React.JSX.Element;
18
- export { RenderedBlocks, useStyles };
19
- declare const _default: typeof LinearBlocks;
20
- export default _default;
9
+ }) => React.JSX.Element;
10
+ export default LinearBlocks;
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.useStyles = exports.RenderedBlocks = void 0;
6
+ exports.RenderedBlocks = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const mui_1 = require("tss-react/mui");
9
9
  const util_1 = require("@jbrowse/core/util");
@@ -31,7 +31,6 @@ const useStyles = (0, mui_1.makeStyles)()({
31
31
  boxSizing: 'border-box',
32
32
  },
33
33
  });
34
- exports.useStyles = useStyles;
35
34
  const RenderedBlocks = (0, mobx_react_1.observer)(function ({ model, }) {
36
35
  const { classes } = useStyles();
37
36
  const { blockDefinitions, blockState } = model;
@@ -56,7 +55,7 @@ const RenderedBlocks = (0, mobx_react_1.observer)(function ({ model, }) {
56
55
  })));
57
56
  });
58
57
  exports.RenderedBlocks = RenderedBlocks;
59
- function LinearBlocks({ model }) {
58
+ const LinearBlocks = (0, mobx_react_1.observer)(function ({ model, }) {
60
59
  const { classes } = useStyles();
61
60
  const { blockDefinitions } = model;
62
61
  const viewModel = (0, util_1.getContainingView)(model);
@@ -64,5 +63,5 @@ function LinearBlocks({ model }) {
64
63
  left: blockDefinitions.offsetPx - viewModel.offsetPx,
65
64
  } },
66
65
  react_1.default.createElement(RenderedBlocks, { model: model })));
67
- }
68
- exports.default = (0, mobx_react_1.observer)(LinearBlocks);
66
+ });
67
+ exports.default = LinearBlocks;
@@ -49,7 +49,7 @@ const useStyles = (0, mui_1.makeStyles)()(theme => ({
49
49
  wordWrap: 'break-word',
50
50
  },
51
51
  }));
52
- const TooltipContents = react_1.default.forwardRef(({ message }, ref) => {
52
+ const TooltipContents = react_1.default.forwardRef(function TooltipContents2({ message }, ref) {
53
53
  return (react_1.default.createElement("div", { ref: ref }, react_1.default.isValidElement(message) ? (message) : message ? (react_1.default.createElement(ui_1.SanitizedHTML, { html: String(message) })) : null));
54
54
  });
55
55
  const Tooltip = (0, mobx_react_1.observer)(({ model, clientMouseCoord, }) => {
@@ -3,12 +3,8 @@ import { FeatureDensityStats } from '@jbrowse/core/data_adapters/BaseAdapter';
3
3
  import { IAnyStateTreeNode } from 'mobx-state-tree';
4
4
  export interface RenderProps {
5
5
  rendererType: any;
6
- renderArgs: {
7
- [key: string]: any;
8
- };
9
- renderProps: {
10
- [key: string]: any;
11
- };
6
+ renderArgs: Record<string, any>;
7
+ renderProps: Record<string, any>;
12
8
  displayError: unknown;
13
9
  rpcManager: {
14
10
  call: Function;
@@ -1,10 +1,9 @@
1
1
  import React from 'react';
2
- declare function SetMaxHeightDlg({ model, handleClose, }: {
2
+ declare const SetMaxHeightDialog: ({ model, handleClose, }: {
3
3
  model: {
4
- maxHeight?: number;
4
+ maxHeight?: number | undefined;
5
5
  setMaxHeight: (arg?: number) => void;
6
6
  };
7
7
  handleClose: () => void;
8
- }): React.JSX.Element;
9
- declare const _default: typeof SetMaxHeightDlg;
10
- export default _default;
8
+ }) => React.JSX.Element;
9
+ export default SetMaxHeightDialog;
@@ -33,7 +33,7 @@ const useStyles = (0, mui_1.makeStyles)()({
33
33
  width: 500,
34
34
  },
35
35
  });
36
- function SetMaxHeightDlg({ model, handleClose, }) {
36
+ const SetMaxHeightDialog = (0, mobx_react_1.observer)(function ({ model, handleClose, }) {
37
37
  const { classes } = useStyles();
38
38
  const { maxHeight = '' } = model;
39
39
  const [max, setMax] = (0, react_1.useState)(`${maxHeight}`);
@@ -47,5 +47,5 @@ function SetMaxHeightDlg({ model, handleClose, }) {
47
47
  handleClose();
48
48
  } }, "Submit"),
49
49
  react_1.default.createElement(material_1.Button, { variant: "contained", color: "secondary", onClick: () => handleClose() }, "Cancel")))));
50
- }
51
- exports.default = (0, mobx_react_1.observer)(SetMaxHeightDlg);
50
+ });
51
+ exports.default = SetMaxHeightDialog;
@@ -196,7 +196,9 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
196
196
  readonly currentBytesRequested: number;
197
197
  readonly currentFeatureScreenDensity: number;
198
198
  readonly maxFeatureScreenDensity: any;
199
- readonly featureDensityStatsReady: boolean;
199
+ readonly featureDensityStatsReady: boolean; /**
200
+ * #getter
201
+ */
200
202
  readonly maxAllowableBytes: number;
201
203
  } & {
202
204
  afterAttach(): void;
@@ -1,8 +1,7 @@
1
1
  import React from 'react';
2
2
  import { LinearGenomeViewModel } from '..';
3
3
  type LGV = LinearGenomeViewModel;
4
- declare function CenterLine({ model }: {
4
+ declare const CenterLine: ({ model }: {
5
5
  model: LGV;
6
- }): React.JSX.Element | null;
7
- declare const _default: typeof CenterLine;
8
- export default _default;
6
+ }) => React.JSX.Element | null;
7
+ export default CenterLine;
@@ -44,7 +44,7 @@ const useStyles = (0, mui_1.makeStyles)()(theme => ({
44
44
  fontWeight: 'bold',
45
45
  },
46
46
  }));
47
- function CenterLine({ model }) {
47
+ const CenterLine = (0, mobx_react_1.observer)(function ({ model }) {
48
48
  const { bpPerPx, centerLineInfo, trackHeights, tracks, width } = model;
49
49
  const ref = (0, react_1.useRef)(null);
50
50
  const { classes } = useStyles();
@@ -60,5 +60,5 @@ function CenterLine({ model }) {
60
60
  ":",
61
61
  ' ',
62
62
  Math.max(Math.round(centerLineInfo.offset) + 1, 0))))) : null;
63
- }
64
- exports.default = (0, mobx_react_1.observer)(CenterLine);
63
+ });
64
+ exports.default = CenterLine;
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { Base1DViewModel } from '@jbrowse/core/util/Base1DViewModel';
3
3
  import { ContentBlock } from '@jbrowse/core/util/blockTypes';
4
4
  import { Assembly } from '@jbrowse/core/assemblyManager/assembly';
5
- declare const _default: ({ overview, block, assembly, }: {
5
+ declare const Cytobands: ({ overview, block, assembly, }: {
6
6
  overview: Base1DViewModel;
7
7
  assembly?: ({
8
8
  configuration: any;
@@ -18,6 +18,8 @@ declare const _default: ({ overview, block, assembly, }: {
18
18
  [x: string]: string | undefined;
19
19
  } | undefined;
20
20
  cytobands: import("@jbrowse/core/util").Feature[] | undefined;
21
+ } & {
22
+ getConf(arg: string): any;
21
23
  } & {
22
24
  readonly initialized: boolean;
23
25
  readonly name: string;
@@ -72,6 +74,8 @@ declare const _default: ({ overview, block, assembly, }: {
72
74
  [x: string]: string | undefined;
73
75
  } | undefined;
74
76
  cytobands: import("@jbrowse/core/util").Feature[] | undefined;
77
+ } & {
78
+ getConf(arg: string): any;
75
79
  } & {
76
80
  readonly initialized: boolean;
77
81
  readonly name: string;
@@ -115,4 +119,4 @@ declare const _default: ({ overview, block, assembly, }: {
115
119
  }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>) | undefined;
116
120
  block: ContentBlock;
117
121
  }) => React.JSX.Element;
118
- export default _default;
122
+ export default Cytobands;
@@ -30,6 +30,20 @@ function leftRoundedRect(x, y, width, height, radius) {
30
30
  + "a" + radius + "," + radius + " 0 0 1 " + radius + "," + (-radius)
31
31
  + "z";
32
32
  }
33
+ function leftTriangle(x, y, width, height) {
34
+ return [
35
+ [x, 0],
36
+ [x + width, height / 2],
37
+ [x, height],
38
+ ].toString();
39
+ }
40
+ function rightTriangle(x, y, width, height) {
41
+ return [
42
+ [x, height / 2],
43
+ [x + width, 0],
44
+ [x + width, height],
45
+ ].toString();
46
+ }
33
47
  const colorMap = {
34
48
  gneg: 'rgb(227,227,227)',
35
49
  gpos25: 'rgb(142,142,142)',
@@ -40,52 +54,37 @@ const colorMap = {
40
54
  stalk: 'rgb(127,127,127)',
41
55
  acen: '#800',
42
56
  };
43
- exports.default = (0, mobx_react_1.observer)(function Cytobands({ overview, block, assembly, }) {
57
+ const Cytobands = (0, mobx_react_1.observer)(function ({ overview, block, assembly, }) {
44
58
  const { offsetPx, reversed } = block;
45
59
  const cytobands = (0, util_1.getCytobands)(assembly, block.refName);
46
- const coords = cytobands.map(f => {
47
- const { refName, start, end, type } = f;
48
- return [
49
- overview.bpToPx({
50
- refName,
51
- coord: start,
52
- }),
53
- overview.bpToPx({
54
- refName,
55
- coord: end,
56
- }),
57
- type,
58
- ];
59
- });
60
- const arr = cytobands || [];
61
- const lcap = reversed ? arr.length - 1 : 0;
62
- const rcap = reversed ? 0 : arr.length - 1;
63
- let firstCent = true;
64
- return (react_1.default.createElement("g", { transform: `translate(-${offsetPx})` }, coords.map(([start, end, type], index) => {
65
- const key = `${start}-${end}-${type}`;
66
- if (type === 'acen' && firstCent) {
67
- firstCent = false;
68
- return (react_1.default.createElement("polygon", { key: key, points: [
69
- [start, 0],
70
- [end, __1.HEADER_OVERVIEW_HEIGHT / 2],
71
- [start, __1.HEADER_OVERVIEW_HEIGHT],
72
- ].toString(), fill: colorMap[type] }));
60
+ const lcap = reversed ? cytobands.length - 1 : 0;
61
+ const rcap = reversed ? 0 : cytobands.length - 1;
62
+ const h = __1.HEADER_OVERVIEW_HEIGHT;
63
+ let centromereSeen = false;
64
+ return (react_1.default.createElement("g", { transform: `translate(-${offsetPx})` }, cytobands.map((args, index) => {
65
+ const k = JSON.stringify(args);
66
+ const { refName, type, start, end } = args;
67
+ const s = overview.bpToPx({ refName, coord: start }) || 0;
68
+ const e = overview.bpToPx({ refName, coord: end }) || 0;
69
+ const l = Math.min(s, e);
70
+ const w = Math.abs(e - s);
71
+ const c = colorMap[type];
72
+ if (type === 'acen' && !centromereSeen) {
73
+ centromereSeen = true; // the next acen entry is drawn with different right triangle
74
+ return react_1.default.createElement("polygon", { key: k, points: leftTriangle(s, 0, w, h), fill: c });
73
75
  }
74
- if (type === 'acen' && !firstCent) {
75
- return (react_1.default.createElement("polygon", { key: key, points: [
76
- [start, __1.HEADER_OVERVIEW_HEIGHT / 2],
77
- [end, 0],
78
- [end, __1.HEADER_OVERVIEW_HEIGHT],
79
- ].toString(), fill: colorMap[type] }));
76
+ else if (type === 'acen' && centromereSeen) {
77
+ return react_1.default.createElement("polygon", { key: k, points: rightTriangle(s, 0, w, h), fill: c });
80
78
  }
81
- if (lcap === index) {
82
- return (react_1.default.createElement("path", { key: key, d: leftRoundedRect(Math.min(start, end), 0, Math.abs(end - start), __1.HEADER_OVERVIEW_HEIGHT, 8), fill: colorMap[type] }));
79
+ else if (lcap === index) {
80
+ return react_1.default.createElement("path", { key: k, d: leftRoundedRect(l, 0, w, h, 8), fill: c });
83
81
  }
84
82
  else if (rcap === index) {
85
- return (react_1.default.createElement("path", { key: key, d: rightRoundedRect(Math.min(start, end), 0, Math.abs(end - start) - 2, __1.HEADER_OVERVIEW_HEIGHT, 8), fill: colorMap[type] }));
83
+ return react_1.default.createElement("path", { key: k, d: rightRoundedRect(l, 0, w, h, 8), fill: c });
86
84
  }
87
85
  else {
88
- return (react_1.default.createElement("rect", { key: key, x: Math.min(start, end), y: 0, width: Math.abs(end - start), height: __1.HEADER_OVERVIEW_HEIGHT, fill: colorMap[type] }));
86
+ return react_1.default.createElement("rect", { key: k, x: l, y: 0, width: w, height: h, fill: c });
89
87
  }
90
88
  })));
91
89
  });
90
+ exports.default = Cytobands;
@@ -1,9 +1,8 @@
1
1
  import React from 'react';
2
2
  import { LinearGenomeViewModel } from '..';
3
3
  type LGV = LinearGenomeViewModel;
4
- declare function SequenceDialog({ model, handleClose, }: {
4
+ declare const GetSequenceDialog: ({ model, handleClose, }: {
5
5
  model: LGV;
6
6
  handleClose: () => void;
7
- }): React.JSX.Element;
8
- declare const _default: typeof SequenceDialog;
9
- export default _default;
7
+ }) => React.JSX.Element;
8
+ export default GetSequenceDialog;
@@ -74,7 +74,7 @@ async function fetchSequence(model, regions, signal) {
74
74
  signal,
75
75
  });
76
76
  }
77
- function SequenceDialog({ model, handleClose, }) {
77
+ const GetSequenceDialog = (0, mobx_react_1.observer)(function ({ model, handleClose, }) {
78
78
  const { classes } = useStyles();
79
79
  const session = (0, util_1.getSession)(model);
80
80
  const [error, setError] = (0, react_1.useState)();
@@ -170,5 +170,5 @@ function SequenceDialog({ model, handleClose, }) {
170
170
  }), 'jbrowse_ref_seq.fa');
171
171
  }, disabled: loading || !!error, color: "primary", startIcon: react_1.default.createElement(GetApp_1.default, null) }, "Download FASTA"),
172
172
  react_1.default.createElement(material_1.Button, { onClick: handleClose, variant: "contained" }, "Close"))));
173
- }
174
- exports.default = (0, mobx_react_1.observer)(SequenceDialog);
173
+ });
174
+ exports.default = GetSequenceDialog;
@@ -1,8 +1,7 @@
1
1
  import React from 'react';
2
2
  import { LinearGenomeViewModel } from '..';
3
3
  type LGV = LinearGenomeViewModel;
4
- declare function VerticalGuides({ model }: {
4
+ declare const Gridlines: ({ model }: {
5
5
  model: LGV;
6
- }): React.JSX.Element;
7
- declare const _default: typeof VerticalGuides;
8
- export default _default;
6
+ }) => React.JSX.Element;
7
+ export default Gridlines;
@@ -36,30 +36,33 @@ const useStyles = (0, mui_1.makeStyles)()(theme => ({
36
36
  background: theme.palette.divider,
37
37
  },
38
38
  }));
39
- const RenderedVerticalGuides = (0, mobx_react_1.observer)(({ model }) => {
39
+ function RenderedBlockLines({ block, bpPerPx, }) {
40
40
  const { classes, cx } = useStyles();
41
- return (react_1.default.createElement(react_1.default.Fragment, null, model.staticBlocks.map((block, index) => {
41
+ const ticks = (0, util_1.makeTicks)(block.start, block.end, bpPerPx);
42
+ return (react_1.default.createElement(Block_1.ContentBlock, { block: block }, ticks.map(({ type, base }) => {
43
+ const x = (block.reversed ? block.end - base : base - block.start) / bpPerPx;
44
+ return (react_1.default.createElement("div", { key: base, className: cx(classes.tick, type === 'major' || type === 'labeledMajor'
45
+ ? classes.majorTick
46
+ : classes.minorTick), style: { left: x } }));
47
+ })));
48
+ }
49
+ const RenderedVerticalGuides = (0, mobx_react_1.observer)(({ model }) => {
50
+ const { staticBlocks, bpPerPx } = model;
51
+ return (react_1.default.createElement(react_1.default.Fragment, null, staticBlocks.map((block, index) => {
52
+ const k = `${block.key}-${index}`;
42
53
  if (block instanceof blockTypes_1.ContentBlock) {
43
- const ticks = (0, util_1.makeTicks)(block.start, block.end, model.bpPerPx);
44
- return (react_1.default.createElement(Block_1.ContentBlock, { key: `${block.key}-${index}`, block: block }, ticks.map(tick => {
45
- const x = (block.reversed
46
- ? block.end - tick.base
47
- : tick.base - block.start) / model.bpPerPx;
48
- return (react_1.default.createElement("div", { key: tick.base, className: cx(classes.tick, tick.type === 'major' || tick.type === 'labeledMajor'
49
- ? classes.majorTick
50
- : classes.minorTick), style: { left: x } }));
51
- })));
54
+ return react_1.default.createElement(RenderedBlockLines, { key: k, block: block, bpPerPx: bpPerPx });
52
55
  }
53
- if (block instanceof blockTypes_1.ElidedBlock) {
54
- return react_1.default.createElement(Block_1.ElidedBlock, { key: block.key, width: block.widthPx });
56
+ else if (block instanceof blockTypes_1.ElidedBlock) {
57
+ return react_1.default.createElement(Block_1.ElidedBlock, { key: k, width: block.widthPx });
55
58
  }
56
- if (block instanceof blockTypes_1.InterRegionPaddingBlock) {
57
- return (react_1.default.createElement(Block_1.InterRegionPaddingBlock, { key: block.key, width: block.widthPx, boundary: block.variant === 'boundary' }));
59
+ else if (block instanceof blockTypes_1.InterRegionPaddingBlock) {
60
+ return (react_1.default.createElement(Block_1.InterRegionPaddingBlock, { key: k, width: block.widthPx, boundary: block.variant === 'boundary' }));
58
61
  }
59
62
  return null;
60
63
  })));
61
64
  });
62
- function VerticalGuides({ model }) {
65
+ const Gridlines = (0, mobx_react_1.observer)(function ({ model }) {
63
66
  const { classes } = useStyles();
64
67
  // find the block that needs pinning to the left side for context
65
68
  const offsetLeft = model.staticBlocks.offsetPx - model.offsetPx;
@@ -71,5 +74,5 @@ function VerticalGuides({ model }) {
71
74
  width: model.staticBlocks.totalWidthPx,
72
75
  } },
73
76
  react_1.default.createElement(RenderedVerticalGuides, { model: model }))));
74
- }
75
- exports.default = (0, mobx_react_1.observer)(VerticalGuides);
77
+ });
78
+ exports.default = Gridlines;
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { LinearGenomeViewModel } from '..';
3
3
  type LGV = LinearGenomeViewModel;
4
- declare const _default: ({ model }: {
4
+ declare const LinearGenomeViewImportForm: ({ model, }: {
5
5
  model: LGV;
6
6
  }) => React.JSX.Element;
7
- export default _default;
7
+ export default LinearGenomeViewImportForm;
@@ -48,7 +48,7 @@ const useStyles = (0, mui_1.makeStyles)()(theme => ({
48
48
  padding: theme.spacing(4),
49
49
  },
50
50
  }));
51
- exports.default = (0, mobx_react_1.observer)(function ({ model }) {
51
+ const LinearGenomeViewImportForm = (0, mobx_react_1.observer)(function ({ model, }) {
52
52
  var _a;
53
53
  const { classes } = useStyles();
54
54
  const session = (0, util_1.getSession)(model);
@@ -168,3 +168,4 @@ exports.default = (0, mobx_react_1.observer)(function ({ model }) {
168
168
  model.showAllRegionsInAssembly(selectedAsm);
169
169
  }, variant: "contained", color: "secondary" }, "Show all regions in assembly"))))))));
170
170
  });
171
+ exports.default = LinearGenomeViewImportForm;
@@ -35,6 +35,7 @@ const mobx_react_1 = require("mobx-react");
35
35
  const Icons_1 = require("@jbrowse/core/ui/Icons");
36
36
  const TrackContainer_1 = __importDefault(require("./TrackContainer"));
37
37
  const TracksContainer_1 = __importDefault(require("./TracksContainer"));
38
+ const util_1 = require("@jbrowse/core/util");
38
39
  const ImportForm = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./ImportForm'))));
39
40
  const useStyles = (0, mui_1.makeStyles)()(theme => ({
40
41
  note: {
@@ -46,6 +47,23 @@ const useStyles = (0, mui_1.makeStyles)()(theme => ({
46
47
  const LinearGenomeView = (0, mobx_react_1.observer)(({ model }) => {
47
48
  const { tracks, error, initialized, hasDisplayedRegions } = model;
48
49
  const { classes } = useStyles();
50
+ const ref = (0, react_1.useRef)(null);
51
+ const session = (0, util_1.getSession)(model);
52
+ (0, react_1.useEffect)(() => {
53
+ // sets the focused view id based on a click within the LGV; necessary for subviews to be focused properly
54
+ function handleSelectView(e) {
55
+ var _a, _b;
56
+ if (e.target instanceof Element && ((_a = ref === null || ref === void 0 ? void 0 : ref.current) === null || _a === void 0 ? void 0 : _a.contains(e.target))) {
57
+ (_b = session.setFocusedViewId) === null || _b === void 0 ? void 0 : _b.call(session, model.id);
58
+ }
59
+ }
60
+ document.addEventListener('mousedown', handleSelectView);
61
+ document.addEventListener('keydown', handleSelectView);
62
+ return () => {
63
+ document.removeEventListener('mousedown', handleSelectView);
64
+ document.removeEventListener('keydown', handleSelectView);
65
+ };
66
+ }, [session, model]);
49
67
  if (!initialized && !error) {
50
68
  return react_1.default.createElement(ui_1.LoadingEllipses, { variant: "h6" });
51
69
  }
@@ -54,7 +72,7 @@ const LinearGenomeView = (0, mobx_react_1.observer)(({ model }) => {
54
72
  }
55
73
  const MiniControlsComponent = model.MiniControlsComponent();
56
74
  const HeaderComponent = model.HeaderComponent();
57
- return (react_1.default.createElement("div", { style: { position: 'relative' } },
75
+ return (react_1.default.createElement("div", { style: { position: 'relative' }, ref: ref },
58
76
  react_1.default.createElement(HeaderComponent, { model: model }),
59
77
  react_1.default.createElement(MiniControlsComponent, { model: model }),
60
78
  react_1.default.createElement(TracksContainer_1.default, { model: model }, !tracks.length ? (react_1.default.createElement(material_1.Paper, { variant: "outlined", className: classes.note }, !model.hideNoTracksActive ? (react_1.default.createElement(react_1.default.Fragment, null,
@@ -12,23 +12,31 @@ const ZoomOut_1 = __importDefault(require("@mui/icons-material/ZoomOut"));
12
12
  const KeyboardArrowDown_1 = __importDefault(require("@mui/icons-material/KeyboardArrowDown"));
13
13
  const CascadingMenuButton_1 = __importDefault(require("@jbrowse/core/ui/CascadingMenuButton"));
14
14
  const mui_1 = require("tss-react/mui");
15
+ const util_1 = require("@jbrowse/core/util");
15
16
  const useStyles = (0, mui_1.makeStyles)()(theme => ({
16
- bg: {
17
+ background: {
17
18
  position: 'absolute',
18
19
  right: 0,
19
20
  zIndex: 1001,
20
21
  background: theme.palette.background.paper,
21
22
  },
23
+ focusedBackground: {
24
+ background: theme.palette.secondary.light,
25
+ svg: {
26
+ fill: theme.palette.secondary.contrastText,
27
+ },
28
+ },
22
29
  }));
23
30
  const MiniControls = (0, mobx_react_1.observer)(function ({ model, }) {
24
- const { classes } = useStyles();
25
- const { bpPerPx, maxBpPerPx, minBpPerPx, scaleFactor, hideHeader } = model;
26
- return hideHeader ? (react_1.default.createElement(material_1.Paper, { className: classes.bg },
31
+ const { classes, cx } = useStyles();
32
+ const { id, bpPerPx, maxBpPerPx, minBpPerPx, scaleFactor, hideHeader } = model;
33
+ const { focusedViewId } = (0, util_1.getSession)(model);
34
+ return hideHeader ? (react_1.default.createElement(material_1.Paper, { className: cx(classes.background, focusedViewId === id ? classes.focusedBackground : undefined) },
27
35
  react_1.default.createElement(CascadingMenuButton_1.default, { menuItems: model.menuItems() },
28
36
  react_1.default.createElement(KeyboardArrowDown_1.default, { fontSize: "small" })),
29
37
  react_1.default.createElement(material_1.IconButton, { "data-testid": "zoom_out", onClick: () => model.zoom(bpPerPx * 2), disabled: bpPerPx >= maxBpPerPx - 0.0001 || scaleFactor !== 1 },
30
38
  react_1.default.createElement(ZoomOut_1.default, { fontSize: "small" })),
31
- react_1.default.createElement(material_1.IconButton, { "data-testid": "zoom_in", onClick: () => model.zoom(model.bpPerPx / 2), disabled: bpPerPx <= minBpPerPx + 0.0001 || scaleFactor !== 1 },
39
+ react_1.default.createElement(material_1.IconButton, { "data-testid": "zoom_in", onClick: () => model.zoom(bpPerPx / 2), disabled: bpPerPx <= minBpPerPx + 0.0001 || scaleFactor !== 1 },
32
40
  react_1.default.createElement(ZoomIn_1.default, { fontSize: "small" })))) : null;
33
41
  });
34
42
  exports.default = MiniControls;
@@ -2,9 +2,9 @@ import React from 'react';
2
2
  import { Base1DViewModel } from '@jbrowse/core/util/Base1DViewModel';
3
3
  import { LinearGenomeViewModel } from '..';
4
4
  type LGV = LinearGenomeViewModel;
5
- declare const _default: ({ model, overview, ControlComponent, }: {
5
+ declare const OverviewRubberband: ({ model, overview, ControlComponent, }: {
6
6
  model: LGV;
7
7
  overview: Base1DViewModel;
8
8
  ControlComponent?: React.ReactElement<any, string | React.JSXElementConstructor<any>> | undefined;
9
9
  }) => React.JSX.Element;
10
- export default _default;
10
+ export default OverviewRubberband;
@@ -60,7 +60,7 @@ const HoverTooltip = (0, mobx_react_1.observer)(function ({ model, open, guideX,
60
60
  return (react_1.default.createElement(material_1.Tooltip, { open: open, placement: "top", title: [(0, util_1.stringify)(px), cytoband === null || cytoband === void 0 ? void 0 : cytoband.get('name')].join(' '), arrow: true },
61
61
  react_1.default.createElement("div", { className: classes.guide, style: { left: guideX } })));
62
62
  });
63
- exports.default = (0, mobx_react_1.observer)(function OverviewRubberband({ model, overview, ControlComponent = react_1.default.createElement("div", null), }) {
63
+ const OverviewRubberband = (0, mobx_react_1.observer)(function OverviewRubberband({ model, overview, ControlComponent = react_1.default.createElement("div", null), }) {
64
64
  const { cytobandOffset } = model;
65
65
  const [startX, setStartX] = (0, react_1.useState)();
66
66
  const [currentX, setCurrentX] = (0, react_1.useState)();
@@ -156,3 +156,4 @@ exports.default = (0, mobx_react_1.observer)(function OverviewRubberband({ model
156
156
  leftBpOffset && rightBpOffset ? (react_1.default.createElement(RubberbandSpan_1.default, { leftBpOffset: leftBpOffset, rightBpOffset: rightBpOffset, width: Math.abs(width), left: left })) : null,
157
157
  react_1.default.createElement("div", { "data-testid": "rubberband_controls", className: classes.rubberbandControl, ref: controlsRef, onMouseDown: mouseDown, onMouseOut: mouseOut, onMouseMove: mouseMove }, ControlComponent)));
158
158
  });
159
+ exports.default = OverviewRubberband;
@@ -7,10 +7,10 @@ declare const Polygon: ({ model, overview, useOffset, }: {
7
7
  useOffset?: boolean | undefined;
8
8
  }) => React.JSX.Element | null;
9
9
  type LGV = LinearGenomeViewModel;
10
- declare const _default: ({ model, children, }: {
10
+ declare const OverviewScalebar: ({ model, children, }: {
11
11
  model: LGV;
12
12
  children: React.ReactNode;
13
13
  }) => React.JSX.Element;
14
- export default _default;
15
14
  export { Polygon };
16
15
  export { default as Cytobands } from './Cytobands';
16
+ export default OverviewScalebar;
@@ -1,10 +1,33 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
27
  };
5
28
  Object.defineProperty(exports, "__esModule", { value: true });
6
29
  exports.Cytobands = exports.Polygon = void 0;
7
- const react_1 = __importDefault(require("react"));
30
+ const react_1 = __importStar(require("react"));
8
31
  const material_1 = require("@mui/material");
9
32
  const mui_1 = require("tss-react/mui");
10
33
  const mobx_react_1 = require("mobx-react");
@@ -82,9 +105,7 @@ const Polygon = (0, mobx_react_1.observer)(function ({ model, overview, useOffse
82
105
  if (!contentBlocks.length) {
83
106
  return null;
84
107
  }
85
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
86
108
  const first = contentBlocks.at(0);
87
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
88
109
  const last = contentBlocks.at(-1);
89
110
  const topLeft = (overview.bpToPx({
90
111
  ...first,
@@ -162,9 +183,7 @@ const Scalebar = (0, mobx_react_1.observer)(function ({ model, scale, overview,
162
183
  if (!visibleRegions.length) {
163
184
  return null;
164
185
  }
165
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
166
186
  const first = visibleRegions.at(0);
167
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
168
187
  const last = visibleRegions.at(-1);
169
188
  const firstOverviewPx = overview.bpToPx({
170
189
  ...first,
@@ -192,17 +211,25 @@ const Scalebar = (0, mobx_react_1.observer)(function ({ model, scale, overview,
192
211
  } })) : (react_1.default.createElement(OverviewBox, { scale: scale, block: block, model: model, overview: overview, key: `${JSON.stringify(block)}-${idx}` }));
193
212
  })));
194
213
  });
195
- exports.default = (0, mobx_react_1.observer)(function OverviewScalebar({ model, children, }) {
214
+ const OverviewScalebar = (0, mobx_react_1.observer)(function ({ model, children, }) {
196
215
  const { classes } = useStyles();
197
216
  const { totalBp, width, cytobandOffset, displayedRegions } = model;
198
- const overview = Base1DViewModel_1.default.create({
199
- displayedRegions: JSON.parse(JSON.stringify(displayedRegions)),
200
- interRegionPaddingWidth: 0,
201
- minimumBlockWidth: model.minimumBlockWidth,
202
- });
203
217
  const modWidth = width - cytobandOffset;
204
- overview.setVolatileWidth(modWidth);
205
- overview.showAllRegions();
218
+ const overview = (0, react_1.useMemo)(() => {
219
+ const overview = Base1DViewModel_1.default.create({
220
+ displayedRegions: JSON.parse(JSON.stringify(displayedRegions)),
221
+ interRegionPaddingWidth: 0,
222
+ minimumBlockWidth: model.minimumBlockWidth,
223
+ });
224
+ overview.setVolatileWidth(modWidth);
225
+ overview.showAllRegions();
226
+ return overview;
227
+ }, [
228
+ JSON.stringify(displayedRegions),
229
+ model.minimumBlockWidth,
230
+ modWidth,
231
+ displayedRegions,
232
+ ]);
206
233
  const scale = totalBp / (modWidth - (displayedRegions.length - 1) * wholeSeqSpacer);
207
234
  return (react_1.default.createElement("div", null,
208
235
  react_1.default.createElement(OverviewRubberband_1.default, { model: model, overview: overview, ControlComponent: react_1.default.createElement(Scalebar, { model: model, overview: overview, scale: scale }) }),
@@ -213,3 +240,4 @@ exports.default = (0, mobx_react_1.observer)(function OverviewScalebar({ model,
213
240
  });
214
241
  var Cytobands_2 = require("./Cytobands");
215
242
  Object.defineProperty(exports, "Cytobands", { enumerable: true, get: function () { return __importDefault(Cytobands_2).default; } });
243
+ exports.default = OverviewScalebar;