@jbrowse/plugin-linear-genome-view 3.2.0 → 3.3.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.
@@ -23,7 +23,7 @@ const useStyles = (0, mui_1.makeStyles)()({
23
23
  width: '100%',
24
24
  fontWeight: 'bold',
25
25
  textAlign: 'center',
26
- zIndex: 2000,
26
+ zIndex: 999,
27
27
  boxSizing: 'border-box',
28
28
  },
29
29
  });
@@ -43,7 +43,7 @@ const AddFiltersDialog = (0, mobx_react_1.observer)(function ({ model, handleClo
43
43
  setError(e);
44
44
  }
45
45
  }, [data]);
46
- return ((0, jsx_runtime_1.jsxs)(ui_1.Dialog, { maxWidth: "xl", open: true, onClose: handleClose, title: "Add track filters", children: [(0, jsx_runtime_1.jsxs)(material_1.DialogContent, { children: [(0, jsx_runtime_1.jsxs)("div", { children: ["Add filters, in jexl format, one per line, starting with the string jexl:. Examples:", ' ', (0, jsx_runtime_1.jsxs)("ul", { children: [(0, jsx_runtime_1.jsxs)("li", { children: [(0, jsx_runtime_1.jsx)("code", { children: "jexl:get(feature,'name')=='BRCA1'" }), " - show only feature where the name attribute is BRCA1"] }), (0, jsx_runtime_1.jsxs)("li", { children: [(0, jsx_runtime_1.jsx)("code", { children: "jexl:get(feature,'type')=='gene'" }), " - show only gene type features in a GFF that has many other feature types"] }), (0, jsx_runtime_1.jsxs)("li", { children: [(0, jsx_runtime_1.jsx)("code", { children: "jexl:get(feature,'score') > 400" }), " - show only features that have a score greater than 400"] })] })] }), error ? (0, jsx_runtime_1.jsx)("p", { className: classes.error, children: `${error}` }) : null, (0, jsx_runtime_1.jsx)(material_1.TextField, { variant: "outlined", multiline: true, minRows: 5, maxRows: 10, className: classes.dialogContent, fullWidth: true, value: data, onChange: event => {
46
+ return ((0, jsx_runtime_1.jsxs)(ui_1.Dialog, { maxWidth: "xl", open: true, onClose: handleClose, title: "Add track filters", children: [(0, jsx_runtime_1.jsxs)(material_1.DialogContent, { children: [(0, jsx_runtime_1.jsxs)("div", { children: ["Add filters, in jexl format, one per line, starting with the string jexl:. Examples:", ' ', (0, jsx_runtime_1.jsxs)("ul", { children: [(0, jsx_runtime_1.jsxs)("li", { children: [(0, jsx_runtime_1.jsx)("code", { children: "jexl:get(feature,'name')=='BRCA1'" }), " - show only feature where the name attribute is BRCA1"] }), (0, jsx_runtime_1.jsxs)("li", { children: [(0, jsx_runtime_1.jsx)("code", { children: "jexl:get(feature,'type')=='gene'" }), " - show only gene type features in a GFF that has many other feature types"] }), (0, jsx_runtime_1.jsxs)("li", { children: [(0, jsx_runtime_1.jsx)("code", { children: "jexl:get(feature,'score') > 400" }), " - show only features that have a score greater than 400"] }), (0, jsx_runtime_1.jsxs)("li", { children: [(0, jsx_runtime_1.jsx)("code", { children: "jexl:get(feature,'end') - get(feature,'start') < 1000000" }), ' ', "- show only features with length less than 1Mbp"] })] })] }), error ? (0, jsx_runtime_1.jsx)("p", { className: classes.error, children: `${error}` }) : null, (0, jsx_runtime_1.jsx)(material_1.TextField, { variant: "outlined", multiline: true, minRows: 5, maxRows: 10, className: classes.dialogContent, fullWidth: true, value: data, onChange: event => {
47
47
  setData(event.target.value);
48
48
  }, slotProps: {
49
49
  input: {
@@ -165,7 +165,10 @@ function stateModelFactory(configSchema) {
165
165
  onClick: () => {
166
166
  (0, util_1.getSession)(self).queueDialog(handleClose => [
167
167
  SetMaxHeightDialog,
168
- { model: self, handleClose },
168
+ {
169
+ model: self,
170
+ handleClose,
171
+ },
169
172
  ]);
170
173
  },
171
174
  },
@@ -174,7 +177,10 @@ function stateModelFactory(configSchema) {
174
177
  onClick: () => {
175
178
  (0, util_1.getSession)(self).queueDialog(handleClose => [
176
179
  AddFiltersDialog,
177
- { model: self, handleClose },
180
+ {
181
+ model: self,
182
+ handleClose,
183
+ },
178
184
  ]);
179
185
  },
180
186
  },
@@ -58,9 +58,13 @@ const useStyles = (0, mui_1.makeStyles)()(theme => ({
58
58
  color: theme.palette.text.secondary,
59
59
  },
60
60
  }));
61
+ function ValueLabelComponent(props) {
62
+ const { children, open, value } = props;
63
+ return ((0, jsx_runtime_1.jsx)(material_1.Tooltip, { open: open, enterTouchDelay: 0, placement: "top", title: value, arrow: true, children: children }));
64
+ }
61
65
  const HeaderZoomControls = (0, mobx_react_1.observer)(function ({ model, }) {
62
66
  const { classes } = useStyles();
63
- const { maxBpPerPx, minBpPerPx, bpPerPx } = model;
67
+ const { width, maxBpPerPx, minBpPerPx, bpPerPx } = model;
64
68
  const [value, setValue] = (0, react_1.useState)(-Math.log2(bpPerPx) * 100);
65
69
  (0, react_1.useEffect)(() => {
66
70
  setValue(-Math.log2(bpPerPx) * 100);
@@ -69,7 +73,9 @@ const HeaderZoomControls = (0, mobx_react_1.observer)(function ({ model, }) {
69
73
  const zoomOutDisabled = bpPerPx >= maxBpPerPx - 0.0001;
70
74
  return ((0, jsx_runtime_1.jsxs)("div", { className: classes.container, children: [(0, jsx_runtime_1.jsx)(material_1.Tooltip, { title: "Zoom out 2x", children: (0, jsx_runtime_1.jsx)("span", { children: (0, jsx_runtime_1.jsx)(material_1.IconButton, { "data-testid": "zoom_out", disabled: zoomOutDisabled, onClick: () => {
71
75
  model.zoom(bpPerPx * 2);
72
- }, children: (0, jsx_runtime_1.jsx)(ZoomOut_1.default, {}) }) }) }), (0, jsx_runtime_1.jsx)(material_1.Slider, { size: "small", className: classes.slider, value: value, min: -Math.log2(maxBpPerPx) * 100, max: -Math.log2(minBpPerPx) * 100, onChangeCommitted: () => model.zoomTo(2 ** (-value / 100)), onChange: (_, val) => {
76
+ }, children: (0, jsx_runtime_1.jsx)(ZoomOut_1.default, {}) }) }) }), (0, jsx_runtime_1.jsx)(material_1.Slider, { size: "small", className: classes.slider, value: value, min: -Math.log2(maxBpPerPx) * 100, max: -Math.log2(minBpPerPx) * 100, onChangeCommitted: () => model.zoomTo(2 ** (-value / 100)), valueLabelDisplay: "auto", valueLabelFormat: newValue => `Window size: ${(0, util_1.getBpDisplayStr)(2 ** (-newValue / 100) * width)}`, slots: {
77
+ valueLabel: ValueLabelComponent,
78
+ }, onChange: (_, val) => {
73
79
  setValue(val);
74
80
  } }), (0, jsx_runtime_1.jsx)(material_1.Tooltip, { title: "Zoom in 2x", children: (0, jsx_runtime_1.jsx)("span", { children: (0, jsx_runtime_1.jsx)(material_1.IconButton, { "data-testid": "zoom_in", disabled: zoomInDisabled, onClick: () => {
75
81
  model.zoom(model.bpPerPx / 2);
@@ -70,7 +70,7 @@ const LinearGenomeViewImportForm = (0, mobx_react_1.observer)(function ({ model,
70
70
  session.notify(`${e}`, 'warning');
71
71
  }
72
72
  }
73
- }, children: (0, jsx_runtime_1.jsxs)(material_1.Grid2, { container: true, spacing: 1, justifyContent: "center", alignItems: "center", children: [(0, jsx_runtime_1.jsx)(material_1.FormControl, { children: (0, jsx_runtime_1.jsx)(ui_1.AssemblySelector, { onChange: val => {
73
+ }, children: (0, jsx_runtime_1.jsxs)(material_1.Grid, { container: true, spacing: 1, justifyContent: "center", alignItems: "center", children: [(0, jsx_runtime_1.jsx)(material_1.FormControl, { children: (0, jsx_runtime_1.jsx)(ui_1.AssemblySelector, { onChange: val => {
74
74
  setSelectedAsm(val);
75
75
  }, localStorageKey: "lgv", session: session, selected: selectedAsm }) }), selectedAsm ? (assemblyError ? ((0, jsx_runtime_1.jsx)(Close_1.default, { style: { color: 'red' } })) : assemblyLoaded ? ((0, jsx_runtime_1.jsx)(material_1.FormControl, { children: (0, jsx_runtime_1.jsx)(ImportFormRefNameAutocomplete_1.default, { value: value, setValue: setValue, selectedAsm: selectedAsm, setOption: setOption, model: model }) })) : ((0, jsx_runtime_1.jsx)(material_1.CircularProgress, { size: 20, disableShrink: true }))) : null, (0, jsx_runtime_1.jsx)(material_1.FormControl, { children: (0, jsx_runtime_1.jsx)(material_1.Button, { type: "submit", disabled: !value, className: classes.button, variant: "contained", color: "primary", children: "Open" }) }), (0, jsx_runtime_1.jsx)(material_1.FormControl, { children: (0, jsx_runtime_1.jsx)(material_1.Button, { disabled: !value, className: classes.button, onClick: () => {
76
76
  model.setError(undefined);
@@ -34,10 +34,10 @@ const useStyles = (0, mui_1.makeStyles)()(theme => {
34
34
  function RubberbandSpan({ leftBpOffset, rightBpOffset, numOfBpSelected, left, width, top = 0, sticky = false, }) {
35
35
  const { classes } = useStyles();
36
36
  const [anchorEl, setAnchorEl] = (0, react_1.useState)(null);
37
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [anchorEl ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(RubberbandTooltip_1.default, { side: "left", anchorEl: anchorEl, text: (0, util_1.stringify)(leftBpOffset) }), (0, jsx_runtime_1.jsx)(RubberbandTooltip_1.default, { side: "right", anchorEl: anchorEl, text: (0, util_1.stringify)(rightBpOffset) })] })) : null, (0, jsx_runtime_1.jsx)("div", { className: classes.rubberband, style: { left, width }, children: numOfBpSelected ? ((0, jsx_runtime_1.jsxs)(material_1.Typography, { ref: el => {
37
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [anchorEl ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(RubberbandTooltip_1.default, { side: "left", anchorEl: anchorEl, text: (0, util_1.stringify)(leftBpOffset) }), (0, jsx_runtime_1.jsx)(RubberbandTooltip_1.default, { side: "right", anchorEl: anchorEl, text: (0, util_1.stringify)(rightBpOffset) })] })) : null, (0, jsx_runtime_1.jsx)("div", { className: classes.rubberband, style: { left, width }, children: numOfBpSelected ? ((0, jsx_runtime_1.jsx)(material_1.Typography, { ref: el => {
38
38
  setAnchorEl(el);
39
39
  }, variant: "h6", className: classes.rubberbandText, style: {
40
40
  top,
41
41
  position: sticky ? 'sticky' : undefined,
42
- }, children: [(0, util_1.toLocale)(numOfBpSelected), " bp"] })) : null })] }));
42
+ }, children: (0, util_1.getBpDisplayStr)(numOfBpSelected) })) : null })] }));
43
43
  }
@@ -174,6 +174,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
174
174
  input: string;
175
175
  assembly: Assembly;
176
176
  }): Promise<void>;
177
+ navToLocation(parsedLocString: ParsedLocString, assemblyName?: string): Promise<void>;
177
178
  navToLocations(parsedLocStrings: ParsedLocString[], assemblyName?: string): Promise<void>;
178
179
  navTo(query: NavLocation): void;
179
180
  navToMultiple(locations: NavLocation[]): void;
@@ -856,6 +856,9 @@ function stateModelFactory(pluginManager) {
856
856
  model: self,
857
857
  });
858
858
  },
859
+ async navToLocation(parsedLocString, assemblyName) {
860
+ return this.navToLocations([parsedLocString], assemblyName);
861
+ },
859
862
  async navToLocations(parsedLocStrings, assemblyName) {
860
863
  const { assemblyManager } = (0, util_1.getSession)(self);
861
864
  await (0, mobx_1.when)(() => self.volatileWidth !== undefined);
@@ -20,7 +20,7 @@ const useStyles = makeStyles()({
20
20
  width: '100%',
21
21
  fontWeight: 'bold',
22
22
  textAlign: 'center',
23
- zIndex: 2000,
23
+ zIndex: 999,
24
24
  boxSizing: 'border-box',
25
25
  },
26
26
  });
@@ -41,7 +41,7 @@ const AddFiltersDialog = observer(function ({ model, handleClose, }) {
41
41
  setError(e);
42
42
  }
43
43
  }, [data]);
44
- return (_jsxs(Dialog, { maxWidth: "xl", open: true, onClose: handleClose, title: "Add track filters", children: [_jsxs(DialogContent, { children: [_jsxs("div", { children: ["Add filters, in jexl format, one per line, starting with the string jexl:. Examples:", ' ', _jsxs("ul", { children: [_jsxs("li", { children: [_jsx("code", { children: "jexl:get(feature,'name')=='BRCA1'" }), " - show only feature where the name attribute is BRCA1"] }), _jsxs("li", { children: [_jsx("code", { children: "jexl:get(feature,'type')=='gene'" }), " - show only gene type features in a GFF that has many other feature types"] }), _jsxs("li", { children: [_jsx("code", { children: "jexl:get(feature,'score') > 400" }), " - show only features that have a score greater than 400"] })] })] }), error ? _jsx("p", { className: classes.error, children: `${error}` }) : null, _jsx(TextField, { variant: "outlined", multiline: true, minRows: 5, maxRows: 10, className: classes.dialogContent, fullWidth: true, value: data, onChange: event => {
44
+ return (_jsxs(Dialog, { maxWidth: "xl", open: true, onClose: handleClose, title: "Add track filters", children: [_jsxs(DialogContent, { children: [_jsxs("div", { children: ["Add filters, in jexl format, one per line, starting with the string jexl:. Examples:", ' ', _jsxs("ul", { children: [_jsxs("li", { children: [_jsx("code", { children: "jexl:get(feature,'name')=='BRCA1'" }), " - show only feature where the name attribute is BRCA1"] }), _jsxs("li", { children: [_jsx("code", { children: "jexl:get(feature,'type')=='gene'" }), " - show only gene type features in a GFF that has many other feature types"] }), _jsxs("li", { children: [_jsx("code", { children: "jexl:get(feature,'score') > 400" }), " - show only features that have a score greater than 400"] }), _jsxs("li", { children: [_jsx("code", { children: "jexl:get(feature,'end') - get(feature,'start') < 1000000" }), ' ', "- show only features with length less than 1Mbp"] })] })] }), error ? _jsx("p", { className: classes.error, children: `${error}` }) : null, _jsx(TextField, { variant: "outlined", multiline: true, minRows: 5, maxRows: 10, className: classes.dialogContent, fullWidth: true, value: data, onChange: event => {
45
45
  setData(event.target.value);
46
46
  }, slotProps: {
47
47
  input: {
@@ -127,7 +127,10 @@ function stateModelFactory(configSchema) {
127
127
  onClick: () => {
128
128
  getSession(self).queueDialog(handleClose => [
129
129
  SetMaxHeightDialog,
130
- { model: self, handleClose },
130
+ {
131
+ model: self,
132
+ handleClose,
133
+ },
131
134
  ]);
132
135
  },
133
136
  },
@@ -136,7 +139,10 @@ function stateModelFactory(configSchema) {
136
139
  onClick: () => {
137
140
  getSession(self).queueDialog(handleClose => [
138
141
  AddFiltersDialog,
139
- { model: self, handleClose },
142
+ {
143
+ model: self,
144
+ handleClose,
145
+ },
140
146
  ]);
141
147
  },
142
148
  },
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { lazy, useEffect, useState } from 'react';
3
3
  import CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton';
4
- import { getSession } from '@jbrowse/core/util';
4
+ import { getBpDisplayStr, getSession } from '@jbrowse/core/util';
5
5
  import MoreVert from '@mui/icons-material/MoreVert';
6
6
  import ZoomIn from '@mui/icons-material/ZoomIn';
7
7
  import ZoomOut from '@mui/icons-material/ZoomOut';
@@ -20,9 +20,13 @@ const useStyles = makeStyles()(theme => ({
20
20
  color: theme.palette.text.secondary,
21
21
  },
22
22
  }));
23
+ function ValueLabelComponent(props) {
24
+ const { children, open, value } = props;
25
+ return (_jsx(Tooltip, { open: open, enterTouchDelay: 0, placement: "top", title: value, arrow: true, children: children }));
26
+ }
23
27
  const HeaderZoomControls = observer(function ({ model, }) {
24
28
  const { classes } = useStyles();
25
- const { maxBpPerPx, minBpPerPx, bpPerPx } = model;
29
+ const { width, maxBpPerPx, minBpPerPx, bpPerPx } = model;
26
30
  const [value, setValue] = useState(-Math.log2(bpPerPx) * 100);
27
31
  useEffect(() => {
28
32
  setValue(-Math.log2(bpPerPx) * 100);
@@ -31,7 +35,9 @@ const HeaderZoomControls = observer(function ({ model, }) {
31
35
  const zoomOutDisabled = bpPerPx >= maxBpPerPx - 0.0001;
32
36
  return (_jsxs("div", { className: classes.container, children: [_jsx(Tooltip, { title: "Zoom out 2x", children: _jsx("span", { children: _jsx(IconButton, { "data-testid": "zoom_out", disabled: zoomOutDisabled, onClick: () => {
33
37
  model.zoom(bpPerPx * 2);
34
- }, children: _jsx(ZoomOut, {}) }) }) }), _jsx(Slider, { size: "small", className: classes.slider, value: value, min: -Math.log2(maxBpPerPx) * 100, max: -Math.log2(minBpPerPx) * 100, onChangeCommitted: () => model.zoomTo(2 ** (-value / 100)), onChange: (_, val) => {
38
+ }, children: _jsx(ZoomOut, {}) }) }) }), _jsx(Slider, { size: "small", className: classes.slider, value: value, min: -Math.log2(maxBpPerPx) * 100, max: -Math.log2(minBpPerPx) * 100, onChangeCommitted: () => model.zoomTo(2 ** (-value / 100)), valueLabelDisplay: "auto", valueLabelFormat: newValue => `Window size: ${getBpDisplayStr(2 ** (-newValue / 100) * width)}`, slots: {
39
+ valueLabel: ValueLabelComponent,
40
+ }, onChange: (_, val) => {
35
41
  setValue(val);
36
42
  } }), _jsx(Tooltip, { title: "Zoom in 2x", children: _jsx("span", { children: _jsx(IconButton, { "data-testid": "zoom_in", disabled: zoomInDisabled, onClick: () => {
37
43
  model.zoom(model.bpPerPx / 2);
@@ -3,7 +3,7 @@ import { useEffect, useState } from 'react';
3
3
  import { AssemblySelector, ErrorMessage } from '@jbrowse/core/ui';
4
4
  import { getSession } from '@jbrowse/core/util';
5
5
  import CloseIcon from '@mui/icons-material/Close';
6
- import { Button, CircularProgress, Container, FormControl, Grid2 as Grid, } from '@mui/material';
6
+ import { Button, CircularProgress, Container, FormControl, Grid as Grid, } from '@mui/material';
7
7
  import { observer } from 'mobx-react';
8
8
  import { makeStyles } from 'tss-react/mui';
9
9
  import ImportFormRefNameAutocomplete from './ImportFormRefNameAutocomplete';
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useState } from 'react';
3
- import { stringify, toLocale } from '@jbrowse/core/util';
3
+ import { getBpDisplayStr, stringify } from '@jbrowse/core/util';
4
4
  import { Typography, alpha } from '@mui/material';
5
5
  import { makeStyles } from 'tss-react/mui';
6
6
  import RubberbandTooltip from './RubberbandTooltip';
@@ -28,10 +28,10 @@ const useStyles = makeStyles()(theme => {
28
28
  export default function RubberbandSpan({ leftBpOffset, rightBpOffset, numOfBpSelected, left, width, top = 0, sticky = false, }) {
29
29
  const { classes } = useStyles();
30
30
  const [anchorEl, setAnchorEl] = useState(null);
31
- return (_jsxs(_Fragment, { children: [anchorEl ? (_jsxs(_Fragment, { children: [_jsx(RubberbandTooltip, { side: "left", anchorEl: anchorEl, text: stringify(leftBpOffset) }), _jsx(RubberbandTooltip, { side: "right", anchorEl: anchorEl, text: stringify(rightBpOffset) })] })) : null, _jsx("div", { className: classes.rubberband, style: { left, width }, children: numOfBpSelected ? (_jsxs(Typography, { ref: el => {
31
+ return (_jsxs(_Fragment, { children: [anchorEl ? (_jsxs(_Fragment, { children: [_jsx(RubberbandTooltip, { side: "left", anchorEl: anchorEl, text: stringify(leftBpOffset) }), _jsx(RubberbandTooltip, { side: "right", anchorEl: anchorEl, text: stringify(rightBpOffset) })] })) : null, _jsx("div", { className: classes.rubberband, style: { left, width }, children: numOfBpSelected ? (_jsx(Typography, { ref: el => {
32
32
  setAnchorEl(el);
33
33
  }, variant: "h6", className: classes.rubberbandText, style: {
34
34
  top,
35
35
  position: sticky ? 'sticky' : undefined,
36
- }, children: [toLocale(numOfBpSelected), " bp"] })) : null })] }));
36
+ }, children: getBpDisplayStr(numOfBpSelected) })) : null })] }));
37
37
  }
@@ -174,6 +174,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
174
174
  input: string;
175
175
  assembly: Assembly;
176
176
  }): Promise<void>;
177
+ navToLocation(parsedLocString: ParsedLocString, assemblyName?: string): Promise<void>;
177
178
  navToLocations(parsedLocStrings: ParsedLocString[], assemblyName?: string): Promise<void>;
178
179
  navTo(query: NavLocation): void;
179
180
  navToMultiple(locations: NavLocation[]): void;
@@ -816,6 +816,9 @@ export function stateModelFactory(pluginManager) {
816
816
  model: self,
817
817
  });
818
818
  },
819
+ async navToLocation(parsedLocString, assemblyName) {
820
+ return this.navToLocations([parsedLocString], assemblyName);
821
+ },
819
822
  async navToLocations(parsedLocStrings, assemblyName) {
820
823
  const { assemblyManager } = getSession(self);
821
824
  await when(() => self.volatileWidth !== undefined);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbrowse/plugin-linear-genome-view",
3
- "version": "3.2.0",
3
+ "version": "3.3.0",
4
4
  "description": "JBrowse 2 linear genome view",
5
5
  "keywords": [
6
6
  "jbrowse",
@@ -38,9 +38,9 @@
38
38
  "useSrc": "node ../../scripts/useSrc.js"
39
39
  },
40
40
  "dependencies": {
41
- "@jbrowse/core": "^3.2.0",
42
- "@mui/icons-material": "^6.0.0",
43
- "@mui/material": "^6.0.0",
41
+ "@jbrowse/core": "^3.3.0",
42
+ "@mui/icons-material": "^7.0.0",
43
+ "@mui/material": "^7.0.0",
44
44
  "@types/file-saver": "^2.0.1",
45
45
  "copy-to-clipboard": "^3.3.1",
46
46
  "file-saver": "^2.0.0",
@@ -58,5 +58,5 @@
58
58
  "access": "public"
59
59
  },
60
60
  "module": "esm/index.js",
61
- "gitHead": "c750e3f56706a490c19ba75abd807fec5e38aebf"
61
+ "gitHead": "0bb64d8cc7ecdd167515308b31eec3d9acbc59e4"
62
62
  }