@jbrowse/plugin-linear-genome-view 2.10.0 → 2.10.2

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 (33) hide show
  1. package/dist/BaseLinearDisplay/models/util.js +4 -2
  2. package/dist/LaunchLinearGenomeView/index.js +8 -2
  3. package/dist/LinearBasicDisplay/model.d.ts +10 -20
  4. package/dist/LinearBasicDisplay/model.js +2 -2
  5. package/dist/LinearGenomeView/components/ExportSvgDialog.d.ts +1 -1
  6. package/dist/LinearGenomeView/components/ExportSvgDialog.js +2 -2
  7. package/dist/LinearGenomeView/components/OverviewScalebar.d.ts +0 -8
  8. package/dist/LinearGenomeView/components/OverviewScalebar.js +23 -55
  9. package/dist/LinearGenomeView/components/OverviewScalebarPolygon.d.ts +9 -0
  10. package/dist/LinearGenomeView/components/OverviewScalebarPolygon.js +46 -0
  11. package/dist/LinearGenomeView/components/RefNameAutocomplete/EndAdornment.js +1 -1
  12. package/dist/LinearGenomeView/components/RefNameAutocomplete/index.js +9 -10
  13. package/dist/LinearGenomeView/model.d.ts +5 -5
  14. package/dist/LinearGenomeView/model.js +15 -15
  15. package/dist/LinearGenomeView/svgcomponents/SVGHeader.js +2 -2
  16. package/dist/index.d.ts +30 -30
  17. package/esm/BaseLinearDisplay/models/util.js +4 -2
  18. package/esm/LaunchLinearGenomeView/index.js +8 -2
  19. package/esm/LinearBasicDisplay/model.d.ts +10 -20
  20. package/esm/LinearBasicDisplay/model.js +2 -2
  21. package/esm/LinearGenomeView/components/ExportSvgDialog.d.ts +1 -1
  22. package/esm/LinearGenomeView/components/ExportSvgDialog.js +1 -1
  23. package/esm/LinearGenomeView/components/OverviewScalebar.d.ts +0 -8
  24. package/esm/LinearGenomeView/components/OverviewScalebar.js +23 -53
  25. package/esm/LinearGenomeView/components/OverviewScalebarPolygon.d.ts +9 -0
  26. package/esm/LinearGenomeView/components/OverviewScalebarPolygon.js +41 -0
  27. package/esm/LinearGenomeView/components/RefNameAutocomplete/EndAdornment.js +1 -1
  28. package/esm/LinearGenomeView/components/RefNameAutocomplete/index.js +10 -11
  29. package/esm/LinearGenomeView/model.d.ts +5 -5
  30. package/esm/LinearGenomeView/model.js +15 -15
  31. package/esm/LinearGenomeView/svgcomponents/SVGHeader.js +2 -2
  32. package/esm/index.d.ts +30 -30
  33. package/package.json +2 -2
@@ -20,8 +20,10 @@ function getDisplayStr(totalBytes) {
20
20
  exports.getDisplayStr = getDisplayStr;
21
21
  // stabilize clipid under test for snapshot
22
22
  function getId(id, index) {
23
- const isJest = typeof jest === 'undefined';
24
- return `clip-${isJest ? id : 'jest'}-${index}`;
23
+ const notJest = typeof jest === 'undefined';
24
+ return ['clip', notJest ? id : 'jest', index, notJest ? Math.random() : '']
25
+ .filter(f => !!f)
26
+ .join('-');
25
27
  }
26
28
  exports.getId = getId;
27
29
  async function getFeatureDensityStatsPre(self) {
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const util_1 = require("@jbrowse/core/util");
4
- const searchUtils_1 = require("..//searchUtils");
4
+ const searchUtils_1 = require("../searchUtils");
5
5
  exports.default = (pluginManager) => {
6
6
  pluginManager.addToExtensionPoint('LaunchView-LinearGenomeView',
7
7
  // @ts-expect-error
8
- async ({ session, assembly, loc, tracks = [], }) => {
8
+ async ({ session, assembly, loc, tracks = [], tracklist, nav, }) => {
9
9
  try {
10
10
  const { assemblyManager } = session;
11
11
  const view = session.addView('LinearGenomeView', {});
@@ -23,6 +23,12 @@ exports.default = (pluginManager) => {
23
23
  if (idsNotFound.length) {
24
24
  throw new Error(`Could not resolve identifiers: ${idsNotFound.join(',')}`);
25
25
  }
26
+ if (tracklist) {
27
+ view.activateTrackSelector();
28
+ }
29
+ if (nav !== undefined) {
30
+ view.setHideHeader(!nav);
31
+ }
26
32
  }
27
33
  catch (e) {
28
34
  session.notify(`${e}`, 'error');
@@ -37,9 +37,7 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
37
37
  isLeftEndOfDisplayedRegion: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
38
38
  isRightEndOfDisplayedRegion: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
39
39
  }, {
40
- renderInProgress: AbortController | undefined; /**
41
- * #property
42
- */
40
+ renderInProgress: AbortController | undefined;
43
41
  filled: boolean;
44
42
  reactElement: import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | undefined;
45
43
  features: Map<string, import("@jbrowse/core/util").Feature> | undefined;
@@ -159,12 +157,11 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
159
157
  }, {
160
158
  rendererTypeName: string;
161
159
  error: unknown;
162
- message: string | undefined;
160
+ message: string | undefined; /**
161
+ * #action
162
+ */
163
163
  }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
164
164
  }> | null;
165
- /**
166
- * #action
167
- */
168
165
  readonly adapterConfig: any;
169
166
  readonly parentTrack: any;
170
167
  renderProps(): any;
@@ -193,9 +190,6 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
193
190
  } & {
194
191
  readonly currentBytesRequested: number;
195
192
  readonly currentFeatureScreenDensity: number;
196
- /**
197
- * #getter
198
- */
199
193
  readonly maxFeatureScreenDensity: any;
200
194
  readonly featureDensityStatsReady: boolean;
201
195
  readonly maxAllowableBytes: number;
@@ -205,7 +199,9 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
205
199
  setCurrStatsBpPerPx(n: number): void;
206
200
  setFeatureDensityStatsLimit(stats?: import("@jbrowse/core/data_adapters/BaseAdapter").FeatureDensityStats | undefined): void;
207
201
  getFeatureDensityStats(): Promise<import("@jbrowse/core/data_adapters/BaseAdapter").FeatureDensityStats>;
208
- setFeatureDensityStatsP(arg: any): void;
202
+ setFeatureDensityStatsP(arg: any): void; /**
203
+ * #method
204
+ */
209
205
  setFeatureDensityStats(featureDensityStats?: import("@jbrowse/core/data_adapters/BaseAdapter").FeatureDensityStats | undefined): void;
210
206
  clearFeatureDensityStats(): void;
211
207
  } & {
@@ -275,9 +271,7 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
275
271
  readonly rendererConfig: {
276
272
  [x: string]: any;
277
273
  } & import("mobx-state-tree/dist/internal").NonEmptyObject & {
278
- setSubschema(slotName: string, data: unknown): any; /**
279
- * #property
280
- */
274
+ setSubschema(slotName: string, data: unknown): any;
281
275
  } & import("mobx-state-tree").IStateTreeNode<AnyConfigurationSchemaType>;
282
276
  } & {
283
277
  /**
@@ -304,9 +298,7 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
304
298
  config: {
305
299
  [x: string]: any;
306
300
  } & import("mobx-state-tree/dist/internal").NonEmptyObject & {
307
- setSubschema(slotName: string, data: unknown): any; /**
308
- * #property
309
- */
301
+ setSubschema(slotName: string, data: unknown): any;
310
302
  } & import("mobx-state-tree").IStateTreeNode<AnyConfigurationSchemaType>;
311
303
  };
312
304
  /**
@@ -341,9 +333,7 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
341
333
  isLeftEndOfDisplayedRegion: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
342
334
  isRightEndOfDisplayedRegion: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
343
335
  }, {
344
- renderInProgress: AbortController | undefined; /**
345
- * #property
346
- */
336
+ renderInProgress: AbortController | undefined;
347
337
  filled: boolean;
348
338
  reactElement: import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | undefined;
349
339
  features: Map<string, import("@jbrowse/core/util").Feature> | undefined;
@@ -34,7 +34,7 @@ const mobx_state_tree_1 = require("mobx-state-tree");
34
34
  const Visibility_1 = __importDefault(require("@mui/icons-material/Visibility"));
35
35
  // locals
36
36
  const BaseLinearDisplay_1 = require("../BaseLinearDisplay");
37
- const SetMaxHeightDlg = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/SetMaxHeight'))));
37
+ const SetMaxHeightDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/SetMaxHeight'))));
38
38
  /**
39
39
  * #stateModel LinearBasicDisplay
40
40
  * #category display
@@ -202,7 +202,7 @@ function stateModelFactory(configSchema) {
202
202
  label: 'Set max height',
203
203
  onClick: () => {
204
204
  (0, util_1.getSession)(self).queueDialog(handleClose => [
205
- SetMaxHeightDlg,
205
+ SetMaxHeightDialog,
206
206
  { model: self, handleClose },
207
207
  ]);
208
208
  },
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { ExportSvgOptions } from '..';
3
- export default function ExportSvgDlg({ model, handleClose, }: {
3
+ export default function ExportSvgDialog({ model, handleClose, }: {
4
4
  model: {
5
5
  exportSvg(opts: ExportSvgOptions): Promise<void>;
6
6
  };
@@ -35,7 +35,7 @@ function LoadingMessage() {
35
35
  function useSvgLocal(key, val) {
36
36
  return (0, util_1.useLocalStorage)('svg-' + key, val);
37
37
  }
38
- function ExportSvgDlg({ model, handleClose, }) {
38
+ function ExportSvgDialog({ model, handleClose, }) {
39
39
  const session = (0, util_1.getSession)(model);
40
40
  const offscreenCanvas = typeof OffscreenCanvas !== 'undefined';
41
41
  const [rasterizeLayers, setRasterizeLayers] = (0, react_1.useState)(offscreenCanvas);
@@ -80,4 +80,4 @@ function ExportSvgDlg({ model, handleClose, }) {
80
80
  }
81
81
  } }, "Submit"))));
82
82
  }
83
- exports.default = ExportSvgDlg;
83
+ exports.default = ExportSvgDialog;
@@ -1,16 +1,8 @@
1
1
  import React from 'react';
2
- import { Base1DViewModel } from '@jbrowse/core/util/Base1DViewModel';
3
2
  import { LinearGenomeViewModel } from '..';
4
- declare const Polygon: ({ model, overview, useOffset, }: {
5
- model: LGV;
6
- overview: Base1DViewModel;
7
- useOffset?: boolean | undefined;
8
- }) => React.JSX.Element | null;
9
3
  type LGV = LinearGenomeViewModel;
10
4
  declare const OverviewScalebar: ({ model, children, }: {
11
5
  model: LGV;
12
6
  children: React.ReactNode;
13
7
  }) => React.JSX.Element;
14
- export { Polygon };
15
- export { default as Cytobands } from './Cytobands';
16
8
  export default OverviewScalebar;
@@ -26,7 +26,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.Cytobands = exports.Polygon = void 0;
30
29
  const react_1 = __importStar(require("react"));
31
30
  const material_1 = require("@mui/material");
32
31
  const mui_1 = require("tss-react/mui");
@@ -38,9 +37,10 @@ const blockTypes_1 = require("@jbrowse/core/util/blockTypes");
38
37
  // locals
39
38
  const __1 = require("..");
40
39
  const util_2 = require("../util");
40
+ const util_3 = require("./util");
41
41
  const OverviewRubberband_1 = __importDefault(require("./OverviewRubberband"));
42
42
  const Cytobands_1 = __importDefault(require("./Cytobands"));
43
- const util_3 = require("./util");
43
+ const OverviewScalebarPolygon_1 = __importDefault(require("./OverviewScalebarPolygon"));
44
44
  const wholeSeqSpacer = 2;
45
45
  const useStyles = (0, mui_1.makeStyles)()(theme => ({
46
46
  scalebar: {
@@ -94,56 +94,14 @@ const useStyles = (0, mui_1.makeStyles)()(theme => ({
94
94
  position: 'absolute',
95
95
  },
96
96
  }));
97
- const Polygon = (0, mobx_react_1.observer)(function ({ model, overview, useOffset = true, }) {
98
- const theme = (0, material_1.useTheme)();
99
- const multiplier = Number(useOffset);
100
- const { interRegionPaddingWidth, offsetPx, dynamicBlocks, cytobandOffset } = model;
101
- const { contentBlocks, totalWidthPxWithoutBorders } = dynamicBlocks;
102
- const { tertiary, primary } = theme.palette;
103
- const polygonColor = tertiary ? tertiary.light : primary.light;
104
- // catches possible null from at's below
105
- if (!contentBlocks.length) {
106
- return null;
107
- }
108
- const first = contentBlocks.at(0);
109
- const last = contentBlocks.at(-1);
110
- const topLeft = (overview.bpToPx({
111
- ...first,
112
- coord: first.reversed ? first.end : first.start,
113
- }) || 0) +
114
- cytobandOffset * multiplier;
115
- const topRight = (overview.bpToPx({
116
- ...last,
117
- coord: last.reversed ? last.start : last.end,
118
- }) || 0) +
119
- cytobandOffset * multiplier;
120
- const startPx = Math.max(0, -offsetPx);
121
- const endPx = startPx +
122
- totalWidthPxWithoutBorders +
123
- (contentBlocks.length * interRegionPaddingWidth) / 2;
124
- const points = [
125
- [startPx, __1.HEADER_BAR_HEIGHT],
126
- [endPx, __1.HEADER_BAR_HEIGHT],
127
- [topRight, 0],
128
- [topLeft, 0],
129
- ];
130
- return (react_1.default.createElement("polygon", { points: points.toString(), fill: (0, material_1.alpha)(polygonColor, 0.3), stroke: (0, material_1.alpha)(polygonColor, 0.8) }));
131
- });
132
- exports.Polygon = Polygon;
133
97
  const OverviewBox = (0, mobx_react_1.observer)(function ({ scale, model, block, overview, }) {
134
98
  const { classes, cx } = useStyles();
135
99
  const theme = (0, material_1.useTheme)();
136
100
  const { cytobandOffset, showCytobands } = model;
137
- const { start, end, reversed, refName, assemblyName } = block;
138
- const { majorPitch } = (0, util_2.chooseGridPitch)(scale, 120, 15);
101
+ const { reversed, refName, assemblyName } = block;
139
102
  const { assemblyManager } = (0, util_1.getSession)(model);
140
103
  const assembly = assemblyManager.get(assemblyName);
141
104
  const refNameColor = assembly === null || assembly === void 0 ? void 0 : assembly.getRefNameColor(refName);
142
- const tickLabels = [];
143
- for (let i = 0; i < Math.floor((end - start) / majorPitch); i++) {
144
- const offsetLabel = (i + 1) * majorPitch;
145
- tickLabels.push(reversed ? end - offsetLabel : start + offsetLabel);
146
- }
147
105
  const canDisplayCytobands = showCytobands && (0, util_3.getCytobands)(assembly, block.refName).length;
148
106
  return (react_1.default.createElement("div", null,
149
107
  react_1.default.createElement(material_1.Typography, { style: {
@@ -161,16 +119,28 @@ const OverviewBox = (0, mobx_react_1.observer)(function ({ scale, model, block,
161
119
  width: block.widthPx,
162
120
  borderColor: refNameColor,
163
121
  } },
164
- !canDisplayCytobands
165
- ? tickLabels.map((tickLabel, labelIdx) => (react_1.default.createElement(material_1.Typography, { key: `${JSON.stringify(block)}-${tickLabel}-${labelIdx}`, className: classes.scalebarLabel, variant: "body2", style: {
166
- left: ((labelIdx + 1) * majorPitch) / scale,
167
- pointerEvents: 'none',
168
- color: refNameColor,
169
- } }, (0, util_1.getTickDisplayStr)(tickLabel, overview.bpPerPx))))
170
- : null,
122
+ !canDisplayCytobands ? (react_1.default.createElement(TickLabels, { model: model, overview: overview, scale: scale, block: block })) : null,
171
123
  canDisplayCytobands ? (react_1.default.createElement("svg", { style: { width: '100%' } },
172
124
  react_1.default.createElement(Cytobands_1.default, { overview: overview, assembly: assembly, block: block }))) : null)));
173
125
  });
126
+ const TickLabels = (0, mobx_react_1.observer)(function ({ block, scale, overview, model, }) {
127
+ const { classes } = useStyles();
128
+ const { start, end, reversed, refName, assemblyName } = block;
129
+ const { majorPitch } = (0, util_2.chooseGridPitch)(scale, 120, 15);
130
+ const { assemblyManager } = (0, util_1.getSession)(model);
131
+ const assembly = assemblyManager.get(assemblyName);
132
+ const refNameColor = assembly === null || assembly === void 0 ? void 0 : assembly.getRefNameColor(refName);
133
+ const tickLabels = [];
134
+ for (let i = 0; i < Math.floor((end - start) / majorPitch); i++) {
135
+ const offsetLabel = (i + 1) * majorPitch;
136
+ tickLabels.push(reversed ? end - offsetLabel : start + offsetLabel);
137
+ }
138
+ return tickLabels.map((tickLabel, labelIdx) => (react_1.default.createElement(material_1.Typography, { key: `${JSON.stringify(block)}-${tickLabel}-${labelIdx}`, className: classes.scalebarLabel, variant: "body2", style: {
139
+ left: ((labelIdx + 1) * majorPitch) / scale,
140
+ pointerEvents: 'none',
141
+ color: refNameColor,
142
+ } }, (0, util_1.getTickDisplayStr)(tickLabel, overview.bpPerPx))));
143
+ });
174
144
  const Scalebar = (0, mobx_react_1.observer)(function ({ model, scale, overview, }) {
175
145
  const { classes } = useStyles();
176
146
  const theme = (0, material_1.useTheme)();
@@ -235,9 +205,7 @@ const OverviewScalebar = (0, mobx_react_1.observer)(function ({ model, children,
235
205
  react_1.default.createElement(OverviewRubberband_1.default, { model: model, overview: overview, ControlComponent: react_1.default.createElement(Scalebar, { model: model, overview: overview, scale: scale }) }),
236
206
  react_1.default.createElement("div", { className: classes.overview },
237
207
  react_1.default.createElement("svg", { height: __1.HEADER_BAR_HEIGHT, className: classes.overviewSvg },
238
- react_1.default.createElement(Polygon, { model: model, overview: overview })),
208
+ react_1.default.createElement(OverviewScalebarPolygon_1.default, { model: model, overview: overview })),
239
209
  children)));
240
210
  });
241
- var Cytobands_2 = require("./Cytobands");
242
- Object.defineProperty(exports, "Cytobands", { enumerable: true, get: function () { return __importDefault(Cytobands_2).default; } });
243
211
  exports.default = OverviewScalebar;
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import { Base1DViewModel } from '@jbrowse/core/util/Base1DViewModel';
3
+ import { LinearGenomeViewModel } from '..';
4
+ declare const OverviewScalebarPolygon: ({ model, overview, useOffset, }: {
5
+ model: LinearGenomeViewModel;
6
+ overview: Base1DViewModel;
7
+ useOffset?: boolean | undefined;
8
+ }) => React.JSX.Element | null;
9
+ export default OverviewScalebarPolygon;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const material_1 = require("@mui/material");
8
+ const mobx_react_1 = require("mobx-react");
9
+ // locals
10
+ const __1 = require("..");
11
+ const OverviewScalebarPolygon = (0, mobx_react_1.observer)(function ({ model, overview, useOffset = true, }) {
12
+ const theme = (0, material_1.useTheme)();
13
+ const multiplier = Number(useOffset);
14
+ const { interRegionPaddingWidth, offsetPx, dynamicBlocks, cytobandOffset } = model;
15
+ const { contentBlocks, totalWidthPxWithoutBorders } = dynamicBlocks;
16
+ const { tertiary, primary } = theme.palette;
17
+ const polygonColor = tertiary ? tertiary.light : primary.light;
18
+ // catches possible null from at's below
19
+ if (!contentBlocks.length) {
20
+ return null;
21
+ }
22
+ const first = contentBlocks.at(0);
23
+ const last = contentBlocks.at(-1);
24
+ const topLeft = (overview.bpToPx({
25
+ ...first,
26
+ coord: first.reversed ? first.end : first.start,
27
+ }) || 0) +
28
+ cytobandOffset * multiplier;
29
+ const topRight = (overview.bpToPx({
30
+ ...last,
31
+ coord: last.reversed ? last.start : last.end,
32
+ }) || 0) +
33
+ cytobandOffset * multiplier;
34
+ const startPx = Math.max(0, -offsetPx);
35
+ const endPx = startPx +
36
+ totalWidthPxWithoutBorders +
37
+ (contentBlocks.length * interRegionPaddingWidth) / 2;
38
+ const points = [
39
+ [startPx, __1.HEADER_BAR_HEIGHT],
40
+ [endPx, __1.HEADER_BAR_HEIGHT],
41
+ [topRight, 0],
42
+ [topLeft, 0],
43
+ ];
44
+ return (react_1.default.createElement("polygon", { points: points.toString(), fill: (0, material_1.alpha)(polygonColor, 0.3), stroke: (0, material_1.alpha)(polygonColor, 0.8) }));
45
+ });
46
+ exports.default = OverviewScalebarPolygon;
@@ -38,7 +38,7 @@ function HelpAdornment() {
38
38
  return (react_1.default.createElement(react_1.default.Fragment, null,
39
39
  react_1.default.createElement(material_1.IconButton, { onClick: () => setHelpDialogDisplayed(true), size: "small" },
40
40
  react_1.default.createElement(Help_1.default, { fontSize: "small" })),
41
- isHelpDialogDisplayed ? (react_1.default.createElement(react_1.Suspense, { fallback: react_1.default.createElement("div", null) },
41
+ isHelpDialogDisplayed ? (react_1.default.createElement(react_1.Suspense, { fallback: null },
42
42
  react_1.default.createElement(HelpDialog, { handleClose: () => setHelpDialogDisplayed(false) }))) : null));
43
43
  }
44
44
  function EndAdornment({ showHelp, endAdornment, }) {
@@ -34,7 +34,6 @@ const material_1 = require("@mui/material");
34
34
  const util_2 = require("./util");
35
35
  const AutocompleteTextField_1 = __importDefault(require("./AutocompleteTextField"));
36
36
  const RefNameAutocomplete = (0, mobx_react_1.observer)(function ({ model, onSelect, assemblyName, style, fetchResults, onChange, value, showHelp = true, minWidth = 200, maxWidth = 550, TextFieldProps = {}, }) {
37
- var _a;
38
37
  const session = (0, util_1.getSession)(model);
39
38
  const { assemblyManager } = session;
40
39
  const [open, setOpen] = (0, react_1.useState)(false);
@@ -73,6 +72,14 @@ const RefNameAutocomplete = (0, mobx_react_1.observer)(function ({ model, onSele
73
72
  const inputBoxVal = coarseVisibleLocStrings || value || '';
74
73
  // heuristic, text width + 60 accommodates help icon and search icon
75
74
  const width = Math.min(Math.max((0, util_1.measureText)(inputBoxVal, 14) + 100, minWidth), maxWidth);
75
+ const regions = assembly === null || assembly === void 0 ? void 0 : assembly.regions;
76
+ const regionOptions = (0, react_1.useMemo)(() => (regions === null || regions === void 0 ? void 0 : regions.map(option => ({
77
+ result: new BaseResults_1.RefSequenceResult({
78
+ refName: option.refName,
79
+ label: option.refName,
80
+ matchedAttribute: 'refName',
81
+ }),
82
+ }))) || [], [regions]);
76
83
  // notes on implementation:
77
84
  // The selectOnFocus setting helps highlight the field when clicked
78
85
  return (react_1.default.createElement(react_1.default.Fragment, null,
@@ -98,14 +105,6 @@ const RefNameAutocomplete = (0, mobx_react_1.observer)(function ({ model, onSele
98
105
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(selectedOption.result);
99
106
  }
100
107
  setInputValue(inputBoxVal);
101
- }, options: !(searchOptions === null || searchOptions === void 0 ? void 0 : searchOptions.length)
102
- ? ((_a = assembly === null || assembly === void 0 ? void 0 : assembly.regions) === null || _a === void 0 ? void 0 : _a.map(option => ({
103
- result: new BaseResults_1.RefSequenceResult({
104
- refName: option.refName,
105
- label: option.refName,
106
- matchedAttribute: 'refName',
107
- }),
108
- }))) || []
109
- : searchOptions, getOptionDisabled: option => option.group === 'limitOption', filterOptions: (opts, { inputValue }) => (0, util_2.getFiltered)(opts, inputValue), renderInput: params => (react_1.default.createElement(AutocompleteTextField_1.default, { showHelp: showHelp, params: params, inputBoxVal: inputBoxVal, TextFieldProps: TextFieldProps, setCurrentSearch: setCurrentSearch, setInputValue: setInputValue })), getOptionLabel: opt => typeof opt === 'string' ? opt : opt.result.getDisplayString() })));
108
+ }, options: (searchOptions === null || searchOptions === void 0 ? void 0 : searchOptions.length) ? searchOptions : regionOptions, getOptionDisabled: option => option.group === 'limitOption', filterOptions: (opts, { inputValue }) => (0, util_2.getFiltered)(opts, inputValue), renderInput: params => (react_1.default.createElement(AutocompleteTextField_1.default, { showHelp: showHelp, params: params, inputBoxVal: inputBoxVal, TextFieldProps: TextFieldProps, setCurrentSearch: setCurrentSearch, setInputValue: setInputValue })), getOptionLabel: opt => typeof opt === 'string' ? opt : opt.result.getDisplayString() })));
110
109
  });
111
110
  exports.default = RefNameAutocomplete;
@@ -238,19 +238,19 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
238
238
  /**
239
239
  * #action
240
240
  */
241
- toggleHeader(): void;
241
+ setHideHeader(b: boolean): void;
242
242
  /**
243
243
  * #action
244
244
  */
245
- toggleHeaderOverview(): void;
245
+ setHideHeaderOverview(b: boolean): void;
246
246
  /**
247
247
  * #action
248
248
  */
249
- toggleNoTracksActive(): void;
249
+ setHideNoTracksActive(b: boolean): void;
250
250
  /**
251
251
  * #action
252
252
  */
253
- toggleShowGridlines(): void;
253
+ setShowGridlines(b: boolean): void;
254
254
  /**
255
255
  * #action
256
256
  */
@@ -306,7 +306,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
306
306
  /**
307
307
  * #action
308
308
  */
309
- toggleCenterLine(): void;
309
+ setShowCenterLine(b: boolean): void;
310
310
  /**
311
311
  * #action
312
312
  */
@@ -447,26 +447,26 @@ function stateModelFactory(pluginManager) {
447
447
  /**
448
448
  * #action
449
449
  */
450
- toggleHeader() {
451
- self.hideHeader = !self.hideHeader;
450
+ setHideHeader(b) {
451
+ self.hideHeader = b;
452
452
  },
453
453
  /**
454
454
  * #action
455
455
  */
456
- toggleHeaderOverview() {
457
- self.hideHeaderOverview = !self.hideHeaderOverview;
456
+ setHideHeaderOverview(b) {
457
+ self.hideHeaderOverview = b;
458
458
  },
459
459
  /**
460
460
  * #action
461
461
  */
462
- toggleNoTracksActive() {
463
- self.hideNoTracksActive = !self.hideNoTracksActive;
462
+ setHideNoTracksActive(b) {
463
+ self.hideNoTracksActive = b;
464
464
  },
465
465
  /**
466
466
  * #action
467
467
  */
468
- toggleShowGridlines() {
469
- self.showGridlines = !self.showGridlines;
468
+ setShowGridlines(b) {
469
+ self.showGridlines = b;
470
470
  },
471
471
  /**
472
472
  * #action
@@ -642,8 +642,8 @@ function stateModelFactory(pluginManager) {
642
642
  /**
643
643
  * #action
644
644
  */
645
- toggleCenterLine() {
646
- self.showCenterLine = !self.showCenterLine;
645
+ setShowCenterLine(b) {
646
+ self.showCenterLine = b;
647
647
  },
648
648
  /**
649
649
  * #action
@@ -920,32 +920,32 @@ function stateModelFactory(pluginManager) {
920
920
  label: 'Show center line',
921
921
  type: 'checkbox',
922
922
  checked: self.showCenterLine,
923
- onClick: self.toggleCenterLine,
923
+ onClick: () => self.setShowCenterLine(!self.showCenterLine),
924
924
  },
925
925
  {
926
926
  label: 'Show header',
927
927
  type: 'checkbox',
928
928
  checked: !self.hideHeader,
929
- onClick: self.toggleHeader,
929
+ onClick: () => self.setHideHeader(!self.hideHeader),
930
930
  },
931
931
  {
932
932
  label: 'Show header overview',
933
933
  type: 'checkbox',
934
934
  checked: !self.hideHeaderOverview,
935
- onClick: self.toggleHeaderOverview,
935
+ onClick: () => self.setHideHeaderOverview(!self.hideHeaderOverview),
936
936
  disabled: self.hideHeader,
937
937
  },
938
938
  {
939
939
  label: 'Show no tracks active button',
940
940
  type: 'checkbox',
941
941
  checked: !self.hideNoTracksActive,
942
- onClick: self.toggleNoTracksActive,
942
+ onClick: () => self.setHideNoTracksActive(!self.hideNoTracksActive),
943
943
  },
944
944
  {
945
945
  label: 'Show guidelines',
946
946
  type: 'checkbox',
947
947
  checked: self.showGridlines,
948
- onClick: self.toggleShowGridlines,
948
+ onClick: () => self.setShowGridlines(!self.showGridlines),
949
949
  },
950
950
  ...(canShowCytobands
951
951
  ? [
@@ -10,9 +10,9 @@ const material_1 = require("@mui/material");
10
10
  // locals
11
11
  const __1 = require("..");
12
12
  const Cytobands_1 = __importDefault(require("../components/Cytobands"));
13
- const OverviewScalebar_1 = require("../components/OverviewScalebar");
14
13
  const SVGRuler_1 = __importDefault(require("./SVGRuler"));
15
14
  const SVGScalebar_1 = __importDefault(require("./SVGScalebar"));
15
+ const OverviewScalebarPolygon_1 = __importDefault(require("../components/OverviewScalebarPolygon"));
16
16
  function SVGHeader({ model, fontSize, cytobandHeight, rulerHeight, }) {
17
17
  const { width, assemblyNames, showCytobands, displayedRegions } = model;
18
18
  const { assemblyManager } = (0, util_1.getSession)(model);
@@ -49,7 +49,7 @@ function SVGHeader({ model, fontSize, cytobandHeight, rulerHeight, }) {
49
49
  react_1.default.createElement(Cytobands_1.default, { overview: overview, assembly: assembly, block: block }),
50
50
  react_1.default.createElement("rect", { stroke: "red", fill: "rgb(255,0,0,0.1)", width: Math.max(lastOverviewPx - firstOverviewPx, 0.5), height: __1.HEADER_OVERVIEW_HEIGHT - 1, x: firstOverviewPx, y: 0.5 }),
51
51
  react_1.default.createElement("g", { transform: `translate(0,${__1.HEADER_OVERVIEW_HEIGHT})` },
52
- react_1.default.createElement(OverviewScalebar_1.Polygon, { overview: overview, model: model, useOffset: false })))) : null,
52
+ react_1.default.createElement(OverviewScalebarPolygon_1.default, { overview: overview, model: model, useOffset: false })))) : null,
53
53
  react_1.default.createElement("g", { transform: `translate(0 ${fontSize + y})` },
54
54
  react_1.default.createElement(SVGScalebar_1.default, { model: model, fontSize: fontSize })),
55
55
  react_1.default.createElement("g", { transform: `translate(0 ${rulerHeight + y})` },