@jbrowse/plugin-linear-genome-view
Version:
JBrowse 2 linear genome view
48 lines (47 loc) • 3.34 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = SVGHeader;
const jsx_runtime_1 = require("react/jsx-runtime");
const util_1 = require("@jbrowse/core/util");
const Base1DViewModel_1 = __importDefault(require("@jbrowse/core/util/Base1DViewModel"));
const material_1 = require("@mui/material");
const SVGRuler_1 = __importDefault(require("./SVGRuler"));
const SVGScalebar_1 = __importDefault(require("./SVGScalebar"));
const Cytobands_1 = __importDefault(require("../components/Cytobands"));
const OverviewScalebarPolygon_1 = __importDefault(require("../components/OverviewScalebarPolygon"));
const consts_1 = require("../consts");
function SVGHeader({ model, fontSize, cytobandHeight, rulerHeight, }) {
const { width, assemblyNames, showCytobands, displayedRegions } = model;
const { assemblyManager } = (0, util_1.getSession)(model);
const assemblyName = assemblyNames.length > 1 ? '' : assemblyNames[0];
const assembly = assemblyManager.get(assemblyName);
const theme = (0, material_1.useTheme)();
const c = (0, util_1.stripAlpha)(theme.palette.text.primary);
const overview = Base1DViewModel_1.default.create({
displayedRegions: JSON.parse(JSON.stringify(displayedRegions)),
interRegionPaddingWidth: 0,
minimumBlockWidth: model.minimumBlockWidth,
});
const visibleRegions = model.dynamicBlocks.contentBlocks;
if (!visibleRegions.length) {
return null;
}
overview.setVolatileWidth(width);
overview.showAllRegions();
const block = overview.dynamicBlocks.contentBlocks[0];
const first = visibleRegions.at(0);
const last = visibleRegions.at(-1);
const firstOverviewPx = overview.bpToPx({
...first,
coord: first.reversed ? first.end : first.start,
}) || 0;
const lastOverviewPx = overview.bpToPx({
...last,
coord: last.reversed ? last.start : last.end,
}) || 0;
const y = +showCytobands * cytobandHeight;
return ((0, jsx_runtime_1.jsxs)("g", { id: "header", children: [(0, jsx_runtime_1.jsx)("text", { x: 0, y: 0, dominantBaseline: "hanging", fontSize: fontSize, fill: c, children: assemblyName }), showCytobands ? ((0, jsx_runtime_1.jsxs)("g", { transform: `translate(0 ${rulerHeight})`, children: [(0, jsx_runtime_1.jsx)(Cytobands_1.default, { overview: overview, assembly: assembly, block: block }), (0, jsx_runtime_1.jsx)("rect", { stroke: "red", fill: "rgb(255,0,0)", fillOpacity: 0.1, width: Math.max(lastOverviewPx - firstOverviewPx, 0.5), height: consts_1.HEADER_OVERVIEW_HEIGHT - 1, x: firstOverviewPx, y: 0.5 }), (0, jsx_runtime_1.jsx)("g", { transform: `translate(0,${consts_1.HEADER_OVERVIEW_HEIGHT})`, children: (0, jsx_runtime_1.jsx)(OverviewScalebarPolygon_1.default, { overview: overview, model: model, useOffset: false }) })] })) : null, (0, jsx_runtime_1.jsx)("g", { transform: `translate(0 ${fontSize + y})`, children: (0, jsx_runtime_1.jsx)(SVGScalebar_1.default, { model: model, fontSize: fontSize }) }), (0, jsx_runtime_1.jsx)("g", { transform: `translate(0 ${rulerHeight + y})`, children: (0, jsx_runtime_1.jsx)(SVGRuler_1.default, { model: model, fontSize: fontSize }) })] }));
}