@jbrowse/plugin-menus 2.6.1

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 (86) hide show
  1. package/LICENSE +201 -0
  2. package/dist/AboutWidget/components/AboutWidget.d.ts +7 -0
  3. package/dist/AboutWidget/components/AboutWidget.js +63 -0
  4. package/dist/AboutWidget/components/AboutWidget.js.map +1 -0
  5. package/dist/AboutWidget/index.d.ts +5 -0
  6. package/dist/AboutWidget/index.js +12 -0
  7. package/dist/AboutWidget/index.js.map +1 -0
  8. package/dist/HelpWidget/components/HelpWidget.d.ts +7 -0
  9. package/dist/HelpWidget/components/HelpWidget.js +37 -0
  10. package/dist/HelpWidget/components/HelpWidget.js.map +1 -0
  11. package/dist/HelpWidget/index.d.ts +5 -0
  12. package/dist/HelpWidget/index.js +12 -0
  13. package/dist/HelpWidget/index.js.map +1 -0
  14. package/dist/ImportSessionWidget/components/ImportError.d.ts +4 -0
  15. package/dist/ImportSessionWidget/components/ImportError.js +35 -0
  16. package/dist/ImportSessionWidget/components/ImportError.js.map +1 -0
  17. package/dist/ImportSessionWidget/components/ImportSessionWidget.d.ts +7 -0
  18. package/dist/ImportSessionWidget/components/ImportSessionWidget.js +114 -0
  19. package/dist/ImportSessionWidget/components/ImportSessionWidget.js.map +1 -0
  20. package/dist/ImportSessionWidget/index.d.ts +5 -0
  21. package/dist/ImportSessionWidget/index.js +12 -0
  22. package/dist/ImportSessionWidget/index.js.map +1 -0
  23. package/dist/SessionManager/components/DeleteDialog.d.ts +6 -0
  24. package/dist/SessionManager/components/DeleteDialog.js +18 -0
  25. package/dist/SessionManager/components/DeleteDialog.js.map +1 -0
  26. package/dist/SessionManager/components/SessionManager.d.ts +20 -0
  27. package/dist/SessionManager/components/SessionManager.js +102 -0
  28. package/dist/SessionManager/components/SessionManager.js.map +1 -0
  29. package/dist/SessionManager/index.d.ts +5 -0
  30. package/dist/SessionManager/index.js +12 -0
  31. package/dist/SessionManager/index.js.map +1 -0
  32. package/dist/index.d.ts +7 -0
  33. package/dist/index.js +104 -0
  34. package/dist/index.js.map +1 -0
  35. package/esm/AboutWidget/components/AboutWidget.d.ts +7 -0
  36. package/esm/AboutWidget/components/AboutWidget.js +58 -0
  37. package/esm/AboutWidget/components/AboutWidget.js.map +1 -0
  38. package/esm/AboutWidget/index.d.ts +5 -0
  39. package/esm/AboutWidget/index.js +9 -0
  40. package/esm/AboutWidget/index.js.map +1 -0
  41. package/esm/HelpWidget/components/HelpWidget.d.ts +7 -0
  42. package/esm/HelpWidget/components/HelpWidget.js +32 -0
  43. package/esm/HelpWidget/components/HelpWidget.js.map +1 -0
  44. package/esm/HelpWidget/index.d.ts +5 -0
  45. package/esm/HelpWidget/index.js +9 -0
  46. package/esm/HelpWidget/index.js.map +1 -0
  47. package/esm/ImportSessionWidget/components/ImportError.d.ts +4 -0
  48. package/esm/ImportSessionWidget/components/ImportError.js +29 -0
  49. package/esm/ImportSessionWidget/components/ImportError.js.map +1 -0
  50. package/esm/ImportSessionWidget/components/ImportSessionWidget.d.ts +7 -0
  51. package/esm/ImportSessionWidget/components/ImportSessionWidget.js +86 -0
  52. package/esm/ImportSessionWidget/components/ImportSessionWidget.js.map +1 -0
  53. package/esm/ImportSessionWidget/index.d.ts +5 -0
  54. package/esm/ImportSessionWidget/index.js +9 -0
  55. package/esm/ImportSessionWidget/index.js.map +1 -0
  56. package/esm/SessionManager/components/DeleteDialog.d.ts +6 -0
  57. package/esm/SessionManager/components/DeleteDialog.js +12 -0
  58. package/esm/SessionManager/components/DeleteDialog.js.map +1 -0
  59. package/esm/SessionManager/components/SessionManager.d.ts +20 -0
  60. package/esm/SessionManager/components/SessionManager.js +74 -0
  61. package/esm/SessionManager/components/SessionManager.js.map +1 -0
  62. package/esm/SessionManager/index.d.ts +5 -0
  63. package/esm/SessionManager/index.js +9 -0
  64. package/esm/SessionManager/index.js.map +1 -0
  65. package/esm/index.d.ts +7 -0
  66. package/esm/index.js +75 -0
  67. package/esm/index.js.map +1 -0
  68. package/package.json +61 -0
  69. package/src/AboutWidget/components/AboutWidget.test.tsx +35 -0
  70. package/src/AboutWidget/components/AboutWidget.tsx +91 -0
  71. package/src/AboutWidget/components/__snapshots__/AboutWidget.test.tsx.snap +65 -0
  72. package/src/AboutWidget/index.ts +10 -0
  73. package/src/HelpWidget/components/HelpWidget.test.js +10 -0
  74. package/src/HelpWidget/components/HelpWidget.tsx +75 -0
  75. package/src/HelpWidget/components/__snapshots__/HelpWidget.test.js.snap +63 -0
  76. package/src/HelpWidget/index.ts +10 -0
  77. package/src/ImportSessionWidget/components/ImportError.tsx +38 -0
  78. package/src/ImportSessionWidget/components/ImportSessionWidget.tsx +109 -0
  79. package/src/ImportSessionWidget/index.ts +10 -0
  80. package/src/SessionManager/components/DeleteDialog.tsx +41 -0
  81. package/src/SessionManager/components/SessionManager.test.tsx +14 -0
  82. package/src/SessionManager/components/SessionManager.tsx +166 -0
  83. package/src/SessionManager/components/__snapshots__/SessionManager.test.tsx.snap +22 -0
  84. package/src/SessionManager/index.ts +10 -0
  85. package/src/index.test.ts +12 -0
  86. package/src/index.ts +100 -0
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ import { AbstractSessionModel } from '@jbrowse/core/util';
3
+ interface SessionSnap {
4
+ name: string;
5
+ views?: {
6
+ tracks: unknown[];
7
+ }[];
8
+ [key: string]: unknown;
9
+ }
10
+ interface SessionModel extends AbstractSessionModel {
11
+ savedSessions: SessionSnap[];
12
+ removeSavedSession: (arg: SessionSnap) => void;
13
+ activateSession: (arg: string) => void;
14
+ loadAutosaveSession: () => void;
15
+ previousAutosaveId: string;
16
+ }
17
+ declare const SessionManager: ({ session }: {
18
+ session: SessionModel;
19
+ }) => React.JSX.Element;
20
+ export default SessionManager;
@@ -0,0 +1,102 @@
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 material_1 = require("@mui/material");
31
+ const mui_1 = require("tss-react/mui");
32
+ const mobx_react_1 = require("mobx-react");
33
+ const pluralize_1 = __importDefault(require("pluralize"));
34
+ // icons
35
+ const Delete_1 = __importDefault(require("@mui/icons-material/Delete"));
36
+ const ViewList_1 = __importDefault(require("@mui/icons-material/ViewList"));
37
+ const DeleteDialog_1 = __importDefault(require("./DeleteDialog"));
38
+ const useStyles = (0, mui_1.makeStyles)()(theme => ({
39
+ root: {
40
+ margin: theme.spacing(1),
41
+ },
42
+ message: {
43
+ padding: theme.spacing(3),
44
+ },
45
+ }));
46
+ const AutosaveEntry = (0, mobx_react_1.observer)(({ session }) => {
47
+ const { classes } = useStyles();
48
+ const autosavedSession = JSON.parse(localStorage.getItem(session.previousAutosaveId) || '{}').session;
49
+ const { views = [] } = autosavedSession || {};
50
+ const totalTracks = views
51
+ .map(view => view.tracks.length)
52
+ .reduce((a, b) => a + b, 0);
53
+ return autosavedSession ? (react_1.default.createElement(material_1.Paper, { className: classes.root },
54
+ react_1.default.createElement(material_1.List, { subheader: react_1.default.createElement(material_1.ListSubheader, null, "Previous autosaved entry") },
55
+ react_1.default.createElement(material_1.ListItem, { button: true, onClick: () => session.loadAutosaveSession() },
56
+ react_1.default.createElement(material_1.ListItemIcon, null,
57
+ react_1.default.createElement(ViewList_1.default, null)),
58
+ react_1.default.createElement(material_1.ListItemText, { primary: autosavedSession.name, secondary: session.name === autosavedSession.name
59
+ ? 'Currently open'
60
+ : `${views.length} ${(0, pluralize_1.default)('view', views.length)}; ${totalTracks}
61
+ open ${(0, pluralize_1.default)('track', totalTracks)}` }))))) : null;
62
+ });
63
+ const SessionManager = (0, mobx_react_1.observer)(({ session }) => {
64
+ const { classes } = useStyles();
65
+ const [sessionIndexToDelete, setSessionIndexToDelete] = (0, react_1.useState)();
66
+ const [open, setOpen] = (0, react_1.useState)(false);
67
+ function handleDialogClose(deleteSession = false) {
68
+ if (deleteSession && sessionIndexToDelete !== undefined) {
69
+ session.removeSavedSession(session.savedSessions[sessionIndexToDelete]);
70
+ }
71
+ setSessionIndexToDelete(undefined);
72
+ setOpen(false);
73
+ }
74
+ const sessionNameToDelete = sessionIndexToDelete !== undefined
75
+ ? session.savedSessions[sessionIndexToDelete].name
76
+ : '';
77
+ return (react_1.default.createElement(react_1.default.Fragment, null,
78
+ react_1.default.createElement(AutosaveEntry, { session: session }),
79
+ react_1.default.createElement(material_1.Paper, { className: classes.root },
80
+ react_1.default.createElement(material_1.List, { subheader: react_1.default.createElement(material_1.ListSubheader, null, "Saved sessions") }, session.savedSessions.length ? (session.savedSessions.map((sessionSnapshot, idx) => {
81
+ const { views = [] } = sessionSnapshot;
82
+ const totalTracks = views
83
+ .map(view => view.tracks.length)
84
+ .reduce((a, b) => a + b, 0);
85
+ return (react_1.default.createElement(material_1.ListItem, { button: true, disabled: session.name === sessionSnapshot.name, onClick: () => session.activateSession(sessionSnapshot.name), key: sessionSnapshot.name },
86
+ react_1.default.createElement(material_1.ListItemIcon, null,
87
+ react_1.default.createElement(ViewList_1.default, null)),
88
+ react_1.default.createElement(material_1.ListItemText, { primary: sessionSnapshot.name, secondary: session.name === sessionSnapshot.name
89
+ ? 'Currently open'
90
+ : `${views.length} ${(0, pluralize_1.default)('view', views.length)}; ${totalTracks}
91
+ open ${(0, pluralize_1.default)('track', totalTracks)}` }),
92
+ react_1.default.createElement(material_1.ListItemSecondaryAction, null,
93
+ react_1.default.createElement(material_1.IconButton, { edge: "end", disabled: session.name === sessionSnapshot.name, "aria-label": "Delete", onClick: () => {
94
+ setSessionIndexToDelete(idx);
95
+ setOpen(true);
96
+ } },
97
+ react_1.default.createElement(Delete_1.default, null)))));
98
+ })) : (react_1.default.createElement(material_1.Typography, { className: classes.message }, "No saved sessions found")))),
99
+ react_1.default.createElement(DeleteDialog_1.default, { open: open, sessionNameToDelete: sessionNameToDelete, handleClose: handleDialogClose })));
100
+ });
101
+ exports.default = SessionManager;
102
+ //# sourceMappingURL=SessionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../../src/SessionManager/components/SessionManager.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const configSchema: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{}, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined>>;
2
+ export declare const stateModel: import("mobx-state-tree").IModelType<{
3
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
4
+ type: import("mobx-state-tree").ISimpleType<"SessionManager">;
5
+ }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stateModel = exports.configSchema = void 0;
4
+ const configuration_1 = require("@jbrowse/core/configuration");
5
+ const mst_1 = require("@jbrowse/core/util/types/mst");
6
+ const mobx_state_tree_1 = require("mobx-state-tree");
7
+ exports.configSchema = (0, configuration_1.ConfigurationSchema)('SessionManager', {});
8
+ exports.stateModel = mobx_state_tree_1.types.model('SessionManager', {
9
+ id: mst_1.ElementId,
10
+ type: mobx_state_tree_1.types.literal('SessionManager'),
11
+ });
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/SessionManager/index.ts"],"names":[],"mappings":";;;AAAA,+DAAiE;AACjE,sDAAwD;AACxD,qDAAuC;AAE1B,QAAA,YAAY,GAAG,IAAA,mCAAmB,EAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;AAExD,QAAA,UAAU,GAAG,uBAAK,CAAC,KAAK,CAAC,gBAAgB,EAAE;IACtD,EAAE,EAAE,eAAS;IACb,IAAI,EAAE,uBAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC;CACtC,CAAC,CAAA"}
@@ -0,0 +1,7 @@
1
+ import Plugin from '@jbrowse/core/Plugin';
2
+ import PluginManager from '@jbrowse/core/PluginManager';
3
+ export default class extends Plugin {
4
+ name: string;
5
+ install(pluginManager: PluginManager): void;
6
+ configure(pluginManager: PluginManager): void;
7
+ }
package/dist/index.js ADDED
@@ -0,0 +1,104 @@
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 = require("react");
30
+ const WidgetType_1 = __importDefault(require("@jbrowse/core/pluggableElementTypes/WidgetType"));
31
+ const Plugin_1 = __importDefault(require("@jbrowse/core/Plugin"));
32
+ const util_1 = require("@jbrowse/core/util");
33
+ const Help_1 = __importDefault(require("@mui/icons-material/Help"));
34
+ const Info_1 = __importDefault(require("@mui/icons-material/Info"));
35
+ const AboutWidget_1 = require("./AboutWidget");
36
+ const HelpWidget_1 = require("./HelpWidget");
37
+ const ImportSessionWidget_1 = require("./ImportSessionWidget");
38
+ const SessionManager_1 = require("./SessionManager");
39
+ class default_1 extends Plugin_1.default {
40
+ constructor() {
41
+ super(...arguments);
42
+ this.name = 'MenusPlugin';
43
+ }
44
+ install(pluginManager) {
45
+ pluginManager.addWidgetType(() => {
46
+ return new WidgetType_1.default({
47
+ name: 'AboutWidget',
48
+ heading: 'About',
49
+ configSchema: AboutWidget_1.configSchema,
50
+ stateModel: AboutWidget_1.stateModel,
51
+ ReactComponent: (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./AboutWidget/components/AboutWidget')))),
52
+ });
53
+ });
54
+ pluginManager.addWidgetType(() => {
55
+ return new WidgetType_1.default({
56
+ name: 'HelpWidget',
57
+ heading: 'Help',
58
+ configSchema: HelpWidget_1.configSchema,
59
+ stateModel: HelpWidget_1.stateModel,
60
+ ReactComponent: (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./HelpWidget/components/HelpWidget')))),
61
+ });
62
+ });
63
+ pluginManager.addWidgetType(() => {
64
+ return new WidgetType_1.default({
65
+ name: 'ImportSessionWidget',
66
+ heading: 'Import session',
67
+ configSchema: ImportSessionWidget_1.configSchema,
68
+ stateModel: ImportSessionWidget_1.stateModel,
69
+ ReactComponent: (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./ImportSessionWidget/components/ImportSessionWidget')))),
70
+ });
71
+ });
72
+ pluginManager.addWidgetType(() => {
73
+ return new WidgetType_1.default({
74
+ name: 'SessionManager',
75
+ heading: 'Sessions',
76
+ configSchema: SessionManager_1.configSchema,
77
+ stateModel: SessionManager_1.stateModel,
78
+ ReactComponent: (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./SessionManager/components/SessionManager')))),
79
+ });
80
+ });
81
+ }
82
+ configure(pluginManager) {
83
+ if ((0, util_1.isAbstractMenuManager)(pluginManager.rootModel)) {
84
+ pluginManager.rootModel.appendToMenu('Help', {
85
+ label: 'About',
86
+ icon: Info_1.default,
87
+ onClick: (session) => {
88
+ const widget = session.addWidget('AboutWidget', 'aboutWidget');
89
+ session.showWidget(widget);
90
+ },
91
+ });
92
+ pluginManager.rootModel.appendToMenu('Help', {
93
+ label: 'Help',
94
+ icon: Help_1.default,
95
+ onClick: (session) => {
96
+ const widget = session.addWidget('HelpWidget', 'helpWidget');
97
+ session.showWidget(widget);
98
+ },
99
+ });
100
+ }
101
+ }
102
+ }
103
+ exports.default = default_1;
104
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAA4B;AAC5B,gGAAuE;AACvE,kEAAyC;AAEzC,6CAA8E;AAE9E,oEAA+C;AAC/C,oEAA+C;AAE/C,+CAGsB;AACtB,6CAGqB;AACrB,+DAG8B;AAC9B,qDAGyB;AAEzB,eAAqB,SAAQ,gBAAM;IAAnC;;QACE,SAAI,GAAG,aAAa,CAAA;IAwEtB,CAAC;IAtEC,OAAO,CAAC,aAA4B;QAClC,aAAa,CAAC,aAAa,CAAC,GAAG,EAAE;YAC/B,OAAO,IAAI,oBAAU,CAAC;gBACpB,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,OAAO;gBAChB,YAAY,EAAE,0BAAiB;gBAC/B,UAAU,EAAE,wBAAe;gBAC3B,cAAc,EAAE,IAAA,YAAI,EAClB,GAAG,EAAE,mDAAQ,sCAAsC,GAAC,CACrD;aACF,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,aAAa,CAAC,aAAa,CAAC,GAAG,EAAE;YAC/B,OAAO,IAAI,oBAAU,CAAC;gBACpB,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,MAAM;gBACf,YAAY,EAAE,yBAAgB;gBAC9B,UAAU,EAAE,uBAAc;gBAC1B,cAAc,EAAE,IAAA,YAAI,EAClB,GAAG,EAAE,mDAAQ,oCAAoC,GAAC,CACnD;aACF,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,aAAa,CAAC,aAAa,CAAC,GAAG,EAAE;YAC/B,OAAO,IAAI,oBAAU,CAAC;gBACpB,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE,gBAAgB;gBACzB,YAAY,EAAE,kCAAyB;gBACvC,UAAU,EAAE,gCAAuB;gBACnC,cAAc,EAAE,IAAA,YAAI,EAClB,GAAG,EAAE,mDAAQ,sDAAsD,GAAC,CACrE;aACF,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,aAAa,CAAC,aAAa,CAAC,GAAG,EAAE;YAC/B,OAAO,IAAI,oBAAU,CAAC;gBACpB,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,UAAU;gBACnB,YAAY,EAAE,6BAA0B;gBACxC,UAAU,EAAE,2BAAwB;gBACpC,cAAc,EAAE,IAAA,YAAI,EAClB,GAAG,EAAE,mDAAQ,4CAA4C,GAAC,CAC3D;aACF,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,SAAS,CAAC,aAA4B;QACpC,IAAI,IAAA,4BAAqB,EAAC,aAAa,CAAC,SAAS,CAAC,EAAE;YAClD,aAAa,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE;gBAC3C,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,cAAQ;gBACd,OAAO,EAAE,CAAC,OAA2B,EAAE,EAAE;oBACvC,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC,CAAA;oBAC9D,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;gBAC5B,CAAC;aACF,CAAC,CAAA;YACF,aAAa,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE;gBAC3C,KAAK,EAAE,MAAM;gBACb,IAAI,EAAE,cAAQ;gBACd,OAAO,EAAE,CAAC,OAA2B,EAAE,EAAE;oBACvC,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAA;oBAC5D,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;gBAC5B,CAAC;aACF,CAAC,CAAA;SACH;IACH,CAAC;CACF;AAzED,4BAyEC"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { IAnyStateTreeNode } from 'mobx-state-tree';
3
+ declare function About({ model }: {
4
+ model: IAnyStateTreeNode;
5
+ }): React.JSX.Element;
6
+ declare const _default: typeof About;
7
+ export default _default;
@@ -0,0 +1,58 @@
1
+ import React from 'react';
2
+ import { observer } from 'mobx-react';
3
+ import { getEnv } from 'mobx-state-tree';
4
+ import { getSession } from '@jbrowse/core/util';
5
+ import { Typography, Link } from '@mui/material';
6
+ import { makeStyles } from 'tss-react/mui';
7
+ const useStyles = makeStyles()(theme => ({
8
+ root: {
9
+ margin: theme.spacing(2),
10
+ paddingTop: theme.spacing(2),
11
+ },
12
+ subtitle: {
13
+ margin: theme.spacing(1),
14
+ },
15
+ pluginList: {
16
+ margin: theme.spacing(1),
17
+ marginTop: theme.spacing(5),
18
+ },
19
+ }));
20
+ function About({ model }) {
21
+ const { classes } = useStyles();
22
+ const { version } = getSession(model);
23
+ const { pluginManager } = getEnv(model);
24
+ const { plugins } = pluginManager;
25
+ const corePlugins = new Set(plugins
26
+ .filter(p => { var _a; return (_a = pluginManager.pluginMetadata[p.name]) === null || _a === void 0 ? void 0 : _a.isCore; })
27
+ .map(p => p.name));
28
+ return (React.createElement("div", { className: classes.root },
29
+ React.createElement(Typography, { variant: "h4", align: "center" }, "JBrowse 2"),
30
+ React.createElement(Typography, { variant: "h6", align: "center", className: classes.subtitle }, version),
31
+ React.createElement(Typography, { align: "center" },
32
+ "JBrowse is a",
33
+ ' ',
34
+ React.createElement(Link, { href: "http://gmod.org/", target: "_blank", rel: "noopener noreferrer" }, "GMOD"),
35
+ ' ',
36
+ "project"),
37
+ React.createElement("br", null),
38
+ React.createElement(Typography, { align: "center" }, "\u00A9 2019-2022 The Evolutionary Software Foundation"),
39
+ React.createElement("div", { className: classes.pluginList },
40
+ React.createElement(Typography, null, "External plugins loaded"),
41
+ React.createElement("ul", null, plugins
42
+ .filter(plugin => !corePlugins.has(plugin.name))
43
+ .map(plugin => {
44
+ const { url, name, version = '' } = plugin;
45
+ const text = `${name} ${version || ''}`;
46
+ return (React.createElement("li", { key: plugin.name }, plugin.url ? (React.createElement(Link, { target: "_blank", rel: "noopener noreferrer", href: url }, text)) : (React.createElement(Typography, null, text))));
47
+ })),
48
+ React.createElement(Typography, null, "Core plugins loaded"),
49
+ React.createElement("ul", null, plugins
50
+ .filter(plugin => corePlugins.has(plugin.name))
51
+ .map(plugin => (React.createElement("li", { key: plugin.name },
52
+ React.createElement(Typography, null,
53
+ plugin.name,
54
+ " ",
55
+ plugin.version || ''))))))));
56
+ }
57
+ export default observer(About);
58
+ //# sourceMappingURL=AboutWidget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AboutWidget.js","sourceRoot":"","sources":["../../../src/AboutWidget/components/AboutWidget.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const configSchema: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{}, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined>>;
2
+ export declare const stateModel: import("mobx-state-tree").IModelType<{
3
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
4
+ type: import("mobx-state-tree").ISimpleType<"AboutWidget">;
5
+ }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
@@ -0,0 +1,9 @@
1
+ import { ConfigurationSchema } from '@jbrowse/core/configuration';
2
+ import { ElementId } from '@jbrowse/core/util/types/mst';
3
+ import { types } from 'mobx-state-tree';
4
+ export const configSchema = ConfigurationSchema('AboutWidget', {});
5
+ export const stateModel = types.model('AboutWidget', {
6
+ id: ElementId,
7
+ type: types.literal('AboutWidget'),
8
+ });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/AboutWidget/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAEvC,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;AAElE,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE;IACnD,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;CACnC,CAAC,CAAA"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { IAnyStateTreeNode } from 'mobx-state-tree';
3
+ declare function Help({ model }: {
4
+ model?: IAnyStateTreeNode;
5
+ }): React.JSX.Element;
6
+ declare const _default: typeof Help;
7
+ export default _default;
@@ -0,0 +1,32 @@
1
+ import React from 'react';
2
+ import { observer } from 'mobx-react';
3
+ import { getSession } from '@jbrowse/core/util';
4
+ import { makeStyles } from 'tss-react/mui';
5
+ import { Link, Typography } from '@mui/material';
6
+ const useStyles = makeStyles()(theme => ({
7
+ root: {
8
+ margin: theme.spacing(2),
9
+ },
10
+ subtitle: {
11
+ margin: theme.spacing(1),
12
+ },
13
+ }));
14
+ function Help({ model }) {
15
+ const { classes } = useStyles();
16
+ const root = model ? getSession(model) : { version: '' };
17
+ return (React.createElement("div", { className: classes.root },
18
+ React.createElement(Typography, { variant: "h4", align: "center" }, "JBrowse 2"),
19
+ React.createElement(Typography, { variant: "h6", align: "center", className: classes.subtitle }, root.version),
20
+ React.createElement(Typography, null, "Here are some resources to get help. Please report the version number above when asking questions. Thanks!"),
21
+ React.createElement("ul", null,
22
+ React.createElement("li", null,
23
+ React.createElement(Link, { href: "https://github.com/GMOD/jbrowse-components/discussions", target: "_blank", rel: "noopener noreferrer" }, "Question & answer forum")),
24
+ React.createElement("li", null,
25
+ React.createElement(Link, { href: "https://github.com/GMOD/jbrowse-components/issues/new/choose", target: "_blank", rel: "noopener noreferrer" }, "Report a bug")),
26
+ React.createElement("li", null,
27
+ React.createElement(Link, { href: "https://jbrowse.org/jb2/docs/user_guide", target: "_blank", rel: "noopener noreferrer" }, "User guide")),
28
+ React.createElement("li", null,
29
+ React.createElement(Link, { href: "https://jbrowse.org/jb2/docs/", target: "_blank", rel: "noopener noreferrer" }, "Documentation")))));
30
+ }
31
+ export default observer(Help);
32
+ //# sourceMappingURL=HelpWidget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HelpWidget.js","sourceRoot":"","sources":["../../../src/HelpWidget/components/HelpWidget.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAEhD,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvC,IAAI,EAAE;QACJ,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;KACzB;IACD,QAAQ,EAAE;QACR,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;KACzB;CACF,CAAC,CAAC,CAAA;AAEH,SAAS,IAAI,CAAC,EAAE,KAAK,EAAiC;IACpD,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;IACxD,OAAO,CACL,6BAAK,SAAS,EAAE,OAAO,CAAC,IAAI;QAC1B,oBAAC,UAAU,IAAC,OAAO,EAAC,IAAI,EAAC,KAAK,EAAC,QAAQ,gBAE1B;QACb,oBAAC,UAAU,IAAC,OAAO,EAAC,IAAI,EAAC,KAAK,EAAC,QAAQ,EAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,IAChE,IAAI,CAAC,OAAO,CACF;QAEb,oBAAC,UAAU,qHAGE;QACb;YACE;gBACE,oBAAC,IAAI,IACH,IAAI,EAAC,wDAAwD,EAC7D,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,8BAGpB,CACJ;YACL;gBACE,oBAAC,IAAI,IACH,IAAI,EAAC,8DAA8D,EACnE,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,mBAGpB,CACJ;YACL;gBACE,oBAAC,IAAI,IACH,IAAI,EAAC,yCAAyC,EAC9C,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,iBAGpB,CACJ;YACL;gBACE,oBAAC,IAAI,IACH,IAAI,EAAC,+BAA+B,EACpC,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,oBAGpB,CACJ,CACF,CACD,CACP,CAAA;AACH,CAAC;AAED,eAAe,QAAQ,CAAC,IAAI,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ export declare const configSchema: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{}, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined>>;
2
+ export declare const stateModel: import("mobx-state-tree").IModelType<{
3
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
4
+ type: import("mobx-state-tree").ISimpleType<"HelpWidget">;
5
+ }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
@@ -0,0 +1,9 @@
1
+ import { ConfigurationSchema } from '@jbrowse/core/configuration';
2
+ import { ElementId } from '@jbrowse/core/util/types/mst';
3
+ import { types } from 'mobx-state-tree';
4
+ export const configSchema = ConfigurationSchema('HelpWidget', {});
5
+ export const stateModel = types.model('HelpWidget', {
6
+ id: ElementId,
7
+ type: types.literal('HelpWidget'),
8
+ });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/HelpWidget/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAEvC,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;AAEjE,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE;IAClD,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;CAClC,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ export default function ImportError({ error }: {
3
+ error: unknown;
4
+ }): React.JSX.Element;
@@ -0,0 +1,29 @@
1
+ import React from 'react';
2
+ import { Paper, Typography } from '@mui/material';
3
+ import { makeStyles } from 'tss-react/mui';
4
+ // icons
5
+ import ErrorIcon from '@mui/icons-material/Error';
6
+ const useStyles = makeStyles()(theme => ({
7
+ error: {
8
+ margin: theme.spacing(2),
9
+ },
10
+ errorHeader: {
11
+ background: theme.palette.error.light,
12
+ color: theme.palette.error.contrastText,
13
+ padding: theme.spacing(2),
14
+ textAlign: 'center',
15
+ },
16
+ errorMessage: {
17
+ padding: theme.spacing(2),
18
+ },
19
+ }));
20
+ export default function ImportError({ error }) {
21
+ const { classes } = useStyles();
22
+ return (React.createElement(Paper, { className: classes.error },
23
+ React.createElement("div", { className: classes.errorHeader },
24
+ React.createElement(ErrorIcon, { color: "inherit", fontSize: "large" }),
25
+ React.createElement("div", null,
26
+ React.createElement(Typography, { variant: "h6", color: "inherit", align: "center" }, "Import error"))),
27
+ React.createElement(Typography, { className: classes.errorMessage }, `${error}`)));
28
+ }
29
+ //# sourceMappingURL=ImportError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImportError.js","sourceRoot":"","sources":["../../../src/ImportSessionWidget/components/ImportError.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,QAAQ;AACR,OAAO,SAAS,MAAM,2BAA2B,CAAA;AAEjD,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvC,KAAK,EAAE;QACL,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;KACzB;IACD,WAAW,EAAE;QACX,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;QACrC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY;QACvC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACzB,SAAS,EAAE,QAAQ;KACpB;IACD,YAAY,EAAE;QACZ,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;KAC1B;CACF,CAAC,CAAC,CAAA;AAEH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAAE,KAAK,EAAsB;IAC/D,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,OAAO,CACL,oBAAC,KAAK,IAAC,SAAS,EAAE,OAAO,CAAC,KAAK;QAC7B,6BAAK,SAAS,EAAE,OAAO,CAAC,WAAW;YACjC,oBAAC,SAAS,IAAC,KAAK,EAAC,SAAS,EAAC,QAAQ,EAAC,OAAO,GAAG;YAC9C;gBACE,oBAAC,UAAU,IAAC,OAAO,EAAC,IAAI,EAAC,KAAK,EAAC,SAAS,EAAC,KAAK,EAAC,QAAQ,mBAE1C,CACT,CACF;QACN,oBAAC,UAAU,IAAC,SAAS,EAAE,OAAO,CAAC,YAAY,IAAG,GAAG,KAAK,EAAE,CAAc,CAChE,CACT,CAAA;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { IAnyStateTreeNode } from 'mobx-state-tree';
3
+ declare function ImportSession({ model }: {
4
+ model: IAnyStateTreeNode;
5
+ }): React.JSX.Element;
6
+ declare const _default: typeof ImportSession;
7
+ export default _default;
@@ -0,0 +1,86 @@
1
+ import React, { useState } from 'react';
2
+ import { Button, Paper, Typography, alpha } from '@mui/material';
3
+ import { getSession } from '@jbrowse/core/util';
4
+ import { makeStyles } from 'tss-react/mui';
5
+ import { observer } from 'mobx-react';
6
+ import { useDropzone } from 'react-dropzone';
7
+ // icons
8
+ import CloudUploadIcon from '@mui/icons-material/CloudUpload';
9
+ // locals
10
+ import ImportError from './ImportError';
11
+ const MAX_FILE_SIZE = 512 * 1024 ** 2; // 512 MiB
12
+ function styledBy(property, mapping) {
13
+ return (props) => mapping[props[property]];
14
+ }
15
+ // @ts-expect-error
16
+ const useStyles = makeStyles()(theme => ({
17
+ root: {
18
+ margin: theme.spacing(1),
19
+ },
20
+ paper: {
21
+ display: 'flex',
22
+ flexDirection: 'column',
23
+ },
24
+ dropZone: {
25
+ textAlign: 'center',
26
+ margin: theme.spacing(2),
27
+ padding: theme.spacing(2),
28
+ borderWidth: 2,
29
+ borderRadius: 2,
30
+ borderColor: styledBy('isDragActive', {
31
+ true: theme.palette.secondary.light,
32
+ false: theme.palette.divider,
33
+ }),
34
+ borderStyle: 'dashed',
35
+ backgroundColor: styledBy('isDragActive', {
36
+ true: alpha(theme.palette.text.primary, theme.palette.action.hoverOpacity),
37
+ false: theme.palette.background.default,
38
+ }),
39
+ outline: 'none',
40
+ transition: 'border .24s ease-in-out',
41
+ '&:focus': {
42
+ borderColor: theme.palette.secondary.light,
43
+ },
44
+ },
45
+ uploadIcon: {
46
+ color: theme.palette.text.secondary,
47
+ },
48
+ }));
49
+ function ImportSession({ model }) {
50
+ const [error, setError] = useState();
51
+ const { getRootProps, getInputProps, isDragActive } = useDropzone({
52
+ // @ts-expect-error
53
+ accept: 'application/json',
54
+ maxSize: MAX_FILE_SIZE,
55
+ multiple: false,
56
+ onDrop: async (acceptedFiles, rejectedFiles) => {
57
+ try {
58
+ if (rejectedFiles.length > 0) {
59
+ throw new Error(`${rejectedFiles[0].errors.map(e => `${e}`).join(', ')}`);
60
+ }
61
+ else {
62
+ const sessionText = await acceptedFiles[0].text();
63
+ getSession(model).setSession(JSON.parse(sessionText).session);
64
+ }
65
+ }
66
+ catch (e) {
67
+ console.error(e);
68
+ setError(e);
69
+ }
70
+ },
71
+ });
72
+ // @ts-expect-error
73
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
74
+ const { classes } = useStyles({ isDragActive });
75
+ return (React.createElement("div", { className: classes.root },
76
+ React.createElement(Paper, { className: classes.paper },
77
+ React.createElement("div", { ...getRootProps({ className: classes.dropZone }) },
78
+ React.createElement("input", { ...getInputProps() }),
79
+ React.createElement(CloudUploadIcon, { className: classes.uploadIcon, fontSize: "large" }),
80
+ React.createElement(Typography, { color: "textSecondary", align: "center", variant: "body1" }, "Drag and drop files here"),
81
+ React.createElement(Typography, { color: "textSecondary", align: "center", variant: "body2" }, "or"),
82
+ React.createElement(Button, { color: "primary", variant: "contained" }, "Browse Files"))),
83
+ error ? React.createElement(ImportError, { error: error }) : null));
84
+ }
85
+ export default observer(ImportSession);
86
+ //# sourceMappingURL=ImportSessionWidget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImportSessionWidget.js","sourceRoot":"","sources":["../../../src/ImportSessionWidget/components/ImportSessionWidget.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const configSchema: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{}, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined>>;
2
+ export declare const stateModel: import("mobx-state-tree").IModelType<{
3
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
4
+ type: import("mobx-state-tree").ISimpleType<"ImportSessionWidget">;
5
+ }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
@@ -0,0 +1,9 @@
1
+ import { ConfigurationSchema } from '@jbrowse/core/configuration';
2
+ import { ElementId } from '@jbrowse/core/util/types/mst';
3
+ import { types } from 'mobx-state-tree';
4
+ export const configSchema = ConfigurationSchema('ImportSessionWidget', {});
5
+ export const stateModel = types.model('ImportSessionWidget', {
6
+ id: ElementId,
7
+ type: types.literal('ImportSessionWidget'),
8
+ });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ImportSessionWidget/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAEvC,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAA;AAE1E,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,qBAAqB,EAAE;IAC3D,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC;CAC3C,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ export default function DeleteDialog({ open, sessionNameToDelete, handleClose, }: {
3
+ sessionNameToDelete: string;
4
+ open: boolean;
5
+ handleClose: (arg?: boolean) => void;
6
+ }): React.JSX.Element;