@jbrowse/plugin-linear-comparative-view 3.3.0 → 3.4.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.
@@ -201,7 +201,7 @@ declare function stateModelFactory(schema: AnyConfigurationSchemaType): import("
201
201
  } & {
202
202
  addBlock(key: string, block: import("@jbrowse/core/util/blockTypes").BaseBlock): void;
203
203
  deleteBlock(key: string): void;
204
- selectFeature(feature: Feature): void;
204
+ selectFeature(feature: Feature): Promise<void>;
205
205
  navToFeature(feature: Feature): void;
206
206
  clearFeatureSelection(): void;
207
207
  setFeatureIdUnderMouse(feature?: string): void;
@@ -188,13 +188,13 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
188
188
  setCoarseDynamicBlocks(blocks: import("@jbrowse/core/util/blockTypes").BlockSet): void;
189
189
  } & {
190
190
  moveTo(start?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset, end?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset): void;
191
- navToLocString(input: string, optAssemblyName?: string): Promise<void>;
191
+ navToLocString(input: string, optAssemblyName?: string, grow?: number): Promise<void>;
192
192
  navToSearchString({ input, assembly, }: {
193
193
  input: string;
194
194
  assembly: import("@jbrowse/core/assemblyManager/assembly").Assembly;
195
195
  }): Promise<void>;
196
- navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string): Promise<void>;
197
- navToLocations(parsedLocStrings: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string): Promise<void>;
196
+ navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string, grow?: number): Promise<void>;
197
+ navToLocations(regions: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string, grow?: number): Promise<void>;
198
198
  navTo(query: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation): void;
199
199
  navToMultiple(locations: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation[]): void;
200
200
  } & {
@@ -262,9 +262,9 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
262
262
  displayName: string | undefined;
263
263
  tracks: any[];
264
264
  minimized: boolean;
265
- displayedRegions: import("@jbrowse/core/util").Region[];
266
265
  offsetPx: number;
267
266
  bpPerPx: number;
267
+ displayedRegions: import("@jbrowse/core/util").Region[];
268
268
  hideHeader: boolean;
269
269
  hideHeaderOverview: boolean;
270
270
  hideNoTracksActive: boolean;
@@ -503,13 +503,13 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
503
503
  setCoarseDynamicBlocks(blocks: import("@jbrowse/core/util/blockTypes").BlockSet): void;
504
504
  } & {
505
505
  moveTo(start?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset, end?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset): void;
506
- navToLocString(input: string, optAssemblyName?: string): Promise<void>;
506
+ navToLocString(input: string, optAssemblyName?: string, grow?: number): Promise<void>;
507
507
  navToSearchString({ input, assembly, }: {
508
508
  input: string;
509
509
  assembly: import("@jbrowse/core/assemblyManager/assembly").Assembly;
510
510
  }): Promise<void>;
511
- navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string): Promise<void>;
512
- navToLocations(parsedLocStrings: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string): Promise<void>;
511
+ navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string, grow?: number): Promise<void>;
512
+ navToLocations(regions: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string, grow?: number): Promise<void>;
513
513
  navTo(query: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation): void;
514
514
  navToMultiple(locations: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation[]): void;
515
515
  } & {
@@ -577,9 +577,9 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
577
577
  displayName: string | undefined;
578
578
  tracks: any[];
579
579
  minimized: boolean;
580
- displayedRegions: import("@jbrowse/core/util").Region[];
581
580
  offsetPx: number;
582
581
  bpPerPx: number;
582
+ displayedRegions: import("@jbrowse/core/util").Region[];
583
583
  hideHeader: boolean;
584
584
  hideHeaderOverview: boolean;
585
585
  hideNoTracksActive: boolean;
@@ -205,13 +205,13 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
205
205
  setCoarseDynamicBlocks(blocks: import("@jbrowse/core/util/blockTypes").BlockSet): void;
206
206
  } & {
207
207
  moveTo(start?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset, end?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset): void;
208
- navToLocString(input: string, optAssemblyName?: string): Promise<void>;
208
+ navToLocString(input: string, optAssemblyName?: string, grow?: number): Promise<void>;
209
209
  navToSearchString({ input, assembly, }: {
210
210
  input: string;
211
211
  assembly: import("@jbrowse/core/assemblyManager/assembly").Assembly;
212
212
  }): Promise<void>;
213
- navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string): Promise<void>;
214
- navToLocations(parsedLocStrings: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string): Promise<void>;
213
+ navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string, grow?: number): Promise<void>;
214
+ navToLocations(regions: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string, grow?: number): Promise<void>;
215
215
  navTo(query: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation): void;
216
216
  navToMultiple(locations: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation[]): void;
217
217
  } & {
@@ -279,9 +279,9 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
279
279
  displayName: string | undefined;
280
280
  tracks: any[];
281
281
  minimized: boolean;
282
- displayedRegions: import("@jbrowse/core/util").Region[];
283
282
  offsetPx: number;
284
283
  bpPerPx: number;
284
+ displayedRegions: import("@jbrowse/core/util").Region[];
285
285
  hideHeader: boolean;
286
286
  hideHeaderOverview: boolean;
287
287
  hideNoTracksActive: boolean;
@@ -587,13 +587,13 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
587
587
  setCoarseDynamicBlocks(blocks: import("@jbrowse/core/util/blockTypes").BlockSet): void;
588
588
  } & {
589
589
  moveTo(start?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset, end?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset): void;
590
- navToLocString(input: string, optAssemblyName?: string): Promise<void>;
590
+ navToLocString(input: string, optAssemblyName?: string, grow?: number): Promise<void>;
591
591
  navToSearchString({ input, assembly, }: {
592
592
  input: string;
593
593
  assembly: import("@jbrowse/core/assemblyManager/assembly").Assembly;
594
594
  }): Promise<void>;
595
- navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string): Promise<void>;
596
- navToLocations(parsedLocStrings: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string): Promise<void>;
595
+ navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string, grow?: number): Promise<void>;
596
+ navToLocations(regions: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string, grow?: number): Promise<void>;
597
597
  navTo(query: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation): void;
598
598
  navToMultiple(locations: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation[]): void;
599
599
  } & {
@@ -661,9 +661,9 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
661
661
  displayName: string | undefined;
662
662
  tracks: any[];
663
663
  minimized: boolean;
664
- displayedRegions: import("@jbrowse/core/util").Region[];
665
664
  offsetPx: number;
666
665
  bpPerPx: number;
666
+ displayedRegions: import("@jbrowse/core/util").Region[];
667
667
  hideHeader: boolean;
668
668
  hideHeaderOverview: boolean;
669
669
  hideNoTracksActive: boolean;
@@ -73,7 +73,7 @@ async function renderToSvg(model, opts) {
73
73
  const rendering = renderings[i - 1];
74
74
  const height = heights[i];
75
75
  const levelHeight = level.height || 0;
76
- RenderList.push((0, jsx_runtime_1.jsxs)("g", { transform: `translate(0 ${currOffset})`, children: [levelHeight ? ((0, jsx_runtime_1.jsx)("defs", { children: (0, jsx_runtime_1.jsx)("clipPath", { id: `synclip-${i}`, children: (0, jsx_runtime_1.jsx)("rect", { x: 0, y: 0, width: width, height: levelHeight }) }) })) : null, (0, jsx_runtime_1.jsx)("g", { transform: `translate(${shift + trackLabelOffset} ${fontSize})`, clipPath: `url(#synclip-${i})`, children: rendering === null || rendering === void 0 ? void 0 : rendering.map((r, i) => ((0, jsx_runtime_1.jsx)(util_1.ReactRendering, { rendering: r }, i))) }), (0, jsx_runtime_1.jsx)("g", { transform: `translate(0 ${levelHeight})`, children: (0, jsx_runtime_1.jsx)(SVGLinearGenomeView_1.default, { rulerHeight: rulerHeight, shift: shift, trackLabelOffset: trackLabelOffset, textHeight: textHeight, trackLabels: trackLabels, displayResults: displayResults[i], view: view, fontSize: fontSize }, view.id) })] }, view.id));
76
+ RenderList.push((0, jsx_runtime_1.jsxs)("g", { transform: `translate(0 ${currOffset})`, children: [levelHeight ? ((0, jsx_runtime_1.jsx)("defs", { children: (0, jsx_runtime_1.jsx)("clipPath", { id: `synclip-${i}`, children: (0, jsx_runtime_1.jsx)("rect", { x: 0, y: 0, width: width, height: levelHeight }) }) })) : null, (0, jsx_runtime_1.jsx)("g", { transform: `translate(${shift + trackLabelOffset} ${fontSize})`, clipPath: `url(#synclip-${i})`, children: rendering === null || rendering === void 0 ? void 0 : rendering.map((r, i) => (0, jsx_runtime_1.jsx)(util_1.ReactRendering, { rendering: r }, i)) }), (0, jsx_runtime_1.jsx)("g", { transform: `translate(0 ${levelHeight})`, children: (0, jsx_runtime_1.jsx)(SVGLinearGenomeView_1.default, { rulerHeight: rulerHeight, shift: shift, trackLabelOffset: trackLabelOffset, textHeight: textHeight, trackLabels: trackLabels, displayResults: displayResults[i], view: view, fontSize: fontSize }, view.id) })] }, view.id));
77
77
  currOffset += height + fontSize + rulerHeight + levelHeight;
78
78
  }
79
79
  return (0, util_1.renderToStaticMarkup)((0, jsx_runtime_1.jsx)(material_1.ThemeProvider, { theme: theme, children: (0, jsx_runtime_1.jsx)(Wrapper, { children: (0, jsx_runtime_1.jsxs)("svg", { width: width, height: totalHeightSvg, xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", viewBox: [0, 0, w + shift * 2, totalHeightSvg].toString(), children: [(0, jsx_runtime_1.jsx)(SVGBackground_1.default, { width: w, height: totalHeightSvg, shift: shift }), RenderList] }) }) }));
@@ -0,0 +1,3 @@
1
+ export default function Formatter({ value }: {
2
+ value: unknown;
3
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = Formatter;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const react_1 = require("react");
9
+ const copy_to_clipboard_1 = __importDefault(require("copy-to-clipboard"));
10
+ function Formatter({ value }) {
11
+ const [show, setShow] = (0, react_1.useState)(false);
12
+ const [copied, setCopied] = (0, react_1.useState)(false);
13
+ const display = String(value);
14
+ return display.length > 100 ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => {
15
+ (0, copy_to_clipboard_1.default)(display);
16
+ setCopied(true);
17
+ setTimeout(() => {
18
+ setCopied(false);
19
+ }, 700);
20
+ }, children: copied ? 'Copied to clipboard' : 'Copy' }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => {
21
+ setShow(val => !val);
22
+ }, children: show ? 'Show less' : 'Show more' }), (0, jsx_runtime_1.jsx)("div", { children: show ? display : `${display.slice(0, 100)}...` })] })) : ((0, jsx_runtime_1.jsx)("div", { children: display }));
23
+ }
@@ -1,5 +1,7 @@
1
1
  import type { SyntenyFeatureDetailModel } from './types';
2
- declare const LinkToSyntenyView: ({ model, }: {
2
+ import type { SimpleFeatureSerialized } from '@jbrowse/core/util';
3
+ declare const LinkToSyntenyView: ({ model, feat, }: {
3
4
  model: SyntenyFeatureDetailModel;
5
+ feat: SimpleFeatureSerialized;
4
6
  }) => import("react/jsx-runtime").JSX.Element;
5
7
  export default LinkToSyntenyView;
@@ -39,19 +39,19 @@ const util_1 = require("@jbrowse/core/util");
39
39
  const material_1 = require("@mui/material");
40
40
  const mobx_react_1 = require("mobx-react");
41
41
  const LaunchSyntenyViewDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../LGVSyntenyDisplay/components/LaunchSyntenyViewDialog'))));
42
- const LinkToSyntenyView = (0, mobx_react_1.observer)(function ({ model, }) {
43
- const { featureData, view, level, trackId } = model;
42
+ const LinkToSyntenyView = (0, mobx_react_1.observer)(function ({ model, feat, }) {
43
+ const { view, level, trackId } = model;
44
44
  return ((0, jsx_runtime_1.jsxs)("ul", { children: [view.type === 'LinearSyntenyView' ? ((0, jsx_runtime_1.jsx)("li", { children: (0, jsx_runtime_1.jsx)(material_1.Link, { href: "#", onClick: event => {
45
45
  var _a, _b;
46
46
  event.preventDefault();
47
47
  const { views } = view;
48
48
  if (level !== undefined) {
49
- (_a = views[level]) === null || _a === void 0 ? void 0 : _a.navTo(featureData);
50
- (_b = views[level + 1]) === null || _b === void 0 ? void 0 : _b.navTo(featureData.mate);
49
+ (_a = views[level]) === null || _a === void 0 ? void 0 : _a.navTo(feat);
50
+ (_b = views[level + 1]) === null || _b === void 0 ? void 0 : _b.navTo(feat.mate);
51
51
  }
52
52
  else {
53
- const f1 = featureData;
54
- const f2 = featureData.mate;
53
+ const f1 = feat;
54
+ const f2 = feat.mate;
55
55
  const r1 = f1.assemblyName;
56
56
  const r2 = f2.assemblyName;
57
57
  const v1 = views.find(view => view.assemblyNames[0] === r1);
@@ -71,7 +71,7 @@ const LinkToSyntenyView = (0, mobx_react_1.observer)(function ({ model, }) {
71
71
  }
72
72
  }, children: "Center view on this feature" }) })) : null, (0, jsx_runtime_1.jsx)("li", { children: (0, jsx_runtime_1.jsx)(material_1.Link, { href: "#", onClick: event => {
73
73
  event.preventDefault();
74
- const feature = new util_1.SimpleFeature(featureData);
74
+ const feature = new util_1.SimpleFeature(feat);
75
75
  const session = (0, util_1.getSession)(model);
76
76
  session.queueDialog(handleClose => [
77
77
  LaunchSyntenyViewDialog,
@@ -1,5 +1,5 @@
1
1
  import type { SyntenyFeatureDetailModel } from './types';
2
- declare const SyntenyFeatureDetail: ({ model, }: {
2
+ declare const SyntenyFeatureDetail: (props: {
3
3
  model: SyntenyFeatureDetailModel;
4
4
  }) => import("react/jsx-runtime").JSX.Element;
5
5
  export default SyntenyFeatureDetail;
@@ -4,12 +4,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const jsx_runtime_1 = require("react/jsx-runtime");
7
- const BaseFeatureDetail_1 = __importDefault(require("@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail"));
8
7
  const BaseCard_1 = __importDefault(require("@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail/BaseCard"));
8
+ const FeatureDetails_1 = __importDefault(require("@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails"));
9
9
  const material_1 = require("@mui/material");
10
10
  const mobx_react_1 = require("mobx-react");
11
+ const Formatter_1 = __importDefault(require("./Formatter"));
11
12
  const LinkToSyntenyView_1 = __importDefault(require("./LinkToSyntenyView"));
12
- const SyntenyFeatureDetail = (0, mobx_react_1.observer)(function ({ model, }) {
13
- return ((0, jsx_runtime_1.jsxs)(material_1.Paper, { children: [(0, jsx_runtime_1.jsx)(BaseFeatureDetail_1.default, { title: "Feature", model: model }), (0, jsx_runtime_1.jsx)(BaseCard_1.default, { title: "Link to view", children: (0, jsx_runtime_1.jsx)(LinkToSyntenyView_1.default, { model: model }) })] }));
13
+ const SyntenyFeatureDetail = (0, mobx_react_1.observer)(function (props) {
14
+ const { model } = props;
15
+ const { featureData } = model;
16
+ const feat = structuredClone(featureData);
17
+ return feat ? ((0, jsx_runtime_1.jsxs)(material_1.Paper, { children: [(0, jsx_runtime_1.jsx)(FeatureDetails_1.default, { ...props, feature: feat, formatter: value => (0, jsx_runtime_1.jsx)(Formatter_1.default, { value: value }) }), (0, jsx_runtime_1.jsx)(BaseCard_1.default, { title: "Link to view", children: (0, jsx_runtime_1.jsx)(LinkToSyntenyView_1.default, { model: model, feat: feat }) })] })) : ((0, jsx_runtime_1.jsx)("div", { children: "No feature loaded, may not be available after page refresh because it was too large for localStorage" }));
14
18
  });
15
19
  exports.default = SyntenyFeatureDetail;
@@ -1,7 +1,7 @@
1
1
  import type { SimpleFeatureSerialized } from '@jbrowse/core/util';
2
2
  export interface SyntenyFeatureDetailModel {
3
3
  trackId: string;
4
- featureData: SimpleFeatureSerialized;
4
+ featureData?: SimpleFeatureSerialized;
5
5
  level?: number;
6
6
  view: {
7
7
  type: string;
@@ -201,7 +201,7 @@ declare function stateModelFactory(schema: AnyConfigurationSchemaType): import("
201
201
  } & {
202
202
  addBlock(key: string, block: import("@jbrowse/core/util/blockTypes").BaseBlock): void;
203
203
  deleteBlock(key: string): void;
204
- selectFeature(feature: Feature): void;
204
+ selectFeature(feature: Feature): Promise<void>;
205
205
  navToFeature(feature: Feature): void;
206
206
  clearFeatureSelection(): void;
207
207
  setFeatureIdUnderMouse(feature?: string): void;
@@ -188,13 +188,13 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
188
188
  setCoarseDynamicBlocks(blocks: import("@jbrowse/core/util/blockTypes").BlockSet): void;
189
189
  } & {
190
190
  moveTo(start?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset, end?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset): void;
191
- navToLocString(input: string, optAssemblyName?: string): Promise<void>;
191
+ navToLocString(input: string, optAssemblyName?: string, grow?: number): Promise<void>;
192
192
  navToSearchString({ input, assembly, }: {
193
193
  input: string;
194
194
  assembly: import("@jbrowse/core/assemblyManager/assembly").Assembly;
195
195
  }): Promise<void>;
196
- navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string): Promise<void>;
197
- navToLocations(parsedLocStrings: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string): Promise<void>;
196
+ navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string, grow?: number): Promise<void>;
197
+ navToLocations(regions: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string, grow?: number): Promise<void>;
198
198
  navTo(query: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation): void;
199
199
  navToMultiple(locations: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation[]): void;
200
200
  } & {
@@ -262,9 +262,9 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
262
262
  displayName: string | undefined;
263
263
  tracks: any[];
264
264
  minimized: boolean;
265
- displayedRegions: import("@jbrowse/core/util").Region[];
266
265
  offsetPx: number;
267
266
  bpPerPx: number;
267
+ displayedRegions: import("@jbrowse/core/util").Region[];
268
268
  hideHeader: boolean;
269
269
  hideHeaderOverview: boolean;
270
270
  hideNoTracksActive: boolean;
@@ -503,13 +503,13 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
503
503
  setCoarseDynamicBlocks(blocks: import("@jbrowse/core/util/blockTypes").BlockSet): void;
504
504
  } & {
505
505
  moveTo(start?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset, end?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset): void;
506
- navToLocString(input: string, optAssemblyName?: string): Promise<void>;
506
+ navToLocString(input: string, optAssemblyName?: string, grow?: number): Promise<void>;
507
507
  navToSearchString({ input, assembly, }: {
508
508
  input: string;
509
509
  assembly: import("@jbrowse/core/assemblyManager/assembly").Assembly;
510
510
  }): Promise<void>;
511
- navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string): Promise<void>;
512
- navToLocations(parsedLocStrings: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string): Promise<void>;
511
+ navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string, grow?: number): Promise<void>;
512
+ navToLocations(regions: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string, grow?: number): Promise<void>;
513
513
  navTo(query: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation): void;
514
514
  navToMultiple(locations: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation[]): void;
515
515
  } & {
@@ -577,9 +577,9 @@ declare function stateModelFactory(pluginManager: PluginManager): import("mobx-s
577
577
  displayName: string | undefined;
578
578
  tracks: any[];
579
579
  minimized: boolean;
580
- displayedRegions: import("@jbrowse/core/util").Region[];
581
580
  offsetPx: number;
582
581
  bpPerPx: number;
582
+ displayedRegions: import("@jbrowse/core/util").Region[];
583
583
  hideHeader: boolean;
584
584
  hideHeaderOverview: boolean;
585
585
  hideNoTracksActive: boolean;
@@ -205,13 +205,13 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
205
205
  setCoarseDynamicBlocks(blocks: import("@jbrowse/core/util/blockTypes").BlockSet): void;
206
206
  } & {
207
207
  moveTo(start?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset, end?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset): void;
208
- navToLocString(input: string, optAssemblyName?: string): Promise<void>;
208
+ navToLocString(input: string, optAssemblyName?: string, grow?: number): Promise<void>;
209
209
  navToSearchString({ input, assembly, }: {
210
210
  input: string;
211
211
  assembly: import("@jbrowse/core/assemblyManager/assembly").Assembly;
212
212
  }): Promise<void>;
213
- navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string): Promise<void>;
214
- navToLocations(parsedLocStrings: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string): Promise<void>;
213
+ navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string, grow?: number): Promise<void>;
214
+ navToLocations(regions: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string, grow?: number): Promise<void>;
215
215
  navTo(query: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation): void;
216
216
  navToMultiple(locations: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation[]): void;
217
217
  } & {
@@ -279,9 +279,9 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
279
279
  displayName: string | undefined;
280
280
  tracks: any[];
281
281
  minimized: boolean;
282
- displayedRegions: import("@jbrowse/core/util").Region[];
283
282
  offsetPx: number;
284
283
  bpPerPx: number;
284
+ displayedRegions: import("@jbrowse/core/util").Region[];
285
285
  hideHeader: boolean;
286
286
  hideHeaderOverview: boolean;
287
287
  hideNoTracksActive: boolean;
@@ -587,13 +587,13 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
587
587
  setCoarseDynamicBlocks(blocks: import("@jbrowse/core/util/blockTypes").BlockSet): void;
588
588
  } & {
589
589
  moveTo(start?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset, end?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").BpOffset): void;
590
- navToLocString(input: string, optAssemblyName?: string): Promise<void>;
590
+ navToLocString(input: string, optAssemblyName?: string, grow?: number): Promise<void>;
591
591
  navToSearchString({ input, assembly, }: {
592
592
  input: string;
593
593
  assembly: import("@jbrowse/core/assemblyManager/assembly").Assembly;
594
594
  }): Promise<void>;
595
- navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string): Promise<void>;
596
- navToLocations(parsedLocStrings: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string): Promise<void>;
595
+ navToLocation(parsedLocString: import("@jbrowse/core/util").ParsedLocString, assemblyName?: string, grow?: number): Promise<void>;
596
+ navToLocations(regions: import("@jbrowse/core/util").ParsedLocString[], assemblyName?: string, grow?: number): Promise<void>;
597
597
  navTo(query: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation): void;
598
598
  navToMultiple(locations: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView/types").NavLocation[]): void;
599
599
  } & {
@@ -661,9 +661,9 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
661
661
  displayName: string | undefined;
662
662
  tracks: any[];
663
663
  minimized: boolean;
664
- displayedRegions: import("@jbrowse/core/util").Region[];
665
664
  offsetPx: number;
666
665
  bpPerPx: number;
666
+ displayedRegions: import("@jbrowse/core/util").Region[];
667
667
  hideHeader: boolean;
668
668
  hideHeaderOverview: boolean;
669
669
  hideNoTracksActive: boolean;
@@ -67,7 +67,7 @@ export async function renderToSvg(model, opts) {
67
67
  const rendering = renderings[i - 1];
68
68
  const height = heights[i];
69
69
  const levelHeight = level.height || 0;
70
- RenderList.push(_jsxs("g", { transform: `translate(0 ${currOffset})`, children: [levelHeight ? (_jsx("defs", { children: _jsx("clipPath", { id: `synclip-${i}`, children: _jsx("rect", { x: 0, y: 0, width: width, height: levelHeight }) }) })) : null, _jsx("g", { transform: `translate(${shift + trackLabelOffset} ${fontSize})`, clipPath: `url(#synclip-${i})`, children: rendering === null || rendering === void 0 ? void 0 : rendering.map((r, i) => (_jsx(ReactRendering, { rendering: r }, i))) }), _jsx("g", { transform: `translate(0 ${levelHeight})`, children: _jsx(SVGLinearGenomeView, { rulerHeight: rulerHeight, shift: shift, trackLabelOffset: trackLabelOffset, textHeight: textHeight, trackLabels: trackLabels, displayResults: displayResults[i], view: view, fontSize: fontSize }, view.id) })] }, view.id));
70
+ RenderList.push(_jsxs("g", { transform: `translate(0 ${currOffset})`, children: [levelHeight ? (_jsx("defs", { children: _jsx("clipPath", { id: `synclip-${i}`, children: _jsx("rect", { x: 0, y: 0, width: width, height: levelHeight }) }) })) : null, _jsx("g", { transform: `translate(${shift + trackLabelOffset} ${fontSize})`, clipPath: `url(#synclip-${i})`, children: rendering === null || rendering === void 0 ? void 0 : rendering.map((r, i) => _jsx(ReactRendering, { rendering: r }, i)) }), _jsx("g", { transform: `translate(0 ${levelHeight})`, children: _jsx(SVGLinearGenomeView, { rulerHeight: rulerHeight, shift: shift, trackLabelOffset: trackLabelOffset, textHeight: textHeight, trackLabels: trackLabels, displayResults: displayResults[i], view: view, fontSize: fontSize }, view.id) })] }, view.id));
71
71
  currOffset += height + fontSize + rulerHeight + levelHeight;
72
72
  }
73
73
  return renderToStaticMarkup(_jsx(ThemeProvider, { theme: theme, children: _jsx(Wrapper, { children: _jsxs("svg", { width: width, height: totalHeightSvg, xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", viewBox: [0, 0, w + shift * 2, totalHeightSvg].toString(), children: [_jsx(SVGBackground, { width: w, height: totalHeightSvg, shift: shift }), RenderList] }) }) }));
@@ -0,0 +1,3 @@
1
+ export default function Formatter({ value }: {
2
+ value: unknown;
3
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import copy from 'copy-to-clipboard';
4
+ export default function Formatter({ value }) {
5
+ const [show, setShow] = useState(false);
6
+ const [copied, setCopied] = useState(false);
7
+ const display = String(value);
8
+ return display.length > 100 ? (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", onClick: () => {
9
+ copy(display);
10
+ setCopied(true);
11
+ setTimeout(() => {
12
+ setCopied(false);
13
+ }, 700);
14
+ }, children: copied ? 'Copied to clipboard' : 'Copy' }), _jsx("button", { type: "button", onClick: () => {
15
+ setShow(val => !val);
16
+ }, children: show ? 'Show less' : 'Show more' }), _jsx("div", { children: show ? display : `${display.slice(0, 100)}...` })] })) : (_jsx("div", { children: display }));
17
+ }
@@ -1,5 +1,7 @@
1
1
  import type { SyntenyFeatureDetailModel } from './types';
2
- declare const LinkToSyntenyView: ({ model, }: {
2
+ import type { SimpleFeatureSerialized } from '@jbrowse/core/util';
3
+ declare const LinkToSyntenyView: ({ model, feat, }: {
3
4
  model: SyntenyFeatureDetailModel;
5
+ feat: SimpleFeatureSerialized;
4
6
  }) => import("react/jsx-runtime").JSX.Element;
5
7
  export default LinkToSyntenyView;
@@ -4,19 +4,19 @@ import { SimpleFeature, assembleLocString, getSession, } from '@jbrowse/core/uti
4
4
  import { Link } from '@mui/material';
5
5
  import { observer } from 'mobx-react';
6
6
  const LaunchSyntenyViewDialog = lazy(() => import('../LGVSyntenyDisplay/components/LaunchSyntenyViewDialog'));
7
- const LinkToSyntenyView = observer(function ({ model, }) {
8
- const { featureData, view, level, trackId } = model;
7
+ const LinkToSyntenyView = observer(function ({ model, feat, }) {
8
+ const { view, level, trackId } = model;
9
9
  return (_jsxs("ul", { children: [view.type === 'LinearSyntenyView' ? (_jsx("li", { children: _jsx(Link, { href: "#", onClick: event => {
10
10
  var _a, _b;
11
11
  event.preventDefault();
12
12
  const { views } = view;
13
13
  if (level !== undefined) {
14
- (_a = views[level]) === null || _a === void 0 ? void 0 : _a.navTo(featureData);
15
- (_b = views[level + 1]) === null || _b === void 0 ? void 0 : _b.navTo(featureData.mate);
14
+ (_a = views[level]) === null || _a === void 0 ? void 0 : _a.navTo(feat);
15
+ (_b = views[level + 1]) === null || _b === void 0 ? void 0 : _b.navTo(feat.mate);
16
16
  }
17
17
  else {
18
- const f1 = featureData;
19
- const f2 = featureData.mate;
18
+ const f1 = feat;
19
+ const f2 = feat.mate;
20
20
  const r1 = f1.assemblyName;
21
21
  const r2 = f2.assemblyName;
22
22
  const v1 = views.find(view => view.assemblyNames[0] === r1);
@@ -36,7 +36,7 @@ const LinkToSyntenyView = observer(function ({ model, }) {
36
36
  }
37
37
  }, children: "Center view on this feature" }) })) : null, _jsx("li", { children: _jsx(Link, { href: "#", onClick: event => {
38
38
  event.preventDefault();
39
- const feature = new SimpleFeature(featureData);
39
+ const feature = new SimpleFeature(feat);
40
40
  const session = getSession(model);
41
41
  session.queueDialog(handleClose => [
42
42
  LaunchSyntenyViewDialog,
@@ -1,5 +1,5 @@
1
1
  import type { SyntenyFeatureDetailModel } from './types';
2
- declare const SyntenyFeatureDetail: ({ model, }: {
2
+ declare const SyntenyFeatureDetail: (props: {
3
3
  model: SyntenyFeatureDetailModel;
4
4
  }) => import("react/jsx-runtime").JSX.Element;
5
5
  export default SyntenyFeatureDetail;
@@ -1,10 +1,14 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import BaseFeatureDetail from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail';
3
2
  import BaseCard from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail/BaseCard';
3
+ import FeatureDetails from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails';
4
4
  import { Paper } from '@mui/material';
5
5
  import { observer } from 'mobx-react';
6
+ import Formatter from './Formatter';
6
7
  import LinkToSyntenyView from './LinkToSyntenyView';
7
- const SyntenyFeatureDetail = observer(function ({ model, }) {
8
- return (_jsxs(Paper, { children: [_jsx(BaseFeatureDetail, { title: "Feature", model: model }), _jsx(BaseCard, { title: "Link to view", children: _jsx(LinkToSyntenyView, { model: model }) })] }));
8
+ const SyntenyFeatureDetail = observer(function (props) {
9
+ const { model } = props;
10
+ const { featureData } = model;
11
+ const feat = structuredClone(featureData);
12
+ return feat ? (_jsxs(Paper, { children: [_jsx(FeatureDetails, { ...props, feature: feat, formatter: value => _jsx(Formatter, { value: value }) }), _jsx(BaseCard, { title: "Link to view", children: _jsx(LinkToSyntenyView, { model: model, feat: feat }) })] })) : (_jsx("div", { children: "No feature loaded, may not be available after page refresh because it was too large for localStorage" }));
9
13
  });
10
14
  export default SyntenyFeatureDetail;
@@ -1,7 +1,7 @@
1
1
  import type { SimpleFeatureSerialized } from '@jbrowse/core/util';
2
2
  export interface SyntenyFeatureDetailModel {
3
3
  trackId: string;
4
- featureData: SimpleFeatureSerialized;
4
+ featureData?: SimpleFeatureSerialized;
5
5
  level?: number;
6
6
  view: {
7
7
  type: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbrowse/plugin-linear-comparative-view",
3
- "version": "3.3.0",
3
+ "version": "3.4.0",
4
4
  "description": "JBrowse 2 linear comparative view",
5
5
  "keywords": [
6
6
  "jbrowse",
@@ -36,9 +36,9 @@
36
36
  "clean": "rimraf dist esm *.tsbuildinfo"
37
37
  },
38
38
  "dependencies": {
39
- "@jbrowse/core": "^3.3.0",
40
- "@jbrowse/plugin-alignments": "^3.3.0",
41
- "@jbrowse/plugin-linear-genome-view": "^3.3.0",
39
+ "@jbrowse/core": "^3.4.0",
40
+ "@jbrowse/plugin-alignments": "^3.4.0",
41
+ "@jbrowse/plugin-linear-genome-view": "^3.4.0",
42
42
  "@mui/icons-material": "^7.0.0",
43
43
  "@mui/material": "^7.0.0",
44
44
  "copy-to-clipboard": "^3.3.1",
@@ -59,5 +59,5 @@
59
59
  "publishConfig": {
60
60
  "access": "public"
61
61
  },
62
- "gitHead": "0bb64d8cc7ecdd167515308b31eec3d9acbc59e4"
62
+ "gitHead": "a9f1ac35fc2dd810bae92cdaf1fc19995bee4413"
63
63
  }