@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
package/dist/index.d.ts CHANGED
@@ -964,10 +964,10 @@ export default class LinearGenomeViewPlugin extends Plugin {
964
964
  setShowCytobands(flag: boolean): void;
965
965
  setWidth(newWidth: number): void;
966
966
  setError(error: unknown): void;
967
- toggleHeader(): void;
968
- toggleHeaderOverview(): void;
969
- toggleNoTracksActive(): void;
970
- toggleShowGridlines(): void;
967
+ setHideHeader(b: boolean): void;
968
+ setHideHeaderOverview(b: boolean): void;
969
+ setHideNoTracksActive(b: boolean): void;
970
+ setShowGridlines(b: boolean): void;
971
971
  scrollTo(offsetPx: number): number;
972
972
  zoomTo(bpPerPx: number, offset?: number, centerAtOffset?: boolean): number;
973
973
  setOffsets(left?: import("./LinearGenomeView").BpOffset | undefined, right?: import("./LinearGenomeView").BpOffset | undefined): void;
@@ -981,7 +981,7 @@ export default class LinearGenomeViewPlugin extends Plugin {
981
981
  closeView(): void;
982
982
  toggleTrack(trackId: string): boolean;
983
983
  setTrackLabels(setting: "offset" | "hidden" | "overlapping"): void;
984
- toggleCenterLine(): void;
984
+ setShowCenterLine(b: boolean): void;
985
985
  setDisplayedRegions(regions: import("@jbrowse/core/util").Region[]): void;
986
986
  activateTrackSelector(): import("@jbrowse/core/util").Widget;
987
987
  getSelectedRegions(leftOffset?: import("./LinearGenomeView").BpOffset | undefined, rightOffset?: import("./LinearGenomeView").BpOffset | undefined): {
@@ -1283,10 +1283,10 @@ export default class LinearGenomeViewPlugin extends Plugin {
1283
1283
  setShowCytobands(flag: boolean): void;
1284
1284
  setWidth(newWidth: number): void;
1285
1285
  setError(error: unknown): void;
1286
- toggleHeader(): void;
1287
- toggleHeaderOverview(): void;
1288
- toggleNoTracksActive(): void;
1289
- toggleShowGridlines(): void;
1286
+ setHideHeader(b: boolean): void;
1287
+ setHideHeaderOverview(b: boolean): void;
1288
+ setHideNoTracksActive(b: boolean): void;
1289
+ setShowGridlines(b: boolean): void;
1290
1290
  scrollTo(offsetPx: number): number;
1291
1291
  zoomTo(bpPerPx: number, offset?: number, centerAtOffset?: boolean): number;
1292
1292
  setOffsets(left?: import("./LinearGenomeView").BpOffset | undefined, right?: import("./LinearGenomeView").BpOffset | undefined): void;
@@ -1300,7 +1300,7 @@ export default class LinearGenomeViewPlugin extends Plugin {
1300
1300
  closeView(): void;
1301
1301
  toggleTrack(trackId: string): boolean;
1302
1302
  setTrackLabels(setting: "offset" | "hidden" | "overlapping"): void;
1303
- toggleCenterLine(): void;
1303
+ setShowCenterLine(b: boolean): void;
1304
1304
  setDisplayedRegions(regions: import("@jbrowse/core/util").Region[]): void;
1305
1305
  activateTrackSelector(): import("@jbrowse/core/util").Widget;
1306
1306
  getSelectedRegions(leftOffset?: import("./LinearGenomeView").BpOffset | undefined, rightOffset?: import("./LinearGenomeView").BpOffset | undefined): {
@@ -1612,10 +1612,10 @@ export default class LinearGenomeViewPlugin extends Plugin {
1612
1612
  setShowCytobands(flag: boolean): void;
1613
1613
  setWidth(newWidth: number): void;
1614
1614
  setError(error: unknown): void;
1615
- toggleHeader(): void;
1616
- toggleHeaderOverview(): void;
1617
- toggleNoTracksActive(): void;
1618
- toggleShowGridlines(): void;
1615
+ setHideHeader(b: boolean): void;
1616
+ setHideHeaderOverview(b: boolean): void;
1617
+ setHideNoTracksActive(b: boolean): void;
1618
+ setShowGridlines(b: boolean): void;
1619
1619
  scrollTo(offsetPx: number): number;
1620
1620
  zoomTo(bpPerPx: number, offset?: number, centerAtOffset?: boolean): number;
1621
1621
  setOffsets(left?: import("./LinearGenomeView").BpOffset | undefined, right?: import("./LinearGenomeView").BpOffset | undefined): void;
@@ -1629,7 +1629,7 @@ export default class LinearGenomeViewPlugin extends Plugin {
1629
1629
  closeView(): void;
1630
1630
  toggleTrack(trackId: string): boolean;
1631
1631
  setTrackLabels(setting: "offset" | "hidden" | "overlapping"): void;
1632
- toggleCenterLine(): void;
1632
+ setShowCenterLine(b: boolean): void;
1633
1633
  setDisplayedRegions(regions: import("@jbrowse/core/util").Region[]): void;
1634
1634
  activateTrackSelector(): import("@jbrowse/core/util").Widget;
1635
1635
  getSelectedRegions(leftOffset?: import("./LinearGenomeView").BpOffset | undefined, rightOffset?: import("./LinearGenomeView").BpOffset | undefined): {
@@ -1931,10 +1931,10 @@ export default class LinearGenomeViewPlugin extends Plugin {
1931
1931
  setShowCytobands(flag: boolean): void;
1932
1932
  setWidth(newWidth: number): void;
1933
1933
  setError(error: unknown): void;
1934
- toggleHeader(): void;
1935
- toggleHeaderOverview(): void;
1936
- toggleNoTracksActive(): void;
1937
- toggleShowGridlines(): void;
1934
+ setHideHeader(b: boolean): void;
1935
+ setHideHeaderOverview(b: boolean): void;
1936
+ setHideNoTracksActive(b: boolean): void;
1937
+ setShowGridlines(b: boolean): void;
1938
1938
  scrollTo(offsetPx: number): number;
1939
1939
  zoomTo(bpPerPx: number, offset?: number, centerAtOffset?: boolean): number;
1940
1940
  setOffsets(left?: import("./LinearGenomeView").BpOffset | undefined, right?: import("./LinearGenomeView").BpOffset | undefined): void;
@@ -1948,7 +1948,7 @@ export default class LinearGenomeViewPlugin extends Plugin {
1948
1948
  closeView(): void;
1949
1949
  toggleTrack(trackId: string): boolean;
1950
1950
  setTrackLabels(setting: "offset" | "hidden" | "overlapping"): void;
1951
- toggleCenterLine(): void;
1951
+ setShowCenterLine(b: boolean): void;
1952
1952
  setDisplayedRegions(regions: import("@jbrowse/core/util").Region[]): void;
1953
1953
  activateTrackSelector(): import("@jbrowse/core/util").Widget;
1954
1954
  getSelectedRegions(leftOffset?: import("./LinearGenomeView").BpOffset | undefined, rightOffset?: import("./LinearGenomeView").BpOffset | undefined): {
@@ -2260,10 +2260,10 @@ export default class LinearGenomeViewPlugin extends Plugin {
2260
2260
  setShowCytobands(flag: boolean): void;
2261
2261
  setWidth(newWidth: number): void;
2262
2262
  setError(error: unknown): void;
2263
- toggleHeader(): void;
2264
- toggleHeaderOverview(): void;
2265
- toggleNoTracksActive(): void;
2266
- toggleShowGridlines(): void;
2263
+ setHideHeader(b: boolean): void;
2264
+ setHideHeaderOverview(b: boolean): void;
2265
+ setHideNoTracksActive(b: boolean): void;
2266
+ setShowGridlines(b: boolean): void;
2267
2267
  scrollTo(offsetPx: number): number;
2268
2268
  zoomTo(bpPerPx: number, offset?: number, centerAtOffset?: boolean): number;
2269
2269
  setOffsets(left?: import("./LinearGenomeView").BpOffset | undefined, right?: import("./LinearGenomeView").BpOffset | undefined): void;
@@ -2277,7 +2277,7 @@ export default class LinearGenomeViewPlugin extends Plugin {
2277
2277
  closeView(): void;
2278
2278
  toggleTrack(trackId: string): boolean;
2279
2279
  setTrackLabels(setting: "offset" | "hidden" | "overlapping"): void;
2280
- toggleCenterLine(): void;
2280
+ setShowCenterLine(b: boolean): void;
2281
2281
  setDisplayedRegions(regions: import("@jbrowse/core/util").Region[]): void;
2282
2282
  activateTrackSelector(): import("@jbrowse/core/util").Widget;
2283
2283
  getSelectedRegions(leftOffset?: import("./LinearGenomeView").BpOffset | undefined, rightOffset?: import("./LinearGenomeView").BpOffset | undefined): {
@@ -2579,10 +2579,10 @@ export default class LinearGenomeViewPlugin extends Plugin {
2579
2579
  setShowCytobands(flag: boolean): void;
2580
2580
  setWidth(newWidth: number): void;
2581
2581
  setError(error: unknown): void;
2582
- toggleHeader(): void;
2583
- toggleHeaderOverview(): void;
2584
- toggleNoTracksActive(): void;
2585
- toggleShowGridlines(): void;
2582
+ setHideHeader(b: boolean): void;
2583
+ setHideHeaderOverview(b: boolean): void;
2584
+ setHideNoTracksActive(b: boolean): void;
2585
+ setShowGridlines(b: boolean): void;
2586
2586
  scrollTo(offsetPx: number): number;
2587
2587
  zoomTo(bpPerPx: number, offset?: number, centerAtOffset?: boolean): number;
2588
2588
  setOffsets(left?: import("./LinearGenomeView").BpOffset | undefined, right?: import("./LinearGenomeView").BpOffset | undefined): void;
@@ -2596,7 +2596,7 @@ export default class LinearGenomeViewPlugin extends Plugin {
2596
2596
  closeView(): void;
2597
2597
  toggleTrack(trackId: string): boolean;
2598
2598
  setTrackLabels(setting: "offset" | "hidden" | "overlapping"): void;
2599
- toggleCenterLine(): void;
2599
+ setShowCenterLine(b: boolean): void;
2600
2600
  setDisplayedRegions(regions: import("@jbrowse/core/util").Region[]): void;
2601
2601
  activateTrackSelector(): import("@jbrowse/core/util").Widget;
2602
2602
  getSelectedRegions(leftOffset?: import("./LinearGenomeView").BpOffset | undefined, rightOffset?: import("./LinearGenomeView").BpOffset | undefined): {
@@ -16,8 +16,10 @@ export function getDisplayStr(totalBytes) {
16
16
  }
17
17
  // stabilize clipid under test for snapshot
18
18
  export function getId(id, index) {
19
- const isJest = typeof jest === 'undefined';
20
- return `clip-${isJest ? id : 'jest'}-${index}`;
19
+ const notJest = typeof jest === 'undefined';
20
+ return ['clip', notJest ? id : 'jest', index, notJest ? Math.random() : '']
21
+ .filter(f => !!f)
22
+ .join('-');
21
23
  }
22
24
  export async function getFeatureDensityStatsPre(self) {
23
25
  const view = getContainingView(self);
@@ -1,9 +1,9 @@
1
1
  import { when } from '@jbrowse/core/util';
2
- import { handleSelectedRegion } from '..//searchUtils';
2
+ import { handleSelectedRegion } from '../searchUtils';
3
3
  export default (pluginManager) => {
4
4
  pluginManager.addToExtensionPoint('LaunchView-LinearGenomeView',
5
5
  // @ts-expect-error
6
- async ({ session, assembly, loc, tracks = [], }) => {
6
+ async ({ session, assembly, loc, tracks = [], tracklist, nav, }) => {
7
7
  try {
8
8
  const { assemblyManager } = session;
9
9
  const view = session.addView('LinearGenomeView', {});
@@ -21,6 +21,12 @@ export default (pluginManager) => {
21
21
  if (idsNotFound.length) {
22
22
  throw new Error(`Could not resolve identifiers: ${idsNotFound.join(',')}`);
23
23
  }
24
+ if (tracklist) {
25
+ view.activateTrackSelector();
26
+ }
27
+ if (nav !== undefined) {
28
+ view.setHideHeader(!nav);
29
+ }
24
30
  }
25
31
  catch (e) {
26
32
  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;
@@ -6,7 +6,7 @@ import { types, getEnv } from 'mobx-state-tree';
6
6
  import VisibilityIcon from '@mui/icons-material/Visibility';
7
7
  // locals
8
8
  import { BaseLinearDisplay } from '../BaseLinearDisplay';
9
- const SetMaxHeightDlg = lazy(() => import('./components/SetMaxHeight'));
9
+ const SetMaxHeightDialog = lazy(() => import('./components/SetMaxHeight'));
10
10
  /**
11
11
  * #stateModel LinearBasicDisplay
12
12
  * #category display
@@ -174,7 +174,7 @@ function stateModelFactory(configSchema) {
174
174
  label: 'Set max height',
175
175
  onClick: () => {
176
176
  getSession(self).queueDialog(handleClose => [
177
- SetMaxHeightDlg,
177
+ SetMaxHeightDialog,
178
178
  { model: self, handleClose },
179
179
  ]);
180
180
  },
@@ -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
  };
@@ -10,7 +10,7 @@ function LoadingMessage() {
10
10
  function useSvgLocal(key, val) {
11
11
  return useLocalStorage('svg-' + key, val);
12
12
  }
13
- export default function ExportSvgDlg({ model, handleClose, }) {
13
+ export default function ExportSvgDialog({ model, handleClose, }) {
14
14
  const session = getSession(model);
15
15
  const offscreenCanvas = typeof OffscreenCanvas !== 'undefined';
16
16
  const [rasterizeLayers, setRasterizeLayers] = useState(offscreenCanvas);
@@ -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;
@@ -9,9 +9,10 @@ import { ContentBlock } from '@jbrowse/core/util/blockTypes';
9
9
  // locals
10
10
  import { HEADER_BAR_HEIGHT, HEADER_OVERVIEW_HEIGHT, } from '..';
11
11
  import { chooseGridPitch } from '../util';
12
+ import { getCytobands } from './util';
12
13
  import OverviewRubberband from './OverviewRubberband';
13
14
  import Cytobands from './Cytobands';
14
- import { getCytobands } from './util';
15
+ import OverviewScalebarPolygon from './OverviewScalebarPolygon';
15
16
  const wholeSeqSpacer = 2;
16
17
  const useStyles = makeStyles()(theme => ({
17
18
  scalebar: {
@@ -65,55 +66,14 @@ const useStyles = makeStyles()(theme => ({
65
66
  position: 'absolute',
66
67
  },
67
68
  }));
68
- const Polygon = observer(function ({ model, overview, useOffset = true, }) {
69
- const theme = useTheme();
70
- const multiplier = Number(useOffset);
71
- const { interRegionPaddingWidth, offsetPx, dynamicBlocks, cytobandOffset } = model;
72
- const { contentBlocks, totalWidthPxWithoutBorders } = dynamicBlocks;
73
- const { tertiary, primary } = theme.palette;
74
- const polygonColor = tertiary ? tertiary.light : primary.light;
75
- // catches possible null from at's below
76
- if (!contentBlocks.length) {
77
- return null;
78
- }
79
- const first = contentBlocks.at(0);
80
- const last = contentBlocks.at(-1);
81
- const topLeft = (overview.bpToPx({
82
- ...first,
83
- coord: first.reversed ? first.end : first.start,
84
- }) || 0) +
85
- cytobandOffset * multiplier;
86
- const topRight = (overview.bpToPx({
87
- ...last,
88
- coord: last.reversed ? last.start : last.end,
89
- }) || 0) +
90
- cytobandOffset * multiplier;
91
- const startPx = Math.max(0, -offsetPx);
92
- const endPx = startPx +
93
- totalWidthPxWithoutBorders +
94
- (contentBlocks.length * interRegionPaddingWidth) / 2;
95
- const points = [
96
- [startPx, HEADER_BAR_HEIGHT],
97
- [endPx, HEADER_BAR_HEIGHT],
98
- [topRight, 0],
99
- [topLeft, 0],
100
- ];
101
- return (React.createElement("polygon", { points: points.toString(), fill: alpha(polygonColor, 0.3), stroke: alpha(polygonColor, 0.8) }));
102
- });
103
69
  const OverviewBox = observer(function ({ scale, model, block, overview, }) {
104
70
  const { classes, cx } = useStyles();
105
71
  const theme = useTheme();
106
72
  const { cytobandOffset, showCytobands } = model;
107
- const { start, end, reversed, refName, assemblyName } = block;
108
- const { majorPitch } = chooseGridPitch(scale, 120, 15);
73
+ const { reversed, refName, assemblyName } = block;
109
74
  const { assemblyManager } = getSession(model);
110
75
  const assembly = assemblyManager.get(assemblyName);
111
76
  const refNameColor = assembly === null || assembly === void 0 ? void 0 : assembly.getRefNameColor(refName);
112
- const tickLabels = [];
113
- for (let i = 0; i < Math.floor((end - start) / majorPitch); i++) {
114
- const offsetLabel = (i + 1) * majorPitch;
115
- tickLabels.push(reversed ? end - offsetLabel : start + offsetLabel);
116
- }
117
77
  const canDisplayCytobands = showCytobands && getCytobands(assembly, block.refName).length;
118
78
  return (React.createElement("div", null,
119
79
  React.createElement(Typography, { style: {
@@ -131,16 +91,28 @@ const OverviewBox = observer(function ({ scale, model, block, overview, }) {
131
91
  width: block.widthPx,
132
92
  borderColor: refNameColor,
133
93
  } },
134
- !canDisplayCytobands
135
- ? tickLabels.map((tickLabel, labelIdx) => (React.createElement(Typography, { key: `${JSON.stringify(block)}-${tickLabel}-${labelIdx}`, className: classes.scalebarLabel, variant: "body2", style: {
136
- left: ((labelIdx + 1) * majorPitch) / scale,
137
- pointerEvents: 'none',
138
- color: refNameColor,
139
- } }, getTickDisplayStr(tickLabel, overview.bpPerPx))))
140
- : null,
94
+ !canDisplayCytobands ? (React.createElement(TickLabels, { model: model, overview: overview, scale: scale, block: block })) : null,
141
95
  canDisplayCytobands ? (React.createElement("svg", { style: { width: '100%' } },
142
96
  React.createElement(Cytobands, { overview: overview, assembly: assembly, block: block }))) : null)));
143
97
  });
98
+ const TickLabels = observer(function ({ block, scale, overview, model, }) {
99
+ const { classes } = useStyles();
100
+ const { start, end, reversed, refName, assemblyName } = block;
101
+ const { majorPitch } = chooseGridPitch(scale, 120, 15);
102
+ const { assemblyManager } = getSession(model);
103
+ const assembly = assemblyManager.get(assemblyName);
104
+ const refNameColor = assembly === null || assembly === void 0 ? void 0 : assembly.getRefNameColor(refName);
105
+ const tickLabels = [];
106
+ for (let i = 0; i < Math.floor((end - start) / majorPitch); i++) {
107
+ const offsetLabel = (i + 1) * majorPitch;
108
+ tickLabels.push(reversed ? end - offsetLabel : start + offsetLabel);
109
+ }
110
+ return tickLabels.map((tickLabel, labelIdx) => (React.createElement(Typography, { key: `${JSON.stringify(block)}-${tickLabel}-${labelIdx}`, className: classes.scalebarLabel, variant: "body2", style: {
111
+ left: ((labelIdx + 1) * majorPitch) / scale,
112
+ pointerEvents: 'none',
113
+ color: refNameColor,
114
+ } }, getTickDisplayStr(tickLabel, overview.bpPerPx))));
115
+ });
144
116
  const Scalebar = observer(function ({ model, scale, overview, }) {
145
117
  const { classes } = useStyles();
146
118
  const theme = useTheme();
@@ -205,9 +177,7 @@ const OverviewScalebar = observer(function ({ model, children, }) {
205
177
  React.createElement(OverviewRubberband, { model: model, overview: overview, ControlComponent: React.createElement(Scalebar, { model: model, overview: overview, scale: scale }) }),
206
178
  React.createElement("div", { className: classes.overview },
207
179
  React.createElement("svg", { height: HEADER_BAR_HEIGHT, className: classes.overviewSvg },
208
- React.createElement(Polygon, { model: model, overview: overview })),
180
+ React.createElement(OverviewScalebarPolygon, { model: model, overview: overview })),
209
181
  children)));
210
182
  });
211
- export { Polygon };
212
- export { default as Cytobands } from './Cytobands';
213
183
  export 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,41 @@
1
+ import React from 'react';
2
+ import { useTheme, alpha } from '@mui/material';
3
+ import { observer } from 'mobx-react';
4
+ // locals
5
+ import { HEADER_BAR_HEIGHT } from '..';
6
+ const OverviewScalebarPolygon = observer(function ({ model, overview, useOffset = true, }) {
7
+ const theme = useTheme();
8
+ const multiplier = Number(useOffset);
9
+ const { interRegionPaddingWidth, offsetPx, dynamicBlocks, cytobandOffset } = model;
10
+ const { contentBlocks, totalWidthPxWithoutBorders } = dynamicBlocks;
11
+ const { tertiary, primary } = theme.palette;
12
+ const polygonColor = tertiary ? tertiary.light : primary.light;
13
+ // catches possible null from at's below
14
+ if (!contentBlocks.length) {
15
+ return null;
16
+ }
17
+ const first = contentBlocks.at(0);
18
+ const last = contentBlocks.at(-1);
19
+ const topLeft = (overview.bpToPx({
20
+ ...first,
21
+ coord: first.reversed ? first.end : first.start,
22
+ }) || 0) +
23
+ cytobandOffset * multiplier;
24
+ const topRight = (overview.bpToPx({
25
+ ...last,
26
+ coord: last.reversed ? last.start : last.end,
27
+ }) || 0) +
28
+ cytobandOffset * multiplier;
29
+ const startPx = Math.max(0, -offsetPx);
30
+ const endPx = startPx +
31
+ totalWidthPxWithoutBorders +
32
+ (contentBlocks.length * interRegionPaddingWidth) / 2;
33
+ const points = [
34
+ [startPx, HEADER_BAR_HEIGHT],
35
+ [endPx, HEADER_BAR_HEIGHT],
36
+ [topRight, 0],
37
+ [topLeft, 0],
38
+ ];
39
+ return (React.createElement("polygon", { points: points.toString(), fill: alpha(polygonColor, 0.3), stroke: alpha(polygonColor, 0.8) }));
40
+ });
41
+ export default OverviewScalebarPolygon;
@@ -10,7 +10,7 @@ function HelpAdornment() {
10
10
  return (React.createElement(React.Fragment, null,
11
11
  React.createElement(IconButton, { onClick: () => setHelpDialogDisplayed(true), size: "small" },
12
12
  React.createElement(HelpIcon, { fontSize: "small" })),
13
- isHelpDialogDisplayed ? (React.createElement(Suspense, { fallback: React.createElement("div", null) },
13
+ isHelpDialogDisplayed ? (React.createElement(Suspense, { fallback: null },
14
14
  React.createElement(HelpDialog, { handleClose: () => setHelpDialogDisplayed(false) }))) : null));
15
15
  }
16
16
  export default function EndAdornment({ showHelp, endAdornment, }) {
@@ -1,4 +1,4 @@
1
- import React, { useEffect, useState } from 'react';
1
+ import React, { useEffect, useMemo, useState } from 'react';
2
2
  import { observer } from 'mobx-react';
3
3
  import { getSession, useDebounce, measureText } from '@jbrowse/core/util';
4
4
  import BaseResult, { RefSequenceResult, } from '@jbrowse/core/TextSearch/BaseResults';
@@ -6,7 +6,6 @@ import { Autocomplete } from '@mui/material';
6
6
  import { getDeduplicatedResult, getFiltered } from './util';
7
7
  import AutocompleteTextField from './AutocompleteTextField';
8
8
  const RefNameAutocomplete = observer(function ({ model, onSelect, assemblyName, style, fetchResults, onChange, value, showHelp = true, minWidth = 200, maxWidth = 550, TextFieldProps = {}, }) {
9
- var _a;
10
9
  const session = getSession(model);
11
10
  const { assemblyManager } = session;
12
11
  const [open, setOpen] = useState(false);
@@ -45,6 +44,14 @@ const RefNameAutocomplete = observer(function ({ model, onSelect, assemblyName,
45
44
  const inputBoxVal = coarseVisibleLocStrings || value || '';
46
45
  // heuristic, text width + 60 accommodates help icon and search icon
47
46
  const width = Math.min(Math.max(measureText(inputBoxVal, 14) + 100, minWidth), maxWidth);
47
+ const regions = assembly === null || assembly === void 0 ? void 0 : assembly.regions;
48
+ const regionOptions = useMemo(() => (regions === null || regions === void 0 ? void 0 : regions.map(option => ({
49
+ result: new RefSequenceResult({
50
+ refName: option.refName,
51
+ label: option.refName,
52
+ matchedAttribute: 'refName',
53
+ }),
54
+ }))) || [], [regions]);
48
55
  // notes on implementation:
49
56
  // The selectOnFocus setting helps highlight the field when clicked
50
57
  return (React.createElement(React.Fragment, null,
@@ -70,14 +77,6 @@ const RefNameAutocomplete = observer(function ({ model, onSelect, assemblyName,
70
77
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(selectedOption.result);
71
78
  }
72
79
  setInputValue(inputBoxVal);
73
- }, options: !(searchOptions === null || searchOptions === void 0 ? void 0 : searchOptions.length)
74
- ? ((_a = assembly === null || assembly === void 0 ? void 0 : assembly.regions) === null || _a === void 0 ? void 0 : _a.map(option => ({
75
- result: new RefSequenceResult({
76
- refName: option.refName,
77
- label: option.refName,
78
- matchedAttribute: 'refName',
79
- }),
80
- }))) || []
81
- : searchOptions, getOptionDisabled: option => option.group === 'limitOption', filterOptions: (opts, { inputValue }) => getFiltered(opts, inputValue), renderInput: params => (React.createElement(AutocompleteTextField, { showHelp: showHelp, params: params, inputBoxVal: inputBoxVal, TextFieldProps: TextFieldProps, setCurrentSearch: setCurrentSearch, setInputValue: setInputValue })), getOptionLabel: opt => typeof opt === 'string' ? opt : opt.result.getDisplayString() })));
80
+ }, options: (searchOptions === null || searchOptions === void 0 ? void 0 : searchOptions.length) ? searchOptions : regionOptions, getOptionDisabled: option => option.group === 'limitOption', filterOptions: (opts, { inputValue }) => getFiltered(opts, inputValue), renderInput: params => (React.createElement(AutocompleteTextField, { showHelp: showHelp, params: params, inputBoxVal: inputBoxVal, TextFieldProps: TextFieldProps, setCurrentSearch: setCurrentSearch, setInputValue: setInputValue })), getOptionLabel: opt => typeof opt === 'string' ? opt : opt.result.getDisplayString() })));
82
81
  });
83
82
  export 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
  */