@jbrowse/core 2.11.2 → 2.12.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 (51) hide show
  1. package/BaseFeatureWidget/BaseFeatureDetail/DataGridDetails.js +16 -21
  2. package/BaseFeatureWidget/BaseFeatureDetail/index.js +1 -3
  3. package/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.js +24 -85
  4. package/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeaturePanel.js +2 -2
  5. package/BaseFeatureWidget/SequenceFeatureDetails/SequencePanel.d.ts +3 -4
  6. package/BaseFeatureWidget/SequenceFeatureDetails/SequencePanel.js +55 -24
  7. package/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceDialog.d.ts +9 -0
  8. package/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceDialog.js +69 -0
  9. package/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceFeatureMenu.d.ts +9 -0
  10. package/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceFeatureMenu.js +126 -0
  11. package/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceTypeSelector.d.ts +6 -0
  12. package/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceTypeSelector.js +68 -0
  13. package/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SettingsDialog.js +19 -10
  14. package/BaseFeatureWidget/SequenceFeatureDetails/model.d.ts +47 -0
  15. package/BaseFeatureWidget/SequenceFeatureDetails/model.js +83 -9
  16. package/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/CDNASequence.d.ts +3 -1
  17. package/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/CDNASequence.js +76 -19
  18. package/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/CDSSequence.d.ts +5 -2
  19. package/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/CDSSequence.js +12 -3
  20. package/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/GenomicSequence.d.ts +7 -2
  21. package/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/GenomicSequence.js +51 -5
  22. package/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/ProteinSequence.d.ts +5 -2
  23. package/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/ProteinSequence.js +12 -3
  24. package/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/SequenceDisplay.d.ts +11 -0
  25. package/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/SequenceDisplay.js +30 -0
  26. package/BaseFeatureWidget/SequenceFeatureDetails/util.d.ts +11 -0
  27. package/BaseFeatureWidget/SequenceFeatureDetails/util.js +43 -1
  28. package/BaseFeatureWidget/stateModelFactory.d.ts +32 -2
  29. package/PluginManager.d.ts +2 -11
  30. package/ReExports/modules.d.ts +2 -11
  31. package/package.json +4 -2
  32. package/stories/JBrowseCore.stories.d.ts +5 -0
  33. package/stories/JBrowseCore.stories.js +10 -0
  34. package/stories/examples/WithSequencePanel.d.ts +7 -0
  35. package/stories/examples/WithSequencePanel.js +43 -0
  36. package/stories/examples/index.d.ts +1 -0
  37. package/stories/examples/index.js +17 -0
  38. package/stories/examples/util.d.ts +33 -0
  39. package/stories/examples/util.js +235 -0
  40. package/tsconfig.build.tsbuildinfo +1 -1
  41. package/ui/Dialog.js +2 -1
  42. package/util/Base1DUtils.d.ts +1 -1
  43. package/util/Base1DUtils.js +3 -7
  44. package/util/Base1DViewModel.d.ts +5 -16
  45. package/util/Base1DViewModel.js +6 -12
  46. package/util/index.d.ts +1 -1
  47. package/util/tracks.d.ts +3 -2
  48. package/util/tracks.js +10 -6
  49. package/util/types/index.d.ts +4 -1
  50. package/ui/useResizeBar.d.ts +0 -5
  51. package/ui/useResizeBar.js +0 -22
package/ui/Dialog.js CHANGED
@@ -12,6 +12,7 @@ const react_error_boundary_1 = require("react-error-boundary");
12
12
  const Close_1 = __importDefault(require("@mui/icons-material/Close"));
13
13
  // locals
14
14
  const ErrorMessage_1 = __importDefault(require("./ErrorMessage"));
15
+ const SanitizedHTML_1 = __importDefault(require("./SanitizedHTML"));
15
16
  const useStyles = (0, mui_1.makeStyles)()(theme => ({
16
17
  closeButton: {
17
18
  position: 'absolute',
@@ -31,7 +32,7 @@ const Dialog = (0, mobx_react_1.observer)(function (props) {
31
32
  return (react_1.default.createElement(material_1.Dialog, { ...props },
32
33
  react_1.default.createElement(material_1.ScopedCssBaseline, null,
33
34
  react_1.default.isValidElement(header) ? (header) : (react_1.default.createElement(material_1.DialogTitle, null,
34
- title,
35
+ react_1.default.createElement(SanitizedHTML_1.default, { html: title || '' }),
35
36
  onClose ? (react_1.default.createElement(material_1.IconButton, { className: classes.closeButton, onClick: () => {
36
37
  // @ts-expect-error
37
38
  onClose();
@@ -19,7 +19,7 @@ export declare function pxToBp(self: ViewSnap, px: number): {
19
19
  offset: number;
20
20
  start: number;
21
21
  end: number;
22
- reversed: boolean;
22
+ reversed?: boolean;
23
23
  };
24
24
  export declare function bpToPx({ refName, coord, regionNumber, self, }: {
25
25
  refName: string;
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.bpToPxMap = exports.bpToPx = exports.pxToBp = exports.moveTo = void 0;
4
- const mobx_state_tree_1 = require("mobx-state-tree");
5
4
  function lengthBetween(self, start, end) {
6
5
  let bpSoFar = 0;
7
6
  const { displayedRegions } = self;
@@ -69,8 +68,7 @@ function pxToBp(self, px) {
69
68
  const bp = (offsetPx + px) * bpPerPx;
70
69
  if (bp < 0) {
71
70
  const r = displayedRegions[0];
72
- const snap = (0, mobx_state_tree_1.getSnapshot)(r);
73
- // @ts-expect-error
71
+ const snap = r;
74
72
  return {
75
73
  // xref https://github.com/mobxjs/mobx-state-tree/issues/1524 for Omit
76
74
  ...snap,
@@ -87,8 +85,7 @@ function pxToBp(self, px) {
87
85
  const len = r.end - r.start;
88
86
  const offset = bp - bpSoFar;
89
87
  if (len + bpSoFar > bp && bpSoFar <= bp) {
90
- const snap = (0, mobx_state_tree_1.getSnapshot)(r);
91
- // @ts-expect-error
88
+ const snap = r;
92
89
  return {
93
90
  // xref https://github.com/mobxjs/mobx-state-tree/issues/1524 for Omit
94
91
  ...snap,
@@ -112,8 +109,7 @@ function pxToBp(self, px) {
112
109
  const r = displayedRegions.at(-1);
113
110
  const len = r.end - r.start;
114
111
  const offset = bp - bpSoFar + len;
115
- const snap = (0, mobx_state_tree_1.getSnapshot)(r);
116
- // @ts-expect-error
112
+ const snap = r;
117
113
  return {
118
114
  // xref https://github.com/mobxjs/mobx-state-tree/issues/1524 for Omit
119
115
  ...snap,
@@ -4,16 +4,7 @@ import { Region as IRegion } from './types';
4
4
  import { BpOffset } from './Base1DUtils';
5
5
  declare const Base1DView: import("mobx-state-tree").IModelType<{
6
6
  id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
7
- displayedRegions: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
8
- refName: import("mobx-state-tree").ISimpleType<string>;
9
- start: import("mobx-state-tree").ISimpleType<number>;
10
- end: import("mobx-state-tree").ISimpleType<number>;
11
- reversed: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
12
- } & {
13
- assemblyName: import("mobx-state-tree").ISimpleType<string>;
14
- }, {
15
- setRefName(newRefName: string): void;
16
- }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
7
+ displayedRegions: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IType<IRegion[], IRegion[], IRegion[]>, [undefined]>;
17
8
  bpPerPx: import("mobx-state-tree").IType<number | undefined, number, number>;
18
9
  offsetPx: import("mobx-state-tree").IType<number | undefined, number, number>;
19
10
  interRegionPaddingWidth: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<number>, [undefined]>;
@@ -78,16 +69,14 @@ declare const Base1DView: import("mobx-state-tree").IModelType<{
78
69
  */
79
70
  pxToBp(px: number): {
80
71
  coord: number;
81
- index: number; /**
82
- * #getter
83
- */
72
+ index: number;
84
73
  refName: string;
85
74
  oob: boolean;
86
75
  assemblyName: string;
87
76
  offset: number;
88
77
  start: number;
89
78
  end: number;
90
- reversed: boolean;
79
+ reversed?: boolean | undefined;
91
80
  };
92
81
  /**
93
82
  * #method
@@ -136,8 +125,8 @@ declare const Base1DView: import("mobx-state-tree").IModelType<{
136
125
  } & {
137
126
  /**
138
127
  * #action
139
- * offset is the base-pair-offset in the displayed region, index is the index of the
140
- * displayed region in the linear genome view
128
+ * offset is the base-pair-offset in the displayed region, index is the
129
+ * index of the displayed region in the linear genome view
141
130
  *
142
131
  * @param start - object as `{start, end, offset, index}`
143
132
  * @param end - object as `{start, end, offset, index}`
@@ -24,7 +24,7 @@ const Base1DView = mobx_state_tree_1.types
24
24
  /**
25
25
  * #property
26
26
  */
27
- displayedRegions: mobx_state_tree_1.types.array(mst_1.Region),
27
+ displayedRegions: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), []),
28
28
  /**
29
29
  * #property
30
30
  */
@@ -77,9 +77,7 @@ const Base1DView = mobx_state_tree_1.types
77
77
  * #getter
78
78
  */
79
79
  get assemblyNames() {
80
- return [
81
- ...new Set(self.displayedRegions.map(region => region.assemblyName)),
82
- ];
80
+ return [...new Set(self.displayedRegions.map(r => r.assemblyName))];
83
81
  },
84
82
  /**
85
83
  * #getter
@@ -107,9 +105,7 @@ const Base1DView = mobx_state_tree_1.types
107
105
  * #getter
108
106
  */
109
107
  get totalBp() {
110
- return self.displayedRegions
111
- .map(a => a.end - a.start)
112
- .reduce((a, b) => a + b, 0);
108
+ return (0, index_1.sum)(self.displayedRegions.map(a => a.end - a.start));
113
109
  },
114
110
  }))
115
111
  .views(self => ({
@@ -129,9 +125,7 @@ const Base1DView = mobx_state_tree_1.types
129
125
  * #getter
130
126
  */
131
127
  get currBp() {
132
- return this.dynamicBlocks
133
- .map(a => a.end - a.start)
134
- .reduce((a, b) => a + b, 0);
128
+ return (0, index_1.sum)(this.dynamicBlocks.map(a => a.end - a.start));
135
129
  },
136
130
  }))
137
131
  .views(self => ({
@@ -230,8 +224,8 @@ const Base1DView = mobx_state_tree_1.types
230
224
  .actions(self => ({
231
225
  /**
232
226
  * #action
233
- * offset is the base-pair-offset in the displayed region, index is the index of the
234
- * displayed region in the linear genome view
227
+ * offset is the base-pair-offset in the displayed region, index is the
228
+ * index of the displayed region in the linear genome view
235
229
  *
236
230
  * @param start - object as `{start, end, offset, index}`
237
231
  * @param end - object as `{start, end, offset, index}`
package/util/index.d.ts CHANGED
@@ -337,7 +337,7 @@ export interface ViewSnap {
337
337
  start: number;
338
338
  end: number;
339
339
  refName: string;
340
- reversed: boolean;
340
+ reversed?: boolean;
341
341
  assemblyName: string;
342
342
  })[];
343
343
  }
package/util/tracks.d.ts CHANGED
@@ -4,11 +4,12 @@ import { AnyConfigurationModel } from '../configuration';
4
4
  export declare function getTrackAssemblyNames(track: IAnyStateTreeNode & {
5
5
  configuration: AnyConfigurationModel;
6
6
  }): string[];
7
+ export declare function getConfAssemblyNames(conf: AnyConfigurationModel): string[];
7
8
  /** return the rpcSessionId of the highest parent node in the tree that has an rpcSessionId */
8
9
  export declare function getRpcSessionId(thisNode: IAnyStateTreeNode): string;
9
10
  /**
10
- * given an MST node, get the renderprops of the first parent container that has
11
- * renderProps
11
+ * given an MST node, get the renderprops of the first parent container that
12
+ * has renderProps
12
13
  * @param node -
13
14
  * @returns renderprops, or empty object if none found
14
15
  */
package/util/tracks.js CHANGED
@@ -1,23 +1,27 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getTrackName = exports.generateUnknownTrackConf = exports.generateUnsupportedTrackConf = exports.guessTrackType = exports.guessAdapter = exports.getFileName = exports.makeIndexType = exports.makeIndex = exports.storeBlobLocation = exports.setBlobMap = exports.getBlobMap = exports.getBlob = exports.UNSUPPORTED = exports.UNKNOWN = exports.getParentRenderProps = exports.getRpcSessionId = exports.getTrackAssemblyNames = void 0;
3
+ exports.getTrackName = exports.generateUnknownTrackConf = exports.generateUnsupportedTrackConf = exports.guessTrackType = exports.guessAdapter = exports.getFileName = exports.makeIndexType = exports.makeIndex = exports.storeBlobLocation = exports.setBlobMap = exports.getBlobMap = exports.getBlob = exports.UNSUPPORTED = exports.UNKNOWN = exports.getParentRenderProps = exports.getRpcSessionId = exports.getConfAssemblyNames = exports.getTrackAssemblyNames = void 0;
4
4
  const mobx_state_tree_1 = require("mobx-state-tree");
5
5
  const index_1 = require("./index");
6
6
  const configuration_1 = require("../configuration");
7
7
  /* utility functions for use by track models and so forth */
8
8
  function getTrackAssemblyNames(track) {
9
- const trackAssemblyNames = (0, configuration_1.getConf)(track, 'assemblyNames');
9
+ return getConfAssemblyNames(track.configuration);
10
+ }
11
+ exports.getTrackAssemblyNames = getTrackAssemblyNames;
12
+ function getConfAssemblyNames(conf) {
13
+ const trackAssemblyNames = (0, configuration_1.readConfObject)(conf, 'assemblyNames');
10
14
  if (!trackAssemblyNames) {
11
15
  // Check if it's an assembly sequence track
12
16
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
- const parent = (0, mobx_state_tree_1.getParent)(track.configuration);
17
+ const parent = (0, mobx_state_tree_1.getParent)(conf);
14
18
  if ('sequence' in parent) {
15
19
  return [(0, configuration_1.readConfObject)(parent, 'name')];
16
20
  }
17
21
  }
18
22
  return trackAssemblyNames;
19
23
  }
20
- exports.getTrackAssemblyNames = getTrackAssemblyNames;
24
+ exports.getConfAssemblyNames = getConfAssemblyNames;
21
25
  /** return the rpcSessionId of the highest parent node in the tree that has an rpcSessionId */
22
26
  function getRpcSessionId(thisNode) {
23
27
  let highestRpcSessionId;
@@ -34,8 +38,8 @@ function getRpcSessionId(thisNode) {
34
38
  }
35
39
  exports.getRpcSessionId = getRpcSessionId;
36
40
  /**
37
- * given an MST node, get the renderprops of the first parent container that has
38
- * renderProps
41
+ * given an MST node, get the renderprops of the first parent container that
42
+ * has renderProps
39
43
  * @param node -
40
44
  * @returns renderprops, or empty object if none found
41
45
  */
@@ -225,7 +225,10 @@ export interface AbstractMenuManager {
225
225
  export declare function isAbstractMenuManager(thing: unknown): thing is AbstractMenuManager;
226
226
  export interface NoAssemblyRegion extends SnapshotIn<typeof MUNoAssemblyRegion> {
227
227
  }
228
- /** a description of a specific genomic region. assemblyName, refName, start, end, and reversed */
228
+ /**
229
+ * a description of a specific genomic region. assemblyName, refName, start,
230
+ * end, and reversed
231
+ */
229
232
  export interface Region extends SnapshotIn<typeof MUIRegion> {
230
233
  }
231
234
  export interface AugmentedRegion extends Region {
@@ -1,5 +0,0 @@
1
- /// <reference types="react" />
2
- export declare function useResizeBar(): {
3
- ref: import("react").RefObject<HTMLDivElement>;
4
- scrollLeft: number;
5
- };
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useResizeBar = void 0;
4
- const react_1 = require("react");
5
- function useResizeBar() {
6
- const ref = (0, react_1.useRef)(null);
7
- const [scrollLeft, setScrollLeft] = (0, react_1.useState)(0);
8
- (0, react_1.useEffect)(() => {
9
- const timer = setInterval(() => {
10
- var _a;
11
- const elt = (_a = ref.current) === null || _a === void 0 ? void 0 : _a.querySelector('.MuiDataGrid-virtualScroller');
12
- if (elt) {
13
- setScrollLeft(elt.scrollLeft);
14
- }
15
- }, 100);
16
- return () => {
17
- clearInterval(timer);
18
- };
19
- }, []);
20
- return { ref, scrollLeft };
21
- }
22
- exports.useResizeBar = useResizeBar;