@jbrowse/plugin-breakpoint-split-view 2.13.0 → 2.14.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 +12 -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 +12 -14
  21. package/esm/BreakpointSplitView/model.js +11 -14
  22. package/esm/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.js +0 -1
  23. package/package.json +3 -3
@@ -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,8 +61,9 @@ 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
+ showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
66
67
  }, {
67
68
  width: number;
68
69
  } & {
@@ -76,7 +77,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
76
77
  minimumBlockWidth: number;
77
78
  draggingTrackId: undefined | string;
78
79
  volatileError: unknown;
79
- afterDisplayedRegionsSetCallbacks: Function[];
80
+ afterDisplayedRegionsSetCallbacks: (() => void)[];
80
81
  scaleFactor: number;
81
82
  trackRefs: Record<string, HTMLDivElement>;
82
83
  coarseDynamicBlocks: import("@jbrowse/core/util/blockTypes").BaseBlock[];
@@ -84,12 +85,12 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
84
85
  leftOffset: undefined | import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset;
85
86
  rightOffset: undefined | import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset;
86
87
  } & {
87
- scaleBarDisplayPrefix(): "";
88
88
  readonly trackLabelsSetting: any;
89
89
  readonly width: number;
90
90
  readonly interRegionPaddingWidth: number;
91
91
  readonly assemblyNames: string[];
92
92
  } & {
93
+ scaleBarDisplayPrefix(): string | undefined;
93
94
  MiniControlsComponent(): React.FC<any>;
94
95
  HeaderComponent(): React.FC<any>;
95
96
  readonly assemblyErrors: string;
@@ -104,7 +105,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
104
105
  readonly totalBp: number;
105
106
  readonly maxBpPerPx: number;
106
107
  readonly minBpPerPx: number;
107
- readonly error: {};
108
+ readonly error: unknown;
108
109
  readonly maxOffset: number;
109
110
  readonly minOffset: number;
110
111
  readonly displayedRegionsTotalPx: number;
@@ -119,6 +120,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
119
120
  rewriteOnClicks(trackType: string, viewMenuActions: import("@jbrowse/core/ui").MenuItem[]): void;
120
121
  readonly trackTypeActions: Map<string, import("@jbrowse/core/ui").MenuItem[]>;
121
122
  } & {
123
+ setShowTrackOutlines(arg: boolean): void;
122
124
  setColorByCDS(flag: boolean): void;
123
125
  setShowCytobands(flag: boolean): void;
124
126
  setWidth(newWidth: number): void;
@@ -127,9 +129,9 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
127
129
  setHideHeaderOverview(b: boolean): void;
128
130
  setHideNoTracksActive(b: boolean): void;
129
131
  setShowGridlines(b: boolean): void;
130
- addToHighlights(highlight: Required<import("@jbrowse/core/util").ParsedLocString>): void;
131
- setHighlight(highlight: Required<import("@jbrowse/core/util").ParsedLocString>[] | undefined): void;
132
- 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;
133
135
  scrollTo(offsetPx: number): number;
134
136
  zoomTo(bpPerPx: number, offset?: number, centerAtOffset?: boolean): number;
135
137
  setOffsets(left?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset, right?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset): void;
@@ -144,7 +146,6 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
144
146
  moveTrackToTop(id: string): void;
145
147
  moveTrackToBottom(id: string): void;
146
148
  moveTrack(movingId: string, targetId: string): void;
147
- closeView(): void;
148
149
  toggleTrack(trackId: string): boolean;
149
150
  setTrackLabels(setting: "overlapping" | "offset" | "hidden"): void;
150
151
  setShowCenterLine(b: boolean): void;
@@ -164,7 +165,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
164
165
  variant?: string;
165
166
  isLeftEndOfDisplayedRegion?: boolean;
166
167
  }[];
167
- afterDisplayedRegionsSet(cb: Function): void;
168
+ afterDisplayedRegionsSet(cb: () => void): void;
168
169
  horizontalScroll(distance: number): number;
169
170
  center(): void;
170
171
  showAllRegions(): void;
@@ -257,8 +258,9 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
257
258
  showCytobandsSetting: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
258
259
  trackLabels: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
259
260
  showGridlines: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
260
- 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]>;
261
262
  colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
263
+ showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
262
264
  }>>, import("mobx-state-tree")._NotCustomized>>;
263
265
  }, {
264
266
  width: number;
@@ -320,10 +322,6 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
320
322
  * #action
321
323
  */
322
324
  removeView(view: LGV): void;
323
- /**
324
- * #action
325
- */
326
- closeView(): void;
327
325
  /**
328
326
  * #action
329
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,8 +61,9 @@ 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
+ showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
66
67
  }, {
67
68
  width: number;
68
69
  } & {
@@ -76,7 +77,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
76
77
  minimumBlockWidth: number;
77
78
  draggingTrackId: undefined | string;
78
79
  volatileError: unknown;
79
- afterDisplayedRegionsSetCallbacks: Function[];
80
+ afterDisplayedRegionsSetCallbacks: (() => void)[];
80
81
  scaleFactor: number;
81
82
  trackRefs: Record<string, HTMLDivElement>;
82
83
  coarseDynamicBlocks: import("@jbrowse/core/util/blockTypes").BaseBlock[];
@@ -84,12 +85,12 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
84
85
  leftOffset: undefined | import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset;
85
86
  rightOffset: undefined | import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset;
86
87
  } & {
87
- scaleBarDisplayPrefix(): "";
88
88
  readonly trackLabelsSetting: any;
89
89
  readonly width: number;
90
90
  readonly interRegionPaddingWidth: number;
91
91
  readonly assemblyNames: string[];
92
92
  } & {
93
+ scaleBarDisplayPrefix(): string | undefined;
93
94
  MiniControlsComponent(): React.FC<any>;
94
95
  HeaderComponent(): React.FC<any>;
95
96
  readonly assemblyErrors: string;
@@ -104,7 +105,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
104
105
  readonly totalBp: number;
105
106
  readonly maxBpPerPx: number;
106
107
  readonly minBpPerPx: number;
107
- readonly error: {};
108
+ readonly error: unknown;
108
109
  readonly maxOffset: number;
109
110
  readonly minOffset: number;
110
111
  readonly displayedRegionsTotalPx: number;
@@ -119,6 +120,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
119
120
  rewriteOnClicks(trackType: string, viewMenuActions: import("@jbrowse/core/ui").MenuItem[]): void;
120
121
  readonly trackTypeActions: Map<string, import("@jbrowse/core/ui").MenuItem[]>;
121
122
  } & {
123
+ setShowTrackOutlines(arg: boolean): void;
122
124
  setColorByCDS(flag: boolean): void;
123
125
  setShowCytobands(flag: boolean): void;
124
126
  setWidth(newWidth: number): void;
@@ -127,9 +129,9 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
127
129
  setHideHeaderOverview(b: boolean): void;
128
130
  setHideNoTracksActive(b: boolean): void;
129
131
  setShowGridlines(b: boolean): void;
130
- addToHighlights(highlight: Required<import("@jbrowse/core/util").ParsedLocString>): void;
131
- setHighlight(highlight: Required<import("@jbrowse/core/util").ParsedLocString>[] | undefined): void;
132
- 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;
133
135
  scrollTo(offsetPx: number): number;
134
136
  zoomTo(bpPerPx: number, offset?: number, centerAtOffset?: boolean): number;
135
137
  setOffsets(left?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset, right?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset): void;
@@ -144,7 +146,6 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
144
146
  moveTrackToTop(id: string): void;
145
147
  moveTrackToBottom(id: string): void;
146
148
  moveTrack(movingId: string, targetId: string): void;
147
- closeView(): void;
148
149
  toggleTrack(trackId: string): boolean;
149
150
  setTrackLabels(setting: "overlapping" | "offset" | "hidden"): void;
150
151
  setShowCenterLine(b: boolean): void;
@@ -164,7 +165,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
164
165
  variant?: string;
165
166
  isLeftEndOfDisplayedRegion?: boolean;
166
167
  }[];
167
- afterDisplayedRegionsSet(cb: Function): void;
168
+ afterDisplayedRegionsSet(cb: () => void): void;
168
169
  horizontalScroll(distance: number): number;
169
170
  center(): void;
170
171
  showAllRegions(): void;
@@ -257,8 +258,9 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
257
258
  showCytobandsSetting: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
258
259
  trackLabels: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
259
260
  showGridlines: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
260
- 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]>;
261
262
  colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
263
+ showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
262
264
  }>>, import("mobx-state-tree")._NotCustomized>>;
263
265
  }, {
264
266
  width: number;
@@ -320,10 +322,6 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
320
322
  * #action
321
323
  */
322
324
  removeView(view: LGV): void;
323
- /**
324
- * #action
325
- */
326
- closeView(): void;
327
325
  /**
328
326
  * #action
329
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.0",
3
+ "version": "2.14.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",
@@ -58,5 +58,5 @@
58
58
  "publishConfig": {
59
59
  "access": "public"
60
60
  },
61
- "gitHead": "efe02fb9616e20e929cceeed46eb96420c1b6923"
61
+ "gitHead": "9fb8231d932db40adf0a283081765431756c66ff"
62
62
  }