@jbrowse/plugin-linear-genome-view 2.6.2 → 2.6.3

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.
@@ -27,6 +27,7 @@ const react_1 = __importStar(require("react"));
27
27
  const mui_1 = require("tss-react/mui");
28
28
  const mobx_react_1 = require("mobx-react");
29
29
  const configuration_1 = require("@jbrowse/core/configuration");
30
+ const ui_1 = require("@jbrowse/core/ui");
30
31
  const useStyles = (0, mui_1.makeStyles)()({
31
32
  // aligns with block boundaries. check for example the breakpoint split view
32
33
  // demo to see if features align if wanting to change things
@@ -63,7 +64,8 @@ exports.default = (0, mobx_react_1.observer)(function TrackRenderingContainer({
63
64
  }, [model.trackRefs, trackId]);
64
65
  return (react_1.default.createElement("div", { className: classes.trackRenderingContainer, style: { height: minimized ? 20 : height }, onScroll: evt => display.setScrollTop(evt.currentTarget.scrollTop), onDragEnter: onDragEnter, "data-testid": `trackRenderingContainer-${model.id}-${trackId}` }, !minimized ? (react_1.default.createElement(react_1.default.Fragment, null,
65
66
  react_1.default.createElement("div", { ref: ref, className: classes.renderingComponentContainer, style: { transform: `scaleX(${model.scaleFactor})` } },
66
- react_1.default.createElement(RenderingComponent, { model: display, onHorizontalScroll: model.horizontalScroll })),
67
+ react_1.default.createElement(react_1.Suspense, { fallback: react_1.default.createElement(ui_1.LoadingEllipses, null) },
68
+ react_1.default.createElement(RenderingComponent, { model: display, onHorizontalScroll: model.horizontalScroll }))),
67
69
  DisplayBlurb ? (react_1.default.createElement("div", { style: {
68
70
  position: 'absolute',
69
71
  left: 0,
@@ -5,8 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const react_1 = __importDefault(require("react"));
7
7
  const material_1 = require("@mui/material");
8
+ const color_1 = __importDefault(require("color"));
8
9
  function SVGBackground({ width, height, shift, }) {
9
10
  const theme = (0, material_1.useTheme)();
10
- return (react_1.default.createElement("rect", { width: width + shift * 2, height: height, fill: theme.palette.background.default }));
11
+ return (react_1.default.createElement("rect", { width: width + shift * 2, height: height, fill: (0, color_1.default)(theme.palette.background.default).hex() }));
11
12
  }
12
13
  exports.default = SVGBackground;
@@ -7,6 +7,7 @@ const react_1 = __importDefault(require("react"));
7
7
  const util_1 = require("@jbrowse/core/util");
8
8
  const Base1DViewModel_1 = __importDefault(require("@jbrowse/core/util/Base1DViewModel"));
9
9
  const material_1 = require("@mui/material");
10
+ const color_1 = __importDefault(require("color"));
10
11
  // locals
11
12
  const __1 = require("..");
12
13
  const Cytobands_1 = __importDefault(require("../components/Cytobands"));
@@ -19,6 +20,7 @@ function SVGHeader({ model, fontSize, cytobandHeight, rulerHeight, }) {
19
20
  const assemblyName = assemblyNames.length > 1 ? '' : assemblyNames[0];
20
21
  const assembly = assemblyManager.get(assemblyName);
21
22
  const theme = (0, material_1.useTheme)();
23
+ const c = (0, color_1.default)(theme.palette.text.primary).hex();
22
24
  const overview = Base1DViewModel_1.default.create({
23
25
  displayedRegions: JSON.parse(JSON.stringify(displayedRegions)),
24
26
  interRegionPaddingWidth: 0,
@@ -43,17 +45,17 @@ function SVGHeader({ model, fontSize, cytobandHeight, rulerHeight, }) {
43
45
  ...last,
44
46
  coord: last.reversed ? last.start : last.end,
45
47
  }) || 0;
46
- const c = +showCytobands * cytobandHeight;
48
+ const y = +showCytobands * cytobandHeight;
47
49
  return (react_1.default.createElement("g", { id: "header" },
48
- react_1.default.createElement("text", { x: 0, y: fontSize, fontSize: fontSize, fill: theme.palette.text.primary }, assemblyName),
50
+ react_1.default.createElement("text", { x: 0, y: 0, dominantBaseline: "hanging", fontSize: fontSize, fill: c }, assemblyName),
49
51
  showCytobands ? (react_1.default.createElement("g", { transform: `translate(0 ${rulerHeight})` },
50
52
  react_1.default.createElement(Cytobands_1.default, { overview: overview, assembly: assembly, block: block }),
51
53
  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 }),
52
54
  react_1.default.createElement("g", { transform: `translate(0,${__1.HEADER_OVERVIEW_HEIGHT})` },
53
55
  react_1.default.createElement(OverviewScalebar_1.Polygon, { overview: overview, model: model, useOffset: false })))) : null,
54
- react_1.default.createElement("g", { transform: `translate(0 ${fontSize + c})` },
56
+ react_1.default.createElement("g", { transform: `translate(0 ${fontSize + y})` },
55
57
  react_1.default.createElement(SVGScalebar_1.default, { model: model, fontSize: fontSize })),
56
- react_1.default.createElement("g", { transform: `translate(0 ${rulerHeight + c})` },
58
+ react_1.default.createElement("g", { transform: `translate(0 ${rulerHeight + y})` },
57
59
  react_1.default.createElement(SVGRuler_1.default, { model: model, fontSize: fontSize }))));
58
60
  }
59
61
  exports.default = SVGHeader;
@@ -9,20 +9,22 @@ const material_1 = require("@mui/material");
9
9
  // locals
10
10
  const util_2 = require("../util");
11
11
  const SVGRegionSeparators_1 = __importDefault(require("./SVGRegionSeparators"));
12
+ const color_1 = __importDefault(require("color"));
12
13
  function Ruler({ start, end, bpPerPx, reversed = false, major = true, minor = true, hideText = false, }) {
13
14
  const ticks = (0, util_2.makeTicks)(start, end, bpPerPx, major, minor);
14
15
  const theme = (0, material_1.useTheme)();
16
+ const c = (0, color_1.default)(theme.palette.text.secondary).hex();
15
17
  return (react_1.default.createElement(react_1.default.Fragment, null,
16
18
  ticks.map(tick => {
17
19
  const x = (reversed ? end - tick.base : tick.base - start) / bpPerPx;
18
- return (react_1.default.createElement("line", { key: tick.base, x1: x, x2: x, y1: 0, y2: tick.type === 'major' ? 6 : 4, strokeWidth: 1, stroke: theme.palette.text.secondary }));
20
+ return (react_1.default.createElement("line", { key: 'tick-' + tick.base, x1: x, x2: x, y1: 0, y2: tick.type === 'major' ? 6 : 4, strokeWidth: 1, stroke: c }));
19
21
  }),
20
22
  !hideText
21
23
  ? ticks
22
24
  .filter(tick => tick.type === 'major')
23
25
  .map(tick => {
24
26
  const x = (reversed ? end - tick.base : tick.base - start) / bpPerPx;
25
- return (react_1.default.createElement("text", { x: x - 3, y: 7 + 11, key: `label-${tick.base}`, fontSize: 11, fill: theme.palette.text.primary }, (0, util_1.getTickDisplayStr)(tick.base + 1, bpPerPx)));
27
+ return (react_1.default.createElement("text", { key: `label-${tick.base}`, x: x - 3, y: 7 + 11, fontSize: 11, fill: c }, (0, util_1.getTickDisplayStr)(tick.base + 1, bpPerPx)));
26
28
  })
27
29
  : null));
28
30
  }
@@ -30,6 +32,7 @@ function SVGRuler({ model, fontSize, }) {
30
32
  const { dynamicBlocks: { contentBlocks }, offsetPx: viewOffsetPx, bpPerPx, } = model;
31
33
  const renderRuler = contentBlocks.length < 5;
32
34
  const theme = (0, material_1.useTheme)();
35
+ const c = (0, color_1.default)(theme.palette.text.primary).hex();
33
36
  return (react_1.default.createElement(react_1.default.Fragment, null,
34
37
  react_1.default.createElement(SVGRegionSeparators_1.default, { model: model, height: 30 }),
35
38
  contentBlocks.map(block => {
@@ -42,7 +45,7 @@ function SVGRuler({ model, fontSize, }) {
42
45
  react_1.default.createElement("rect", { x: 0, y: 0, width: widthPx, height: 100 }))),
43
46
  react_1.default.createElement("g", { transform: `translate(${offset} 0)` },
44
47
  react_1.default.createElement("g", { clipPath: `url(#${clipid})` },
45
- react_1.default.createElement("text", { x: 4, y: fontSize, fontSize: fontSize, fill: theme.palette.text.primary }, refName),
48
+ react_1.default.createElement("text", { x: 4, y: fontSize, fontSize: fontSize, fill: c }, refName),
46
49
  react_1.default.createElement("g", { transform: "translate(0 20)" },
47
50
  react_1.default.createElement(Ruler, { hideText: !renderRuler, start: start, end: end, bpPerPx: bpPerPx, reversed: reversed }))))));
48
51
  })));
@@ -6,16 +6,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const react_1 = __importDefault(require("react"));
7
7
  const util_1 = require("@jbrowse/core/util");
8
8
  const material_1 = require("@mui/material");
9
+ const color_1 = __importDefault(require("color"));
9
10
  function SVGScalebar({ model, fontSize, }) {
10
11
  const { offsetPx, dynamicBlocks: { totalWidthPxWithoutBorders: totalWidthPx, totalBp }, } = model;
11
12
  const theme = (0, material_1.useTheme)();
12
13
  const displayBp = (0, util_1.getBpDisplayStr)(totalBp);
13
14
  const x0 = Math.max(-offsetPx, 0);
14
15
  const x1 = x0 + totalWidthPx;
16
+ const c = (0, color_1.default)(theme.palette.text.secondary).hex();
17
+ const x = x0 + (x1 - x0) / 2;
18
+ const y = fontSize;
15
19
  return (react_1.default.createElement(react_1.default.Fragment, null,
16
- react_1.default.createElement("line", { x1: x0, x2: x1, y1: 10, y2: 10, stroke: theme.palette.text.secondary }),
17
- react_1.default.createElement("line", { x1: x0, x2: x0, y1: 5, y2: 15, stroke: theme.palette.text.secondary }),
18
- react_1.default.createElement("line", { x1: x1, x2: x1, y1: 5, y2: 15, stroke: theme.palette.text.secondary }),
19
- react_1.default.createElement("text", { x: x0 + (x1 - x0) / 2, y: fontSize * 2, textAnchor: "middle", fontSize: fontSize, fill: theme.palette.text.primary }, displayBp)));
20
+ react_1.default.createElement("line", { x1: x0, x2: x1, y1: 10, y2: 10, stroke: c }),
21
+ react_1.default.createElement("line", { x1: x0, x2: x0, y1: 5, y2: 15, stroke: c }),
22
+ react_1.default.createElement("line", { x1: x1, x2: x1, y1: 5, y2: 15, stroke: c }),
23
+ react_1.default.createElement("text", { x: x, y: y, textAnchor: "middle", dominantBaseline: "hanging", fontSize: fontSize, fill: c }, displayBp)));
20
24
  }
21
25
  exports.default = SVGScalebar;
@@ -1,7 +1,8 @@
1
- import React, { useEffect, useRef } from 'react';
1
+ import React, { Suspense, useEffect, useRef } from 'react';
2
2
  import { makeStyles } from 'tss-react/mui';
3
3
  import { observer } from 'mobx-react';
4
4
  import { getConf } from '@jbrowse/core/configuration';
5
+ import { LoadingEllipses } from '@jbrowse/core/ui';
5
6
  const useStyles = makeStyles()({
6
7
  // aligns with block boundaries. check for example the breakpoint split view
7
8
  // demo to see if features align if wanting to change things
@@ -38,7 +39,8 @@ export default observer(function TrackRenderingContainer({ model, track, onDragE
38
39
  }, [model.trackRefs, trackId]);
39
40
  return (React.createElement("div", { className: classes.trackRenderingContainer, style: { height: minimized ? 20 : height }, onScroll: evt => display.setScrollTop(evt.currentTarget.scrollTop), onDragEnter: onDragEnter, "data-testid": `trackRenderingContainer-${model.id}-${trackId}` }, !minimized ? (React.createElement(React.Fragment, null,
40
41
  React.createElement("div", { ref: ref, className: classes.renderingComponentContainer, style: { transform: `scaleX(${model.scaleFactor})` } },
41
- React.createElement(RenderingComponent, { model: display, onHorizontalScroll: model.horizontalScroll })),
42
+ React.createElement(Suspense, { fallback: React.createElement(LoadingEllipses, null) },
43
+ React.createElement(RenderingComponent, { model: display, onHorizontalScroll: model.horizontalScroll }))),
42
44
  DisplayBlurb ? (React.createElement("div", { style: {
43
45
  position: 'absolute',
44
46
  left: 0,
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import { useTheme } from '@mui/material';
3
+ import Color from 'color';
3
4
  export default function SVGBackground({ width, height, shift, }) {
4
5
  const theme = useTheme();
5
- return (React.createElement("rect", { width: width + shift * 2, height: height, fill: theme.palette.background.default }));
6
+ return (React.createElement("rect", { width: width + shift * 2, height: height, fill: Color(theme.palette.background.default).hex() }));
6
7
  }
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import { getSession } from '@jbrowse/core/util';
3
3
  import Base1DView from '@jbrowse/core/util/Base1DViewModel';
4
4
  import { useTheme } from '@mui/material';
5
+ import Color from 'color';
5
6
  // locals
6
7
  import { HEADER_OVERVIEW_HEIGHT } from '..';
7
8
  import Cytobands from '../components/Cytobands';
@@ -14,6 +15,7 @@ export default function SVGHeader({ model, fontSize, cytobandHeight, rulerHeight
14
15
  const assemblyName = assemblyNames.length > 1 ? '' : assemblyNames[0];
15
16
  const assembly = assemblyManager.get(assemblyName);
16
17
  const theme = useTheme();
18
+ const c = Color(theme.palette.text.primary).hex();
17
19
  const overview = Base1DView.create({
18
20
  displayedRegions: JSON.parse(JSON.stringify(displayedRegions)),
19
21
  interRegionPaddingWidth: 0,
@@ -38,16 +40,16 @@ export default function SVGHeader({ model, fontSize, cytobandHeight, rulerHeight
38
40
  ...last,
39
41
  coord: last.reversed ? last.start : last.end,
40
42
  }) || 0;
41
- const c = +showCytobands * cytobandHeight;
43
+ const y = +showCytobands * cytobandHeight;
42
44
  return (React.createElement("g", { id: "header" },
43
- React.createElement("text", { x: 0, y: fontSize, fontSize: fontSize, fill: theme.palette.text.primary }, assemblyName),
45
+ React.createElement("text", { x: 0, y: 0, dominantBaseline: "hanging", fontSize: fontSize, fill: c }, assemblyName),
44
46
  showCytobands ? (React.createElement("g", { transform: `translate(0 ${rulerHeight})` },
45
47
  React.createElement(Cytobands, { overview: overview, assembly: assembly, block: block }),
46
48
  React.createElement("rect", { stroke: "red", fill: "rgb(255,0,0,0.1)", width: Math.max(lastOverviewPx - firstOverviewPx, 0.5), height: HEADER_OVERVIEW_HEIGHT - 1, x: firstOverviewPx, y: 0.5 }),
47
49
  React.createElement("g", { transform: `translate(0,${HEADER_OVERVIEW_HEIGHT})` },
48
50
  React.createElement(Polygon, { overview: overview, model: model, useOffset: false })))) : null,
49
- React.createElement("g", { transform: `translate(0 ${fontSize + c})` },
51
+ React.createElement("g", { transform: `translate(0 ${fontSize + y})` },
50
52
  React.createElement(SVGScalebar, { model: model, fontSize: fontSize })),
51
- React.createElement("g", { transform: `translate(0 ${rulerHeight + c})` },
53
+ React.createElement("g", { transform: `translate(0 ${rulerHeight + y})` },
52
54
  React.createElement(SVGRuler, { model: model, fontSize: fontSize }))));
53
55
  }
@@ -4,20 +4,22 @@ import { useTheme } from '@mui/material';
4
4
  // locals
5
5
  import { makeTicks } from '../util';
6
6
  import SVGRegionSeparators from './SVGRegionSeparators';
7
+ import Color from 'color';
7
8
  function Ruler({ start, end, bpPerPx, reversed = false, major = true, minor = true, hideText = false, }) {
8
9
  const ticks = makeTicks(start, end, bpPerPx, major, minor);
9
10
  const theme = useTheme();
11
+ const c = Color(theme.palette.text.secondary).hex();
10
12
  return (React.createElement(React.Fragment, null,
11
13
  ticks.map(tick => {
12
14
  const x = (reversed ? end - tick.base : tick.base - start) / bpPerPx;
13
- return (React.createElement("line", { key: tick.base, x1: x, x2: x, y1: 0, y2: tick.type === 'major' ? 6 : 4, strokeWidth: 1, stroke: theme.palette.text.secondary }));
15
+ return (React.createElement("line", { key: 'tick-' + tick.base, x1: x, x2: x, y1: 0, y2: tick.type === 'major' ? 6 : 4, strokeWidth: 1, stroke: c }));
14
16
  }),
15
17
  !hideText
16
18
  ? ticks
17
19
  .filter(tick => tick.type === 'major')
18
20
  .map(tick => {
19
21
  const x = (reversed ? end - tick.base : tick.base - start) / bpPerPx;
20
- return (React.createElement("text", { x: x - 3, y: 7 + 11, key: `label-${tick.base}`, fontSize: 11, fill: theme.palette.text.primary }, getTickDisplayStr(tick.base + 1, bpPerPx)));
22
+ return (React.createElement("text", { key: `label-${tick.base}`, x: x - 3, y: 7 + 11, fontSize: 11, fill: c }, getTickDisplayStr(tick.base + 1, bpPerPx)));
21
23
  })
22
24
  : null));
23
25
  }
@@ -25,6 +27,7 @@ export default function SVGRuler({ model, fontSize, }) {
25
27
  const { dynamicBlocks: { contentBlocks }, offsetPx: viewOffsetPx, bpPerPx, } = model;
26
28
  const renderRuler = contentBlocks.length < 5;
27
29
  const theme = useTheme();
30
+ const c = Color(theme.palette.text.primary).hex();
28
31
  return (React.createElement(React.Fragment, null,
29
32
  React.createElement(SVGRegionSeparators, { model: model, height: 30 }),
30
33
  contentBlocks.map(block => {
@@ -37,7 +40,7 @@ export default function SVGRuler({ model, fontSize, }) {
37
40
  React.createElement("rect", { x: 0, y: 0, width: widthPx, height: 100 }))),
38
41
  React.createElement("g", { transform: `translate(${offset} 0)` },
39
42
  React.createElement("g", { clipPath: `url(#${clipid})` },
40
- React.createElement("text", { x: 4, y: fontSize, fontSize: fontSize, fill: theme.palette.text.primary }, refName),
43
+ React.createElement("text", { x: 4, y: fontSize, fontSize: fontSize, fill: c }, refName),
41
44
  React.createElement("g", { transform: "translate(0 20)" },
42
45
  React.createElement(Ruler, { hideText: !renderRuler, start: start, end: end, bpPerPx: bpPerPx, reversed: reversed }))))));
43
46
  })));
@@ -1,15 +1,19 @@
1
1
  import React from 'react';
2
2
  import { getBpDisplayStr } from '@jbrowse/core/util';
3
3
  import { useTheme } from '@mui/material';
4
+ import Color from 'color';
4
5
  export default function SVGScalebar({ model, fontSize, }) {
5
6
  const { offsetPx, dynamicBlocks: { totalWidthPxWithoutBorders: totalWidthPx, totalBp }, } = model;
6
7
  const theme = useTheme();
7
8
  const displayBp = getBpDisplayStr(totalBp);
8
9
  const x0 = Math.max(-offsetPx, 0);
9
10
  const x1 = x0 + totalWidthPx;
11
+ const c = Color(theme.palette.text.secondary).hex();
12
+ const x = x0 + (x1 - x0) / 2;
13
+ const y = fontSize;
10
14
  return (React.createElement(React.Fragment, null,
11
- React.createElement("line", { x1: x0, x2: x1, y1: 10, y2: 10, stroke: theme.palette.text.secondary }),
12
- React.createElement("line", { x1: x0, x2: x0, y1: 5, y2: 15, stroke: theme.palette.text.secondary }),
13
- React.createElement("line", { x1: x1, x2: x1, y1: 5, y2: 15, stroke: theme.palette.text.secondary }),
14
- React.createElement("text", { x: x0 + (x1 - x0) / 2, y: fontSize * 2, textAnchor: "middle", fontSize: fontSize, fill: theme.palette.text.primary }, displayBp)));
15
+ React.createElement("line", { x1: x0, x2: x1, y1: 10, y2: 10, stroke: c }),
16
+ React.createElement("line", { x1: x0, x2: x0, y1: 5, y2: 15, stroke: c }),
17
+ React.createElement("line", { x1: x1, x2: x1, y1: 5, y2: 15, stroke: c }),
18
+ React.createElement("text", { x: x, y: y, textAnchor: "middle", dominantBaseline: "hanging", fontSize: fontSize, fill: c }, displayBp)));
15
19
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbrowse/plugin-linear-genome-view",
3
- "version": "2.6.2",
3
+ "version": "2.6.3",
4
4
  "description": "JBrowse 2 linear genome view",
5
5
  "keywords": [
6
6
  "jbrowse",
@@ -44,6 +44,7 @@
44
44
  "@types/normalize-wheel": "^1.0.0",
45
45
  "clone": "^2.1.2",
46
46
  "clsx": "^1.0.4",
47
+ "color": "^3.1.3",
47
48
  "copy-to-clipboard": "^3.3.1",
48
49
  "file-saver": "^2.0.0",
49
50
  "material-ui-popup-state": "^5.0.0",
@@ -65,5 +66,5 @@
65
66
  "access": "public"
66
67
  },
67
68
  "module": "esm/index.js",
68
- "gitHead": "bbea587a402d9974acdd804a33f4b77f31a2fd5f"
69
+ "gitHead": "ed402c87efb0904858d602c363bd1757d5742129"
69
70
  }