@jbrowse/plugin-linear-comparative-view 3.5.1 → 3.6.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 (69) hide show
  1. package/dist/LinearComparativeDisplay/stateModelFactory.d.ts +4 -0
  2. package/dist/LinearComparativeDisplay/stateModelFactory.js +14 -7
  3. package/dist/LinearComparativeView/components/Rubberband.d.ts +2 -2
  4. package/dist/LinearComparativeView/components/Rubberband.js +16 -154
  5. package/dist/LinearComparativeView/components/RubberbandSpan.d.ts +15 -0
  6. package/dist/LinearComparativeView/components/RubberbandSpan.js +38 -0
  7. package/dist/LinearComparativeView/components/RubberbandTooltip.d.ts +5 -0
  8. package/dist/LinearComparativeView/components/RubberbandTooltip.js +20 -0
  9. package/dist/LinearComparativeView/components/useRangeSelect.d.ts +59 -0
  10. package/dist/LinearComparativeView/components/useRangeSelect.js +128 -0
  11. package/dist/LinearComparativeView/components/util.d.ts +4 -0
  12. package/dist/LinearComparativeView/components/util.js +6 -0
  13. package/dist/LinearSyntenyDisplay/components/BlockError.d.ts +3 -0
  14. package/dist/LinearSyntenyDisplay/components/BlockError.js +16 -0
  15. package/dist/LinearSyntenyDisplay/components/BlockMessage.d.ts +3 -0
  16. package/dist/LinearSyntenyDisplay/components/BlockMessage.js +24 -0
  17. package/dist/LinearSyntenyDisplay/components/Component.js +11 -50
  18. package/dist/LinearSyntenyDisplay/components/LoadingMessage.d.ts +3 -0
  19. package/dist/LinearSyntenyDisplay/components/LoadingMessage.js +21 -0
  20. package/dist/LinearSyntenyDisplay/model.d.ts +4 -0
  21. package/dist/LinearSyntenyView/components/ImportForm/ImportSyntenyOpenCustomTrack.js +2 -51
  22. package/dist/LinearSyntenyView/components/ImportForm/selectors/AnchorsSelector.d.ts +3 -0
  23. package/dist/LinearSyntenyView/components/ImportForm/selectors/AnchorsSelector.js +13 -0
  24. package/dist/LinearSyntenyView/components/ImportForm/selectors/PifGzSelector.d.ts +3 -0
  25. package/dist/LinearSyntenyView/components/ImportForm/selectors/PifGzSelector.js +13 -0
  26. package/dist/LinearSyntenyView/components/ImportForm/selectors/SelectorTypes.d.ts +19 -0
  27. package/dist/LinearSyntenyView/components/ImportForm/selectors/SelectorTypes.js +10 -0
  28. package/dist/LinearSyntenyView/components/ImportForm/selectors/StandardFormatSelector.d.ts +3 -0
  29. package/dist/LinearSyntenyView/components/ImportForm/selectors/StandardFormatSelector.js +20 -0
  30. package/dist/LinearSyntenyView/components/ImportForm/selectors/SwapAssemblies.d.ts +13 -0
  31. package/dist/LinearSyntenyView/components/ImportForm/selectors/SwapAssemblies.js +32 -0
  32. package/dist/LinearSyntenyView/components/ImportForm/selectors/index.d.ts +4 -0
  33. package/dist/LinearSyntenyView/components/ImportForm/selectors/index.js +27 -0
  34. package/dist/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.js +1 -1
  35. package/esm/LinearComparativeDisplay/stateModelFactory.d.ts +4 -0
  36. package/esm/LinearComparativeDisplay/stateModelFactory.js +14 -7
  37. package/esm/LinearComparativeView/components/Rubberband.d.ts +2 -2
  38. package/esm/LinearComparativeView/components/Rubberband.js +17 -155
  39. package/esm/LinearComparativeView/components/RubberbandSpan.d.ts +15 -0
  40. package/esm/LinearComparativeView/components/RubberbandSpan.js +32 -0
  41. package/esm/LinearComparativeView/components/RubberbandTooltip.d.ts +5 -0
  42. package/esm/LinearComparativeView/components/RubberbandTooltip.js +17 -0
  43. package/esm/LinearComparativeView/components/useRangeSelect.d.ts +59 -0
  44. package/esm/LinearComparativeView/components/useRangeSelect.js +125 -0
  45. package/esm/LinearComparativeView/components/util.d.ts +4 -0
  46. package/esm/LinearComparativeView/components/util.js +3 -0
  47. package/esm/LinearSyntenyDisplay/components/BlockError.d.ts +3 -0
  48. package/esm/LinearSyntenyDisplay/components/BlockError.js +13 -0
  49. package/esm/LinearSyntenyDisplay/components/BlockMessage.d.ts +3 -0
  50. package/esm/LinearSyntenyDisplay/components/BlockMessage.js +21 -0
  51. package/esm/LinearSyntenyDisplay/components/Component.js +9 -48
  52. package/esm/LinearSyntenyDisplay/components/LoadingMessage.d.ts +3 -0
  53. package/esm/LinearSyntenyDisplay/components/LoadingMessage.js +18 -0
  54. package/esm/LinearSyntenyDisplay/model.d.ts +4 -0
  55. package/esm/LinearSyntenyView/components/ImportForm/ImportSyntenyOpenCustomTrack.js +3 -49
  56. package/esm/LinearSyntenyView/components/ImportForm/selectors/AnchorsSelector.d.ts +3 -0
  57. package/esm/LinearSyntenyView/components/ImportForm/selectors/AnchorsSelector.js +8 -0
  58. package/esm/LinearSyntenyView/components/ImportForm/selectors/PifGzSelector.d.ts +3 -0
  59. package/esm/LinearSyntenyView/components/ImportForm/selectors/PifGzSelector.js +8 -0
  60. package/esm/LinearSyntenyView/components/ImportForm/selectors/SelectorTypes.d.ts +19 -0
  61. package/esm/LinearSyntenyView/components/ImportForm/selectors/SelectorTypes.js +7 -0
  62. package/esm/LinearSyntenyView/components/ImportForm/selectors/StandardFormatSelector.d.ts +3 -0
  63. package/esm/LinearSyntenyView/components/ImportForm/selectors/StandardFormatSelector.js +15 -0
  64. package/esm/LinearSyntenyView/components/ImportForm/selectors/SwapAssemblies.d.ts +13 -0
  65. package/esm/LinearSyntenyView/components/ImportForm/selectors/SwapAssemblies.js +27 -0
  66. package/esm/LinearSyntenyView/components/ImportForm/selectors/index.d.ts +4 -0
  67. package/esm/LinearSyntenyView/components/ImportForm/selectors/index.js +4 -0
  68. package/esm/LinearSyntenyView/svgcomponents/SVGLinearSyntenyView.js +1 -1
  69. package/package.json +5 -5
@@ -1,10 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useState } from 'react';
3
3
  import { ErrorMessage, FileSelector } from '@jbrowse/core/ui';
4
- import HelpIcon from '@mui/icons-material/Help';
5
- import { Button, FormControlLabel, Grid, Paper, Radio, RadioGroup, Tooltip, Typography, } from '@mui/material';
4
+ import { FormControlLabel, Grid, Paper, Radio, RadioGroup, Typography, } from '@mui/material';
6
5
  import { observer } from 'mobx-react';
7
6
  import { getAdapter } from './getAdapter';
7
+ import { AnchorsSelector, PifGzSelector, StandardFormatSelector, } from './selectors';
8
8
  import { basename, extName, getName, stripGz } from './util';
9
9
  const ImportSyntenyOpenCustomTrack = observer(function ({ model, assembly1, assembly2, selectedRow, }) {
10
10
  const [swap, setSwap] = useState(false);
@@ -59,13 +59,6 @@ const ImportSyntenyOpenCustomTrack = observer(function ({ model, assembly1, asse
59
59
  indexFileLocation,
60
60
  radioOption,
61
61
  ]);
62
- const helpStrings = {
63
- '.paf': 'minimap2 target.fa query.fa',
64
- '.pif.gz': 'minimap2 target.fa query.fa',
65
- '.out': 'mashmap target.fa query.fa',
66
- '.delta': 'mummer target.fa query.fa',
67
- '.chain': 'e.g. queryToTarget.chain',
68
- };
69
62
  return (_jsxs(Paper, { style: { padding: 12 }, children: [error ? _jsx(ErrorMessage, { error: error }) : null, _jsx(Typography, { style: { textAlign: 'center' }, children: "Add a .paf (minimap2), .delta (Mummer), .chain (UCSC liftover), .anchors or .anchors.simple (MCScan), or .pif.gz (jbrowse CLI make-pif) file to view. These file types can also be gzipped." }), _jsx(RadioGroup, { value: radioOption, onChange: event => {
70
63
  setValue(event.target.value);
71
64
  }, children: _jsx(Grid, { container: true, justifyContent: "center", children: [
@@ -79,46 +72,7 @@ const ImportSyntenyOpenCustomTrack = observer(function ({ model, assembly1, asse
79
72
  ].map(extension => (_jsx(FormControlLabel, { value: extension, control: _jsx(Radio, {}), label: extension }, extension))) }) }), _jsx(Grid, { container: true, justifyContent: "center", children: radioOption === '.paf' ||
80
73
  radioOption === '.out' ||
81
74
  radioOption === '.delta' ||
82
- radioOption === '.chain' ||
83
- radioOption === '.pif.gz' ? (_jsxs("div", { style: {
84
- display: 'flex',
85
- flexDirection: 'column',
86
- gap: 10,
87
- }, children: [_jsx(FileSelector, { name: `${radioOption} location`, inline: true, description: "", location: fileLocation, setLocation: loc => {
88
- setFileLocation(loc);
89
- } }), _jsxs("div", { children: [_jsxs("div", { children: ["Verify or click swap", _jsx(Tooltip, { title: _jsx("code", { children: helpStrings[radioOption] }), children: _jsx(HelpIcon, {}) })] }), _jsxs("div", { style: {
90
- display: 'flex',
91
- gap: 20,
92
- }, children: [_jsxs("div", { style: {
93
- display: 'grid',
94
- gridTemplateColumns: '1fr 1fr',
95
- gap: 4,
96
- alignItems: 'center',
97
- }, children: [_jsx("div", { children: _jsx("i", { children: swap ? assembly2 : assembly1 }) }), _jsx("div", { children: "query assembly" }), _jsx("div", { children: _jsx("i", { children: swap ? assembly1 : assembly2 }) }), _jsx("div", { children: "target assembly" })] }), _jsx(Button, { variant: "contained", onClick: () => {
98
- setSwap(!swap);
99
- }, children: "Swap?" })] })] })] })) : value === '.anchors' || value === '.anchors.simple' ? (_jsxs("div", { children: [_jsxs("div", { style: { margin: 20 }, children: ["Open the ", value, " and .bed files for both genome assemblies from the MCScan (Python version) pipeline", ' ', _jsx("a", { href: "https://github.com/tanghaibao/jcvi/wiki/MCscan-(Python-version)", children: "(more info)" })] }), _jsxs("div", { children: [_jsx(FileSelector, { inline: true, name: value, location: fileLocation, setLocation: loc => {
100
- setFileLocation(loc);
101
- } }), _jsx(FileSelector, { inline: true, name: "genome 1 .bed (left column of anchors file)", description: "", location: bed1Location, setLocation: loc => {
102
- setBed1Location(loc);
103
- } }), _jsx(FileSelector, { inline: true, name: "genome 2 .bed (right column of anchors file)", description: "", location: bed2Location, setLocation: loc => {
104
- setBed2Location(loc);
105
- } })] }), _jsxs("div", { style: {
106
- margin: 'auto',
107
- display: 'flex',
108
- justifyContent: 'center',
109
- gap: 20,
110
- }, children: [_jsxs("div", { style: {
111
- display: 'grid',
112
- gridTemplateColumns: '1fr 1fr',
113
- gap: 4,
114
- alignItems: 'center',
115
- }, children: [_jsx("div", { children: _jsx("i", { children: swap ? assembly2 : assembly1 }) }), _jsx("div", { children: "bed1 assembly" }), _jsx("div", { children: _jsx("i", { children: swap ? assembly1 : assembly2 }) }), _jsx("div", { children: "bed2 assembly" })] }), _jsx(Button, { variant: "contained", onClick: () => {
116
- setSwap(!swap);
117
- }, children: "Swap?" })] })] })) : value === '.pif.gz' ? (_jsxs("div", { style: { display: 'flex' }, children: [_jsx("div", { children: _jsx(FileSelector, { name: `${value} location`, description: "", location: fileLocation, setLocation: loc => {
118
- setFileLocation(loc);
119
- } }) }), _jsx("div", { children: _jsx(FileSelector, { name: `${value} index location`, description: "", location: indexFileLocation, setLocation: loc => {
120
- setIndexFileLocation(loc);
121
- } }) })] })) : (_jsx(FileSelector, { name: value ? `${value} location` : '', description: "", location: fileLocation, setLocation: loc => {
75
+ radioOption === '.chain' ? (_jsx(StandardFormatSelector, { assembly1: assembly1, assembly2: assembly2, swap: swap, setSwap: setSwap, fileLocation: fileLocation, setFileLocation: setFileLocation, radioOption: radioOption })) : radioOption === '.pif.gz' ? (_jsx(PifGzSelector, { assembly1: assembly1, assembly2: assembly2, swap: swap, setSwap: setSwap, fileLocation: fileLocation, setFileLocation: setFileLocation, indexFileLocation: indexFileLocation, setIndexFileLocation: setIndexFileLocation, radioOption: radioOption })) : value === '.anchors' || value === '.anchors.simple' ? (_jsx(AnchorsSelector, { assembly1: assembly1, assembly2: assembly2, swap: swap, setSwap: setSwap, fileLocation: fileLocation, setFileLocation: setFileLocation, bed1Location: bed1Location, setBed1Location: setBed1Location, bed2Location: bed2Location, setBed2Location: setBed2Location, radioOption: value })) : (_jsx(FileSelector, { name: value ? `${value} location` : '', description: "", location: fileLocation, setLocation: loc => {
122
76
  setFileLocation(loc);
123
77
  } })) })] }));
124
78
  });
@@ -0,0 +1,3 @@
1
+ import type { SelectorProps } from './SelectorTypes';
2
+ declare const AnchorsSelector: ({ assembly1, assembly2, swap, setSwap, fileLocation, setFileLocation, bed1Location, setBed1Location, bed2Location, setBed2Location, radioOption, }: SelectorProps) => import("react/jsx-runtime").JSX.Element;
3
+ export default AnchorsSelector;
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { FileSelector } from '@jbrowse/core/ui';
3
+ import { observer } from 'mobx-react';
4
+ import SwapAssemblies from './SwapAssemblies';
5
+ const AnchorsSelector = observer(function ({ assembly1, assembly2, swap, setSwap, fileLocation, setFileLocation, bed1Location = undefined, setBed1Location = () => { }, bed2Location = undefined, setBed2Location = () => { }, radioOption, }) {
6
+ return (_jsxs("div", { children: [_jsxs("div", { style: { margin: 20 }, children: ["Open the ", radioOption, " and .bed files for both genome assemblies from the MCScan (Python version) pipeline", ' ', _jsx("a", { href: "https://github.com/tanghaibao/jcvi/wiki/MCscan-(Python-version)", children: "(more info)" })] }), _jsxs("div", { style: { maxWidth: 400, margin: '0 auto' }, children: [_jsx(FileSelector, { inline: true, name: radioOption, location: fileLocation, setLocation: setFileLocation }), _jsx(FileSelector, { inline: true, name: "genome 1 .bed (left column of anchors file)", description: "", location: bed1Location, setLocation: setBed1Location }), _jsx(FileSelector, { inline: true, name: "genome 2 .bed (right column of anchors file)", description: "", location: bed2Location, setLocation: setBed2Location }), _jsx(SwapAssemblies, { swap: swap, radioOption: radioOption, assembly1: assembly1, assembly2: assembly2, setSwap: setSwap, text1: "bed 1 assembly", text2: "bed 2 assembly" })] })] }));
7
+ });
8
+ export default AnchorsSelector;
@@ -0,0 +1,3 @@
1
+ import type { SelectorProps } from './SelectorTypes';
2
+ declare const PifGzSelector: ({ assembly1, assembly2, swap, setSwap, fileLocation, setFileLocation, indexFileLocation, setIndexFileLocation, radioOption, }: SelectorProps) => import("react/jsx-runtime").JSX.Element;
3
+ export default PifGzSelector;
@@ -0,0 +1,8 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { FileSelector } from '@jbrowse/core/ui';
3
+ import { observer } from 'mobx-react';
4
+ import SwapAssemblies from './SwapAssemblies';
5
+ const PifGzSelector = observer(function ({ assembly1, assembly2, swap, setSwap, fileLocation, setFileLocation, indexFileLocation = undefined, setIndexFileLocation = () => { }, radioOption, }) {
6
+ return (_jsxs("div", { children: [_jsxs("div", { style: { margin: 20 }, children: ["Open the ", radioOption, " and .pif.gz and index file (.pif.gz.tbi or .pif.gz.csi) files for created by `jbrowse make-pif`"] }), _jsxs("div", { style: { maxWidth: 400, margin: '0 auto' }, children: [_jsx(FileSelector, { name: `${radioOption} location`, inline: true, description: "", location: fileLocation, setLocation: setFileLocation }), _jsx(FileSelector, { name: `${radioOption} index location`, inline: true, description: "", location: indexFileLocation, setLocation: setIndexFileLocation }), _jsx(SwapAssemblies, { swap: swap, radioOption: radioOption, assembly1: assembly1, assembly2: assembly2, setSwap: setSwap, text1: "query assembly", text2: "target assembly" })] })] }));
7
+ });
8
+ export default PifGzSelector;
@@ -0,0 +1,19 @@
1
+ import type { FileLocation } from '@jbrowse/core/util/types';
2
+ export interface SelectorProps {
3
+ assembly1: string;
4
+ assembly2: string;
5
+ swap: boolean;
6
+ setSwap?: (swap: boolean) => void;
7
+ fileLocation: FileLocation | undefined;
8
+ setFileLocation: (location: FileLocation | undefined) => void;
9
+ indexFileLocation?: FileLocation | undefined;
10
+ setIndexFileLocation?: (location: FileLocation | undefined) => void;
11
+ bed1Location?: FileLocation | undefined;
12
+ setBed1Location?: (location: FileLocation | undefined) => void;
13
+ bed2Location?: FileLocation | undefined;
14
+ setBed2Location?: (location: FileLocation | undefined) => void;
15
+ radioOption: string;
16
+ }
17
+ export type SetLocationFunction = (location: FileLocation | undefined) => void;
18
+ export type HelpStrings = Record<string, string>;
19
+ export declare const helpStrings: HelpStrings;
@@ -0,0 +1,7 @@
1
+ export const helpStrings = {
2
+ '.paf': 'minimap2 target.fa query.fa',
3
+ '.pif.gz': 'minimap2 target.fa query.fa',
4
+ '.out': 'mashmap target.fa query.fa',
5
+ '.delta': 'mummer target.fa query.fa',
6
+ '.chain': 'e.g. queryToTarget.chain',
7
+ };
@@ -0,0 +1,3 @@
1
+ import type { SelectorProps } from './SelectorTypes';
2
+ declare const StandardFormatSelector: ({ assembly1, assembly2, swap, setSwap, fileLocation, setFileLocation, radioOption, }: SelectorProps) => import("react/jsx-runtime").JSX.Element;
3
+ export default StandardFormatSelector;
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { FileSelector } from '@jbrowse/core/ui';
3
+ import HelpIcon from '@mui/icons-material/Help';
4
+ import { Tooltip } from '@mui/material';
5
+ import { observer } from 'mobx-react';
6
+ import { helpStrings } from './SelectorTypes';
7
+ import SwapAssemblies from './SwapAssemblies';
8
+ const StandardFormatSelector = observer(function ({ assembly1, assembly2, swap, setSwap, fileLocation, setFileLocation, radioOption, }) {
9
+ return (_jsxs("div", { style: {
10
+ display: 'flex',
11
+ flexDirection: 'column',
12
+ gap: 10,
13
+ }, children: [_jsx(FileSelector, { name: `${radioOption} location`, inline: true, description: "", location: fileLocation, setLocation: setFileLocation }), _jsxs("div", { children: [_jsxs("div", { children: ["Verify or click swap", _jsx(Tooltip, { title: _jsx("code", { children: helpStrings[radioOption] }), children: _jsx(HelpIcon, {}) })] }), _jsx(SwapAssemblies, { swap: swap, radioOption: radioOption, assembly1: assembly1, assembly2: assembly2, setSwap: setSwap, text1: "query assembly", text2: "target assembly" })] })] }));
14
+ });
15
+ export default StandardFormatSelector;
@@ -0,0 +1,13 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface SwapAssembliesProps {
3
+ assembly1?: string;
4
+ assembly2?: string;
5
+ swap?: boolean;
6
+ setSwap?: (arg: boolean) => void;
7
+ radioOption: string;
8
+ helpContent?: ReactNode;
9
+ text1: string;
10
+ text2: string;
11
+ }
12
+ declare const SwapAssemblies: ({ assembly1, assembly2, swap, setSwap, radioOption, helpContent, text1, text2, }: SwapAssembliesProps) => import("react/jsx-runtime").JSX.Element;
13
+ export default SwapAssemblies;
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import HelpIcon from '@mui/icons-material/Help';
3
+ import { Button, Tooltip } from '@mui/material';
4
+ import { observer } from 'mobx-react';
5
+ import { makeStyles } from 'tss-react/mui';
6
+ import { helpStrings } from './SelectorTypes';
7
+ const useStyles = makeStyles()({
8
+ row: {
9
+ display: 'flex',
10
+ gap: 20,
11
+ },
12
+ swap: {
13
+ display: 'grid',
14
+ gridTemplateColumns: '1fr 1fr',
15
+ gap: 4,
16
+ alignItems: 'center',
17
+ },
18
+ });
19
+ const SwapAssemblies = observer(function ({ assembly1, assembly2, swap, setSwap, radioOption, helpContent, text1, text2, }) {
20
+ const { classes } = useStyles();
21
+ return (_jsxs("div", { children: [_jsxs("div", { children: ["Verify or click swap", _jsx(Tooltip, { title: helpContent || _jsx("code", { children: helpStrings[radioOption] }), children: _jsx(HelpIcon, {}) })] }), _jsxs("div", { className: classes.row, children: [_jsxs("div", { className: classes.swap, children: [_jsx("div", { children: _jsx("i", { children: swap ? assembly2 : assembly1 }) }), _jsx("div", { children: text1 }), _jsx("div", { children: _jsx("i", { children: swap ? assembly1 : assembly2 }) }), _jsx("div", { children: text2 })] }), _jsx(Button, { variant: "contained", onClick: () => {
22
+ if (setSwap) {
23
+ setSwap(!swap);
24
+ }
25
+ }, children: "Swap?" })] })] }));
26
+ });
27
+ export default SwapAssemblies;
@@ -0,0 +1,4 @@
1
+ export { default as StandardFormatSelector } from './StandardFormatSelector';
2
+ export { default as PifGzSelector } from './PifGzSelector';
3
+ export { default as AnchorsSelector } from './AnchorsSelector';
4
+ export * from './SelectorTypes';
@@ -0,0 +1,4 @@
1
+ export { default as StandardFormatSelector } from './StandardFormatSelector';
2
+ export { default as PifGzSelector } from './PifGzSelector';
3
+ export { default as AnchorsSelector } from './AnchorsSelector';
4
+ export * from './SelectorTypes';
@@ -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] }) }) }));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbrowse/plugin-linear-comparative-view",
3
- "version": "3.5.1",
3
+ "version": "3.6.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.5.1",
40
- "@jbrowse/plugin-alignments": "^3.5.1",
41
- "@jbrowse/plugin-linear-genome-view": "^3.5.1",
39
+ "@jbrowse/core": "^3.6.0",
40
+ "@jbrowse/plugin-alignments": "^3.6.0",
41
+ "@jbrowse/plugin-linear-genome-view": "^3.6.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": "cb8859da9d838ad2594964777c5c54f385d98f5e"
62
+ "gitHead": "133a68815ab348d156c18d83cffc997356c3cfbb"
63
63
  }