@jbrowse/plugin-breakpoint-split-view 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 (23) hide show
  1. package/dist/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.d.ts +4 -2
  2. package/dist/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.js +4 -6
  3. package/dist/BreakpointSplitView/BreakpointSplitView.js +4 -1
  4. package/dist/BreakpointSplitView/components/AlignmentConnections.js +5 -1
  5. package/dist/BreakpointSplitView/components/Breakends.js +5 -1
  6. package/dist/BreakpointSplitView/components/ExportSvgDialog.js +16 -6
  7. package/dist/BreakpointSplitView/components/Translocations.js +6 -2
  8. package/dist/BreakpointSplitView/components/util.js +4 -1
  9. package/dist/BreakpointSplitView/model.d.ts +9 -14
  10. package/dist/BreakpointSplitView/model.js +10 -13
  11. package/dist/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.js +0 -1
  12. package/esm/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.d.ts +4 -2
  13. package/esm/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.js +3 -5
  14. package/esm/BreakpointSplitView/BreakpointSplitView.js +4 -1
  15. package/esm/BreakpointSplitView/components/AlignmentConnections.js +5 -1
  16. package/esm/BreakpointSplitView/components/Breakends.js +5 -1
  17. package/esm/BreakpointSplitView/components/ExportSvgDialog.js +16 -6
  18. package/esm/BreakpointSplitView/components/Translocations.js +6 -2
  19. package/esm/BreakpointSplitView/components/util.js +4 -1
  20. package/esm/BreakpointSplitView/model.d.ts +9 -14
  21. package/esm/BreakpointSplitView/model.js +11 -14
  22. package/esm/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.js +0 -1
  23. package/package.json +5 -5
@@ -1,5 +1,7 @@
1
1
  import React from 'react';
2
- declare const BreakpointAlignmentsFeatureDetail: ({ model }: {
3
- model: any;
2
+ declare const BreakpointAlignmentsFeatureDetail: ({ model, }: {
3
+ model: {
4
+ featureData: Record<string, unknown>;
5
+ };
4
6
  }) => React.JSX.Element;
5
7
  export default BreakpointAlignmentsFeatureDetail;
@@ -3,15 +3,13 @@ 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
- const Paper_1 = __importDefault(require("@mui/material/Paper"));
7
- const mobx_react_1 = require("mobx-react");
8
6
  const react_1 = __importDefault(require("react"));
7
+ const material_1 = require("@mui/material");
8
+ const mobx_react_1 = require("mobx-react");
9
9
  const BaseFeatureDetail_1 = require("@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail");
10
- const BreakpointAlignmentsFeatureDetail = (0, mobx_react_1.observer)(
11
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
- ({ model }) => {
10
+ const BreakpointAlignmentsFeatureDetail = (0, mobx_react_1.observer)(function ({ model, }) {
13
11
  const { feature1, feature2 } = JSON.parse(JSON.stringify(model.featureData));
14
- return (react_1.default.createElement(Paper_1.default, { "data-testid": "alignment-side-drawer" },
12
+ return (react_1.default.createElement(material_1.Paper, { "data-testid": "alignment-side-drawer" },
15
13
  react_1.default.createElement(BaseFeatureDetail_1.BaseCoreDetails, { title: "Feature 1", feature: feature1 }),
16
14
  react_1.default.createElement(BaseFeatureDetail_1.BaseCoreDetails, { title: "Feature 2", feature: feature2 }),
17
15
  react_1.default.createElement(BaseFeatureDetail_1.BaseAttributes, { title: "Feature 1 attributes", feature: feature1 }),
@@ -52,12 +52,15 @@ class BreakpointSplitViewType extends ViewType_1.default {
52
52
  mateRefName = assembly.getCanonicalRefName(mate.refName);
53
53
  endPos = mate.start;
54
54
  }
55
+ else {
56
+ endPos = startPos + 1;
57
+ }
55
58
  if (!mateRefName) {
56
59
  throw new Error(`unable to resolve mate refName ${mateRefName} in reference genome`);
57
60
  }
58
61
  const bottomRegion = assembly.regions.find(f => f.refName === mateRefName);
59
62
  if (!topRegion || !bottomRegion) {
60
- throw new Error(`unable to find the refName for the top or bottom of the breakpoint view`);
63
+ throw new Error('unable to find the refName for the top or bottom of the breakpoint view');
61
64
  }
62
65
  const topMarkedRegion = [{ ...topRegion }, { ...topRegion }];
63
66
  const bottomMarkedRegion = [{ ...bottomRegion }, { ...bottomRegion }];
@@ -121,7 +121,11 @@ const AlignmentConnections = (0, mobx_react_1.observer)(function ({ model, track
121
121
  },
122
122
  });
123
123
  (_b = session.showWidget) === null || _b === void 0 ? void 0 : _b.call(session, featureWidget);
124
- }, onMouseOver: () => setMouseoverElt(id), onMouseOut: () => setMouseoverElt(undefined) }));
124
+ }, onMouseOver: () => {
125
+ setMouseoverElt(id);
126
+ }, onMouseOut: () => {
127
+ setMouseoverElt(undefined);
128
+ } }));
125
129
  }
126
130
  return ret;
127
131
  }))) : null;
@@ -107,7 +107,11 @@ const Breakends = (0, mobx_react_1.observer)(function ({ model, trackId, parentR
107
107
  featureData: (_b = totalFeatures.get(id)) === null || _b === void 0 ? void 0 : _b.toJSON(),
108
108
  });
109
109
  (_c = session.showWidget) === null || _c === void 0 ? void 0 : _c.call(session, featureWidget);
110
- }, onMouseOver: () => setMouseoverElt(id), onMouseOut: () => setMouseoverElt(undefined) }));
110
+ }, onMouseOver: () => {
111
+ setMouseoverElt(id);
112
+ }, onMouseOut: () => {
113
+ setMouseoverElt(undefined);
114
+ } }));
111
115
  }
112
116
  }
113
117
  return ret;
@@ -38,7 +38,7 @@ function TextField2({ children, ...rest }) {
38
38
  react_1.default.createElement(material_1.TextField, { ...rest }, children)));
39
39
  }
40
40
  function useSvgLocal(key, val) {
41
- return (0, util_1.useLocalStorage)('svg-' + key, val);
41
+ return (0, util_1.useLocalStorage)(`svg-${key}`, val);
42
42
  }
43
43
  function ExportSvgDialog({ model, handleClose, }) {
44
44
  const session = (0, util_1.getSession)(model);
@@ -52,19 +52,29 @@ function ExportSvgDialog({ model, handleClose, }) {
52
52
  return (react_1.default.createElement(ui_1.Dialog, { open: true, onClose: handleClose, title: "Export SVG" },
53
53
  react_1.default.createElement(material_1.DialogContent, null,
54
54
  error ? (react_1.default.createElement(ui_1.ErrorMessage, { error: error })) : loading ? (react_1.default.createElement(LoadingMessage, null)) : null,
55
- react_1.default.createElement(TextField2, { helperText: "filename", value: filename, onChange: event => setFilename(event.target.value) }),
56
- react_1.default.createElement(TextField2, { select: true, label: "Track label positioning", variant: "outlined", style: { width: 150 }, value: trackLabels, onChange: event => setTrackLabels(event.target.value) },
55
+ react_1.default.createElement(TextField2, { helperText: "filename", value: filename, onChange: event => {
56
+ setFilename(event.target.value);
57
+ } }),
58
+ react_1.default.createElement(TextField2, { select: true, label: "Track label positioning", variant: "outlined", style: { width: 150 }, value: trackLabels, onChange: event => {
59
+ setTrackLabels(event.target.value);
60
+ } },
57
61
  react_1.default.createElement(material_1.MenuItem, { value: "offset" }, "Offset"),
58
62
  react_1.default.createElement(material_1.MenuItem, { value: "overlay" }, "Overlay"),
59
63
  react_1.default.createElement(material_1.MenuItem, { value: "left" }, "Left"),
60
64
  react_1.default.createElement(material_1.MenuItem, { value: "none" }, "None")),
61
65
  react_1.default.createElement("br", null),
62
- session.allThemes ? (react_1.default.createElement(TextField2, { select: true, label: "Theme", variant: "outlined", value: themeName, onChange: event => setThemeName(event.target.value) }, Object.entries(session.allThemes()).map(([key, val]) => (react_1.default.createElement(material_1.MenuItem, { key: key, value: key },
66
+ session.allThemes ? (react_1.default.createElement(TextField2, { select: true, label: "Theme", variant: "outlined", value: themeName, onChange: event => {
67
+ setThemeName(event.target.value);
68
+ } }, Object.entries(session.allThemes()).map(([key, val]) => (react_1.default.createElement(material_1.MenuItem, { key: key, value: key },
63
69
  // @ts-expect-error
64
70
  val.name || '(Unknown name)'))))) : null,
65
- offscreenCanvas ? (react_1.default.createElement(material_1.FormControlLabel, { control: react_1.default.createElement(material_1.Checkbox, { checked: rasterizeLayers, onChange: () => setRasterizeLayers(val => !val) }), label: "Rasterize canvas based tracks? File may be much larger if this is turned off" })) : (react_1.default.createElement(material_1.Typography, null, "Note: rasterizing layers not yet supported in this browser, so SVG size may be large"))),
71
+ offscreenCanvas ? (react_1.default.createElement(material_1.FormControlLabel, { control: react_1.default.createElement(material_1.Checkbox, { checked: rasterizeLayers, onChange: () => {
72
+ setRasterizeLayers(val => !val);
73
+ } }), label: "Rasterize canvas based tracks? File may be much larger if this is turned off" })) : (react_1.default.createElement(material_1.Typography, null, "Note: rasterizing layers not yet supported in this browser, so SVG size may be large"))),
66
74
  react_1.default.createElement(material_1.DialogActions, null,
67
- react_1.default.createElement(material_1.Button, { variant: "contained", color: "secondary", onClick: () => handleClose() }, "Cancel"),
75
+ react_1.default.createElement(material_1.Button, { variant: "contained", color: "secondary", onClick: () => {
76
+ handleClose();
77
+ } }, "Cancel"),
68
78
  react_1.default.createElement(material_1.Button, { variant: "contained", color: "primary", type: "submit", onClick: async () => {
69
79
  setLoading(true);
70
80
  setError(undefined);
@@ -102,7 +102,7 @@ const Translocations = (0, mobx_react_1.observer)(function ({ model, trackId, pa
102
102
  'L', // line to
103
103
  x1,
104
104
  y1,
105
- 'L', // line to
105
+ 'L', // line to as const
106
106
  x2,
107
107
  y2,
108
108
  'L', // line to
@@ -115,7 +115,11 @@ const Translocations = (0, mobx_react_1.observer)(function ({ model, trackId, pa
115
115
  featureData: (totalFeatures.get(id) || { toJSON: () => { } }).toJSON(),
116
116
  });
117
117
  (_b = session.showWidget) === null || _b === void 0 ? void 0 : _b.call(session, featureWidget);
118
- }, onMouseOver: () => setMouseoverElt(id), onMouseOut: () => setMouseoverElt(undefined) }));
118
+ }, onMouseOver: () => {
119
+ setMouseoverElt(id);
120
+ }, onMouseOut: () => {
121
+ setMouseoverElt(undefined);
122
+ } }));
119
123
  }
120
124
  }
121
125
  return ret;
@@ -70,7 +70,10 @@ function hasPairedReads(features) {
70
70
  function findMatchingAlt(feat1, feat2) {
71
71
  const alts = feat1.get('ALT');
72
72
  if (alts) {
73
- return new Map(alts === null || alts === void 0 ? void 0 : alts.map(alt => (0, vcf_1.parseBreakend)(alt)).filter(util_1.notEmpty).map(bnd => [bnd.MatePosition, bnd])).get(`${feat2.get('refName')}:${feat2.get('start') + 1}`);
73
+ return new Map(alts
74
+ .map(alt => (0, vcf_1.parseBreakend)(alt))
75
+ .filter(util_1.notEmpty)
76
+ .map(bnd => [bnd.MatePosition, bnd])).get(`${feat2.get('refName')}:${feat2.get('start') + 1}`);
74
77
  }
75
78
  return undefined;
76
79
  }
@@ -61,7 +61,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
61
61
  showCytobandsSetting: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
62
62
  trackLabels: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
63
63
  showGridlines: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
64
- highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<Required<import("@jbrowse/core/util").ParsedLocString>, Required<import("@jbrowse/core/util").ParsedLocString>, Required<import("@jbrowse/core/util").ParsedLocString>>>, [undefined]>;
64
+ highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType>>, [undefined]>;
65
65
  colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
66
66
  showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
67
67
  }, {
@@ -77,7 +77,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
77
77
  minimumBlockWidth: number;
78
78
  draggingTrackId: undefined | string;
79
79
  volatileError: unknown;
80
- afterDisplayedRegionsSetCallbacks: Function[];
80
+ afterDisplayedRegionsSetCallbacks: (() => void)[];
81
81
  scaleFactor: number;
82
82
  trackRefs: Record<string, HTMLDivElement>;
83
83
  coarseDynamicBlocks: import("@jbrowse/core/util/blockTypes").BaseBlock[];
@@ -90,7 +90,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
90
90
  readonly interRegionPaddingWidth: number;
91
91
  readonly assemblyNames: string[];
92
92
  } & {
93
- scaleBarDisplayPrefix(): string;
93
+ scaleBarDisplayPrefix(): string | undefined;
94
94
  MiniControlsComponent(): React.FC<any>;
95
95
  HeaderComponent(): React.FC<any>;
96
96
  readonly assemblyErrors: string;
@@ -105,7 +105,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
105
105
  readonly totalBp: number;
106
106
  readonly maxBpPerPx: number;
107
107
  readonly minBpPerPx: number;
108
- readonly error: {};
108
+ readonly error: unknown;
109
109
  readonly maxOffset: number;
110
110
  readonly minOffset: number;
111
111
  readonly displayedRegionsTotalPx: number;
@@ -129,9 +129,9 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
129
129
  setHideHeaderOverview(b: boolean): void;
130
130
  setHideNoTracksActive(b: boolean): void;
131
131
  setShowGridlines(b: boolean): void;
132
- addToHighlights(highlight: Required<import("@jbrowse/core/util").ParsedLocString>): void;
133
- setHighlight(highlight: Required<import("@jbrowse/core/util").ParsedLocString>[] | undefined): void;
134
- removeHighlight(highlight: Required<import("@jbrowse/core/util").ParsedLocString>): void;
132
+ addToHighlights(highlight: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType): void;
133
+ setHighlight(highlight?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType[]): void;
134
+ removeHighlight(highlight: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType): void;
135
135
  scrollTo(offsetPx: number): number;
136
136
  zoomTo(bpPerPx: number, offset?: number, centerAtOffset?: boolean): number;
137
137
  setOffsets(left?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset, right?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset): void;
@@ -146,7 +146,6 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
146
146
  moveTrackToTop(id: string): void;
147
147
  moveTrackToBottom(id: string): void;
148
148
  moveTrack(movingId: string, targetId: string): void;
149
- closeView(): void;
150
149
  toggleTrack(trackId: string): boolean;
151
150
  setTrackLabels(setting: "overlapping" | "offset" | "hidden"): void;
152
151
  setShowCenterLine(b: boolean): void;
@@ -166,7 +165,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
166
165
  variant?: string;
167
166
  isLeftEndOfDisplayedRegion?: boolean;
168
167
  }[];
169
- afterDisplayedRegionsSet(cb: Function): void;
168
+ afterDisplayedRegionsSet(cb: () => void): void;
170
169
  horizontalScroll(distance: number): number;
171
170
  center(): void;
172
171
  showAllRegions(): void;
@@ -259,7 +258,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
259
258
  showCytobandsSetting: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
260
259
  trackLabels: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
261
260
  showGridlines: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
262
- highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<Required<import("@jbrowse/core/util").ParsedLocString>, Required<import("@jbrowse/core/util").ParsedLocString>, Required<import("@jbrowse/core/util").ParsedLocString>>>, [undefined]>;
261
+ highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType>>, [undefined]>;
263
262
  colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
264
263
  showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
265
264
  }>>, import("mobx-state-tree")._NotCustomized>>;
@@ -323,10 +322,6 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
323
322
  * #action
324
323
  */
325
324
  removeView(view: LGV): void;
326
- /**
327
- * #action
328
- */
329
- closeView(): void;
330
325
  /**
331
326
  * #action
332
327
  */
@@ -205,7 +205,9 @@ function stateModelFactory(pluginManager) {
205
205
  */
206
206
  setWidth(newWidth) {
207
207
  self.width = newWidth;
208
- self.views.forEach(v => v.setWidth(newWidth));
208
+ self.views.forEach(v => {
209
+ v.setWidth(newWidth);
210
+ });
209
211
  },
210
212
  /**
211
213
  * #action
@@ -213,13 +215,6 @@ function stateModelFactory(pluginManager) {
213
215
  removeView(view) {
214
216
  self.views.remove(view);
215
217
  },
216
- /**
217
- * #action
218
- */
219
- closeView() {
220
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
221
- (0, mobx_state_tree_1.getParent)(self, 2).removeView(self);
222
- },
223
218
  /**
224
219
  * #action
225
220
  */
@@ -254,7 +249,6 @@ function stateModelFactory(pluginManager) {
254
249
  }
255
250
  self.setMatchedTrackFeatures(Object.fromEntries(await Promise.all(self.matchedTracks.map(async (track) => [
256
251
  track.configuration.trackId,
257
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
258
252
  await getBlockFeatures(self, track),
259
253
  ]))));
260
254
  }
@@ -270,20 +264,23 @@ function stateModelFactory(pluginManager) {
270
264
  menuItems() {
271
265
  return [
272
266
  ...self.views
273
- .map((view, idx) => { var _a; return [idx, (_a = view.menuItems) === null || _a === void 0 ? void 0 : _a.call(view)]; })
274
- .filter(f => !!f[1])
267
+ .map((view, idx) => [idx, view.menuItems()])
275
268
  .map(f => ({ label: `View ${f[0] + 1} Menu`, subMenu: f[1] })),
276
269
  {
277
270
  label: 'Show intra-view links',
278
271
  type: 'checkbox',
279
272
  checked: self.showIntraviewLinks,
280
- onClick: () => self.toggleIntraviewLinks(),
273
+ onClick: () => {
274
+ self.toggleIntraviewLinks();
275
+ },
281
276
  },
282
277
  {
283
278
  label: 'Allow clicking alignment squiggles?',
284
279
  type: 'checkbox',
285
280
  checked: self.interactToggled,
286
- onClick: () => self.toggleInteract(),
281
+ onClick: () => {
282
+ self.toggleInteract();
283
+ },
287
284
  },
288
285
  {
289
286
  label: 'Link views',
@@ -19,7 +19,6 @@ const util_2 = require("./util");
19
19
  async function renderToSvg(model, opts) {
20
20
  var _a;
21
21
  const { textHeight = 18, headerHeight = 30, rulerHeight = 30, fontSize = 13, trackLabels = 'offset', Wrapper = ({ children }) => children, themeName = 'default', } = opts;
22
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
23
22
  const { createRootFn } = (0, mobx_state_tree_1.getRoot)(model);
24
23
  const session = (0, util_1.getSession)(model);
25
24
  const theme = (_a = session.allThemes) === null || _a === void 0 ? void 0 : _a.call(session)[themeName];
@@ -1,5 +1,7 @@
1
1
  import React from 'react';
2
- declare const BreakpointAlignmentsFeatureDetail: ({ model }: {
3
- model: any;
2
+ declare const BreakpointAlignmentsFeatureDetail: ({ model, }: {
3
+ model: {
4
+ featureData: Record<string, unknown>;
5
+ };
4
6
  }) => React.JSX.Element;
5
7
  export default BreakpointAlignmentsFeatureDetail;
@@ -1,10 +1,8 @@
1
- import Paper from '@mui/material/Paper';
2
- import { observer } from 'mobx-react';
3
1
  import React from 'react';
2
+ import { Paper } from '@mui/material';
3
+ import { observer } from 'mobx-react';
4
4
  import { BaseCoreDetails, BaseAttributes, } from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail';
5
- const BreakpointAlignmentsFeatureDetail = observer(
6
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
- ({ model }) => {
5
+ const BreakpointAlignmentsFeatureDetail = observer(function ({ model, }) {
8
6
  const { feature1, feature2 } = JSON.parse(JSON.stringify(model.featureData));
9
7
  return (React.createElement(Paper, { "data-testid": "alignment-side-drawer" },
10
8
  React.createElement(BaseCoreDetails, { title: "Feature 1", feature: feature1 }),
@@ -47,12 +47,15 @@ export default class BreakpointSplitViewType extends ViewType {
47
47
  mateRefName = assembly.getCanonicalRefName(mate.refName);
48
48
  endPos = mate.start;
49
49
  }
50
+ else {
51
+ endPos = startPos + 1;
52
+ }
50
53
  if (!mateRefName) {
51
54
  throw new Error(`unable to resolve mate refName ${mateRefName} in reference genome`);
52
55
  }
53
56
  const bottomRegion = assembly.regions.find(f => f.refName === mateRefName);
54
57
  if (!topRegion || !bottomRegion) {
55
- throw new Error(`unable to find the refName for the top or bottom of the breakpoint view`);
58
+ throw new Error('unable to find the refName for the top or bottom of the breakpoint view');
56
59
  }
57
60
  const topMarkedRegion = [{ ...topRegion }, { ...topRegion }];
58
61
  const bottomMarkedRegion = [{ ...bottomRegion }, { ...bottomRegion }];
@@ -96,7 +96,11 @@ const AlignmentConnections = observer(function ({ model, trackId, parentRef, get
96
96
  },
97
97
  });
98
98
  (_b = session.showWidget) === null || _b === void 0 ? void 0 : _b.call(session, featureWidget);
99
- }, onMouseOver: () => setMouseoverElt(id), onMouseOut: () => setMouseoverElt(undefined) }));
99
+ }, onMouseOver: () => {
100
+ setMouseoverElt(id);
101
+ }, onMouseOut: () => {
102
+ setMouseoverElt(undefined);
103
+ } }));
100
104
  }
101
105
  return ret;
102
106
  }))) : null;
@@ -82,7 +82,11 @@ const Breakends = observer(function ({ model, trackId, parentRef: ref, getTrackY
82
82
  featureData: (_b = totalFeatures.get(id)) === null || _b === void 0 ? void 0 : _b.toJSON(),
83
83
  });
84
84
  (_c = session.showWidget) === null || _c === void 0 ? void 0 : _c.call(session, featureWidget);
85
- }, onMouseOver: () => setMouseoverElt(id), onMouseOut: () => setMouseoverElt(undefined) }));
85
+ }, onMouseOver: () => {
86
+ setMouseoverElt(id);
87
+ }, onMouseOut: () => {
88
+ setMouseoverElt(undefined);
89
+ } }));
86
90
  }
87
91
  }
88
92
  return ret;
@@ -12,7 +12,7 @@ function TextField2({ children, ...rest }) {
12
12
  React.createElement(TextField, { ...rest }, children)));
13
13
  }
14
14
  function useSvgLocal(key, val) {
15
- return useLocalStorage('svg-' + key, val);
15
+ return useLocalStorage(`svg-${key}`, val);
16
16
  }
17
17
  export default function ExportSvgDialog({ model, handleClose, }) {
18
18
  const session = getSession(model);
@@ -26,19 +26,29 @@ export default function ExportSvgDialog({ model, handleClose, }) {
26
26
  return (React.createElement(Dialog, { open: true, onClose: handleClose, title: "Export SVG" },
27
27
  React.createElement(DialogContent, null,
28
28
  error ? (React.createElement(ErrorMessage, { error: error })) : loading ? (React.createElement(LoadingMessage, null)) : null,
29
- React.createElement(TextField2, { helperText: "filename", value: filename, onChange: event => setFilename(event.target.value) }),
30
- React.createElement(TextField2, { select: true, label: "Track label positioning", variant: "outlined", style: { width: 150 }, value: trackLabels, onChange: event => setTrackLabels(event.target.value) },
29
+ React.createElement(TextField2, { helperText: "filename", value: filename, onChange: event => {
30
+ setFilename(event.target.value);
31
+ } }),
32
+ React.createElement(TextField2, { select: true, label: "Track label positioning", variant: "outlined", style: { width: 150 }, value: trackLabels, onChange: event => {
33
+ setTrackLabels(event.target.value);
34
+ } },
31
35
  React.createElement(MenuItem, { value: "offset" }, "Offset"),
32
36
  React.createElement(MenuItem, { value: "overlay" }, "Overlay"),
33
37
  React.createElement(MenuItem, { value: "left" }, "Left"),
34
38
  React.createElement(MenuItem, { value: "none" }, "None")),
35
39
  React.createElement("br", null),
36
- session.allThemes ? (React.createElement(TextField2, { select: true, label: "Theme", variant: "outlined", value: themeName, onChange: event => setThemeName(event.target.value) }, Object.entries(session.allThemes()).map(([key, val]) => (React.createElement(MenuItem, { key: key, value: key },
40
+ session.allThemes ? (React.createElement(TextField2, { select: true, label: "Theme", variant: "outlined", value: themeName, onChange: event => {
41
+ setThemeName(event.target.value);
42
+ } }, Object.entries(session.allThemes()).map(([key, val]) => (React.createElement(MenuItem, { key: key, value: key },
37
43
  // @ts-expect-error
38
44
  val.name || '(Unknown name)'))))) : null,
39
- offscreenCanvas ? (React.createElement(FormControlLabel, { control: React.createElement(Checkbox, { checked: rasterizeLayers, onChange: () => setRasterizeLayers(val => !val) }), label: "Rasterize canvas based tracks? File may be much larger if this is turned off" })) : (React.createElement(Typography, null, "Note: rasterizing layers not yet supported in this browser, so SVG size may be large"))),
45
+ offscreenCanvas ? (React.createElement(FormControlLabel, { control: React.createElement(Checkbox, { checked: rasterizeLayers, onChange: () => {
46
+ setRasterizeLayers(val => !val);
47
+ } }), label: "Rasterize canvas based tracks? File may be much larger if this is turned off" })) : (React.createElement(Typography, null, "Note: rasterizing layers not yet supported in this browser, so SVG size may be large"))),
40
48
  React.createElement(DialogActions, null,
41
- React.createElement(Button, { variant: "contained", color: "secondary", onClick: () => handleClose() }, "Cancel"),
49
+ React.createElement(Button, { variant: "contained", color: "secondary", onClick: () => {
50
+ handleClose();
51
+ } }, "Cancel"),
42
52
  React.createElement(Button, { variant: "contained", color: "primary", type: "submit", onClick: async () => {
43
53
  setLoading(true);
44
54
  setError(undefined);
@@ -77,7 +77,7 @@ const Translocations = observer(function ({ model, trackId, parentRef: ref, getT
77
77
  'L', // line to
78
78
  x1,
79
79
  y1,
80
- 'L', // line to
80
+ 'L', // line to as const
81
81
  x2,
82
82
  y2,
83
83
  'L', // line to
@@ -90,7 +90,11 @@ const Translocations = observer(function ({ model, trackId, parentRef: ref, getT
90
90
  featureData: (totalFeatures.get(id) || { toJSON: () => { } }).toJSON(),
91
91
  });
92
92
  (_b = session.showWidget) === null || _b === void 0 ? void 0 : _b.call(session, featureWidget);
93
- }, onMouseOver: () => setMouseoverElt(id), onMouseOut: () => setMouseoverElt(undefined) }));
93
+ }, onMouseOver: () => {
94
+ setMouseoverElt(id);
95
+ }, onMouseOut: () => {
96
+ setMouseoverElt(undefined);
97
+ } }));
94
98
  }
95
99
  }
96
100
  return ret;
@@ -62,7 +62,10 @@ export function hasPairedReads(features) {
62
62
  export function findMatchingAlt(feat1, feat2) {
63
63
  const alts = feat1.get('ALT');
64
64
  if (alts) {
65
- return new Map(alts === null || alts === void 0 ? void 0 : alts.map(alt => parseBreakend(alt)).filter(notEmpty).map(bnd => [bnd.MatePosition, bnd])).get(`${feat2.get('refName')}:${feat2.get('start') + 1}`);
65
+ return new Map(alts
66
+ .map(alt => parseBreakend(alt))
67
+ .filter(notEmpty)
68
+ .map(bnd => [bnd.MatePosition, bnd])).get(`${feat2.get('refName')}:${feat2.get('start') + 1}`);
66
69
  }
67
70
  return undefined;
68
71
  }
@@ -61,7 +61,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
61
61
  showCytobandsSetting: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
62
62
  trackLabels: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
63
63
  showGridlines: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
64
- highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<Required<import("@jbrowse/core/util").ParsedLocString>, Required<import("@jbrowse/core/util").ParsedLocString>, Required<import("@jbrowse/core/util").ParsedLocString>>>, [undefined]>;
64
+ highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType>>, [undefined]>;
65
65
  colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
66
66
  showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
67
67
  }, {
@@ -77,7 +77,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
77
77
  minimumBlockWidth: number;
78
78
  draggingTrackId: undefined | string;
79
79
  volatileError: unknown;
80
- afterDisplayedRegionsSetCallbacks: Function[];
80
+ afterDisplayedRegionsSetCallbacks: (() => void)[];
81
81
  scaleFactor: number;
82
82
  trackRefs: Record<string, HTMLDivElement>;
83
83
  coarseDynamicBlocks: import("@jbrowse/core/util/blockTypes").BaseBlock[];
@@ -90,7 +90,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
90
90
  readonly interRegionPaddingWidth: number;
91
91
  readonly assemblyNames: string[];
92
92
  } & {
93
- scaleBarDisplayPrefix(): string;
93
+ scaleBarDisplayPrefix(): string | undefined;
94
94
  MiniControlsComponent(): React.FC<any>;
95
95
  HeaderComponent(): React.FC<any>;
96
96
  readonly assemblyErrors: string;
@@ -105,7 +105,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
105
105
  readonly totalBp: number;
106
106
  readonly maxBpPerPx: number;
107
107
  readonly minBpPerPx: number;
108
- readonly error: {};
108
+ readonly error: unknown;
109
109
  readonly maxOffset: number;
110
110
  readonly minOffset: number;
111
111
  readonly displayedRegionsTotalPx: number;
@@ -129,9 +129,9 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
129
129
  setHideHeaderOverview(b: boolean): void;
130
130
  setHideNoTracksActive(b: boolean): void;
131
131
  setShowGridlines(b: boolean): void;
132
- addToHighlights(highlight: Required<import("@jbrowse/core/util").ParsedLocString>): void;
133
- setHighlight(highlight: Required<import("@jbrowse/core/util").ParsedLocString>[] | undefined): void;
134
- removeHighlight(highlight: Required<import("@jbrowse/core/util").ParsedLocString>): void;
132
+ addToHighlights(highlight: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType): void;
133
+ setHighlight(highlight?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType[]): void;
134
+ removeHighlight(highlight: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType): void;
135
135
  scrollTo(offsetPx: number): number;
136
136
  zoomTo(bpPerPx: number, offset?: number, centerAtOffset?: boolean): number;
137
137
  setOffsets(left?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset, right?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset): void;
@@ -146,7 +146,6 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
146
146
  moveTrackToTop(id: string): void;
147
147
  moveTrackToBottom(id: string): void;
148
148
  moveTrack(movingId: string, targetId: string): void;
149
- closeView(): void;
150
149
  toggleTrack(trackId: string): boolean;
151
150
  setTrackLabels(setting: "overlapping" | "offset" | "hidden"): void;
152
151
  setShowCenterLine(b: boolean): void;
@@ -166,7 +165,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
166
165
  variant?: string;
167
166
  isLeftEndOfDisplayedRegion?: boolean;
168
167
  }[];
169
- afterDisplayedRegionsSet(cb: Function): void;
168
+ afterDisplayedRegionsSet(cb: () => void): void;
170
169
  horizontalScroll(distance: number): number;
171
170
  center(): void;
172
171
  showAllRegions(): void;
@@ -259,7 +258,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
259
258
  showCytobandsSetting: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
260
259
  trackLabels: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
261
260
  showGridlines: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
262
- highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<Required<import("@jbrowse/core/util").ParsedLocString>, Required<import("@jbrowse/core/util").ParsedLocString>, Required<import("@jbrowse/core/util").ParsedLocString>>>, [undefined]>;
261
+ highlight: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").IType<import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType, import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType>>, [undefined]>;
263
262
  colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
264
263
  showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
265
264
  }>>, import("mobx-state-tree")._NotCustomized>>;
@@ -323,10 +322,6 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
323
322
  * #action
324
323
  */
325
324
  removeView(view: LGV): void;
326
- /**
327
- * #action
328
- */
329
- closeView(): void;
330
325
  /**
331
326
  * #action
332
327
  */
@@ -1,5 +1,5 @@
1
1
  import { lazy } from 'react';
2
- import { types, getParent, onAction, addDisposer, getPath, } from 'mobx-state-tree';
2
+ import { types, onAction, addDisposer, getPath, } from 'mobx-state-tree';
3
3
  import { autorun } from 'mobx';
4
4
  import { saveAs } from 'file-saver';
5
5
  import { BaseViewModel } from '@jbrowse/core/pluggableElementTypes/models';
@@ -176,7 +176,9 @@ export default function stateModelFactory(pluginManager) {
176
176
  */
177
177
  setWidth(newWidth) {
178
178
  self.width = newWidth;
179
- self.views.forEach(v => v.setWidth(newWidth));
179
+ self.views.forEach(v => {
180
+ v.setWidth(newWidth);
181
+ });
180
182
  },
181
183
  /**
182
184
  * #action
@@ -184,13 +186,6 @@ export default function stateModelFactory(pluginManager) {
184
186
  removeView(view) {
185
187
  self.views.remove(view);
186
188
  },
187
- /**
188
- * #action
189
- */
190
- closeView() {
191
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
192
- getParent(self, 2).removeView(self);
193
- },
194
189
  /**
195
190
  * #action
196
191
  */
@@ -225,7 +220,6 @@ export default function stateModelFactory(pluginManager) {
225
220
  }
226
221
  self.setMatchedTrackFeatures(Object.fromEntries(await Promise.all(self.matchedTracks.map(async (track) => [
227
222
  track.configuration.trackId,
228
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
229
223
  await getBlockFeatures(self, track),
230
224
  ]))));
231
225
  }
@@ -241,20 +235,23 @@ export default function stateModelFactory(pluginManager) {
241
235
  menuItems() {
242
236
  return [
243
237
  ...self.views
244
- .map((view, idx) => { var _a; return [idx, (_a = view.menuItems) === null || _a === void 0 ? void 0 : _a.call(view)]; })
245
- .filter(f => !!f[1])
238
+ .map((view, idx) => [idx, view.menuItems()])
246
239
  .map(f => ({ label: `View ${f[0] + 1} Menu`, subMenu: f[1] })),
247
240
  {
248
241
  label: 'Show intra-view links',
249
242
  type: 'checkbox',
250
243
  checked: self.showIntraviewLinks,
251
- onClick: () => self.toggleIntraviewLinks(),
244
+ onClick: () => {
245
+ self.toggleIntraviewLinks();
246
+ },
252
247
  },
253
248
  {
254
249
  label: 'Allow clicking alignment squiggles?',
255
250
  type: 'checkbox',
256
251
  checked: self.interactToggled,
257
- onClick: () => self.toggleInteract(),
252
+ onClick: () => {
253
+ self.toggleInteract();
254
+ },
258
255
  },
259
256
  {
260
257
  label: 'Link views',
@@ -13,7 +13,6 @@ import { getTrackNameMaxLen, getTrackOffsets } from './util';
13
13
  export async function renderToSvg(model, opts) {
14
14
  var _a;
15
15
  const { textHeight = 18, headerHeight = 30, rulerHeight = 30, fontSize = 13, trackLabels = 'offset', Wrapper = ({ children }) => children, themeName = 'default', } = opts;
16
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
16
  const { createRootFn } = getRoot(model);
18
17
  const session = getSession(model);
19
18
  const theme = (_a = session.allThemes) === null || _a === void 0 ? void 0 : _a.call(session)[themeName];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbrowse/plugin-breakpoint-split-view",
3
- "version": "2.13.1",
3
+ "version": "2.15.0",
4
4
  "description": "JBrowse 2 breakpoint detail split view",
5
5
  "keywords": [
6
6
  "jbrowse",
@@ -24,7 +24,7 @@
24
24
  ],
25
25
  "scripts": {
26
26
  "build": "npm-run-all build:*",
27
- "test": "cd ../..; jest plugins/breakpoint-split-view",
27
+ "test": "cd ../..; jest --passWithNoTests plugins/breakpoint-split-view",
28
28
  "prepublishOnly": "yarn test",
29
29
  "prepack": "yarn build && yarn useDist",
30
30
  "postpack": "yarn useSrc",
@@ -37,14 +37,14 @@
37
37
  },
38
38
  "dependencies": {
39
39
  "@gmod/vcf": "^5.0.9",
40
- "@mui/icons-material": "^5.0.1",
40
+ "@mui/icons-material": "^6.0.0",
41
41
  "@types/file-saver": "^2.0.1",
42
42
  "file-saver": "^2.0.0"
43
43
  },
44
44
  "peerDependencies": {
45
45
  "@jbrowse/core": "^2.0.0",
46
46
  "@jbrowse/plugin-linear-genome-view": "^2.0.0",
47
- "@mui/material": "^5.0.0",
47
+ "@mui/material": "^6.0.0",
48
48
  "mobx": "^6.0.0",
49
49
  "mobx-react": "^9.0.0",
50
50
  "mobx-state-tree": "^5.0.0",
@@ -58,5 +58,5 @@
58
58
  "publishConfig": {
59
59
  "access": "public"
60
60
  },
61
- "gitHead": "fcebca71cc1d066654603e1a9accfa6c6d4f764d"
61
+ "gitHead": "87eeb1fbf8311dbf88d5e75b5a265f03beffdda8"
62
62
  }