@jbrowse/plugin-linear-genome-view 1.7.8 → 1.7.9

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.
@@ -172,8 +172,8 @@ export declare const BaseLinearDisplay: import("mobx-state-tree").IModelType<{
172
172
  signal?: AbortSignal;
173
173
  filters?: string[];
174
174
  }): Promise<{}>;
175
- setRegionStatsP(p?: Promise<Stats> | undefined): void;
176
- setRegionStats(estimatedRegionStats?: Stats | undefined): void;
175
+ setRegionStatsP(p?: Promise<Stats>): void;
176
+ setRegionStats(estimatedRegionStats?: Stats): void;
177
177
  clearRegionStats(): void;
178
178
  setHeight(displayHeight: number): number;
179
179
  resizeHeight(distance: number): number;
@@ -186,7 +186,7 @@ export declare const BaseLinearDisplay: import("mobx-state-tree").IModelType<{
186
186
  clearFeatureSelection(): void;
187
187
  setFeatureIdUnderMouse(feature: string | undefined): void;
188
188
  reload(): void;
189
- setContextMenuFeature(feature?: Feature | undefined): void;
189
+ setContextMenuFeature(feature?: Feature): void;
190
190
  } & {
191
191
  readonly regionTooLarge: boolean;
192
192
  readonly regionTooLargeReason: string;
@@ -17,17 +17,17 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
17
17
 
18
18
  var _react = _interopRequireWildcard(require("react"));
19
19
 
20
- var _styles = require("@material-ui/core/styles");
21
-
22
20
  var _core = require("@material-ui/core");
23
21
 
22
+ var _ui = require("@jbrowse/core/ui");
23
+
24
24
  var _Close = _interopRequireDefault(require("@material-ui/icons/Close"));
25
25
 
26
26
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
27
27
 
28
28
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
29
29
 
30
- var useStyles = (0, _styles.makeStyles)(function (theme) {
30
+ var useStyles = (0, _core.makeStyles)(function (theme) {
31
31
  return {
32
32
  closeButton: {
33
33
  position: 'absolute',
@@ -38,6 +38,17 @@ var useStyles = (0, _styles.makeStyles)(function (theme) {
38
38
  };
39
39
  });
40
40
 
41
+ function LoadingMessage() {
42
+ return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_core.CircularProgress, {
43
+ size: 20,
44
+ style: {
45
+ marginRight: 20
46
+ }
47
+ }), /*#__PURE__*/_react.default.createElement(_core.Typography, {
48
+ display: "inline"
49
+ }, "Creating SVG"));
50
+ }
51
+
41
52
  function ExportSvgDlg(_ref) {
42
53
  var model = _ref.model,
43
54
  handleClose = _ref.handleClose;
@@ -54,10 +65,15 @@ function ExportSvgDlg(_ref) {
54
65
  loading = _useState4[0],
55
66
  setLoading = _useState4[1];
56
67
 
57
- var _useState5 = (0, _react.useState)(),
68
+ var _useState5 = (0, _react.useState)('jbrowse.svg'),
58
69
  _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
59
- error = _useState6[0],
60
- setError = _useState6[1];
70
+ filename = _useState6[0],
71
+ setFilename = _useState6[1];
72
+
73
+ var _useState7 = (0, _react.useState)(),
74
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
75
+ error = _useState8[0],
76
+ setError = _useState8[1];
61
77
 
62
78
  var classes = useStyles();
63
79
  return /*#__PURE__*/_react.default.createElement(_core.Dialog, {
@@ -66,18 +82,15 @@ function ExportSvgDlg(_ref) {
66
82
  }, /*#__PURE__*/_react.default.createElement(_core.DialogTitle, null, "Export SVG", /*#__PURE__*/_react.default.createElement(_core.IconButton, {
67
83
  className: classes.closeButton,
68
84
  onClick: handleClose
69
- }, /*#__PURE__*/_react.default.createElement(_Close.default, null))), /*#__PURE__*/_react.default.createElement(_core.DialogContent, null, error ? /*#__PURE__*/_react.default.createElement("div", {
70
- style: {
71
- color: 'red'
85
+ }, /*#__PURE__*/_react.default.createElement(_Close.default, null))), /*#__PURE__*/_react.default.createElement(_core.DialogContent, null, error ? /*#__PURE__*/_react.default.createElement(_ui.ErrorMessage, {
86
+ error: error
87
+ }) : loading ? /*#__PURE__*/_react.default.createElement(LoadingMessage, null) : null, /*#__PURE__*/_react.default.createElement(_core.TextField, {
88
+ helperText: "filename",
89
+ value: filename,
90
+ onChange: function onChange(event) {
91
+ return setFilename(event.target.value);
72
92
  }
73
- }, "".concat(error)) : loading ? /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_core.CircularProgress, {
74
- size: 20,
75
- style: {
76
- marginRight: 20
77
- }
78
- }), /*#__PURE__*/_react.default.createElement(_core.Typography, {
79
- display: "inline"
80
- }, "Creating SVG")) : null, offscreenCanvas ? /*#__PURE__*/_react.default.createElement(_core.FormControlLabel, {
93
+ }), offscreenCanvas ? /*#__PURE__*/_react.default.createElement(_core.FormControlLabel, {
81
94
  control: /*#__PURE__*/_react.default.createElement(_core.Checkbox, {
82
95
  checked: rasterizeLayers,
83
96
  onChange: function onChange() {
@@ -107,12 +120,13 @@ function ExportSvgDlg(_ref) {
107
120
  _context.prev = 2;
108
121
  _context.next = 5;
109
122
  return model.exportSvg({
110
- rasterizeLayers: rasterizeLayers
123
+ rasterizeLayers: rasterizeLayers,
124
+ filename: filename
111
125
  });
112
126
 
113
127
  case 5:
114
128
  handleClose();
115
- _context.next = 12;
129
+ _context.next = 13;
116
130
  break;
117
131
 
118
132
  case 8:
@@ -120,18 +134,14 @@ function ExportSvgDlg(_ref) {
120
134
  _context.t0 = _context["catch"](2);
121
135
  console.error(_context.t0);
122
136
  setError(_context.t0);
123
-
124
- case 12:
125
- _context.prev = 12;
126
137
  setLoading(false);
127
- return _context.finish(12);
128
138
 
129
- case 15:
139
+ case 13:
130
140
  case "end":
131
141
  return _context.stop();
132
142
  }
133
143
  }
134
- }, _callee, null, [[2, 8, 12, 15]]);
144
+ }, _callee, null, [[2, 8]]);
135
145
  }))
136
146
  }, "Submit")));
137
147
  }
@@ -20,6 +20,7 @@ export interface BpOffset {
20
20
  }
21
21
  export interface ExportSvgOptions {
22
22
  rasterizeLayers?: boolean;
23
+ filename?: string;
23
24
  }
24
25
  export interface NavLocation {
25
26
  refName: string;
@@ -180,7 +181,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
180
181
  toggleCenterLine(): void;
181
182
  setDisplayedRegions(regions: Region[]): void;
182
183
  activateTrackSelector(): import("@jbrowse/core/util").Widget;
183
- navToLocString(locString: string, optAssemblyName?: string | undefined): void;
184
+ navToLocString(locString: string, optAssemblyName?: string): void;
184
185
  /**
185
186
  * Navigate to a location based on its refName and optionally start, end,
186
187
  * and assemblyName. Can handle if there are multiple displayedRegions
@@ -245,8 +246,8 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
245
246
  centerAt(bp: number, refName: string, regionIndex: number): void;
246
247
  center(): void;
247
248
  showAllRegions(): void;
248
- showAllRegionsInAssembly(assemblyName?: string | undefined): void;
249
- setDraggingTrackId(idx?: string | undefined): void;
249
+ showAllRegionsInAssembly(assemblyName?: string): void;
250
+ setDraggingTrackId(idx?: string): void;
250
251
  setScaleFactor(factor: number): void;
251
252
  } & {
252
253
  slide: (viewWidths: number) => void;
@@ -1380,7 +1380,7 @@ function stateModelFactory(pluginManager) {
1380
1380
  blob = new Blob([html], {
1381
1381
  type: 'image/svg+xml'
1382
1382
  });
1383
- (0, _fileSaver.saveAs)(blob, 'image.svg');
1383
+ (0, _fileSaver.saveAs)(blob, opts.filename || 'image.svg');
1384
1384
 
1385
1385
  case 6:
1386
1386
  case "end":
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbrowse/plugin-linear-genome-view",
3
- "version": "1.7.8",
3
+ "version": "1.7.9",
4
4
  "description": "JBrowse 2 linear genome view",
5
5
  "keywords": [
6
6
  "jbrowse",
@@ -57,5 +57,5 @@
57
57
  "publishConfig": {
58
58
  "access": "public"
59
59
  },
60
- "gitHead": "b429fa2bb5734fc8a5380988f6dfdd3f7a41a39f"
60
+ "gitHead": "a6504c385d703ce6e755d05652ef659ffe28c864"
61
61
  }
@@ -642,6 +642,7 @@ export const BaseLinearDisplay = types
642
642
  const { offsetPx } = roundedDynamicBlocks[index]
643
643
  const offset = offsetPx - viewOffsetPx
644
644
  const clipid = getId(id, index)
645
+
645
646
  return (
646
647
  <React.Fragment key={`frag-${index}`}>
647
648
  <defs>
@@ -1,17 +1,19 @@
1
1
  import React, { useState } from 'react'
2
- import { makeStyles } from '@material-ui/core/styles'
3
2
  import {
4
3
  Button,
4
+ Checkbox,
5
+ CircularProgress,
5
6
  Dialog,
6
7
  DialogActions,
7
8
  DialogContent,
8
9
  DialogTitle,
9
- IconButton,
10
- Checkbox,
11
10
  FormControlLabel,
12
- CircularProgress,
11
+ IconButton,
12
+ TextField,
13
13
  Typography,
14
+ makeStyles,
14
15
  } from '@material-ui/core'
16
+ import { ErrorMessage } from '@jbrowse/core/ui'
15
17
  import CloseIcon from '@material-ui/icons/Close'
16
18
  import { LinearGenomeViewModel as LGV } from '..'
17
19
 
@@ -24,6 +26,15 @@ const useStyles = makeStyles(theme => ({
24
26
  },
25
27
  }))
26
28
 
29
+ function LoadingMessage() {
30
+ return (
31
+ <div>
32
+ <CircularProgress size={20} style={{ marginRight: 20 }} />
33
+ <Typography display="inline">Creating SVG</Typography>
34
+ </div>
35
+ )
36
+ }
37
+
27
38
  export default function ExportSvgDlg({
28
39
  model,
29
40
  handleClose,
@@ -35,6 +46,7 @@ export default function ExportSvgDlg({
35
46
  const offscreenCanvas = typeof OffscreenCanvas !== 'undefined'
36
47
  const [rasterizeLayers, setRasterizeLayers] = useState(offscreenCanvas)
37
48
  const [loading, setLoading] = useState(false)
49
+ const [filename, setFilename] = useState('jbrowse.svg')
38
50
  const [error, setError] = useState<unknown>()
39
51
  const classes = useStyles()
40
52
  return (
@@ -47,13 +59,15 @@ export default function ExportSvgDlg({
47
59
  </DialogTitle>
48
60
  <DialogContent>
49
61
  {error ? (
50
- <div style={{ color: 'red' }}>{`${error}`}</div>
62
+ <ErrorMessage error={error} />
51
63
  ) : loading ? (
52
- <div>
53
- <CircularProgress size={20} style={{ marginRight: 20 }} />
54
- <Typography display="inline">Creating SVG</Typography>
55
- </div>
64
+ <LoadingMessage />
56
65
  ) : null}
66
+ <TextField
67
+ helperText="filename"
68
+ value={filename}
69
+ onChange={event => setFilename(event.target.value)}
70
+ />
57
71
  {offscreenCanvas ? (
58
72
  <FormControlLabel
59
73
  control={
@@ -87,12 +101,11 @@ export default function ExportSvgDlg({
87
101
  setLoading(true)
88
102
  setError(undefined)
89
103
  try {
90
- await model.exportSvg({ rasterizeLayers })
104
+ await model.exportSvg({ rasterizeLayers, filename })
91
105
  handleClose()
92
106
  } catch (e) {
93
107
  console.error(e)
94
108
  setError(e)
95
- } finally {
96
109
  setLoading(false)
97
110
  }
98
111
  }}
@@ -67,6 +67,7 @@ export interface BpOffset {
67
67
 
68
68
  export interface ExportSvgOptions {
69
69
  rasterizeLayers?: boolean
70
+ filename?: string
70
71
  }
71
72
 
72
73
  function calculateVisibleLocStrings(contentBlocks: BaseBlock[]) {
@@ -1330,7 +1331,7 @@ export function stateModelFactory(pluginManager: PluginManager) {
1330
1331
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
1331
1332
  const html = await renderToSvg(self as any, opts)
1332
1333
  const blob = new Blob([html], { type: 'image/svg+xml' })
1333
- saveAs(blob, 'image.svg')
1334
+ saveAs(blob, opts.filename || 'image.svg')
1334
1335
  },
1335
1336
  }))
1336
1337
  .views(self => ({