@jbrowse/core 2.4.2 → 2.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 (223) hide show
  1. package/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +16 -0
  2. package/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +45 -0
  3. package/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +15 -0
  4. package/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +52 -0
  5. package/BaseFeatureWidget/BaseFeatureDetail/BasicValue.d.ts +13 -0
  6. package/BaseFeatureWidget/BaseFeatureDetail/BasicValue.js +27 -0
  7. package/BaseFeatureWidget/BaseFeatureDetail/DataGridDetails.d.ts +15 -0
  8. package/BaseFeatureWidget/BaseFeatureDetail/DataGridDetails.js +98 -0
  9. package/BaseFeatureWidget/BaseFeatureDetail/FieldName.d.ts +16 -0
  10. package/BaseFeatureWidget/BaseFeatureDetail/FieldName.js +32 -0
  11. package/BaseFeatureWidget/BaseFeatureDetail/SimpleField.d.ts +17 -0
  12. package/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +23 -0
  13. package/BaseFeatureWidget/BaseFeatureDetail/UriField.d.ts +18 -0
  14. package/BaseFeatureWidget/BaseFeatureDetail/UriField.js +31 -0
  15. package/BaseFeatureWidget/BaseFeatureDetail/UriLink.d.ts +7 -0
  16. package/BaseFeatureWidget/BaseFeatureDetail/UriLink.js +13 -0
  17. package/BaseFeatureWidget/BaseFeatureDetail/index.d.ts +33 -0
  18. package/BaseFeatureWidget/BaseFeatureDetail/index.js +170 -0
  19. package/BaseFeatureWidget/BaseFeatureDetail/util.d.ts +5 -0
  20. package/BaseFeatureWidget/BaseFeatureDetail/util.js +46 -0
  21. package/BaseFeatureWidget/SequenceFeatureDetails/CDNASequence.d.ts +13 -0
  22. package/BaseFeatureWidget/SequenceFeatureDetails/CDNASequence.js +25 -0
  23. package/BaseFeatureWidget/SequenceFeatureDetails/CDSSequence.d.ts +6 -0
  24. package/BaseFeatureWidget/SequenceFeatureDetails/CDSSequence.js +12 -0
  25. package/BaseFeatureWidget/SequenceFeatureDetails/GenomicSequence.d.ts +6 -0
  26. package/BaseFeatureWidget/SequenceFeatureDetails/GenomicSequence.js +14 -0
  27. package/BaseFeatureWidget/SequenceFeatureDetails/ProteinSequence.d.ts +9 -0
  28. package/BaseFeatureWidget/SequenceFeatureDetails/ProteinSequence.js +18 -0
  29. package/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.d.ts +3 -0
  30. package/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.js +143 -0
  31. package/BaseFeatureWidget/{SequenceFeatureSettingsDialog.d.ts → SequenceFeatureDetails/SequenceFeatureSettingsDialog.d.ts} +2 -2
  32. package/BaseFeatureWidget/{SequenceFeatureSettingsDialog.js → SequenceFeatureDetails/SequenceFeatureSettingsDialog.js} +1 -1
  33. package/BaseFeatureWidget/{SequenceHelpDialog.d.ts → SequenceFeatureDetails/SequenceHelpDialog.d.ts} +2 -2
  34. package/BaseFeatureWidget/{SequenceHelpDialog.js → SequenceFeatureDetails/SequenceHelpDialog.js} +6 -9
  35. package/BaseFeatureWidget/{SequencePanel.d.ts → SequenceFeatureDetails/SequencePanel.d.ts} +1 -1
  36. package/BaseFeatureWidget/{SequencePanel.js → SequenceFeatureDetails/SequencePanel.js} +10 -8
  37. package/BaseFeatureWidget/SequenceFeatureDetails/hooks.d.ts +10 -0
  38. package/BaseFeatureWidget/SequenceFeatureDetails/hooks.js +73 -0
  39. package/BaseFeatureWidget/SequenceFeatureDetails/index.d.ts +3 -0
  40. package/BaseFeatureWidget/SequenceFeatureDetails/index.js +68 -0
  41. package/BaseFeatureWidget/{test_data → SequenceFeatureDetails/test_data}/DLGAP3.d.ts +17 -17
  42. package/BaseFeatureWidget/{test_data → SequenceFeatureDetails/test_data}/NCDN.d.ts +16 -16
  43. package/BaseFeatureWidget/SequenceFeatureDetails/util.d.ts +6 -0
  44. package/BaseFeatureWidget/SequenceFeatureDetails/util.js +11 -0
  45. package/BaseFeatureWidget/index.d.ts +4 -1
  46. package/BaseFeatureWidget/index.js +29 -17
  47. package/BaseFeatureWidget/types.d.ts +2 -2
  48. package/BaseFeatureWidget/util.js +15 -5
  49. package/Plugin.d.ts +1 -1
  50. package/PluginLoader.js +17 -0
  51. package/PluginManager.d.ts +8 -5
  52. package/PluginManager.js +3 -0
  53. package/README.md +0 -2
  54. package/ReExports/list.js +1 -0
  55. package/ReExports/modules.d.ts +8 -5
  56. package/ReExports/modules.js +7 -7
  57. package/TextSearch/TextSearchManager.d.ts +2 -9
  58. package/assemblyManager/assembly.d.ts +91 -8
  59. package/assemblyManager/assembly.js +92 -8
  60. package/assemblyManager/assemblyConfigSchema.d.ts +52 -1
  61. package/assemblyManager/assemblyConfigSchema.js +1 -0
  62. package/assemblyManager/assemblyManager.d.ts +227 -58
  63. package/assemblyManager/assemblyManager.js +72 -13
  64. package/assemblyManager/index.d.ts +1 -0
  65. package/configuration/configurationSchema.d.ts +14 -16
  66. package/configuration/configurationSchema.js +4 -2
  67. package/configuration/index.d.ts +1 -1
  68. package/configuration/types.d.ts +15 -0
  69. package/configuration/types.js +2 -0
  70. package/configuration/util.d.ts +5 -3
  71. package/configuration/util.js +18 -18
  72. package/data_adapters/BaseAdapter/BaseAdapter.d.ts +23 -0
  73. package/data_adapters/BaseAdapter/BaseAdapter.js +37 -0
  74. package/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +128 -0
  75. package/data_adapters/{BaseAdapter.js → BaseAdapter/BaseFeatureDataAdapter.js} +58 -88
  76. package/data_adapters/BaseAdapter/BaseOptions.d.ts +16 -0
  77. package/data_adapters/BaseAdapter/BaseOptions.js +2 -0
  78. package/data_adapters/BaseAdapter/BaseRefNameAliasAdapter.d.ts +9 -0
  79. package/data_adapters/BaseAdapter/BaseRefNameAliasAdapter.js +2 -0
  80. package/data_adapters/BaseAdapter/BaseSequenceAdapter.d.ts +13 -0
  81. package/data_adapters/BaseAdapter/BaseSequenceAdapter.js +10 -0
  82. package/data_adapters/BaseAdapter/BaseTextSearchAdapter.d.ts +6 -0
  83. package/data_adapters/BaseAdapter/BaseTextSearchAdapter.js +2 -0
  84. package/data_adapters/BaseAdapter/RegionsAdapter.d.ts +6 -0
  85. package/data_adapters/BaseAdapter/RegionsAdapter.js +2 -0
  86. package/data_adapters/BaseAdapter/index.d.ts +15 -0
  87. package/data_adapters/BaseAdapter/index.js +25 -0
  88. package/data_adapters/BaseAdapter/types.d.ts +21 -0
  89. package/data_adapters/BaseAdapter/types.js +2 -0
  90. package/data_adapters/BaseAdapter/util.d.ts +12 -0
  91. package/data_adapters/BaseAdapter/util.js +23 -0
  92. package/data_adapters/CytobandAdapter/configSchema.d.ts +11 -1
  93. package/package.json +4 -4
  94. package/pluggableElementTypes/AdapterType.d.ts +1 -1
  95. package/pluggableElementTypes/ConnectionType.d.ts +1 -1
  96. package/pluggableElementTypes/DisplayType.d.ts +1 -1
  97. package/pluggableElementTypes/InternetAccountType.d.ts +1 -1
  98. package/pluggableElementTypes/RpcMethodType.d.ts +9 -7
  99. package/pluggableElementTypes/RpcMethodType.js +9 -7
  100. package/pluggableElementTypes/TextSearchAdapterType.d.ts +1 -1
  101. package/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +18 -0
  102. package/pluggableElementTypes/models/BaseConnectionModelFactory.js +9 -0
  103. package/pluggableElementTypes/models/BaseDisplayModel.d.ts +10 -1
  104. package/pluggableElementTypes/models/BaseDisplayModel.js +9 -1
  105. package/pluggableElementTypes/models/BaseTrackModel.d.ts +2 -1
  106. package/pluggableElementTypes/models/BaseTrackModel.js +4 -2
  107. package/pluggableElementTypes/models/BaseViewModel.d.ts +46 -2
  108. package/pluggableElementTypes/models/BaseViewModel.js +6 -0
  109. package/pluggableElementTypes/models/InternetAccountModel.d.ts +36 -2
  110. package/pluggableElementTypes/models/InternetAccountModel.js +33 -21
  111. package/pluggableElementTypes/models/baseConnectionConfig.d.ts +22 -2
  112. package/pluggableElementTypes/models/baseConnectionConfig.js +2 -1
  113. package/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +42 -1
  114. package/pluggableElementTypes/models/baseInternetAccountConfig.js +1 -1
  115. package/pluggableElementTypes/models/baseTrackConfig.d.ts +120 -3
  116. package/pluggableElementTypes/models/baseTrackConfig.js +7 -5
  117. package/pluggableElementTypes/models/index.d.ts +1 -1
  118. package/pluggableElementTypes/renderers/BoxRendererType.js +1 -2
  119. package/pluggableElementTypes/renderers/CircularChordRendererType.d.ts +2 -2
  120. package/pluggableElementTypes/renderers/FeatureRendererType.d.ts +4 -2
  121. package/pluggableElementTypes/renderers/FeatureRendererType.js +4 -6
  122. package/pluggableElementTypes/renderers/RendererType.d.ts +1 -1
  123. package/pluggableElementTypes/renderers/RpcRenderedSvgGroup.d.ts +2 -2
  124. package/pluggableElementTypes/renderers/ServerSideRenderedContent.d.ts +1 -1
  125. package/pluggableElementTypes/renderers/ServerSideRendererType.d.ts +1 -1
  126. package/rpc/BaseRpcDriver.js +1 -7
  127. package/rpc/RpcManager.d.ts +8 -1
  128. package/rpc/RpcManager.js +1 -1
  129. package/rpc/baseRpcConfig.d.ts +10 -1
  130. package/rpc/configSchema.d.ts +14 -1
  131. package/rpc/coreRpcMethods.d.ts +1 -1
  132. package/rpc/coreRpcMethods.js +3 -3
  133. package/rpc/mainThreadRpcConfig.d.ts +7 -1
  134. package/rpc/methods/{CoreEstimateRegionStats.d.ts → CoreGetFeatureDensityStats.d.ts} +2 -2
  135. package/rpc/methods/{CoreEstimateRegionStats.js → CoreGetFeatureDensityStats.js} +4 -4
  136. package/rpc/methods/CoreGetFeatureDetails.js +5 -5
  137. package/rpc/webWorkerRpcConfig.d.ts +7 -1
  138. package/tsconfig.build.tsbuildinfo +1 -1
  139. package/ui/AppLogo.d.ts +2 -2
  140. package/ui/AssemblySelector.d.ts +2 -2
  141. package/ui/AssemblySelector.js +1 -1
  142. package/ui/CascadingMenu.d.ts +2 -2
  143. package/ui/CascadingMenuButton.d.ts +8 -0
  144. package/ui/CascadingMenuButton.js +20 -0
  145. package/ui/ColorPicker.d.ts +4 -4
  146. package/ui/Dialog.d.ts +5 -5
  147. package/ui/Dialog.js +19 -7
  148. package/ui/DropDownMenu.d.ts +2 -2
  149. package/ui/EditableTypography.js +1 -1
  150. package/ui/ErrorMessage.d.ts +2 -2
  151. package/ui/ErrorMessage.js +6 -2
  152. package/ui/FactoryResetDialog.d.ts +2 -2
  153. package/ui/FatalErrorDialog.d.ts +6 -7
  154. package/ui/FatalErrorDialog.js +7 -7
  155. package/ui/FileSelector/FileSelector.d.ts +2 -2
  156. package/ui/FileSelector/FileSelector.js +3 -2
  157. package/ui/FileSelector/LocalFileChooser.d.ts +2 -2
  158. package/ui/FileSelector/UrlChooser.d.ts +3 -4
  159. package/ui/FileSelector/UrlChooser.js +8 -10
  160. package/ui/Icons.d.ts +10 -10
  161. package/ui/LoadingEllipses.d.ts +2 -2
  162. package/ui/Logo.d.ts +3 -3
  163. package/ui/Menu.d.ts +2 -2
  164. package/ui/PrerenderedCanvas.d.ts +2 -2
  165. package/ui/ResizeBar.d.ts +1 -1
  166. package/ui/ResizeBar.js +1 -1
  167. package/ui/ResizeHandle.d.ts +2 -2
  168. package/ui/ReturnToImportFormDialog.d.ts +2 -2
  169. package/ui/SanitizedHTML.d.ts +2 -2
  170. package/ui/SanitizedHTML.js +6 -0
  171. package/ui/Snackbar.d.ts +7 -9
  172. package/ui/Snackbar.js +12 -17
  173. package/ui/SnackbarModel.d.ts +9 -3
  174. package/ui/SnackbarModel.js +3 -3
  175. package/ui/Tooltip.d.ts +2 -2
  176. package/ui/index.d.ts +0 -1
  177. package/ui/index.js +1 -3
  178. package/ui/react-colorful.d.ts +1 -1
  179. package/ui/theme.js +3 -18
  180. package/util/Base1DUtils.js +2 -1
  181. package/util/QuickLRU.d.ts +1 -1
  182. package/util/blockTypes.js +1 -1
  183. package/util/formatFastaStrings.js +1 -1
  184. package/util/index.d.ts +18 -2
  185. package/util/index.js +77 -11
  186. package/util/io/index.js +1 -1
  187. package/util/layouts/PrecomputedMultiLayout.d.ts +1 -1
  188. package/util/mst-reflection.js +1 -2
  189. package/util/offscreenCanvasUtils.d.ts +2 -2
  190. package/util/stats.d.ts +5 -5
  191. package/util/types/index.d.ts +9 -3
  192. package/util/types/index.js +6 -2
  193. package/util/types/mst.d.ts +12 -9
  194. package/util/types/util.d.ts +0 -3
  195. package/BaseFeatureWidget/BaseFeatureDetail.d.ts +0 -62
  196. package/BaseFeatureWidget/BaseFeatureDetail.js +0 -378
  197. package/BaseFeatureWidget/SequenceBox.d.ts +0 -29
  198. package/BaseFeatureWidget/SequenceBox.js +0 -63
  199. package/BaseFeatureWidget/SequenceFeatureDetails.d.ts +0 -3
  200. package/BaseFeatureWidget/SequenceFeatureDetails.js +0 -230
  201. package/data_adapters/BaseAdapter.d.ts +0 -138
  202. package/ui/AboutDialog.d.ts +0 -12
  203. package/ui/AboutDialog.js +0 -125
  204. package/ui/App.d.ts +0 -18
  205. package/ui/App.js +0 -114
  206. package/ui/AppToolbar.d.ts +0 -19
  207. package/ui/AppToolbar.js +0 -56
  208. package/ui/Drawer.d.ts +0 -8
  209. package/ui/Drawer.js +0 -34
  210. package/ui/DrawerWidget.d.ts +0 -6
  211. package/ui/DrawerWidget.js +0 -130
  212. package/ui/ViewContainer.d.ts +0 -9
  213. package/ui/ViewContainer.js +0 -76
  214. package/ui/ViewContainerTitle.d.ts +0 -6
  215. package/ui/ViewContainerTitle.js +0 -42
  216. package/ui/ViewLauncher.d.ts +0 -18
  217. package/ui/ViewLauncher.js +0 -50
  218. package/ui/ViewMenu.d.ts +0 -9
  219. package/ui/ViewMenu.js +0 -69
  220. package/ui/ViewPanel.d.ts +0 -19
  221. package/ui/ViewPanel.js +0 -49
  222. /package/BaseFeatureWidget/{test_data → SequenceFeatureDetails/test_data}/DLGAP3.js +0 -0
  223. /package/BaseFeatureWidget/{test_data → SequenceFeatureDetails/test_data}/NCDN.js +0 -0
@@ -1,230 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- const react_1 = __importStar(require("react"));
30
- const material_1 = require("@mui/material");
31
- const mui_1 = require("tss-react/mui");
32
- const copy_to_clipboard_1 = __importDefault(require("copy-to-clipboard"));
33
- // locals
34
- const util_1 = require("../util");
35
- const configuration_1 = require("../configuration");
36
- const ui_1 = require("../ui");
37
- // icons
38
- const Settings_1 = __importDefault(require("@mui/icons-material/Settings"));
39
- const Help_1 = __importDefault(require("@mui/icons-material/Help"));
40
- // lazies
41
- const SettingsDlg = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./SequenceFeatureSettingsDialog'))));
42
- const HelpDlg = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./SequenceHelpDialog'))));
43
- const SequencePanel = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./SequencePanel'))));
44
- const useStyles = (0, mui_1.makeStyles)()(theme => ({
45
- button: {
46
- margin: theme.spacing(1),
47
- },
48
- formControl: {
49
- margin: 0,
50
- },
51
- container2: {
52
- marginTop: theme.spacing(1),
53
- },
54
- }));
55
- const BPLIMIT = 500000;
56
- // display the stitched-together sequence of a gene's CDS, cDNA, or protein
57
- // sequence. this is a best effort and weird genomic phenomena could lead these
58
- // to not be 100% accurate
59
- function SequenceFeatureDetails({ model, feature }) {
60
- const { classes } = useStyles();
61
- const [shown, setShown] = (0, react_1.useState)(false);
62
- const [helpShown, setHelpShown] = (0, react_1.useState)(false);
63
- return !model ? null : (react_1.default.createElement("div", { className: classes.container2 },
64
- react_1.default.createElement(material_1.Button, { variant: "contained", onClick: () => setShown(!shown) }, shown ? 'Hide feature sequence' : 'Show feature sequence'),
65
- react_1.default.createElement(material_1.FormControl, { className: classes.formControl },
66
- react_1.default.createElement(material_1.IconButton, { onClick: () => setHelpShown(true) },
67
- react_1.default.createElement(Help_1.default, null))),
68
- react_1.default.createElement("br", null),
69
- shown ? react_1.default.createElement(FeatureSequence, { model: model, feature: feature }) : null,
70
- helpShown ? (react_1.default.createElement(react_1.Suspense, { fallback: react_1.default.createElement("div", null) },
71
- react_1.default.createElement(HelpDlg, { handleClose: () => setHelpShown(false) }))) : null));
72
- }
73
- exports.default = SequenceFeatureDetails;
74
- function FeatureSequence({ model, feature }) {
75
- var _a, _b;
76
- const { classes } = useStyles();
77
- const parentFeature = feature;
78
- const hasCDS = !!((_a = parentFeature.subfeatures) === null || _a === void 0 ? void 0 : _a.find(sub => sub.type === 'CDS'));
79
- const seqPanelRef = (0, react_1.useRef)(null);
80
- const [settingsDlgOpen, setSettingsDlgOpen] = (0, react_1.useState)(false);
81
- const [intronBp, setIntronBp] = (0, util_1.useLocalStorage)('intronBp', 10);
82
- const [upDownBp, setUpDownBp] = (0, util_1.useLocalStorage)('upDownBp', 500);
83
- const [sequence, setSequence] = (0, react_1.useState)();
84
- const [error, setError] = (0, react_1.useState)();
85
- const [copied, setCopied] = (0, react_1.useState)(false);
86
- const [copiedHtml, setCopiedHtml] = (0, react_1.useState)(false);
87
- const [forceLoad, setForceLoad] = (0, react_1.useState)({
88
- id: feature.uniqueId,
89
- force: false,
90
- });
91
- (0, react_1.useEffect)(() => {
92
- setForceLoad({
93
- id: feature.uniqueId,
94
- force: false,
95
- });
96
- }, [feature]);
97
- (0, react_1.useEffect)(() => {
98
- var _a;
99
- let finished = false;
100
- if (!model) {
101
- return () => { };
102
- }
103
- const { assemblyManager, rpcManager } = (0, util_1.getSession)(model);
104
- const [assemblyName] = ((_a = model.view) === null || _a === void 0 ? void 0 : _a.assemblyNames) || [];
105
- async function fetchSeq(start, end, refName) {
106
- const assembly = await assemblyManager.waitForAssembly(assemblyName);
107
- if (!assembly) {
108
- throw new Error('assembly not found');
109
- }
110
- const sessionId = 'getSequence';
111
- const feats = await rpcManager.call(sessionId, 'CoreGetFeatures', {
112
- adapterConfig: (0, configuration_1.getConf)(assembly, ['sequence', 'adapter']),
113
- sessionId,
114
- regions: [
115
- {
116
- start,
117
- end,
118
- refName: assembly.getCanonicalRefName(refName),
119
- assemblyName,
120
- },
121
- ],
122
- });
123
- const [feat] = feats;
124
- return (feat === null || feat === void 0 ? void 0 : feat.get('seq')) || '';
125
- }
126
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
127
- ;
128
- (async () => {
129
- try {
130
- setError(undefined);
131
- const { start, end, refName } = feature;
132
- if (!forceLoad.force && end - start > BPLIMIT) {
133
- setSequence({
134
- error: `Genomic sequence larger than ${BPLIMIT}bp, use "force load" button to display`,
135
- });
136
- }
137
- else {
138
- const seq = await fetchSeq(start, end, refName);
139
- const up = await fetchSeq(Math.max(0, start - upDownBp), start, refName);
140
- const down = await fetchSeq(end, end + upDownBp, refName);
141
- if (!finished) {
142
- setSequence({ seq, upstream: up, downstream: down });
143
- }
144
- }
145
- }
146
- catch (e) {
147
- console.error(e);
148
- setError(e);
149
- }
150
- })();
151
- return () => {
152
- finished = true;
153
- };
154
- }, [feature, model, upDownBp, forceLoad]);
155
- const loading = !sequence;
156
- const session = (0, util_1.getSession)(model);
157
- const defaultSeqTypes = ['mRNA', 'transcript', 'gene'];
158
- const sequenceTypes = (0, configuration_1.getConf)(session, ['featureDetails', 'sequenceTypes']) || defaultSeqTypes;
159
- // only attempt fetching gene type sequence on a bare CDS if it has no parent
160
- const attemptGeneType = feature.type === 'CDS'
161
- ? sequenceTypes.includes('CDS') && !feature.parentId
162
- : sequenceTypes.includes(feature.type) && ((_b = feature.subfeatures) === null || _b === void 0 ? void 0 : _b.length);
163
- const val = attemptGeneType ? (hasCDS ? 'cds' : 'cdna') : 'genomic';
164
- // this useEffect is needed to reset the mode/setMode useState because the
165
- // contents of the select box can completely change depending on whether we
166
- // click on a gene feature or non-gene feature, so the current value in the
167
- // select box must change accordingly
168
- (0, react_1.useEffect)(() => {
169
- setMode(val);
170
- }, [attemptGeneType, val]);
171
- const [mode, setMode] = (0, react_1.useState)(attemptGeneType ? (hasCDS ? 'cds' : 'cdna') : 'genomic');
172
- const rest = {
173
- gene: 'Gene w/ introns',
174
- gene_collapsed_intron: `Gene w/ ${intronBp}bp of intron`,
175
- gene_updownstream: `Gene w/ ${upDownBp}bp up+down stream`,
176
- gene_updownstream_collapsed_intron: `Gene w/ ${upDownBp}bp up+down stream w/ ${intronBp}bp intron`,
177
- cdna: 'cDNA',
178
- };
179
- const arg = attemptGeneType
180
- ? hasCDS
181
- ? {
182
- cds: 'CDS',
183
- protein: 'Protein',
184
- ...rest,
185
- }
186
- : rest
187
- : {
188
- genomic: 'Genomic seq',
189
- genomic_sequence_updown: `Genomic seq w/ ${upDownBp}bp up+down stream`,
190
- };
191
- return (react_1.default.createElement("div", { className: classes.container2 },
192
- react_1.default.createElement(material_1.FormControl, { className: classes.formControl },
193
- react_1.default.createElement(material_1.Select, { value: mode, onChange: event => setMode(event.target.value) }, Object.entries(arg).map(([key, val]) => (react_1.default.createElement(material_1.MenuItem, { key: key, value: key }, val))))),
194
- react_1.default.createElement(material_1.FormControl, { className: classes.formControl },
195
- react_1.default.createElement(material_1.Button, { className: classes.button, variant: "contained", onClick: () => {
196
- const ref = seqPanelRef.current;
197
- if (ref) {
198
- (0, copy_to_clipboard_1.default)(ref.textContent || '', { format: 'text/plain' });
199
- setCopied(true);
200
- setTimeout(() => setCopied(false), 1000);
201
- }
202
- } }, copied ? 'Copied to clipboard!' : 'Copy plaintext')),
203
- react_1.default.createElement(material_1.FormControl, { className: classes.formControl },
204
- react_1.default.createElement(material_1.Tooltip, { title: "The 'Copy HTML' function retains the colors from the sequence panel but cannot be pasted into some programs like notepad that only expect plain text" },
205
- react_1.default.createElement(material_1.Button, { className: classes.button, variant: "contained", onClick: () => {
206
- const ref = seqPanelRef.current;
207
- if (ref) {
208
- (0, copy_to_clipboard_1.default)(ref.innerHTML, { format: 'text/html' });
209
- setCopiedHtml(true);
210
- setTimeout(() => setCopiedHtml(false), 1000);
211
- }
212
- } }, copiedHtml ? 'Copied to clipboard!' : 'Copy HTML'))),
213
- react_1.default.createElement(material_1.FormControl, { className: classes.formControl },
214
- react_1.default.createElement(material_1.IconButton, { onClick: () => setSettingsDlgOpen(true) },
215
- react_1.default.createElement(Settings_1.default, null))),
216
- react_1.default.createElement("br", null),
217
- error ? (react_1.default.createElement(material_1.Typography, { color: "error" }, `${error}`)) : loading ? (react_1.default.createElement(ui_1.LoadingEllipses, null)) : sequence ? ('error' in sequence ? (react_1.default.createElement(react_1.default.Fragment, null,
218
- react_1.default.createElement(material_1.Typography, { color: "error" }, sequence.error),
219
- react_1.default.createElement(material_1.Button, { variant: "contained", color: "inherit", onClick: () => setForceLoad({ ...forceLoad, force: true }) }, "Force load"))) : (react_1.default.createElement(react_1.Suspense, { fallback: react_1.default.createElement("div", null, "Loading") },
220
- react_1.default.createElement(SequencePanel, { ref: seqPanelRef, feature: parentFeature, mode: mode, sequence: sequence, intronBp: intronBp })))) : (react_1.default.createElement(material_1.Typography, null, "No sequence found")),
221
- settingsDlgOpen ? (react_1.default.createElement(react_1.Suspense, { fallback: react_1.default.createElement("div", null) },
222
- react_1.default.createElement(SettingsDlg, { handleClose: arg => {
223
- if (arg) {
224
- const { upDownBp, intronBp } = arg;
225
- setIntronBp(intronBp);
226
- setUpDownBp(upDownBp);
227
- }
228
- setSettingsDlgOpen(false);
229
- }, upDownBp: upDownBp, intronBp: intronBp }))) : null));
230
- }
@@ -1,138 +0,0 @@
1
- import { Observable } from 'rxjs';
2
- import { Feature } from '../util/simpleFeature';
3
- import { AnyConfigurationModel } from '../configuration';
4
- import { getSubAdapterType } from './dataAdapterCache';
5
- import { AugmentedRegion as Region, NoAssemblyRegion } from '../util/types';
6
- import BaseResult from '../TextSearch/BaseResults';
7
- import PluginManager from '../PluginManager';
8
- export interface BaseOptions {
9
- signal?: AbortSignal;
10
- bpPerPx?: number;
11
- sessionId?: string;
12
- statusCallback?: (message: string) => void;
13
- headers?: Record<string, string>;
14
- [key: string]: unknown;
15
- }
16
- export type SearchType = 'full' | 'prefix' | 'exact';
17
- export interface BaseArgs {
18
- searchType?: SearchType;
19
- queryString: string;
20
- signal?: AbortSignal;
21
- limit?: number;
22
- pageNumber?: number;
23
- }
24
- export interface AnyAdapter {
25
- new (config: AnyConfigurationModel, getSubAdapter?: getSubAdapterType, pluginManager?: PluginManager | undefined): AnyDataAdapter;
26
- }
27
- export type AnyDataAdapter = BaseAdapter | BaseFeatureDataAdapter | BaseRefNameAliasAdapter | BaseTextSearchAdapter | RegionsAdapter | BaseSequenceAdapter;
28
- export interface SequenceAdapter extends BaseFeatureDataAdapter, RegionsAdapter {
29
- }
30
- export declare abstract class BaseAdapter {
31
- config: AnyConfigurationModel;
32
- getSubAdapter?: getSubAdapterType | undefined;
33
- pluginManager?: PluginManager | undefined;
34
- id: string;
35
- static capabilities: string[];
36
- constructor(config?: AnyConfigurationModel, getSubAdapter?: getSubAdapterType | undefined, pluginManager?: PluginManager | undefined);
37
- getConf(arg: string | string[]): any;
38
- /**
39
- * Called to provide a hint that data tied to a certain region will not be
40
- * needed for the foreseeable future and can be purged from caches, etc
41
- * @param region - Region
42
- */
43
- abstract freeResources(region: Region): void;
44
- }
45
- export interface Stats {
46
- featureDensity?: number;
47
- fetchSizeLimit?: number;
48
- bytes?: number;
49
- }
50
- /**
51
- * Base class for feature adapters to extend. Defines some methods that
52
- * subclasses must implement.
53
- */
54
- export declare abstract class BaseFeatureDataAdapter extends BaseAdapter {
55
- /**
56
- * Get all reference sequence names used in the data source
57
- *
58
- * NOTE: If an adapter is unable to determine the reference sequence names,
59
- * the array will be empty
60
- * @param opts - Feature adapter options
61
- */
62
- abstract getRefNames(opts?: BaseOptions): Promise<string[]>;
63
- /**
64
- * Get features from the data source that overlap a region
65
- * @param region - Region
66
- * @param opts - Feature adapter options
67
- * @returns Observable of Feature objects in the region
68
- */
69
- abstract getFeatures(region: Region, opts?: BaseOptions): Observable<Feature>;
70
- /**
71
- * Return "header info" that is fetched from the data file, or other info
72
- * that would not simply be in the config of the file. The return value can
73
- * be `{tag:string, data: any}[]` e.g. list of tags with their values which
74
- * is how VCF,BAM,CRAM return values for getInfo or it can be a nested JSON
75
- * object
76
- */
77
- getHeader(_opts?: BaseOptions): Promise<unknown>;
78
- /**
79
- * Return info that is primarily used for interpreting the data that is there,
80
- * primarily in reference to being used for augmenting feature details panels
81
- */
82
- getMetadata(_opts?: BaseOptions): Promise<unknown>;
83
- /**
84
- * Checks if the store has data for the given assembly and reference
85
- * sequence, and then gets the features in the region if it does.
86
- */
87
- getFeaturesInRegion(region: Region, opts?: BaseOptions): Observable<Feature>;
88
- /**
89
- * Checks if the store has data for the given assembly and reference
90
- * sequence, and then gets the features in the region if it does.
91
- *
92
- * Currently this just calls getFeatureInRegion for each region. Adapters
93
- * that are frequently called on multiple regions simultaneously may
94
- * want to implement a more efficient custom version of this method.
95
- *
96
- * Currently this just calls getFeatureInRegion for each region. Adapters that
97
- * are frequently called on multiple regions simultaneously may want to
98
- * implement a more efficient custom version of this method.
99
- *
100
- * @param regions - Regions
101
- * @param opts - Feature adapter options
102
- * @returns Observable of Feature objects in the regions
103
- */
104
- getFeaturesInMultipleRegions(regions: Region[], opts?: BaseOptions): Observable<Feature>;
105
- /**
106
- * Check if the store has data for the given reference name.
107
- * @param refName - Name of the reference sequence
108
- * @returns Whether data source has data for the given reference name
109
- */
110
- hasDataForRefName(refName: string, opts?: BaseOptions): Promise<boolean>;
111
- getRegionStats(region: Region, opts?: BaseOptions): Promise<import("../util/stats").FeatureStats>;
112
- getMultiRegionStats(regions?: Region[], opts?: BaseOptions): Promise<import("../util/stats").FeatureStats>;
113
- estimateRegionsStats(regions: Region[], opts?: BaseOptions): Promise<Stats>;
114
- }
115
- export interface RegionsAdapter extends BaseAdapter {
116
- getRegions(opts: BaseOptions): Promise<NoAssemblyRegion[]>;
117
- }
118
- export declare abstract class BaseSequenceAdapter extends BaseFeatureDataAdapter implements RegionsAdapter {
119
- estimateRegionsStats(): Promise<{
120
- featureDensity: number;
121
- }>;
122
- abstract getRegions(opts: BaseOptions): Promise<NoAssemblyRegion[]>;
123
- }
124
- export declare function isSequenceAdapter(thing: AnyDataAdapter): thing is BaseSequenceAdapter;
125
- export declare function isRegionsAdapter(thing: AnyDataAdapter): thing is RegionsAdapter;
126
- export declare function isFeatureAdapter(thing: AnyDataAdapter): thing is BaseFeatureDataAdapter;
127
- export interface Alias {
128
- refName: string;
129
- aliases: string[];
130
- }
131
- export interface BaseRefNameAliasAdapter extends BaseAdapter {
132
- getRefNameAliases(opts: BaseOptions): Promise<Alias[]>;
133
- }
134
- export declare function isRefNameAliasAdapter(thing: object): thing is BaseRefNameAliasAdapter;
135
- export interface BaseTextSearchAdapter extends BaseAdapter {
136
- searchIndex(args: BaseArgs): Promise<BaseResult[]>;
137
- }
138
- export declare function isTextSearchAdapter(thing: AnyDataAdapter): thing is BaseTextSearchAdapter;
@@ -1,12 +0,0 @@
1
- /// <reference types="react" />
2
- import { AnyConfigurationModel } from '../configuration';
3
- export declare function FileInfoPanel({ config }: {
4
- config: AnyConfigurationModel;
5
- }): JSX.Element | null;
6
- export declare function AboutContents({ config }: {
7
- config: AnyConfigurationModel;
8
- }): JSX.Element;
9
- export default function AboutDialog({ config, handleClose, }: {
10
- config: AnyConfigurationModel;
11
- handleClose: () => void;
12
- }): JSX.Element;
package/ui/AboutDialog.js DELETED
@@ -1,125 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.AboutContents = exports.FileInfoPanel = void 0;
30
- const react_1 = __importStar(require("react"));
31
- const copy_to_clipboard_1 = __importDefault(require("copy-to-clipboard"));
32
- const material_1 = require("@mui/material");
33
- const mui_1 = require("tss-react/mui");
34
- const configuration_1 = require("../configuration");
35
- const Dialog_1 = __importDefault(require("./Dialog"));
36
- const LoadingEllipses_1 = __importDefault(require("./LoadingEllipses"));
37
- const util_1 = require("../util");
38
- const tracks_1 = require("../util/tracks");
39
- const BaseFeatureDetail_1 = require("../BaseFeatureWidget/BaseFeatureDetail");
40
- const useStyles = (0, mui_1.makeStyles)()({
41
- content: {
42
- minWidth: 800,
43
- },
44
- });
45
- function FileInfoPanel({ config }) {
46
- const [error, setError] = (0, react_1.useState)();
47
- const [info, setInfo] = (0, react_1.useState)();
48
- const session = (0, util_1.getSession)(config);
49
- const { rpcManager } = session;
50
- (0, react_1.useEffect)(() => {
51
- const aborter = new AbortController();
52
- const { signal } = aborter;
53
- let cancelled = false;
54
- (async () => {
55
- try {
56
- const adapterConfig = (0, configuration_1.readConfObject)(config, 'adapter');
57
- const result = await rpcManager.call(config.trackId, 'CoreGetInfo', {
58
- adapterConfig,
59
- signal,
60
- });
61
- if (!cancelled) {
62
- setInfo(result);
63
- }
64
- }
65
- catch (e) {
66
- if (!cancelled) {
67
- console.error(e);
68
- setError(e);
69
- }
70
- }
71
- })();
72
- return () => {
73
- aborter.abort();
74
- cancelled = true;
75
- };
76
- }, [config, rpcManager]);
77
- const details = typeof info === 'string'
78
- ? {
79
- header: `<pre>${info
80
- .replace(/</g, '&lt;')
81
- .replace(/>/g, '&gt;')}</pre>`,
82
- }
83
- : info || {};
84
- return info !== null ? (react_1.default.createElement(BaseFeatureDetail_1.BaseCard, { title: "File info" }, error ? (react_1.default.createElement(material_1.Typography, { color: "error" }, `${error}`)) : info === undefined ? (react_1.default.createElement(LoadingEllipses_1.default, { message: "Loading file data" })) : (react_1.default.createElement(BaseFeatureDetail_1.Attributes, { attributes: details })))) : null;
85
- }
86
- exports.FileInfoPanel = FileInfoPanel;
87
- function AboutContents({ config }) {
88
- const [copied, setCopied] = (0, react_1.useState)(false);
89
- const conf = (0, configuration_1.readConfObject)(config);
90
- const session = (0, util_1.getSession)(config);
91
- const hideUris = (0, configuration_1.getConf)(session, ['formatAbout', 'hideUris']) ||
92
- (0, configuration_1.readConfObject)(config, ['formatAbout', 'hideUris']);
93
- const { pluginManager } = (0, util_1.getEnv)(session);
94
- const confPostExt = pluginManager.evaluateExtensionPoint('Core-customizeAbout', {
95
- config: {
96
- ...conf,
97
- ...(0, configuration_1.getConf)(session, ['formatAbout', 'config'], { config: conf }),
98
- ...(0, configuration_1.readConfObject)(config, ['formatAbout', 'config'], { config: conf }),
99
- },
100
- }, { session, config });
101
- const ExtraPanel = pluginManager.evaluateExtensionPoint('Core-extraAboutPanel', null, { session, config });
102
- return (react_1.default.createElement(react_1.default.Fragment, null,
103
- react_1.default.createElement(BaseFeatureDetail_1.BaseCard, { title: "Configuration" },
104
- !hideUris ? (react_1.default.createElement(material_1.Button, { variant: "contained", style: { float: 'right' }, onClick: () => {
105
- (0, copy_to_clipboard_1.default)(JSON.stringify(conf, null, 2));
106
- setCopied(true);
107
- setTimeout(() => setCopied(false), 1000);
108
- } }, copied ? 'Copied to clipboard!' : 'Copy config')) : null,
109
- react_1.default.createElement(BaseFeatureDetail_1.Attributes, { attributes: confPostExt, omit: ['displays', 'baseUri', 'refNames', 'formatAbout'], hideUris: hideUris })),
110
- ExtraPanel ? (react_1.default.createElement(BaseFeatureDetail_1.BaseCard, { title: ExtraPanel.name },
111
- react_1.default.createElement(ExtraPanel.Component, { config: config }))) : null,
112
- react_1.default.createElement(FileInfoPanel, { config: config })));
113
- }
114
- exports.AboutContents = AboutContents;
115
- function AboutDialog({ config, handleClose, }) {
116
- const { classes } = useStyles();
117
- const session = (0, util_1.getSession)(config);
118
- const trackName = (0, tracks_1.getTrackName)(config, session);
119
- const { pluginManager } = (0, util_1.getEnv)(session);
120
- const AboutComponent = pluginManager.evaluateExtensionPoint('Core-replaceAbout', AboutContents, { session, config });
121
- return (react_1.default.createElement(Dialog_1.default, { open: true, onClose: handleClose, title: trackName, maxWidth: "xl" },
122
- react_1.default.createElement(material_1.DialogContent, { className: classes.content },
123
- react_1.default.createElement(AboutComponent, { config: config }))));
124
- }
125
- exports.default = AboutDialog;
package/ui/App.d.ts DELETED
@@ -1,18 +0,0 @@
1
- import React from 'react';
2
- import { NotificationLevel, SessionWithDrawerWidgets, SnackAction } from '../util';
3
- import { MenuItem as JBMenuItem } from './Menu';
4
- type SnackbarMessage = [string, NotificationLevel, SnackAction];
5
- declare const App: (props: {
6
- HeaderButtons?: React.ReactElement<any, string | React.JSXElementConstructor<any>> | undefined;
7
- session: SessionWithDrawerWidgets & {
8
- savedSessionNames: string[];
9
- menus: {
10
- label: string;
11
- menuItems: JBMenuItem[];
12
- }[];
13
- renameCurrentSession: (arg: string) => void;
14
- snackbarMessages: SnackbarMessage[];
15
- popSnackbarMessage: () => unknown;
16
- };
17
- }) => JSX.Element;
18
- export default App;
package/ui/App.js DELETED
@@ -1,114 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- const react_1 = __importStar(require("react"));
30
- const material_1 = require("@mui/material");
31
- const mui_1 = require("tss-react/mui");
32
- const Launch_1 = __importDefault(require("@mui/icons-material/Launch"));
33
- const mobx_react_1 = require("mobx-react");
34
- // ui elements
35
- const DrawerWidget_1 = __importDefault(require("./DrawerWidget"));
36
- const AppToolbar_1 = __importDefault(require("./AppToolbar"));
37
- const Snackbar_1 = __importDefault(require("./Snackbar"));
38
- const ViewLauncher_1 = __importDefault(require("./ViewLauncher"));
39
- const ViewPanel_1 = __importDefault(require("./ViewPanel"));
40
- const useStyles = (0, mui_1.makeStyles)()(theme => ({
41
- root: {
42
- fontFamily: 'Roboto',
43
- display: 'grid',
44
- height: '100vh',
45
- width: '100%',
46
- colorScheme: theme.palette.mode,
47
- },
48
- fabLeft: {
49
- zIndex: 10000,
50
- position: 'fixed',
51
- bottom: theme.spacing(2),
52
- left: theme.spacing(2),
53
- },
54
- fabRight: {
55
- zIndex: 10000,
56
- position: 'fixed',
57
- bottom: theme.spacing(2),
58
- right: theme.spacing(2),
59
- },
60
- menuBarAndComponents: {
61
- gridColumn: 'main',
62
- display: 'grid',
63
- gridTemplateRows: '[menubar] min-content [components] auto',
64
- height: '100vh',
65
- },
66
- menuBar: {
67
- gridRow: 'menubar',
68
- },
69
- components: {
70
- overflowY: 'auto',
71
- gridRow: 'components',
72
- },
73
- appBar: {
74
- flexGrow: 1,
75
- },
76
- }));
77
- const App = (0, mobx_react_1.observer)(function (props) {
78
- const { session } = props;
79
- const { classes } = useStyles();
80
- const { minimized, visibleWidget, drawerWidth, activeWidgets, views, drawerPosition, } = session;
81
- const drawerVisible = visibleWidget && !minimized;
82
- let grid;
83
- if (drawerPosition === 'right') {
84
- grid = [
85
- `[main] 1fr`,
86
- drawerVisible ? `[drawer] ${drawerWidth}px` : undefined,
87
- ];
88
- }
89
- else if (drawerPosition === 'left') {
90
- grid = [
91
- drawerVisible ? `[drawer] ${drawerWidth}px` : undefined,
92
- `[main] 1fr`,
93
- ];
94
- }
95
- return (react_1.default.createElement("div", { className: classes.root, style: {
96
- gridTemplateColumns: grid === null || grid === void 0 ? void 0 : grid.filter(f => !!f).join(' '),
97
- } },
98
- drawerVisible && drawerPosition === 'left' ? (react_1.default.createElement(DrawerWidget_1.default, { session: session })) : null,
99
- session.DialogComponent ? (react_1.default.createElement(react_1.Suspense, { fallback: react_1.default.createElement("div", null) },
100
- react_1.default.createElement(session.DialogComponent, { ...session.DialogProps }))) : null,
101
- react_1.default.createElement("div", { className: classes.menuBarAndComponents },
102
- react_1.default.createElement("div", { className: classes.menuBar },
103
- react_1.default.createElement(material_1.AppBar, { className: classes.appBar, position: "static" },
104
- react_1.default.createElement(AppToolbar_1.default, { ...props }))),
105
- react_1.default.createElement("div", { className: classes.components },
106
- views.length > 0 ? (views.map(view => (react_1.default.createElement(ViewPanel_1.default, { key: `view-${view.id}`, view: view, session: session })))) : (react_1.default.createElement(ViewLauncher_1.default, { ...props })),
107
- react_1.default.createElement("div", { style: { height: 300 } }))),
108
- activeWidgets.size > 0 && minimized ? (react_1.default.createElement(material_1.Tooltip, { title: "Open drawer widget" },
109
- react_1.default.createElement(material_1.Fab, { className: drawerPosition === 'right' ? classes.fabRight : classes.fabLeft, color: "primary", "data-testid": "drawer-maximize", onClick: () => session.showWidgetDrawer() },
110
- react_1.default.createElement(Launch_1.default, null)))) : null,
111
- drawerVisible && drawerPosition === 'right' ? (react_1.default.createElement(DrawerWidget_1.default, { session: session })) : null,
112
- react_1.default.createElement(Snackbar_1.default, { session: session })));
113
- });
114
- exports.default = App;
@@ -1,19 +0,0 @@
1
- import React from 'react';
2
- import { NotificationLevel, SessionWithDrawerWidgets, SnackAction } from '../util';
3
- import { MenuItem as JBMenuItem } from './Menu';
4
- type SnackbarMessage = [string, NotificationLevel, SnackAction];
5
- type AppSession = SessionWithDrawerWidgets & {
6
- savedSessionNames: string[];
7
- menus: {
8
- label: string;
9
- menuItems: JBMenuItem[];
10
- }[];
11
- renameCurrentSession: (arg: string) => void;
12
- snackbarMessages: SnackbarMessage[];
13
- popSnackbarMessage: () => unknown;
14
- };
15
- declare const AppToolbar: ({ session, HeaderButtons, }: {
16
- HeaderButtons?: React.ReactElement<any, string | React.JSXElementConstructor<any>> | undefined;
17
- session: AppSession;
18
- }) => JSX.Element;
19
- export default AppToolbar;