@jbrowse/app-core 3.0.5 → 3.1.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.
@@ -1,8 +1,6 @@
1
- import type { IBaseViewModel } from '@jbrowse/core/pluggableElementTypes/models';
2
- declare const ViewContainer: ({ view, onClose, onMinimize, children, }: {
3
- view: IBaseViewModel;
4
- onClose: () => void;
5
- onMinimize: () => void;
6
- children: React.ReactNode;
1
+ import type { AbstractViewModel, SessionWithFocusedViewAndDrawerWidgets } from '@jbrowse/core/util';
2
+ declare const ViewContainer: ({ view, session, }: {
3
+ view: AbstractViewModel;
4
+ session: SessionWithFocusedViewAndDrawerWidgets;
7
5
  }) => import("react/jsx-runtime").JSX.Element;
8
6
  export default ViewContainer;
@@ -10,11 +10,12 @@ const material_1 = require("@mui/material");
10
10
  const mobx_react_1 = require("mobx-react");
11
11
  const mui_1 = require("tss-react/mui");
12
12
  const ViewHeader_1 = __importDefault(require("./ViewHeader"));
13
+ const ViewWrapper_1 = __importDefault(require("./ViewWrapper"));
13
14
  const useStyles = (0, mui_1.makeStyles)()(theme => ({
14
15
  viewContainer: {
15
- overflow: 'hidden',
16
16
  margin: theme.spacing(0.5),
17
17
  padding: `0 ${theme.spacing(1)} ${theme.spacing(1)}`,
18
+ overflow: 'clip',
18
19
  },
19
20
  focusedView: {
20
21
  background: theme.palette.secondary.main,
@@ -23,11 +24,10 @@ const useStyles = (0, mui_1.makeStyles)()(theme => ({
23
24
  background: theme.palette.secondary.dark,
24
25
  },
25
26
  }));
26
- const ViewContainer = (0, mobx_react_1.observer)(function ({ view, onClose, onMinimize, children, }) {
27
+ const ViewContainer = (0, mobx_react_1.observer)(function ({ view, session, }) {
27
28
  const theme = (0, material_1.useTheme)();
28
29
  const ref = (0, util_1.useWidthSetter)(view, theme.spacing(1));
29
30
  const { classes, cx } = useStyles();
30
- const session = (0, util_1.getSession)(view);
31
31
  (0, react_1.useEffect)(() => {
32
32
  function handleSelectView(e) {
33
33
  var _a;
@@ -42,8 +42,14 @@ const ViewContainer = (0, mobx_react_1.observer)(function ({ view, onClose, onMi
42
42
  document.removeEventListener('keydown', handleSelectView);
43
43
  };
44
44
  }, [ref, session, view]);
45
- return ((0, jsx_runtime_1.jsxs)(material_1.Paper, { ref: ref, elevation: 12, className: cx(classes.viewContainer, session.focusedViewId === view.id
46
- ? classes.focusedView
47
- : classes.unfocusedView), children: [(0, jsx_runtime_1.jsx)(ViewHeader_1.default, { view: view, onClose: onClose, onMinimize: onMinimize }), (0, jsx_runtime_1.jsx)(material_1.Paper, { children: children })] }));
45
+ const backgroundColorClassName = session.focusedViewId === view.id
46
+ ? classes.focusedView
47
+ : classes.unfocusedView;
48
+ const viewContainerClassName = cx(classes.viewContainer, backgroundColorClassName);
49
+ return ((0, jsx_runtime_1.jsxs)(material_1.Paper, { ref: ref, elevation: 12, className: viewContainerClassName, children: [(0, jsx_runtime_1.jsx)(ViewHeader_1.default, { view: view, onClose: () => {
50
+ session.removeView(view);
51
+ }, onMinimize: () => {
52
+ view.setMinimized(!view.minimized);
53
+ }, className: backgroundColorClassName }), (0, jsx_runtime_1.jsx)(material_1.Paper, { elevation: 0, children: (0, jsx_runtime_1.jsx)(ViewWrapper_1.default, { view: view, session: session }) })] }));
48
54
  });
49
55
  exports.default = ViewContainer;
@@ -1,7 +1,8 @@
1
1
  import type { IBaseViewModel } from '@jbrowse/core/pluggableElementTypes/models';
2
- declare const ViewHeader: ({ view, onClose, onMinimize, }: {
2
+ declare const ViewHeader: ({ view, onClose, onMinimize, className, }: {
3
3
  view: IBaseViewModel;
4
4
  onClose: () => void;
5
5
  onMinimize: () => void;
6
+ className?: string;
6
7
  }) => import("react/jsx-runtime").JSX.Element;
7
8
  export default ViewHeader;
@@ -5,7 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const jsx_runtime_1 = require("react/jsx-runtime");
7
7
  const react_1 = require("react");
8
+ const ui_1 = require("@jbrowse/core/ui");
8
9
  const util_1 = require("@jbrowse/core/util");
10
+ const product_core_1 = require("@jbrowse/product-core");
9
11
  const Add_1 = __importDefault(require("@mui/icons-material/Add"));
10
12
  const Close_1 = __importDefault(require("@mui/icons-material/Close"));
11
13
  const KeyboardArrowRight_1 = __importDefault(require("@mui/icons-material/KeyboardArrowRight"));
@@ -24,6 +26,10 @@ const useStyles = (0, mui_1.makeStyles)()(theme => ({
24
26
  },
25
27
  viewHeader: {
26
28
  display: 'flex',
29
+ height: ui_1.VIEW_HEADER_HEIGHT,
30
+ top: 0,
31
+ zIndex: 900,
32
+ background: theme.palette.secondary.main,
27
33
  },
28
34
  viewTitle: {
29
35
  display: 'flex',
@@ -34,16 +40,21 @@ const ViewButtons = (0, mobx_react_1.observer)(function ({ view, onClose, onMini
34
40
  const { classes } = useStyles();
35
41
  return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(material_1.IconButton, { "data-testid": "minimize_view", onClick: onMinimize, children: view.minimized ? ((0, jsx_runtime_1.jsx)(Add_1.default, { className: classes.icon, fontSize: "small" })) : ((0, jsx_runtime_1.jsx)(Minimize_1.default, { className: classes.icon, fontSize: "small" })) }), (0, jsx_runtime_1.jsx)(material_1.IconButton, { "data-testid": "close_view", onClick: onClose, children: (0, jsx_runtime_1.jsx)(Close_1.default, { className: classes.icon, fontSize: "small" }) })] }));
36
42
  });
37
- const ViewHeader = (0, mobx_react_1.observer)(function ({ view, onClose, onMinimize, }) {
38
- const { classes } = useStyles();
43
+ const ViewHeader = (0, mobx_react_1.observer)(function ({ view, onClose, onMinimize, className, }) {
44
+ const { classes, cx } = useStyles();
39
45
  const scrollRef = (0, react_1.useRef)(null);
40
46
  const session = (0, util_1.getSession)(view);
47
+ let stickyViewHeaders = false;
48
+ if ((0, product_core_1.isSessionWithMultipleViews)(session)) {
49
+ ;
50
+ ({ stickyViewHeaders } = session);
51
+ }
41
52
  (0, react_1.useEffect)(() => {
42
53
  var _a;
43
54
  if (typeof jest === 'undefined') {
44
55
  (_a = scrollRef.current) === null || _a === void 0 ? void 0 : _a.scrollIntoView({ block: 'center' });
45
56
  }
46
57
  }, []);
47
- return ((0, jsx_runtime_1.jsxs)("div", { ref: scrollRef, className: classes.viewHeader, children: [(0, jsx_runtime_1.jsx)(ViewMenu_1.default, { model: view, IconProps: { className: classes.icon } }), (0, jsx_runtime_1.jsx)("div", { className: classes.grow }), (0, jsx_runtime_1.jsxs)("div", { className: classes.viewTitle, children: [session.focusedViewId === view.id ? ((0, jsx_runtime_1.jsx)(KeyboardArrowRight_1.default, { className: classes.icon, fontSize: "small" })) : null, (0, jsx_runtime_1.jsx)(ViewContainerTitle_1.default, { view: view })] }), (0, jsx_runtime_1.jsx)("div", { className: classes.grow }), (0, jsx_runtime_1.jsx)(ViewButtons, { onClose: onClose, onMinimize: onMinimize, view: view })] }));
58
+ return ((0, jsx_runtime_1.jsxs)("div", { ref: scrollRef, className: cx(classes.viewHeader, className), style: { position: stickyViewHeaders ? 'sticky' : undefined }, children: [(0, jsx_runtime_1.jsx)(ViewMenu_1.default, { model: view, IconProps: { className: classes.icon } }), (0, jsx_runtime_1.jsx)("div", { className: classes.grow }), (0, jsx_runtime_1.jsxs)("div", { className: classes.viewTitle, children: [session.focusedViewId === view.id ? ((0, jsx_runtime_1.jsx)(KeyboardArrowRight_1.default, { className: classes.icon, fontSize: "small" })) : null, (0, jsx_runtime_1.jsx)(ViewContainerTitle_1.default, { view: view })] }), (0, jsx_runtime_1.jsx)("div", { className: classes.grow }), (0, jsx_runtime_1.jsx)(ViewButtons, { onClose: onClose, onMinimize: onMinimize, view: view })] }));
48
59
  });
49
60
  exports.default = ViewHeader;
@@ -0,0 +1,6 @@
1
+ import type { AbstractViewModel, SessionWithFocusedViewAndDrawerWidgets } from '@jbrowse/core/util';
2
+ declare const ViewWrapper: ({ view, session, }: {
3
+ view: AbstractViewModel;
4
+ session: SessionWithFocusedViewAndDrawerWidgets;
5
+ }) => import("react/jsx-runtime").JSX.Element | null;
6
+ export default ViewWrapper;
@@ -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
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const react_1 = require("react");
8
+ const LoadingEllipses_1 = __importDefault(require("@jbrowse/core/ui/LoadingEllipses"));
9
+ const util_1 = require("@jbrowse/core/util");
10
+ const mobx_react_1 = require("mobx-react");
11
+ const ViewWrapper = (0, mobx_react_1.observer)(function ({ view, session, }) {
12
+ const { pluginManager } = (0, util_1.getEnv)(session);
13
+ const viewType = pluginManager.getViewType(view.type);
14
+ if (!viewType) {
15
+ throw new Error(`unknown view type ${view.type}`);
16
+ }
17
+ const { ReactComponent } = viewType;
18
+ if (view.minimized) {
19
+ return null;
20
+ }
21
+ return ((0, jsx_runtime_1.jsx)(react_1.Suspense, { fallback: (0, jsx_runtime_1.jsx)(LoadingEllipses_1.default, { variant: "h6" }), children: (0, jsx_runtime_1.jsx)(ReactComponent, { model: view, session: session }) }));
22
+ });
23
+ exports.default = ViewWrapper;
@@ -40,7 +40,7 @@ const jsx_runtime_1 = require("react/jsx-runtime");
40
40
  const react_1 = require("react");
41
41
  const mobx_react_1 = require("mobx-react");
42
42
  const mui_1 = require("tss-react/mui");
43
- const ViewPanel_1 = __importDefault(require("./ViewPanel"));
43
+ const ViewContainer_1 = __importDefault(require("./ViewContainer"));
44
44
  const ViewLauncher = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./ViewLauncher'))));
45
45
  const useStyles = (0, mui_1.makeStyles)()({
46
46
  viewsContainer: {
@@ -52,6 +52,6 @@ const ViewsContainer = (0, mobx_react_1.observer)(function ViewsContainer(props)
52
52
  const { session } = props;
53
53
  const { views } = session;
54
54
  const { classes } = useStyles();
55
- return ((0, jsx_runtime_1.jsxs)("div", { className: classes.viewsContainer, children: [views.length > 0 ? (views.map(view => ((0, jsx_runtime_1.jsx)(ViewPanel_1.default, { view: view, session: session }, `view-${view.id}`)))) : ((0, jsx_runtime_1.jsx)(react_1.Suspense, { fallback: null, children: (0, jsx_runtime_1.jsx)(ViewLauncher, { ...props }) })), (0, jsx_runtime_1.jsx)("div", { style: { height: 300 } })] }));
55
+ return ((0, jsx_runtime_1.jsxs)("div", { className: classes.viewsContainer, children: [views.length > 0 ? (views.map(view => ((0, jsx_runtime_1.jsx)(ViewContainer_1.default, { view: view, session: session }, `view-${view.id}`)))) : ((0, jsx_runtime_1.jsx)(react_1.Suspense, { fallback: null, children: (0, jsx_runtime_1.jsx)(ViewLauncher, { ...props }) })), (0, jsx_runtime_1.jsx)("div", { style: { height: 300 } })] }));
56
56
  });
57
57
  exports.default = ViewsContainer;
@@ -1,8 +1,6 @@
1
- import type { IBaseViewModel } from '@jbrowse/core/pluggableElementTypes/models';
2
- declare const ViewContainer: ({ view, onClose, onMinimize, children, }: {
3
- view: IBaseViewModel;
4
- onClose: () => void;
5
- onMinimize: () => void;
6
- children: React.ReactNode;
1
+ import type { AbstractViewModel, SessionWithFocusedViewAndDrawerWidgets } from '@jbrowse/core/util';
2
+ declare const ViewContainer: ({ view, session, }: {
3
+ view: AbstractViewModel;
4
+ session: SessionWithFocusedViewAndDrawerWidgets;
7
5
  }) => import("react/jsx-runtime").JSX.Element;
8
6
  export default ViewContainer;
@@ -1,15 +1,16 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect } from 'react';
3
- import { getSession, useWidthSetter } from '@jbrowse/core/util';
3
+ import { useWidthSetter } from '@jbrowse/core/util';
4
4
  import { Paper, useTheme } from '@mui/material';
5
5
  import { observer } from 'mobx-react';
6
6
  import { makeStyles } from 'tss-react/mui';
7
7
  import ViewHeader from './ViewHeader';
8
+ import ViewWrapper from './ViewWrapper';
8
9
  const useStyles = makeStyles()(theme => ({
9
10
  viewContainer: {
10
- overflow: 'hidden',
11
11
  margin: theme.spacing(0.5),
12
12
  padding: `0 ${theme.spacing(1)} ${theme.spacing(1)}`,
13
+ overflow: 'clip',
13
14
  },
14
15
  focusedView: {
15
16
  background: theme.palette.secondary.main,
@@ -18,11 +19,10 @@ const useStyles = makeStyles()(theme => ({
18
19
  background: theme.palette.secondary.dark,
19
20
  },
20
21
  }));
21
- const ViewContainer = observer(function ({ view, onClose, onMinimize, children, }) {
22
+ const ViewContainer = observer(function ({ view, session, }) {
22
23
  const theme = useTheme();
23
24
  const ref = useWidthSetter(view, theme.spacing(1));
24
25
  const { classes, cx } = useStyles();
25
- const session = getSession(view);
26
26
  useEffect(() => {
27
27
  function handleSelectView(e) {
28
28
  var _a;
@@ -37,8 +37,14 @@ const ViewContainer = observer(function ({ view, onClose, onMinimize, children,
37
37
  document.removeEventListener('keydown', handleSelectView);
38
38
  };
39
39
  }, [ref, session, view]);
40
- return (_jsxs(Paper, { ref: ref, elevation: 12, className: cx(classes.viewContainer, session.focusedViewId === view.id
41
- ? classes.focusedView
42
- : classes.unfocusedView), children: [_jsx(ViewHeader, { view: view, onClose: onClose, onMinimize: onMinimize }), _jsx(Paper, { children: children })] }));
40
+ const backgroundColorClassName = session.focusedViewId === view.id
41
+ ? classes.focusedView
42
+ : classes.unfocusedView;
43
+ const viewContainerClassName = cx(classes.viewContainer, backgroundColorClassName);
44
+ return (_jsxs(Paper, { ref: ref, elevation: 12, className: viewContainerClassName, children: [_jsx(ViewHeader, { view: view, onClose: () => {
45
+ session.removeView(view);
46
+ }, onMinimize: () => {
47
+ view.setMinimized(!view.minimized);
48
+ }, className: backgroundColorClassName }), _jsx(Paper, { elevation: 0, children: _jsx(ViewWrapper, { view: view, session: session }) })] }));
43
49
  });
44
50
  export default ViewContainer;
@@ -1,7 +1,8 @@
1
1
  import type { IBaseViewModel } from '@jbrowse/core/pluggableElementTypes/models';
2
- declare const ViewHeader: ({ view, onClose, onMinimize, }: {
2
+ declare const ViewHeader: ({ view, onClose, onMinimize, className, }: {
3
3
  view: IBaseViewModel;
4
4
  onClose: () => void;
5
5
  onMinimize: () => void;
6
+ className?: string;
6
7
  }) => import("react/jsx-runtime").JSX.Element;
7
8
  export default ViewHeader;
@@ -1,6 +1,8 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useRef } from 'react';
3
+ import { VIEW_HEADER_HEIGHT } from '@jbrowse/core/ui';
3
4
  import { getSession } from '@jbrowse/core/util';
5
+ import { isSessionWithMultipleViews } from '@jbrowse/product-core';
4
6
  import AddIcon from '@mui/icons-material/Add';
5
7
  import CloseIcon from '@mui/icons-material/Close';
6
8
  import KeyboardArrowRightIcon from '@mui/icons-material/KeyboardArrowRight';
@@ -19,6 +21,10 @@ const useStyles = makeStyles()(theme => ({
19
21
  },
20
22
  viewHeader: {
21
23
  display: 'flex',
24
+ height: VIEW_HEADER_HEIGHT,
25
+ top: 0,
26
+ zIndex: 900,
27
+ background: theme.palette.secondary.main,
22
28
  },
23
29
  viewTitle: {
24
30
  display: 'flex',
@@ -29,16 +35,21 @@ const ViewButtons = observer(function ({ view, onClose, onMinimize, }) {
29
35
  const { classes } = useStyles();
30
36
  return (_jsxs(_Fragment, { children: [_jsx(IconButton, { "data-testid": "minimize_view", onClick: onMinimize, children: view.minimized ? (_jsx(AddIcon, { className: classes.icon, fontSize: "small" })) : (_jsx(MinimizeIcon, { className: classes.icon, fontSize: "small" })) }), _jsx(IconButton, { "data-testid": "close_view", onClick: onClose, children: _jsx(CloseIcon, { className: classes.icon, fontSize: "small" }) })] }));
31
37
  });
32
- const ViewHeader = observer(function ({ view, onClose, onMinimize, }) {
33
- const { classes } = useStyles();
38
+ const ViewHeader = observer(function ({ view, onClose, onMinimize, className, }) {
39
+ const { classes, cx } = useStyles();
34
40
  const scrollRef = useRef(null);
35
41
  const session = getSession(view);
42
+ let stickyViewHeaders = false;
43
+ if (isSessionWithMultipleViews(session)) {
44
+ ;
45
+ ({ stickyViewHeaders } = session);
46
+ }
36
47
  useEffect(() => {
37
48
  var _a;
38
49
  if (typeof jest === 'undefined') {
39
50
  (_a = scrollRef.current) === null || _a === void 0 ? void 0 : _a.scrollIntoView({ block: 'center' });
40
51
  }
41
52
  }, []);
42
- return (_jsxs("div", { ref: scrollRef, className: classes.viewHeader, children: [_jsx(ViewMenu, { model: view, IconProps: { className: classes.icon } }), _jsx("div", { className: classes.grow }), _jsxs("div", { className: classes.viewTitle, children: [session.focusedViewId === view.id ? (_jsx(KeyboardArrowRightIcon, { className: classes.icon, fontSize: "small" })) : null, _jsx(ViewContainerTitle, { view: view })] }), _jsx("div", { className: classes.grow }), _jsx(ViewButtons, { onClose: onClose, onMinimize: onMinimize, view: view })] }));
53
+ return (_jsxs("div", { ref: scrollRef, className: cx(classes.viewHeader, className), style: { position: stickyViewHeaders ? 'sticky' : undefined }, children: [_jsx(ViewMenu, { model: view, IconProps: { className: classes.icon } }), _jsx("div", { className: classes.grow }), _jsxs("div", { className: classes.viewTitle, children: [session.focusedViewId === view.id ? (_jsx(KeyboardArrowRightIcon, { className: classes.icon, fontSize: "small" })) : null, _jsx(ViewContainerTitle, { view: view })] }), _jsx("div", { className: classes.grow }), _jsx(ViewButtons, { onClose: onClose, onMinimize: onMinimize, view: view })] }));
43
54
  });
44
55
  export default ViewHeader;
@@ -0,0 +1,6 @@
1
+ import type { AbstractViewModel, SessionWithFocusedViewAndDrawerWidgets } from '@jbrowse/core/util';
2
+ declare const ViewWrapper: ({ view, session, }: {
3
+ view: AbstractViewModel;
4
+ session: SessionWithFocusedViewAndDrawerWidgets;
5
+ }) => import("react/jsx-runtime").JSX.Element | null;
6
+ export default ViewWrapper;
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Suspense } from 'react';
3
+ import LoadingEllipses from '@jbrowse/core/ui/LoadingEllipses';
4
+ import { getEnv } from '@jbrowse/core/util';
5
+ import { observer } from 'mobx-react';
6
+ const ViewWrapper = observer(function ({ view, session, }) {
7
+ const { pluginManager } = getEnv(session);
8
+ const viewType = pluginManager.getViewType(view.type);
9
+ if (!viewType) {
10
+ throw new Error(`unknown view type ${view.type}`);
11
+ }
12
+ const { ReactComponent } = viewType;
13
+ if (view.minimized) {
14
+ return null;
15
+ }
16
+ return (_jsx(Suspense, { fallback: _jsx(LoadingEllipses, { variant: "h6" }), children: _jsx(ReactComponent, { model: view, session: session }) }));
17
+ });
18
+ export default ViewWrapper;
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Suspense, lazy } from 'react';
3
3
  import { observer } from 'mobx-react';
4
4
  import { makeStyles } from 'tss-react/mui';
5
- import ViewPanel from './ViewPanel';
5
+ import ViewContainer from './ViewContainer';
6
6
  const ViewLauncher = lazy(() => import('./ViewLauncher'));
7
7
  const useStyles = makeStyles()({
8
8
  viewsContainer: {
@@ -14,6 +14,6 @@ const ViewsContainer = observer(function ViewsContainer(props) {
14
14
  const { session } = props;
15
15
  const { views } = session;
16
16
  const { classes } = useStyles();
17
- return (_jsxs("div", { className: classes.viewsContainer, children: [views.length > 0 ? (views.map(view => (_jsx(ViewPanel, { view: view, session: session }, `view-${view.id}`)))) : (_jsx(Suspense, { fallback: null, children: _jsx(ViewLauncher, { ...props }) })), _jsx("div", { style: { height: 300 } })] }));
17
+ return (_jsxs("div", { className: classes.viewsContainer, children: [views.length > 0 ? (views.map(view => (_jsx(ViewContainer, { view: view, session: session }, `view-${view.id}`)))) : (_jsx(Suspense, { fallback: null, children: _jsx(ViewLauncher, { ...props }) })), _jsx("div", { style: { height: 300 } })] }));
18
18
  });
19
19
  export default ViewsContainer;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbrowse/app-core",
3
- "version": "3.0.5",
3
+ "version": "3.1.0",
4
4
  "description": "JBrowse 2 code shared between the 'full featured' apps e.g. jbrowse-web and jbrowse-desktop",
5
5
  "keywords": [
6
6
  "jbrowse",
@@ -42,7 +42,7 @@
42
42
  },
43
43
  "dependencies": {
44
44
  "@babel/runtime": "^7.16.3",
45
- "@jbrowse/product-core": "^3.0.5",
45
+ "@jbrowse/product-core": "^3.1.0",
46
46
  "@mui/icons-material": "^6.0.0",
47
47
  "@mui/material": "^6.0.0",
48
48
  "copy-to-clipboard": "^3.3.1",
@@ -59,5 +59,5 @@
59
59
  "publishConfig": {
60
60
  "access": "public"
61
61
  },
62
- "gitHead": "a03749efe19e51609922272b845a331897346789"
62
+ "gitHead": "91492049ddea0aed90eb24d3c066c2d9f5a6b189"
63
63
  }
@@ -1,12 +0,0 @@
1
- import type { SnackbarMessage } from '@jbrowse/core/ui/SnackbarModel';
2
- import type { AbstractViewModel, SessionWithDrawerWidgets } from '@jbrowse/core/util';
3
- type AppSession = SessionWithDrawerWidgets & {
4
- snackbarMessages: SnackbarMessage[];
5
- renameCurrentSession: (arg: string) => void;
6
- popSnackbarMessage: () => unknown;
7
- };
8
- declare const ViewPanel: ({ view, session, }: {
9
- view: AbstractViewModel;
10
- session: AppSession;
11
- }) => import("react/jsx-runtime").JSX.Element;
12
- export default ViewPanel;
@@ -1,27 +0,0 @@
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
- const jsx_runtime_1 = require("react/jsx-runtime");
7
- const react_1 = require("react");
8
- const ErrorBoundary_1 = require("@jbrowse/core/ui/ErrorBoundary");
9
- const ErrorMessage_1 = __importDefault(require("@jbrowse/core/ui/ErrorMessage"));
10
- const LoadingEllipses_1 = __importDefault(require("@jbrowse/core/ui/LoadingEllipses"));
11
- const util_1 = require("@jbrowse/core/util");
12
- const mobx_react_1 = require("mobx-react");
13
- const ViewContainer_1 = __importDefault(require("./ViewContainer"));
14
- const ViewPanel = (0, mobx_react_1.observer)(function ({ view, session, }) {
15
- const { pluginManager } = (0, util_1.getEnv)(session);
16
- const viewType = pluginManager.getViewType(view.type);
17
- if (!viewType) {
18
- throw new Error(`unknown view type ${view.type}`);
19
- }
20
- const { ReactComponent } = viewType;
21
- return ((0, jsx_runtime_1.jsx)(ViewContainer_1.default, { view: view, onClose: () => {
22
- session.removeView(view);
23
- }, onMinimize: () => {
24
- view.setMinimized(!view.minimized);
25
- }, children: !view.minimized ? ((0, jsx_runtime_1.jsx)(ErrorBoundary_1.ErrorBoundary, { FallbackComponent: ({ error }) => (0, jsx_runtime_1.jsx)(ErrorMessage_1.default, { error: error }), children: (0, jsx_runtime_1.jsx)(react_1.Suspense, { fallback: (0, jsx_runtime_1.jsx)(LoadingEllipses_1.default, { variant: "h6" }), children: (0, jsx_runtime_1.jsx)(ReactComponent, { model: view, session: session }) }) })) : (false) }));
26
- });
27
- exports.default = ViewPanel;
@@ -1,12 +0,0 @@
1
- import type { SnackbarMessage } from '@jbrowse/core/ui/SnackbarModel';
2
- import type { AbstractViewModel, SessionWithDrawerWidgets } from '@jbrowse/core/util';
3
- type AppSession = SessionWithDrawerWidgets & {
4
- snackbarMessages: SnackbarMessage[];
5
- renameCurrentSession: (arg: string) => void;
6
- popSnackbarMessage: () => unknown;
7
- };
8
- declare const ViewPanel: ({ view, session, }: {
9
- view: AbstractViewModel;
10
- session: AppSession;
11
- }) => import("react/jsx-runtime").JSX.Element;
12
- export default ViewPanel;
@@ -1,22 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Suspense } from 'react';
3
- import { ErrorBoundary } from '@jbrowse/core/ui/ErrorBoundary';
4
- import ErrorMessage from '@jbrowse/core/ui/ErrorMessage';
5
- import LoadingEllipses from '@jbrowse/core/ui/LoadingEllipses';
6
- import { getEnv } from '@jbrowse/core/util';
7
- import { observer } from 'mobx-react';
8
- import ViewContainer from './ViewContainer';
9
- const ViewPanel = observer(function ({ view, session, }) {
10
- const { pluginManager } = getEnv(session);
11
- const viewType = pluginManager.getViewType(view.type);
12
- if (!viewType) {
13
- throw new Error(`unknown view type ${view.type}`);
14
- }
15
- const { ReactComponent } = viewType;
16
- return (_jsx(ViewContainer, { view: view, onClose: () => {
17
- session.removeView(view);
18
- }, onMinimize: () => {
19
- view.setMinimized(!view.minimized);
20
- }, children: !view.minimized ? (_jsx(ErrorBoundary, { FallbackComponent: ({ error }) => _jsx(ErrorMessage, { error: error }), children: _jsx(Suspense, { fallback: _jsx(LoadingEllipses, { variant: "h6" }), children: _jsx(ReactComponent, { model: view, session: session }) }) })) : (false) }));
21
- });
22
- export default ViewPanel;