alignment.js
Version:
A suite of reusable [React](http://reactjs.org/) components for creating a variety of visualizations involving [multiple sequence alignments](https://en.wikipedia.org/wiki/Multiple_sequence_alignment). [View the live demo here](http://alignment.hyphy.org/
67 lines (55 loc) • 2.47 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _react = _interopRequireDefault(require("react"));
var _BaseSVGAlignment = _interopRequireDefault(require("./components/BaseSVGAlignment.js"));
var _SVGSiteAxis = _interopRequireDefault(require("./components/SVGSiteAxis.js"));
var _SequenceAxis = require("./components/SequenceAxis.js");
var _computeLabelWidth = _interopRequireDefault(require("./helpers/computeLabelWidth"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function SVGAlignment(props) {
var sequence_data = props.sequence_data,
label_padding = props.label_padding,
site_size = props.site_size;
if (!sequence_data) {
return /*#__PURE__*/_react["default"].createElement("svg", null);
}
var number_of_sites = sequence_data.number_of_sites,
number_of_sequences = sequence_data.number_of_sequences,
label_width = (0, _computeLabelWidth["default"])(sequence_data, label_padding),
width = label_width + site_size * number_of_sites,
height = props.axis_height + site_size * number_of_sequences;
return /*#__PURE__*/_react["default"].createElement("svg", {
id: "alignment-js-svg",
style: {
width: width,
height: height
}
}, /*#__PURE__*/_react["default"].createElement("rect", {
x: 0,
y: 0,
width: width,
height: height,
fill: "white"
}), /*#__PURE__*/_react["default"].createElement(_SVGSiteAxis["default"], _extends({}, props, {
number_of_sites: number_of_sites,
translateX: label_width,
translateY: props.axis_height
})), /*#__PURE__*/_react["default"].createElement(_SequenceAxis.BaseSequenceAxis, _extends({}, props, {
width: label_width,
translateY: props.axis_height
})), /*#__PURE__*/_react["default"].createElement(_BaseSVGAlignment["default"], _extends({}, props, {
translateX: label_width,
translateY: props.axis_height
})));
}
SVGAlignment.defaultProps = {
label_padding: 10,
site_size: 20,
axis_height: 25
};
var _default = SVGAlignment;
exports["default"] = _default;
;