react-msaview 8.0.0 → 8.2.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 (94) hide show
  1. package/bundle/index.js +99 -99
  2. package/bundle/index.js.map +3 -3
  3. package/dist/calculateBlocks.js +5 -3
  4. package/dist/calculateBlocks.js.map +1 -1
  5. package/dist/components/Loading.js +2 -8
  6. package/dist/components/Loading.js.map +1 -1
  7. package/dist/components/SequenceTextArea.js +0 -1
  8. package/dist/components/SequenceTextArea.js.map +1 -1
  9. package/dist/components/Track.js +2 -2
  10. package/dist/components/Track.js.map +1 -1
  11. package/dist/components/dialogs/AboutDialog.js +6 -6
  12. package/dist/components/dialogs/AboutDialog.js.map +1 -1
  13. package/dist/components/dialogs/AnnotationFileDialog.js +5 -2
  14. package/dist/components/dialogs/AnnotationFileDialog.js.map +1 -1
  15. package/dist/components/dialogs/ExportSVGDialog.js +1 -1
  16. package/dist/components/dialogs/FeatureDialog.js +8 -3
  17. package/dist/components/dialogs/FeatureDialog.js.map +1 -1
  18. package/dist/components/header/Header.js +1 -1
  19. package/dist/components/header/Header.js.map +1 -1
  20. package/dist/components/header/LoadWarnings.js +3 -19
  21. package/dist/components/header/LoadWarnings.js.map +1 -1
  22. package/dist/components/header/settingsMenuItems.js +3 -3
  23. package/dist/components/header/settingsMenuItems.js.map +1 -1
  24. package/dist/components/import/ImportForm.js +1 -1
  25. package/dist/components/import/ImportForm.js.map +1 -1
  26. package/dist/components/msa/MSACanvas.js +1 -3
  27. package/dist/components/msa/MSACanvas.js.map +1 -1
  28. package/dist/components/msa/drawFeatureSpans.d.ts +7 -1
  29. package/dist/components/msa/drawFeatureSpans.js +58 -23
  30. package/dist/components/msa/drawFeatureSpans.js.map +1 -1
  31. package/dist/components/msa/renderBoxFeatureCanvasBlock.js +7 -8
  32. package/dist/components/msa/renderBoxFeatureCanvasBlock.js.map +1 -1
  33. package/dist/components/msa/renderMSABlock.js +8 -9
  34. package/dist/components/msa/renderMSABlock.js.map +1 -1
  35. package/dist/components/tracks/drawTracks.js +8 -5
  36. package/dist/components/tracks/drawTracks.js.map +1 -1
  37. package/dist/components/tree/TreeBranchMenu.js +1 -1
  38. package/dist/components/tree/TreeBranchMenu.js.map +1 -1
  39. package/dist/components/tree/TreeCanvas.js +1 -3
  40. package/dist/components/tree/TreeCanvas.js.map +1 -1
  41. package/dist/components/tree/TreeCanvasBlock.js +2 -2
  42. package/dist/components/tree/TreeCanvasBlock.js.map +1 -1
  43. package/dist/components/tree/TreeNodeMenu.js +1 -1
  44. package/dist/components/tree/TreeNodeMenu.js.map +1 -1
  45. package/dist/components/tree/renderTreeCanvas.js +2 -1
  46. package/dist/components/tree/renderTreeCanvas.js.map +1 -1
  47. package/dist/constants.d.ts +1 -0
  48. package/dist/constants.js +4 -0
  49. package/dist/constants.js.map +1 -1
  50. package/dist/expandSpec.d.ts +46 -0
  51. package/dist/expandSpec.js +127 -0
  52. package/dist/expandSpec.js.map +1 -0
  53. package/dist/index.d.ts +2 -0
  54. package/dist/index.js +2 -0
  55. package/dist/index.js.map +1 -1
  56. package/dist/model.d.ts +52 -33
  57. package/dist/model.js +232 -142
  58. package/dist/model.js.map +1 -1
  59. package/dist/svgTestUtil.d.ts +28 -24
  60. package/dist/types.d.ts +2 -0
  61. package/dist/useWheelScroll.js +0 -4
  62. package/dist/useWheelScroll.js.map +1 -1
  63. package/dist/version.d.ts +1 -1
  64. package/dist/version.js +1 -1
  65. package/package.json +3 -3
  66. package/src/calculateBlocks.ts +5 -3
  67. package/src/components/Loading.tsx +2 -30
  68. package/src/components/SequenceTextArea.tsx +0 -1
  69. package/src/components/Track.tsx +2 -1
  70. package/src/components/dialogs/AboutDialog.tsx +35 -6
  71. package/src/components/dialogs/AnnotationFileDialog.tsx +10 -1
  72. package/src/components/dialogs/ExportSVGDialog.tsx +1 -1
  73. package/src/components/dialogs/FeatureDialog.tsx +11 -3
  74. package/src/components/header/Header.tsx +1 -1
  75. package/src/components/header/LoadWarnings.tsx +8 -21
  76. package/src/components/header/settingsMenuItems.ts +3 -3
  77. package/src/components/import/ImportForm.tsx +3 -5
  78. package/src/components/msa/MSACanvas.tsx +0 -3
  79. package/src/components/msa/drawFeatureSpans.ts +80 -25
  80. package/src/components/msa/renderBoxFeatureCanvasBlock.ts +7 -9
  81. package/src/components/msa/renderMSABlock.ts +9 -8
  82. package/src/components/tracks/drawTracks.ts +8 -16
  83. package/src/components/tree/TreeBranchMenu.tsx +1 -2
  84. package/src/components/tree/TreeCanvas.tsx +0 -3
  85. package/src/components/tree/TreeCanvasBlock.tsx +2 -2
  86. package/src/components/tree/TreeNodeMenu.tsx +1 -2
  87. package/src/components/tree/renderTreeCanvas.ts +2 -1
  88. package/src/constants.ts +5 -0
  89. package/src/expandSpec.ts +196 -0
  90. package/src/index.ts +8 -0
  91. package/src/model.ts +289 -162
  92. package/src/types.ts +2 -0
  93. package/src/useWheelScroll.ts +0 -4
  94. package/src/version.ts +1 -1
@@ -0,0 +1,127 @@
1
+ /**
2
+ * The label a single-residue shorthand highlight gets, filled in from the
3
+ * sequence when drawn: `175` on a row reading R there becomes "R175".
4
+ */
5
+ export const residueLabel = '{residue}{position}';
6
+ const span = /^(\d+)(?:-(\d+))?(?:\s+(.+))?$/;
7
+ function parseSpan(text, what) {
8
+ const match = span.exec(text.trim());
9
+ if (!match) {
10
+ throw new Error(`${what} "${text}" is not "start", "start-end" or either followed by a label`);
11
+ }
12
+ const start = Number(match[1]);
13
+ const end = match[2] === undefined ? start : Number(match[2]);
14
+ return { start, end, label: match[3] };
15
+ }
16
+ function withRow(entry, query) {
17
+ const { row, ...rest } = entry;
18
+ const resolved = row === undefined ? query : (row ?? undefined);
19
+ return resolved === undefined ? rest : { ...rest, row: resolved };
20
+ }
21
+ function expandHighlight(entry, query) {
22
+ if (typeof entry === 'object') {
23
+ return (entry.rows
24
+ ? entry
25
+ : withRow(entry, entry.start === undefined ? undefined : query));
26
+ }
27
+ const { start, end, label } = parseSpan(String(entry), 'highlight');
28
+ const single = start === end && query !== undefined;
29
+ return {
30
+ ...(query === undefined ? {} : { row: query }),
31
+ start,
32
+ end,
33
+ ...(label ? { label } : single ? { label: residueLabel } : {}),
34
+ };
35
+ }
36
+ function expandRegion(region, query) {
37
+ if (typeof region === 'string') {
38
+ const { start, end } = parseSpan(region, 'region');
39
+ const parsed = { start, end };
40
+ return withRow(parsed, query);
41
+ }
42
+ return withRow(region, query);
43
+ }
44
+ function slug(name) {
45
+ return name
46
+ .toLowerCase()
47
+ .replaceAll(/[^a-z0-9]+/g, '-')
48
+ .replaceAll(/^-|-$/g, '');
49
+ }
50
+ function kindOf(track) {
51
+ if (track.kind) {
52
+ return track.kind;
53
+ }
54
+ if (track.values) {
55
+ return 'bar';
56
+ }
57
+ if (track.data !== undefined) {
58
+ return 'text';
59
+ }
60
+ if (track.arcs) {
61
+ return 'arc';
62
+ }
63
+ throw new Error(`column track "${track.name}" has no values, data or arcs to take its kind from`);
64
+ }
65
+ function expandTrack(track, query, ids) {
66
+ const { start, ...rest } = track;
67
+ const pad = start && start > 1 ? start - 1 : 0;
68
+ let id = track.id ?? (slug(track.name) || 'track');
69
+ for (let n = 2; !track.id && ids.has(id); n++) {
70
+ id = `${slug(track.name) || 'track'}-${n}`;
71
+ }
72
+ ids.add(id);
73
+ return {
74
+ ...withRow(rest, query),
75
+ id,
76
+ kind: kindOf(track),
77
+ ...(pad && track.values
78
+ ? { values: [...Array(pad).fill(0), ...track.values] }
79
+ : {}),
80
+ ...(pad && track.data !== undefined
81
+ ? { data: ' '.repeat(pad) + track.data }
82
+ : {}),
83
+ };
84
+ }
85
+ function isInlineMsa(msa) {
86
+ return msa.includes('\n');
87
+ }
88
+ function isInlineTree(tree) {
89
+ return tree.trimStart().startsWith('(');
90
+ }
91
+ function uri(location) {
92
+ return { uri: location, locationType: 'UriLocation' };
93
+ }
94
+ /**
95
+ * Expand the short forms of an MsaView spec into the snapshot the model takes.
96
+ * Idempotent, and a no-op on a spec that uses none of them.
97
+ */
98
+ export function expandSpec(spec) {
99
+ const { query, msa, tree, highlights, region, columnTracks, ...rest } = spec;
100
+ const data = {
101
+ ...rest.data,
102
+ ...(msa !== undefined && isInlineMsa(msa) ? { msa } : {}),
103
+ ...(tree !== undefined && isInlineTree(tree) ? { tree } : {}),
104
+ };
105
+ const ids = new Set((columnTracks ?? []).map(t => t.id).filter(id => id !== undefined));
106
+ return {
107
+ ...rest,
108
+ ...(msa !== undefined && !isInlineMsa(msa)
109
+ ? { msaFilehandle: uri(msa) }
110
+ : {}),
111
+ ...(tree !== undefined && !isInlineTree(tree)
112
+ ? { treeFilehandle: uri(tree) }
113
+ : {}),
114
+ ...(Object.keys(data).length > 0 ? { data } : {}),
115
+ ...(query !== undefined && rest.relativeTo === undefined
116
+ ? { relativeTo: query }
117
+ : {}),
118
+ ...(highlights
119
+ ? { highlights: highlights.map(h => expandHighlight(h, query)) }
120
+ : {}),
121
+ ...(region === undefined ? {} : { region: expandRegion(region, query) }),
122
+ ...(columnTracks
123
+ ? { columnTracks: columnTracks.map(t => expandTrack(t, query, ids)) }
124
+ : {}),
125
+ };
126
+ }
127
+ //# sourceMappingURL=expandSpec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expandSpec.js","sourceRoot":"","sources":["../src/expandSpec.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,6 +2,8 @@ export { renderToSvg } from './renderToSvg.tsx';
2
2
  export type { ExportSvgOptions } from './renderToSvg.tsx';
3
3
  export { CHAR_WIDTH_RATIO, installHeadlessRenderEnv, } from './headlessRenderEnv.ts';
4
4
  export { maxNeighborJoiningRows } from './constants.ts';
5
+ export { expandSpec, residueLabel } from './expandSpec.ts';
6
+ export type { ColumnTrackShorthand, HighlightShorthand, MsaSpec, RegionShorthand, } from './expandSpec.ts';
5
7
  export { default as MSAView } from './components/Loading.tsx';
6
8
  export { default as MSAViewer } from './components/MSAViewer.tsx';
7
9
  export type { MSAViewerProps } from './components/MSAViewer.tsx';
package/dist/index.js CHANGED
@@ -14,6 +14,8 @@ export { CHAR_WIDTH_RATIO, installHeadlessRenderEnv, } from './headlessRenderEnv
14
14
  // the row count above which calculateNeighborJoiningTreeFromMSA throws, for
15
15
  // hosts gating their own menu item
16
16
  export { maxNeighborJoiningRows } from './constants.js';
17
+ // the short forms a link or a script can write a view in; see docs/layers.md
18
+ export { expandSpec, residueLabel } from './expandSpec.js';
17
19
  export { default as MSAView } from './components/Loading.js';
18
20
  export { default as MSAViewer } from './components/MSAViewer.js';
19
21
  export { mount } from './mount.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,yDAAyD;AACzD,6EAA6E;AAC7E,+DAA+D;AAC/D,gFAAgF;AAChF,0EAA0E;AAC1E,yEAAyE;AACzE,8EAA8E;AAC9E,mEAAmE;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAA;AAE/C,8EAA8E;AAC9E,yDAAyD;AACzD,OAAO,EACL,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,wBAAwB,CAAA;AAC/B,4EAA4E;AAC5E,mCAAmC;AACnC,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,yBAA0B,CAAA;AAC7D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,2BAA4B,CAAA;AAEjE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAa,CAAA;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAGtD,OAAO,EAAqB,OAAO,IAAI,SAAS,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,yDAAyD;AACzD,6EAA6E;AAC7E,+DAA+D;AAC/D,gFAAgF;AAChF,0EAA0E;AAC1E,yEAAyE;AACzE,8EAA8E;AAC9E,mEAAmE;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAA;AAE/C,8EAA8E;AAC9E,yDAAyD;AACzD,OAAO,EACL,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,wBAAwB,CAAA;AAC/B,4EAA4E;AAC5E,mCAAmC;AACnC,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AACvD,6EAA6E;AAC7E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAO1D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,yBAA0B,CAAA;AAC7D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,2BAA4B,CAAA;AAEjE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAa,CAAA;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAGtD,OAAO,EAAqB,OAAO,IAAI,SAAS,EAAE,MAAM,YAAY,CAAA"}
package/dist/model.d.ts CHANGED
@@ -57,7 +57,7 @@ declare function stateModelFactory(): import("@jbrowse/mobx-state-tree").IModelT
57
57
  colorSchemeName: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<string>, [undefined]>;
58
58
  showColumnStats: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
59
59
  msaFormat: import("@jbrowse/mobx-state-tree").IMaybe<import("@jbrowse/mobx-state-tree").ISimpleType<import("msa-parsers").MSAFormat>>;
60
- }, "allowedGappyness" | "clades" | "colWidth" | "collapsed" | "columnTracks" | "currentAlignment" | "data" | "drawMsaLetters" | "encodings" | "gffFilehandle" | "height" | "hideGaps" | "highlightColumns" | "highlights" | "id" | "msaFilehandle" | "relativeTo" | "residueMappings" | "rowHeight" | "rowPanels" | "scrollX" | "scrollY" | "scrollZoom" | "scrollZoomAxis" | "showDomainLegend" | "showDomains" | "showOnly" | "subFeatureRows" | "trackHeights" | "treeFilehandle" | "treeMetadataFilehandle" | "turnedOffFeatures" | "turnedOffTracks" | "type"> & {
60
+ }, "allowedGappyness" | "clades" | "colWidth" | "collapsed" | "columnTracks" | "currentAlignment" | "data" | "drawMsaLetters" | "encodings" | "gffFilehandle" | "height" | "hideGaps" | "highlightColumns" | "highlights" | "id" | "msaFilehandle" | "region" | "relativeTo" | "residueMappings" | "rowHeight" | "rowPanels" | "scrollX" | "scrollY" | "scrollZoom" | "scrollZoomAxis" | "showDomainLegend" | "showDomains" | "showOnly" | "subFeatureRows" | "trackHeights" | "treeFilehandle" | "treeMetadataFilehandle" | "turnedOffFeatures" | "turnedOffTracks" | "type"> & {
61
61
  /**
62
62
  * #property
63
63
  * id of view, randomly generated if not provided
@@ -616,6 +616,14 @@ declare function stateModelFactory(): import("@jbrowse/mobx-state-tree").IModelT
616
616
  * Persists in the snapshot and the URL.
617
617
  */
618
618
  highlights: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").IArrayType<import("@jbrowse/mobx-state-tree").IType<Highlight, Highlight, Highlight>>, [undefined]>;
619
+ /**
620
+ * #property
621
+ * where the view opens, in `highlights` coordinates: `{row, start,
622
+ * end}` zooms onto residues of that row, `{start, end}` onto alignment
623
+ * columns. Applied once the alignment and any tree file have loaded,
624
+ * then cleared, so a reloaded session keeps the reader's own scroll.
625
+ */
626
+ region: import("@jbrowse/mobx-state-tree").IType<Region | undefined, Region | undefined, Region | undefined>;
619
627
  /**
620
628
  * #property
621
629
  * clades of the tree with a mark drawn over them. `mrca` names tips
@@ -835,7 +843,7 @@ declare function stateModelFactory(): import("@jbrowse/mobx-state-tree").IModelT
835
843
  /**
836
844
  * #action
837
845
  * record a non-fatal load problem: a layer that failed to load, a file
838
- * that failed to parse
846
+ * that failed to parse. A message already on the list is not added again
839
847
  */
840
848
  addWarning(warning: string): void;
841
849
  /**
@@ -866,6 +874,10 @@ declare function stateModelFactory(): import("@jbrowse/mobx-state-tree").IModelT
866
874
  * through it.
867
875
  */
868
876
  setHighlightedColumns(columns?: number[]): void;
877
+ /**
878
+ * #action
879
+ */
880
+ setRegion(region?: Region): void;
869
881
  /**
870
882
  * #action
871
883
  */
@@ -1353,6 +1365,36 @@ declare function stateModelFactory(): import("@jbrowse/mobx-state-tree").IModelT
1353
1365
  * #getter
1354
1366
  */
1355
1367
  readonly showTreeText: boolean;
1368
+ } & {
1369
+ /**
1370
+ * #getter
1371
+ * a data track's values or string, projected from its row's residues
1372
+ * onto alignment columns when it names a row
1373
+ */
1374
+ readonly columnTrackContent: Map<string, {
1375
+ values?: number[];
1376
+ data?: string;
1377
+ arcs?: Arc[];
1378
+ }>;
1379
+ /**
1380
+ * #method
1381
+ * the height a track draws at: what the user dragged its divider to,
1382
+ * then the height its snapshot asked for, then its kind's default. Only
1383
+ * a text track falls through to rowHeight
1384
+ */
1385
+ trackHeight(kind: TrackKind, heightKey?: string, given?: number): number;
1386
+ /**
1387
+ * #method
1388
+ * the track a column track spec draws as, computed once per spec. A
1389
+ * text track's height falls through to rowHeight, and its own computed
1390
+ * confines the vertical zoom to it, so a sibling keeps its object and
1391
+ * its canvas skips the redraw
1392
+ */
1393
+ columnTrackModel(track: ColumnTrackSpec): BasicTrack;
1394
+ /**
1395
+ * #getter
1396
+ */
1397
+ readonly columnTrackModels: BasicTrack[];
1356
1398
  } & {
1357
1399
  /**
1358
1400
  * #getter
@@ -1383,28 +1425,6 @@ declare function stateModelFactory(): import("@jbrowse/mobx-state-tree").IModelT
1383
1425
  * #getter
1384
1426
  */
1385
1427
  readonly adapterTrackModels: BasicTrack[];
1386
- /**
1387
- * #getter
1388
- * a data track's values or string, projected from its row's residues
1389
- * onto alignment columns when it names a row
1390
- */
1391
- readonly columnTrackContent: Map<string, {
1392
- values?: number[];
1393
- data?: string;
1394
- arcs?: Arc[];
1395
- }>;
1396
- /**
1397
- * #method
1398
- * the height a track draws at: what the user dragged its divider to,
1399
- * then the height its snapshot asked for, then its kind's default. Only
1400
- * a text track falls through to rowHeight, and `??` short-circuits
1401
- * before reading it, so vertical zoom does not rebuild the other tracks
1402
- */
1403
- trackHeight(kind: TrackKind, heightKey?: string, given?: number): number;
1404
- /**
1405
- * #getter
1406
- */
1407
- readonly columnTrackModels: BasicTrack[];
1408
1428
  /**
1409
1429
  * #getter
1410
1430
  * the consensus secondary structure as a track, when there is one. A
@@ -1835,9 +1855,6 @@ declare function stateModelFactory(): import("@jbrowse/mobx-state-tree").IModelT
1835
1855
  readonly fillPalette: {
1836
1856
  [x: string]: string;
1837
1857
  };
1838
- readonly strokePalette: {
1839
- [k: string]: string;
1840
- };
1841
1858
  /**
1842
1859
  * #getter
1843
1860
  * the encoding coloring the overlay's spans, undefined when none does,
@@ -1941,6 +1958,12 @@ declare function stateModelFactory(): import("@jbrowse/mobx-state-tree").IModelT
1941
1958
  start: number;
1942
1959
  end: number;
1943
1960
  }[];
1961
+ /**
1962
+ * #method
1963
+ * a highlight label with `{residue}` and `{position}` filled in from the
1964
+ * row's letter at `start`, which is how the `175` shorthand draws "R175"
1965
+ */
1966
+ fillHighlightLabel(label: string, row?: string, start?: number): string;
1944
1967
  /**
1945
1968
  * #getter
1946
1969
  * `highlights` projected onto what is on screen: residue spans go
@@ -1957,12 +1980,6 @@ declare function stateModelFactory(): import("@jbrowse/mobx-state-tree").IModelT
1957
1980
  * all-gap column.
1958
1981
  */
1959
1982
  columnStatsAt(col: number): ColumnStats | undefined;
1960
- /**
1961
- * #getter
1962
- * `columnStatsAt` for the hovered column, undefined when nothing is
1963
- * hovered
1964
- */
1965
- readonly mouseOverColumnStats: ColumnStats | undefined;
1966
1983
  /**
1967
1984
  * #method
1968
1985
  */
@@ -2204,6 +2221,7 @@ declare function stateModelFactory(): import("@jbrowse/mobx-state-tree").IModelT
2204
2221
  relativeTo: string | undefined;
2205
2222
  highlightColumns: number[] | undefined;
2206
2223
  highlights: Highlight[];
2224
+ region: Region | undefined;
2207
2225
  clades: Clade[];
2208
2226
  encodings: Encoding[];
2209
2227
  rowPanels: RowPanelSpec[];
@@ -2335,6 +2353,7 @@ declare function stateModelFactory(): import("@jbrowse/mobx-state-tree").IModelT
2335
2353
  relativeTo: string | undefined;
2336
2354
  highlightColumns: number[] | undefined;
2337
2355
  highlights: Highlight[];
2356
+ region: Region | undefined;
2338
2357
  clades: Clade[];
2339
2358
  encodings: Encoding[];
2340
2359
  rowPanels: RowPanelSpec[];