@jbrowse/plugin-linear-comparative-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 (73) hide show
  1. package/dist/LGVSyntenyDisplay/components/LaunchSyntenyViewDialog.js +9 -3
  2. package/dist/LGVSyntenyDisplay/components/util.js +4 -3
  3. package/dist/LGVSyntenyDisplay/model.d.ts +4 -3
  4. package/dist/LaunchLinearSyntenyView.js +7 -3
  5. package/dist/LinearComparativeDisplay/configSchemaF.js +0 -1
  6. package/dist/LinearComparativeDisplay/stateModelFactory.d.ts +3 -3
  7. package/dist/LinearComparativeDisplay/stateModelFactory.js +2 -2
  8. package/dist/LinearComparativeView/components/Header.js +6 -2
  9. package/dist/LinearComparativeView/components/Rubberband.js +9 -9
  10. package/dist/LinearComparativeView/model.d.ts +9 -16
  11. package/dist/LinearComparativeView/model.js +10 -14
  12. package/dist/LinearReadVsRef/LinearReadVsRef.js +6 -4
  13. package/dist/LinearSyntenyDisplay/afterAttach.js +2 -2
  14. package/dist/LinearSyntenyDisplay/components/Component.js +6 -2
  15. package/dist/LinearSyntenyDisplay/components/LinearSyntenyRendering.js +29 -15
  16. package/dist/LinearSyntenyDisplay/components/SyntenyContextMenu.d.ts +4 -1
  17. package/dist/LinearSyntenyDisplay/components/SyntenyContextMenu.js +2 -6
  18. package/dist/LinearSyntenyDisplay/components/SyntenyTooltip.js +1 -1
  19. package/dist/LinearSyntenyDisplay/components/util.d.ts +3 -1
  20. package/dist/LinearSyntenyDisplay/components/util.js +6 -5
  21. package/dist/LinearSyntenyDisplay/drawSynteny.d.ts +1 -1
  22. package/dist/LinearSyntenyDisplay/drawSynteny.js +16 -8
  23. package/dist/LinearSyntenyDisplay/model.d.ts +9 -5
  24. package/dist/LinearSyntenyView/components/ExportSvgDialog.js +16 -6
  25. package/dist/LinearSyntenyView/components/ImportForm/ImportCustomTrack.js +14 -4
  26. package/dist/LinearSyntenyView/components/ImportForm/ImportSyntenyTrackSelector.js +3 -1
  27. package/dist/LinearSyntenyView/components/ImportForm/index.js +15 -5
  28. package/dist/LinearSyntenyView/model.d.ts +9 -11
  29. package/dist/LinearSyntenyView/model.js +3 -1
  30. package/dist/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.js +9 -7
  31. package/dist/index.js +0 -2
  32. package/dist/util.js +4 -3
  33. package/esm/LGVSyntenyDisplay/components/LaunchSyntenyViewDialog.js +9 -3
  34. package/esm/LGVSyntenyDisplay/components/util.js +4 -3
  35. package/esm/LGVSyntenyDisplay/model.d.ts +4 -3
  36. package/esm/LaunchLinearSyntenyView.js +7 -3
  37. package/esm/LinearComparativeDisplay/configSchemaF.js +0 -1
  38. package/esm/LinearComparativeDisplay/stateModelFactory.d.ts +3 -3
  39. package/esm/LinearComparativeDisplay/stateModelFactory.js +2 -2
  40. package/esm/LinearComparativeView/components/Header.js +6 -2
  41. package/esm/LinearComparativeView/components/Rubberband.js +9 -9
  42. package/esm/LinearComparativeView/model.d.ts +9 -16
  43. package/esm/LinearComparativeView/model.js +11 -15
  44. package/esm/LinearReadVsRef/LinearReadVsRef.js +6 -4
  45. package/esm/LinearSyntenyDisplay/afterAttach.js +2 -2
  46. package/esm/LinearSyntenyDisplay/components/Component.js +6 -2
  47. package/esm/LinearSyntenyDisplay/components/LinearSyntenyRendering.js +29 -15
  48. package/esm/LinearSyntenyDisplay/components/SyntenyContextMenu.d.ts +4 -1
  49. package/esm/LinearSyntenyDisplay/components/SyntenyContextMenu.js +2 -6
  50. package/esm/LinearSyntenyDisplay/components/SyntenyTooltip.js +1 -1
  51. package/esm/LinearSyntenyDisplay/components/util.d.ts +3 -1
  52. package/esm/LinearSyntenyDisplay/components/util.js +7 -6
  53. package/esm/LinearSyntenyDisplay/drawSynteny.d.ts +1 -1
  54. package/esm/LinearSyntenyDisplay/drawSynteny.js +16 -8
  55. package/esm/LinearSyntenyDisplay/model.d.ts +9 -5
  56. package/esm/LinearSyntenyView/components/ExportSvgDialog.js +16 -6
  57. package/esm/LinearSyntenyView/components/ImportForm/ImportCustomTrack.js +14 -4
  58. package/esm/LinearSyntenyView/components/ImportForm/ImportSyntenyTrackSelector.js +3 -1
  59. package/esm/LinearSyntenyView/components/ImportForm/index.js +15 -5
  60. package/esm/LinearSyntenyView/model.d.ts +9 -11
  61. package/esm/LinearSyntenyView/model.js +3 -1
  62. package/esm/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.js +9 -7
  63. package/esm/index.js +0 -2
  64. package/esm/util.js +4 -3
  65. package/package.json +5 -5
  66. package/dist/SyntenyFeatureDetail/SyntenyFeatureDetail.d.ts +0 -7
  67. package/dist/SyntenyFeatureDetail/SyntenyFeatureDetail.js +0 -63
  68. package/dist/SyntenyFeatureDetail/index.d.ts +0 -2
  69. package/dist/SyntenyFeatureDetail/index.js +0 -58
  70. package/esm/SyntenyFeatureDetail/SyntenyFeatureDetail.d.ts +0 -7
  71. package/esm/SyntenyFeatureDetail/SyntenyFeatureDetail.js +0 -35
  72. package/esm/SyntenyFeatureDetail/index.d.ts +0 -2
  73. package/esm/SyntenyFeatureDetail/index.js +0 -29
@@ -105,7 +105,9 @@ const OpenTrack = observer(({ assembly1, assembly2, setSessionTrackData, }) => {
105
105
  return (React.createElement(Paper, { style: { padding: 12 } },
106
106
  error ? React.createElement(ErrorMessage, { error: error }) : null,
107
107
  React.createElement(Typography, { style: { textAlign: 'center' } }, "Add a .paf, .out (MashMap), .delta (Mummer), .chain, .anchors or .anchors.simple (MCScan) file to view in the dotplot. These file types can also be gzipped. The first assembly should be the query sequence (e.g. left column of the PAF) and the second assembly should be the target sequence (e.g. right column of the PAF)"),
108
- React.createElement(RadioGroup, { value: radioOption, onChange: event => setValue(event.target.value) },
108
+ React.createElement(RadioGroup, { value: radioOption, onChange: event => {
109
+ setValue(event.target.value);
110
+ } },
109
111
  React.createElement(Grid, { container: true, justifyContent: "center" },
110
112
  React.createElement(Grid, { item: true },
111
113
  React.createElement(FormControlLabel, { value: ".paf", control: React.createElement(Radio, null), label: ".paf" })),
@@ -129,10 +131,18 @@ const OpenTrack = observer(({ assembly1, assembly2, setSessionTrackData, }) => {
129
131
  React.createElement("a", { href: "https://github.com/tanghaibao/jcvi/wiki/MCscan-(Python-version)" }, "(more info)")),
130
132
  React.createElement("div", { style: { display: 'flex' } },
131
133
  React.createElement("div", null,
132
- React.createElement(FileSelector, { name: ".anchors file", description: "", location: fileLocation, setLocation: loc => setFileLocation(loc) })),
134
+ React.createElement(FileSelector, { name: ".anchors file", description: "", location: fileLocation, setLocation: loc => {
135
+ setFileLocation(loc);
136
+ } })),
133
137
  React.createElement("div", null,
134
- React.createElement(FileSelector, { name: "genome 1 .bed (left column of anchors file)", description: "", location: bed1Location, setLocation: loc => setBed1Location(loc) })),
138
+ React.createElement(FileSelector, { name: "genome 1 .bed (left column of anchors file)", description: "", location: bed1Location, setLocation: loc => {
139
+ setBed1Location(loc);
140
+ } })),
135
141
  React.createElement("div", null,
136
- React.createElement(FileSelector, { name: "genome 2 .bed (right column of anchors file)", description: "", location: bed2Location, setLocation: loc => setBed2Location(loc) }))))) : (React.createElement(FileSelector, { name: value ? value + ' location' : '', description: "", location: fileLocation, setLocation: loc => setFileLocation(loc) }))))));
142
+ React.createElement(FileSelector, { name: "genome 2 .bed (right column of anchors file)", description: "", location: bed2Location, setLocation: loc => {
143
+ setBed2Location(loc);
144
+ } }))))) : (React.createElement(FileSelector, { name: value ? `${value} location` : '', description: "", location: fileLocation, setLocation: loc => {
145
+ setFileLocation(loc);
146
+ } }))))));
137
147
  });
138
148
  export default OpenTrack;
@@ -32,6 +32,8 @@ const Selector = observer(({ model, assembly1, assembly2, setShowTrackId, }) =>
32
32
  }, [value, setShowTrackId]);
33
33
  return (React.createElement(Paper, { style: { padding: 12 } },
34
34
  React.createElement(Typography, { paragraph: true }, "Select a track from the select box below, the track will be shown when you hit \"Launch\"."),
35
- filteredTracks.length ? (React.createElement(Select, { value: value, onChange: event => setValue(event.target.value) }, filteredTracks.map(track => (React.createElement(MenuItem, { key: track.trackId, value: track.trackId }, getTrackName(track, session)))))) : (React.createElement(ErrorMessage, { error: `No synteny tracks found for ${assembly1},${assembly2}` }))));
35
+ filteredTracks.length ? (React.createElement(Select, { value: value, onChange: event => {
36
+ setValue(event.target.value);
37
+ } }, filteredTracks.map(track => (React.createElement(MenuItem, { key: track.trackId, value: track.trackId }, getTrackName(track, session)))))) : (React.createElement(ErrorMessage, { error: `No synteny tracks found for ${assembly1},${assembly2}` }))));
36
38
  });
37
39
  export default Selector;
@@ -27,7 +27,9 @@ function TrackSelector({ setSessionTrackData, setShowTrackId, sessionTrackData,
27
27
  return (React.createElement(React.Fragment, null,
28
28
  React.createElement(FormControl, null,
29
29
  React.createElement(FormLabel, { id: "group-label" }, "(Optional) Select or add a synteny track"),
30
- React.createElement(RadioGroup, { row: true, value: choice, onChange: event => setChoice(event.target.value), "aria-labelledby": "group-label" },
30
+ React.createElement(RadioGroup, { row: true, value: choice, onChange: event => {
31
+ setChoice(event.target.value);
32
+ }, "aria-labelledby": "group-label" },
31
33
  React.createElement(FormControlLabel, { value: "none", control: React.createElement(Radio, null), label: "None" }),
32
34
  React.createElement(FormControlLabel, { value: "tracklist", control: React.createElement(Radio, null), label: "Existing track" }),
33
35
  React.createElement(FormControlLabel, { value: "custom", control: React.createElement(Radio, null), label: "New track" }))),
@@ -64,8 +66,12 @@ const LinearSyntenyViewImportForm = observer(function ({ model, }) {
64
66
  displayedRegions: asm.regions,
65
67
  };
66
68
  })));
67
- model.views.forEach(view => view.setWidth(model.width));
68
- model.views.forEach(view => view.showAllRegions());
69
+ model.views.forEach(view => {
70
+ view.setWidth(model.width);
71
+ });
72
+ model.views.forEach(view => {
73
+ view.showAllRegions();
74
+ });
69
75
  if (sessionTrackData) {
70
76
  session.addTrackConf(sessionTrackData);
71
77
  model.toggleTrack(sessionTrackData.trackId);
@@ -89,9 +95,13 @@ const LinearSyntenyViewImportForm = observer(function ({ model, }) {
89
95
  React.createElement("p", { style: { textAlign: 'center' } }, "Select assemblies for linear synteny view"),
90
96
  React.createElement(Grid, { container: true, spacing: 1, justifyContent: "center", alignItems: "center" },
91
97
  React.createElement(Grid, { item: true },
92
- React.createElement(AssemblySelector, { selected: assembly1, onChange: val => setAssembly1(val), session: session })),
98
+ React.createElement(AssemblySelector, { selected: assembly1, onChange: val => {
99
+ setAssembly1(val);
100
+ }, session: session })),
93
101
  React.createElement(Grid, { item: true },
94
- React.createElement(AssemblySelector, { selected: assembly2, onChange: val => setAssembly2(val), session: session })),
102
+ React.createElement(AssemblySelector, { selected: assembly2, onChange: val => {
103
+ setAssembly2(val);
104
+ }, session: session })),
95
105
  React.createElement(Grid, { item: true },
96
106
  React.createElement(FormControl, null,
97
107
  React.createElement(Button, { onClick: onOpenClick, variant: "contained", color: "primary" }, "Launch"))))),
@@ -54,7 +54,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
54
54
  showCytobandsSetting: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
55
55
  trackLabels: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
56
56
  showGridlines: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
57
- 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]>;
57
+ 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]>;
58
58
  colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
59
59
  showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
60
60
  }, {
@@ -70,7 +70,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
70
70
  minimumBlockWidth: number;
71
71
  draggingTrackId: undefined | string;
72
72
  volatileError: unknown;
73
- afterDisplayedRegionsSetCallbacks: Function[];
73
+ afterDisplayedRegionsSetCallbacks: (() => void)[];
74
74
  scaleFactor: number;
75
75
  trackRefs: Record<string, HTMLDivElement>;
76
76
  coarseDynamicBlocks: import("@jbrowse/core/util/blockTypes").BaseBlock[];
@@ -83,7 +83,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
83
83
  readonly interRegionPaddingWidth: number;
84
84
  readonly assemblyNames: string[];
85
85
  } & {
86
- scaleBarDisplayPrefix(): string;
86
+ scaleBarDisplayPrefix(): string | undefined;
87
87
  MiniControlsComponent(): React.FC<any>;
88
88
  HeaderComponent(): React.FC<any>;
89
89
  readonly assemblyErrors: string;
@@ -98,7 +98,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
98
98
  readonly totalBp: number;
99
99
  readonly maxBpPerPx: number;
100
100
  readonly minBpPerPx: number;
101
- readonly error: {};
101
+ readonly error: unknown;
102
102
  readonly maxOffset: number;
103
103
  readonly minOffset: number;
104
104
  readonly displayedRegionsTotalPx: number;
@@ -122,9 +122,9 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
122
122
  setHideHeaderOverview(b: boolean): void;
123
123
  setHideNoTracksActive(b: boolean): void;
124
124
  setShowGridlines(b: boolean): void;
125
- addToHighlights(highlight: Required<import("@jbrowse/core/util").ParsedLocString>): void;
126
- setHighlight(highlight: Required<import("@jbrowse/core/util").ParsedLocString>[] | undefined): void;
127
- removeHighlight(highlight: Required<import("@jbrowse/core/util").ParsedLocString>): void;
125
+ addToHighlights(highlight: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType): void;
126
+ setHighlight(highlight?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType[]): void;
127
+ removeHighlight(highlight: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").HighlightType): void;
128
128
  scrollTo(offsetPx: number): number;
129
129
  zoomTo(bpPerPx: number, offset?: number, centerAtOffset?: boolean): number;
130
130
  setOffsets(left?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset, right?: import("@jbrowse/plugin-linear-genome-view/src/LinearGenomeView").BpOffset): void;
@@ -139,7 +139,6 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
139
139
  moveTrackToTop(id: string): void;
140
140
  moveTrackToBottom(id: string): void;
141
141
  moveTrack(movingId: string, targetId: string): void;
142
- closeView(): void;
143
142
  toggleTrack(trackId: string): boolean;
144
143
  setTrackLabels(setting: "overlapping" | "offset" | "hidden"): void;
145
144
  setShowCenterLine(b: boolean): void;
@@ -159,7 +158,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
159
158
  variant?: string;
160
159
  isLeftEndOfDisplayedRegion?: boolean;
161
160
  }[];
162
- afterDisplayedRegionsSet(cb: Function): void;
161
+ afterDisplayedRegionsSet(cb: () => void): void;
163
162
  horizontalScroll(distance: number): number;
164
163
  center(): void;
165
164
  showAllRegions(): void;
@@ -252,7 +251,7 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
252
251
  showCytobandsSetting: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
253
252
  trackLabels: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
254
253
  showGridlines: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
255
- 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]>;
254
+ 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]>;
256
255
  colorByCDS: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
257
256
  showTrackOutlines: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
258
257
  }>>, import("mobx-state-tree")._NotCustomized>>;
@@ -282,7 +281,6 @@ export default function stateModelFactory(pluginManager: PluginManager): import(
282
281
  setWidth(newWidth: number): void;
283
282
  setViews(views: import("mobx-state-tree").SnapshotIn<import("@jbrowse/plugin-linear-genome-view").LinearGenomeViewModel>[]): void;
284
283
  removeView(view: import("@jbrowse/plugin-linear-genome-view").LinearGenomeViewModel): void;
285
- closeView(): void;
286
284
  setMiddleComparativeHeight(n: number): number;
287
285
  activateTrackSelector(): import("@jbrowse/core/util").Widget | undefined;
288
286
  toggleTrack(trackId: string): boolean;
@@ -51,7 +51,9 @@ export default function stateModelFactory(pluginManager) {
51
51
  */
52
52
  showAllRegions() {
53
53
  transaction(() => {
54
- self.views.forEach(view => view.showAllRegionsInAssembly());
54
+ self.views.forEach(view => {
55
+ view.showAllRegionsInAssembly();
56
+ });
55
57
  });
56
58
  },
57
59
  }))
@@ -19,7 +19,6 @@ export async function renderToSvg(model, opts) {
19
19
  const { width, views, middleComparativeHeight: synH, tracks } = model;
20
20
  const shift = 50;
21
21
  const offset = headerHeight + rulerHeight;
22
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
23
22
  const { createRootFn } = getRoot(model);
24
23
  const heights = views.map(v => totalHeight(v.tracks, textHeight, trackLabels) + offset);
25
24
  const totalHeightSvg = sum(heights) + synH + 100;
@@ -37,11 +36,14 @@ export async function renderToSvg(model, opts) {
37
36
  const renderings = await Promise.all(tracks.map(async (track) => {
38
37
  const d = track.displays[0];
39
38
  await when(() => (d.ready !== undefined ? d.ready : true));
40
- const r = await renderToAbstractCanvas(width, synH, { exportSVG: opts }, ctx => drawRef(d, ctx));
39
+ const r = await renderToAbstractCanvas(width, synH, { exportSVG: opts }, ctx => {
40
+ drawRef(d, ctx);
41
+ return undefined;
42
+ });
41
43
  if ('imageData' in r) {
42
44
  throw new Error('found a canvas in svg export, probably a bug');
43
45
  }
44
- else if ('canvasRecordedData' in r) {
46
+ if ('canvasRecordedData' in r) {
45
47
  return {
46
48
  html: await getSerializedSvg({
47
49
  ...r,
@@ -50,9 +52,7 @@ export async function renderToSvg(model, opts) {
50
52
  }),
51
53
  };
52
54
  }
53
- else {
54
- return r;
55
- }
55
+ return r;
56
56
  }));
57
57
  const trackLabelMaxLen = max(views.flatMap(view => view.tracks.map(t => measureText(getTrackName(t.configuration, session), fontSize))), 0) + 40;
58
58
  const trackLabelOffset = trackLabels === 'left' ? trackLabelMaxLen : 0;
@@ -71,7 +71,9 @@ export async function renderToSvg(model, opts) {
71
71
  React.createElement("defs", null,
72
72
  React.createElement("clipPath", { id: 'synclip' },
73
73
  React.createElement("rect", { x: 0, y: 0, width: width, height: synH }))),
74
- React.createElement("g", { transform: `translate(${shift + trackLabelOffset} ${fontSize + heights[0]})`, clipPath: `url(#synclip)` }, renderings.map((r, i) => (React.createElement(ReactRendering, { key: i, rendering: r })))),
74
+ React.createElement("g", { transform: `translate(${shift + trackLabelOffset} ${fontSize + heights[0]})`, clipPath: 'url(#synclip)' }, renderings.map((r, i) => (
75
+ /* biome-ignore lint/suspicious/noArrayIndexKey: */
76
+ React.createElement(ReactRendering, { key: i, rendering: r })))),
75
77
  React.createElement("g", { transform: `translate(${shift} ${fontSize + heights[0] + synH})` },
76
78
  React.createElement("g", { transform: `translate(${trackLabelOffset})` },
77
79
  React.createElement("text", { x: 0, fontSize: fontSize, ...getFillProps(theme.palette.text.primary) }, views[1].assemblyNames.join(', ')),
package/esm/index.js CHANGED
@@ -8,7 +8,6 @@ import LGVSyntenyDisplayF from './LGVSyntenyDisplay';
8
8
  import LinearSyntenyViewF from './LinearSyntenyView';
9
9
  import LaunchLinearSyntenyViewF from './LaunchLinearSyntenyView';
10
10
  import SyntenyTrackF from './SyntenyTrack';
11
- import SyntenyFeatureWidgetF from './SyntenyFeatureDetail';
12
11
  import LinearReadVsRefMenuItemF from './LinearReadVsRef';
13
12
  export default class LinearComparativeViewPlugin extends Plugin {
14
13
  constructor() {
@@ -23,7 +22,6 @@ export default class LinearComparativeViewPlugin extends Plugin {
23
22
  LGVSyntenyDisplayF(pluginManager);
24
23
  LaunchLinearSyntenyViewF(pluginManager);
25
24
  SyntenyTrackF(pluginManager);
26
- SyntenyFeatureWidgetF(pluginManager);
27
25
  LinearReadVsRefMenuItemF(pluginManager);
28
26
  }
29
27
  configure(pluginManager) {
package/esm/util.js CHANGED
@@ -8,10 +8,11 @@ function heightFromSpecificLevel(views, trackConfigId, level) {
8
8
  .slice(0, level)
9
9
  .map(v => v.height + 7)
10
10
  .reduce((a, b) => a + b, 0);
11
+ const v = views[level];
11
12
  return (heightUpUntilThisPoint +
12
- views[level].headerHeight +
13
- views[level].scaleBarHeight +
14
- getTrackPos(views[level], trackConfigId) +
13
+ v.headerHeight +
14
+ v.scaleBarHeight +
15
+ getTrackPos(v, trackConfigId) +
15
16
  1);
16
17
  }
17
18
  export function getTrackPos(view, trackConfigId) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbrowse/plugin-linear-comparative-view",
3
- "version": "2.13.1",
3
+ "version": "2.15.0",
4
4
  "description": "JBrowse 2 linear comparative 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/linear-comparative-view",
27
+ "test": "cd ../..; jest --passWithNoTests plugins/linear-comparative-view",
28
28
  "prepublishOnly": "yarn test",
29
29
  "prepack": "yarn build && yarn useDist",
30
30
  "postpack": "yarn useSrc",
@@ -37,7 +37,7 @@
37
37
  },
38
38
  "dependencies": {
39
39
  "@floating-ui/react": "^0.26.3",
40
- "@mui/icons-material": "^5.0.1",
40
+ "@mui/icons-material": "^6.0.0",
41
41
  "clone": "^2.1.2",
42
42
  "copy-to-clipboard": "^3.3.1",
43
43
  "file-saver": "^2.0.0"
@@ -46,7 +46,7 @@
46
46
  "@jbrowse/core": "^2.0.0",
47
47
  "@jbrowse/plugin-alignments": "^2.0.0",
48
48
  "@jbrowse/plugin-linear-genome-view": "^2.0.0",
49
- "@mui/material": "^5.0.0",
49
+ "@mui/material": "^6.0.0",
50
50
  "mobx": "^6.0.0",
51
51
  "mobx-react": "^9.0.0",
52
52
  "mobx-state-tree": "^5.0.0",
@@ -61,5 +61,5 @@
61
61
  "publishConfig": {
62
62
  "access": "public"
63
63
  },
64
- "gitHead": "fcebca71cc1d066654603e1a9accfa6c6d4f764d"
64
+ "gitHead": "87eeb1fbf8311dbf88d5e75b5a265f03beffdda8"
65
65
  }
@@ -1,7 +0,0 @@
1
- import React from 'react';
2
- declare const SyntenyFeatureDetail: ({ model, }: {
3
- model: {
4
- featureData: unknown;
5
- };
6
- }) => React.JSX.Element;
7
- export default SyntenyFeatureDetail;
@@ -1,63 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- const react_1 = __importStar(require("react"));
30
- const copy_to_clipboard_1 = __importDefault(require("copy-to-clipboard"));
31
- const material_1 = require("@mui/material");
32
- const mobx_react_1 = require("mobx-react");
33
- const BaseFeatureDetail_1 = require("@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail");
34
- function Formatter({ value }) {
35
- const [show, setShow] = (0, react_1.useState)(false);
36
- const [copied, setCopied] = (0, react_1.useState)(false);
37
- const display = String(value);
38
- if (display.length > 100) {
39
- return (react_1.default.createElement(react_1.default.Fragment, null,
40
- react_1.default.createElement("button", { type: "button", onClick: () => {
41
- (0, copy_to_clipboard_1.default)(display);
42
- setCopied(true);
43
- setTimeout(() => {
44
- setCopied(false);
45
- }, 700);
46
- } }, copied ? 'Copied to clipboard' : 'Copy'),
47
- react_1.default.createElement("button", { type: "button", onClick: () => setShow(val => !val) }, show ? 'Show less' : 'Show more'),
48
- react_1.default.createElement("div", null, show ? display : `${display.slice(0, 100)}...`)));
49
- }
50
- return react_1.default.createElement("div", null, display);
51
- }
52
- function CustomFeatureDetails(props) {
53
- return (react_1.default.createElement(BaseFeatureDetail_1.BaseAttributes, { ...props, formatter: (value) => react_1.default.createElement(Formatter, { value: value }) }));
54
- }
55
- const SyntenyFeatureDetail = (0, mobx_react_1.observer)(function ({ model, }) {
56
- const { feature1, feature2 } = JSON.parse(JSON.stringify(model.featureData));
57
- return (react_1.default.createElement(material_1.Paper, { "data-testid": "alignment-side-drawer" },
58
- react_1.default.createElement(BaseFeatureDetail_1.BaseCoreDetails, { title: "Feature 1", feature: feature1 }),
59
- react_1.default.createElement(BaseFeatureDetail_1.BaseCoreDetails, { title: "Feature 2", feature: feature2 }),
60
- react_1.default.createElement(CustomFeatureDetails, { feature: feature1 }),
61
- react_1.default.createElement(CustomFeatureDetails, { feature: feature2 })));
62
- });
63
- exports.default = SyntenyFeatureDetail;
@@ -1,2 +0,0 @@
1
- import PluginManager from '@jbrowse/core/PluginManager';
2
- export default function SyntenyFeatureWidgetF(pluginManager: PluginManager): void;
@@ -1,58 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.default = SyntenyFeatureWidgetF;
30
- const react_1 = require("react");
31
- const configuration_1 = require("@jbrowse/core/configuration");
32
- const WidgetType_1 = __importDefault(require("@jbrowse/core/pluggableElementTypes/WidgetType"));
33
- const mst_1 = require("@jbrowse/core/util/types/mst");
34
- const mobx_state_tree_1 = require("mobx-state-tree");
35
- const configSchema = (0, configuration_1.ConfigurationSchema)('SyntenyFeatureWidget', {});
36
- const stateModel = mobx_state_tree_1.types
37
- .model('SyntenyFeatureWidget', {
38
- id: mst_1.ElementId,
39
- type: mobx_state_tree_1.types.literal('SyntenyFeatureWidget'),
40
- featureData: mobx_state_tree_1.types.frozen(),
41
- })
42
- .actions(self => ({
43
- setFeatureData(data) {
44
- self.featureData = data;
45
- },
46
- clearFeatureData() {
47
- self.featureData = undefined;
48
- },
49
- }));
50
- function SyntenyFeatureWidgetF(pluginManager) {
51
- pluginManager.addWidgetType(() => new WidgetType_1.default({
52
- name: 'SyntenyFeatureWidget',
53
- heading: 'Synteny feature details',
54
- configSchema,
55
- stateModel,
56
- ReactComponent: (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./SyntenyFeatureDetail')))),
57
- }));
58
- }
@@ -1,7 +0,0 @@
1
- import React from 'react';
2
- declare const SyntenyFeatureDetail: ({ model, }: {
3
- model: {
4
- featureData: unknown;
5
- };
6
- }) => React.JSX.Element;
7
- export default SyntenyFeatureDetail;
@@ -1,35 +0,0 @@
1
- import React, { useState } from 'react';
2
- import copy from 'copy-to-clipboard';
3
- import { Paper } from '@mui/material';
4
- import { observer } from 'mobx-react';
5
- import { BaseCoreDetails, BaseAttributes, } from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail';
6
- function Formatter({ value }) {
7
- const [show, setShow] = useState(false);
8
- const [copied, setCopied] = useState(false);
9
- const display = String(value);
10
- if (display.length > 100) {
11
- return (React.createElement(React.Fragment, null,
12
- React.createElement("button", { type: "button", onClick: () => {
13
- copy(display);
14
- setCopied(true);
15
- setTimeout(() => {
16
- setCopied(false);
17
- }, 700);
18
- } }, copied ? 'Copied to clipboard' : 'Copy'),
19
- React.createElement("button", { type: "button", onClick: () => setShow(val => !val) }, show ? 'Show less' : 'Show more'),
20
- React.createElement("div", null, show ? display : `${display.slice(0, 100)}...`)));
21
- }
22
- return React.createElement("div", null, display);
23
- }
24
- function CustomFeatureDetails(props) {
25
- return (React.createElement(BaseAttributes, { ...props, formatter: (value) => React.createElement(Formatter, { value: value }) }));
26
- }
27
- const SyntenyFeatureDetail = observer(function ({ model, }) {
28
- const { feature1, feature2 } = JSON.parse(JSON.stringify(model.featureData));
29
- return (React.createElement(Paper, { "data-testid": "alignment-side-drawer" },
30
- React.createElement(BaseCoreDetails, { title: "Feature 1", feature: feature1 }),
31
- React.createElement(BaseCoreDetails, { title: "Feature 2", feature: feature2 }),
32
- React.createElement(CustomFeatureDetails, { feature: feature1 }),
33
- React.createElement(CustomFeatureDetails, { feature: feature2 })));
34
- });
35
- export default SyntenyFeatureDetail;
@@ -1,2 +0,0 @@
1
- import PluginManager from '@jbrowse/core/PluginManager';
2
- export default function SyntenyFeatureWidgetF(pluginManager: PluginManager): void;
@@ -1,29 +0,0 @@
1
- import { lazy } from 'react';
2
- import { ConfigurationSchema } from '@jbrowse/core/configuration';
3
- import WidgetType from '@jbrowse/core/pluggableElementTypes/WidgetType';
4
- import { ElementId } from '@jbrowse/core/util/types/mst';
5
- import { types } from 'mobx-state-tree';
6
- const configSchema = ConfigurationSchema('SyntenyFeatureWidget', {});
7
- const stateModel = types
8
- .model('SyntenyFeatureWidget', {
9
- id: ElementId,
10
- type: types.literal('SyntenyFeatureWidget'),
11
- featureData: types.frozen(),
12
- })
13
- .actions(self => ({
14
- setFeatureData(data) {
15
- self.featureData = data;
16
- },
17
- clearFeatureData() {
18
- self.featureData = undefined;
19
- },
20
- }));
21
- export default function SyntenyFeatureWidgetF(pluginManager) {
22
- pluginManager.addWidgetType(() => new WidgetType({
23
- name: 'SyntenyFeatureWidget',
24
- heading: 'Synteny feature details',
25
- configSchema,
26
- stateModel,
27
- ReactComponent: lazy(() => import('./SyntenyFeatureDetail')),
28
- }));
29
- }