jbrowse-plugin-msaview 1.0.17 → 1.0.18
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.
- package/CHANGELOG.md +4 -0
- package/dist/jbrowse-plugin-msaview.cjs.development.js +1 -1
- package/dist/jbrowse-plugin-msaview.cjs.production.min.js +1 -1
- package/dist/jbrowse-plugin-msaview.esm.js +1 -1
- package/dist/jbrowse-plugin-msaview.umd.development.js +61 -43
- package/dist/jbrowse-plugin-msaview.umd.development.js.map +1 -1
- package/dist/jbrowse-plugin-msaview.umd.production.min.js +1 -1
- package/dist/jbrowse-plugin-msaview.umd.production.min.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jbrowse-plugin-msaview.umd.production.min.js","sources":["../node_modules/react-msaview/dist/components/ImportForm.js","../node_modules/react-msaview/dist/components/data/seq2.js","../node_modules/@babel/runtime/helpers/interopRequireDefault.js","../node_modules/@babel/runtime/helpers/typeof.js","../node_modules/@babel/runtime/helpers/interopRequireWildcard.js","../node_modules/@material-ui/icons/utils/createSvgIcon.js","../node_modules/normalize-wheel/src/UserAgent_DEPRECATED.js","../node_modules/@material-ui/icons/Assignment.js","../node_modules/react-msaview/dist/components/Rubberband.js","../node_modules/normalize-wheel/src/isEventSupported.js","../node_modules/normalize-wheel/src/ExecutionEnvironment.js","../node_modules/normalize-wheel/src/normalizeWheel.js","../node_modules/quickselect/index.js","../node_modules/rbush/index.js","../node_modules/react-msaview/dist/components/MoreInfoDlg.js","../node_modules/react-msaview/dist/components/TreeCanvas.js","../node_modules/color-name/index.js","../node_modules/simple-swizzle/index.js","../node_modules/simple-swizzle/node_modules/is-arrayish/index.js","../node_modules/color-string/index.js","../node_modules/color-convert/node_modules/color-name/index.js","../node_modules/color-convert/conversions.js","../node_modules/color-convert/route.js","../node_modules/color-convert/index.js","../node_modules/color/index.js","../node_modules/react-msaview/dist/util.js","../node_modules/react-msaview/dist/colorSchemes.js","../node_modules/react-msaview/dist/components/MSACanvas.js","../node_modules/react-msaview/dist/components/Ruler.js","../node_modules/react-msaview/dist/components/TreeRuler.js","../node_modules/react-msaview/dist/components/SettingsDlg.js","../node_modules/react-msaview/dist/components/AboutDlg.js","../node_modules/react-msaview/dist/components/DetailsDlg.js","../node_modules/react-msaview/dist/components/TracklistDlg.js","../node_modules/@material-ui/icons/FolderOpen.js","../node_modules/@material-ui/icons/Settings.js","../node_modules/@material-ui/icons/Help.js","../node_modules/@material-ui/icons/List.js","../node_modules/react-msaview/dist/components/Header.js","../node_modules/@material-ui/icons/ArrowDropDown.js","../node_modules/copy-to-clipboard/index.js","../node_modules/react-msaview/dist/components/TrackInfoDlg.js","../node_modules/toggle-selection/index.js","../node_modules/react-msaview/dist/components/Track.js","../node_modules/@material-ui/icons/Delete.js","../node_modules/react-msaview/dist/components/AnnotationDlg.js","../node_modules/react-msaview/dist/components/ResizeHandles.js","../node_modules/react-msaview/dist/components/MSAView.js","../node_modules/d3-hierarchy/src/cluster.js","../node_modules/d3-hierarchy/src/hierarchy/count.js","../node_modules/d3-hierarchy/src/hierarchy/index.js","../node_modules/d3-hierarchy/src/hierarchy/each.js","../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","../node_modules/d3-hierarchy/src/hierarchy/find.js","../node_modules/d3-hierarchy/src/hierarchy/sum.js","../node_modules/d3-hierarchy/src/hierarchy/sort.js","../node_modules/d3-hierarchy/src/hierarchy/path.js","../node_modules/d3-hierarchy/src/hierarchy/ancestors.js","../node_modules/d3-hierarchy/src/hierarchy/descendants.js","../node_modules/d3-hierarchy/src/hierarchy/leaves.js","../node_modules/d3-hierarchy/src/hierarchy/links.js","../node_modules/d3-hierarchy/src/hierarchy/iterator.js","../node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","../node_modules/@babel/runtime/helpers/objectWithoutProperties.js","../node_modules/shortid/lib/random/random-from-seed.js","../node_modules/shortid/lib/alphabet.js","../node_modules/shortid/lib/build.js","../node_modules/shortid/lib/random/random-byte-browser.js","../node_modules/nanoid/format.browser.js","../node_modules/shortid/lib/generate.js","../node_modules/shortid/lib/is-valid.js","../node_modules/shortid/lib/index.js","../node_modules/@jbrowse/core/util/types/mst.js","../node_modules/@jbrowse/core/pluggableElementTypes/models/BaseViewModel.js","../node_modules/stockholm-js/src/Stockholm.js","../node_modules/clustal-js/dist/util.js","../node_modules/clustal-js/dist/index.js","../node_modules/react-msaview/dist/parsers/ClustalMSA.js","../node_modules/react-msaview/dist/parseNewick.js","../node_modules/react-msaview/dist/parsers/StockholmMSA.js","../node_modules/react-msaview/dist/parsers/FastaMSA.js","../node_modules/react-msaview/dist/components/TextTrack.js","../node_modules/react-msaview/dist/layout.js","../node_modules/react-msaview/dist/components/BoxTrack.js","../node_modules/react-msaview/dist/model.js","../node_modules/d3-array/src/max.js","../node_modules/d3-array/src/ascending.js","../node_modules/@material-ui/icons/GridOn.js","../src/index.ts"],"sourcesContent":["import React, { useState } from 'react';\nimport { Button, Container, Grid, Typography, Link } from '@material-ui/core';\nimport { observer } from 'mobx-react';\nimport { transaction } from 'mobx';\nimport { FileSelector } from '@jbrowse/core/ui';\nimport { smallTree, smallMSA, smallMSAOnly } from './data/seq2';\nvar ListItem = function (_a) {\n var onClick = _a.onClick, model = _a.model, children = _a.children;\n return (React.createElement(\"li\", null,\n React.createElement(Link, { onClick: function (event) {\n model.setError(undefined);\n event.preventDefault();\n onClick();\n }, href: \"#\" },\n React.createElement(Typography, null, children))));\n};\nexport default observer(function (_a) {\n var model = _a.model;\n var _b = useState(), msaFile = _b[0], setMsaFile = _b[1];\n var _c = useState(), treeFile = _c[0], setTreeFile = _c[1];\n var error = model.error;\n return (React.createElement(Container, null,\n React.createElement(\"div\", { style: { width: '50%' } },\n error ? (React.createElement(\"div\", { style: { padding: 20 } },\n React.createElement(Typography, { color: \"error\" },\n \"Error: \", \"\" + error))) : null,\n React.createElement(Typography, null, \"Open an MSA file (stockholm or clustal format) and/or a tree file (newick format).\"),\n React.createElement(Typography, { color: \"error\" }, \"Note: you can open up just an MSA or just a tree, both are not required. Some MSA files e.g. stockholm format have an embedded tree also and this is fine, and opening a separate tree file is not required.\")),\n React.createElement(Grid, { container: true, spacing: 10, justifyContent: \"center\", alignItems: \"center\" },\n React.createElement(Grid, { item: true },\n React.createElement(Typography, null, \"MSA file or URL\"),\n React.createElement(FileSelector, { location: msaFile, setLocation: setMsaFile }),\n React.createElement(Typography, null, \"Tree file or URL\"),\n React.createElement(FileSelector, { location: treeFile, setLocation: setTreeFile })),\n React.createElement(Grid, { item: true },\n React.createElement(Button, { onClick: function () {\n model.setError(undefined);\n if (msaFile) {\n model.setMSAFilehandle(msaFile);\n }\n if (treeFile) {\n model.setTreeFilehandle(treeFile);\n }\n }, variant: \"contained\", color: \"primary\", disabled: !msaFile && !treeFile }, \"Open\")),\n React.createElement(Grid, { item: true },\n React.createElement(Typography, null, \"Examples\"),\n React.createElement(\"ul\", null,\n React.createElement(ListItem, { model: model, onClick: function () {\n model.setTreeFilehandle({\n uri: 'https://jbrowse.org/genomes/newick_trees/sarscov2phylo.pub.ft.nh',\n });\n } }, \"230k COVID-19 samples (tree only)\"),\n React.createElement(ListItem, { model: model, onClick: function () {\n model.setData({ msa: smallMSA, tree: smallTree });\n } }, \"Small protein MSA+tree\"),\n React.createElement(ListItem, { model: model, onClick: function () {\n model.setData({ msa: smallMSAOnly });\n } }, \"Small MSA only\"),\n React.createElement(ListItem, { model: model, onClick: function () {\n model.setMSAFilehandle({\n uri: 'https://ihh.github.io/abrowse/build/pfam-cov2.stock',\n });\n } }, \"PFAM SARS-CoV2 multi-stockholm\"),\n React.createElement(ListItem, { model: model, onClick: function () {\n model.setMSAFilehandle({\n uri: 'https://jbrowse.org/genomes/multiple_sequence_alignments/Lysine.stock',\n });\n } }, \"Lysine stockholm file\"),\n React.createElement(ListItem, { model: model, onClick: function () {\n model.setMSAFilehandle({\n uri: 'https://jbrowse.org/genomes/multiple_sequence_alignments/PF01601_full.txt',\n });\n } }, \"PF01601 stockholm file (SARS-CoV2 spike protein)\"),\n React.createElement(ListItem, { model: model, onClick: function () {\n model.setMSAFilehandle({\n uri: 'https://jbrowse.org/genomes/multiple_sequence_alignments/europe_covid.fa',\n });\n } }, \"Europe COVID full genomes (LR883044.1 and 199 other sequences)\"),\n React.createElement(ListItem, { model: model, onClick: function () {\n transaction(function () {\n model.setMSAFilehandle({\n uri: 'https://jbrowse.org/genomes/multiple_sequence_alignments/rhv_test-only.aligned_with_mafft_auto.fa',\n });\n model.setTreeFilehandle({\n uri: 'https://jbrowse.org/genomes/multiple_sequence_alignments/rhv_test-only.aligned_with_mafft_auto.nh',\n });\n });\n } }, \"MAFFT+VeryFastTree(17.9k samples)\"))))));\n});\n","export var smallMSA = \"CLUSTAL O(1.2.3) multiple sequence alignment\\nUniProt/Swiss-Prot|P26898|IL2RA_SHEEP MEPSLLMWRFFVFIVVPGCVTEACHDDPPSLRNA----------MFKVLRYE----VGTM\\nUniProt/Swiss-Prot|P01590|IL2RA_MOUSE MEPRLLMLGFLSLTIVPSCRAELCLYDPPEVPNA----------TFKALSYK----NGTI\\nUniProt/Swiss-Prot|P41690|IL2RA_FELCA MEPSLLLWGILTFVVVHGHVTELCDENPPDIQHA----------TFKALTYK----TGTM\\nUniProt/Swiss-Prot|P01589|IL2RA_HUMAN MDSYLLMWGLLTFIMVPGCQAELCDDDPPEIPHA----------TFKAMAYK----EGTM\\nUniProt/Swiss-Prot|Q5MNY4|IL2RA_MACMU MDPYLLMWGLLTFITVPGCQAELCDDDPPKITHA----------TFKAVAYK----EGTM\\nUniProt/Swiss-Prot|Q95118|IL2RG_BOVIN -----------------------------------LLMWGLLT-----------------\\nUniProt/Swiss-Prot|P40321|IL2RG_CANFA MLKPPLPLRSLLFLQLSLLGVGLNSTVPMPNGNEDIT------PDFFLTATPSETLSVSS\\nUniProt/Swiss-Prot|P26896|IL2RB_RAT MATVDLSWRLPLYILLLLLATT--------------------------------WVSAAV\\nUniProt/Swiss-Prot|Q8BZM1|GLMN_MOUSE PLPLRSLLFLQLPLLGVGLNP------------------PLPLRSLLFLQLPLLGVGLNP\\nUniProt/Swiss-Prot|P36835|IL2_CAPHI -----------LLGVGLNPKFLTP------------------------------------\\nUniProt/Swiss-Prot|Q7JFM4|IL2_AOTVO MLKPPLPLRSLLFLQLPLLGVGLNPKFLTPSGNEDIGGKPGTGGDFFLTSTPAGTLDVST\\nUniProt/Swiss-Prot|Q29416|IL2_CANFA --------------LFLQLSLLG-------------------------------------\\n\";\nexport var smallMSAOnly = \"CLUSTAL O(1.2.4) multiple sequence alignment\\n\\n\\nsp|P69905|HBA_HUMAN MVLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHFDLSHGSAQVKGHG\\t60\\nsp|P01942|HBA_MOUSE MVLSGEDKSNIKAAWGKIGGHGAEYGAEALERMFASFPTTKTYFPHFDVSHGSAQVKGHG\\t60\\nsp|P13786|HBAZ_CAPHI MSLTRTERTIILSLWSKISTQADVIGTETLERLFSCYPQAKTYFPHFDLHSGSAQLRAHG\\t60\\n * *: ::: : : *.*:. :. *:*:***:* .:* :********: ****::.**\\n\\nsp|P69905|HBA_HUMAN KKVADALTNAVAHVDDMPNALSALSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTP\\t120\\nsp|P01942|HBA_MOUSE KKVADALASAAGHLDDLPGALSALSDLHAHKLRVDPVNFKLLSHCLLVTLASHHPADFTP\\t120\\nsp|P13786|HBAZ_CAPHI SKVVAAVGDAVKSIDNVTSALSKLSELHAYVLRVDPVNFKFLSHCLLVTLASHFPADFTA\\t120\\n .**. *: .*. :*:: .*** **:***: *********:**********:* **:**\\n\\nsp|P69905|HBA_HUMAN AVHASLDKFLASVSTVLTSKYR\\t142\\nsp|P01942|HBA_MOUSE AVHASLDKFLASVSTVLTSKYR\\t142\\nsp|P13786|HBAZ_CAPHI DAHAAWDKFLSIVSGVLTEKYR\\t142\\n .**: ****: ** ***.***\";\nexport var smallTree = '(((UniProt/Swiss-Prot|P26898|IL2RA_SHEEP:0.24036,(UniProt/Swiss-Prot|P41690|IL2RA_FELCA:0.17737,(UniProt/Swiss-Prot|P01589|IL2RA_HUMAN:0.03906,UniProt/Swiss-Prot|Q5MNY4|IL2RA_MACMU:0.03787):0.13033):0.04964):0.02189,UniProt/Swiss-Prot|P01590|IL2RA_MOUSE:0.23072):0.06814,(((UniProt/Swiss-Prot|Q95118|IL2RG_BOVIN:0.09600,UniProt/Swiss-Prot|P40321|IL2RG_CANFA:0.09845):0.25333,UniProt/Swiss-Prot|Q29416|IL2_CANFA:-0.35055):0.10231,(UniProt/Swiss-Prot|P26896|IL2RB_RAT:0.33631,UniProt/Swiss-Prot|Q7JFM4|IL2_AOTVO:-0.33631):0.10166):0.01607,(UniProt/Swiss-Prot|Q8BZM1|GLMN_MOUSE:0.32378,UniProt/Swiss-Prot|P36835|IL2_CAPHI:-0.32378):0.09999)';\n","function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nmodule.exports = _interopRequireDefault;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return typeof obj;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var _typeof = require(\"@babel/runtime/helpers/typeof\")[\"default\"];\n\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\n\nfunction _interopRequireWildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) {\n return obj;\n }\n\n if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") {\n return {\n \"default\": obj\n };\n }\n\n var cache = _getRequireWildcardCache(nodeInterop);\n\n if (cache && cache.has(obj)) {\n return cache.get(obj);\n }\n\n var newObj = {};\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n\n if (desc && (desc.get || desc.set)) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n\n newObj[\"default\"] = obj;\n\n if (cache) {\n cache.set(obj, newObj);\n }\n\n return newObj;\n}\n\nmodule.exports = _interopRequireWildcard;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _utils.createSvgIcon;\n }\n});\n\nvar _utils = require(\"@material-ui/core/utils\");","/**\n * Copyright 2004-present Facebook. All Rights Reserved.\n *\n * @providesModule UserAgent_DEPRECATED\n */\n\n/**\n * Provides entirely client-side User Agent and OS detection. You should prefer\n * the non-deprecated UserAgent module when possible, which exposes our\n * authoritative server-side PHP-based detection to the client.\n *\n * Usage is straightforward:\n *\n * if (UserAgent_DEPRECATED.ie()) {\n * // IE\n * }\n *\n * You can also do version checks:\n *\n * if (UserAgent_DEPRECATED.ie() >= 7) {\n * // IE7 or better\n * }\n *\n * The browser functions will return NaN if the browser does not match, so\n * you can also do version compares the other way:\n *\n * if (UserAgent_DEPRECATED.ie() < 7) {\n * // IE6 or worse\n * }\n *\n * Note that the version is a float and may include a minor version number,\n * so you should always use range operators to perform comparisons, not\n * strict equality.\n *\n * **Note:** You should **strongly** prefer capability detection to browser\n * version detection where it's reasonable:\n *\n * http://www.quirksmode.org/js/support.html\n *\n * Further, we have a large number of mature wrapper functions and classes\n * which abstract away many browser irregularities. Check the documentation,\n * grep for things, or ask on javascript@lists.facebook.com before writing yet\n * another copy of \"event || window.event\".\n *\n */\n\nvar _populated = false;\n\n// Browsers\nvar _ie, _firefox, _opera, _webkit, _chrome;\n\n// Actual IE browser for compatibility mode\nvar _ie_real_version;\n\n// Platforms\nvar _osx, _windows, _linux, _android;\n\n// Architectures\nvar _win64;\n\n// Devices\nvar _iphone, _ipad, _native;\n\nvar _mobile;\n\nfunction _populate() {\n if (_populated) {\n return;\n }\n\n _populated = true;\n\n // To work around buggy JS libraries that can't handle multi-digit\n // version numbers, Opera 10's user agent string claims it's Opera\n // 9, then later includes a Version/X.Y field:\n //\n // Opera/9.80 (foo) Presto/2.2.15 Version/10.10\n var uas = navigator.userAgent;\n var agent = /(?:MSIE.(\\d+\\.\\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\\d+\\.\\d+))|(?:Opera(?:.+Version.|.)(\\d+\\.\\d+))|(?:AppleWebKit.(\\d+(?:\\.\\d+)?))|(?:Trident\\/\\d+\\.\\d+.*rv:(\\d+\\.\\d+))/.exec(uas);\n var os = /(Mac OS X)|(Windows)|(Linux)/.exec(uas);\n\n _iphone = /\\b(iPhone|iP[ao]d)/.exec(uas);\n _ipad = /\\b(iP[ao]d)/.exec(uas);\n _android = /Android/i.exec(uas);\n _native = /FBAN\\/\\w+;/i.exec(uas);\n _mobile = /Mobile/i.exec(uas);\n\n // Note that the IE team blog would have you believe you should be checking\n // for 'Win64; x64'. But MSDN then reveals that you can actually be coming\n // from either x64 or ia64; so ultimately, you should just check for Win64\n // as in indicator of whether you're in 64-bit IE. 32-bit IE on 64-bit\n // Windows will send 'WOW64' instead.\n _win64 = !!(/Win64/.exec(uas));\n\n if (agent) {\n _ie = agent[1] ? parseFloat(agent[1]) : (\n agent[5] ? parseFloat(agent[5]) : NaN);\n // IE compatibility mode\n if (_ie && document && document.documentMode) {\n _ie = document.documentMode;\n }\n // grab the \"true\" ie version from the trident token if available\n var trident = /(?:Trident\\/(\\d+.\\d+))/.exec(uas);\n _ie_real_version = trident ? parseFloat(trident[1]) + 4 : _ie;\n\n _firefox = agent[2] ? parseFloat(agent[2]) : NaN;\n _opera = agent[3] ? parseFloat(agent[3]) : NaN;\n _webkit = agent[4] ? parseFloat(agent[4]) : NaN;\n if (_webkit) {\n // We do not add the regexp to the above test, because it will always\n // match 'safari' only since 'AppleWebKit' appears before 'Chrome' in\n // the userAgent string.\n agent = /(?:Chrome\\/(\\d+\\.\\d+))/.exec(uas);\n _chrome = agent && agent[1] ? parseFloat(agent[1]) : NaN;\n } else {\n _chrome = NaN;\n }\n } else {\n _ie = _firefox = _opera = _chrome = _webkit = NaN;\n }\n\n if (os) {\n if (os[1]) {\n // Detect OS X version. If no version number matches, set _osx to true.\n // Version examples: 10, 10_6_1, 10.7\n // Parses version number as a float, taking only first two sets of\n // digits. If only one set of digits is found, returns just the major\n // version number.\n var ver = /(?:Mac OS X (\\d+(?:[._]\\d+)?))/.exec(uas);\n\n _osx = ver ? parseFloat(ver[1].replace('_', '.')) : true;\n } else {\n _osx = false;\n }\n _windows = !!os[2];\n _linux = !!os[3];\n } else {\n _osx = _windows = _linux = false;\n }\n}\n\nvar UserAgent_DEPRECATED = {\n\n /**\n * Check if the UA is Internet Explorer.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n ie: function() {\n return _populate() || _ie;\n },\n\n /**\n * Check if we're in Internet Explorer compatibility mode.\n *\n * @return bool true if in compatibility mode, false if\n * not compatibility mode or not ie\n */\n ieCompatibilityMode: function() {\n return _populate() || (_ie_real_version > _ie);\n },\n\n\n /**\n * Whether the browser is 64-bit IE. Really, this is kind of weak sauce; we\n * only need this because Skype can't handle 64-bit IE yet. We need to remove\n * this when we don't need it -- tracked by #601957.\n */\n ie64: function() {\n return UserAgent_DEPRECATED.ie() && _win64;\n },\n\n /**\n * Check if the UA is Firefox.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n firefox: function() {\n return _populate() || _firefox;\n },\n\n\n /**\n * Check if the UA is Opera.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n opera: function() {\n return _populate() || _opera;\n },\n\n\n /**\n * Check if the UA is WebKit.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n webkit: function() {\n return _populate() || _webkit;\n },\n\n /**\n * For Push\n * WILL BE REMOVED VERY SOON. Use UserAgent_DEPRECATED.webkit\n */\n safari: function() {\n return UserAgent_DEPRECATED.webkit();\n },\n\n /**\n * Check if the UA is a Chrome browser.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n chrome : function() {\n return _populate() || _chrome;\n },\n\n\n /**\n * Check if the user is running Windows.\n *\n * @return bool `true' if the user's OS is Windows.\n */\n windows: function() {\n return _populate() || _windows;\n },\n\n\n /**\n * Check if the user is running Mac OS X.\n *\n * @return float|bool Returns a float if a version number is detected,\n * otherwise true/false.\n */\n osx: function() {\n return _populate() || _osx;\n },\n\n /**\n * Check if the user is running Linux.\n *\n * @return bool `true' if the user's OS is some flavor of Linux.\n */\n linux: function() {\n return _populate() || _linux;\n },\n\n /**\n * Check if the user is running on an iPhone or iPod platform.\n *\n * @return bool `true' if the user is running some flavor of the\n * iPhone OS.\n */\n iphone: function() {\n return _populate() || _iphone;\n },\n\n mobile: function() {\n return _populate() || (_iphone || _ipad || _android || _mobile);\n },\n\n nativeApp: function() {\n // webviews inside of the native apps\n return _populate() || _native;\n },\n\n android: function() {\n return _populate() || _android;\n },\n\n ipad: function() {\n return _populate() || _ipad;\n }\n};\n\nmodule.exports = UserAgent_DEPRECATED;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm2 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z\"\n}), 'Assignment');\n\nexports.default = _default;","import React, { useRef, useEffect, useState } from 'react';\nimport { observer } from 'mobx-react';\n// material ui\nimport { Popover, Tooltip, Typography, makeStyles, alpha, } from '@material-ui/core';\nimport AssignmentIcon from '@material-ui/icons/Assignment';\n// import { stringify } from '@jbrowse/core/util'\nimport { Menu } from '@jbrowse/core/ui';\nvar useStyles = makeStyles(function (theme) {\n var background = theme.palette.tertiary\n ? alpha(theme.palette.tertiary.main, 0.7)\n : alpha(theme.palette.primary.main, 0.7);\n return {\n rubberband: {\n height: '100%',\n background: background,\n position: 'absolute',\n zIndex: 10,\n textAlign: 'center',\n overflow: 'hidden',\n },\n rubberbandControl: {\n cursor: 'crosshair',\n width: '100%',\n minHeight: 8,\n },\n rubberbandText: {\n color: theme.palette.tertiary\n ? theme.palette.tertiary.contrastText\n : theme.palette.primary.contrastText,\n },\n popover: {\n mouseEvents: 'none',\n cursor: 'crosshair',\n },\n paper: {\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1),\n },\n guide: {\n pointerEvents: 'none',\n height: '100%',\n width: 1,\n position: 'absolute',\n zIndex: 10,\n },\n };\n});\nvar VerticalGuide = observer(function (_a) {\n var model = _a.model, coordX = _a.coordX;\n var treeAreaWidth = model.treeAreaWidth;\n var classes = useStyles();\n return (React.createElement(React.Fragment, null,\n React.createElement(Tooltip, { open: true, placement: \"top\", title: \"\" + (model.pxToBp(coordX) + 1), arrow: true },\n React.createElement(\"div\", { style: {\n left: coordX + treeAreaWidth,\n position: 'absolute',\n height: 1,\n } })),\n React.createElement(\"div\", { className: classes.guide, style: {\n left: coordX + treeAreaWidth,\n background: 'red',\n } })));\n});\nfunction Rubberband(_a) {\n var model = _a.model, _b = _a.ControlComponent, ControlComponent = _b === void 0 ? React.createElement(\"div\", null) : _b;\n var treeAreaWidth = model.treeAreaWidth;\n var _c = useState(), startX = _c[0], setStartX = _c[1];\n var _d = useState(), currentX = _d[0], setCurrentX = _d[1];\n // clientX and clientY used for anchorPosition for menu\n // offsetX used for calculations about width of selection\n var _e = useState(), anchorPosition = _e[0], setAnchorPosition = _e[1];\n var _f = useState(), guideX = _f[0], setGuideX = _f[1];\n var controlsRef = useRef(null);\n var rubberbandRef = useRef(null);\n var classes = useStyles();\n var mouseDragging = startX !== undefined && anchorPosition === undefined;\n useEffect(function () {\n function globalMouseMove(event) {\n if (controlsRef.current && mouseDragging) {\n var relativeX = event.clientX - controlsRef.current.getBoundingClientRect().left;\n setCurrentX(relativeX);\n }\n }\n function globalMouseUp(event) {\n if (startX !== undefined && controlsRef.current) {\n var clientX = event.clientX, clientY = event.clientY;\n var ref = controlsRef.current;\n var offsetX = clientX - ref.getBoundingClientRect().left;\n // as stated above, store both clientX/Y and offsetX for different\n // purposes\n setAnchorPosition({\n offsetX: offsetX,\n clientX: clientX,\n clientY: clientY,\n });\n setGuideX(undefined);\n }\n }\n if (mouseDragging) {\n window.addEventListener('mousemove', globalMouseMove);\n window.addEventListener('mouseup', globalMouseUp);\n return function () {\n window.removeEventListener('mousemove', globalMouseMove);\n window.removeEventListener('mouseup', globalMouseUp);\n };\n }\n return function () { };\n }, [startX, mouseDragging, anchorPosition]);\n useEffect(function () {\n if (!mouseDragging &&\n currentX !== undefined &&\n startX !== undefined &&\n Math.abs(currentX - startX) <= 3) {\n handleClose();\n }\n }, [mouseDragging, currentX, startX, model.colWidth]);\n function mouseDown(event) {\n event.preventDefault();\n event.stopPropagation();\n var relativeX = event.clientX -\n event.target.getBoundingClientRect().left;\n setStartX(relativeX);\n setCurrentX(relativeX);\n }\n function mouseMove(event) {\n var target = event.target;\n setGuideX(event.clientX - target.getBoundingClientRect().left);\n }\n function mouseOut() {\n setGuideX(undefined);\n model.clearAnnotPos();\n }\n function handleClose() {\n setAnchorPosition(undefined);\n setStartX(undefined);\n setCurrentX(undefined);\n }\n //eslint-disable-next-line @typescript-eslint/ban-types\n function handleMenuItemClick(_, callback) {\n callback();\n handleClose();\n }\n if (startX === undefined) {\n return (React.createElement(React.Fragment, null,\n guideX !== undefined ? (React.createElement(VerticalGuide, { model: model, coordX: guideX })) : null,\n React.createElement(\"div\", { \"data-testid\": \"rubberband_controls\", className: classes.rubberbandControl, role: \"presentation\", ref: controlsRef, onMouseDown: mouseDown, onMouseOut: mouseOut, onMouseMove: mouseMove }, ControlComponent)));\n }\n var right = anchorPosition ? anchorPosition.offsetX : currentX || 0;\n var left = right < startX ? right : startX;\n var width = Math.abs(right - startX);\n var leftBpOffset = model.pxToBp(left);\n var rightBpOffset = model.pxToBp(left + width);\n var numOfBpSelected = Math.ceil(width / model.colWidth);\n var menuItems = [\n {\n label: 'Create annotation',\n icon: AssignmentIcon,\n onClick: function () {\n model.setOffsets(leftBpOffset, rightBpOffset);\n handleClose();\n },\n },\n ];\n return (React.createElement(React.Fragment, null,\n rubberbandRef.current ? (React.createElement(React.Fragment, null,\n React.createElement(Popover, { className: classes.popover, classes: {\n paper: classes.paper,\n }, open: true, anchorEl: rubberbandRef.current, anchorOrigin: {\n vertical: 'top',\n horizontal: 'left',\n }, transformOrigin: {\n vertical: 'bottom',\n horizontal: 'right',\n }, keepMounted: true, disableRestoreFocus: true },\n React.createElement(Typography, null, leftBpOffset + 1)),\n React.createElement(Popover, { className: classes.popover, classes: {\n paper: classes.paper,\n }, open: true, anchorEl: rubberbandRef.current, anchorOrigin: {\n vertical: 'top',\n horizontal: 'right',\n }, transformOrigin: {\n vertical: 'bottom',\n horizontal: 'left',\n }, keepMounted: true, disableRestoreFocus: true },\n React.createElement(Typography, null, rightBpOffset + 1)))) : null,\n React.createElement(\"div\", { ref: rubberbandRef, className: classes.rubberband, style: { left: left + treeAreaWidth, width: width } },\n React.createElement(Typography, { variant: \"h6\", className: classes.rubberbandText },\n numOfBpSelected.toLocaleString('en-US'),\n \" bp\")),\n React.createElement(\"div\", { \"data-testid\": \"rubberband_controls\", className: classes.rubberbandControl, role: \"presentation\", ref: controlsRef, onMouseDown: mouseDown, onMouseOut: mouseOut, onMouseMove: mouseMove }, ControlComponent),\n anchorPosition ? (React.createElement(Menu, { anchorReference: \"anchorPosition\", anchorPosition: {\n left: anchorPosition.clientX,\n top: anchorPosition.clientY,\n }, onMenuItemClick: handleMenuItemClick, open: Boolean(anchorPosition), onClose: handleClose, menuItems: menuItems })) : null));\n}\nexport default observer(Rubberband);\n","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isEventSupported\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar useHasFeature;\nif (ExecutionEnvironment.canUseDOM) {\n useHasFeature =\n document.implementation &&\n document.implementation.hasFeature &&\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n document.implementation.hasFeature('', '') !== true;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @param {?boolean} capture Check if the capture phase is supported.\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\nfunction isEventSupported(eventNameSuffix, capture) {\n if (!ExecutionEnvironment.canUseDOM ||\n capture && !('addEventListener' in document)) {\n return false;\n }\n\n var eventName = 'on' + eventNameSuffix;\n var isSupported = eventName in document;\n\n if (!isSupported) {\n var element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n }\n\n return isSupported;\n}\n\nmodule.exports = isEventSupported;\n","/**\n * Copyright (c) 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ExecutionEnvironment\n */\n\n/*jslint evil: true */\n\n'use strict';\n\nvar canUseDOM = !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n canUseDOM: canUseDOM,\n\n canUseWorkers: typeof Worker !== 'undefined',\n\n canUseEventListeners:\n canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n canUseViewport: canUseDOM && !!window.screen,\n\n isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n","/**\n * Copyright (c) 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule normalizeWheel\n * @typechecks\n */\n\n'use strict';\n\nvar UserAgent_DEPRECATED = require('./UserAgent_DEPRECATED');\n\nvar isEventSupported = require('./isEventSupported');\n\n\n// Reasonable defaults\nvar PIXEL_STEP = 10;\nvar LINE_HEIGHT = 40;\nvar PAGE_HEIGHT = 800;\n\n/**\n * Mouse wheel (and 2-finger trackpad) support on the web sucks. It is\n * complicated, thus this doc is long and (hopefully) detailed enough to answer\n * your questions.\n *\n * If you need to react to the mouse wheel in a predictable way, this code is\n * like your bestest friend. * hugs *\n *\n * As of today, there are 4 DOM event types you can listen to:\n *\n * 'wheel' -- Chrome(31+), FF(17+), IE(9+)\n * 'mousewheel' -- Chrome, IE(6+), Opera, Safari\n * 'MozMousePixelScroll' -- FF(3.5 only!) (2010-2013) -- don't bother!\n * 'DOMMouseScroll' -- FF(0.9.7+) since 2003\n *\n * So what to do? The is the best:\n *\n * normalizeWheel.getEventType();\n *\n * In your event callback, use this code to get sane interpretation of the\n * deltas. This code will return an object with properties:\n *\n * spinX -- normalized spin speed (use for zoom) - x plane\n * spinY -- \" - y plane\n * pixelX -- normalized distance (to pixels) - x plane\n * pixelY -- \" - y plane\n *\n * Wheel values are provided by the browser assuming you are using the wheel to\n * scroll a web page by a number of lines or pixels (or pages). Values can vary\n * significantly on different platforms and browsers, forgetting that you can\n * scroll at different speeds. Some devices (like trackpads) emit more events\n * at smaller increments with fine granularity, and some emit massive jumps with\n * linear speed or acceleration.\n *\n * This code does its best to normalize the deltas for you:\n *\n * - spin is trying to normalize how far the wheel was spun (or trackpad\n * dragged). This is super useful for zoom support where you want to\n * throw away the chunky scroll steps on the PC and make those equal to\n * the slow and smooth tiny steps on the Mac. Key data: This code tries to\n * resolve a single slow step on a wheel to 1.\n *\n * - pixel is normalizing the desired scroll delta in pixel units. You'll\n * get the crazy differences between browsers, but at least it'll be in\n * pixels!\n *\n * - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT. This\n * should translate to positive value zooming IN, negative zooming OUT.\n * This matches the newer 'wheel' event.\n *\n * Why are there spinX, spinY (or pixels)?\n *\n * - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn\n * with a mouse. It results in side-scrolling in the browser by default.\n *\n * - spinY is what you expect -- it's the classic axis of a mouse wheel.\n *\n * - I dropped spinZ/pixelZ. It is supported by the DOM 3 'wheel' event and\n * probably is by browsers in conjunction with fancy 3D controllers .. but\n * you know.\n *\n * Implementation info:\n *\n * Examples of 'wheel' event if you scroll slowly (down) by one step with an\n * average mouse:\n *\n * OS X + Chrome (mouse) - 4 pixel delta (wheelDelta -120)\n * OS X + Safari (mouse) - N/A pixel delta (wheelDelta -12)\n * OS X + Firefox (mouse) - 0.1 line delta (wheelDelta N/A)\n * Win8 + Chrome (mouse) - 100 pixel delta (wheelDelta -120)\n * Win8 + Firefox (mouse) - 3 line delta (wheelDelta -120)\n *\n * On the trackpad:\n *\n * OS X + Chrome (trackpad) - 2 pixel delta (wheelDelta -6)\n * OS X + Firefox (trackpad) - 1 pixel delta (wheelDelta N/A)\n *\n * On other/older browsers.. it's more complicated as there can be multiple and\n * also missing delta values.\n *\n * The 'wheel' event is more standard:\n *\n * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents\n *\n * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and\n * deltaX, deltaY and deltaZ. Some browsers provide other values to maintain\n * backward compatibility with older events. Those other values help us\n * better normalize spin speed. Example of what the browsers provide:\n *\n * | event.wheelDelta | event.detail\n * ------------------+------------------+--------------\n * Safari v5/OS X | -120 | 0\n * Safari v5/Win7 | -120 | 0\n * Chrome v17/OS X | -120 | 0\n * Chrome v17/Win7 | -120 | 0\n * IE9/Win7 | -120 | undefined\n * Firefox v4/OS X | undefined | 1\n * Firefox v4/Win7 | undefined | 3\n *\n */\nfunction normalizeWheel(/*object*/ event) /*object*/ {\n var sX = 0, sY = 0, // spinX, spinY\n pX = 0, pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in event) { sY = event.detail; }\n if ('wheelDelta' in event) { sY = -event.wheelDelta / 120; }\n if ('wheelDeltaY' in event) { sY = -event.wheelDeltaY / 120; }\n if ('wheelDeltaX' in event) { sX = -event.wheelDeltaX / 120; }\n\n // side scrolling on FF with DOMMouseScroll\n if ( 'axis' in event && event.axis === event.HORIZONTAL_AXIS ) {\n sX = sY;\n sY = 0;\n }\n\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n\n if ('deltaY' in event) { pY = event.deltaY; }\n if ('deltaX' in event) { pX = event.deltaX; }\n\n if ((pX || pY) && event.deltaMode) {\n if (event.deltaMode == 1) { // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else { // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) { sX = (pX < 1) ? -1 : 1; }\n if (pY && !sY) { sY = (pY < 1) ? -1 : 1; }\n\n return { spinX : sX,\n spinY : sY,\n pixelX : pX,\n pixelY : pY };\n}\n\n\n/**\n * The best combination if you prefer spinX + spinY normalization. It favors\n * the older DOMMouseScroll for Firefox, as FF does not include wheelDelta with\n * 'wheel' event, making spin speed determination impossible.\n */\nnormalizeWheel.getEventType = function() /*string*/ {\n return (UserAgent_DEPRECATED.firefox())\n ? 'DOMMouseScroll'\n : (isEventSupported('wheel'))\n ? 'wheel'\n : 'mousewheel';\n};\n\nmodule.exports = normalizeWheel;\n","\nexport default function quickselect(arr, k, left, right, compare) {\n quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);\n}\n\nfunction quickselectStep(arr, k, left, right, compare) {\n\n while (right > left) {\n if (right - left > 600) {\n var n = right - left + 1;\n var m = k - left + 1;\n var z = Math.log(n);\n var s = 0.5 * Math.exp(2 * z / 3);\n var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselectStep(arr, k, newLeft, newRight, compare);\n }\n\n var t = arr[k];\n var i = left;\n var j = right;\n\n swap(arr, left, k);\n if (compare(arr[right], t) > 0) swap(arr, left, right);\n\n while (i < j) {\n swap(arr, i, j);\n i++;\n j--;\n while (compare(arr[i], t) < 0) i++;\n while (compare(arr[j], t) > 0) j--;\n }\n\n if (compare(arr[left], t) === 0) swap(arr, left, j);\n else {\n j++;\n swap(arr, j, right);\n }\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n}\n\nfunction swap(arr, i, j) {\n var tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\nfunction defaultCompare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n","import quickselect from 'quickselect';\n\nexport default class RBush {\n constructor(maxEntries = 9) {\n // max entries in a node is 9 by default; min node fill is 40% for best performance\n this._maxEntries = Math.max(4, maxEntries);\n this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\n this.clear();\n }\n\n all() {\n return this._all(this.data, []);\n }\n\n search(bbox) {\n let node = this.data;\n const result = [];\n\n if (!intersects(bbox, node)) return result;\n\n const toBBox = this.toBBox;\n const nodesToSearch = [];\n\n while (node) {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const childBBox = node.leaf ? toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf) result.push(child);\n else if (contains(bbox, childBBox)) this._all(child, result);\n else nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return result;\n }\n\n collides(bbox) {\n let node = this.data;\n\n if (!intersects(bbox, node)) return false;\n\n const nodesToSearch = [];\n while (node) {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const childBBox = node.leaf ? this.toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf || contains(bbox, childBBox)) return true;\n nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return false;\n }\n\n load(data) {\n if (!(data && data.length)) return this;\n\n if (data.length < this._minEntries) {\n for (let i = 0; i < data.length; i++) {\n this.insert(data[i]);\n }\n return this;\n }\n\n // recursively build the tree with the given data from scratch using OMT algorithm\n let node = this._build(data.slice(), 0, data.length - 1, 0);\n\n if (!this.data.children.length) {\n // save as is if tree is empty\n this.data = node;\n\n } else if (this.data.height === node.height) {\n // split root if trees have the same height\n this._splitRoot(this.data, node);\n\n } else {\n if (this.data.height < node.height) {\n // swap trees if inserted one is bigger\n const tmpNode = this.data;\n this.data = node;\n node = tmpNode;\n }\n\n // insert the small tree into the large tree at appropriate level\n this._insert(node, this.data.height - node.height - 1, true);\n }\n\n return this;\n }\n\n insert(item) {\n if (item) this._insert(item, this.data.height - 1);\n return this;\n }\n\n clear() {\n this.data = createNode([]);\n return this;\n }\n\n remove(item, equalsFn) {\n if (!item) return this;\n\n let node = this.data;\n const bbox = this.toBBox(item);\n const path = [];\n const indexes = [];\n let i, parent, goingUp;\n\n // depth-first iterative tree traversal\n while (node || path.length) {\n\n if (!node) { // go up\n node = path.pop();\n parent = path[path.length - 1];\n i = indexes.pop();\n goingUp = true;\n }\n\n if (node.leaf) { // check current node\n const index = findItem(item, node.children, equalsFn);\n\n if (index !== -1) {\n // item found, remove the item and condense tree upwards\n node.children.splice(index, 1);\n path.push(node);\n this._condense(path);\n return this;\n }\n }\n\n if (!goingUp && !node.leaf && contains(node, bbox)) { // go down\n path.push(node);\n indexes.push(i);\n i = 0;\n parent = node;\n node = node.children[0];\n\n } else if (parent) { // go right\n i++;\n node = parent.children[i];\n goingUp = false;\n\n } else node = null; // nothing found\n }\n\n return this;\n }\n\n toBBox(item) { return item; }\n\n compareMinX(a, b) { return a.minX - b.minX; }\n compareMinY(a, b) { return a.minY - b.minY; }\n\n toJSON() { return this.data; }\n\n fromJSON(data) {\n this.data = data;\n return this;\n }\n\n _all(node, result) {\n const nodesToSearch = [];\n while (node) {\n if (node.leaf) result.push(...node.children);\n else nodesToSearch.push(...node.children);\n\n node = nodesToSearch.pop();\n }\n return result;\n }\n\n _build(items, left, right, height) {\n\n const N = right - left + 1;\n let M = this._maxEntries;\n let node;\n\n if (N <= M) {\n // reached leaf level; return leaf\n node = createNode(items.slice(left, right + 1));\n calcBBox(node, this.toBBox);\n return node;\n }\n\n if (!height) {\n // target height of the bulk-loaded tree\n height = Math.ceil(Math.log(N) / Math.log(M));\n\n // target number of root entries to maximize storage utilization\n M = Math.ceil(N / Math.pow(M, height - 1));\n }\n\n node = createNode([]);\n node.leaf = false;\n node.height = height;\n\n // split the items into M mostly square tiles\n\n const N2 = Math.ceil(N / M);\n const N1 = N2 * Math.ceil(Math.sqrt(M));\n\n multiSelect(items, left, right, N1, this.compareMinX);\n\n for (let i = left; i <= right; i += N1) {\n\n const right2 = Math.min(i + N1 - 1, right);\n\n multiSelect(items, i, right2, N2, this.compareMinY);\n\n for (let j = i; j <= right2; j += N2) {\n\n const right3 = Math.min(j + N2 - 1, right2);\n\n // pack each entry recursively\n node.children.push(this._build(items, j, right3, height - 1));\n }\n }\n\n calcBBox(node, this.toBBox);\n\n return node;\n }\n\n _chooseSubtree(bbox, node, level, path) {\n while (true) {\n path.push(node);\n\n if (node.leaf || path.length - 1 === level) break;\n\n let minArea = Infinity;\n let minEnlargement = Infinity;\n let targetNode;\n\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const area = bboxArea(child);\n const enlargement = enlargedArea(bbox, child) - area;\n\n // choose entry with the least area enlargement\n if (enlargement < minEnlargement) {\n minEnlargement = enlargement;\n minArea = area < minArea ? area : minArea;\n targetNode = child;\n\n } else if (enlargement === minEnlargement) {\n // otherwise choose one with the smallest area\n if (area < minArea) {\n minArea = area;\n targetNode = child;\n }\n }\n }\n\n node = targetNode || node.children[0];\n }\n\n return node;\n }\n\n _insert(item, level, isNode) {\n const bbox = isNode ? item : this.toBBox(item);\n const insertPath = [];\n\n // find the best node for accommodating the item, saving all nodes along the path too\n const node = this._chooseSubtree(bbox, this.data, level, insertPath);\n\n // put the item into the node\n node.children.push(item);\n extend(node, bbox);\n\n // split on node overflow; propagate upwards if necessary\n while (level >= 0) {\n if (insertPath[level].children.length > this._maxEntries) {\n this._split(insertPath, level);\n level--;\n } else break;\n }\n\n // adjust bboxes along the insertion path\n this._adjustParentBBoxes(bbox, insertPath, level);\n }\n\n // split overflowed node into two\n _split(insertPath, level) {\n const node = insertPath[level];\n const M = node.children.length;\n const m = this._minEntries;\n\n this._chooseSplitAxis(node, m, M);\n\n const splitIndex = this._chooseSplitIndex(node, m, M);\n\n const newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));\n newNode.height = node.height;\n newNode.leaf = node.leaf;\n\n calcBBox(node, this.toBBox);\n calcBBox(newNode, this.toBBox);\n\n if (level) insertPath[level - 1].children.push(newNode);\n else this._splitRoot(node, newNode);\n }\n\n _splitRoot(node, newNode) {\n // split root node\n this.data = createNode([node, newNode]);\n this.data.height = node.height + 1;\n this.data.leaf = false;\n calcBBox(this.data, this.toBBox);\n }\n\n _chooseSplitIndex(node, m, M) {\n let index;\n let minOverlap = Infinity;\n let minArea = Infinity;\n\n for (let i = m; i <= M - m; i++) {\n const bbox1 = distBBox(node, 0, i, this.toBBox);\n const bbox2 = distBBox(node, i, M, this.toBBox);\n\n const overlap = intersectionArea(bbox1, bbox2);\n const area = bboxArea(bbox1) + bboxArea(bbox2);\n\n // choose distribution with minimum overlap\n if (overlap < minOverlap) {\n minOverlap = overlap;\n index = i;\n\n minArea = area < minArea ? area : minArea;\n\n } else if (overlap === minOverlap) {\n // otherwise choose distribution with minimum area\n if (area < minArea) {\n minArea = area;\n index = i;\n }\n }\n }\n\n return index || M - m;\n }\n\n // sorts node children by the best axis for split\n _chooseSplitAxis(node, m, M) {\n const compareMinX = node.leaf ? this.compareMinX : compareNodeMinX;\n const compareMinY = node.leaf ? this.compareMinY : compareNodeMinY;\n const xMargin = this._allDistMargin(node, m, M, compareMinX);\n const yMargin = this._allDistMargin(node, m, M, compareMinY);\n\n // if total distributions margin value is minimal for x, sort by minX,\n // otherwise it's already sorted by minY\n if (xMargin < yMargin) node.children.sort(compareMinX);\n }\n\n // total margin of all possible split distributions where each node is at least m full\n _allDistMargin(node, m, M, compare) {\n node.children.sort(compare);\n\n const toBBox = this.toBBox;\n const leftBBox = distBBox(node, 0, m, toBBox);\n const rightBBox = distBBox(node, M - m, M, toBBox);\n let margin = bboxMargin(leftBBox) + bboxMargin(rightBBox);\n\n for (let i = m; i < M - m; i++) {\n const child = node.children[i];\n extend(leftBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(leftBBox);\n }\n\n for (let i = M - m - 1; i >= m; i--) {\n const child = node.children[i];\n extend(rightBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(rightBBox);\n }\n\n return margin;\n }\n\n _adjustParentBBoxes(bbox, path, level) {\n // adjust bboxes along the given tree path\n for (let i = level; i >= 0; i--) {\n extend(path[i], bbox);\n }\n }\n\n _condense(path) {\n // go through the path, removing empty nodes and updating bboxes\n for (let i = path.length - 1, siblings; i >= 0; i--) {\n if (path[i].children.length === 0) {\n if (i > 0) {\n siblings = path[i - 1].children;\n siblings.splice(siblings.indexOf(path[i]), 1);\n\n } else this.clear();\n\n } else calcBBox(path[i], this.toBBox);\n }\n }\n}\n\nfunction findItem(item, items, equalsFn) {\n if (!equalsFn) return items.indexOf(item);\n\n for (let i = 0; i < items.length; i++) {\n if (equalsFn(item, items[i])) return i;\n }\n return -1;\n}\n\n// calculate node's bbox from bboxes of its children\nfunction calcBBox(node, toBBox) {\n distBBox(node, 0, node.children.length, toBBox, node);\n}\n\n// min bounding rectangle of node children from k to p-1\nfunction distBBox(node, k, p, toBBox, destNode) {\n if (!destNode) destNode = createNode(null);\n destNode.minX = Infinity;\n destNode.minY = Infinity;\n destNode.maxX = -Infinity;\n destNode.maxY = -Infinity;\n\n for (let i = k; i < p; i++) {\n const child = node.children[i];\n extend(destNode, node.leaf ? toBBox(child) : child);\n }\n\n return destNode;\n}\n\nfunction extend(a, b) {\n a.minX = Math.min(a.minX, b.minX);\n a.minY = Math.min(a.minY, b.minY);\n a.maxX = Math.max(a.maxX, b.maxX);\n a.maxY = Math.max(a.maxY, b.maxY);\n return a;\n}\n\nfunction compareNodeMinX(a, b) { return a.minX - b.minX; }\nfunction compareNodeMinY(a, b) { return a.minY - b.minY; }\n\nfunction bboxArea(a) { return (a.maxX - a.minX) * (a.maxY - a.minY); }\nfunction bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }\n\nfunction enlargedArea(a, b) {\n return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *\n (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));\n}\n\nfunction intersectionArea(a, b) {\n const minX = Math.max(a.minX, b.minX);\n const minY = Math.max(a.minY, b.minY);\n const maxX = Math.min(a.maxX, b.maxX);\n const maxY = Math.min(a.maxY, b.maxY);\n\n return Math.max(0, maxX - minX) *\n Math.max(0, maxY - minY);\n}\n\nfunction contains(a, b) {\n return a.minX <= b.minX &&\n a.minY <= b.minY &&\n b.maxX <= a.maxX &&\n b.maxY <= a.maxY;\n}\n\nfunction intersects(a, b) {\n return b.minX <= a.maxX &&\n b.minY <= a.maxY &&\n b.maxX >= a.minX &&\n b.maxY >= a.minY;\n}\n\nfunction createNode(children) {\n return {\n children,\n height: 1,\n leaf: true,\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity\n };\n}\n\n// sort an array so that items come in groups of n unsorted items, with groups sorted between each other;\n// combines selection algorithm with binary divide & conquer approach\n\nfunction multiSelect(arr, left, right, n, compare) {\n const stack = [left, right];\n\n while (stack.length) {\n right = stack.pop();\n left = stack.pop();\n\n if (right - left <= n) continue;\n\n const mid = left + Math.ceil((right - left) / n / 2) * n;\n quickselect(arr, mid, left, right, compare);\n\n stack.push(left, mid, mid, right);\n }\n}\n","import React from 'react';\nimport { Dialog, DialogTitle, DialogContent } from '@material-ui/core';\nimport { observer } from 'mobx-react';\nimport { Attributes } from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail';\nexport default observer(function (_a) {\n var info = _a.info, onClose = _a.onClose;\n return (React.createElement(Dialog, { onClose: function () { return onClose(); }, open: true },\n React.createElement(DialogTitle, null, \"Metadata\"),\n React.createElement(DialogContent, null,\n React.createElement(Attributes, { attributes: info }))));\n});\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Menu, MenuItem } from '@material-ui/core';\nimport normalizeWheel from 'normalize-wheel';\nimport { observer } from 'mobx-react';\nimport RBush from 'rbush';\nimport MoreInfoDlg from './MoreInfoDlg';\nvar extendBounds = 5;\nvar radius = 3.5;\nvar d = radius * 2;\nvar padding = 600;\nvar TreeMenu = observer(function (_a) {\n var _b, _c;\n var node = _a.node, onClose = _a.onClose, model = _a.model;\n var structures = model.structures;\n var nodeDetails = node ? model.getRowDetails(node.name) : undefined;\n return (React.createElement(React.Fragment, null,\n React.createElement(Menu, { anchorReference: \"anchorPosition\", anchorPosition: {\n top: node.y,\n left: node.x,\n }, transitionDuration: 0, keepMounted: true, open: Boolean(node), onClose: onClose },\n React.createElement(MenuItem, { dense: true, disabled: true }, node.name),\n React.createElement(MenuItem, { dense: true, onClick: function () {\n model.setDialogComponent(MoreInfoDlg, {\n info: model.getRowDetails(node.name),\n });\n onClose();\n } }, \"More info...\"), (_b = structures[node.name]) === null || _b === void 0 ? void 0 :\n _b.map(function (entry) {\n return !model.selectedStructures.find(function (n) { return n.id === node.name; }) ? (React.createElement(MenuItem, { key: JSON.stringify(entry), dense: true, onClick: function () {\n model.addStructureToSelection({\n structure: entry,\n id: node.name,\n });\n onClose();\n } },\n \"Add PDB to selection (\",\n entry.pdb,\n \")\")) : (React.createElement(MenuItem, { key: JSON.stringify(entry), dense: true, onClick: function () {\n model.removeStructureFromSelection({\n structure: entry,\n id: node.name,\n });\n onClose();\n } },\n \"Remove PDB from selection (\",\n entry.pdb,\n \")\"));\n }), (_c = nodeDetails.accession) === null || _c === void 0 ? void 0 :\n _c.map(function (accession) { return (React.createElement(MenuItem, { dense: true, key: accession, onClick: function () {\n model.addUniprotTrack({ name: nodeDetails.name, accession: accession });\n onClose();\n } },\n \"Open UniProt track (\",\n accession,\n \")\")); }))));\n});\nvar TreeBranchMenu = observer(function (_a) {\n var node = _a.node, model = _a.model, onClose = _a.onClose;\n return (React.createElement(Menu, { anchorReference: \"anchorPosition\", anchorPosition: {\n left: node.x,\n top: node.y,\n }, transitionDuration: 0, keepMounted: true, open: Boolean(node), onClose: onClose },\n React.createElement(MenuItem, { dense: true, disabled: true }, node.name),\n React.createElement(MenuItem, { dense: true, onClick: function () {\n model.toggleCollapsed(node.id);\n onClose();\n } }, model.collapsed.includes(node.id)\n ? 'Expand this node'\n : 'Collapse this node'),\n React.createElement(MenuItem, { dense: true, onClick: function () {\n model.showOnly === node.id\n ? model.setShowOnly(undefined)\n : model.setShowOnly(node.id);\n onClose();\n } }, model.showOnly === node.id\n ? 'Disable show only this node'\n : 'Show only this node')));\n});\nvar TreeBlock = observer(function (_a) {\n var model = _a.model, offsetY = _a.offsetY;\n var ref = useRef(null);\n var clickMap = useRef(new RBush());\n var mouseoverRef = useRef(null);\n var _b = useState(), branchMenu = _b[0], setBranchMenu = _b[1];\n var _c = useState(), toggleNodeMenu = _c[0], setToggleNodeMenu = _c[1];\n var _d = useState(), hoverElt = _d[0], setHoverElt = _d[1];\n var hierarchy = model.hierarchy, rowHeight = model.rowHeight, scrollY = model.scrollY, treeWidth = model.treeWidth, showBranchLen = model.showBranchLen, collapsed = model.collapsed, margin = model.margin, labelsAlignRight = model.labelsAlignRight, noTree = model.noTree, blockSize = model.blockSize, drawNodeBubbles = model.drawNodeBubbles, drawTree = model.drawTree, treeAreaWidth = model.treeAreaWidth, structures = model.structures, highResScaleFactor = model.highResScaleFactor;\n useEffect(function () {\n clickMap.current.clear();\n if (!ref.current) {\n return;\n }\n var ctx = ref.current.getContext('2d');\n if (!ctx) {\n return;\n }\n ctx.resetTransform();\n ctx.scale(highResScaleFactor, highResScaleFactor);\n ctx.clearRect(0, 0, treeWidth + padding, blockSize);\n ctx.translate(margin.left, -offsetY);\n var font = ctx.font;\n ctx.font = font.replace(/\\d+px/, Math.max(8, rowHeight - 8) + \"px\");\n if (!noTree && drawTree) {\n hierarchy.links().forEach(function (_a) {\n var source = _a.source, target = _a.target;\n var y = showBranchLen ? 'len' : 'y';\n //@ts-ignore\n var _b = source, sy = _b.x, _c = y, sx = _b[_c];\n //@ts-ignore\n var _d = target, ty = _d.x, _e = y, tx = _d[_e];\n var y1 = Math.min(sy, ty);\n var y2 = Math.max(sy, ty);\n //1d line intersection to check if line crosses block at all, this is\n //an optimization that allows us to skip drawing most tree links\n //outside the block\n if (offsetY + blockSize >= y1 && y2 >= offsetY) {\n ctx.beginPath();\n ctx.moveTo(sx, sy);\n ctx.lineTo(sx, ty);\n ctx.lineTo(tx, ty);\n ctx.stroke();\n }\n });\n if (drawNodeBubbles) {\n hierarchy.descendants().forEach(function (node) {\n var val = showBranchLen ? 'len' : 'y';\n var _a = node, \n //@ts-ignore\n y = _a.x, \n //@ts-ignore\n _b = val, \n //@ts-ignore\n x = _a[_b], data = _a.data;\n var _c = data.id, id = _c === void 0 ? '' : _c, _d = data.name, name = _d === void 0 ? '' : _d;\n if (y > offsetY - extendBounds &&\n y < offsetY + blockSize + extendBounds) {\n ctx.strokeStyle = 'black';\n ctx.fillStyle = collapsed.includes(id) ? 'black' : 'white';\n ctx.beginPath();\n ctx.arc(x, y, radius, 0, 2 * Math.PI);\n ctx.fill();\n ctx.stroke();\n clickMap.current.insert({\n minX: x - radius,\n maxX: x - radius + d,\n minY: y - radius,\n maxY: y - radius + d,\n branch: true,\n id: id,\n name: name,\n });\n }\n });\n }\n }\n if (rowHeight >= 10) {\n if (labelsAlignRight) {\n ctx.textAlign = 'right';\n ctx.setLineDash([1, 3]);\n }\n else {\n ctx.textAlign = 'start';\n }\n hierarchy.leaves().forEach(function (node) {\n var \n //@ts-ignore\n y = node.x, \n //@ts-ignore\n x = node.y, _a = node.data, name = _a.name, id = _a.id, \n //@ts-ignore\n len = node.len;\n if (y > offsetY - extendBounds &&\n y < offsetY + blockSize + extendBounds) {\n //note: +rowHeight/4 matches with -rowHeight/4 in msa\n var yp = y + rowHeight / 4;\n var xp = showBranchLen ? len : x;\n var width = ctx.measureText(name).width;\n var height = ctx.measureText('M').width; // use an 'em' for height\n var hasStructure = structures[name];\n ctx.fillStyle = hasStructure ? 'blue' : 'black';\n if (!drawTree && !labelsAlignRight) {\n ctx.fillText(name, 0, yp);\n clickMap.current.insert({\n minX: 0,\n maxX: width,\n minY: yp - height,\n maxY: yp,\n name: name,\n id: id,\n });\n }\n else if (labelsAlignRight) {\n var smallPadding = 2;\n var offset = treeAreaWidth - smallPadding - margin.left;\n if (drawTree && !noTree) {\n var width_1 = ctx.measureText(name).width;\n ctx.moveTo(xp + radius + 2, y);\n ctx.lineTo(offset - smallPadding - width_1, y);\n ctx.stroke();\n }\n ctx.fillText(name, offset, yp);\n clickMap.current.insert({\n minX: treeAreaWidth - margin.left - width,\n maxX: treeAreaWidth - margin.left,\n minY: yp - height,\n maxY: yp,\n name: name,\n id: id,\n });\n }\n else {\n ctx.fillText(name, xp + d, yp);\n clickMap.current.insert({\n minX: xp + d,\n maxX: xp + d + width,\n minY: yp - height,\n maxY: yp,\n name: name,\n id: id,\n });\n }\n }\n });\n ctx.setLineDash([]);\n }\n }, [\n collapsed,\n rowHeight,\n margin.left,\n hierarchy,\n offsetY,\n treeWidth,\n showBranchLen,\n noTree,\n blockSize,\n drawNodeBubbles,\n drawTree,\n labelsAlignRight,\n treeAreaWidth,\n structures,\n ]);\n useEffect(function () {\n var canvas = mouseoverRef.current;\n if (!canvas) {\n return;\n }\n var ctx = canvas.getContext('2d');\n if (!ctx) {\n return;\n }\n ctx.resetTransform();\n ctx.clearRect(0, 0, treeWidth + padding, blockSize);\n ctx.translate(margin.left, -offsetY);\n if (hoverElt) {\n var minX = hoverElt.minX, maxX = hoverElt.maxX, minY = hoverElt.minY, maxY = hoverElt.maxY;\n ctx.fillStyle = 'rgba(0,0,0,0.1)';\n ctx.fillRect(minX, minY, maxX - minX, maxY - minY);\n }\n }, [hoverElt, margin.left, offsetY, blockSize, treeWidth]);\n function hoverBranchClickMap(event) {\n var x = event.nativeEvent.offsetX - margin.left;\n var y = event.nativeEvent.offsetY;\n var entry = clickMap.current.search({\n minX: x,\n maxX: x + 1,\n minY: y + offsetY,\n maxY: y + 1 + offsetY,\n })[0];\n return entry && entry.branch\n ? __assign(__assign({}, entry), { x: event.clientX, y: event.clientY }) : undefined;\n }\n function hoverNameClickMap(event) {\n var x = event.nativeEvent.offsetX - margin.left;\n var y = event.nativeEvent.offsetY;\n var entry = clickMap.current.search({\n minX: x,\n maxX: x + 1,\n minY: y + offsetY,\n maxY: y + 1 + offsetY,\n })[0];\n return entry && !entry.branch\n ? __assign(__assign({}, entry), { x: event.clientX, y: event.clientY }) : undefined;\n }\n return (React.createElement(React.Fragment, null,\n (branchMenu === null || branchMenu === void 0 ? void 0 : branchMenu.id) ? (React.createElement(TreeBranchMenu, { node: branchMenu, model: model, onClose: function () { return setBranchMenu(undefined); } })) : null,\n (toggleNodeMenu === null || toggleNodeMenu === void 0 ? void 0 : toggleNodeMenu.id) ? (React.createElement(TreeMenu, { node: toggleNodeMenu, model: model, onClose: function () { return setToggleNodeMenu(undefined); } })) : null,\n React.createElement(\"canvas\", { width: (treeWidth + padding) * highResScaleFactor, height: blockSize * highResScaleFactor, style: {\n width: treeWidth + padding,\n height: blockSize,\n top: scrollY + offsetY,\n left: 0,\n position: 'absolute',\n }, onMouseMove: function (event) {\n if (!ref.current) {\n return;\n }\n var ret = hoverNameClickMap(event) || hoverBranchClickMap(event);\n if (ret) {\n ref.current.style.cursor = 'pointer';\n }\n else {\n ref.current.style.cursor = 'default';\n }\n setHoverElt(hoverNameClickMap(event));\n }, onClick: function (event) {\n var x = event.clientX, y = event.clientY;\n var data = hoverBranchClickMap(event);\n if (data === null || data === void 0 ? void 0 : data.id) {\n setBranchMenu(__assign(__assign({}, data), { x: x, y: y }));\n }\n var data2 = hoverNameClickMap(event);\n if (data2 === null || data2 === void 0 ? void 0 : data2.id) {\n setToggleNodeMenu(__assign(__assign({}, data2), { x: x, y: y }));\n }\n }, ref: ref }),\n React.createElement(\"canvas\", { style: {\n width: treeWidth + padding,\n height: blockSize,\n top: scrollY + offsetY,\n left: 0,\n position: 'absolute',\n pointerEvents: 'none',\n zIndex: 100,\n }, width: treeWidth + padding, height: blockSize, ref: mouseoverRef })));\n});\nvar TreeCanvas = observer(function (_a) {\n var model = _a.model;\n var ref = useRef(null);\n var scheduled = useRef(false);\n var deltaY = useRef(0);\n var prevY = useRef(0);\n var treeWidth = model.treeWidth, height = model.height, blocksY = model.blocksY;\n var _b = useState(false), mouseDragging = _b[0], setMouseDragging = _b[1];\n useEffect(function () {\n var curr = ref.current;\n if (!curr) {\n return;\n }\n function onWheel(origEvent) {\n var event = normalizeWheel(origEvent);\n deltaY.current += event.pixelY;\n if (!scheduled.current) {\n scheduled.current = true;\n requestAnimationFrame(function () {\n model.doScrollY(-deltaY.current);\n deltaY.current = 0;\n scheduled.current = false;\n });\n }\n origEvent.preventDefault();\n }\n curr.addEventListener('wheel', onWheel);\n return function () {\n curr.removeEventListener('wheel', onWheel);\n };\n }, [model]);\n useEffect(function () {\n var cleanup = function () { };\n function globalMouseMove(event) {\n event.preventDefault();\n var currY = event.clientY;\n var distanceY = currY - prevY.current;\n if (distanceY) {\n // use rAF to make it so multiple event handlers aren't fired per-frame\n // see https://calendar.perfplanet.com/2013/the-runtime-performance-checklist/\n if (!scheduled.current) {\n scheduled.current = true;\n window.requestAnimationFrame(function () {\n model.doScrollY(distanceY);\n scheduled.current = false;\n prevY.current = event.clientY;\n });\n }\n }\n }\n function globalMouseUp() {\n prevY.current = 0;\n if (mouseDragging) {\n setMouseDragging(false);\n }\n }\n if (mouseDragging) {\n window.addEventListener('mousemove', globalMouseMove, true);\n window.addEventListener('mouseup', globalMouseUp, true);\n cleanup = function () {\n window.removeEventListener('mousemove', globalMouseMove, true);\n window.removeEventListener('mouseup', globalMouseUp, true);\n };\n }\n return cleanup;\n }, [model, mouseDragging]);\n function mouseDown(event) {\n // check if clicking a draggable element or a resize handle\n var target = event.target;\n if (target.draggable || target.dataset.resizer) {\n return;\n }\n // otherwise do click and drag scroll\n if (event.button === 0) {\n prevY.current = event.clientY;\n setMouseDragging(true);\n }\n }\n // this local mouseup is used in addition to the global because sometimes\n // the global add/remove are not called in time, resulting in issue #533\n function mouseUp(event) {\n event.preventDefault();\n setMouseDragging(false);\n }\n function mouseLeave(event) {\n event.preventDefault();\n }\n return (React.createElement(\"div\", { ref: ref, onMouseDown: mouseDown, onMouseUp: mouseUp, onMouseLeave: mouseLeave, style: {\n height: height,\n position: 'relative',\n overflow: 'hidden',\n width: treeWidth + padding,\n } }, blocksY.map(function (block) { return (React.createElement(TreeBlock, { key: block, model: model, offsetY: block })); })));\n});\nexport default TreeCanvas;\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","'use strict';\n\nvar isArrayish = require('is-arrayish');\n\nvar concat = Array.prototype.concat;\nvar slice = Array.prototype.slice;\n\nvar swizzle = module.exports = function swizzle(args) {\n\tvar results = [];\n\n\tfor (var i = 0, len = args.length; i < len; i++) {\n\t\tvar arg = args[i];\n\n\t\tif (isArrayish(arg)) {\n\t\t\t// http://jsperf.com/javascript-array-concat-vs-push/98\n\t\t\tresults = concat.call(results, slice.call(arg));\n\t\t} else {\n\t\t\tresults.push(arg);\n\t\t}\n\t}\n\n\treturn results;\n};\n\nswizzle.wrap = function (fn) {\n\treturn function () {\n\t\treturn fn(swizzle(arguments));\n\t};\n};\n","module.exports = function isArrayish(obj) {\n\tif (!obj || typeof obj === 'string') {\n\t\treturn false;\n\t}\n\n\treturn obj instanceof Array || Array.isArray(obj) ||\n\t\t(obj.length >= 0 && (obj.splice instanceof Function ||\n\t\t\t(Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String')));\n};\n","/* MIT license */\nvar colorNames = require('color-name');\nvar swizzle = require('simple-swizzle');\n\nvar reverseNames = {};\n\n// create a list of reverse color names\nfor (var name in colorNames) {\n\tif (colorNames.hasOwnProperty(name)) {\n\t\treverseNames[colorNames[name]] = name;\n\t}\n}\n\nvar cs = module.exports = {\n\tto: {},\n\tget: {}\n};\n\ncs.get = function (string) {\n\tvar prefix = string.substring(0, 3).toLowerCase();\n\tvar val;\n\tvar model;\n\tswitch (prefix) {\n\t\tcase 'hsl':\n\t\t\tval = cs.get.hsl(string);\n\t\t\tmodel = 'hsl';\n\t\t\tbreak;\n\t\tcase 'hwb':\n\t\t\tval = cs.get.hwb(string);\n\t\t\tmodel = 'hwb';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tval = cs.get.rgb(string);\n\t\t\tmodel = 'rgb';\n\t\t\tbreak;\n\t}\n\n\tif (!val) {\n\t\treturn null;\n\t}\n\n\treturn {model: model, value: val};\n};\n\ncs.get.rgb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar abbr = /^#([a-f0-9]{3,4})$/i;\n\tvar hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i;\n\tvar rgba = /^rgba?\\(\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/;\n\tvar per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/;\n\tvar keyword = /(\\D+)/;\n\n\tvar rgb = [0, 0, 0, 1];\n\tvar match;\n\tvar i;\n\tvar hexAlpha;\n\n\tif (match = string.match(hex)) {\n\t\thexAlpha = match[2];\n\t\tmatch = match[1];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\t// https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19\n\t\t\tvar i2 = i * 2;\n\t\t\trgb[i] = parseInt(match.slice(i2, i2 + 2), 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(abbr)) {\n\t\tmatch = match[1];\n\t\thexAlpha = match[3];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i] + match[i], 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(rgba)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i + 1], 0);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\trgb[3] = parseFloat(match[4]);\n\t\t}\n\t} else if (match = string.match(per)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\trgb[3] = parseFloat(match[4]);\n\t\t}\n\t} else if (match = string.match(keyword)) {\n\t\tif (match[1] === 'transparent') {\n\t\t\treturn [0, 0, 0, 0];\n\t\t}\n\n\t\trgb = colorNames[match[1]];\n\n\t\tif (!rgb) {\n\t\t\treturn null;\n\t\t}\n\n\t\trgb[3] = 1;\n\n\t\treturn rgb;\n\t} else {\n\t\treturn null;\n\t}\n\n\tfor (i = 0; i < 3; i++) {\n\t\trgb[i] = clamp(rgb[i], 0, 255);\n\t}\n\trgb[3] = clamp(rgb[3], 0, 1);\n\n\treturn rgb;\n};\n\ncs.get.hsl = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hsl = /^hsla?\\(\\s*([+-]?(?:\\d{0,3}\\.)?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/;\n\tvar match = string.match(hsl);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = (parseFloat(match[1]) + 360) % 360;\n\t\tvar s = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar l = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\n\t\treturn [h, s, l, a];\n\t}\n\n\treturn null;\n};\n\ncs.get.hwb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hwb = /^hwb\\(\\s*([+-]?\\d{0,3}(?:\\.\\d+)?)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/;\n\tvar match = string.match(hwb);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = ((parseFloat(match[1]) % 360) + 360) % 360;\n\t\tvar w = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar b = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\t\treturn [h, w, b, a];\n\t}\n\n\treturn null;\n};\n\ncs.to.hex = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn (\n\t\t'#' +\n\t\thexDouble(rgba[0]) +\n\t\thexDouble(rgba[1]) +\n\t\thexDouble(rgba[2]) +\n\t\t(rgba[3] < 1\n\t\t\t? (hexDouble(Math.round(rgba[3] * 255)))\n\t\t\t: '')\n\t);\n};\n\ncs.to.rgb = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')'\n\t\t: 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')';\n};\n\ncs.to.rgb.percent = function () {\n\tvar rgba = swizzle(arguments);\n\n\tvar r = Math.round(rgba[0] / 255 * 100);\n\tvar g = Math.round(rgba[1] / 255 * 100);\n\tvar b = Math.round(rgba[2] / 255 * 100);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)'\n\t\t: 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')';\n};\n\ncs.to.hsl = function () {\n\tvar hsla = swizzle(arguments);\n\treturn hsla.length < 4 || hsla[3] === 1\n\t\t? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)'\n\t\t: 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')';\n};\n\n// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\ncs.to.hwb = function () {\n\tvar hwba = swizzle(arguments);\n\n\tvar a = '';\n\tif (hwba.length >= 4 && hwba[3] !== 1) {\n\t\ta = ', ' + hwba[3];\n\t}\n\n\treturn 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')';\n};\n\ncs.to.keyword = function (rgb) {\n\treturn reverseNames[rgb.slice(0, 3)];\n};\n\n// helpers\nfunction clamp(num, min, max) {\n\treturn Math.min(Math.max(min, num), max);\n}\n\nfunction hexDouble(num) {\n\tvar str = num.toString(16).toUpperCase();\n\treturn (str.length < 2) ? '0' + str : str;\n}\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","/* MIT license */\nvar cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nvar reverseKeywords = {};\nfor (var key in cssKeywords) {\n\tif (cssKeywords.hasOwnProperty(key)) {\n\t\treverseKeywords[cssKeywords[key]] = key;\n\t}\n}\n\nvar convert = module.exports = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\n// hide .channels and .labels properties\nfor (var model in convert) {\n\tif (convert.hasOwnProperty(model)) {\n\t\tif (!('channels' in convert[model])) {\n\t\t\tthrow new Error('missing channels property: ' + model);\n\t\t}\n\n\t\tif (!('labels' in convert[model])) {\n\t\t\tthrow new Error('missing channel labels property: ' + model);\n\t\t}\n\n\t\tif (convert[model].labels.length !== convert[model].channels) {\n\t\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t\t}\n\n\t\tvar channels = convert[model].channels;\n\t\tvar labels = convert[model].labels;\n\t\tdelete convert[model].channels;\n\t\tdelete convert[model].labels;\n\t\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\t\tObject.defineProperty(convert[model], 'labels', {value: labels});\n\t}\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar min = Math.min(r, g, b);\n\tvar max = Math.max(r, g, b);\n\tvar delta = max - min;\n\tvar h;\n\tvar s;\n\tvar l;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tl = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tvar rdif;\n\tvar gdif;\n\tvar bdif;\n\tvar h;\n\tvar s;\n\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar v = Math.max(r, g, b);\n\tvar diff = v - Math.min(r, g, b);\n\tvar diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = s = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tvar r = rgb[0];\n\tvar g = rgb[1];\n\tvar b = rgb[2];\n\tvar h = convert.rgb.hsl(rgb)[0];\n\tvar w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar c;\n\tvar m;\n\tvar y;\n\tvar k;\n\n\tk = Math.min(1 - r, 1 - g, 1 - b);\n\tc = (1 - r - k) / (1 - k) || 0;\n\tm = (1 - g - k) / (1 - k) || 0;\n\ty = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\n/**\n * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n * */\nfunction comparativeDistance(x, y) {\n\treturn (\n\t\tMath.pow(x[0] - y[0], 2) +\n\t\tMath.pow(x[1] - y[1], 2) +\n\t\tMath.pow(x[2] - y[2], 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tvar reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tvar currentClosestDistance = Infinity;\n\tvar currentClosestKeyword;\n\n\tfor (var keyword in cssKeywords) {\n\t\tif (cssKeywords.hasOwnProperty(keyword)) {\n\t\t\tvar value = cssKeywords[keyword];\n\n\t\t\t// Compute comparative distance\n\t\t\tvar distance = comparativeDistance(rgb, value);\n\n\t\t\t// Check if its less, if so set as closest\n\t\t\tif (distance < currentClosestDistance) {\n\t\t\t\tcurrentClosestDistance = distance;\n\t\t\t\tcurrentClosestKeyword = keyword;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\n\t// assume sRGB\n\tr = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);\n\n\tvar x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tvar y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tvar z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tvar xyz = convert.rgb.xyz(rgb);\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tvar h = hsl[0] / 360;\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar t1;\n\tvar t2;\n\tvar t3;\n\tvar rgb;\n\tvar val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tt1 = 2 * l - t2;\n\n\trgb = [0, 0, 0];\n\tfor (var i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tvar h = hsl[0];\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar smin = s;\n\tvar lmin = Math.max(l, 0.01);\n\tvar sv;\n\tvar v;\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tv = (l + s) / 2;\n\tsv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tvar h = hsv[0] / 60;\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar hi = Math.floor(h) % 6;\n\n\tvar f = h - Math.floor(h);\n\tvar p = 255 * v * (1 - s);\n\tvar q = 255 * v * (1 - (s * f));\n\tvar t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tvar h = hsv[0];\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar vmin = Math.max(v, 0.01);\n\tvar lmin;\n\tvar sl;\n\tvar l;\n\n\tl = (2 - s) * v;\n\tlmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tvar h = hwb[0] / 360;\n\tvar wh = hwb[1] / 100;\n\tvar bl = hwb[2] / 100;\n\tvar ratio = wh + bl;\n\tvar i;\n\tvar v;\n\tvar f;\n\tvar n;\n\n\t// wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\ti = Math.floor(6 * h);\n\tv = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tn = wh + f * (v - wh); // linear interpolation\n\n\tvar r;\n\tvar g;\n\tvar b;\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tvar c = cmyk[0] / 100;\n\tvar m = cmyk[1] / 100;\n\tvar y = cmyk[2] / 100;\n\tvar k = cmyk[3] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = 1 - Math.min(1, c * (1 - k) + k);\n\tg = 1 - Math.min(1, m * (1 - k) + k);\n\tb = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tvar x = xyz[0] / 100;\n\tvar y = xyz[1] / 100;\n\tvar z = xyz[2] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar x;\n\tvar y;\n\tvar z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tvar y2 = Math.pow(y, 3);\n\tvar x2 = Math.pow(x, 3);\n\tvar z2 = Math.pow(z, 3);\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar hr;\n\tvar h;\n\tvar c;\n\n\thr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tc = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tvar l = lch[0];\n\tvar c = lch[1];\n\tvar h = lch[2];\n\tvar a;\n\tvar b;\n\tvar hr;\n\n\thr = h / 360 * 2 * Math.PI;\n\ta = c * Math.cos(hr);\n\tb = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\tvar value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tvar ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\n\t// we use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tvar ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tvar color = args % 10;\n\n\t// handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tvar mult = (~~(args > 50) + 1) * 0.5;\n\tvar r = ((color & 1) * mult) * 255;\n\tvar g = (((color >> 1) & 1) * mult) * 255;\n\tvar b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// handle greyscale\n\tif (args >= 232) {\n\t\tvar c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tvar rem;\n\tvar r = Math.floor(args / 36) / 5 * 255;\n\tvar g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tvar b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tvar integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tvar match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tvar colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(function (char) {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tvar integer = parseInt(colorString, 16);\n\tvar r = (integer >> 16) & 0xFF;\n\tvar g = (integer >> 8) & 0xFF;\n\tvar b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar max = Math.max(Math.max(r, g), b);\n\tvar min = Math.min(Math.min(r, g), b);\n\tvar chroma = (max - min);\n\tvar grayscale;\n\tvar hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma + 4;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar c = 1;\n\tvar f = 0;\n\n\tif (l < 0.5) {\n\t\tc = 2.0 * s * l;\n\t} else {\n\t\tc = 2.0 * s * (1.0 - l);\n\t}\n\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\n\tvar c = s * v;\n\tvar f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tvar h = hcg[0] / 360;\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tvar pure = [0, 0, 0];\n\tvar hi = (h % 1) * 6;\n\tvar v = hi % 1;\n\tvar w = 1 - v;\n\tvar mg = 0;\n\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar v = c + g * (1.0 - c);\n\tvar f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar l = g * (1.0 - c) + 0.5 * c;\n\tvar s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\tvar v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tvar w = hwb[1] / 100;\n\tvar b = hwb[2] / 100;\n\tvar v = 1 - b;\n\tvar c = v - w;\n\tvar g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = convert.gray.hsv = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tvar val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tvar integer = (val << 16) + (val << 8) + val;\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tvar val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n","var conversions = require('./conversions');\n\n/*\n\tthis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tvar graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tvar models = Object.keys(conversions);\n\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tvar graph = buildGraph();\n\tvar queue = [fromModel]; // unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tvar current = queue.pop();\n\t\tvar adjacents = Object.keys(conversions[current]);\n\n\t\tfor (var len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tvar adjacent = adjacents[i];\n\t\t\tvar node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tvar path = [graph[toModel].parent, toModel];\n\tvar fn = conversions[graph[toModel].parent][toModel];\n\n\tvar cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tvar graph = deriveBFS(fromModel);\n\tvar conversion = {};\n\n\tvar models = Object.keys(graph);\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tvar toModel = models[i];\n\t\tvar node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// no possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n","var conversions = require('./conversions');\nvar route = require('./route');\n\nvar convert = {};\n\nvar models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\tvar result = fn(args);\n\n\t\t// we're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (var len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(function (fromModel) {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tvar routes = route(fromModel);\n\tvar routeModels = Object.keys(routes);\n\n\trouteModels.forEach(function (toModel) {\n\t\tvar fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n","'use strict';\n\nvar colorString = require('color-string');\nvar convert = require('color-convert');\n\nvar _slice = [].slice;\n\nvar skippedModels = [\n\t// to be honest, I don't really feel like keyword belongs in color convert, but eh.\n\t'keyword',\n\n\t// gray conflicts with some method names, and has its own method defined.\n\t'gray',\n\n\t// shouldn't really be in color-convert either...\n\t'hex'\n];\n\nvar hashedModelKeys = {};\nObject.keys(convert).forEach(function (model) {\n\thashedModelKeys[_slice.call(convert[model].labels).sort().join('')] = model;\n});\n\nvar limiters = {};\n\nfunction Color(obj, model) {\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(obj, model);\n\t}\n\n\tif (model && model in skippedModels) {\n\t\tmodel = null;\n\t}\n\n\tif (model && !(model in convert)) {\n\t\tthrow new Error('Unknown model: ' + model);\n\t}\n\n\tvar i;\n\tvar channels;\n\n\tif (obj == null) { // eslint-disable-line no-eq-null,eqeqeq\n\t\tthis.model = 'rgb';\n\t\tthis.color = [0, 0, 0];\n\t\tthis.valpha = 1;\n\t} else if (obj instanceof Color) {\n\t\tthis.model = obj.model;\n\t\tthis.color = obj.color.slice();\n\t\tthis.valpha = obj.valpha;\n\t} else if (typeof obj === 'string') {\n\t\tvar result = colorString.get(obj);\n\t\tif (result === null) {\n\t\t\tthrow new Error('Unable to parse color from string: ' + obj);\n\t\t}\n\n\t\tthis.model = result.model;\n\t\tchannels = convert[this.model].channels;\n\t\tthis.color = result.value.slice(0, channels);\n\t\tthis.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1;\n\t} else if (obj.length) {\n\t\tthis.model = model || 'rgb';\n\t\tchannels = convert[this.model].channels;\n\t\tvar newArr = _slice.call(obj, 0, channels);\n\t\tthis.color = zeroArray(newArr, channels);\n\t\tthis.valpha = typeof obj[channels] === 'number' ? obj[channels] : 1;\n\t} else if (typeof obj === 'number') {\n\t\t// this is always RGB - can be converted later on.\n\t\tobj &= 0xFFFFFF;\n\t\tthis.model = 'rgb';\n\t\tthis.color = [\n\t\t\t(obj >> 16) & 0xFF,\n\t\t\t(obj >> 8) & 0xFF,\n\t\t\tobj & 0xFF\n\t\t];\n\t\tthis.valpha = 1;\n\t} else {\n\t\tthis.valpha = 1;\n\n\t\tvar keys = Object.keys(obj);\n\t\tif ('alpha' in obj) {\n\t\t\tkeys.splice(keys.indexOf('alpha'), 1);\n\t\t\tthis.valpha = typeof obj.alpha === 'number' ? obj.alpha : 0;\n\t\t}\n\n\t\tvar hashedKeys = keys.sort().join('');\n\t\tif (!(hashedKeys in hashedModelKeys)) {\n\t\t\tthrow new Error('Unable to parse color from object: ' + JSON.stringify(obj));\n\t\t}\n\n\t\tthis.model = hashedModelKeys[hashedKeys];\n\n\t\tvar labels = convert[this.model].labels;\n\t\tvar color = [];\n\t\tfor (i = 0; i < labels.length; i++) {\n\t\t\tcolor.push(obj[labels[i]]);\n\t\t}\n\n\t\tthis.color = zeroArray(color);\n\t}\n\n\t// perform limitations (clamping, etc.)\n\tif (limiters[this.model]) {\n\t\tchannels = convert[this.model].channels;\n\t\tfor (i = 0; i < channels; i++) {\n\t\t\tvar limit = limiters[this.model][i];\n\t\t\tif (limit) {\n\t\t\t\tthis.color[i] = limit(this.color[i]);\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.valpha = Math.max(0, Math.min(1, this.valpha));\n\n\tif (Object.freeze) {\n\t\tObject.freeze(this);\n\t}\n}\n\nColor.prototype = {\n\ttoString: function () {\n\t\treturn this.string();\n\t},\n\n\ttoJSON: function () {\n\t\treturn this[this.model]();\n\t},\n\n\tstring: function (places) {\n\t\tvar self = this.model in colorString.to ? this : this.rgb();\n\t\tself = self.round(typeof places === 'number' ? places : 1);\n\t\tvar args = self.valpha === 1 ? self.color : self.color.concat(this.valpha);\n\t\treturn colorString.to[self.model](args);\n\t},\n\n\tpercentString: function (places) {\n\t\tvar self = this.rgb().round(typeof places === 'number' ? places : 1);\n\t\tvar args = self.valpha === 1 ? self.color : self.color.concat(this.valpha);\n\t\treturn colorString.to.rgb.percent(args);\n\t},\n\n\tarray: function () {\n\t\treturn this.valpha === 1 ? this.color.slice() : this.color.concat(this.valpha);\n\t},\n\n\tobject: function () {\n\t\tvar result = {};\n\t\tvar channels = convert[this.model].channels;\n\t\tvar labels = convert[this.model].labels;\n\n\t\tfor (var i = 0; i < channels; i++) {\n\t\t\tresult[labels[i]] = this.color[i];\n\t\t}\n\n\t\tif (this.valpha !== 1) {\n\t\t\tresult.alpha = this.valpha;\n\t\t}\n\n\t\treturn result;\n\t},\n\n\tunitArray: function () {\n\t\tvar rgb = this.rgb().color;\n\t\trgb[0] /= 255;\n\t\trgb[1] /= 255;\n\t\trgb[2] /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.push(this.valpha);\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tunitObject: function () {\n\t\tvar rgb = this.rgb().object();\n\t\trgb.r /= 255;\n\t\trgb.g /= 255;\n\t\trgb.b /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.alpha = this.valpha;\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tround: function (places) {\n\t\tplaces = Math.max(places || 0, 0);\n\t\treturn new Color(this.color.map(roundToPlace(places)).concat(this.valpha), this.model);\n\t},\n\n\talpha: function (val) {\n\t\tif (arguments.length) {\n\t\t\treturn new Color(this.color.concat(Math.max(0, Math.min(1, val))), this.model);\n\t\t}\n\n\t\treturn this.valpha;\n\t},\n\n\t// rgb\n\tred: getset('rgb', 0, maxfn(255)),\n\tgreen: getset('rgb', 1, maxfn(255)),\n\tblue: getset('rgb', 2, maxfn(255)),\n\n\thue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, function (val) { return ((val % 360) + 360) % 360; }), // eslint-disable-line brace-style\n\n\tsaturationl: getset('hsl', 1, maxfn(100)),\n\tlightness: getset('hsl', 2, maxfn(100)),\n\n\tsaturationv: getset('hsv', 1, maxfn(100)),\n\tvalue: getset('hsv', 2, maxfn(100)),\n\n\tchroma: getset('hcg', 1, maxfn(100)),\n\tgray: getset('hcg', 2, maxfn(100)),\n\n\twhite: getset('hwb', 1, maxfn(100)),\n\twblack: getset('hwb', 2, maxfn(100)),\n\n\tcyan: getset('cmyk', 0, maxfn(100)),\n\tmagenta: getset('cmyk', 1, maxfn(100)),\n\tyellow: getset('cmyk', 2, maxfn(100)),\n\tblack: getset('cmyk', 3, maxfn(100)),\n\n\tx: getset('xyz', 0, maxfn(100)),\n\ty: getset('xyz', 1, maxfn(100)),\n\tz: getset('xyz', 2, maxfn(100)),\n\n\tl: getset('lab', 0, maxfn(100)),\n\ta: getset('lab', 1),\n\tb: getset('lab', 2),\n\n\tkeyword: function (val) {\n\t\tif (arguments.length) {\n\t\t\treturn new Color(val);\n\t\t}\n\n\t\treturn convert[this.model].keyword(this.color);\n\t},\n\n\thex: function (val) {\n\t\tif (arguments.length) {\n\t\t\treturn new Color(val);\n\t\t}\n\n\t\treturn colorString.to.hex(this.rgb().round().color);\n\t},\n\n\trgbNumber: function () {\n\t\tvar rgb = this.rgb().color;\n\t\treturn ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF);\n\t},\n\n\tluminosity: function () {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tvar rgb = this.rgb().color;\n\n\t\tvar lum = [];\n\t\tfor (var i = 0; i < rgb.length; i++) {\n\t\t\tvar chan = rgb[i] / 255;\n\t\t\tlum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4);\n\t\t}\n\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast: function (color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tvar lum1 = this.luminosity();\n\t\tvar lum2 = color2.luminosity();\n\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel: function (color2) {\n\t\tvar contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7.1) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tisDark: function () {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tvar rgb = this.rgb().color;\n\t\tvar yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;\n\t\treturn yiq < 128;\n\t},\n\n\tisLight: function () {\n\t\treturn !this.isDark();\n\t},\n\n\tnegate: function () {\n\t\tvar rgb = this.rgb();\n\t\tfor (var i = 0; i < 3; i++) {\n\t\t\trgb.color[i] = 255 - rgb.color[i];\n\t\t}\n\t\treturn rgb;\n\t},\n\n\tlighten: function (ratio) {\n\t\tvar hsl = this.hsl();\n\t\thsl.color[2] += hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdarken: function (ratio) {\n\t\tvar hsl = this.hsl();\n\t\thsl.color[2] -= hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tsaturate: function (ratio) {\n\t\tvar hsl = this.hsl();\n\t\thsl.color[1] += hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdesaturate: function (ratio) {\n\t\tvar hsl = this.hsl();\n\t\thsl.color[1] -= hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\twhiten: function (ratio) {\n\t\tvar hwb = this.hwb();\n\t\thwb.color[1] += hwb.color[1] * ratio;\n\t\treturn hwb;\n\t},\n\n\tblacken: function (ratio) {\n\t\tvar hwb = this.hwb();\n\t\thwb.color[2] += hwb.color[2] * ratio;\n\t\treturn hwb;\n\t},\n\n\tgrayscale: function () {\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\t\tvar rgb = this.rgb().color;\n\t\tvar val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\treturn Color.rgb(val, val, val);\n\t},\n\n\tfade: function (ratio) {\n\t\treturn this.alpha(this.valpha - (this.valpha * ratio));\n\t},\n\n\topaquer: function (ratio) {\n\t\treturn this.alpha(this.valpha + (this.valpha * ratio));\n\t},\n\n\trotate: function (degrees) {\n\t\tvar hsl = this.hsl();\n\t\tvar hue = hsl.color[0];\n\t\thue = (hue + degrees) % 360;\n\t\thue = hue < 0 ? 360 + hue : hue;\n\t\thsl.color[0] = hue;\n\t\treturn hsl;\n\t},\n\n\tmix: function (mixinColor, weight) {\n\t\t// ported from sass implementation in C\n\t\t// https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t\tif (!mixinColor || !mixinColor.rgb) {\n\t\t\tthrow new Error('Argument to \"mix\" was not a Color instance, but rather an instance of ' + typeof mixinColor);\n\t\t}\n\t\tvar color1 = mixinColor.rgb();\n\t\tvar color2 = this.rgb();\n\t\tvar p = weight === undefined ? 0.5 : weight;\n\n\t\tvar w = 2 * p - 1;\n\t\tvar a = color1.alpha() - color2.alpha();\n\n\t\tvar w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\tvar w2 = 1 - w1;\n\n\t\treturn Color.rgb(\n\t\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\t\tw1 * color1.blue() + w2 * color2.blue(),\n\t\t\t\tcolor1.alpha() * p + color2.alpha() * (1 - p));\n\t}\n};\n\n// model conversion methods and static constructors\nObject.keys(convert).forEach(function (model) {\n\tif (skippedModels.indexOf(model) !== -1) {\n\t\treturn;\n\t}\n\n\tvar channels = convert[model].channels;\n\n\t// conversion methods\n\tColor.prototype[model] = function () {\n\t\tif (this.model === model) {\n\t\t\treturn new Color(this);\n\t\t}\n\n\t\tif (arguments.length) {\n\t\t\treturn new Color(arguments, model);\n\t\t}\n\n\t\tvar newAlpha = typeof arguments[channels] === 'number' ? channels : this.valpha;\n\t\treturn new Color(assertArray(convert[this.model][model].raw(this.color)).concat(newAlpha), model);\n\t};\n\n\t// 'static' construction methods\n\tColor[model] = function (color) {\n\t\tif (typeof color === 'number') {\n\t\t\tcolor = zeroArray(_slice.call(arguments), channels);\n\t\t}\n\t\treturn new Color(color, model);\n\t};\n});\n\nfunction roundTo(num, places) {\n\treturn Number(num.toFixed(places));\n}\n\nfunction roundToPlace(places) {\n\treturn function (num) {\n\t\treturn roundTo(num, places);\n\t};\n}\n\nfunction getset(model, channel, modifier) {\n\tmodel = Array.isArray(model) ? model : [model];\n\n\tmodel.forEach(function (m) {\n\t\t(limiters[m] || (limiters[m] = []))[channel] = modifier;\n\t});\n\n\tmodel = model[0];\n\n\treturn function (val) {\n\t\tvar result;\n\n\t\tif (arguments.length) {\n\t\t\tif (modifier) {\n\t\t\t\tval = modifier(val);\n\t\t\t}\n\n\t\t\tresult = this[model]();\n\t\t\tresult.color[channel] = val;\n\t\t\treturn result;\n\t\t}\n\n\t\tresult = this[model]().color[channel];\n\t\tif (modifier) {\n\t\t\tresult = modifier(result);\n\t\t}\n\n\t\treturn result;\n\t};\n}\n\nfunction maxfn(max) {\n\treturn function (v) {\n\t\treturn Math.max(0, Math.min(max, v));\n\t};\n}\n\nfunction assertArray(val) {\n\treturn Array.isArray(val) ? val : [val];\n}\n\nfunction zeroArray(arr, length) {\n\tfor (var i = 0; i < length; i++) {\n\t\tif (typeof arr[i] !== 'number') {\n\t\t\tarr[i] = 0;\n\t\t}\n\t}\n\n\treturn arr;\n}\n\nmodule.exports = Color;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport Color from 'color';\nexport function transform(obj, cb) {\n return Object.fromEntries(Object.entries(obj).map(cb));\n}\nexport function generateNodeIds(tree, parent, depth) {\n var _a;\n if (parent === void 0) { parent = 'node'; }\n if (depth === void 0) { depth = 0; }\n var id = parent + \"-\" + depth;\n return __assign(__assign({}, tree), { id: id, branchset: ((_a = tree.branchset) === null || _a === void 0 ? void 0 : _a.map(function (b, i) {\n return generateNodeIds(b, id + \"-\" + i, depth + 1);\n })) || [] });\n}\nexport function colorContrast(colorScheme, theme) {\n return transform(colorScheme, function (_a) {\n var letter = _a[0], color = _a[1];\n return [\n letter,\n theme.palette.getContrastText(Color(color).hex()),\n ];\n });\n}\n","import Color from 'color';\nimport { transform } from './util';\nvar colorSchemes = {\n clustal: {\n G: 'orange',\n P: 'orange',\n S: 'orange',\n T: 'orange',\n H: 'red',\n K: 'red',\n R: 'red',\n F: 'blue',\n W: 'blue',\n Y: 'blue',\n I: 'green',\n L: 'green',\n M: 'green',\n V: 'green',\n },\n lesk: {\n G: 'orange',\n A: 'orange',\n S: 'orange',\n T: 'orange',\n C: 'green',\n V: 'green',\n I: 'green',\n L: 'green',\n P: 'green',\n F: 'green',\n Y: 'green',\n M: 'green',\n W: 'green',\n N: 'magenta',\n Q: 'magenta',\n H: 'magenta',\n D: 'red',\n E: 'red',\n K: 'blue',\n R: 'blue',\n },\n maeditor: {\n A: 'lightgreen',\n G: 'lightgreen',\n C: 'green',\n D: 'darkgreen',\n E: 'darkgreen',\n N: 'darkgreen',\n Q: 'darkgreen',\n I: 'blue',\n L: 'blue',\n M: 'blue',\n V: 'blue',\n F: '#c8a2c8',\n W: '#c8a2c8',\n Y: '#c8a2c8',\n H: 'darkblue',\n K: 'orange',\n R: 'orange',\n P: 'pink',\n S: 'red',\n T: 'red',\n },\n percent_identity_dynamic: {},\n //https://github.com/biotite-dev/biotite/blob/8c460972f8ab904312f130dfb80f3efc8c9bd7c5/src/biotite/sequence/graphics/color_schemes/flower.json\n flower: {\n A: '#b18a51',\n C: '#ff5701',\n D: '#01a578',\n E: '#2da0a1',\n F: '#fa559d',\n G: '#b1c23c',\n H: '#0194f9',\n I: '#f27663',\n K: '#7fc3d7',\n L: '#df6e75',\n M: '#fe9daf',\n N: '#0bcec6',\n P: '#4fa32a',\n Q: '#7295ae',\n R: '#83bff1',\n S: '#b4bd9b',\n T: '#d2b576',\n V: '#fd997b',\n W: '#ff2ded',\n Y: '#c96ecf',\n },\n rainbow_dna: {\n A: '#3737f5',\n C: '#37f537',\n G: '#f5f537',\n T: '#f53737',\n U: '#f53737',\n },\n //https://github.com/biotite-dev/biotite/blob/8c460972f8ab904312f130dfb80f3efc8c9bd7c5/src/biotite/sequence/graphics/color_schemes/clustalx_protein.json\n clustalx_protein: {\n A: '#197fe5',\n C: '#e57f7f',\n D: '#cc4ccc',\n E: '#cc4ccc',\n F: '#197fe5',\n G: '#e5994c',\n H: '#19b2b2',\n I: '#197fe5',\n K: '#e53319',\n L: '#197fe5',\n M: '#197fe5',\n N: '#19cc19',\n P: '#cccc00',\n Q: '#19cc19',\n R: '#e53319',\n S: '#19cc19',\n T: '#19cc19',\n V: '#197fe5',\n W: '#197fe5',\n Y: '#19b2b2',\n },\n // this has special handling\n clustalx_protein_dynamic: {},\n clustalx_dna: {\n A: '#e53319',\n C: '#197fe5',\n G: '#e5994c',\n T: '#19cc19',\n U: '#19cc19',\n },\n jalview_buried: {\n A: '#00a35c',\n R: '#00fc03',\n N: '#00eb14',\n D: '#00eb14',\n C: '#0000ff',\n Q: '#00f10e',\n E: '#00f10e',\n G: '#009d62',\n H: '#00d52a',\n I: '#0054ab',\n L: '#007b84',\n K: '#00ff00',\n M: '#009768',\n F: '#008778',\n P: '#00e01f',\n S: '#00d52a',\n T: '#00db24',\n W: '#00a857',\n Y: '#00e619',\n V: '#005fa0',\n B: '#00eb14',\n X: '#00b649',\n Z: '#00f10e',\n },\n jalview_hydrophobicity: {\n A: '#ad0052',\n R: '#0000ff',\n N: '#0c00f3',\n D: '#0c00f3',\n C: '#c2003d',\n Q: '#0c00f3',\n E: '#0c00f3',\n G: '#6a0095',\n H: '#1500ea',\n I: '#ff0000',\n L: '#ea0015',\n K: '#0000ff',\n M: '#b0004f',\n F: '#cb0034',\n P: '#4600b9',\n S: '#5e00a1',\n T: '#61009e',\n W: '#5b00a4',\n Y: '#4f00b0',\n V: '#f60009',\n B: '#0c00f3',\n X: '#680097',\n Z: '#0c00f3',\n },\n jalview_prophelix: {\n A: '#e718e7',\n R: '#6f906f',\n N: '#1be41b',\n D: '#778877',\n C: '#23dc23',\n Q: '#926d92',\n E: '#ff00ff',\n G: '#00ff00',\n H: '#758a75',\n I: '#8a758a',\n L: '#ae51ae',\n K: '#a05fa0',\n M: '#ef10ef',\n F: '#986798',\n P: '#00ff00',\n S: '#36c936',\n T: '#47b847',\n W: '#8a758a',\n Y: '#21de21',\n V: '#857a85',\n B: '#49b649',\n X: '#758a75',\n Z: '#c936c9',\n },\n jalview_propstrand: {\n A: '#5858a7',\n R: '#6b6b94',\n N: '#64649b',\n D: '#2121de',\n C: '#9d9d62',\n Q: '#8c8c73',\n E: '#0000ff',\n G: '#4949b6',\n H: '#60609f',\n I: '#ecec13',\n L: '#b2b24d',\n K: '#4747b8',\n M: '#82827d',\n F: '#c2c23d',\n P: '#2323dc',\n S: '#4949b6',\n T: '#9d9d62',\n W: '#c0c03f',\n Y: '#d3d32c',\n V: '#ffff00',\n B: '#4343bc',\n X: '#797986',\n Z: '#4747b8',\n },\n jalview_propturn: {\n A: '#2cd3d3',\n R: '#708f8f',\n N: '#ff0000',\n D: '#e81717',\n C: '#a85757',\n Q: '#3fc0c0',\n E: '#778888',\n G: '#ff0000',\n H: '#708f8f',\n I: '#00ffff',\n L: '#1ce3e3',\n K: '#7e8181',\n M: '#1ee1e1',\n F: '#1ee1e1',\n P: '#f60909',\n S: '#e11e1e',\n T: '#738c8c',\n W: '#738c8c',\n Y: '#9d6262',\n V: '#07f8f8',\n B: '#f30c0c',\n X: '#7c8383',\n Z: '#5ba4a4',\n },\n jalview_taylor: {\n A: '#ccff00',\n R: '#0000ff',\n N: '#cc00ff',\n D: '#ff0000',\n C: '#ffff00',\n Q: '#ff00cc',\n E: '#ff0066',\n G: '#ff9900',\n H: '#0066ff',\n I: '#66ff00',\n L: '#33ff00',\n K: '#6600ff',\n M: '#00ff00',\n F: '#00ff66',\n P: '#ffcc00',\n S: '#ff3300',\n T: '#ff6600',\n W: '#00ccff',\n Y: '#00ffcc',\n V: '#99ff00',\n },\n jalview_zappo: {\n A: '#ffafaf',\n R: '#6464ff',\n N: '#00ff00',\n D: '#ff0000',\n C: '#ffff00',\n Q: '#00ff00',\n E: '#ff0000',\n G: '#ff00ff',\n H: '#6464ff',\n I: '#ffafaf',\n L: '#ffafaf',\n K: '#6464ff',\n M: '#ffafaf',\n F: '#ffc800',\n P: '#ff00ff',\n S: '#00ff00',\n T: '#00ff00',\n W: '#ffc800',\n Y: '#ffc800',\n V: '#ffafaf',\n },\n cinema: {\n H: 'blue',\n K: 'blue',\n R: 'blue',\n D: 'red',\n E: 'red',\n S: 'green',\n T: 'green',\n N: 'green',\n Q: 'green',\n A: 'white',\n V: 'white',\n L: 'white',\n I: 'white',\n M: 'white',\n F: 'magenta',\n W: 'magenta',\n Y: 'magenta',\n P: 'brown',\n G: 'brown',\n C: 'yellow',\n B: 'gray',\n Z: 'gray',\n X: 'gray',\n '-': 'gray',\n '.': 'gray',\n },\n};\n// turn all supplied colors to hex colors which getContrastText from mui\n// requires\nexport default transform(colorSchemes, function (_a) {\n var key = _a[0], val = _a[1];\n return [\n key,\n transform(val, function (_a) {\n var letter = _a[0], color = _a[1];\n return [letter, Color(color).hex()];\n }),\n ];\n});\n// info http://www.jalview.org/help/html/colourSchemes/clustal.html\n// modifications:\n// reference to clustalX source code scheme modifies what the jalview.org\n// scheme says there the jalview.org colorscheme says WLVIMAFCHP but it\n// should be WLVIMAFCHPY, colprot.xml says e.g. %#ACFHILMVWYPp\" which has Y\nexport function getClustalXColor(stats, model, row, col) {\n var total = Object.values(stats).reduce(function (a, b) { return a + b; }, 0);\n var l = model.columns[row][col];\n var _a = stats.W, W = _a === void 0 ? 0 : _a, _b = stats.L, L = _b === void 0 ? 0 : _b, _c = stats.V, V = _c === void 0 ? 0 : _c, _d = stats.I, I = _d === void 0 ? 0 : _d, _e = stats.M, M = _e === void 0 ? 0 : _e, _f = stats.A, A = _f === void 0 ? 0 : _f, _g = stats.F, F = _g === void 0 ? 0 : _g, _h = stats.C, C = _h === void 0 ? 0 : _h, _j = stats.H, H = _j === void 0 ? 0 : _j, _k = stats.P, P = _k === void 0 ? 0 : _k, _l = stats.R, R = _l === void 0 ? 0 : _l, _m = stats.K, K = _m === void 0 ? 0 : _m, _o = stats.Q, Q = _o === void 0 ? 0 : _o, _p = stats.E, E = _p === void 0 ? 0 : _p, _q = stats.D, D = _q === void 0 ? 0 : _q, _r = stats.T, T = _r === void 0 ? 0 : _r, _s = stats.S, S = _s === void 0 ? 0 : _s, _t = stats.G, G = _t === void 0 ? 0 : _t, _u = stats.Y, Y = _u === void 0 ? 0 : _u, _v = stats.N, N = _v === void 0 ? 0 : _v;\n var WLVIMAFCHP = W + L + V + I + M + A + F + C + H + P + Y;\n var KR = K + R;\n var QE = Q + E;\n var ED = E + D;\n var TS = T + S;\n if (WLVIMAFCHP / total > 0.6) {\n if (l === 'W' ||\n l === 'L' ||\n l === 'V' ||\n l === 'A' ||\n l === 'I' ||\n l === 'M' ||\n l === 'F' ||\n l === 'C') {\n // blue from jalview.org docs\n return 'rgb(128,179,230)';\n }\n }\n if ((l === 'K' || l === 'R') &&\n (KR / total > 0.6 || K / total > 0.8 || R / total > 0.8 || Q / total > 0.8)) {\n return '#d88';\n }\n if (l === 'E' &&\n (KR / total > 0.6 ||\n QE / total > 0.5 ||\n E / total > 0.8 ||\n Q / total > 0.8 ||\n D / total > 0.8)) {\n return 'rgb(192, 72, 192)';\n }\n if (l === 'D' &&\n (KR / total > 0.6 ||\n ED / total > 0.5 ||\n K / total > 0.8 ||\n R / total > 0.8 ||\n Q / total > 0.8)) {\n return 'rgb(204, 77, 204)';\n }\n if (l === 'N' && (N / total > 0.5 || Y / total > 0.85)) {\n return '#8f8';\n }\n if (l === 'Q' &&\n (KR / total > 0.6 ||\n QE / total > 0.6 ||\n Q / total > 0.85 ||\n E / total > 0.85 ||\n K / total > 0.85 ||\n R / total > 0.85)) {\n return '#8f8';\n }\n if ((l === 'S' || l === 'T') &&\n // WLVIMAFCHP modified from 0.6 to 0.55 on page to match what i see in jalview\n (WLVIMAFCHP / total > 0.6 ||\n TS / total > 0.5 ||\n S / total > 0.85 ||\n T / total > 0.85)) {\n return 'rgb(26,204,26)';\n }\n if (l === 'C' && C / total > 0.85) {\n return 'rgb(240, 128, 128)';\n }\n if (l === 'G' && G / total > 0) {\n return 'rgb(240, 144, 72)';\n }\n if (l === 'P' && P / total > 0) {\n return 'rgb(204, 204, 0)';\n }\n if ((l === 'H' || l === 'Y') &&\n (WLVIMAFCHP / total > 0.6 ||\n W > 0.85 ||\n Y > 0.85 ||\n A > 0.85 ||\n C > 0.85 ||\n P > 0.85 ||\n Q > 0.85 ||\n F > 0.85 ||\n H > 0.85 ||\n I > 0.85 ||\n L > 0.85 ||\n M > 0.85 ||\n V > 0.85)) {\n // cyan from jalview.org docs\n return 'rgb(26, 179, 179)';\n }\n return undefined;\n}\n// info http://www.jalview.org/help/html/colourSchemes/clustal.html\n// modifications:\n// reference to clustalX source code scheme modifies what the jalview.org\n// scheme says there the jalview.org colorscheme says WLVIMAFCHP but it\n// should be WLVIMAFCHPY, colprot.xml says e.g. %#ACFHILMVWYPp\" which has Y\nexport function getPercentIdentityColor(stats, model, row, col) {\n var total = Object.values(stats).reduce(function (a, b) { return a + b; }, 0);\n var l = model.columns[row][col];\n var entries = Object.entries(stats);\n var ent = 0;\n var letter = '';\n for (var i = 0; i < entries.length; i++) {\n if (entries[i][1] > ent && entries[i][0] !== '-') {\n letter = entries[i][0];\n ent = entries[i][1];\n }\n }\n var proportion = ent / total;\n var thresh = \"hsl(240, 30%, \" + 100 * Math.max(1 - ent / total / 3, 0.3) + \"%)\";\n if (proportion > 0.4) {\n if (l === letter) {\n return thresh;\n }\n }\n}\n","import React, { useEffect, useState, useRef, useMemo } from 'react';\nimport { Typography, CircularProgress, useTheme } from '@material-ui/core';\nimport { observer } from 'mobx-react';\nimport normalizeWheel from 'normalize-wheel';\nimport { colorContrast } from '../util';\nimport { getClustalXColor, getPercentIdentityColor } from '../colorSchemes';\nvar MSABlock = observer(function (_a) {\n var model = _a.model, offsetX = _a.offsetX, offsetY = _a.offsetY;\n var MSA = model.MSA, colWidth = model.colWidth, bgColor = model.bgColor, columns = model.columns, rowHeight = model.rowHeight, scrollY = model.scrollY, scrollX = model.scrollX, hierarchy = model.hierarchy, colorScheme = model.colorScheme, colorSchemeName = model.colorSchemeName, blockSize = model.blockSize, highResScaleFactor = model.highResScaleFactor, colStats = model.colStats;\n var theme = useTheme();\n var contrastScheme = useMemo(function () { return colorContrast(colorScheme, theme); }, [colorScheme, theme]);\n var ref = useRef(null);\n useEffect(function () {\n if (!ref.current) {\n return;\n }\n var ctx = ref.current.getContext('2d');\n if (!ctx) {\n return;\n }\n ctx.resetTransform();\n ctx.scale(highResScaleFactor, highResScaleFactor);\n ctx.clearRect(0, 0, blockSize, blockSize);\n ctx.translate(-offsetX, rowHeight / 2 - offsetY);\n ctx.textAlign = 'center';\n ctx.font = ctx.font.replace(/\\d+px/, Math.max(8, rowHeight - 8) + \"px\");\n var leaves = hierarchy.leaves();\n var b = blockSize;\n // slice vertical rows, e.g. tree leaves, avoid negative slice\n var yStart = Math.max(0, Math.floor((offsetY - rowHeight) / rowHeight));\n var yEnd = Math.max(0, Math.ceil((offsetY + b + rowHeight) / rowHeight));\n // slice horizontal visible letters, avoid negative slice\n var xStart = Math.max(0, Math.floor(offsetX / colWidth));\n var xEnd = Math.max(0, Math.ceil((offsetX + b) / colWidth));\n var visibleLeaves = leaves.slice(yStart, yEnd);\n visibleLeaves.forEach(function (node) {\n var _a;\n var \n //@ts-ignore\n y = node.x, name = node.data.name;\n var str = (_a = columns[name]) === null || _a === void 0 ? void 0 : _a.slice(xStart, xEnd);\n for (var i = 0; i < (str === null || str === void 0 ? void 0 : str.length); i++) {\n var letter = str[i];\n var color = colorSchemeName === 'clustalx_protein_dynamic'\n ? getClustalXColor(colStats[xStart + i], model, name, xStart + i)\n : colorSchemeName === 'percent_identity_dynamic'\n ? getPercentIdentityColor(colStats[xStart + i], model, name, xStart + i)\n : colorScheme[letter.toUpperCase()];\n if (bgColor) {\n var x = i * colWidth + offsetX - (offsetX % colWidth);\n ctx.fillStyle = color || 'white';\n ctx.fillRect(x, y - rowHeight, colWidth, rowHeight);\n }\n }\n });\n if (rowHeight >= 10 && colWidth >= rowHeight / 2) {\n visibleLeaves.forEach(function (node) {\n var _a;\n var \n //@ts-ignore\n y = node.x, name = node.data.name;\n var str = (_a = columns[name]) === null || _a === void 0 ? void 0 : _a.slice(xStart, xEnd);\n for (var i = 0; i < (str === null || str === void 0 ? void 0 : str.length); i++) {\n var letter = str[i];\n var color = colorScheme[letter.toUpperCase()];\n var contrast = contrastScheme[letter.toUpperCase()] || 'black';\n var x = i * colWidth + offsetX - (offsetX % colWidth);\n //note: -rowHeight/4 matches +rowHeight/4 in tree\n ctx.fillStyle = bgColor ? contrast : color || 'black';\n ctx.fillText(letter, x + colWidth / 2, y - rowHeight / 4);\n }\n });\n }\n }, [\n MSA,\n highResScaleFactor,\n columns,\n colorScheme,\n contrastScheme,\n bgColor,\n rowHeight,\n colWidth,\n hierarchy,\n offsetX,\n offsetY,\n blockSize,\n ]);\n return (React.createElement(\"canvas\", { ref: ref, onMouseMove: function (event) {\n if (!ref.current) {\n return;\n }\n var _a = ref.current.getBoundingClientRect(), left = _a.left, top = _a.top;\n var mouseX = event.clientX - left;\n var mouseY = event.clientY - top;\n model.setMousePos(Math.floor((mouseX + offsetX) / colWidth) + 1, Math.floor((mouseY + offsetY) / rowHeight));\n }, onMouseLeave: function () { return model.setMousePos(); }, width: blockSize * highResScaleFactor, height: blockSize * highResScaleFactor, style: {\n position: 'absolute',\n top: scrollY + offsetY,\n left: scrollX + offsetX,\n width: blockSize,\n height: blockSize,\n } }));\n});\nvar MSACanvas = observer(function (_a) {\n var model = _a.model;\n var MSA = model.MSA, msaFilehandle = model.msaFilehandle, height = model.height, msaAreaWidth = model.msaAreaWidth, blocks2d = model.blocks2d;\n var ref = useRef(null);\n // wheel\n var scheduled = useRef(false);\n var deltaX = useRef(0);\n var deltaY = useRef(0);\n // mouse click-and-drag scrolling\n var prevX = useRef(0);\n var prevY = useRef(0);\n var _b = useState(false), mouseDragging = _b[0], setMouseDragging = _b[1];\n useEffect(function () {\n var curr = ref.current;\n if (!curr) {\n return;\n }\n function onWheel(origEvent) {\n var event = normalizeWheel(origEvent);\n deltaX.current += event.pixelX;\n deltaY.current += event.pixelY;\n if (!scheduled.current) {\n scheduled.current = true;\n requestAnimationFrame(function () {\n model.doScrollX(-deltaX.current);\n model.doScrollY(-deltaY.current);\n deltaX.current = 0;\n deltaY.current = 0;\n scheduled.current = false;\n });\n }\n origEvent.preventDefault();\n }\n curr.addEventListener('wheel', onWheel);\n return function () {\n curr.removeEventListener('wheel', onWheel);\n };\n }, [model]);\n useEffect(function () {\n var cleanup = function () { };\n function globalMouseMove(event) {\n event.preventDefault();\n var currX = event.clientX;\n var currY = event.clientY;\n var distanceX = currX - prevX.current;\n var distanceY = currY - prevY.current;\n if (distanceX || distanceY) {\n // use rAF to make it so multiple event handlers aren't fired per-frame\n // see https://calendar.perfplanet.com/2013/the-runtime-performance-checklist/\n if (!scheduled.current) {\n scheduled.current = true;\n window.requestAnimationFrame(function () {\n model.doScrollX(distanceX);\n model.doScrollY(distanceY);\n scheduled.current = false;\n prevX.current = event.clientX;\n prevY.current = event.clientY;\n });\n }\n }\n }\n function globalMouseUp() {\n prevX.current = 0;\n if (mouseDragging) {\n setMouseDragging(false);\n }\n }\n if (mouseDragging) {\n window.addEventListener('mousemove', globalMouseMove, true);\n window.addEventListener('mouseup', globalMouseUp, true);\n cleanup = function () {\n window.removeEventListener('mousemove', globalMouseMove, true);\n window.removeEventListener('mouseup', globalMouseUp, true);\n };\n }\n return cleanup;\n }, [model, mouseDragging]);\n return (React.createElement(\"div\", { ref: ref, onMouseDown: function (event) {\n // check if clicking a draggable element or a resize handle\n var target = event.target;\n if (target.draggable || target.dataset.resizer) {\n return;\n }\n // otherwise do click and drag scroll\n if (event.button === 0) {\n prevX.current = event.clientX;\n prevY.current = event.clientY;\n setMouseDragging(true);\n }\n }, onMouseUp: function (event) {\n event.preventDefault();\n setMouseDragging(false);\n }, onMouseLeave: function (event) {\n event.preventDefault();\n }, style: {\n position: 'relative',\n height: height,\n width: msaAreaWidth,\n overflow: 'hidden',\n } }, !MSA && !msaFilehandle ? null : !MSA ? (React.createElement(\"div\", { style: { position: 'absolute', left: '50%', top: '50%' } },\n React.createElement(CircularProgress, null),\n React.createElement(Typography, null, \"Loading...\"))) : (blocks2d.map(function (_a) {\n var bx = _a[0], by = _a[1];\n return (React.createElement(MSABlock, { key: bx + \"_\" + by, model: model, offsetX: bx, offsetY: by }));\n }))));\n});\nexport default MSACanvas;\n","import React, { useRef } from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport { observer } from 'mobx-react';\n/**\n * Given a scale ( bp/px ) and minimum distances (px) between major and minor\n * gridlines, return an object like `{ majorPitch: bp, minorPitch: bp }` giving\n * the gridline pitches to use.\n */\nexport function chooseGridPitch(scale, minMajorPitchPx, minMinorPitchPx) {\n scale = Math.abs(scale);\n var minMajorPitchBp = minMajorPitchPx * scale;\n var majorMagnitude = parseInt(Number(minMajorPitchBp).toExponential().split(/e/i)[1], 10);\n var majorPitch = Math.pow(10, majorMagnitude);\n while (majorPitch < minMajorPitchBp) {\n majorPitch *= 2;\n if (majorPitch >= minMajorPitchBp) {\n break;\n }\n majorPitch *= 2.5;\n }\n majorPitch = Math.max(majorPitch, 5);\n var majorPitchPx = majorPitch / scale;\n var minorPitch = 0;\n if (!(majorPitch % 10) && majorPitchPx / 10 >= minMinorPitchPx) {\n minorPitch = majorPitch / 10;\n }\n else if (!(majorPitch % 5) && majorPitchPx / 5 >= minMinorPitchPx) {\n minorPitch = majorPitch / 5;\n }\n else if (!(majorPitch % 2) && majorPitchPx / 2 >= minMinorPitchPx) {\n minorPitch = majorPitch / 2;\n }\n return { majorPitch: majorPitch, minorPitch: minorPitch };\n}\nexport function makeTicks(start, end, bpPerPx, emitMajor, emitMinor) {\n var _a;\n if (emitMajor === void 0) { emitMajor = true; }\n if (emitMinor === void 0) { emitMinor = true; }\n var gridPitch = chooseGridPitch(bpPerPx, 60, 15);\n var minBase = start;\n var maxBase = end;\n if (minBase === null || maxBase === null) {\n return [];\n }\n if (bpPerPx < 0) {\n _a = [maxBase, minBase], minBase = _a[0], maxBase = _a[1];\n }\n // add 20px additional on the right and left to allow us to draw the ends of\n // labels that lie a little outside our region\n minBase -= Math.abs(20 * bpPerPx);\n maxBase += Math.abs(20 * bpPerPx) + 1;\n var iterPitch = gridPitch.minorPitch || gridPitch.majorPitch;\n var index = 0;\n var ticks = [];\n for (var base = Math.ceil(minBase / iterPitch) * iterPitch; base < maxBase; base += iterPitch) {\n if (emitMinor && base % (gridPitch.majorPitch * 2)) {\n ticks.push({ type: 'minor', base: base - 1, index: index });\n index += 1;\n }\n else if (emitMajor && !(base % (gridPitch.majorPitch * 2))) {\n ticks.push({ type: 'major', base: base - 1, index: index });\n index += 1;\n }\n }\n return ticks;\n}\nfunction mathPower(num) {\n if (num < 999) {\n return String(num);\n }\n return mathPower(~~(num / 1000)) + \",\" + (\"00\" + ~~(num % 1000)).substr(-3, 3);\n}\nvar useStyles = makeStyles(function ( /* theme */) { return ({\n majorTickLabel: {\n fontSize: '11px',\n },\n majorTick: {\n stroke: '#555',\n },\n minorTick: {\n stroke: '#999',\n },\n}); });\nfunction RulerBlock(_a) {\n var start = _a.start, end = _a.end, bpPerPx = _a.bpPerPx, reversed = _a.reversed, major = _a.major, minor = _a.minor;\n var classes = useStyles();\n var ticks = makeTicks(start, end, bpPerPx, major, minor);\n return (React.createElement(React.Fragment, null,\n ticks.map(function (tick) {\n var x = (reversed ? end - tick.base : tick.base - start) / bpPerPx;\n return (React.createElement(\"line\", { key: tick.base, x1: x, x2: x, y1: 11, y2: tick.type === 'major' ? 11 + 6 : 11 + 4, strokeWidth: 1, stroke: tick.type === 'major' ? '#555' : '#999', className: tick.type === 'major' ? classes.majorTick : classes.minorTick, \"data-bp\": tick.base }));\n }),\n ticks\n .filter(function (tick) { return tick.type === 'major'; })\n .map(function (tick) {\n var x = (reversed ? end - tick.base : tick.base - start) / bpPerPx;\n return (React.createElement(\"text\", { x: x, y: 10, key: \"label-\" + tick.base, textAnchor: \"middle\", style: { fontSize: '11px' }, className: classes.majorTickLabel }, mathPower(tick.base + 1)));\n })));\n}\nvar Ruler = observer(function (_a) {\n var model = _a.model;\n var MSA = model.MSA, colWidth = model.colWidth, msaAreaWidth = model.msaAreaWidth, resizeHandleWidth = model.resizeHandleWidth, scrollX = model.scrollX, blocksX = model.blocksX, blockSize = model.blockSize;\n var ref = useRef(null);\n var offsetX = blocksX[0];\n return !MSA ? null : (React.createElement(\"div\", { ref: ref, style: {\n position: 'relative',\n width: msaAreaWidth,\n cursor: 'crosshair',\n overflow: 'hidden',\n height: 20,\n background: '#ccc',\n } },\n React.createElement(\"svg\", { style: {\n width: blocksX.length * blockSize,\n position: 'absolute',\n left: scrollX + offsetX + resizeHandleWidth,\n pointerEvents: 'none',\n } },\n React.createElement(RulerBlock, { key: offsetX, start: offsetX / colWidth, end: offsetX / colWidth + (blockSize * blocksX.length) / colWidth, bpPerPx: 1 / colWidth }))));\n});\nexport default Ruler;\n","import React from 'react';\nimport { observer } from 'mobx-react';\nvar TreeRuler = observer(function (_a) {\n var model = _a.model;\n var treeWidth = model.treeWidth;\n return React.createElement(\"div\", { style: { width: treeWidth } });\n});\nexport default TreeRuler;\n","import React, { useState } from 'react';\nimport { observer } from 'mobx-react';\nimport { Button, Checkbox, Dialog, DialogActions, DialogTitle, DialogContent, FormControlLabel, MenuItem, TextField, } from '@material-ui/core';\nimport colorSchemes from '../colorSchemes';\nexport default observer(function (_a) {\n var model = _a.model, onClose = _a.onClose, open = _a.open;\n var rowHeightInit = model.rowHeight, colWidthInit = model.colWidth, treeWidthInit = model.treeWidth, colorSchemeName = model.colorSchemeName, noTree = model.noTree;\n var _b = useState(\"\" + rowHeightInit), rowHeight = _b[0], setRowHeight = _b[1];\n var _c = useState(\"\" + colWidthInit), colWidth = _c[0], setColWidth = _c[1];\n var _d = useState(\"\" + treeWidthInit), treeWidth = _d[0], setTreeWidth = _d[1];\n function error(n) {\n return Number.isNaN(+n) || +n < 0;\n }\n var rowHeightError = error(rowHeight);\n var colWidthError = error(colWidth);\n var treeWidthError = error(treeWidth);\n return (React.createElement(Dialog, { onClose: function () { return onClose(); }, open: open },\n React.createElement(DialogTitle, null, \"Settings\"),\n React.createElement(DialogContent, null,\n React.createElement(FormControlLabel, { control: React.createElement(Checkbox, { checked: model.showBranchLen, onChange: function () { return model.toggleBranchLen(); } }), label: \"Show branch length\" }),\n React.createElement(FormControlLabel, { control: React.createElement(Checkbox, { checked: model.bgColor, onChange: function () { return model.toggleBgColor(); } }), label: \"Color background\" }),\n React.createElement(FormControlLabel, { control: React.createElement(Checkbox, { checked: model.drawNodeBubbles, onChange: function () { return model.toggleNodeBubbles(); } }), label: \"Draw node bubbles\" }),\n React.createElement(FormControlLabel, { control: React.createElement(Checkbox, { checked: model.drawTree, onChange: function () { return model.toggleDrawTree(); } }), label: \"Draw tree (if available)\" }),\n React.createElement(FormControlLabel, { control: React.createElement(Checkbox, { checked: model.labelsAlignRight, onChange: function () { return model.toggleLabelsAlignRight(); } }), label: \"Labels align right (note: labels may draw over tree, but can adjust tree width or tree area width in UI)\" }),\n React.createElement(TextField, { label: \"Row height (px)\", value: rowHeight, error: rowHeightError, onChange: function (event) { return setRowHeight(event.target.value); } }),\n React.createElement(TextField, { label: \"Column width (px)\", value: colWidth, error: colWidthError, onChange: function (event) { return setColWidth(event.target.value); } }),\n React.createElement(\"br\", null),\n !noTree ? (React.createElement(TextField, { label: \"Tree width (px)\", value: treeWidth, error: treeWidthError, onChange: function (event) { return setTreeWidth(event.target.value); } })) : null,\n React.createElement(\"br\", null),\n React.createElement(TextField, { select: true, label: \"Color scheme\", value: colorSchemeName, onChange: function (event) { return model.setColorSchemeName(event.target.value); } }, Object.keys(colorSchemes).map(function (option) { return (React.createElement(MenuItem, { key: option, value: option }, option)); })),\n React.createElement(DialogActions, null,\n React.createElement(Button, { disabled: rowHeightError || colWidthError || treeWidthError, onClick: function () {\n model.setRowHeight(+rowHeight);\n model.setColWidth(+colWidth);\n if (!noTree) {\n model.setTreeWidth(+treeWidth);\n }\n onClose();\n }, variant: \"contained\", color: \"primary\" }, \"Submit\")))));\n});\n","import React, { useState } from 'react';\nimport { Dialog, DialogTitle, DialogContent, Typography, Link, } from '@material-ui/core';\nimport { version } from './package.json';\nfunction LicenseDialog(_a) {\n var onClose = _a.onClose, open = _a.open;\n return (React.createElement(Dialog, { onClose: function () { return onClose(); }, open: open },\n React.createElement(DialogTitle, null, \"Biotite License\"),\n React.createElement(DialogContent, null,\n React.createElement(\"pre\", { style: { height: 100, overflow: 'auto' } }, \"\\nCopyright 2017 - 2020, The Biotite contributors\\nAll rights reserved.\\n\\nRedistribution and use in source and binary forms, with or without modification,\\nare permitted provided that the following conditions are met:\\n\\n1. Redistributions of source code must retain the above copyright notice, this\\nlist of conditions and the following disclaimer.\\n\\n2. Redistributions in binary form must reproduce the above copyright notice,\\nthis list of conditions and the following disclaimer in the documentation and/or\\nother materials provided with the distribution.\\n\\n3. Neither the name of the copyright holder nor the names of its contributors\\nmay be used to endorse or promote products derived from this software without\\nspecific prior written permission.\\n\\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \\\"AS IS\\\" AND\\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\\n \"))));\n}\nexport default function AboutDialog(_a) {\n var onClose = _a.onClose, open = _a.open;\n var _b = useState(false), dlgOpen = _b[0], setDlgOpen = _b[1];\n return (React.createElement(React.Fragment, null,\n React.createElement(LicenseDialog, { onClose: function () { return setDlgOpen(false); }, open: dlgOpen }),\n React.createElement(Dialog, { onClose: function () { return onClose(); }, open: open },\n React.createElement(DialogTitle, null, \"About this plugin\"),\n React.createElement(DialogContent, null,\n React.createElement(Typography, null,\n \"JBrowse 2 MSAView plugin \",\n version,\n \" (\",\n React.createElement(Link, { href: \"https://github.com/gmod/jbrowse-plugin-msaview\" }, \"Github\"),\n \")\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null,\n React.createElement(Typography, null,\n \"We use some color schemes from the\",\n ' ',\n React.createElement(Link, { href: \"https://github.com/biotite-dev/biotite\" }, \"biotite\"),\n ' ',\n \"project, and their license is reproduced\",\n ' ',\n React.createElement(Link, { onClick: function () { return setDlgOpen(true); } }, \"here\"))),\n React.createElement(\"li\", null,\n React.createElement(Typography, null,\n \"See this page for some information on jalview colorings\",\n ' ',\n React.createElement(Link, { href: \"https://www.jalview.org/help/html/colourSchemes/\" }, \"here\"))),\n React.createElement(\"li\", null,\n React.createElement(Typography, null,\n \"See this page for some info on the clustal, cinema, maeditor, and lesk color schemes\",\n ' ',\n React.createElement(Link, { href: \"http://www.bioinformatics.nl/~berndb/aacolour.html\" }, \"here\"))),\n React.createElement(\"li\", null,\n React.createElement(Typography, null,\n \"See this paper about the flower color scheme\",\n ' ',\n React.createElement(Link, { href: \"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7245768/\" }, \"here\"))))))));\n}\n","import React from 'react';\nimport { Dialog, DialogTitle, DialogContent } from '@material-ui/core';\nimport { observer } from 'mobx-react';\nimport { Attributes } from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail';\nexport default observer(function (_a) {\n var model = _a.model, onClose = _a.onClose, open = _a.open;\n var alignmentDetails = model.alignmentDetails;\n return (React.createElement(Dialog, { onClose: function () { return onClose(); }, open: open },\n React.createElement(DialogTitle, null, \"Metadata\"),\n React.createElement(DialogContent, null,\n React.createElement(Attributes, { attributes: alignmentDetails }))));\n});\n","import React from 'react';\nimport { Dialog, DialogTitle, DialogContent, FormControlLabel, FormGroup, Checkbox, DialogActions, Button, Typography, } from '@material-ui/core';\nimport { observer } from 'mobx-react';\nexport default observer(function (_a) {\n var model = _a.model, onClose = _a.onClose, open = _a.open;\n var tracks = model.tracks;\n return (React.createElement(Dialog, { onClose: function () { return onClose(); }, open: open },\n React.createElement(DialogTitle, null, \"Add track\"),\n React.createElement(DialogContent, null,\n React.createElement(Typography, null, \"Open relevant per-alignment tracks e.g. protein domains\"),\n React.createElement(FormGroup, null, tracks.map(function (track) {\n return (React.createElement(FormControlLabel, { key: track.model.id, control: React.createElement(Checkbox, { checked: !model.turnedOffTracks.has(track.model.id), onChange: function () {\n model.toggleTrack(track.model.id);\n } }), label: track.model.name }));\n })),\n React.createElement(DialogActions, null,\n React.createElement(Button, { onClick: function () { return onClose(); }, variant: \"contained\", color: \"primary\" }, \"Close\")))));\n});\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z\"\n}), 'FolderOpen');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z\"\n}), 'Settings');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z\"\n}), 'Help');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3 13h2v-2H3v2zm0 4h2v-2H3v2zm0-8h2V7H3v2zm4 4h14v-2H7v2zm0 4h14v-2H7v2zM7 7v2h14V7H7z\"\n}), 'List');\n\nexports.default = _default;","import React, { useState } from 'react';\nimport { IconButton, Select, Typography } from '@material-ui/core';\nimport { observer } from 'mobx-react';\nimport SettingsDialog from './SettingsDlg';\nimport AboutDialog from './AboutDlg';\nimport DetailsDialog from './DetailsDlg';\nimport TracklistDialog from './TracklistDlg';\n//icons\nimport FolderOpenIcon from '@material-ui/icons/FolderOpen';\nimport SettingsIcon from '@material-ui/icons/Settings';\nimport HelpIcon from '@material-ui/icons/Help';\nimport AssignmentIcon from '@material-ui/icons/Assignment';\nimport ListIcon from '@material-ui/icons/List';\nvar InfoArea = observer(function (_a) {\n var model = _a.model;\n var mouseOverRowName = model.mouseOverRowName, mouseCol = model.mouseCol;\n return (React.createElement(\"div\", null,\n React.createElement(Typography, { display: \"inline\" },\n \"Row name: \",\n mouseOverRowName),\n React.createElement(\"span\", { style: { marginLeft: 10 } }),\n React.createElement(Typography, { display: \"inline\" },\n \"Position: \",\n mouseCol)));\n});\nvar Header = observer(function (_a) {\n var model = _a.model;\n var _b = useState(false), settingsDialogVisible = _b[0], setSettingsDialogVisible = _b[1];\n var _c = useState(false), aboutDialogVisible = _c[0], setAboutDialogVisible = _c[1];\n var _d = useState(false), detailsDialogVisible = _d[0], setDetailsDialogVisible = _d[1];\n var _e = useState(false), tracklistDialogVisible = _e[0], setTracklistDialogVisible = _e[1];\n var currentAlignment = model.currentAlignment, alignmentNames = model.alignmentNames;\n return (React.createElement(\"div\", { style: { display: 'flex' } },\n React.createElement(IconButton, { onClick: function () {\n model.setData({ tree: '', msa: '' });\n model.setTreeFilehandle(undefined);\n model.setMSAFilehandle(undefined);\n model.setScrollY(0);\n model.setScrollX(0);\n model.setCurrentAlignment(0);\n } },\n React.createElement(FolderOpenIcon, null)),\n React.createElement(IconButton, { onClick: function () { return setSettingsDialogVisible(true); } },\n React.createElement(SettingsIcon, null)),\n React.createElement(IconButton, { onClick: function () { return setDetailsDialogVisible(true); } },\n React.createElement(AssignmentIcon, null)),\n React.createElement(IconButton, { onClick: function () { return setTracklistDialogVisible(true); } },\n React.createElement(ListIcon, null)),\n settingsDialogVisible ? (React.createElement(SettingsDialog, { open: true, model: model, onClose: function () { return setSettingsDialogVisible(false); } })) : null,\n aboutDialogVisible ? (React.createElement(AboutDialog, { open: true, onClose: function () { return setAboutDialogVisible(false); } })) : null,\n detailsDialogVisible ? (React.createElement(DetailsDialog, { open: true, model: model, onClose: function () { return setDetailsDialogVisible(false); } })) : null,\n tracklistDialogVisible ? (React.createElement(TracklistDialog, { open: true, model: model, onClose: function () { return setTracklistDialogVisible(false); } })) : null,\n alignmentNames.length > 0 ? (React.createElement(Select, { native: true, value: currentAlignment, onChange: function (event) {\n model.setCurrentAlignment(+event.target.value);\n model.setScrollX(0);\n model.setScrollY(0);\n } }, alignmentNames.map(function (option, index) { return (React.createElement(\"option\", { key: option + \"-\" + index, value: index }, option)); }))) : null,\n React.createElement(InfoArea, { model: model }),\n React.createElement(\"div\", { style: { flex: 1 } }),\n React.createElement(IconButton, { onClick: function () { return setAboutDialogVisible(true); } },\n React.createElement(HelpIcon, null))));\n});\nexport default Header;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7 10l5 5 5-5z\"\n}), 'ArrowDropDown');\n\nexports.default = _default;","\"use strict\";\n\nvar deselectCurrent = require(\"toggle-selection\");\n\nvar clipboardToIE11Formatting = {\n \"text/plain\": \"Text\",\n \"text/html\": \"Url\",\n \"default\": \"Text\"\n}\n\nvar defaultMessage = \"Copy to clipboard: #{key}, Enter\";\n\nfunction format(message) {\n var copyKey = (/mac os x/i.test(navigator.userAgent) ? \"⌘\" : \"Ctrl\") + \"+C\";\n return message.replace(/#{\\s*key\\s*}/g, copyKey);\n}\n\nfunction copy(text, options) {\n var debug,\n message,\n reselectPrevious,\n range,\n selection,\n mark,\n success = false;\n if (!options) {\n options = {};\n }\n debug = options.debug || false;\n try {\n reselectPrevious = deselectCurrent();\n\n range = document.createRange();\n selection = document.getSelection();\n\n mark = document.createElement(\"span\");\n mark.textContent = text;\n // reset user styles for span element\n mark.style.all = \"unset\";\n // prevents scrolling to the end of the page\n mark.style.position = \"fixed\";\n mark.style.top = 0;\n mark.style.clip = \"rect(0, 0, 0, 0)\";\n // used to preserve spaces and line breaks\n mark.style.whiteSpace = \"pre\";\n // do not inherit user-select (it may be `none`)\n mark.style.webkitUserSelect = \"text\";\n mark.style.MozUserSelect = \"text\";\n mark.style.msUserSelect = \"text\";\n mark.style.userSelect = \"text\";\n mark.addEventListener(\"copy\", function(e) {\n e.stopPropagation();\n if (options.format) {\n e.preventDefault();\n if (typeof e.clipboardData === \"undefined\") { // IE 11\n debug && console.warn(\"unable to use e.clipboardData\");\n debug && console.warn(\"trying IE specific stuff\");\n window.clipboardData.clearData();\n var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting[\"default\"]\n window.clipboardData.setData(format, text);\n } else { // all other browsers\n e.clipboardData.clearData();\n e.clipboardData.setData(options.format, text);\n }\n }\n if (options.onCopy) {\n e.preventDefault();\n options.onCopy(e.clipboardData);\n }\n });\n\n document.body.appendChild(mark);\n\n range.selectNodeContents(mark);\n selection.addRange(range);\n\n var successful = document.execCommand(\"copy\");\n if (!successful) {\n throw new Error(\"copy command was unsuccessful\");\n }\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using execCommand: \", err);\n debug && console.warn(\"trying IE specific stuff\");\n try {\n window.clipboardData.setData(options.format || \"text\", text);\n options.onCopy && options.onCopy(window.clipboardData);\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using clipboardData: \", err);\n debug && console.error(\"falling back to prompt\");\n message = format(\"message\" in options ? options.message : defaultMessage);\n window.prompt(message, text);\n }\n } finally {\n if (selection) {\n if (typeof selection.removeRange == \"function\") {\n selection.removeRange(range);\n } else {\n selection.removeAllRanges();\n }\n }\n\n if (mark) {\n document.body.removeChild(mark);\n }\n reselectPrevious();\n }\n\n return success;\n}\n\nmodule.exports = copy;\n","import React, { useState } from 'react';\nimport copy from 'copy-to-clipboard';\nimport { observer } from 'mobx-react';\nimport { Button, Dialog, DialogActions, DialogTitle, DialogContent, makeStyles, } from '@material-ui/core';\nvar useStyles = makeStyles(function (theme) { return ({\n textArea: {\n padding: theme.spacing(2),\n overflow: 'auto',\n background: '#ddd',\n wordBreak: 'break-word',\n },\n}); });\nvar TrackInfoDialog = observer(function (_a) {\n var model = _a.model, onClose = _a.onClose;\n var _b = useState('Copy to clipboard'), label = _b[0], setLabel = _b[1];\n var classes = useStyles();\n return (React.createElement(Dialog, { open: true, onClose: onClose, fullWidth: true, maxWidth: \"lg\" },\n React.createElement(DialogTitle, null,\n \"Track info - \",\n model.name),\n React.createElement(DialogContent, null,\n React.createElement(Button, { variant: \"contained\", color: \"primary\", onClick: function () {\n copy(model.data);\n setLabel('Copied!');\n setTimeout(function () {\n setLabel('Copy to clipboard');\n }, 300);\n } }, label),\n React.createElement(\"pre\", { className: classes.textArea }, model.data)),\n React.createElement(DialogActions, null,\n React.createElement(Button, { variant: \"contained\", onClick: onClose, color: \"secondary\" }, \"Close\"))));\n});\nexport default TrackInfoDialog;\n","\nmodule.exports = function () {\n var selection = document.getSelection();\n if (!selection.rangeCount) {\n return function () {};\n }\n var active = document.activeElement;\n\n var ranges = [];\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n\n switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML\n case 'INPUT':\n case 'TEXTAREA':\n active.blur();\n break;\n\n default:\n active = null;\n break;\n }\n\n selection.removeAllRanges();\n return function () {\n selection.type === 'Caret' &&\n selection.removeAllRanges();\n\n if (!selection.rangeCount) {\n ranges.forEach(function(range) {\n selection.addRange(range);\n });\n }\n\n active &&\n active.focus();\n };\n};\n","import React, { useState, useRef, useEffect } from 'react';\nimport normalizeWheel from 'normalize-wheel';\nimport { observer } from 'mobx-react';\nimport { IconButton, Menu, MenuItem, makeStyles } from '@material-ui/core';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport TrackInfoDialog from './TrackInfoDlg';\nvar useStyles = makeStyles(function () { return ({\n button: {\n padding: 0,\n },\n}); });\nexport var TrackLabel = observer(function (_a) {\n var model = _a.model, track = _a.track;\n var _b = useState(), anchorEl = _b[0], setAnchorEl = _b[1];\n var _c = useState(false), trackInfoDlgOpen = _c[0], setTrackInfoDlgOpen = _c[1];\n var rowHeight = model.rowHeight, width = model.treeAreaWidth;\n var height = track.height, name = track.model.name;\n var classes = useStyles();\n var trackLabelHeight = Math.max(8, rowHeight - 8);\n return (React.createElement(\"div\", { style: {\n width: width,\n height: height,\n flexShrink: 0,\n textAlign: 'right',\n fontSize: trackLabelHeight,\n } },\n name,\n React.createElement(IconButton, { className: classes.button, style: { width: trackLabelHeight, height: trackLabelHeight }, onClick: function (event) {\n setAnchorEl(event.target);\n } },\n React.createElement(ArrowDropDownIcon, null)),\n anchorEl ? (React.createElement(Menu, { anchorEl: anchorEl, transitionDuration: 0, open: true, onClose: function () {\n setAnchorEl(undefined);\n } },\n React.createElement(MenuItem, { dense: true, onClick: function () {\n model.toggleTrack(track.model.id);\n setAnchorEl(undefined);\n } }, \"Close\"),\n React.createElement(MenuItem, { dense: true, onClick: function () {\n setTrackInfoDlgOpen(true);\n setAnchorEl(undefined);\n } }, \"Get info\"))) : null,\n trackInfoDlgOpen ? (React.createElement(TrackInfoDialog, { model: track.model, onClose: function () { return setTrackInfoDlgOpen(false); } })) : null));\n});\nvar Track = observer(function (_a) {\n var model = _a.model, track = _a.track;\n var resizeHandleWidth = model.resizeHandleWidth;\n var height = track.model.height;\n var ref = useRef(null);\n var scheduled = useRef(false);\n var deltaX = useRef(0);\n useEffect(function () {\n var curr = ref.current;\n if (!curr) {\n return;\n }\n function onWheel(origEvent) {\n var event = normalizeWheel(origEvent);\n deltaX.current += event.pixelX;\n if (!scheduled.current) {\n scheduled.current = true;\n requestAnimationFrame(function () {\n model.doScrollX(-deltaX.current);\n deltaX.current = 0;\n scheduled.current = false;\n });\n }\n origEvent.preventDefault();\n }\n curr.addEventListener('wheel', onWheel);\n return function () {\n curr.removeEventListener('wheel', onWheel);\n };\n }, [model]);\n return (React.createElement(\"div\", { key: track.id, style: { display: 'flex', height: height } },\n React.createElement(TrackLabel, { model: model, track: track }),\n React.createElement(\"div\", { style: { width: resizeHandleWidth, flexShrink: 0 } }),\n React.createElement(\"div\", { ref: ref },\n React.createElement(track.ReactComponent, { model: model, track: track }))));\n});\nexport default Track;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\"\n}), 'Delete');\n\nexports.default = _default;","var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport React, { useState } from 'react';\nimport { observer } from 'mobx-react';\nimport { Button, Dialog, DialogActions, DialogTitle, DialogContent, IconButton, TextField, Typography, } from '@material-ui/core';\nimport DeleteIcon from '@material-ui/icons/Delete';\nvar specialFromEntries = function (val) {\n var ret = {};\n val.forEach(function (_a) {\n var key = _a[0], val = _a[1];\n if (!ret[key])\n ret[key] = [];\n ret[key].push(val);\n });\n return ret;\n};\nvar Row = observer(function (_a) {\n var name = _a.name, value = _a.value, setValue = _a.setValue, setName = _a.setName, onDelete = _a.onDelete;\n return (React.createElement(\"div\", null,\n React.createElement(IconButton, { onClick: onDelete, style: { margin: 10 } },\n React.createElement(DeleteIcon, null)),\n React.createElement(TextField, { value: name, onChange: function (event) { return setName(event.target.value); }, label: \"Key\" }),\n React.createElement(TextField, { value: value, onChange: function (event) { return setValue(event.target.value); }, label: \"Value\" })));\n});\nexport default observer(function (_a) {\n var onClose = _a.onClose, data = _a.data, model = _a.model;\n var blanks = model.blanks;\n var l = data.left, r = data.right;\n var _b = useState([\n ['Name', ''],\n ['ID', ''],\n ['Note', ''],\n ]), rows = _b[0], setRows = _b[1];\n return (React.createElement(Dialog, { onClose: function () { return onClose(); }, open: true },\n React.createElement(DialogTitle, null, \"Create new region annotation\"),\n React.createElement(DialogContent, null,\n React.createElement(Typography, null,\n \"Do you want to add an annotation to the MSA at \",\n l,\n \"..\",\n r,\n ' ',\n blanks.length\n ? \" (gapped \" + model.getPos(l) + \"..\" + model.getPos(r)\n : ''),\n rows.map(function (_a, index) {\n var key = _a[0], val = _a[1];\n return (React.createElement(Row, { key: index, name: key, value: val, setValue: function (newValue) {\n var newRows = __spreadArray([], rows, true);\n newRows[index][1] = newValue;\n setRows(newRows);\n }, setName: function (newName) {\n var newRows = __spreadArray([], rows, true);\n newRows[index][0] = newName;\n setRows(newRows);\n }, onDelete: function () {\n rows.splice(index, 1);\n setRows(__spreadArray([], rows, true));\n } }));\n }),\n React.createElement(Button, { onClick: function () {\n setRows(__spreadArray(__spreadArray([], rows, true), [['', '']], false));\n } }, \"Add row\"),\n React.createElement(DialogActions, null,\n React.createElement(Button, { onClick: function () {\n model.addAnnotation(l, r, specialFromEntries(rows));\n onClose();\n }, variant: \"contained\", color: \"primary\" }, \"Submit\"),\n React.createElement(Button, { variant: \"contained\", color: \"secondary\", onClick: function () { return onClose(); } }, \"Cancel\")))));\n});\n","import React, { useEffect, useRef, useState } from 'react';\nimport { observer } from 'mobx-react';\nexport var VerticalResizeHandle = observer(function (_a) {\n var model = _a.model;\n var resizeHandleWidth = model.resizeHandleWidth;\n var _b = useState(false), mouseDragging = _b[0], setMouseDragging = _b[1];\n var scheduled = useRef(false);\n var prevX = useRef(0);\n useEffect(function () {\n function globalMouseMove(event) {\n event.preventDefault();\n var currX = event.clientX;\n if (prevX.current === 0) {\n prevX.current = event.clientX;\n }\n else {\n var distance_1 = currX - prevX.current;\n if (distance_1) {\n // use rAF to make it so multiple event handlers aren't fired per-frame\n // see https://calendar.perfplanet.com/2013/the-runtime-performance-checklist/\n if (!scheduled.current) {\n scheduled.current = true;\n window.requestAnimationFrame(function () {\n model.setTreeAreaWidth(model.treeAreaWidth + distance_1);\n scheduled.current = false;\n prevX.current = event.clientX;\n });\n }\n }\n }\n }\n function globalMouseUp() {\n prevX.current = 0;\n if (mouseDragging) {\n setMouseDragging(false);\n }\n }\n if (mouseDragging) {\n document.addEventListener('mousemove', globalMouseMove, true);\n document.addEventListener('mouseup', globalMouseUp, true);\n return function () {\n document.removeEventListener('mousemove', globalMouseMove, true);\n document.removeEventListener('mouseup', globalMouseUp, true);\n };\n }\n return function () { };\n }, [mouseDragging, model]);\n return (React.createElement(\"div\", null,\n React.createElement(\"div\", { onMouseDown: function () { return setMouseDragging(true); }, style: {\n cursor: 'ew-resize',\n height: '100%',\n width: resizeHandleWidth,\n background: \"rgba(200,200,200)\",\n position: 'relative',\n } })));\n});\nexport var HorizontalResizeHandle = observer(function (_a) {\n var model = _a.model;\n var resizeHandleWidth = model.resizeHandleWidth;\n var _b = useState(false), mouseDragging = _b[0], setMouseDragging = _b[1];\n var scheduled = useRef(false);\n var prevY = useRef(0);\n useEffect(function () {\n function globalMouseMove(event) {\n event.preventDefault();\n var currY = event.clientY;\n if (prevY.current === 0) {\n prevY.current = event.clientY;\n }\n else {\n var distance_2 = currY - prevY.current;\n if (distance_2) {\n // use rAF to make it so multiple event handlers aren't fired per-frame\n // see https://calendar.perfplanet.com/2013/the-runtime-performance-checklist/\n if (!scheduled.current) {\n scheduled.current = true;\n window.requestAnimationFrame(function () {\n model.setHeight(model.height + distance_2);\n scheduled.current = false;\n prevY.current = event.clientY;\n });\n }\n }\n }\n }\n function globalMouseUp() {\n prevY.current = 0;\n if (mouseDragging) {\n setMouseDragging(false);\n }\n }\n if (mouseDragging) {\n document.addEventListener('mousemove', globalMouseMove, true);\n document.addEventListener('mouseup', globalMouseUp, true);\n return function () {\n document.removeEventListener('mousemove', globalMouseMove, true);\n document.removeEventListener('mouseup', globalMouseUp, true);\n };\n }\n return function () { };\n }, [mouseDragging, model]);\n return (React.createElement(\"div\", null,\n React.createElement(\"div\", { onMouseDown: function () { return setMouseDragging(true); }, style: {\n cursor: 'ns-resize',\n width: '100%',\n height: resizeHandleWidth,\n background: \"rgba(200,200,200)\",\n position: 'relative',\n } })));\n});\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport React, { useRef, useEffect } from 'react';\nimport { observer } from 'mobx-react';\nimport { Typography } from '@material-ui/core';\nimport ImportForm from './ImportForm';\nimport Rubberband from './Rubberband';\nimport TreeCanvas from './TreeCanvas';\nimport MSACanvas from './MSACanvas';\nimport Ruler from './Ruler';\nimport TreeRuler from './TreeRuler';\nimport Header from './Header';\nimport Track from './Track';\nimport AnnotationDialog from './AnnotationDlg';\nimport { HorizontalResizeHandle, VerticalResizeHandle } from './ResizeHandles';\nvar MouseoverCanvas = observer(function (_a) {\n var model = _a.model;\n var ref = useRef(null);\n var height = model.height, width = model.width, treeAreaWidth = model.treeAreaWidth, resizeHandleWidth = model.resizeHandleWidth, scrollX = model.scrollX, mouseCol = model.mouseCol, colWidth = model.colWidth;\n useEffect(function () {\n if (!ref.current) {\n return;\n }\n var ctx = ref.current.getContext('2d');\n if (!ctx) {\n return;\n }\n ctx.resetTransform();\n ctx.clearRect(0, 0, width, height);\n if (mouseCol !== undefined) {\n var x = (mouseCol - 1) * colWidth + scrollX + treeAreaWidth + resizeHandleWidth;\n ctx.fillStyle = 'rgba(100,100,100,0.5)';\n ctx.fillRect(x, 0, colWidth, height);\n }\n }, [\n mouseCol,\n colWidth,\n scrollX,\n height,\n resizeHandleWidth,\n treeAreaWidth,\n width,\n ]);\n return (React.createElement(\"canvas\", { ref: ref, width: width, height: height, style: {\n position: 'absolute',\n top: 0,\n left: 0,\n width: width,\n height: height,\n zIndex: 1000,\n pointerEvents: 'none',\n } }));\n});\nexport default observer(function (_a) {\n var model = _a.model;\n var done = model.done, initialized = model.initialized, treeAreaWidth = model.treeAreaWidth, height = model.height, resizeHandleWidth = model.resizeHandleWidth, turnedOnTracks = model.turnedOnTracks;\n return (React.createElement(\"div\", null,\n !initialized ? (React.createElement(ImportForm, { model: model })) : !done ? (React.createElement(Typography, { variant: \"h4\" }, \"Loading...\")) : (React.createElement(\"div\", null,\n React.createElement(\"div\", { style: { height: height, overflow: 'hidden' } },\n React.createElement(Header, { model: model }),\n React.createElement(\"div\", null,\n React.createElement(\"div\", { style: { position: 'relative' } },\n React.createElement(\"div\", { style: { display: 'flex' } },\n React.createElement(\"div\", { style: { flexShrink: 0, width: treeAreaWidth } },\n React.createElement(TreeRuler, { model: model })),\n React.createElement(Rubberband, { model: model, ControlComponent: React.createElement(Ruler, { model: model }) })), turnedOnTracks === null || turnedOnTracks === void 0 ? void 0 :\n turnedOnTracks.map(function (track) { return (React.createElement(Track, { key: track.model.id, model: model, track: track })); }),\n React.createElement(\"div\", { style: { display: 'flex' } },\n React.createElement(\"div\", { style: { flexShrink: 0, width: treeAreaWidth } },\n React.createElement(TreeCanvas, { model: model })),\n React.createElement(VerticalResizeHandle, { model: model }),\n React.createElement(MSACanvas, { model: model }),\n React.createElement(MouseoverCanvas, { model: model }))))),\n React.createElement(HorizontalResizeHandle, { model: model }))),\n model.DialogComponent ? (React.createElement(model.DialogComponent, __assign({}, (model.DialogProps || {}), { onClose: function () {\n model.setDialogComponent(undefined, undefined);\n } }))) : null,\n model.annotPos ? (React.createElement(AnnotationDialog, { data: model.annotPos, model: model, onClose: function () { return model.clearAnnotPos(); } })) : null));\n});\n","function defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n return x + c.x;\n}\n\nfunction maxY(children) {\n return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n var children;\n while (children = node.children) node = children[0];\n return node;\n}\n\nfunction leafRight(node) {\n var children;\n while (children = node.children) node = children[children.length - 1];\n return node;\n}\n\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = false;\n\n function cluster(root) {\n var previousNode,\n x = 0;\n\n // First walk, computing the initial x & y values.\n root.eachAfter(function(node) {\n var children = node.children;\n if (children) {\n node.x = meanX(children);\n node.y = maxY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n\n var left = leafLeft(root),\n right = leafRight(root),\n x0 = left.x - separation(left, right) / 2,\n x1 = right.x + separation(right, left) / 2;\n\n // Second walk, normalizing x & y to the desired size.\n return root.eachAfter(nodeSize ? function(node) {\n node.x = (node.x - root.x) * dx;\n node.y = (root.y - node.y) * dy;\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * dx;\n node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n });\n }\n\n cluster.separation = function(x) {\n return arguments.length ? (separation = x, cluster) : separation;\n };\n\n cluster.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n };\n\n cluster.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n };\n\n return cluster;\n}\n","function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_find from \"./find.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n if (data instanceof Map) {\n data = [undefined, data];\n if (children === undefined) children = mapChildren;\n } else if (children === undefined) {\n children = objectChildren;\n }\n\n var root = new Node(data),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n while (node = nodes.pop()) {\n if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n node.children = childs;\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = childs[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n return d.children;\n}\n\nfunction mapChildren(d) {\n return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n if (node.data.value !== undefined) node.value = node.data.value;\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n find: node_find,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy,\n [Symbol.iterator]: node_iterator\n};\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], next = [], children, i, n, index = -1;\n while (node = nodes.pop()) {\n next.push(node);\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n }\n while (node = next.pop()) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], children, i, index = -1;\n while (node = nodes.pop()) {\n callback.call(that, node, ++index, this);\n if (children = node.children) {\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n }\n return this;\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n if (callback.call(that, node, ++index, this)) {\n return node;\n }\n }\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","export default function*() {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n yield node;\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n }\n } while (next.length);\n}\n","function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose.js\");\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutProperties;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","'use strict';\n\n// Found this seed-based random generator somewhere\n// Based on The Central Randomizer 1.3 (C) 1997 by Paul Houle (houle@msc.cornell.edu)\n\nvar seed = 1;\n\n/**\n * return a random number based on a seed\n * @param seed\n * @returns {number}\n */\nfunction getNextValue() {\n seed = (seed * 9301 + 49297) % 233280;\n return seed/(233280.0);\n}\n\nfunction setSeed(_seed_) {\n seed = _seed_;\n}\n\nmodule.exports = {\n nextValue: getNextValue,\n seed: setSeed\n};\n","'use strict';\n\nvar randomFromSeed = require('./random/random-from-seed');\n\nvar ORIGINAL = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-';\nvar alphabet;\nvar previousSeed;\n\nvar shuffled;\n\nfunction reset() {\n shuffled = false;\n}\n\nfunction setCharacters(_alphabet_) {\n if (!_alphabet_) {\n if (alphabet !== ORIGINAL) {\n alphabet = ORIGINAL;\n reset();\n }\n return;\n }\n\n if (_alphabet_ === alphabet) {\n return;\n }\n\n if (_alphabet_.length !== ORIGINAL.length) {\n throw new Error('Custom alphabet for shortid must be ' + ORIGINAL.length + ' unique characters. You submitted ' + _alphabet_.length + ' characters: ' + _alphabet_);\n }\n\n var unique = _alphabet_.split('').filter(function(item, ind, arr){\n return ind !== arr.lastIndexOf(item);\n });\n\n if (unique.length) {\n throw new Error('Custom alphabet for shortid must be ' + ORIGINAL.length + ' unique characters. These characters were not unique: ' + unique.join(', '));\n }\n\n alphabet = _alphabet_;\n reset();\n}\n\nfunction characters(_alphabet_) {\n setCharacters(_alphabet_);\n return alphabet;\n}\n\nfunction setSeed(seed) {\n randomFromSeed.seed(seed);\n if (previousSeed !== seed) {\n reset();\n previousSeed = seed;\n }\n}\n\nfunction shuffle() {\n if (!alphabet) {\n setCharacters(ORIGINAL);\n }\n\n var sourceArray = alphabet.split('');\n var targetArray = [];\n var r = randomFromSeed.nextValue();\n var characterIndex;\n\n while (sourceArray.length > 0) {\n r = randomFromSeed.nextValue();\n characterIndex = Math.floor(r * sourceArray.length);\n targetArray.push(sourceArray.splice(characterIndex, 1)[0]);\n }\n return targetArray.join('');\n}\n\nfunction getShuffled() {\n if (shuffled) {\n return shuffled;\n }\n shuffled = shuffle();\n return shuffled;\n}\n\n/**\n * lookup shuffled letter\n * @param index\n * @returns {string}\n */\nfunction lookup(index) {\n var alphabetShuffled = getShuffled();\n return alphabetShuffled[index];\n}\n\nfunction get () {\n return alphabet || ORIGINAL;\n}\n\nmodule.exports = {\n get: get,\n characters: characters,\n seed: setSeed,\n lookup: lookup,\n shuffled: getShuffled\n};\n","'use strict';\n\nvar generate = require('./generate');\nvar alphabet = require('./alphabet');\n\n// Ignore all milliseconds before a certain time to reduce the size of the date entropy without sacrificing uniqueness.\n// This number should be updated every year or so to keep the generated id short.\n// To regenerate `new Date() - 0` and bump the version. Always bump the version!\nvar REDUCE_TIME = 1567752802062;\n\n// don't change unless we change the algos or REDUCE_TIME\n// must be an integer and less than 16\nvar version = 7;\n\n// Counter is used when shortid is called multiple times in one second.\nvar counter;\n\n// Remember the last time shortid was called in case counter is needed.\nvar previousSeconds;\n\n/**\n * Generate unique id\n * Returns string id\n */\nfunction build(clusterWorkerId) {\n var str = '';\n\n var seconds = Math.floor((Date.now() - REDUCE_TIME) * 0.001);\n\n if (seconds === previousSeconds) {\n counter++;\n } else {\n counter = 0;\n previousSeconds = seconds;\n }\n\n str = str + generate(version);\n str = str + generate(clusterWorkerId);\n if (counter > 0) {\n str = str + generate(counter);\n }\n str = str + generate(seconds);\n return str;\n}\n\nmodule.exports = build;\n","'use strict';\n\nvar crypto = typeof window === 'object' && (window.crypto || window.msCrypto); // IE 11 uses window.msCrypto\n\nvar randomByte;\n\nif (!crypto || !crypto.getRandomValues) {\n randomByte = function(size) {\n var bytes = [];\n for (var i = 0; i < size; i++) {\n bytes.push(Math.floor(Math.random() * 256));\n }\n return bytes;\n };\n} else {\n randomByte = function(size) {\n return crypto.getRandomValues(new Uint8Array(size));\n };\n}\n\nmodule.exports = randomByte;\n","// This file replaces `format.js` in bundlers like webpack or Rollup,\n// according to `browser` config in `package.json`.\n\nmodule.exports = function (random, alphabet, size) {\n // We can’t use bytes bigger than the alphabet. To make bytes values closer\n // to the alphabet, we apply bitmask on them. We look for the closest\n // `2 ** x - 1` number, which will be bigger than alphabet size. If we have\n // 30 symbols in the alphabet, we will take 31 (00011111).\n // We do not use faster Math.clz32, because it is not available in browsers.\n var mask = (2 << Math.log(alphabet.length - 1) / Math.LN2) - 1\n // Bitmask is not a perfect solution (in our example it will pass 31 bytes,\n // which is bigger than the alphabet). As a result, we will need more bytes,\n // than ID size, because we will refuse bytes bigger than the alphabet.\n\n // Every hardware random generator call is costly,\n // because we need to wait for entropy collection. This is why often it will\n // be faster to ask for few extra bytes in advance, to avoid additional calls.\n\n // Here we calculate how many random bytes should we call in advance.\n // It depends on ID length, mask / alphabet size and magic number 1.6\n // (which was selected according benchmarks).\n\n // -~f => Math.ceil(f) if n is float number\n // -~i => i + 1 if n is integer number\n var step = -~(1.6 * mask * size / alphabet.length)\n var id = ''\n\n while (true) {\n var bytes = random(step)\n // Compact alternative for `for (var i = 0; i < step; i++)`\n var i = step\n while (i--) {\n // If random byte is bigger than alphabet even after bitmask,\n // we refuse it by `|| ''`.\n id += alphabet[bytes[i] & mask] || ''\n // More compact than `id.length + 1 === size`\n if (id.length === +size) return id\n }\n }\n}\n","'use strict';\n\nvar alphabet = require('./alphabet');\nvar random = require('./random/random-byte');\nvar format = require('nanoid/format');\n\nfunction generate(number) {\n var loopCounter = 0;\n var done;\n\n var str = '';\n\n while (!done) {\n str = str + format(random, alphabet.get(), 1);\n done = number < (Math.pow(16, loopCounter + 1 ) );\n loopCounter++;\n }\n return str;\n}\n\nmodule.exports = generate;\n","'use strict';\nvar alphabet = require('./alphabet');\n\nfunction isShortId(id) {\n if (!id || typeof id !== 'string' || id.length < 6 ) {\n return false;\n }\n\n var nonAlphabetic = new RegExp('[^' +\n alphabet.get().replace(/[|\\\\{}()[\\]^$+*?.-]/g, '\\\\$&') +\n ']');\n return !nonAlphabetic.test(id);\n}\n\nmodule.exports = isShortId;\n","'use strict';\n\nvar alphabet = require('./alphabet');\nvar build = require('./build');\nvar isValid = require('./is-valid');\n\n// if you are using cluster or multiple servers use this to make each instance\n// has a unique value for worker\n// Note: I don't know if this is automatically set when using third\n// party cluster solutions such as pm2.\nvar clusterWorkerId = require('./util/cluster-worker-id') || 0;\n\n/**\n * Set the seed.\n * Highly recommended if you don't want people to try to figure out your id schema.\n * exposed as shortid.seed(int)\n * @param seed Integer value to seed the random alphabet. ALWAYS USE THE SAME SEED or you might get overlaps.\n */\nfunction seed(seedValue) {\n alphabet.seed(seedValue);\n return module.exports;\n}\n\n/**\n * Set the cluster worker or machine id\n * exposed as shortid.worker(int)\n * @param workerId worker must be positive integer. Number less than 16 is recommended.\n * returns shortid module so it can be chained.\n */\nfunction worker(workerId) {\n clusterWorkerId = workerId;\n return module.exports;\n}\n\n/**\n *\n * sets new characters to use in the alphabet\n * returns the shuffled alphabet\n */\nfunction characters(newCharacters) {\n if (newCharacters !== undefined) {\n alphabet.characters(newCharacters);\n }\n\n return alphabet.shuffled();\n}\n\n/**\n * Generate unique id\n * Returns string id\n */\nfunction generate() {\n return build(clusterWorkerId);\n}\n\n// Export all other functions as properties of the generate function\nmodule.exports = generate;\nmodule.exports.generate = generate;\nmodule.exports.seed = seed;\nmodule.exports.worker = worker;\nmodule.exports.characters = characters;\nmodule.exports.isValid = isValid;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FileLocation = exports.UriLocation = exports.UriLocationRaw = exports.BlobLocation = exports.LocalPathLocation = exports.Region = exports.NoAssemblyRegion = exports.PropTypes = exports.ElementId = void 0;\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _shortid = _interopRequireDefault(require(\"shortid\"));\n\nvar _mobxStateTree = require(\"mobx-state-tree\");\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _mobxReact = require(\"mobx-react\");\n\nvar _excluded = [\"baseUri\"];\n\nvar ElementId = _mobxStateTree.types.optional(_mobxStateTree.types.identifier, _shortid.default.generate); // PropTypes that are useful when working with instances of these in react components\n\n\nexports.ElementId = ElementId;\nvar PropTypes = {\n Region: _propTypes.default.shape({\n refName: _propTypes.default.string.isRequired,\n start: _propTypes.default.number.isRequired,\n end: _propTypes.default.number.isRequired\n }),\n ConfigSchema: _mobxReact.PropTypes.objectOrObservableObject,\n Feature: _propTypes.default.shape({\n get: _propTypes.default.func.isRequired,\n id: _propTypes.default.func.isRequired\n })\n};\nexports.PropTypes = PropTypes;\n\nvar NoAssemblyRegion = _mobxStateTree.types.model('NoAssemblyRegion', {\n refName: _mobxStateTree.types.string,\n start: _mobxStateTree.types.number,\n end: _mobxStateTree.types.number,\n reversed: _mobxStateTree.types.optional(_mobxStateTree.types.boolean, false)\n}).actions(function (self) {\n return {\n setRefName: function setRefName(newRefName) {\n self.refName = newRefName;\n }\n };\n});\n\nexports.NoAssemblyRegion = NoAssemblyRegion;\n\nvar Region = _mobxStateTree.types.compose('Region', NoAssemblyRegion, _mobxStateTree.types.model({\n assemblyName: _mobxStateTree.types.string\n}));\n\nexports.Region = Region;\n\nvar LocalPathLocation = _mobxStateTree.types.model('LocalPathLocation', {\n localPath: _mobxStateTree.types.string // TODO: refine\n\n});\n\nexports.LocalPathLocation = LocalPathLocation;\n\nvar BlobLocation = _mobxStateTree.types.model('BlobLocation', {\n name: _mobxStateTree.types.string,\n // TODO: refine\n blobId: _mobxStateTree.types.string\n});\n\nexports.BlobLocation = BlobLocation;\n\nvar UriLocationRaw = _mobxStateTree.types.model('UriLocation', {\n uri: _mobxStateTree.types.string,\n // TODO: refine\n baseUri: _mobxStateTree.types.maybe(_mobxStateTree.types.string)\n});\n\nexports.UriLocationRaw = UriLocationRaw;\n\nvar UriLocation = _mobxStateTree.types.snapshotProcessor(UriLocationRaw, {\n postProcessor: function postProcessor(snap) {\n var baseUri = snap.baseUri,\n rest = (0, _objectWithoutProperties2.default)(snap, _excluded);\n\n if (!baseUri) {\n return rest;\n }\n\n return snap;\n }\n});\n\nexports.UriLocation = UriLocation;\n\nvar FileLocation = _mobxStateTree.types.union(LocalPathLocation, UriLocation, BlobLocation);\n\nexports.FileLocation = FileLocation;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _mobxStateTree = require(\"mobx-state-tree\");\n\nvar _mst = require(\"../../util/types/mst\");\n\nvar BaseViewModel = _mobxStateTree.types.model('BaseView', {\n id: _mst.ElementId,\n displayName: _mobxStateTree.types.maybe(_mobxStateTree.types.string)\n}).volatile(function () {\n return (\n /* self */\n {\n width: 800\n }\n );\n}).views(function () {\n return (\n /* self */\n {\n menuItems: function menuItems() {\n return [];\n }\n }\n );\n}).actions(function (self) {\n return {\n setDisplayName: function setDisplayName(name) {\n self.displayName = name;\n },\n setWidth: function setWidth(newWidth) {\n self.width = newWidth;\n }\n };\n});\n\nvar _default = BaseViewModel; // eslint-disable-next-line @typescript-eslint/no-empty-interface,@typescript-eslint/interface-name-prefix\n\nexports.default = _default;","const Stockholm = function() {\n let obj = { gf: {}, // gf[tag] = ARRAY\n gc: {}, // gc[tag] = STRING\n gs: {}, // gs[tag][seqname] = ARRAY\n gr: {}, // gr[tag][seqname] = STRING\n seqname: [], // optional, specify ordering of rows\n seqdata: {} // seqdata[seqname] = STRING\n }\n Object.keys(obj).forEach ((prop) => this[prop] = obj[prop])\n return this\n}\n\nconst formatStartRegex = /^# STOCKHOLM 1.0/;\nconst formatEndRegex = /^\\/\\/\\s*$/;\nconst gfRegex = /^#=GF\\s+(\\S+)\\s+(.*?)\\s*$/;\nconst gcRegex = /^#=GC\\s+(\\S+)\\s+(.*?)\\s*$/;\nconst gsRegex = /^#=GS\\s+(\\S+)\\s+(\\S+)\\s+(.*?)\\s*$/;\nconst grRegex = /^#=GR\\s+(\\S+)\\s+(\\S+)\\s+(.*?)\\s*$/;\nconst lineRegex = /^\\s*(\\S+)\\s+(\\S+)\\s*$/;\nconst nonwhiteRegex = /\\S/;\n\nconst noFormatStart = \"No format header: # STOCKHOLM 1.0\";\nconst noFormatEnd = \"No format footer: //\";\nconst badLine = \"Malformed line\";\nconst atLine = (n) => \"(At line \" + (n+1) + \") \";\n\nconst sniff = (text) => formatStartRegex.test (text);\n\nconst validate = (text) => {\n try {\n parseAll (text, { strict: true })\n } catch (e) {\n return false\n }\n return true\n}\n\nconst error = (err) => { throw new Error (err); }\nconst warning = (err) => console.warn(err);\n\nconst parseAll = (text, opts) => {\n opts = opts || {}\n const maybeWarning = opts.quiet ? (() => null) : warning;\n const maybeError = opts.strict ? error : maybeWarning;\n let db = [], stock = null\n const lines = text.split(\"\\n\")\n lines.forEach ((line, n) => {\n const makeStock = () => {\n if (!stock) {\n maybeError (atLine(n) + noFormatStart);\n stock = new Stockholm();\n }\n };\n let match;\n if (formatStartRegex.test(line)) {\n if (stock) maybeError (atLine(n) + noFormatEnd);\n stock = new Stockholm();\n } else if (formatEndRegex.test(line)) {\n if (stock)\n db.push (stock);\n else\n maybeError (atLine(n) + noFormatStart);\n stock = null;\n } else if (match = gfRegex.exec(line)) {\n makeStock();\n stock.gf[match[1]] = stock.gf[match[1]] || [];\n stock.gf[match[1]].push (match[2]);\n } else if (match = gcRegex.exec(line)) {\n makeStock();\n stock.gc[match[1]] = stock.gc[match[1]] || '';\n stock.gc[match[1]] += match[2];\n } else if (match = gsRegex.exec(line)) {\n makeStock();\n stock.gs[match[2]] = stock.gs[match[2]] || {};\n stock.gs[match[2]][match[1]] = stock.gs[match[2]][match[1]] || [];\n stock.gs[match[2]][match[1]].push (match[3]);\n } else if (match = grRegex.exec(line)) {\n makeStock();\n stock.gr[match[2]] = stock.gr[match[2]] || {};\n stock.gr[match[2]][match[1]] = stock.gr[match[2]][match[1]] || '';\n stock.gr[match[2]][match[1]] += match[3];\n } else if (match = lineRegex.exec(line)) {\n makeStock();\n if (!stock.seqdata[match[1]]) {\n stock.seqdata[match[1]] = '';\n stock.seqname.push (match[1]);\n }\n stock.seqdata[match[1]] += match[2];\n } else if (nonwhiteRegex.test (line)) {\n error (atLine(n) + badLine);\n }\n })\n if (stock) {\n maybeError (\"Warning: no end line //\");\n db.push (stock);\n }\n return db;\n}\n\nconst parse = (text, opts) => {\n const db = parseAll (text, opts);\n if (db.length === 0)\n error (\"No alignments found\");\n if (db.length > 1)\n error (\"More than one alignment found\");\n return db[0];\n}\n\nconst fromSeqIndex = (seqdata, names) => {\n let stock = new Stockholm()\n names = names || Object.keys(seqdata) // specifying order is optional\n names.forEach ((name) => stock.addRow (name, seqdata[name]))\n return stock\n}\n\nconst fromRowList = (array) => {\n let stock = new Stockholm()\n array.forEach ((row) => stock.addRow (row[0], row[1]))\n return stock\n}\n\nStockholm.prototype.rows = function() {\n return this.seqname.length\n}\n\nStockholm.prototype.columns = function() {\n let cols = 0\n this.seqname.forEach ((name) => { cols = Math.max (cols, this.seqdata[name].length) })\n Object.keys(this.gr).forEach ((tag) => Object.keys(this.gr[tag]).forEach ((name) => {\n cols = Math.max (cols, this.gr[tag][name].length)\n }))\n return cols\n}\n\nStockholm.prototype.allNames = function() {\n let isName = {},\n names = [],\n addName = (name) => { if (!isName[name]) { isName[name] = true; names.push (name) } },\n addNames = (list) => list.forEach (addName);\n addNames (this.seqname);\n addNames (Object.keys (this.seqdata)); // just in case seqdata has been independently modified\n Object.keys(this.gr).forEach ((tag) => addNames (Object.keys(this.gr[tag])));\n Object.keys(this.gs).forEach ((tag) => addNames (Object.keys(this.gs[tag])));\n return names\n}\n\nStockholm.prototype.allTags = function() {\n let isTag = {}\n const addTags = (obj) => Object.keys(obj).forEach ((tag) => isTag[tag] = true)\n addTags (this.gc)\n addTags (this.gf)\n addTags (this.gr)\n addTags (this.gs)\n return Object.keys(isTag).sort()\n}\n\nStockholm.prototype.addRow = function (name, data) {\n if (this.seqdata[name])\n error (\"Duplicate row name\")\n this.seqname.push (name)\n this.seqdata[name] = data || ''\n return this\n}\n\nStockholm.prototype.deleteRow = function (name) {\n if (!this.seqdata[name])\n error (\"Row not found\")\n this.seqname = this.seqname.filter ((n) => n !== name);\n delete this.seqdata[name];\n return this\n}\n\nfunction leftPad (text, width) {\n while (text.length < width)\n text = ' ' + text\n return text\n}\n\nfunction rightPad (text, width) {\n while (text.length < width)\n text = text + ' '\n return text\n}\n\nfunction space (width) {\n return leftPad (\"\", width)\n}\n\nStockholm.prototype.toString = function (opts) {\n opts = opts || { width: 80, indentNames: false }\n const names = this.allNames(), cols = this.columns()\n const nameWidth = Math.max.apply (null, names.map ((name) => name.length).concat([0]))\n const tagWidth = Math.max.apply (null, this.allTags().map ((tag) => tag.length).concat([0]))\n const seqIndent = tagWidth ? (tagWidth + 6) : 0;\n const width = opts.width ? Math.max (1, opts.width - nameWidth - seqIndent - 1) : cols\n const pad = opts.indentNames ? leftPad : rightPad\n const padTagName = (opts.indentNames\n ? ((tag, name) => leftPad(tag,tagWidth) + \" \" + leftPad(name,nameWidth))\n : ((tag, name) => rightPad(tag+\" \"+name,tagWidth+nameWidth+1)))\n let offsets = [0]\n for (let offset = width; offset < cols; offset += width)\n offsets.push (offset)\n return \"# STOCKHOLM 1.0\\n\"\n + Object.keys(this.gf).sort().map (tag => this.gf[tag].map((line) => \"#=GF \" + pad(tag,tagWidth) + \" \" + line + \"\\n\").join('')).join('')\n + Object.keys(this.gs).sort().map (tag => Object.keys(this.gs[tag]).map((name) => this.gs[tag][name].map ((line) => \"#=GS \" + padTagName(tag,name) + \" \" + line + \"\\n\").join('')).join('')).join('')\n + offsets.map ((offset) =>\n Object.keys(this.gc).sort().map (tag => \"#=GC \" + pad(tag,tagWidth) + space(nameWidth+2) + this.gc[tag].substr(offset,width) + \"\\n\").join('')\n + names.map ((name) => Object.keys(this.gr).filter ((tag) => this.gr[tag][name]).sort().map ((tag) => \"#=GR \" + padTagName(tag,name) + \" \" + this.gr[tag][name].substr(offset,width) + \"\\n\").join('')\n + (this.seqdata[name]\n ? (pad(name,nameWidth+seqIndent)\n + \" \" + this.seqdata[name].substr(offset,width) + \"\\n\")\n : '')).join('')).join(\"\\n\")\n + \"//\\n\"\n}\n\nStockholm.prototype.toFasta = function (opts) {\n opts = opts || { width: 80 }\n const cols = this.columns()\n const width = opts.width || cols\n let offsets = [0]\n for (let offset = width; offset < cols; offset += width)\n offsets.push (offset)\n return this.allNames()\n .map ((name) =>\n (this.seqdata[name]\n ? (\">\" + name + \"\\n\"\n + offsets.map ((offset) => this.seqdata[name].substr (offset, width) + \"\\n\").join(''))\n : ''))\n .join('')\n}\n\nStockholm.prototype.toRowList = function (opts) {\n return this.allNames()\n .filter ((name) => this.seqdata[name])\n .map ((name) => [name, this.seqdata[name]])\n}\n\nif (typeof(module) !== 'undefined')\n module.exports = { sniff, validate, parse, parseAll, fromSeqIndex, fromRowList, Stockholm }\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseBlocks = exports.parseBlock = exports.getSeqBounds = exports.getFirstNonEmptyLine = exports.parseHeader = exports.parseVersion = void 0;\nfunction parseVersion(line) {\n const res = line.match(/\\(?(\\d+(\\.\\d+)+)\\)?/);\n return res && res.length > 1 ? res[1] : \"\";\n}\nexports.parseVersion = parseVersion;\nfunction parseHeader(info) {\n const knownHeaders = [\"CLUSTAL\", \"PROBCONS\", \"MUSCLE\", \"MSAPROBS\", \"Kalign\"];\n if (!knownHeaders.find((l) => info.startsWith(l))) {\n console.warn(`${info} is not a known CLUSTAL header: ${knownHeaders.join(\",\")}, proceeding but could indicate an issue`);\n }\n const version = parseVersion(info);\n return { info, version };\n}\nexports.parseHeader = parseHeader;\nfunction getFirstNonEmptyLine(arr) {\n // There should be two blank lines after the header line\n let line = arr.next();\n while (!line.done && line.value.trim() === \"\") {\n line = arr.next();\n }\n return line.value;\n}\nexports.getFirstNonEmptyLine = getFirstNonEmptyLine;\nfunction getSeqBounds(line) {\n const fields = line.split(/\\s+/);\n const temp = line.slice(fields[0].length);\n const s = fields[0].length + temp.indexOf(fields[1]);\n const e = s + fields[1].length;\n return [s, e];\n}\nexports.getSeqBounds = getSeqBounds;\n// Use the first block to get the sequence identifiers\nfunction parseBlock(arr) {\n let line = getFirstNonEmptyLine(arr);\n const block = [];\n let consensusLine = \"\";\n if (!line)\n return undefined;\n while (line) {\n if (line[0] !== \" \")\n block.push(line);\n else\n consensusLine = line;\n line = arr.next().value;\n }\n const [start, end] = getSeqBounds(block[0]);\n const fields = block.map((s) => s.split(/\\s+/));\n const ids = fields.map((s) => s[0]);\n const seqs = block.map((s) => s.slice(start, end));\n let consensus = consensusLine.slice(start, end);\n // handle if the consensus trailing whitespace got trimmed\n const remainder = seqs[0].length - consensus.length;\n if (remainder) {\n consensus += \" \".repeat(remainder);\n }\n return { ids, seqs, consensus };\n}\nexports.parseBlock = parseBlock;\nfunction parseBlocks(arr) {\n let block;\n const res = parseBlock(arr);\n if (res !== undefined) {\n while ((block = parseBlock(arr))) {\n for (let i = 0; i < block.seqs.length; i++) {\n res.seqs[i] += block.seqs[i];\n }\n res.consensus += block.consensus;\n }\n }\n return res;\n}\nexports.parseBlocks = parseBlocks;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parse = exports.parseIter = void 0;\nconst util_1 = require(\"./util\");\nfunction parseIter(arr) {\n const line = util_1.getFirstNonEmptyLine(arr);\n if (!line)\n throw new Error(\"Empty file received\");\n const header = util_1.parseHeader(line);\n const res = util_1.parseBlocks(arr);\n if (res === undefined)\n throw new Error(\"No blocks parsed\");\n const alns = res.seqs.map((n, index) => ({ id: res.ids[index], seq: n }));\n const { consensus } = res;\n if (consensus.length != alns[0].seq.length) {\n throw new Error(`Consensus length != sequence length. Con ${consensus.length} seq ${alns[0].seq.length}`);\n }\n return { consensus, alns, header };\n}\nexports.parseIter = parseIter;\nfunction parse(contents) {\n const iter = contents.split(\"\\n\")[Symbol.iterator]();\n return parseIter(iter);\n}\nexports.parse = parse;\n","import { parse } from 'clustal-js';\nvar ClustalMSA = /** @class */ (function () {\n function ClustalMSA(text) {\n this.MSA = parse(text);\n }\n ClustalMSA.prototype.getMSA = function () {\n return this.MSA;\n };\n ClustalMSA.prototype.getRow = function (name) {\n var _a;\n return (_a = this.MSA.alns.find(function (aln) { return aln.id === name; })) === null || _a === void 0 ? void 0 : _a.seq.split('');\n };\n ClustalMSA.prototype.getWidth = function () {\n return this.MSA.alns[0].seq.length;\n };\n ClustalMSA.prototype.getDetails = function () {\n return this.MSA.header;\n };\n ClustalMSA.prototype.getNames = function () {\n return this.MSA.alns.map(function (aln) { return aln.id; });\n };\n ClustalMSA.prototype.getStructures = function () {\n return {};\n };\n Object.defineProperty(ClustalMSA.prototype, \"alignmentNames\", {\n get: function () {\n return [];\n },\n enumerable: false,\n configurable: true\n });\n ClustalMSA.prototype.getTree = function () {\n return {\n id: 'root',\n noTree: true,\n branchset: this.getNames().map(function (name) { return ({ id: name, name: name }); }),\n };\n };\n Object.defineProperty(ClustalMSA.prototype, \"seqConsensus\", {\n get: function () {\n return this.MSA.consensus;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ClustalMSA.prototype, \"secondaryStructureConsensus\", {\n get: function () {\n return undefined;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ClustalMSA.prototype, \"tracks\", {\n get: function () {\n var _a;\n return ((_a = this.seqConsensus) === null || _a === void 0 ? void 0 : _a.trim())\n ? [\n {\n id: 'seqConsensus',\n name: 'Sequence consensus',\n data: this.seqConsensus,\n customColorScheme: {\n '*': 'white',\n ':': 'grey',\n '.': 'darkgrey',\n ' ': 'black',\n },\n },\n ]\n : [];\n },\n enumerable: false,\n configurable: true\n });\n return ClustalMSA;\n}());\nexport default ClustalMSA;\n","/**\n * Newick format parser in JavaScript.\n *\n * Copyright (c) Jason Davies 2010.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *\n * Example tree (from http://en.wikipedia.org/wiki/Newick_format):\n *\n * +--0.1--A\n * F-----0.2-----B +-------0.3----C\n * +------------------0.5-----E\n * +---------0.4------D\n *\n * Newick format:\n * (A:0.1,B:0.2,(C:0.3,D:0.4)E:0.5)F;\n *\n * Converted to JSON:\n * {\n * name: \"F\",\n * branchset: [\n * {name: \"A\", length: 0.1},\n * {name: \"B\", length: 0.2},\n * {\n * name: \"E\",\n * length: 0.5,\n * branchset: [\n * {name: \"C\", length: 0.3},\n * {name: \"D\", length: 0.4}\n * ]\n * }\n * ]\n * }\n *\n * Converted to JSON, but with no names or lengths:\n * {\n * branchset: [\n * {}, {}, {\n * branchset: [{}, {}]\n * }\n * ]\n * }\n */\nexport default function parse(s) {\n var ancestors = [];\n var tree = {};\n var tokens = s.split(/\\s*(;|\\(|\\)|,|:)\\s*/);\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var subtree = {};\n switch (token) {\n case '(': // new branchset\n tree.branchset = [subtree];\n ancestors.push(tree);\n tree = subtree;\n break;\n case ',': // another branch\n ancestors[ancestors.length - 1].branchset.push(subtree);\n tree = subtree;\n break;\n case ')': // optional name next\n tree = ancestors.pop();\n break;\n case ':': // optional length next\n break;\n default: {\n var x = tokens[i - 1];\n if (x === ')' || x === '(' || x === ',') {\n tree.name = token;\n }\n else if (x === ':') {\n tree.length = parseFloat(token);\n }\n }\n }\n }\n return tree;\n}\n","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport Stockholm from 'stockholm-js';\nimport parseNewick from '../parseNewick';\nimport { generateNodeIds } from '../util';\nvar StockholmMSA = /** @class */ (function () {\n function StockholmMSA(text, currentAlignment) {\n var res = Stockholm.parseAll(text);\n this.data = res;\n this.MSA = res[currentAlignment];\n }\n StockholmMSA.prototype.getMSA = function () {\n return this.MSA;\n };\n StockholmMSA.prototype.getRow = function (name) {\n var _a, _b;\n return (_b = (_a = this.MSA) === null || _a === void 0 ? void 0 : _a.seqdata[name]) === null || _b === void 0 ? void 0 : _b.split('');\n };\n StockholmMSA.prototype.getWidth = function () {\n var _a;\n var name = Object.keys((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.seqdata)[0];\n return this.getRow(name).length;\n };\n Object.defineProperty(StockholmMSA.prototype, \"alignmentNames\", {\n get: function () {\n return this.data.map(function (aln, index) { var _a; return ((_a = aln.gf.DE) === null || _a === void 0 ? void 0 : _a[0]) || \"Alignment \" + (index + 1); });\n },\n enumerable: false,\n configurable: true\n });\n StockholmMSA.prototype.getDetails = function () {\n var _a, _b;\n return {\n General: this.MSA.gf,\n Accessions: (_a = this.MSA.gs) === null || _a === void 0 ? void 0 : _a.AC,\n Dbxref: (_b = this.MSA.gs) === null || _b === void 0 ? void 0 : _b.DR,\n };\n };\n StockholmMSA.prototype.getRowDetails = function (rowName) {\n var _a, _b;\n return {\n name: rowName,\n accession: (_a = this.MSA.gs) === null || _a === void 0 ? void 0 : _a.AC[rowName],\n dbxref: (_b = this.MSA.gs) === null || _b === void 0 ? void 0 : _b.DR[rowName],\n };\n };\n StockholmMSA.prototype.getNames = function () {\n return Object.keys(this.MSA.seqdata);\n };\n StockholmMSA.prototype.getSeqCoords = function () { };\n StockholmMSA.prototype.getStructures = function () {\n var _a;\n var pdbRegex = /PDB; +(\\S+) +(\\S); ([0-9]+)-([0-9]+)/;\n var ent = this.MSA;\n return Object.entries(((_a = ent.gs) === null || _a === void 0 ? void 0 : _a.DR) || {})\n .map(function (_a) {\n var id = _a[0], dr = _a[1];\n return [id, pdbRegex.exec(dr)];\n })\n .filter(function (item) { return !!item[1]; })\n .map(function (_a) {\n var id = _a[0], match = _a[1];\n var pdb = match[1].toLowerCase();\n var chain = match[2];\n var startPos = +match[3];\n var endPos = +match[4];\n return { id: id, pdb: pdb, chain: chain, startPos: startPos, endPos: endPos };\n })\n .reduce(function (a, b) {\n var id = b.id, rest = __rest(b, [\"id\"]);\n if (!a[id]) {\n a[id] = [];\n }\n a[id].push(rest);\n return a;\n }, {});\n };\n StockholmMSA.prototype.getTree = function () {\n var _a, _b, _c;\n var tree = (_c = (_b = (_a = this.MSA) === null || _a === void 0 ? void 0 : _a.gf) === null || _b === void 0 ? void 0 : _b.NH) === null || _c === void 0 ? void 0 : _c[0];\n return tree\n ? generateNodeIds(parseNewick(tree))\n : {\n id: 'root',\n noTree: true,\n branchset: this.getNames().map(function (name) { return ({\n id: name,\n name: name,\n }); }),\n };\n };\n Object.defineProperty(StockholmMSA.prototype, \"seqConsensus\", {\n get: function () {\n var _a;\n return (_a = this.MSA.gc) === null || _a === void 0 ? void 0 : _a.seq_cons;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StockholmMSA.prototype, \"secondaryStructureConsensus\", {\n get: function () {\n var _a;\n return (_a = this.MSA.gc) === null || _a === void 0 ? void 0 : _a.SS_cons;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StockholmMSA.prototype, \"tracks\", {\n get: function () {\n return [\n {\n id: 'seqConsensus',\n name: 'Sequence consensus',\n data: this.seqConsensus,\n customColorScheme: {},\n },\n {\n id: 'secondaryStruct',\n name: 'Secondary-structure',\n data: this.secondaryStructureConsensus,\n customColorScheme: {\n '>': 'pink',\n '<': 'lightblue',\n },\n },\n ];\n },\n enumerable: false,\n configurable: true\n });\n return StockholmMSA;\n}());\nexport default StockholmMSA;\n","var FastaMSA = /** @class */ (function () {\n function FastaMSA(text) {\n var seq = {};\n var name = '';\n var re = /^>(\\S+)/;\n text.split('\\n').forEach(function (line) {\n var match = re.exec(line);\n if (match) {\n seq[(name = match[1])] = '';\n }\n else if (name) {\n seq[name] = seq[name] + line.replace(/[ \\t]/g, '');\n }\n });\n this.MSA = { seqdata: seq };\n }\n FastaMSA.prototype.getMSA = function () {\n return this.MSA;\n };\n FastaMSA.prototype.getNames = function () {\n return Object.keys(this.MSA.seqdata);\n };\n FastaMSA.prototype.getRow = function (name) {\n var _a, _b;\n return (_b = (_a = this.MSA) === null || _a === void 0 ? void 0 : _a.seqdata[name]) === null || _b === void 0 ? void 0 : _b.split('');\n };\n FastaMSA.prototype.getWidth = function () {\n var _a;\n var name = Object.keys((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.seqdata)[0];\n return this.getRow(name).length;\n };\n FastaMSA.prototype.getStructures = function () {\n return {};\n };\n Object.defineProperty(FastaMSA.prototype, \"alignmentNames\", {\n get: function () {\n return [];\n },\n enumerable: false,\n configurable: true\n });\n FastaMSA.prototype.getDetails = function () {\n return {};\n };\n FastaMSA.prototype.getTree = function () {\n return {\n id: 'root',\n noTree: true,\n branchset: this.getNames().map(function (name) { return ({\n id: name,\n name: name,\n }); }),\n };\n };\n Object.defineProperty(FastaMSA.prototype, \"seqConsensus\", {\n get: function () {\n return undefined;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FastaMSA.prototype, \"secondaryStructureConsensus\", {\n get: function () {\n return undefined;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FastaMSA.prototype, \"tracks\", {\n get: function () {\n return [];\n },\n enumerable: false,\n configurable: true\n });\n return FastaMSA;\n}());\nexport default FastaMSA;\n","import React, { useRef, useMemo, useEffect } from 'react';\nimport { useTheme } from '@material-ui/core';\nimport { observer } from 'mobx-react';\nimport { colorContrast } from '../util';\nvar AnnotationBlock = observer(function (_a) {\n var track = _a.track, model = _a.model, offsetX = _a.offsetX;\n var blockSize = model.blockSize, scrollX = model.scrollX, bgColor = model.bgColor, modelColorScheme = model.colorScheme, colWidth = model.colWidth, rowHeight = model.rowHeight, highResScaleFactor = model.highResScaleFactor;\n var _b = track.model, customColorScheme = _b.customColorScheme, data = _b.data;\n var colorScheme = customColorScheme || modelColorScheme;\n var theme = useTheme();\n var ref = useRef(null);\n var contrastScheme = useMemo(function () { return colorContrast(colorScheme, theme); }, [colorScheme, theme]);\n useEffect(function () {\n if (!ref.current) {\n return;\n }\n var ctx = ref.current.getContext('2d');\n if (!ctx) {\n return;\n }\n // this logic is very similar to MSACanvas\n ctx.resetTransform();\n ctx.scale(highResScaleFactor, highResScaleFactor);\n ctx.clearRect(0, 0, blockSize, rowHeight);\n ctx.translate(-offsetX, 0);\n ctx.textAlign = 'center';\n ctx.font = ctx.font.replace(/\\d+px/, Math.max(8, rowHeight - 8) + \"px\");\n var xStart = Math.max(0, Math.floor(offsetX / colWidth));\n var xEnd = Math.max(0, Math.ceil((offsetX + blockSize) / colWidth));\n var str = data === null || data === void 0 ? void 0 : data.slice(xStart, xEnd);\n for (var i = 0; str && i < str.length; i++) {\n var letter = str[i];\n var color = colorScheme[letter.toUpperCase()];\n if (bgColor) {\n var x = i * colWidth + offsetX - (offsetX % colWidth);\n ctx.fillStyle = color || 'white';\n ctx.fillRect(x, 0, colWidth, rowHeight);\n if (rowHeight >= 10 && colWidth >= rowHeight / 2) {\n ctx.fillStyle = contrastScheme[letter.toUpperCase()] || 'black';\n ctx.fillText(letter, x + colWidth / 2, rowHeight / 2 + 1); //+1 to avoid cutoff at height:10\n }\n }\n }\n }, [\n bgColor,\n blockSize,\n colWidth,\n rowHeight,\n offsetX,\n contrastScheme,\n colorScheme,\n highResScaleFactor,\n data,\n ]);\n return (React.createElement(\"canvas\", { ref: ref, height: rowHeight * highResScaleFactor, width: blockSize * highResScaleFactor, style: {\n position: 'absolute',\n left: scrollX + offsetX,\n width: blockSize,\n height: rowHeight,\n } }));\n});\nvar AnnotationTrack = observer(function (_a) {\n var track = _a.track, model = _a.model;\n var blocksX = model.blocksX, msaAreaWidth = model.msaAreaWidth, rowHeight = model.rowHeight;\n return (React.createElement(\"div\", { style: {\n position: 'relative',\n height: rowHeight,\n width: msaAreaWidth,\n overflow: 'hidden',\n } }, blocksX.map(function (bx) { return (React.createElement(AnnotationBlock, { key: bx, track: track, model: model, offsetX: bx })); })));\n});\nexport default AnnotationTrack;\n","import RBush from 'rbush';\nvar Layout = /** @class */ (function () {\n function Layout(_a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.maxHeight, maxHeight = _c === void 0 ? 10000 : _c;\n this.maxHeightReached = false;\n this.rbush = new RBush();\n this.rectangles = new Map();\n this.maxHeight = Math.ceil(maxHeight);\n this.pTotalHeight = 0; // total height, in units of bitmap squares (px/pitchY)\n }\n /**\n * @returns top position for the rect, or Null if laying\n * out the rect would exceed maxHeighe\n */\n Layout.prototype.addRect = function (id, left, right, height, data) {\n // add to rbush\n var existingRecord = this.rectangles.get(id);\n if (existingRecord) {\n return existingRecord.minY;\n }\n var currHeight = 0;\n while (this.rbush.collides({\n minX: left,\n minY: currHeight,\n maxX: right,\n maxY: currHeight + height,\n }) &&\n currHeight <= this.maxHeight) {\n currHeight += 1;\n }\n var record = {\n minX: left,\n minY: currHeight,\n maxX: right,\n maxY: currHeight + height,\n id: id,\n data: data,\n };\n this.rbush.insert(record);\n this.rectangles.set(id, record);\n this.pTotalHeight = Math.max(this.pTotalHeight, currHeight);\n return currHeight;\n };\n Object.defineProperty(Layout.prototype, \"totalHeight\", {\n get: function () {\n return this.pTotalHeight;\n },\n enumerable: false,\n configurable: true\n });\n return Layout;\n}());\nexport default Layout;\n","import React, { useRef, useMemo, useEffect } from 'react';\nimport { observer } from 'mobx-react';\nimport { getSnapshot, isStateTreeNode } from 'mobx-state-tree';\nimport Layout from '../layout';\nvar AnnotationBlock = observer(function (_a) {\n var track = _a.track, model = _a.model, offsetX = _a.offsetX;\n var blockSize = model.blockSize, colWidth = model.colWidth, blanks = model.blanks, rowHeight = model.rowHeight, highResScaleFactor = model.highResScaleFactor, scrollX = model.scrollX;\n var _b = track.model, height = _b.height, features = _b.features, associatedRowName = _b.associatedRowName;\n var feats = isStateTreeNode(features)\n ? getSnapshot(features)\n : features;\n var layout = useMemo(function () {\n var temp = new Layout();\n feats === null || feats === void 0 ? void 0 : feats.forEach(function (feature, index) {\n var start = feature.start, end = feature.end;\n if (associatedRowName) {\n var s = model.rowSpecificBpToPx(associatedRowName, start - 1);\n var e = model.rowSpecificBpToPx(associatedRowName, end);\n temp.addRect(\"\" + index, s, e, rowHeight, feature);\n }\n else {\n var s = model.globalBpToPx(start - 1);\n var e = model.globalBpToPx(end);\n temp.addRect(\"\" + index, s, e, rowHeight, feature);\n }\n });\n return temp;\n }, [rowHeight, feats, associatedRowName, model, blanks]);\n var ref = useRef(null);\n var labelRef = useRef(null);\n var mouseoverRef = useRef(null);\n useEffect(function () {\n if (!ref.current) {\n return;\n }\n var ctx = ref.current.getContext('2d');\n if (!ctx) {\n return;\n }\n ctx.resetTransform();\n ctx.scale(highResScaleFactor, highResScaleFactor);\n ctx.clearRect(0, 0, blockSize, height);\n ctx.translate(-offsetX, 0);\n ctx.textAlign = 'center';\n ctx.font = ctx.font.replace(/\\d+px/, Math.max(8, rowHeight - 8) + \"px\");\n var xStart = Math.max(0, Math.floor(offsetX / colWidth));\n ctx.fillStyle = 'goldenrod';\n layout.rectangles.forEach(function (value) {\n var minX = value.minX, maxX = value.maxX, minY = value.minY, maxY = value.maxY;\n var x1 = (minX - xStart) * colWidth + offsetX - (offsetX % colWidth);\n var x2 = (maxX - xStart) * colWidth + offsetX - (offsetX % colWidth);\n if (x2 - x1 > 0) {\n ctx.fillRect(x1, minY, x2 - x1, (maxY - minY) / 2);\n }\n });\n }, [\n associatedRowName,\n blockSize,\n colWidth,\n layout.rectangles,\n model,\n rowHeight,\n height,\n offsetX,\n highResScaleFactor,\n features,\n blanks,\n ]);\n useEffect(function () {\n if (!labelRef.current) {\n return;\n }\n var ctx = labelRef.current.getContext('2d');\n if (!ctx) {\n return;\n }\n // this logic is very similar to MSACanvas\n ctx.resetTransform();\n ctx.scale(highResScaleFactor, highResScaleFactor);\n ctx.clearRect(0, 0, blockSize, height);\n ctx.translate(-offsetX, 0);\n ctx.textAlign = 'center';\n ctx.font = ctx.font.replace(/\\d+px/, Math.max(8, rowHeight - 8) + \"px\");\n ctx.fillStyle = 'black';\n ctx.textAlign = 'left';\n layout.rectangles.forEach(function (value) {\n var _a, _b, _c, _d;\n var minX = value.minX, maxX = value.maxX, maxY = value.maxY, minY = value.minY;\n var feature = value.data;\n var x1 = minX * colWidth;\n var x2 = maxX * colWidth;\n if (x2 - x1 > 0) {\n var note = (_b = (_a = feature.attributes) === null || _a === void 0 ? void 0 : _a.Note) === null || _b === void 0 ? void 0 : _b[0];\n var name_1 = (_d = (_c = feature.attributes) === null || _c === void 0 ? void 0 : _c.Name) === null || _d === void 0 ? void 0 : _d[0];\n var type = feature.type;\n ctx.fillText([type, name_1, note].filter(function (f) { return !!f; }).join(' - '), Math.max(Math.min(-scrollX, x2), x1), minY + (maxY - minY));\n }\n });\n }, [\n blockSize,\n colWidth,\n scrollX,\n highResScaleFactor,\n height,\n layout.rectangles,\n offsetX,\n features,\n model,\n rowHeight,\n blanks,\n ]);\n return !features ? null : (React.createElement(React.Fragment, null,\n React.createElement(\"canvas\", { ref: ref, height: height * highResScaleFactor, width: blockSize * highResScaleFactor, style: {\n position: 'absolute',\n left: scrollX + offsetX,\n width: blockSize,\n height: height,\n } }),\n React.createElement(\"canvas\", { ref: labelRef, height: height * highResScaleFactor, width: blockSize * highResScaleFactor, style: {\n position: 'absolute',\n left: scrollX + offsetX,\n width: blockSize,\n height: height,\n } }),\n React.createElement(\"canvas\", { ref: mouseoverRef, height: height * highResScaleFactor, width: blockSize * highResScaleFactor, style: {\n position: 'absolute',\n left: scrollX + offsetX,\n width: blockSize,\n height: height,\n } })));\n});\nvar AnnotationTrack = observer(function (_a) {\n var model = _a.model, track = _a.track;\n var blocksX = model.blocksX, msaAreaWidth = model.msaAreaWidth;\n var height = track.model.height;\n return (React.createElement(\"div\", { style: {\n position: 'relative',\n height: height,\n width: msaAreaWidth,\n overflow: 'hidden',\n } }, blocksX.map(function (bx) { return (React.createElement(AnnotationBlock, { track: track, key: bx, model: model, offsetX: bx })); })));\n});\nexport default AnnotationTrack;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { cast, types, addDisposer } from 'mobx-state-tree';\nimport { hierarchy, cluster } from 'd3-hierarchy';\nimport { ascending, max } from 'd3-array';\nimport { FileLocation, ElementId } from '@jbrowse/core/util/types/mst';\nimport { openLocation } from '@jbrowse/core/util/io';\nimport { autorun } from 'mobx';\nimport BaseViewModel from '@jbrowse/core/pluggableElementTypes/models/BaseViewModel';\nimport Stockholm from 'stockholm-js';\nimport ClustalMSA from './parsers/ClustalMSA';\nimport StockholmMSA from './parsers/StockholmMSA';\nimport FastaMSA from './parsers/FastaMSA';\nimport parseNewick from './parseNewick';\nimport colorSchemes from './colorSchemes';\nimport { generateNodeIds } from './util';\nimport TextTrack from './components/TextTrack';\nimport BoxTrack from './components/BoxTrack';\nfunction skipBlanks(blanks, arg) {\n var s = '';\n var b = 0;\n for (var j = 0; j < arg.length; j++) {\n if (j === blanks[b]) {\n b++;\n }\n else {\n s += arg[j];\n }\n }\n return s;\n}\nfunction setBrLength(d, y0, k) {\n var _a;\n //@ts-ignore\n d.len = (y0 += Math.max(d.data.length || 0, 0)) * k;\n (_a = d.children) === null || _a === void 0 ? void 0 : _a.forEach(function (d) {\n setBrLength(d, y0, k);\n });\n}\nfunction maxLength(d) {\n return (d.data.length || 1) + (d.children ? max(d.children, maxLength) : 0);\n}\n// Collapse the node and all it's children, from\n// https://bl.ocks.org/d3noob/43a860bc0024792f8803bba8ca0d5ecd\nfunction collapse(d) {\n if (d.children) {\n //@ts-ignore\n d._children = d.children;\n //@ts-ignore\n d._children.forEach(collapse);\n //@ts-ignore\n d.children = null;\n }\n}\nfunction clamp(min, num, max) {\n return Math.min(Math.max(num, min), max);\n}\nvar StructureModel = types.model({\n id: types.identifier,\n structure: types.model({\n pdb: types.string,\n startPos: types.number,\n endPos: types.number,\n }),\n range: types.maybe(types.string),\n});\nvar UniprotTrack = types\n .model({\n id: types.string,\n accession: types.string,\n name: types.string,\n associatedRowName: types.string,\n height: types.optional(types.number, 100),\n})\n .volatile(function () { return ({\n error: undefined,\n data: undefined,\n}); })\n .actions(function (self) { return ({\n setError: function (error) {\n self.error = error;\n },\n setData: function (data) {\n self.data = data;\n },\n}); })\n .actions(function (self) { return ({\n afterCreate: function () {\n var _this = this;\n addDisposer(self, autorun(function () { return __awaiter(_this, void 0, void 0, function () {\n var accession, url, response, text, e_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 3, , 4]);\n accession = self.accession;\n url = \"https://www.uniprot.org/uniprot/\" + accession + \".gff\";\n return [4 /*yield*/, fetch(url)];\n case 1:\n response = _a.sent();\n if (!response.ok) {\n throw new Error(\"HTTP \" + response.status + \" \" + response.statusText + \" fetching \" + url);\n }\n return [4 /*yield*/, response.text()];\n case 2:\n text = _a.sent();\n self.setData(text);\n return [3 /*break*/, 4];\n case 3:\n e_1 = _a.sent();\n self.setError(e_1);\n return [3 /*break*/, 4];\n case 4: return [2 /*return*/];\n }\n });\n }); }));\n },\n}); })\n .views(function (self) { return ({\n get loading() {\n return !self.data;\n },\n get features() {\n var _a;\n return (_a = self.data) === null || _a === void 0 ? void 0 : _a.split('\\n').map(function (f) { return f.trim(); }).filter(function (f) { return !!f; }).filter(function (f) { return !f.startsWith('#'); }).map(function (f) {\n var _a = f.split('\\t'), seq_id = _a[0], source = _a[1], type = _a[2], start = _a[3], end = _a[4], score = _a[5], strand = _a[6], phase = _a[7], col9 = _a[8];\n return __assign({ seq_id: seq_id, source: source, type: type, start: +start, end: +end, score: +score, strand: strand, phase: phase }, Object.fromEntries(col9\n .split(';')\n .map(function (f) { return f.trim(); })\n .filter(function (f) { return !!f; })\n .map(function (f) { return f.split('='); })\n .map(function (_a) {\n var key = _a[0], val = _a[1];\n return [\n key.trim(),\n decodeURIComponent(val).trim().split(',').join(' '),\n ];\n })));\n });\n },\n}); });\nvar MSAModel = types\n .model('MsaView', {\n id: ElementId,\n type: types.literal('MsaView'),\n height: types.optional(types.number, 550),\n treeAreaWidth: types.optional(types.number, 400),\n treeWidth: types.optional(types.number, 300),\n rowHeight: 20,\n scrollY: 0,\n scrollX: 0,\n resizeHandleWidth: 5,\n blockSize: 1000,\n mouseRow: types.maybe(types.number),\n mouseCol: types.maybe(types.number),\n selectedStructures: types.array(StructureModel),\n labelsAlignRight: false,\n colWidth: 16,\n showBranchLen: true,\n bgColor: true,\n drawTree: true,\n drawNodeBubbles: true,\n highResScaleFactor: 2,\n colorSchemeName: 'maeditor',\n treeFilehandle: types.maybe(FileLocation),\n msaFilehandle: types.maybe(FileLocation),\n currentAlignment: 0,\n collapsed: types.array(types.string),\n showOnly: types.maybe(types.string),\n boxTracks: types.array(UniprotTrack),\n turnedOffTracks: types.map(types.boolean),\n annotatedRegions: types.array(types.model({\n start: types.number,\n end: types.number,\n attributes: types.frozen(),\n })),\n data: types.optional(types\n .model({\n tree: types.maybe(types.string),\n msa: types.maybe(types.string),\n })\n .actions(function (self) { return ({\n setTree: function (tree) {\n self.tree = tree;\n },\n setMSA: function (msa) {\n self.msa = msa;\n },\n }); }), { tree: '', msa: '' }),\n})\n .volatile(function () { return ({\n error: undefined,\n margin: { left: 20, top: 20 },\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n DialogComponent: undefined,\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n DialogProps: undefined,\n // annotations\n annotPos: undefined,\n}); })\n .actions(function (self) { return ({\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n setDialogComponent: function (dlg, props) {\n self.DialogComponent = dlg;\n self.DialogProps = props;\n },\n setHeight: function (height) {\n self.height = height;\n },\n addStructureToSelection: function (elt) {\n self.selectedStructures.push(elt);\n },\n removeStructureFromSelection: function (elt) {\n var r = self.selectedStructures.find(function (node) { return node.id === elt.id; });\n if (r) {\n self.selectedStructures.remove(r);\n }\n },\n toggleStructureSelection: function (elt) {\n var r = self.selectedStructures.find(function (node) { return node.id === elt.id; });\n if (r) {\n self.selectedStructures.remove(r);\n }\n else {\n self.selectedStructures.push(elt);\n }\n },\n clearSelectedStructures: function () {\n //@ts-ignore\n self.selectedStructures = [];\n },\n setError: function (error) {\n console.error(error);\n self.error = error;\n },\n setMousePos: function (col, row) {\n self.mouseCol = col;\n self.mouseRow = row;\n },\n setRowHeight: function (n) {\n self.rowHeight = n;\n },\n setColWidth: function (n) {\n self.colWidth = n;\n },\n setColorSchemeName: function (name) {\n self.colorSchemeName = name;\n },\n setScrollY: function (n) {\n self.scrollY = n;\n },\n setScrollX: function (n) {\n self.scrollX = n;\n },\n setTreeAreaWidth: function (n) {\n self.treeAreaWidth = n;\n },\n setTreeWidth: function (n) {\n self.treeWidth = n;\n },\n setCurrentAlignment: function (n) {\n self.currentAlignment = n;\n },\n toggleLabelsAlignRight: function () {\n self.labelsAlignRight = !self.labelsAlignRight;\n },\n toggleDrawTree: function () {\n self.drawTree = !self.drawTree;\n },\n toggleCollapsed: function (node) {\n if (self.collapsed.includes(node)) {\n self.collapsed.remove(node);\n }\n else {\n self.collapsed.push(node);\n }\n },\n setShowOnly: function (node) {\n self.showOnly = node;\n },\n toggleBranchLen: function () {\n self.showBranchLen = !self.showBranchLen;\n },\n toggleBgColor: function () {\n self.bgColor = !self.bgColor;\n },\n toggleNodeBubbles: function () {\n self.drawNodeBubbles = !self.drawNodeBubbles;\n },\n setData: function (data) {\n self.data = cast(data);\n },\n setMSAFilehandle: function (msaFilehandle) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n self.msaFilehandle = msaFilehandle;\n return [2 /*return*/];\n });\n });\n },\n setTreeFilehandle: function (treeFilehandle) {\n return __awaiter(this, void 0, void 0, function () {\n var r;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(treeFilehandle && 'blobId' in treeFilehandle)) return [3 /*break*/, 2];\n return [4 /*yield*/, openLocation(treeFilehandle).readFile('utf8')];\n case 1:\n r = (_a.sent());\n this.setTree(r);\n return [3 /*break*/, 3];\n case 2:\n self.treeFilehandle = treeFilehandle;\n _a.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n });\n },\n setMSA: function (result) {\n self.data.setMSA(result);\n },\n setTree: function (result) {\n self.data.setTree(result);\n },\n afterCreate: function () {\n var _this = this;\n addDisposer(self, autorun(function () { return __awaiter(_this, void 0, void 0, function () {\n var treeFilehandle, _a, e_2;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n treeFilehandle = self.treeFilehandle;\n if (!treeFilehandle) return [3 /*break*/, 4];\n _b.label = 1;\n case 1:\n _b.trys.push([1, 3, , 4]);\n _a = this.setTree;\n return [4 /*yield*/, openLocation(treeFilehandle).readFile('utf8')];\n case 2:\n _a.apply(this, [(_b.sent())]);\n return [3 /*break*/, 4];\n case 3:\n e_2 = _b.sent();\n this.setError(e_2);\n return [3 /*break*/, 4];\n case 4: return [2 /*return*/];\n }\n });\n }); }));\n addDisposer(self, autorun(function () { return __awaiter(_this, void 0, void 0, function () {\n var msaFilehandle, _a, e_3;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n msaFilehandle = self.msaFilehandle;\n if (!msaFilehandle) return [3 /*break*/, 4];\n _b.label = 1;\n case 1:\n _b.trys.push([1, 3, , 4]);\n _a = this.setMSA;\n return [4 /*yield*/, openLocation(msaFilehandle).readFile('utf8')];\n case 2:\n _a.apply(this, [(_b.sent())]);\n return [3 /*break*/, 4];\n case 3:\n e_3 = _b.sent();\n this.setError(e_3);\n return [3 /*break*/, 4];\n case 4: return [2 /*return*/];\n }\n });\n }); }));\n },\n}); })\n .views(function (self) {\n var oldBlocksX = [];\n var oldBlocksY = [];\n var oldValX = 0;\n var oldValY = 0;\n return {\n get initialized() {\n return ((self.data.msa ||\n self.data.tree ||\n self.msaFilehandle ||\n self.treeFilehandle) &&\n !self.error);\n },\n get blocksX() {\n var scrollX = self.scrollX, size = self.blockSize, colWidth = self.colWidth;\n var ret = -(size * Math.floor(scrollX / size)) - size;\n var b = [];\n for (var i = ret; i < ret + size * 3; i += size) {\n if (i + size > 0) {\n b.push(i);\n }\n }\n if (JSON.stringify(b) !== JSON.stringify(oldBlocksX) ||\n colWidth !== oldValX) {\n oldBlocksX = b;\n oldValX = colWidth;\n }\n return oldBlocksX;\n },\n get blocksY() {\n var scrollY = self.scrollY, size = self.blockSize, rowHeight = self.rowHeight;\n var ret = -(size * Math.floor(scrollY / size)) - 2 * size;\n var b = [];\n for (var i = ret; i < ret + size * 3; i += size) {\n if (i + size > 0) {\n b.push(i);\n }\n }\n if (JSON.stringify(b) !== JSON.stringify(oldBlocksY) ||\n rowHeight !== oldValY) {\n oldBlocksY = b;\n oldValY = rowHeight;\n }\n return oldBlocksY;\n },\n };\n})\n .views(function (self) { return ({\n get blocks2d() {\n return self.blocksY.map(function (by) { return self.blocksX.map(function (bx) { return [bx, by]; }); }).flat();\n },\n get done() {\n return self.initialized && (self.data.msa || self.data.tree);\n },\n get colorScheme() {\n return colorSchemes[self.colorSchemeName];\n },\n get alignmentDetails() {\n var _a;\n return ((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getDetails()) || {};\n },\n getRowDetails: function (name) {\n var _a;\n //@ts-ignore\n var details = (_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getRowDetails(name);\n var matches = name.match(/\\S+\\/(\\d+)-(\\d+)/);\n return __assign(__assign({}, details), (matches && { range: { start: +matches[1], end: +matches[2] } }));\n },\n get currentAlignmentName() {\n return this.alignmentNames[self.currentAlignment];\n },\n get alignmentNames() {\n var _a;\n return ((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.alignmentNames) || [];\n },\n get noTree() {\n return !!this.tree.noTree;\n },\n get menuItems() {\n return [];\n },\n get MSA() {\n var text = self.data.msa;\n if (text) {\n if (Stockholm.sniff(text)) {\n return new StockholmMSA(text, self.currentAlignment);\n }\n else if (text.startsWith('>')) {\n return new FastaMSA(text);\n }\n else {\n return new ClustalMSA(text);\n }\n }\n return null;\n },\n get numColumns() {\n var _a;\n return ((((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getWidth()) || 0) - this.blanks.length) * self.colWidth;\n },\n get tree() {\n var _a;\n return self.data.tree\n ? generateNodeIds(parseNewick(self.data.tree))\n : ((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getTree()) || { noTree: true };\n },\n get rowNames() {\n return this.hierarchy.leaves().map(function (node) { return node.data.name; });\n },\n get mouseOverRowName() {\n return self.mouseRow !== undefined\n ? this.rowNames[self.mouseRow]\n : undefined;\n },\n getMouseOverResidue: function (rowName) {\n return this.columns[rowName];\n },\n get root() {\n var hier = hierarchy(this.tree, function (d) { return d.branchset; })\n .sum(function (d) { return (d.branchset ? 0 : 1); })\n .sort(function (a, b) {\n return ascending(a.data.length || 1, b.data.length || 1);\n });\n if (self.showOnly) {\n var res = hier.find(function (node) { return node.data.id === self.showOnly; });\n if (res) {\n hier = res;\n }\n }\n if (self.collapsed.length) {\n self.collapsed\n .map(function (collapsedId) {\n return hier.find(function (node) { return node.data.id === collapsedId; });\n })\n .filter(function (f) { return !!f; })\n .map(function (node) { return collapse(node); });\n }\n return hier;\n },\n get structures() {\n var _a;\n return ((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getStructures()) || {};\n },\n get inverseStructures() {\n var map = Object.entries(this.structures)\n .map(function (_a) {\n var key = _a[0], val = _a[1];\n return val.map(function (pdbEntry) { return [pdbEntry.pdb, { id: key }]; });\n })\n .flat();\n return Object.fromEntries(map);\n },\n get msaAreaWidth() {\n //@ts-ignore\n return self.width - self.treeAreaWidth;\n },\n get blanks() {\n var _this = this;\n var _a;\n var blanks = [];\n var strs = this.hierarchy\n .leaves()\n .map(function (_a) {\n var _b;\n var data = _a.data;\n return (_b = _this.MSA) === null || _b === void 0 ? void 0 : _b.getRow(data.name);\n })\n .filter(function (item) { return !!item; });\n for (var i = 0; i < ((_a = strs[0]) === null || _a === void 0 ? void 0 : _a.length); i++) {\n var counter = 0;\n for (var j = 0; j < strs.length; j++) {\n if (strs[j][i] === '-') {\n counter++;\n }\n }\n if (counter === strs.length) {\n blanks.push(i);\n }\n }\n return blanks;\n },\n get rows() {\n var _this = this;\n return this.hierarchy\n .leaves()\n .map(function (_a) {\n var _b;\n var data = _a.data;\n return [data.name, (_b = _this.MSA) === null || _b === void 0 ? void 0 : _b.getRow(data.name)];\n })\n .filter(function (f) { return !!f[1]; });\n },\n get columns() {\n var rows = this.rows;\n var cols = this.columns2d;\n return Object.fromEntries(rows.map(function (row, index) { return [row[0], cols[index]]; }));\n },\n get columns2d() {\n var strs = this.rows.map(function (r) { return r[1]; });\n var ret = [];\n for (var i = 0; i < strs.length; i++) {\n ret.push(skipBlanks(this.blanks, strs[i]));\n }\n return ret;\n },\n get colStats() {\n var r = [];\n var m = this.columns2d;\n for (var i = 0; i < m.length; i++) {\n for (var j = 0; j < m[i].length; j++) {\n var l = r[j] || {};\n if (!l[m[i][j]]) {\n l[m[i][j]] = 0;\n }\n l[m[i][j]]++;\n r[j] = l;\n }\n }\n return r;\n },\n // generates a new tree that is clustered with x,y positions\n get hierarchy() {\n var root = this.root;\n var clust = cluster()\n .size([this.totalHeight, self.treeWidth])\n .separation(function () { return 1; });\n clust(root);\n setBrLength(root, \n //@ts-ignore\n (root.data.length = 0), self.treeWidth / maxLength(root));\n return root;\n },\n get totalHeight() {\n return this.root.leaves().length * self.rowHeight;\n },\n}); })\n .actions(function (self) { return ({\n addUniprotTrack: function (node) {\n if (self.boxTracks.find(function (t) { return t.name === node.name; })) {\n if (self.turnedOffTracks.has(node.name)) {\n this.toggleTrack(node.name);\n }\n }\n else {\n self.boxTracks.push(__assign(__assign({}, node), { id: node.name, associatedRowName: node.name }));\n }\n },\n doScrollY: function (deltaY) {\n self.scrollY = clamp(-self.totalHeight + 10, self.scrollY + deltaY, 0);\n },\n doScrollX: function (deltaX) {\n self.scrollX = clamp(-self.numColumns + (self.msaAreaWidth - 100), self.scrollX + deltaX, 0);\n },\n setMouseoveredColumn: function (n, chain, file) {\n var _a;\n var j = 0;\n var i = 0;\n var id = (self.inverseStructures[file.slice(0, -4)] || {}).id;\n var row = (_a = self.MSA) === null || _a === void 0 ? void 0 : _a.getRow(id);\n if (row) {\n for (i = 0; i < row.length && j < n; i++) {\n if (row[i] !== '-') {\n j++;\n }\n }\n self.mouseCol = j + 1;\n }\n else {\n self.mouseCol = undefined;\n }\n },\n toggleTrack: function (id) {\n if (self.turnedOffTracks.has(id)) {\n self.turnedOffTracks.delete(id);\n }\n else {\n self.turnedOffTracks.set(id, true);\n }\n },\n}); })\n .views(function (self) { return ({\n get secondaryStructureConsensus() {\n var _a;\n return (_a = self.MSA) === null || _a === void 0 ? void 0 : _a.secondaryStructureConsensus;\n },\n get seqConsensus() {\n var _a;\n return (_a = self.MSA) === null || _a === void 0 ? void 0 : _a.seqConsensus;\n },\n get conservation() {\n var m = self.columns2d;\n if (m.length) {\n for (var i = 0; i < m[0].length; i++) {\n var col = [];\n for (var j = 0; j < m.length; j++) {\n col.push(m[j][i]);\n }\n }\n }\n return ['a'];\n },\n get tracks() {\n var blanks = self.blanks;\n var adapterTracks = self.MSA\n ? self.MSA.tracks.map(function (track) {\n var data = track.data;\n return {\n model: __assign(__assign({}, track), { data: data ? skipBlanks(blanks, data) : undefined, height: self.rowHeight }),\n ReactComponent: TextTrack,\n };\n })\n : [];\n var boxTracks = self.boxTracks\n // filter out tracks that are associated with hidden rows\n .filter(function (track) { return !!self.rows.find(function (row) { return row[0] === track.name; }); })\n .map(function (track) { return ({\n model: track,\n ReactComponent: BoxTrack,\n }); });\n var annotationTracks = self.annotatedRegions.length > 0\n ? [\n {\n model: {\n features: self.annotatedRegions,\n height: 100,\n id: 'annotations',\n name: 'User-created annotations',\n data: self.annotatedRegions\n .map(function (region) {\n var attrs = region.attributes\n ? Object.entries(region.attributes)\n .map(function (_a) {\n var k = _a[0], v = _a[1];\n return k + \"=\" + v.join(',');\n })\n .join(';')\n : '.';\n return [\n 'MSA_refcoord',\n '.',\n '.',\n region.start,\n region.end,\n '.',\n '.',\n '.',\n attrs,\n ].join('\\t');\n })\n .join('\\n'),\n },\n ReactComponent: BoxTrack,\n },\n ]\n : [];\n return __spreadArray(__spreadArray(__spreadArray([], adapterTracks, true), boxTracks, true), annotationTracks, true);\n },\n get turnedOnTracks() {\n return this.tracks.filter(function (f) { return !self.turnedOffTracks.has(f.model.id); });\n },\n // returns coordinate in the current relative coordinate scheme\n pxToBp: function (coord) {\n return Math.floor((coord - self.scrollX) / self.colWidth);\n },\n rowSpecificBpToPx: function (rowName, position) {\n var _a;\n var rowNames = self.rowNames, rows = self.rows, blanks = self.blanks;\n var index = rowNames.indexOf(rowName);\n var row = rows[index][1];\n var details = self.getRowDetails(rowName);\n var offset = ((_a = details.range) === null || _a === void 0 ? void 0 : _a.start) || 0;\n var current = position - offset;\n if (current < 0) {\n return 0;\n }\n var j = 0;\n var i = 0;\n for (; i < row.length; i++) {\n if (row[i] !== '-' && j++ === current) {\n break;\n }\n }\n var count = 0;\n for (var k = 0; k < row.length; k++) {\n if (blanks.indexOf(k) !== -1 && k < i + 1) {\n count++;\n }\n }\n return i - count;\n },\n globalBpToPx: function (position) {\n var _a;\n var count = 0;\n for (var k = 0; k < ((_a = self.rows[0]) === null || _a === void 0 ? void 0 : _a[1].length); k++) {\n if (self.blanks.indexOf(k) !== -1 && k < position + 1) {\n count++;\n }\n }\n return position - count;\n },\n relativePxToBp: function (rowName, position) {\n var rowNames = self.rowNames, rows = self.rows;\n var index = rowNames.indexOf(rowName);\n var row = rows[index][1];\n var k = 0;\n for (var i = 0; i < position; i++) {\n if (row[i] !== '-') {\n k++;\n }\n else if (k >= position) {\n break;\n }\n }\n return k;\n },\n getPos: function (pos) {\n var j = 0;\n for (var i = 0, k = 0; i < pos; i++, j++) {\n while (j === self.blanks[k]) {\n k++;\n j++;\n }\n }\n return j;\n },\n}); })\n .actions(function (self) { return ({\n addAnnotation: function (start, end, attributes) {\n self.annotatedRegions.push({\n start: self.getPos(start),\n end: self.getPos(end),\n attributes: attributes,\n });\n },\n setOffsets: function (left, right) {\n self.annotPos = { left: left, right: right };\n },\n clearAnnotPos: function () {\n self.annotPos = undefined;\n },\n}); });\nvar model = types.snapshotProcessor(types.compose(BaseViewModel, MSAModel), {\n postProcessor: function (result) {\n var _a = result.data, tree = _a.tree, msa = _a.msa, rest = __rest(result\n // remove the MSA/tree data from the tree if the filehandle available in\n // which case it can be reloaded on refresh\n , [\"data\"]);\n // remove the MSA/tree data from the tree if the filehandle available in\n // which case it can be reloaded on refresh\n return __assign({ data: __assign(__assign({}, (!result.treeFilehandle && { tree: tree })), (!result.msaFilehandle && { msa: msa })) }, rest);\n },\n});\nexport default model;\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM8 20H4v-4h4v4zm0-6H4v-4h4v4zm0-6H4V4h4v4zm6 12h-4v-4h4v4zm0-6h-4v-4h4v4zm0-6h-4V4h4v4zm6 12h-4v-4h4v4zm0-6h-4v-4h4v4zm0-6h-4V4h4v4z\"\n}), 'GridOn');\n\nexports.default = _default;","import Plugin from '@jbrowse/core/Plugin'\nimport PluginManager from '@jbrowse/core/PluginManager'\nimport { version } from '../package.json'\nimport { AbstractSessionModel, isAbstractMenuManager } from '@jbrowse/core/util'\nimport * as MSA from 'react-msaview'\nimport ViewType from '@jbrowse/core/pluggableElementTypes/ViewType'\nimport GridOn from '@material-ui/icons/GridOn'\n\nexport default class MsaViewPlugin extends Plugin {\n name = 'MsaViewPlugin'\n version = version\n\n install(pluginManager: PluginManager) {\n console.log({ MSA })\n pluginManager.addViewType(\n () =>\n new ViewType({\n name: 'MsaView',\n //@ts-ignore\n stateModel: MSA.MSAModel,\n ReactComponent: MSA.MSAView,\n }),\n )\n }\n\n configure(pluginManager: PluginManager) {\n if (isAbstractMenuManager(pluginManager.rootModel)) {\n pluginManager.rootModel.appendToSubMenu(['Add'], {\n label: 'Multiple sequence alignment view',\n icon: GridOn,\n onClick: (session: AbstractSessionModel) => {\n session.addView('MsaView', {})\n },\n })\n }\n }\n}\n"],"names":["ListItem","_a","onClick","model","React","createElement","Link","event","setError","undefined","preventDefault","href","Typography","children","observer","_b","useState","msaFile","setMsaFile","_c","treeFile","setTreeFile","error","Container","style","width","padding","color","Grid","container","spacing","justifyContent","alignItems","item","FileSelector","location","setLocation","Button","setMSAFilehandle","setTreeFilehandle","variant","disabled","uri","setData","msa","tree","transaction","module","obj","__esModule","default","exports","_typeof","Symbol","iterator","constructor","prototype","require$$0","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","hasOwnProperty","call","desc","set","value","enumerable","_utils","createSvgIcon","_ie","_firefox","_opera","_webkit","_chrome","_ie_real_version","_osx","_windows","_linux","_android","_win64","_iphone","_ipad","_native","_mobile","_interopRequireWildcard","_default","_interopRequireDefault","require$$1","d","useStyles","makeStyles","theme","rubberband","height","background","alpha","palette","tertiary","main","primary","position","zIndex","textAlign","overflow","rubberbandControl","cursor","minHeight","rubberbandText","contrastText","popover","mouseEvents","paper","paddingLeft","paddingRight","guide","pointerEvents","VerticalGuide","coordX","treeAreaWidth","classes","Fragment","Tooltip","open","placement","title","pxToBp","arrow","left","className","ControlComponent","startX","setStartX","_d","currentX","setCurrentX","_e","anchorPosition","setAnchorPosition","_f","guideX","setGuideX","controlsRef","useRef","rubberbandRef","mouseDragging","mouseDown","stopPropagation","relativeX","clientX","target","getBoundingClientRect","mouseMove","mouseOut","clearAnnotPos","handleClose","useEffect","globalMouseMove","current","globalMouseUp","clientY","offsetX","window","addEventListener","removeEventListener","Math","abs","colWidth","data-testid","role","ref","onMouseDown","onMouseOut","onMouseMove","right","leftBpOffset","rightBpOffset","numOfBpSelected","ceil","menuItems","label","icon","AssignmentIcon","setOffsets","Popover","anchorEl","anchorOrigin","vertical","horizontal","transformOrigin","keepMounted","disableRestoreFocus","toLocaleString","Menu","anchorReference","top","onMenuItemClick","_","callback","Boolean","onClose","_populated","_populate","uas","navigator","userAgent","agent","exec","os","parseFloat","NaN","document","documentMode","trident","ver","replace","useHasFeature","UserAgent_DEPRECATED","ie","ieCompatibilityMode","ie64","firefox","opera","webkit","safari","chrome","windows","osx","linux","iphone","mobile","nativeApp","android","ipad","canUseDOM","normalizeWheel","sX","sY","pX","pY","detail","wheelDelta","wheelDeltaY","wheelDeltaX","axis","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","ExecutionEnvironment","implementation","hasFeature","getEventType","eventNameSuffix","capture","isSupported","element","setAttribute","quickselect","arr","k","compare","quickselectStep","n","m","z","log","s","exp","sd","sqrt","max","floor","min","t","i","j","swap","length","defaultCompare","tmp","a","b","RBush","[object Object]","maxEntries","this","_maxEntries","_minEntries","clear","_all","data","bbox","node","result","intersects","toBBox","nodesToSearch","child","childBBox","leaf","push","contains","pop","insert","_build","slice","_splitRoot","tmpNode","_insert","createNode","equalsFn","path","indexes","parent","goingUp","index","findItem","splice","_condense","minX","minY","items","N","M","calcBBox","pow","N2","N1","multiSelect","compareMinX","right2","compareMinY","right3","level","targetNode","minArea","Infinity","minEnlargement","area","bboxArea","enlargement","maxX","maxY","isNode","insertPath","_chooseSubtree","extend","_split","_adjustParentBBoxes","_chooseSplitAxis","splitIndex","_chooseSplitIndex","newNode","minOverlap","bbox1","distBBox","bbox2","overlap","intersectionArea","compareNodeMinX","compareNodeMinY","_allDistMargin","sort","leftBBox","rightBBox","margin","bboxMargin","siblings","indexOf","p","destNode","stack","mid","info","Dialog","DialogTitle","DialogContent","Attributes","attributes","__assign","assign","arguments","apply","TreeMenu","structures","nodeDetails","getRowDetails","name","y","x","transitionDuration","MenuItem","dense","setDialogComponent","MoreInfoDlg","map","entry","selectedStructures","find","id","JSON","stringify","removeStructureFromSelection","structure","pdb","addStructureToSelection","accession","addUniprotTrack","TreeBranchMenu","toggleCollapsed","collapsed","includes","setShowOnly","showOnly","TreeBlock","offsetY","clickMap","mouseoverRef","branchMenu","setBranchMenu","toggleNodeMenu","setToggleNodeMenu","hoverElt","setHoverElt","hierarchy","rowHeight","scrollY","treeWidth","showBranchLen","labelsAlignRight","noTree","blockSize","drawNodeBubbles","drawTree","highResScaleFactor","hoverBranchClickMap","nativeEvent","search","branch","hoverNameClickMap","ctx","getContext","resetTransform","scale","clearRect","translate","font","links","forEach","source","sy","sx","ty","tx","y1","y2","beginPath","moveTo","lineTo","stroke","descendants","strokeStyle","fillStyle","arc","PI","fill","radius","setLineDash","leaves","yp","xp","len","measureText","offset","width_1","fillText","canvas","fillRect","ret","data2","TreeCanvas","scheduled","prevY","blocksY","setMouseDragging","curr","onWheel","origEvent","requestAnimationFrame","doScrollY","cleanup","distanceY","draggable","dataset","resizer","button","onMouseUp","onMouseLeave","block","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","concat","Array","swizzle","args","results","arg","isArray","Function","wrap","fn","reverseNames","colorNames","cs","to","clamp","num","hexDouble","str","toString","toUpperCase","string","val","substring","toLowerCase","hsl","hwb","rgb","match","hexAlpha","i2","parseInt","round","isNaN","hex","rgba","percent","r","g","hsla","hwba","keyword","reverseKeywords","cssKeywords","convert","channels","labels","hsv","cmyk","xyz","lab","lch","ansi16","ansi256","hcg","apple","Error","h","l","delta","rdif","gdif","bdif","v","diff","diffc","c","reversed","currentClosestKeyword","currentClosestDistance","distance","t1","t2","t3","smin","lmin","hi","f","q","sl","vmin","wh","bl","ratio","x2","z2","atan2","hr","cos","sin","ansi","mult","rem","colorString","split","char","join","integer","hue","chroma","mg","pure","w","link","from","wrapConversion","toModel","graph","conversions","cur","unshift","conversion","keys","fromModel","routes","models","buildGraph","queue","adjacents","adjacent","deriveBFS","route","wrappedFn","wrapRounded","raw","wrapRaw","_slice","skippedModels","hashedModelKeys","limiters","Color","valpha","newArr","zeroArray","hashedKeys","limit","freeze","getset","channel","modifier","maxfn","assertArray","toJSON","places","self","percentString","array","object","unitArray","unitObject","Number","toFixed","roundTo","roundToPlace","saturationl","lightness","saturationv","wblack","rgbNumber","luminosity","lum","chan","contrast","color2","lum1","lum2","contrastRatio","isDark","isLight","negate","lighten","darken","saturate","desaturate","whiten","blacken","grayscale","fade","opaquer","rotate","degrees","mix","mixinColor","weight","color1","w1","w2","newAlpha","transform","cb","fromEntries","entries","generateNodeIds","depth","branchset","colorContrast","colorScheme","getContrastText","clustal","G","P","S","T","H","K","R","F","W","Y","I","L","V","lesk","A","C","Q","D","E","maeditor","percent_identity_dynamic","flower","rainbow_dna","U","clustalx_protein","clustalx_protein_dynamic","clustalx_dna","jalview_buried","B","X","Z","jalview_hydrophobicity","jalview_prophelix","jalview_propstrand","jalview_propturn","jalview_taylor","jalview_zappo","cinema","-",".","getClustalXColor","stats","row","col","total","values","reduce","columns","_g","_h","_j","_k","_l","_m","_o","_p","_q","_r","_s","_t","_u","_v","WLVIMAFCHP","KR","QE","getPercentIdentityColor","ent","letter","proportion","thresh","MSABlock","MSA","bgColor","scrollX","colorSchemeName","colStats","useTheme","contrastScheme","useMemo","yStart","yEnd","xStart","xEnd","visibleLeaves","mouseY","setMousePos","MSACanvas","msaFilehandle","msaAreaWidth","blocks2d","prevX","doScrollX","distanceX","bx","by","CircularProgress","majorTickLabel","fontSize","majorTick","minorTick","RulerBlock","start","end","bpPerPx","major","minor","ticks","emitMajor","emitMinor","gridPitch","minMajorPitchPx","minMinorPitchPx","minMajorPitchBp","majorMagnitude","toExponential","majorPitch","majorPitchPx","minorPitch","chooseGridPitch","minBase","maxBase","iterPitch","base","type","makeTicks","tick","x1","strokeWidth","data-bp","filter","textAnchor","mathPower","String","substr","Ruler","resizeHandleWidth","blocksX","TreeRuler","colWidthInit","treeWidthInit","setRowHeight","setColWidth","setTreeWidth","rowHeightError","colWidthError","treeWidthError","FormControlLabel","control","Checkbox","checked","onChange","toggleBranchLen","toggleBgColor","toggleNodeBubbles","toggleDrawTree","toggleLabelsAlignRight","TextField","select","setColorSchemeName","colorSchemes","option","DialogActions","LicenseDialog","AboutDialog","setDlgOpen","alignmentDetails","tracks","FormGroup","track","turnedOffTracks","toggleTrack","InfoArea","mouseCol","display","mouseOverRowName","marginLeft","Header","settingsDialogVisible","setSettingsDialogVisible","aboutDialogVisible","setAboutDialogVisible","detailsDialogVisible","setDetailsDialogVisible","tracklistDialogVisible","setTracklistDialogVisible","currentAlignment","alignmentNames","IconButton","setScrollY","setScrollX","setCurrentAlignment","FolderOpenIcon","SettingsIcon","ListIcon","SettingsDialog","DetailsDialog","TracklistDialog","Select","native","flex","HelpIcon","clipboardToIE11Formatting","text/plain","text/html","textArea","wordBreak","TrackInfoDialog","setLabel","fullWidth","maxWidth","text","options","debug","message","reselectPrevious","range","selection","mark","getSelection","rangeCount","active","activeElement","ranges","getRangeAt","tagName","blur","removeAllRanges","addRange","focus","deselectCurrent","createRange","textContent","all","clip","whiteSpace","webkitUserSelect","MozUserSelect","msUserSelect","userSelect","e","format","clipboardData","console","warn","clearData","onCopy","body","appendChild","selectNodeContents","execCommand","err","copyKey","test","prompt","removeRange","removeChild","copy","setTimeout","TrackLabel","setAnchorEl","trackInfoDlgOpen","setTrackInfoDlgOpen","trackLabelHeight","flexShrink","ArrowDropDownIcon","Track","ReactComponent","__spreadArray","pack","ar","Row","setValue","setName","onDelete","DeleteIcon","blanks","rows","setRows","getPos","newValue","newRows","newName","addAnnotation","VerticalResizeHandle","currX","distance_1","setTreeAreaWidth","HorizontalResizeHandle","currY","distance_2","setHeight","MouseoverCanvas","turnedOnTracks","initialized","done","Rubberband","ImportForm","DialogComponent","DialogProps","annotPos","AnnotationDialog","defaultSeparation","meanXReduce","maxYReduce","count","sum","Map","mapChildren","objectChildren","childs","root","Node","nodes","eachBefore","computeHeight","copyData","eachAfter","each","that","next","ancestor","aNodes","ancestors","bNodes","leastCommonAncestor","reverse","excluded","sourceKeys","objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","alphabet","previousSeed","shuffled","seed","_seed_","ORIGINAL","reset","setCharacters","_alphabet_","unique","ind","lastIndexOf","getShuffled","characterIndex","sourceArray","targetArray","randomFromSeed","shuffle","counter","previousSeconds","characters","lookup","crypto","msCrypto","getRandomValues","size","Uint8Array","bytes","random","mask","LN2","step","number","loopCounter","RegExp","clusterWorkerId","generate","seconds","Date","now","build","seedValue","workerId","newCharacters","isValid","_objectWithoutProperties2","_shortid","_propTypes","require$$2","_excluded","ElementId","_mobxStateTree","types","optional","identifier","PropTypes","Region","shape","refName","isRequired","ConfigSchema","_mobxReact","objectOrObservableObject","Feature","func","NoAssemblyRegion","boolean","actions","setRefName","newRefName","compose","assemblyName","LocalPathLocation","localPath","BlobLocation","blobId","UriLocationRaw","baseUri","maybe","UriLocation","snapshotProcessor","postProcessor","snap","rest","FileLocation","union","BaseViewModel","_mst","displayName","volatile","views","setDisplayName","setWidth","newWidth","Stockholm","gf","gc","gs","gr","seqname","seqdata","prop","formatStartRegex","formatEndRegex","gfRegex","gcRegex","gsRegex","grRegex","lineRegex","nonwhiteRegex","atLine","warning","parseAll","opts","maybeError","strict","quiet","db","stock","line","makeStock","leftPad","rightPad","cols","tag","allNames","isName","names","addName","addNames","list","allTags","isTag","addTags","addRow","deleteRow","indentNames","nameWidth","tagWidth","seqIndent","pad","padTagName","offsets","space","toFasta","toRowList","sniff","validate","parse","fromSeqIndex","fromRowList","parseVersion","res","getFirstNonEmptyLine","trim","getSeqBounds","fields","temp","parseBlock","consensusLine","ids","seqs","consensus","remainder","repeat","knownHeaders","startsWith","version","parseIter","util_1","header","parseHeader","parseBlocks","alns","seq","contents","ClustalMSA","getMSA","getRow","aln","getWidth","getDetails","getNames","getStructures","configurable","getTree","seqConsensus","customColorScheme","*",":"," ","tokens","token","subtree","StockholmMSA","DE","General","Accessions","AC","Dbxref","DR","rowName","dbxref","getSeqCoords","pdbRegex","chain","startPos","endPos","__rest","NH","parseNewick","seq_cons","SS_cons","secondaryStructureConsensus",">","<","FastaMSA","re","AnnotationBlock","AnnotationTrack","Layout","maxHeight","maxHeightReached","rbush","rectangles","pTotalHeight","addRect","existingRecord","currHeight","collides","record","features","associatedRowName","feats","isStateTreeNode","getSnapshot","layout","feature","rowSpecificBpToPx","globalBpToPx","labelRef","note","Note","name_1","Name","__awaiter","thisArg","_arguments","generator","Promise","resolve","reject","fulfilled","rejected","then","__generator","sent","trys","ops","verb","throw","return","op","TypeError","skipBlanks","maxLength","valueof","collapse","_children","StructureModel","UniprotTrack","afterCreate","_this","addDisposer","autorun","url","response","e_1","fetch","ok","status","statusText","loading","seq_id","score","strand","phase","decodeURIComponent","MSAModel","literal","mouseRow","treeFilehandle","boxTracks","annotatedRegions","frozen","setTree","setMSA","dlg","props","elt","remove","toggleStructureSelection","clearSelectedStructures","cast","openLocation","readFile","e_2","e_3","oldBlocksX","oldBlocksY","oldValX","oldValY","flat","details","matches","currentAlignmentName","numColumns","rowNames","getMouseOverResidue","hier","ascending","collapsedId","inverseStructures","pdbEntry","strs","columns2d","separation","dx","dy","nodeSize","cluster","previousNode","meanX","leafLeft","leafRight","x0","totalHeight","clust","setBrLength","y0","setMouseoveredColumn","file","delete","conservation","adapterTracks","TextTrack","BoxTrack","annotationTracks","region","attrs","coord","relativePxToBp","pos","pluginManager","addViewType","ViewType","stateModel","isAbstractMenuManager","rootModel","appendToSubMenu","GridOn","session","addView","Plugin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"jbrowse-plugin-msaview.umd.production.min.js","sources":["../node_modules/react-msaview/dist/components/ImportForm.js","../node_modules/react-msaview/dist/components/data/seq2.js","../node_modules/@babel/runtime/helpers/interopRequireDefault.js","../node_modules/@babel/runtime/helpers/typeof.js","../node_modules/@babel/runtime/helpers/interopRequireWildcard.js","../node_modules/@material-ui/icons/utils/createSvgIcon.js","../node_modules/normalize-wheel/src/UserAgent_DEPRECATED.js","../node_modules/@material-ui/icons/Assignment.js","../node_modules/react-msaview/dist/components/Rubberband.js","../node_modules/normalize-wheel/src/isEventSupported.js","../node_modules/normalize-wheel/src/ExecutionEnvironment.js","../node_modules/normalize-wheel/src/normalizeWheel.js","../node_modules/quickselect/index.js","../node_modules/rbush/index.js","../node_modules/react-msaview/dist/components/MoreInfoDlg.js","../node_modules/react-msaview/dist/components/TreeCanvas.js","../node_modules/color-name/index.js","../node_modules/simple-swizzle/index.js","../node_modules/simple-swizzle/node_modules/is-arrayish/index.js","../node_modules/color-string/index.js","../node_modules/color-convert/node_modules/color-name/index.js","../node_modules/color-convert/conversions.js","../node_modules/color-convert/route.js","../node_modules/color-convert/index.js","../node_modules/color/index.js","../node_modules/react-msaview/dist/util.js","../node_modules/react-msaview/dist/colorSchemes.js","../node_modules/react-msaview/dist/components/MSACanvas.js","../node_modules/react-msaview/dist/components/Ruler.js","../node_modules/react-msaview/dist/components/TreeRuler.js","../node_modules/react-msaview/dist/components/SettingsDlg.js","../node_modules/react-msaview/dist/components/AboutDlg.js","../node_modules/react-msaview/dist/components/DetailsDlg.js","../node_modules/react-msaview/dist/components/TracklistDlg.js","../node_modules/@material-ui/icons/FolderOpen.js","../node_modules/@material-ui/icons/Settings.js","../node_modules/@material-ui/icons/Help.js","../node_modules/@material-ui/icons/List.js","../node_modules/react-msaview/dist/components/Header.js","../node_modules/@material-ui/icons/ArrowDropDown.js","../node_modules/copy-to-clipboard/index.js","../node_modules/react-msaview/dist/components/TrackInfoDlg.js","../node_modules/toggle-selection/index.js","../node_modules/react-msaview/dist/components/Track.js","../node_modules/@material-ui/icons/Delete.js","../node_modules/react-msaview/dist/components/AnnotationDlg.js","../node_modules/react-msaview/dist/components/ResizeHandles.js","../node_modules/react-msaview/dist/components/MSAView.js","../node_modules/d3-hierarchy/src/cluster.js","../node_modules/d3-hierarchy/src/hierarchy/count.js","../node_modules/d3-hierarchy/src/hierarchy/index.js","../node_modules/d3-hierarchy/src/hierarchy/each.js","../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","../node_modules/d3-hierarchy/src/hierarchy/find.js","../node_modules/d3-hierarchy/src/hierarchy/sum.js","../node_modules/d3-hierarchy/src/hierarchy/sort.js","../node_modules/d3-hierarchy/src/hierarchy/path.js","../node_modules/d3-hierarchy/src/hierarchy/ancestors.js","../node_modules/d3-hierarchy/src/hierarchy/descendants.js","../node_modules/d3-hierarchy/src/hierarchy/leaves.js","../node_modules/d3-hierarchy/src/hierarchy/links.js","../node_modules/d3-hierarchy/src/hierarchy/iterator.js","../node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","../node_modules/@babel/runtime/helpers/objectWithoutProperties.js","../node_modules/shortid/lib/random/random-from-seed.js","../node_modules/shortid/lib/alphabet.js","../node_modules/shortid/lib/build.js","../node_modules/shortid/lib/random/random-byte-browser.js","../node_modules/nanoid/format.browser.js","../node_modules/shortid/lib/generate.js","../node_modules/shortid/lib/is-valid.js","../node_modules/shortid/lib/index.js","../node_modules/@jbrowse/core/util/types/mst.js","../node_modules/@jbrowse/core/pluggableElementTypes/models/BaseViewModel.js","../node_modules/stockholm-js/src/Stockholm.js","../node_modules/clustal-js/dist/util.js","../node_modules/clustal-js/dist/index.js","../node_modules/react-msaview/dist/parsers/ClustalMSA.js","../node_modules/react-msaview/dist/parseNewick.js","../node_modules/react-msaview/dist/parsers/StockholmMSA.js","../node_modules/react-msaview/dist/parsers/FastaMSA.js","../node_modules/react-msaview/dist/components/TextTrack.js","../node_modules/react-msaview/dist/layout.js","../node_modules/react-msaview/dist/components/BoxTrack.js","../node_modules/react-msaview/dist/model.js","../node_modules/d3-array/src/max.js","../node_modules/d3-array/src/ascending.js","../node_modules/@material-ui/icons/GridOn.js","../src/index.ts"],"sourcesContent":["import React, { useState } from 'react';\nimport { Button, Container, Grid, Typography, Link } from '@material-ui/core';\nimport { observer } from 'mobx-react';\nimport { transaction } from 'mobx';\nimport { FileSelector } from '@jbrowse/core/ui';\nimport { smallTree, smallMSA, smallMSAOnly } from './data/seq2';\nvar ListItem = function (_a) {\n var onClick = _a.onClick, model = _a.model, children = _a.children;\n return (React.createElement(\"li\", null,\n React.createElement(Link, { onClick: function (event) {\n model.setError(undefined);\n event.preventDefault();\n onClick();\n }, href: \"#\" },\n React.createElement(Typography, null, children))));\n};\nexport default observer(function (_a) {\n var model = _a.model;\n var _b = useState(), msaFile = _b[0], setMsaFile = _b[1];\n var _c = useState(), treeFile = _c[0], setTreeFile = _c[1];\n var error = model.error;\n return (React.createElement(Container, null,\n React.createElement(\"div\", { style: { width: '50%' } },\n error ? (React.createElement(\"div\", { style: { padding: 20 } },\n React.createElement(Typography, { color: \"error\" },\n \"Error: \", \"\".concat(error)))) : null,\n React.createElement(Typography, null, \"Open an MSA file (stockholm or clustal format) and/or a tree file (newick format).\"),\n React.createElement(Typography, { color: \"error\" }, \"Note: you can open up just an MSA or just a tree, both are not required. Some MSA files e.g. stockholm format have an embedded tree also and this is fine, and opening a separate tree file is not required.\")),\n React.createElement(Grid, { container: true, spacing: 10, justifyContent: \"center\", alignItems: \"center\" },\n React.createElement(Grid, { item: true },\n React.createElement(Typography, null, \"MSA file or URL\"),\n React.createElement(FileSelector, { location: msaFile, setLocation: setMsaFile }),\n React.createElement(Typography, null, \"Tree file or URL\"),\n React.createElement(FileSelector, { location: treeFile, setLocation: setTreeFile })),\n React.createElement(Grid, { item: true },\n React.createElement(Button, { onClick: function () {\n model.setError(undefined);\n if (msaFile) {\n model.setMSAFilehandle(msaFile);\n }\n if (treeFile) {\n model.setTreeFilehandle(treeFile);\n }\n }, variant: \"contained\", color: \"primary\", disabled: !msaFile && !treeFile }, \"Open\")),\n React.createElement(Grid, { item: true },\n React.createElement(Typography, null, \"Examples\"),\n React.createElement(\"ul\", null,\n React.createElement(ListItem, { model: model, onClick: function () {\n model.setTreeFilehandle({\n uri: 'https://jbrowse.org/genomes/newick_trees/sarscov2phylo.pub.ft.nh',\n locationType: 'UriLocation',\n });\n } }, \"230k COVID-19 samples (tree only)\"),\n React.createElement(ListItem, { model: model, onClick: function () {\n model.setData({ msa: smallMSA, tree: smallTree });\n } }, \"Small protein MSA+tree\"),\n React.createElement(ListItem, { model: model, onClick: function () {\n model.setData({ msa: smallMSAOnly });\n } }, \"Small MSA only\"),\n React.createElement(ListItem, { model: model, onClick: function () {\n model.setMSAFilehandle({\n uri: 'https://ihh.github.io/abrowse/build/pfam-cov2.stock',\n locationType: 'UriLocation',\n });\n } }, \"PFAM SARS-CoV2 multi-stockholm\"),\n React.createElement(ListItem, { model: model, onClick: function () {\n model.setMSAFilehandle({\n uri: 'https://jbrowse.org/genomes/multiple_sequence_alignments/Lysine.stock',\n locationType: 'UriLocation',\n });\n } }, \"Lysine stockholm file\"),\n React.createElement(ListItem, { model: model, onClick: function () {\n model.setMSAFilehandle({\n uri: 'https://jbrowse.org/genomes/multiple_sequence_alignments/PF01601_full.txt',\n locationType: 'UriLocation',\n });\n } }, \"PF01601 stockholm file (SARS-CoV2 spike protein)\"),\n React.createElement(ListItem, { model: model, onClick: function () {\n model.setMSAFilehandle({\n uri: 'https://jbrowse.org/genomes/multiple_sequence_alignments/europe_covid.fa',\n locationType: 'UriLocation',\n });\n } }, \"Europe COVID full genomes (LR883044.1 and 199 other sequences)\"),\n React.createElement(ListItem, { model: model, onClick: function () {\n transaction(function () {\n model.setMSAFilehandle({\n uri: 'https://jbrowse.org/genomes/multiple_sequence_alignments/rhv_test-only.aligned_with_mafft_auto.fa',\n locationType: 'UriLocation',\n });\n model.setTreeFilehandle({\n uri: 'https://jbrowse.org/genomes/multiple_sequence_alignments/rhv_test-only.aligned_with_mafft_auto.nh',\n locationType: 'UriLocation',\n });\n });\n } }, \"MAFFT+VeryFastTree(17.9k samples)\"))))));\n});\n","export var smallMSA = \"CLUSTAL O(1.2.3) multiple sequence alignment\\nUniProt/Swiss-Prot|P26898|IL2RA_SHEEP MEPSLLMWRFFVFIVVPGCVTEACHDDPPSLRNA----------MFKVLRYE----VGTM\\nUniProt/Swiss-Prot|P01590|IL2RA_MOUSE MEPRLLMLGFLSLTIVPSCRAELCLYDPPEVPNA----------TFKALSYK----NGTI\\nUniProt/Swiss-Prot|P41690|IL2RA_FELCA MEPSLLLWGILTFVVVHGHVTELCDENPPDIQHA----------TFKALTYK----TGTM\\nUniProt/Swiss-Prot|P01589|IL2RA_HUMAN MDSYLLMWGLLTFIMVPGCQAELCDDDPPEIPHA----------TFKAMAYK----EGTM\\nUniProt/Swiss-Prot|Q5MNY4|IL2RA_MACMU MDPYLLMWGLLTFITVPGCQAELCDDDPPKITHA----------TFKAVAYK----EGTM\\nUniProt/Swiss-Prot|Q95118|IL2RG_BOVIN -----------------------------------LLMWGLLT-----------------\\nUniProt/Swiss-Prot|P40321|IL2RG_CANFA MLKPPLPLRSLLFLQLSLLGVGLNSTVPMPNGNEDIT------PDFFLTATPSETLSVSS\\nUniProt/Swiss-Prot|P26896|IL2RB_RAT MATVDLSWRLPLYILLLLLATT--------------------------------WVSAAV\\nUniProt/Swiss-Prot|Q8BZM1|GLMN_MOUSE PLPLRSLLFLQLPLLGVGLNP------------------PLPLRSLLFLQLPLLGVGLNP\\nUniProt/Swiss-Prot|P36835|IL2_CAPHI -----------LLGVGLNPKFLTP------------------------------------\\nUniProt/Swiss-Prot|Q7JFM4|IL2_AOTVO MLKPPLPLRSLLFLQLPLLGVGLNPKFLTPSGNEDIGGKPGTGGDFFLTSTPAGTLDVST\\nUniProt/Swiss-Prot|Q29416|IL2_CANFA --------------LFLQLSLLG-------------------------------------\\n\";\nexport var smallMSAOnly = \"CLUSTAL O(1.2.4) multiple sequence alignment\\n\\n\\nsp|P69905|HBA_HUMAN MVLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHFDLSHGSAQVKGHG\\t60\\nsp|P01942|HBA_MOUSE MVLSGEDKSNIKAAWGKIGGHGAEYGAEALERMFASFPTTKTYFPHFDVSHGSAQVKGHG\\t60\\nsp|P13786|HBAZ_CAPHI MSLTRTERTIILSLWSKISTQADVIGTETLERLFSCYPQAKTYFPHFDLHSGSAQLRAHG\\t60\\n * *: ::: : : *.*:. :. *:*:***:* .:* :********: ****::.**\\n\\nsp|P69905|HBA_HUMAN KKVADALTNAVAHVDDMPNALSALSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTP\\t120\\nsp|P01942|HBA_MOUSE KKVADALASAAGHLDDLPGALSALSDLHAHKLRVDPVNFKLLSHCLLVTLASHHPADFTP\\t120\\nsp|P13786|HBAZ_CAPHI SKVVAAVGDAVKSIDNVTSALSKLSELHAYVLRVDPVNFKFLSHCLLVTLASHFPADFTA\\t120\\n .**. *: .*. :*:: .*** **:***: *********:**********:* **:**\\n\\nsp|P69905|HBA_HUMAN AVHASLDKFLASVSTVLTSKYR\\t142\\nsp|P01942|HBA_MOUSE AVHASLDKFLASVSTVLTSKYR\\t142\\nsp|P13786|HBAZ_CAPHI DAHAAWDKFLSIVSGVLTEKYR\\t142\\n .**: ****: ** ***.***\";\nexport var smallTree = '(((UniProt/Swiss-Prot|P26898|IL2RA_SHEEP:0.24036,(UniProt/Swiss-Prot|P41690|IL2RA_FELCA:0.17737,(UniProt/Swiss-Prot|P01589|IL2RA_HUMAN:0.03906,UniProt/Swiss-Prot|Q5MNY4|IL2RA_MACMU:0.03787):0.13033):0.04964):0.02189,UniProt/Swiss-Prot|P01590|IL2RA_MOUSE:0.23072):0.06814,(((UniProt/Swiss-Prot|Q95118|IL2RG_BOVIN:0.09600,UniProt/Swiss-Prot|P40321|IL2RG_CANFA:0.09845):0.25333,UniProt/Swiss-Prot|Q29416|IL2_CANFA:-0.35055):0.10231,(UniProt/Swiss-Prot|P26896|IL2RB_RAT:0.33631,UniProt/Swiss-Prot|Q7JFM4|IL2_AOTVO:-0.33631):0.10166):0.01607,(UniProt/Swiss-Prot|Q8BZM1|GLMN_MOUSE:0.32378,UniProt/Swiss-Prot|P36835|IL2_CAPHI:-0.32378):0.09999)';\n","function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nmodule.exports = _interopRequireDefault;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return typeof obj;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var _typeof = require(\"@babel/runtime/helpers/typeof\")[\"default\"];\n\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\n\nfunction _interopRequireWildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) {\n return obj;\n }\n\n if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") {\n return {\n \"default\": obj\n };\n }\n\n var cache = _getRequireWildcardCache(nodeInterop);\n\n if (cache && cache.has(obj)) {\n return cache.get(obj);\n }\n\n var newObj = {};\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n\n if (desc && (desc.get || desc.set)) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n\n newObj[\"default\"] = obj;\n\n if (cache) {\n cache.set(obj, newObj);\n }\n\n return newObj;\n}\n\nmodule.exports = _interopRequireWildcard;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _utils.createSvgIcon;\n }\n});\n\nvar _utils = require(\"@material-ui/core/utils\");","/**\n * Copyright 2004-present Facebook. All Rights Reserved.\n *\n * @providesModule UserAgent_DEPRECATED\n */\n\n/**\n * Provides entirely client-side User Agent and OS detection. You should prefer\n * the non-deprecated UserAgent module when possible, which exposes our\n * authoritative server-side PHP-based detection to the client.\n *\n * Usage is straightforward:\n *\n * if (UserAgent_DEPRECATED.ie()) {\n * // IE\n * }\n *\n * You can also do version checks:\n *\n * if (UserAgent_DEPRECATED.ie() >= 7) {\n * // IE7 or better\n * }\n *\n * The browser functions will return NaN if the browser does not match, so\n * you can also do version compares the other way:\n *\n * if (UserAgent_DEPRECATED.ie() < 7) {\n * // IE6 or worse\n * }\n *\n * Note that the version is a float and may include a minor version number,\n * so you should always use range operators to perform comparisons, not\n * strict equality.\n *\n * **Note:** You should **strongly** prefer capability detection to browser\n * version detection where it's reasonable:\n *\n * http://www.quirksmode.org/js/support.html\n *\n * Further, we have a large number of mature wrapper functions and classes\n * which abstract away many browser irregularities. Check the documentation,\n * grep for things, or ask on javascript@lists.facebook.com before writing yet\n * another copy of \"event || window.event\".\n *\n */\n\nvar _populated = false;\n\n// Browsers\nvar _ie, _firefox, _opera, _webkit, _chrome;\n\n// Actual IE browser for compatibility mode\nvar _ie_real_version;\n\n// Platforms\nvar _osx, _windows, _linux, _android;\n\n// Architectures\nvar _win64;\n\n// Devices\nvar _iphone, _ipad, _native;\n\nvar _mobile;\n\nfunction _populate() {\n if (_populated) {\n return;\n }\n\n _populated = true;\n\n // To work around buggy JS libraries that can't handle multi-digit\n // version numbers, Opera 10's user agent string claims it's Opera\n // 9, then later includes a Version/X.Y field:\n //\n // Opera/9.80 (foo) Presto/2.2.15 Version/10.10\n var uas = navigator.userAgent;\n var agent = /(?:MSIE.(\\d+\\.\\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\\d+\\.\\d+))|(?:Opera(?:.+Version.|.)(\\d+\\.\\d+))|(?:AppleWebKit.(\\d+(?:\\.\\d+)?))|(?:Trident\\/\\d+\\.\\d+.*rv:(\\d+\\.\\d+))/.exec(uas);\n var os = /(Mac OS X)|(Windows)|(Linux)/.exec(uas);\n\n _iphone = /\\b(iPhone|iP[ao]d)/.exec(uas);\n _ipad = /\\b(iP[ao]d)/.exec(uas);\n _android = /Android/i.exec(uas);\n _native = /FBAN\\/\\w+;/i.exec(uas);\n _mobile = /Mobile/i.exec(uas);\n\n // Note that the IE team blog would have you believe you should be checking\n // for 'Win64; x64'. But MSDN then reveals that you can actually be coming\n // from either x64 or ia64; so ultimately, you should just check for Win64\n // as in indicator of whether you're in 64-bit IE. 32-bit IE on 64-bit\n // Windows will send 'WOW64' instead.\n _win64 = !!(/Win64/.exec(uas));\n\n if (agent) {\n _ie = agent[1] ? parseFloat(agent[1]) : (\n agent[5] ? parseFloat(agent[5]) : NaN);\n // IE compatibility mode\n if (_ie && document && document.documentMode) {\n _ie = document.documentMode;\n }\n // grab the \"true\" ie version from the trident token if available\n var trident = /(?:Trident\\/(\\d+.\\d+))/.exec(uas);\n _ie_real_version = trident ? parseFloat(trident[1]) + 4 : _ie;\n\n _firefox = agent[2] ? parseFloat(agent[2]) : NaN;\n _opera = agent[3] ? parseFloat(agent[3]) : NaN;\n _webkit = agent[4] ? parseFloat(agent[4]) : NaN;\n if (_webkit) {\n // We do not add the regexp to the above test, because it will always\n // match 'safari' only since 'AppleWebKit' appears before 'Chrome' in\n // the userAgent string.\n agent = /(?:Chrome\\/(\\d+\\.\\d+))/.exec(uas);\n _chrome = agent && agent[1] ? parseFloat(agent[1]) : NaN;\n } else {\n _chrome = NaN;\n }\n } else {\n _ie = _firefox = _opera = _chrome = _webkit = NaN;\n }\n\n if (os) {\n if (os[1]) {\n // Detect OS X version. If no version number matches, set _osx to true.\n // Version examples: 10, 10_6_1, 10.7\n // Parses version number as a float, taking only first two sets of\n // digits. If only one set of digits is found, returns just the major\n // version number.\n var ver = /(?:Mac OS X (\\d+(?:[._]\\d+)?))/.exec(uas);\n\n _osx = ver ? parseFloat(ver[1].replace('_', '.')) : true;\n } else {\n _osx = false;\n }\n _windows = !!os[2];\n _linux = !!os[3];\n } else {\n _osx = _windows = _linux = false;\n }\n}\n\nvar UserAgent_DEPRECATED = {\n\n /**\n * Check if the UA is Internet Explorer.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n ie: function() {\n return _populate() || _ie;\n },\n\n /**\n * Check if we're in Internet Explorer compatibility mode.\n *\n * @return bool true if in compatibility mode, false if\n * not compatibility mode or not ie\n */\n ieCompatibilityMode: function() {\n return _populate() || (_ie_real_version > _ie);\n },\n\n\n /**\n * Whether the browser is 64-bit IE. Really, this is kind of weak sauce; we\n * only need this because Skype can't handle 64-bit IE yet. We need to remove\n * this when we don't need it -- tracked by #601957.\n */\n ie64: function() {\n return UserAgent_DEPRECATED.ie() && _win64;\n },\n\n /**\n * Check if the UA is Firefox.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n firefox: function() {\n return _populate() || _firefox;\n },\n\n\n /**\n * Check if the UA is Opera.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n opera: function() {\n return _populate() || _opera;\n },\n\n\n /**\n * Check if the UA is WebKit.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n webkit: function() {\n return _populate() || _webkit;\n },\n\n /**\n * For Push\n * WILL BE REMOVED VERY SOON. Use UserAgent_DEPRECATED.webkit\n */\n safari: function() {\n return UserAgent_DEPRECATED.webkit();\n },\n\n /**\n * Check if the UA is a Chrome browser.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n chrome : function() {\n return _populate() || _chrome;\n },\n\n\n /**\n * Check if the user is running Windows.\n *\n * @return bool `true' if the user's OS is Windows.\n */\n windows: function() {\n return _populate() || _windows;\n },\n\n\n /**\n * Check if the user is running Mac OS X.\n *\n * @return float|bool Returns a float if a version number is detected,\n * otherwise true/false.\n */\n osx: function() {\n return _populate() || _osx;\n },\n\n /**\n * Check if the user is running Linux.\n *\n * @return bool `true' if the user's OS is some flavor of Linux.\n */\n linux: function() {\n return _populate() || _linux;\n },\n\n /**\n * Check if the user is running on an iPhone or iPod platform.\n *\n * @return bool `true' if the user is running some flavor of the\n * iPhone OS.\n */\n iphone: function() {\n return _populate() || _iphone;\n },\n\n mobile: function() {\n return _populate() || (_iphone || _ipad || _android || _mobile);\n },\n\n nativeApp: function() {\n // webviews inside of the native apps\n return _populate() || _native;\n },\n\n android: function() {\n return _populate() || _android;\n },\n\n ipad: function() {\n return _populate() || _ipad;\n }\n};\n\nmodule.exports = UserAgent_DEPRECATED;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm2 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z\"\n}), 'Assignment');\n\nexports.default = _default;","import React, { useRef, useEffect, useState } from 'react';\nimport { observer } from 'mobx-react';\n// material ui\nimport { Popover, Tooltip, Typography, makeStyles, alpha, } from '@material-ui/core';\nimport AssignmentIcon from '@material-ui/icons/Assignment';\n// import { stringify } from '@jbrowse/core/util'\nimport { Menu } from '@jbrowse/core/ui';\nvar useStyles = makeStyles(function (theme) {\n var background = theme.palette.tertiary\n ? alpha(theme.palette.tertiary.main, 0.7)\n : alpha(theme.palette.primary.main, 0.7);\n return {\n rubberband: {\n height: '100%',\n background: background,\n position: 'absolute',\n zIndex: 10,\n textAlign: 'center',\n overflow: 'hidden',\n },\n rubberbandControl: {\n cursor: 'crosshair',\n width: '100%',\n minHeight: 8,\n },\n rubberbandText: {\n color: theme.palette.tertiary\n ? theme.palette.tertiary.contrastText\n : theme.palette.primary.contrastText,\n },\n popover: {\n mouseEvents: 'none',\n cursor: 'crosshair',\n },\n paper: {\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1),\n },\n guide: {\n pointerEvents: 'none',\n height: '100%',\n width: 1,\n position: 'absolute',\n zIndex: 10,\n },\n };\n});\nvar VerticalGuide = observer(function (_a) {\n var model = _a.model, coordX = _a.coordX;\n var treeAreaWidth = model.treeAreaWidth;\n var classes = useStyles();\n return (React.createElement(React.Fragment, null,\n React.createElement(Tooltip, { open: true, placement: \"top\", title: \"\".concat(model.pxToBp(coordX) + 1), arrow: true },\n React.createElement(\"div\", { style: {\n left: coordX + treeAreaWidth,\n position: 'absolute',\n height: 1,\n } })),\n React.createElement(\"div\", { className: classes.guide, style: {\n left: coordX + treeAreaWidth,\n background: 'red',\n } })));\n});\nfunction Rubberband(_a) {\n var model = _a.model, _b = _a.ControlComponent, ControlComponent = _b === void 0 ? React.createElement(\"div\", null) : _b;\n var treeAreaWidth = model.treeAreaWidth;\n var _c = useState(), startX = _c[0], setStartX = _c[1];\n var _d = useState(), currentX = _d[0], setCurrentX = _d[1];\n // clientX and clientY used for anchorPosition for menu\n // offsetX used for calculations about width of selection\n var _e = useState(), anchorPosition = _e[0], setAnchorPosition = _e[1];\n var _f = useState(), guideX = _f[0], setGuideX = _f[1];\n var controlsRef = useRef(null);\n var rubberbandRef = useRef(null);\n var classes = useStyles();\n var mouseDragging = startX !== undefined && anchorPosition === undefined;\n useEffect(function () {\n function globalMouseMove(event) {\n if (controlsRef.current && mouseDragging) {\n var relativeX = event.clientX - controlsRef.current.getBoundingClientRect().left;\n setCurrentX(relativeX);\n }\n }\n function globalMouseUp(event) {\n if (startX !== undefined && controlsRef.current) {\n var clientX = event.clientX, clientY = event.clientY;\n var ref = controlsRef.current;\n var offsetX = clientX - ref.getBoundingClientRect().left;\n // as stated above, store both clientX/Y and offsetX for different\n // purposes\n setAnchorPosition({\n offsetX: offsetX,\n clientX: clientX,\n clientY: clientY,\n });\n setGuideX(undefined);\n }\n }\n if (mouseDragging) {\n window.addEventListener('mousemove', globalMouseMove);\n window.addEventListener('mouseup', globalMouseUp);\n return function () {\n window.removeEventListener('mousemove', globalMouseMove);\n window.removeEventListener('mouseup', globalMouseUp);\n };\n }\n return function () { };\n }, [startX, mouseDragging, anchorPosition]);\n useEffect(function () {\n if (!mouseDragging &&\n currentX !== undefined &&\n startX !== undefined &&\n Math.abs(currentX - startX) <= 3) {\n handleClose();\n }\n }, [mouseDragging, currentX, startX, model.colWidth]);\n function mouseDown(event) {\n event.preventDefault();\n event.stopPropagation();\n var relativeX = event.clientX -\n event.target.getBoundingClientRect().left;\n setStartX(relativeX);\n setCurrentX(relativeX);\n }\n function mouseMove(event) {\n var target = event.target;\n setGuideX(event.clientX - target.getBoundingClientRect().left);\n }\n function mouseOut() {\n setGuideX(undefined);\n model.clearAnnotPos();\n }\n function handleClose() {\n setAnchorPosition(undefined);\n setStartX(undefined);\n setCurrentX(undefined);\n }\n //eslint-disable-next-line @typescript-eslint/ban-types\n function handleMenuItemClick(_, callback) {\n callback();\n handleClose();\n }\n if (startX === undefined) {\n return (React.createElement(React.Fragment, null,\n guideX !== undefined ? (React.createElement(VerticalGuide, { model: model, coordX: guideX })) : null,\n React.createElement(\"div\", { \"data-testid\": \"rubberband_controls\", className: classes.rubberbandControl, role: \"presentation\", ref: controlsRef, onMouseDown: mouseDown, onMouseOut: mouseOut, onMouseMove: mouseMove }, ControlComponent)));\n }\n var right = anchorPosition ? anchorPosition.offsetX : currentX || 0;\n var left = right < startX ? right : startX;\n var width = Math.abs(right - startX);\n var leftBpOffset = model.pxToBp(left);\n var rightBpOffset = model.pxToBp(left + width);\n var numOfBpSelected = Math.ceil(width / model.colWidth);\n var menuItems = [\n {\n label: 'Create annotation',\n icon: AssignmentIcon,\n onClick: function () {\n model.setOffsets(leftBpOffset, rightBpOffset);\n handleClose();\n },\n },\n ];\n return (React.createElement(React.Fragment, null,\n rubberbandRef.current ? (React.createElement(React.Fragment, null,\n React.createElement(Popover, { className: classes.popover, classes: {\n paper: classes.paper,\n }, open: true, anchorEl: rubberbandRef.current, anchorOrigin: {\n vertical: 'top',\n horizontal: 'left',\n }, transformOrigin: {\n vertical: 'bottom',\n horizontal: 'right',\n }, keepMounted: true, disableRestoreFocus: true },\n React.createElement(Typography, null, leftBpOffset + 1)),\n React.createElement(Popover, { className: classes.popover, classes: {\n paper: classes.paper,\n }, open: true, anchorEl: rubberbandRef.current, anchorOrigin: {\n vertical: 'top',\n horizontal: 'right',\n }, transformOrigin: {\n vertical: 'bottom',\n horizontal: 'left',\n }, keepMounted: true, disableRestoreFocus: true },\n React.createElement(Typography, null, rightBpOffset + 1)))) : null,\n React.createElement(\"div\", { ref: rubberbandRef, className: classes.rubberband, style: { left: left + treeAreaWidth, width: width } },\n React.createElement(Typography, { variant: \"h6\", className: classes.rubberbandText },\n numOfBpSelected.toLocaleString('en-US'),\n \" bp\")),\n React.createElement(\"div\", { \"data-testid\": \"rubberband_controls\", className: classes.rubberbandControl, role: \"presentation\", ref: controlsRef, onMouseDown: mouseDown, onMouseOut: mouseOut, onMouseMove: mouseMove }, ControlComponent),\n anchorPosition ? (React.createElement(Menu, { anchorReference: \"anchorPosition\", anchorPosition: {\n left: anchorPosition.clientX,\n top: anchorPosition.clientY,\n }, onMenuItemClick: handleMenuItemClick, open: Boolean(anchorPosition), onClose: handleClose, menuItems: menuItems })) : null));\n}\nexport default observer(Rubberband);\n","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isEventSupported\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar useHasFeature;\nif (ExecutionEnvironment.canUseDOM) {\n useHasFeature =\n document.implementation &&\n document.implementation.hasFeature &&\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n document.implementation.hasFeature('', '') !== true;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @param {?boolean} capture Check if the capture phase is supported.\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\nfunction isEventSupported(eventNameSuffix, capture) {\n if (!ExecutionEnvironment.canUseDOM ||\n capture && !('addEventListener' in document)) {\n return false;\n }\n\n var eventName = 'on' + eventNameSuffix;\n var isSupported = eventName in document;\n\n if (!isSupported) {\n var element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n }\n\n return isSupported;\n}\n\nmodule.exports = isEventSupported;\n","/**\n * Copyright (c) 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ExecutionEnvironment\n */\n\n/*jslint evil: true */\n\n'use strict';\n\nvar canUseDOM = !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n canUseDOM: canUseDOM,\n\n canUseWorkers: typeof Worker !== 'undefined',\n\n canUseEventListeners:\n canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n canUseViewport: canUseDOM && !!window.screen,\n\n isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n","/**\n * Copyright (c) 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule normalizeWheel\n * @typechecks\n */\n\n'use strict';\n\nvar UserAgent_DEPRECATED = require('./UserAgent_DEPRECATED');\n\nvar isEventSupported = require('./isEventSupported');\n\n\n// Reasonable defaults\nvar PIXEL_STEP = 10;\nvar LINE_HEIGHT = 40;\nvar PAGE_HEIGHT = 800;\n\n/**\n * Mouse wheel (and 2-finger trackpad) support on the web sucks. It is\n * complicated, thus this doc is long and (hopefully) detailed enough to answer\n * your questions.\n *\n * If you need to react to the mouse wheel in a predictable way, this code is\n * like your bestest friend. * hugs *\n *\n * As of today, there are 4 DOM event types you can listen to:\n *\n * 'wheel' -- Chrome(31+), FF(17+), IE(9+)\n * 'mousewheel' -- Chrome, IE(6+), Opera, Safari\n * 'MozMousePixelScroll' -- FF(3.5 only!) (2010-2013) -- don't bother!\n * 'DOMMouseScroll' -- FF(0.9.7+) since 2003\n *\n * So what to do? The is the best:\n *\n * normalizeWheel.getEventType();\n *\n * In your event callback, use this code to get sane interpretation of the\n * deltas. This code will return an object with properties:\n *\n * spinX -- normalized spin speed (use for zoom) - x plane\n * spinY -- \" - y plane\n * pixelX -- normalized distance (to pixels) - x plane\n * pixelY -- \" - y plane\n *\n * Wheel values are provided by the browser assuming you are using the wheel to\n * scroll a web page by a number of lines or pixels (or pages). Values can vary\n * significantly on different platforms and browsers, forgetting that you can\n * scroll at different speeds. Some devices (like trackpads) emit more events\n * at smaller increments with fine granularity, and some emit massive jumps with\n * linear speed or acceleration.\n *\n * This code does its best to normalize the deltas for you:\n *\n * - spin is trying to normalize how far the wheel was spun (or trackpad\n * dragged). This is super useful for zoom support where you want to\n * throw away the chunky scroll steps on the PC and make those equal to\n * the slow and smooth tiny steps on the Mac. Key data: This code tries to\n * resolve a single slow step on a wheel to 1.\n *\n * - pixel is normalizing the desired scroll delta in pixel units. You'll\n * get the crazy differences between browsers, but at least it'll be in\n * pixels!\n *\n * - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT. This\n * should translate to positive value zooming IN, negative zooming OUT.\n * This matches the newer 'wheel' event.\n *\n * Why are there spinX, spinY (or pixels)?\n *\n * - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn\n * with a mouse. It results in side-scrolling in the browser by default.\n *\n * - spinY is what you expect -- it's the classic axis of a mouse wheel.\n *\n * - I dropped spinZ/pixelZ. It is supported by the DOM 3 'wheel' event and\n * probably is by browsers in conjunction with fancy 3D controllers .. but\n * you know.\n *\n * Implementation info:\n *\n * Examples of 'wheel' event if you scroll slowly (down) by one step with an\n * average mouse:\n *\n * OS X + Chrome (mouse) - 4 pixel delta (wheelDelta -120)\n * OS X + Safari (mouse) - N/A pixel delta (wheelDelta -12)\n * OS X + Firefox (mouse) - 0.1 line delta (wheelDelta N/A)\n * Win8 + Chrome (mouse) - 100 pixel delta (wheelDelta -120)\n * Win8 + Firefox (mouse) - 3 line delta (wheelDelta -120)\n *\n * On the trackpad:\n *\n * OS X + Chrome (trackpad) - 2 pixel delta (wheelDelta -6)\n * OS X + Firefox (trackpad) - 1 pixel delta (wheelDelta N/A)\n *\n * On other/older browsers.. it's more complicated as there can be multiple and\n * also missing delta values.\n *\n * The 'wheel' event is more standard:\n *\n * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents\n *\n * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and\n * deltaX, deltaY and deltaZ. Some browsers provide other values to maintain\n * backward compatibility with older events. Those other values help us\n * better normalize spin speed. Example of what the browsers provide:\n *\n * | event.wheelDelta | event.detail\n * ------------------+------------------+--------------\n * Safari v5/OS X | -120 | 0\n * Safari v5/Win7 | -120 | 0\n * Chrome v17/OS X | -120 | 0\n * Chrome v17/Win7 | -120 | 0\n * IE9/Win7 | -120 | undefined\n * Firefox v4/OS X | undefined | 1\n * Firefox v4/Win7 | undefined | 3\n *\n */\nfunction normalizeWheel(/*object*/ event) /*object*/ {\n var sX = 0, sY = 0, // spinX, spinY\n pX = 0, pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in event) { sY = event.detail; }\n if ('wheelDelta' in event) { sY = -event.wheelDelta / 120; }\n if ('wheelDeltaY' in event) { sY = -event.wheelDeltaY / 120; }\n if ('wheelDeltaX' in event) { sX = -event.wheelDeltaX / 120; }\n\n // side scrolling on FF with DOMMouseScroll\n if ( 'axis' in event && event.axis === event.HORIZONTAL_AXIS ) {\n sX = sY;\n sY = 0;\n }\n\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n\n if ('deltaY' in event) { pY = event.deltaY; }\n if ('deltaX' in event) { pX = event.deltaX; }\n\n if ((pX || pY) && event.deltaMode) {\n if (event.deltaMode == 1) { // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else { // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) { sX = (pX < 1) ? -1 : 1; }\n if (pY && !sY) { sY = (pY < 1) ? -1 : 1; }\n\n return { spinX : sX,\n spinY : sY,\n pixelX : pX,\n pixelY : pY };\n}\n\n\n/**\n * The best combination if you prefer spinX + spinY normalization. It favors\n * the older DOMMouseScroll for Firefox, as FF does not include wheelDelta with\n * 'wheel' event, making spin speed determination impossible.\n */\nnormalizeWheel.getEventType = function() /*string*/ {\n return (UserAgent_DEPRECATED.firefox())\n ? 'DOMMouseScroll'\n : (isEventSupported('wheel'))\n ? 'wheel'\n : 'mousewheel';\n};\n\nmodule.exports = normalizeWheel;\n","\nexport default function quickselect(arr, k, left, right, compare) {\n quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);\n}\n\nfunction quickselectStep(arr, k, left, right, compare) {\n\n while (right > left) {\n if (right - left > 600) {\n var n = right - left + 1;\n var m = k - left + 1;\n var z = Math.log(n);\n var s = 0.5 * Math.exp(2 * z / 3);\n var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselectStep(arr, k, newLeft, newRight, compare);\n }\n\n var t = arr[k];\n var i = left;\n var j = right;\n\n swap(arr, left, k);\n if (compare(arr[right], t) > 0) swap(arr, left, right);\n\n while (i < j) {\n swap(arr, i, j);\n i++;\n j--;\n while (compare(arr[i], t) < 0) i++;\n while (compare(arr[j], t) > 0) j--;\n }\n\n if (compare(arr[left], t) === 0) swap(arr, left, j);\n else {\n j++;\n swap(arr, j, right);\n }\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n}\n\nfunction swap(arr, i, j) {\n var tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\nfunction defaultCompare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n","import quickselect from 'quickselect';\n\nexport default class RBush {\n constructor(maxEntries = 9) {\n // max entries in a node is 9 by default; min node fill is 40% for best performance\n this._maxEntries = Math.max(4, maxEntries);\n this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\n this.clear();\n }\n\n all() {\n return this._all(this.data, []);\n }\n\n search(bbox) {\n let node = this.data;\n const result = [];\n\n if (!intersects(bbox, node)) return result;\n\n const toBBox = this.toBBox;\n const nodesToSearch = [];\n\n while (node) {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const childBBox = node.leaf ? toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf) result.push(child);\n else if (contains(bbox, childBBox)) this._all(child, result);\n else nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return result;\n }\n\n collides(bbox) {\n let node = this.data;\n\n if (!intersects(bbox, node)) return false;\n\n const nodesToSearch = [];\n while (node) {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const childBBox = node.leaf ? this.toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf || contains(bbox, childBBox)) return true;\n nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return false;\n }\n\n load(data) {\n if (!(data && data.length)) return this;\n\n if (data.length < this._minEntries) {\n for (let i = 0; i < data.length; i++) {\n this.insert(data[i]);\n }\n return this;\n }\n\n // recursively build the tree with the given data from scratch using OMT algorithm\n let node = this._build(data.slice(), 0, data.length - 1, 0);\n\n if (!this.data.children.length) {\n // save as is if tree is empty\n this.data = node;\n\n } else if (this.data.height === node.height) {\n // split root if trees have the same height\n this._splitRoot(this.data, node);\n\n } else {\n if (this.data.height < node.height) {\n // swap trees if inserted one is bigger\n const tmpNode = this.data;\n this.data = node;\n node = tmpNode;\n }\n\n // insert the small tree into the large tree at appropriate level\n this._insert(node, this.data.height - node.height - 1, true);\n }\n\n return this;\n }\n\n insert(item) {\n if (item) this._insert(item, this.data.height - 1);\n return this;\n }\n\n clear() {\n this.data = createNode([]);\n return this;\n }\n\n remove(item, equalsFn) {\n if (!item) return this;\n\n let node = this.data;\n const bbox = this.toBBox(item);\n const path = [];\n const indexes = [];\n let i, parent, goingUp;\n\n // depth-first iterative tree traversal\n while (node || path.length) {\n\n if (!node) { // go up\n node = path.pop();\n parent = path[path.length - 1];\n i = indexes.pop();\n goingUp = true;\n }\n\n if (node.leaf) { // check current node\n const index = findItem(item, node.children, equalsFn);\n\n if (index !== -1) {\n // item found, remove the item and condense tree upwards\n node.children.splice(index, 1);\n path.push(node);\n this._condense(path);\n return this;\n }\n }\n\n if (!goingUp && !node.leaf && contains(node, bbox)) { // go down\n path.push(node);\n indexes.push(i);\n i = 0;\n parent = node;\n node = node.children[0];\n\n } else if (parent) { // go right\n i++;\n node = parent.children[i];\n goingUp = false;\n\n } else node = null; // nothing found\n }\n\n return this;\n }\n\n toBBox(item) { return item; }\n\n compareMinX(a, b) { return a.minX - b.minX; }\n compareMinY(a, b) { return a.minY - b.minY; }\n\n toJSON() { return this.data; }\n\n fromJSON(data) {\n this.data = data;\n return this;\n }\n\n _all(node, result) {\n const nodesToSearch = [];\n while (node) {\n if (node.leaf) result.push(...node.children);\n else nodesToSearch.push(...node.children);\n\n node = nodesToSearch.pop();\n }\n return result;\n }\n\n _build(items, left, right, height) {\n\n const N = right - left + 1;\n let M = this._maxEntries;\n let node;\n\n if (N <= M) {\n // reached leaf level; return leaf\n node = createNode(items.slice(left, right + 1));\n calcBBox(node, this.toBBox);\n return node;\n }\n\n if (!height) {\n // target height of the bulk-loaded tree\n height = Math.ceil(Math.log(N) / Math.log(M));\n\n // target number of root entries to maximize storage utilization\n M = Math.ceil(N / Math.pow(M, height - 1));\n }\n\n node = createNode([]);\n node.leaf = false;\n node.height = height;\n\n // split the items into M mostly square tiles\n\n const N2 = Math.ceil(N / M);\n const N1 = N2 * Math.ceil(Math.sqrt(M));\n\n multiSelect(items, left, right, N1, this.compareMinX);\n\n for (let i = left; i <= right; i += N1) {\n\n const right2 = Math.min(i + N1 - 1, right);\n\n multiSelect(items, i, right2, N2, this.compareMinY);\n\n for (let j = i; j <= right2; j += N2) {\n\n const right3 = Math.min(j + N2 - 1, right2);\n\n // pack each entry recursively\n node.children.push(this._build(items, j, right3, height - 1));\n }\n }\n\n calcBBox(node, this.toBBox);\n\n return node;\n }\n\n _chooseSubtree(bbox, node, level, path) {\n while (true) {\n path.push(node);\n\n if (node.leaf || path.length - 1 === level) break;\n\n let minArea = Infinity;\n let minEnlargement = Infinity;\n let targetNode;\n\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const area = bboxArea(child);\n const enlargement = enlargedArea(bbox, child) - area;\n\n // choose entry with the least area enlargement\n if (enlargement < minEnlargement) {\n minEnlargement = enlargement;\n minArea = area < minArea ? area : minArea;\n targetNode = child;\n\n } else if (enlargement === minEnlargement) {\n // otherwise choose one with the smallest area\n if (area < minArea) {\n minArea = area;\n targetNode = child;\n }\n }\n }\n\n node = targetNode || node.children[0];\n }\n\n return node;\n }\n\n _insert(item, level, isNode) {\n const bbox = isNode ? item : this.toBBox(item);\n const insertPath = [];\n\n // find the best node for accommodating the item, saving all nodes along the path too\n const node = this._chooseSubtree(bbox, this.data, level, insertPath);\n\n // put the item into the node\n node.children.push(item);\n extend(node, bbox);\n\n // split on node overflow; propagate upwards if necessary\n while (level >= 0) {\n if (insertPath[level].children.length > this._maxEntries) {\n this._split(insertPath, level);\n level--;\n } else break;\n }\n\n // adjust bboxes along the insertion path\n this._adjustParentBBoxes(bbox, insertPath, level);\n }\n\n // split overflowed node into two\n _split(insertPath, level) {\n const node = insertPath[level];\n const M = node.children.length;\n const m = this._minEntries;\n\n this._chooseSplitAxis(node, m, M);\n\n const splitIndex = this._chooseSplitIndex(node, m, M);\n\n const newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));\n newNode.height = node.height;\n newNode.leaf = node.leaf;\n\n calcBBox(node, this.toBBox);\n calcBBox(newNode, this.toBBox);\n\n if (level) insertPath[level - 1].children.push(newNode);\n else this._splitRoot(node, newNode);\n }\n\n _splitRoot(node, newNode) {\n // split root node\n this.data = createNode([node, newNode]);\n this.data.height = node.height + 1;\n this.data.leaf = false;\n calcBBox(this.data, this.toBBox);\n }\n\n _chooseSplitIndex(node, m, M) {\n let index;\n let minOverlap = Infinity;\n let minArea = Infinity;\n\n for (let i = m; i <= M - m; i++) {\n const bbox1 = distBBox(node, 0, i, this.toBBox);\n const bbox2 = distBBox(node, i, M, this.toBBox);\n\n const overlap = intersectionArea(bbox1, bbox2);\n const area = bboxArea(bbox1) + bboxArea(bbox2);\n\n // choose distribution with minimum overlap\n if (overlap < minOverlap) {\n minOverlap = overlap;\n index = i;\n\n minArea = area < minArea ? area : minArea;\n\n } else if (overlap === minOverlap) {\n // otherwise choose distribution with minimum area\n if (area < minArea) {\n minArea = area;\n index = i;\n }\n }\n }\n\n return index || M - m;\n }\n\n // sorts node children by the best axis for split\n _chooseSplitAxis(node, m, M) {\n const compareMinX = node.leaf ? this.compareMinX : compareNodeMinX;\n const compareMinY = node.leaf ? this.compareMinY : compareNodeMinY;\n const xMargin = this._allDistMargin(node, m, M, compareMinX);\n const yMargin = this._allDistMargin(node, m, M, compareMinY);\n\n // if total distributions margin value is minimal for x, sort by minX,\n // otherwise it's already sorted by minY\n if (xMargin < yMargin) node.children.sort(compareMinX);\n }\n\n // total margin of all possible split distributions where each node is at least m full\n _allDistMargin(node, m, M, compare) {\n node.children.sort(compare);\n\n const toBBox = this.toBBox;\n const leftBBox = distBBox(node, 0, m, toBBox);\n const rightBBox = distBBox(node, M - m, M, toBBox);\n let margin = bboxMargin(leftBBox) + bboxMargin(rightBBox);\n\n for (let i = m; i < M - m; i++) {\n const child = node.children[i];\n extend(leftBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(leftBBox);\n }\n\n for (let i = M - m - 1; i >= m; i--) {\n const child = node.children[i];\n extend(rightBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(rightBBox);\n }\n\n return margin;\n }\n\n _adjustParentBBoxes(bbox, path, level) {\n // adjust bboxes along the given tree path\n for (let i = level; i >= 0; i--) {\n extend(path[i], bbox);\n }\n }\n\n _condense(path) {\n // go through the path, removing empty nodes and updating bboxes\n for (let i = path.length - 1, siblings; i >= 0; i--) {\n if (path[i].children.length === 0) {\n if (i > 0) {\n siblings = path[i - 1].children;\n siblings.splice(siblings.indexOf(path[i]), 1);\n\n } else this.clear();\n\n } else calcBBox(path[i], this.toBBox);\n }\n }\n}\n\nfunction findItem(item, items, equalsFn) {\n if (!equalsFn) return items.indexOf(item);\n\n for (let i = 0; i < items.length; i++) {\n if (equalsFn(item, items[i])) return i;\n }\n return -1;\n}\n\n// calculate node's bbox from bboxes of its children\nfunction calcBBox(node, toBBox) {\n distBBox(node, 0, node.children.length, toBBox, node);\n}\n\n// min bounding rectangle of node children from k to p-1\nfunction distBBox(node, k, p, toBBox, destNode) {\n if (!destNode) destNode = createNode(null);\n destNode.minX = Infinity;\n destNode.minY = Infinity;\n destNode.maxX = -Infinity;\n destNode.maxY = -Infinity;\n\n for (let i = k; i < p; i++) {\n const child = node.children[i];\n extend(destNode, node.leaf ? toBBox(child) : child);\n }\n\n return destNode;\n}\n\nfunction extend(a, b) {\n a.minX = Math.min(a.minX, b.minX);\n a.minY = Math.min(a.minY, b.minY);\n a.maxX = Math.max(a.maxX, b.maxX);\n a.maxY = Math.max(a.maxY, b.maxY);\n return a;\n}\n\nfunction compareNodeMinX(a, b) { return a.minX - b.minX; }\nfunction compareNodeMinY(a, b) { return a.minY - b.minY; }\n\nfunction bboxArea(a) { return (a.maxX - a.minX) * (a.maxY - a.minY); }\nfunction bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }\n\nfunction enlargedArea(a, b) {\n return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *\n (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));\n}\n\nfunction intersectionArea(a, b) {\n const minX = Math.max(a.minX, b.minX);\n const minY = Math.max(a.minY, b.minY);\n const maxX = Math.min(a.maxX, b.maxX);\n const maxY = Math.min(a.maxY, b.maxY);\n\n return Math.max(0, maxX - minX) *\n Math.max(0, maxY - minY);\n}\n\nfunction contains(a, b) {\n return a.minX <= b.minX &&\n a.minY <= b.minY &&\n b.maxX <= a.maxX &&\n b.maxY <= a.maxY;\n}\n\nfunction intersects(a, b) {\n return b.minX <= a.maxX &&\n b.minY <= a.maxY &&\n b.maxX >= a.minX &&\n b.maxY >= a.minY;\n}\n\nfunction createNode(children) {\n return {\n children,\n height: 1,\n leaf: true,\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity\n };\n}\n\n// sort an array so that items come in groups of n unsorted items, with groups sorted between each other;\n// combines selection algorithm with binary divide & conquer approach\n\nfunction multiSelect(arr, left, right, n, compare) {\n const stack = [left, right];\n\n while (stack.length) {\n right = stack.pop();\n left = stack.pop();\n\n if (right - left <= n) continue;\n\n const mid = left + Math.ceil((right - left) / n / 2) * n;\n quickselect(arr, mid, left, right, compare);\n\n stack.push(left, mid, mid, right);\n }\n}\n","import React from 'react';\nimport { Dialog, DialogTitle, DialogContent } from '@material-ui/core';\nimport { observer } from 'mobx-react';\nimport { Attributes } from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail';\nexport default observer(function (_a) {\n var info = _a.info, onClose = _a.onClose;\n return (React.createElement(Dialog, { onClose: function () { return onClose(); }, open: true },\n React.createElement(DialogTitle, null, \"Metadata\"),\n React.createElement(DialogContent, null,\n React.createElement(Attributes, { attributes: info }))));\n});\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Menu, MenuItem } from '@material-ui/core';\nimport normalizeWheel from 'normalize-wheel';\nimport { observer } from 'mobx-react';\nimport RBush from 'rbush';\nimport MoreInfoDlg from './MoreInfoDlg';\nvar extendBounds = 5;\nvar radius = 3.5;\nvar d = radius * 2;\nvar padding = 600;\nvar TreeMenu = observer(function (_a) {\n var _b, _c;\n var node = _a.node, onClose = _a.onClose, model = _a.model;\n var structures = model.structures;\n var nodeDetails = node ? model.getRowDetails(node.name) : undefined;\n return (React.createElement(React.Fragment, null,\n React.createElement(Menu, { anchorReference: \"anchorPosition\", anchorPosition: {\n top: node.y,\n left: node.x,\n }, transitionDuration: 0, keepMounted: true, open: Boolean(node), onClose: onClose },\n React.createElement(MenuItem, { dense: true, disabled: true }, node.name),\n React.createElement(MenuItem, { dense: true, onClick: function () {\n model.setDialogComponent(MoreInfoDlg, {\n info: model.getRowDetails(node.name),\n });\n onClose();\n } }, \"More info...\"), (_b = structures[node.name]) === null || _b === void 0 ? void 0 :\n _b.map(function (entry) {\n return !model.selectedStructures.find(function (n) { return n.id === node.name; }) ? (React.createElement(MenuItem, { key: JSON.stringify(entry), dense: true, onClick: function () {\n model.addStructureToSelection({\n structure: entry,\n id: node.name,\n });\n onClose();\n } },\n \"Add PDB to selection (\",\n entry.pdb,\n \")\")) : (React.createElement(MenuItem, { key: JSON.stringify(entry), dense: true, onClick: function () {\n model.removeStructureFromSelection({\n structure: entry,\n id: node.name,\n });\n onClose();\n } },\n \"Remove PDB from selection (\",\n entry.pdb,\n \")\"));\n }), (_c = nodeDetails.accession) === null || _c === void 0 ? void 0 :\n _c.map(function (accession) { return (React.createElement(MenuItem, { dense: true, key: accession, onClick: function () {\n model.addUniprotTrack({ name: nodeDetails.name, accession: accession });\n onClose();\n } },\n \"Open UniProt track (\",\n accession,\n \")\")); }))));\n});\nvar TreeBranchMenu = observer(function (_a) {\n var node = _a.node, model = _a.model, onClose = _a.onClose;\n return (React.createElement(Menu, { anchorReference: \"anchorPosition\", anchorPosition: {\n left: node.x,\n top: node.y,\n }, transitionDuration: 0, keepMounted: true, open: Boolean(node), onClose: onClose },\n React.createElement(MenuItem, { dense: true, disabled: true }, node.name),\n React.createElement(MenuItem, { dense: true, onClick: function () {\n model.toggleCollapsed(node.id);\n onClose();\n } }, model.collapsed.includes(node.id)\n ? 'Expand this node'\n : 'Collapse this node'),\n React.createElement(MenuItem, { dense: true, onClick: function () {\n model.showOnly === node.id\n ? model.setShowOnly(undefined)\n : model.setShowOnly(node.id);\n onClose();\n } }, model.showOnly === node.id\n ? 'Disable show only this node'\n : 'Show only this node')));\n});\nvar TreeBlock = observer(function (_a) {\n var model = _a.model, offsetY = _a.offsetY;\n var ref = useRef(null);\n var clickMap = useRef(new RBush());\n var mouseoverRef = useRef(null);\n var _b = useState(), branchMenu = _b[0], setBranchMenu = _b[1];\n var _c = useState(), toggleNodeMenu = _c[0], setToggleNodeMenu = _c[1];\n var _d = useState(), hoverElt = _d[0], setHoverElt = _d[1];\n var hierarchy = model.hierarchy, rowHeight = model.rowHeight, scrollY = model.scrollY, treeWidth = model.treeWidth, showBranchLen = model.showBranchLen, collapsed = model.collapsed, margin = model.margin, labelsAlignRight = model.labelsAlignRight, noTree = model.noTree, blockSize = model.blockSize, drawNodeBubbles = model.drawNodeBubbles, drawTree = model.drawTree, treeAreaWidth = model.treeAreaWidth, structures = model.structures, highResScaleFactor = model.highResScaleFactor;\n useEffect(function () {\n clickMap.current.clear();\n if (!ref.current) {\n return;\n }\n var ctx = ref.current.getContext('2d');\n if (!ctx) {\n return;\n }\n ctx.resetTransform();\n ctx.scale(highResScaleFactor, highResScaleFactor);\n ctx.clearRect(0, 0, treeWidth + padding, blockSize);\n ctx.translate(margin.left, -offsetY);\n var font = ctx.font;\n ctx.font = font.replace(/\\d+px/, \"\".concat(Math.max(8, rowHeight - 8), \"px\"));\n if (!noTree && drawTree) {\n hierarchy.links().forEach(function (_a) {\n var source = _a.source, target = _a.target;\n var y = showBranchLen ? 'len' : 'y';\n //@ts-ignore\n var _b = source, sy = _b.x, _c = y, sx = _b[_c];\n //@ts-ignore\n var _d = target, ty = _d.x, _e = y, tx = _d[_e];\n var y1 = Math.min(sy, ty);\n var y2 = Math.max(sy, ty);\n //1d line intersection to check if line crosses block at all, this is\n //an optimization that allows us to skip drawing most tree links\n //outside the block\n if (offsetY + blockSize >= y1 && y2 >= offsetY) {\n ctx.beginPath();\n ctx.moveTo(sx, sy);\n ctx.lineTo(sx, ty);\n ctx.lineTo(tx, ty);\n ctx.stroke();\n }\n });\n if (drawNodeBubbles) {\n hierarchy.descendants().forEach(function (node) {\n var val = showBranchLen ? 'len' : 'y';\n var _a = node, \n //@ts-ignore\n y = _a.x, \n //@ts-ignore\n _b = val, \n //@ts-ignore\n x = _a[_b], data = _a.data;\n var _c = data.id, id = _c === void 0 ? '' : _c, _d = data.name, name = _d === void 0 ? '' : _d;\n if (y > offsetY - extendBounds &&\n y < offsetY + blockSize + extendBounds) {\n ctx.strokeStyle = 'black';\n ctx.fillStyle = collapsed.includes(id) ? 'black' : 'white';\n ctx.beginPath();\n ctx.arc(x, y, radius, 0, 2 * Math.PI);\n ctx.fill();\n ctx.stroke();\n clickMap.current.insert({\n minX: x - radius,\n maxX: x - radius + d,\n minY: y - radius,\n maxY: y - radius + d,\n branch: true,\n id: id,\n name: name,\n });\n }\n });\n }\n }\n if (rowHeight >= 10) {\n if (labelsAlignRight) {\n ctx.textAlign = 'right';\n ctx.setLineDash([1, 3]);\n }\n else {\n ctx.textAlign = 'start';\n }\n hierarchy.leaves().forEach(function (node) {\n var \n //@ts-ignore\n y = node.x, \n //@ts-ignore\n x = node.y, _a = node.data, name = _a.name, id = _a.id, \n //@ts-ignore\n len = node.len;\n if (y > offsetY - extendBounds &&\n y < offsetY + blockSize + extendBounds) {\n //note: +rowHeight/4 matches with -rowHeight/4 in msa\n var yp = y + rowHeight / 4;\n var xp = showBranchLen ? len : x;\n var width = ctx.measureText(name).width;\n var height = ctx.measureText('M').width; // use an 'em' for height\n var hasStructure = structures[name];\n ctx.fillStyle = hasStructure ? 'blue' : 'black';\n if (!drawTree && !labelsAlignRight) {\n ctx.fillText(name, 0, yp);\n clickMap.current.insert({\n minX: 0,\n maxX: width,\n minY: yp - height,\n maxY: yp,\n name: name,\n id: id,\n });\n }\n else if (labelsAlignRight) {\n var smallPadding = 2;\n var offset = treeAreaWidth - smallPadding - margin.left;\n if (drawTree && !noTree) {\n var width_1 = ctx.measureText(name).width;\n ctx.moveTo(xp + radius + 2, y);\n ctx.lineTo(offset - smallPadding - width_1, y);\n ctx.stroke();\n }\n ctx.fillText(name, offset, yp);\n clickMap.current.insert({\n minX: treeAreaWidth - margin.left - width,\n maxX: treeAreaWidth - margin.left,\n minY: yp - height,\n maxY: yp,\n name: name,\n id: id,\n });\n }\n else {\n ctx.fillText(name, xp + d, yp);\n clickMap.current.insert({\n minX: xp + d,\n maxX: xp + d + width,\n minY: yp - height,\n maxY: yp,\n name: name,\n id: id,\n });\n }\n }\n });\n ctx.setLineDash([]);\n }\n }, [\n collapsed,\n rowHeight,\n margin.left,\n hierarchy,\n offsetY,\n treeWidth,\n showBranchLen,\n noTree,\n blockSize,\n drawNodeBubbles,\n drawTree,\n labelsAlignRight,\n treeAreaWidth,\n structures,\n highResScaleFactor,\n ]);\n useEffect(function () {\n var canvas = mouseoverRef.current;\n if (!canvas) {\n return;\n }\n var ctx = canvas.getContext('2d');\n if (!ctx) {\n return;\n }\n ctx.resetTransform();\n ctx.clearRect(0, 0, treeWidth + padding, blockSize);\n ctx.translate(margin.left, -offsetY);\n if (hoverElt) {\n var minX = hoverElt.minX, maxX = hoverElt.maxX, minY = hoverElt.minY, maxY = hoverElt.maxY;\n ctx.fillStyle = 'rgba(0,0,0,0.1)';\n ctx.fillRect(minX, minY, maxX - minX, maxY - minY);\n }\n }, [hoverElt, margin.left, offsetY, blockSize, treeWidth]);\n function hoverBranchClickMap(event) {\n var x = event.nativeEvent.offsetX - margin.left;\n var y = event.nativeEvent.offsetY;\n var entry = clickMap.current.search({\n minX: x,\n maxX: x + 1,\n minY: y + offsetY,\n maxY: y + 1 + offsetY,\n })[0];\n return entry && entry.branch\n ? __assign(__assign({}, entry), { x: event.clientX, y: event.clientY }) : undefined;\n }\n function hoverNameClickMap(event) {\n var x = event.nativeEvent.offsetX - margin.left;\n var y = event.nativeEvent.offsetY;\n var entry = clickMap.current.search({\n minX: x,\n maxX: x + 1,\n minY: y + offsetY,\n maxY: y + 1 + offsetY,\n })[0];\n return entry && !entry.branch\n ? __assign(__assign({}, entry), { x: event.clientX, y: event.clientY }) : undefined;\n }\n return (React.createElement(React.Fragment, null,\n (branchMenu === null || branchMenu === void 0 ? void 0 : branchMenu.id) ? (React.createElement(TreeBranchMenu, { node: branchMenu, model: model, onClose: function () { return setBranchMenu(undefined); } })) : null,\n (toggleNodeMenu === null || toggleNodeMenu === void 0 ? void 0 : toggleNodeMenu.id) ? (React.createElement(TreeMenu, { node: toggleNodeMenu, model: model, onClose: function () { return setToggleNodeMenu(undefined); } })) : null,\n React.createElement(\"canvas\", { width: (treeWidth + padding) * highResScaleFactor, height: blockSize * highResScaleFactor, style: {\n width: treeWidth + padding,\n height: blockSize,\n top: scrollY + offsetY,\n left: 0,\n position: 'absolute',\n }, onMouseMove: function (event) {\n if (!ref.current) {\n return;\n }\n var ret = hoverNameClickMap(event) || hoverBranchClickMap(event);\n if (ret) {\n ref.current.style.cursor = 'pointer';\n }\n else {\n ref.current.style.cursor = 'default';\n }\n setHoverElt(hoverNameClickMap(event));\n }, onClick: function (event) {\n var x = event.clientX, y = event.clientY;\n var data = hoverBranchClickMap(event);\n if (data === null || data === void 0 ? void 0 : data.id) {\n setBranchMenu(__assign(__assign({}, data), { x: x, y: y }));\n }\n var data2 = hoverNameClickMap(event);\n if (data2 === null || data2 === void 0 ? void 0 : data2.id) {\n setToggleNodeMenu(__assign(__assign({}, data2), { x: x, y: y }));\n }\n }, ref: ref }),\n React.createElement(\"canvas\", { style: {\n width: treeWidth + padding,\n height: blockSize,\n top: scrollY + offsetY,\n left: 0,\n position: 'absolute',\n pointerEvents: 'none',\n zIndex: 100,\n }, width: treeWidth + padding, height: blockSize, ref: mouseoverRef })));\n});\nvar TreeCanvas = observer(function (_a) {\n var model = _a.model;\n var ref = useRef(null);\n var scheduled = useRef(false);\n var deltaY = useRef(0);\n var prevY = useRef(0);\n var treeWidth = model.treeWidth, height = model.height, blocksY = model.blocksY;\n var _b = useState(false), mouseDragging = _b[0], setMouseDragging = _b[1];\n useEffect(function () {\n var curr = ref.current;\n if (!curr) {\n return;\n }\n function onWheel(origEvent) {\n var event = normalizeWheel(origEvent);\n deltaY.current += event.pixelY;\n if (!scheduled.current) {\n scheduled.current = true;\n requestAnimationFrame(function () {\n model.doScrollY(-deltaY.current);\n deltaY.current = 0;\n scheduled.current = false;\n });\n }\n origEvent.preventDefault();\n }\n curr.addEventListener('wheel', onWheel);\n return function () {\n curr.removeEventListener('wheel', onWheel);\n };\n }, [model]);\n useEffect(function () {\n var cleanup = function () { };\n function globalMouseMove(event) {\n event.preventDefault();\n var currY = event.clientY;\n var distanceY = currY - prevY.current;\n if (distanceY) {\n // use rAF to make it so multiple event handlers aren't fired per-frame\n // see https://calendar.perfplanet.com/2013/the-runtime-performance-checklist/\n if (!scheduled.current) {\n scheduled.current = true;\n window.requestAnimationFrame(function () {\n model.doScrollY(distanceY);\n scheduled.current = false;\n prevY.current = event.clientY;\n });\n }\n }\n }\n function globalMouseUp() {\n prevY.current = 0;\n if (mouseDragging) {\n setMouseDragging(false);\n }\n }\n if (mouseDragging) {\n window.addEventListener('mousemove', globalMouseMove, true);\n window.addEventListener('mouseup', globalMouseUp, true);\n cleanup = function () {\n window.removeEventListener('mousemove', globalMouseMove, true);\n window.removeEventListener('mouseup', globalMouseUp, true);\n };\n }\n return cleanup;\n }, [model, mouseDragging]);\n function mouseDown(event) {\n // check if clicking a draggable element or a resize handle\n var target = event.target;\n if (target.draggable || target.dataset.resizer) {\n return;\n }\n // otherwise do click and drag scroll\n if (event.button === 0) {\n prevY.current = event.clientY;\n setMouseDragging(true);\n }\n }\n // this local mouseup is used in addition to the global because sometimes\n // the global add/remove are not called in time, resulting in issue #533\n function mouseUp(event) {\n event.preventDefault();\n setMouseDragging(false);\n }\n function mouseLeave(event) {\n event.preventDefault();\n }\n return (React.createElement(\"div\", { ref: ref, onMouseDown: mouseDown, onMouseUp: mouseUp, onMouseLeave: mouseLeave, style: {\n height: height,\n position: 'relative',\n overflow: 'hidden',\n width: treeWidth + padding,\n } }, blocksY.map(function (block) { return (React.createElement(TreeBlock, { key: block, model: model, offsetY: block })); })));\n});\nexport default TreeCanvas;\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","'use strict';\n\nvar isArrayish = require('is-arrayish');\n\nvar concat = Array.prototype.concat;\nvar slice = Array.prototype.slice;\n\nvar swizzle = module.exports = function swizzle(args) {\n\tvar results = [];\n\n\tfor (var i = 0, len = args.length; i < len; i++) {\n\t\tvar arg = args[i];\n\n\t\tif (isArrayish(arg)) {\n\t\t\t// http://jsperf.com/javascript-array-concat-vs-push/98\n\t\t\tresults = concat.call(results, slice.call(arg));\n\t\t} else {\n\t\t\tresults.push(arg);\n\t\t}\n\t}\n\n\treturn results;\n};\n\nswizzle.wrap = function (fn) {\n\treturn function () {\n\t\treturn fn(swizzle(arguments));\n\t};\n};\n","module.exports = function isArrayish(obj) {\n\tif (!obj || typeof obj === 'string') {\n\t\treturn false;\n\t}\n\n\treturn obj instanceof Array || Array.isArray(obj) ||\n\t\t(obj.length >= 0 && (obj.splice instanceof Function ||\n\t\t\t(Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String')));\n};\n","/* MIT license */\nvar colorNames = require('color-name');\nvar swizzle = require('simple-swizzle');\nvar hasOwnProperty = Object.hasOwnProperty;\n\nvar reverseNames = {};\n\n// create a list of reverse color names\nfor (var name in colorNames) {\n\tif (hasOwnProperty.call(colorNames, name)) {\n\t\treverseNames[colorNames[name]] = name;\n\t}\n}\n\nvar cs = module.exports = {\n\tto: {},\n\tget: {}\n};\n\ncs.get = function (string) {\n\tvar prefix = string.substring(0, 3).toLowerCase();\n\tvar val;\n\tvar model;\n\tswitch (prefix) {\n\t\tcase 'hsl':\n\t\t\tval = cs.get.hsl(string);\n\t\t\tmodel = 'hsl';\n\t\t\tbreak;\n\t\tcase 'hwb':\n\t\t\tval = cs.get.hwb(string);\n\t\t\tmodel = 'hwb';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tval = cs.get.rgb(string);\n\t\t\tmodel = 'rgb';\n\t\t\tbreak;\n\t}\n\n\tif (!val) {\n\t\treturn null;\n\t}\n\n\treturn {model: model, value: val};\n};\n\ncs.get.rgb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar abbr = /^#([a-f0-9]{3,4})$/i;\n\tvar hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i;\n\tvar rgba = /^rgba?\\(\\s*([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/;\n\tvar per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/;\n\tvar keyword = /^(\\w+)$/;\n\n\tvar rgb = [0, 0, 0, 1];\n\tvar match;\n\tvar i;\n\tvar hexAlpha;\n\n\tif (match = string.match(hex)) {\n\t\thexAlpha = match[2];\n\t\tmatch = match[1];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\t// https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19\n\t\t\tvar i2 = i * 2;\n\t\t\trgb[i] = parseInt(match.slice(i2, i2 + 2), 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(abbr)) {\n\t\tmatch = match[1];\n\t\thexAlpha = match[3];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i] + match[i], 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(rgba)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i + 1], 0);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\tif (match[5]) {\n\t\t\t\trgb[3] = parseFloat(match[4]) * 0.01;\n\t\t\t} else {\n\t\t\t\trgb[3] = parseFloat(match[4]);\n\t\t\t}\n\t\t}\n\t} else if (match = string.match(per)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\tif (match[5]) {\n\t\t\t\trgb[3] = parseFloat(match[4]) * 0.01;\n\t\t\t} else {\n\t\t\t\trgb[3] = parseFloat(match[4]);\n\t\t\t}\n\t\t}\n\t} else if (match = string.match(keyword)) {\n\t\tif (match[1] === 'transparent') {\n\t\t\treturn [0, 0, 0, 0];\n\t\t}\n\n\t\tif (!hasOwnProperty.call(colorNames, match[1])) {\n\t\t\treturn null;\n\t\t}\n\n\t\trgb = colorNames[match[1]];\n\t\trgb[3] = 1;\n\n\t\treturn rgb;\n\t} else {\n\t\treturn null;\n\t}\n\n\tfor (i = 0; i < 3; i++) {\n\t\trgb[i] = clamp(rgb[i], 0, 255);\n\t}\n\trgb[3] = clamp(rgb[3], 0, 1);\n\n\treturn rgb;\n};\n\ncs.get.hsl = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hsl = /^hsla?\\(\\s*([+-]?(?:\\d{0,3}\\.)?\\d+)(?:deg)?\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*(?:[,|\\/]\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tvar match = string.match(hsl);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = ((parseFloat(match[1]) % 360) + 360) % 360;\n\t\tvar s = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar l = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\n\t\treturn [h, s, l, a];\n\t}\n\n\treturn null;\n};\n\ncs.get.hwb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hwb = /^hwb\\(\\s*([+-]?\\d{0,3}(?:\\.\\d+)?)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tvar match = string.match(hwb);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = ((parseFloat(match[1]) % 360) + 360) % 360;\n\t\tvar w = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar b = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\t\treturn [h, w, b, a];\n\t}\n\n\treturn null;\n};\n\ncs.to.hex = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn (\n\t\t'#' +\n\t\thexDouble(rgba[0]) +\n\t\thexDouble(rgba[1]) +\n\t\thexDouble(rgba[2]) +\n\t\t(rgba[3] < 1\n\t\t\t? (hexDouble(Math.round(rgba[3] * 255)))\n\t\t\t: '')\n\t);\n};\n\ncs.to.rgb = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')'\n\t\t: 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')';\n};\n\ncs.to.rgb.percent = function () {\n\tvar rgba = swizzle(arguments);\n\n\tvar r = Math.round(rgba[0] / 255 * 100);\n\tvar g = Math.round(rgba[1] / 255 * 100);\n\tvar b = Math.round(rgba[2] / 255 * 100);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)'\n\t\t: 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')';\n};\n\ncs.to.hsl = function () {\n\tvar hsla = swizzle(arguments);\n\treturn hsla.length < 4 || hsla[3] === 1\n\t\t? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)'\n\t\t: 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')';\n};\n\n// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\ncs.to.hwb = function () {\n\tvar hwba = swizzle(arguments);\n\n\tvar a = '';\n\tif (hwba.length >= 4 && hwba[3] !== 1) {\n\t\ta = ', ' + hwba[3];\n\t}\n\n\treturn 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')';\n};\n\ncs.to.keyword = function (rgb) {\n\treturn reverseNames[rgb.slice(0, 3)];\n};\n\n// helpers\nfunction clamp(num, min, max) {\n\treturn Math.min(Math.max(min, num), max);\n}\n\nfunction hexDouble(num) {\n\tvar str = Math.round(num).toString(16).toUpperCase();\n\treturn (str.length < 2) ? '0' + str : str;\n}\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","/* MIT license */\nvar cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nvar reverseKeywords = {};\nfor (var key in cssKeywords) {\n\tif (cssKeywords.hasOwnProperty(key)) {\n\t\treverseKeywords[cssKeywords[key]] = key;\n\t}\n}\n\nvar convert = module.exports = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\n// hide .channels and .labels properties\nfor (var model in convert) {\n\tif (convert.hasOwnProperty(model)) {\n\t\tif (!('channels' in convert[model])) {\n\t\t\tthrow new Error('missing channels property: ' + model);\n\t\t}\n\n\t\tif (!('labels' in convert[model])) {\n\t\t\tthrow new Error('missing channel labels property: ' + model);\n\t\t}\n\n\t\tif (convert[model].labels.length !== convert[model].channels) {\n\t\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t\t}\n\n\t\tvar channels = convert[model].channels;\n\t\tvar labels = convert[model].labels;\n\t\tdelete convert[model].channels;\n\t\tdelete convert[model].labels;\n\t\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\t\tObject.defineProperty(convert[model], 'labels', {value: labels});\n\t}\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar min = Math.min(r, g, b);\n\tvar max = Math.max(r, g, b);\n\tvar delta = max - min;\n\tvar h;\n\tvar s;\n\tvar l;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tl = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tvar rdif;\n\tvar gdif;\n\tvar bdif;\n\tvar h;\n\tvar s;\n\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar v = Math.max(r, g, b);\n\tvar diff = v - Math.min(r, g, b);\n\tvar diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = s = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tvar r = rgb[0];\n\tvar g = rgb[1];\n\tvar b = rgb[2];\n\tvar h = convert.rgb.hsl(rgb)[0];\n\tvar w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar c;\n\tvar m;\n\tvar y;\n\tvar k;\n\n\tk = Math.min(1 - r, 1 - g, 1 - b);\n\tc = (1 - r - k) / (1 - k) || 0;\n\tm = (1 - g - k) / (1 - k) || 0;\n\ty = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\n/**\n * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n * */\nfunction comparativeDistance(x, y) {\n\treturn (\n\t\tMath.pow(x[0] - y[0], 2) +\n\t\tMath.pow(x[1] - y[1], 2) +\n\t\tMath.pow(x[2] - y[2], 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tvar reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tvar currentClosestDistance = Infinity;\n\tvar currentClosestKeyword;\n\n\tfor (var keyword in cssKeywords) {\n\t\tif (cssKeywords.hasOwnProperty(keyword)) {\n\t\t\tvar value = cssKeywords[keyword];\n\n\t\t\t// Compute comparative distance\n\t\t\tvar distance = comparativeDistance(rgb, value);\n\n\t\t\t// Check if its less, if so set as closest\n\t\t\tif (distance < currentClosestDistance) {\n\t\t\t\tcurrentClosestDistance = distance;\n\t\t\t\tcurrentClosestKeyword = keyword;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\n\t// assume sRGB\n\tr = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);\n\n\tvar x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tvar y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tvar z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tvar xyz = convert.rgb.xyz(rgb);\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tvar h = hsl[0] / 360;\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar t1;\n\tvar t2;\n\tvar t3;\n\tvar rgb;\n\tvar val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tt1 = 2 * l - t2;\n\n\trgb = [0, 0, 0];\n\tfor (var i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tvar h = hsl[0];\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar smin = s;\n\tvar lmin = Math.max(l, 0.01);\n\tvar sv;\n\tvar v;\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tv = (l + s) / 2;\n\tsv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tvar h = hsv[0] / 60;\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar hi = Math.floor(h) % 6;\n\n\tvar f = h - Math.floor(h);\n\tvar p = 255 * v * (1 - s);\n\tvar q = 255 * v * (1 - (s * f));\n\tvar t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tvar h = hsv[0];\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar vmin = Math.max(v, 0.01);\n\tvar lmin;\n\tvar sl;\n\tvar l;\n\n\tl = (2 - s) * v;\n\tlmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tvar h = hwb[0] / 360;\n\tvar wh = hwb[1] / 100;\n\tvar bl = hwb[2] / 100;\n\tvar ratio = wh + bl;\n\tvar i;\n\tvar v;\n\tvar f;\n\tvar n;\n\n\t// wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\ti = Math.floor(6 * h);\n\tv = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tn = wh + f * (v - wh); // linear interpolation\n\n\tvar r;\n\tvar g;\n\tvar b;\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tvar c = cmyk[0] / 100;\n\tvar m = cmyk[1] / 100;\n\tvar y = cmyk[2] / 100;\n\tvar k = cmyk[3] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = 1 - Math.min(1, c * (1 - k) + k);\n\tg = 1 - Math.min(1, m * (1 - k) + k);\n\tb = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tvar x = xyz[0] / 100;\n\tvar y = xyz[1] / 100;\n\tvar z = xyz[2] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar x;\n\tvar y;\n\tvar z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tvar y2 = Math.pow(y, 3);\n\tvar x2 = Math.pow(x, 3);\n\tvar z2 = Math.pow(z, 3);\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar hr;\n\tvar h;\n\tvar c;\n\n\thr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tc = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tvar l = lch[0];\n\tvar c = lch[1];\n\tvar h = lch[2];\n\tvar a;\n\tvar b;\n\tvar hr;\n\n\thr = h / 360 * 2 * Math.PI;\n\ta = c * Math.cos(hr);\n\tb = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\tvar value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tvar ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\n\t// we use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tvar ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tvar color = args % 10;\n\n\t// handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tvar mult = (~~(args > 50) + 1) * 0.5;\n\tvar r = ((color & 1) * mult) * 255;\n\tvar g = (((color >> 1) & 1) * mult) * 255;\n\tvar b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// handle greyscale\n\tif (args >= 232) {\n\t\tvar c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tvar rem;\n\tvar r = Math.floor(args / 36) / 5 * 255;\n\tvar g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tvar b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tvar integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tvar match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tvar colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(function (char) {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tvar integer = parseInt(colorString, 16);\n\tvar r = (integer >> 16) & 0xFF;\n\tvar g = (integer >> 8) & 0xFF;\n\tvar b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar max = Math.max(Math.max(r, g), b);\n\tvar min = Math.min(Math.min(r, g), b);\n\tvar chroma = (max - min);\n\tvar grayscale;\n\tvar hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma + 4;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar c = 1;\n\tvar f = 0;\n\n\tif (l < 0.5) {\n\t\tc = 2.0 * s * l;\n\t} else {\n\t\tc = 2.0 * s * (1.0 - l);\n\t}\n\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\n\tvar c = s * v;\n\tvar f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tvar h = hcg[0] / 360;\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tvar pure = [0, 0, 0];\n\tvar hi = (h % 1) * 6;\n\tvar v = hi % 1;\n\tvar w = 1 - v;\n\tvar mg = 0;\n\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar v = c + g * (1.0 - c);\n\tvar f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar l = g * (1.0 - c) + 0.5 * c;\n\tvar s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\tvar v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tvar w = hwb[1] / 100;\n\tvar b = hwb[2] / 100;\n\tvar v = 1 - b;\n\tvar c = v - w;\n\tvar g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = convert.gray.hsv = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tvar val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tvar integer = (val << 16) + (val << 8) + val;\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tvar val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n","var conversions = require('./conversions');\n\n/*\n\tthis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tvar graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tvar models = Object.keys(conversions);\n\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tvar graph = buildGraph();\n\tvar queue = [fromModel]; // unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tvar current = queue.pop();\n\t\tvar adjacents = Object.keys(conversions[current]);\n\n\t\tfor (var len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tvar adjacent = adjacents[i];\n\t\t\tvar node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tvar path = [graph[toModel].parent, toModel];\n\tvar fn = conversions[graph[toModel].parent][toModel];\n\n\tvar cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tvar graph = deriveBFS(fromModel);\n\tvar conversion = {};\n\n\tvar models = Object.keys(graph);\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tvar toModel = models[i];\n\t\tvar node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// no possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n","var conversions = require('./conversions');\nvar route = require('./route');\n\nvar convert = {};\n\nvar models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\tvar result = fn(args);\n\n\t\t// we're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (var len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(function (fromModel) {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tvar routes = route(fromModel);\n\tvar routeModels = Object.keys(routes);\n\n\trouteModels.forEach(function (toModel) {\n\t\tvar fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n","'use strict';\n\nvar colorString = require('color-string');\nvar convert = require('color-convert');\n\nvar _slice = [].slice;\n\nvar skippedModels = [\n\t// to be honest, I don't really feel like keyword belongs in color convert, but eh.\n\t'keyword',\n\n\t// gray conflicts with some method names, and has its own method defined.\n\t'gray',\n\n\t// shouldn't really be in color-convert either...\n\t'hex'\n];\n\nvar hashedModelKeys = {};\nObject.keys(convert).forEach(function (model) {\n\thashedModelKeys[_slice.call(convert[model].labels).sort().join('')] = model;\n});\n\nvar limiters = {};\n\nfunction Color(obj, model) {\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(obj, model);\n\t}\n\n\tif (model && model in skippedModels) {\n\t\tmodel = null;\n\t}\n\n\tif (model && !(model in convert)) {\n\t\tthrow new Error('Unknown model: ' + model);\n\t}\n\n\tvar i;\n\tvar channels;\n\n\tif (obj == null) { // eslint-disable-line no-eq-null,eqeqeq\n\t\tthis.model = 'rgb';\n\t\tthis.color = [0, 0, 0];\n\t\tthis.valpha = 1;\n\t} else if (obj instanceof Color) {\n\t\tthis.model = obj.model;\n\t\tthis.color = obj.color.slice();\n\t\tthis.valpha = obj.valpha;\n\t} else if (typeof obj === 'string') {\n\t\tvar result = colorString.get(obj);\n\t\tif (result === null) {\n\t\t\tthrow new Error('Unable to parse color from string: ' + obj);\n\t\t}\n\n\t\tthis.model = result.model;\n\t\tchannels = convert[this.model].channels;\n\t\tthis.color = result.value.slice(0, channels);\n\t\tthis.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1;\n\t} else if (obj.length) {\n\t\tthis.model = model || 'rgb';\n\t\tchannels = convert[this.model].channels;\n\t\tvar newArr = _slice.call(obj, 0, channels);\n\t\tthis.color = zeroArray(newArr, channels);\n\t\tthis.valpha = typeof obj[channels] === 'number' ? obj[channels] : 1;\n\t} else if (typeof obj === 'number') {\n\t\t// this is always RGB - can be converted later on.\n\t\tobj &= 0xFFFFFF;\n\t\tthis.model = 'rgb';\n\t\tthis.color = [\n\t\t\t(obj >> 16) & 0xFF,\n\t\t\t(obj >> 8) & 0xFF,\n\t\t\tobj & 0xFF\n\t\t];\n\t\tthis.valpha = 1;\n\t} else {\n\t\tthis.valpha = 1;\n\n\t\tvar keys = Object.keys(obj);\n\t\tif ('alpha' in obj) {\n\t\t\tkeys.splice(keys.indexOf('alpha'), 1);\n\t\t\tthis.valpha = typeof obj.alpha === 'number' ? obj.alpha : 0;\n\t\t}\n\n\t\tvar hashedKeys = keys.sort().join('');\n\t\tif (!(hashedKeys in hashedModelKeys)) {\n\t\t\tthrow new Error('Unable to parse color from object: ' + JSON.stringify(obj));\n\t\t}\n\n\t\tthis.model = hashedModelKeys[hashedKeys];\n\n\t\tvar labels = convert[this.model].labels;\n\t\tvar color = [];\n\t\tfor (i = 0; i < labels.length; i++) {\n\t\t\tcolor.push(obj[labels[i]]);\n\t\t}\n\n\t\tthis.color = zeroArray(color);\n\t}\n\n\t// perform limitations (clamping, etc.)\n\tif (limiters[this.model]) {\n\t\tchannels = convert[this.model].channels;\n\t\tfor (i = 0; i < channels; i++) {\n\t\t\tvar limit = limiters[this.model][i];\n\t\t\tif (limit) {\n\t\t\t\tthis.color[i] = limit(this.color[i]);\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.valpha = Math.max(0, Math.min(1, this.valpha));\n\n\tif (Object.freeze) {\n\t\tObject.freeze(this);\n\t}\n}\n\nColor.prototype = {\n\ttoString: function () {\n\t\treturn this.string();\n\t},\n\n\ttoJSON: function () {\n\t\treturn this[this.model]();\n\t},\n\n\tstring: function (places) {\n\t\tvar self = this.model in colorString.to ? this : this.rgb();\n\t\tself = self.round(typeof places === 'number' ? places : 1);\n\t\tvar args = self.valpha === 1 ? self.color : self.color.concat(this.valpha);\n\t\treturn colorString.to[self.model](args);\n\t},\n\n\tpercentString: function (places) {\n\t\tvar self = this.rgb().round(typeof places === 'number' ? places : 1);\n\t\tvar args = self.valpha === 1 ? self.color : self.color.concat(this.valpha);\n\t\treturn colorString.to.rgb.percent(args);\n\t},\n\n\tarray: function () {\n\t\treturn this.valpha === 1 ? this.color.slice() : this.color.concat(this.valpha);\n\t},\n\n\tobject: function () {\n\t\tvar result = {};\n\t\tvar channels = convert[this.model].channels;\n\t\tvar labels = convert[this.model].labels;\n\n\t\tfor (var i = 0; i < channels; i++) {\n\t\t\tresult[labels[i]] = this.color[i];\n\t\t}\n\n\t\tif (this.valpha !== 1) {\n\t\t\tresult.alpha = this.valpha;\n\t\t}\n\n\t\treturn result;\n\t},\n\n\tunitArray: function () {\n\t\tvar rgb = this.rgb().color;\n\t\trgb[0] /= 255;\n\t\trgb[1] /= 255;\n\t\trgb[2] /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.push(this.valpha);\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tunitObject: function () {\n\t\tvar rgb = this.rgb().object();\n\t\trgb.r /= 255;\n\t\trgb.g /= 255;\n\t\trgb.b /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.alpha = this.valpha;\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tround: function (places) {\n\t\tplaces = Math.max(places || 0, 0);\n\t\treturn new Color(this.color.map(roundToPlace(places)).concat(this.valpha), this.model);\n\t},\n\n\talpha: function (val) {\n\t\tif (arguments.length) {\n\t\t\treturn new Color(this.color.concat(Math.max(0, Math.min(1, val))), this.model);\n\t\t}\n\n\t\treturn this.valpha;\n\t},\n\n\t// rgb\n\tred: getset('rgb', 0, maxfn(255)),\n\tgreen: getset('rgb', 1, maxfn(255)),\n\tblue: getset('rgb', 2, maxfn(255)),\n\n\thue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, function (val) { return ((val % 360) + 360) % 360; }), // eslint-disable-line brace-style\n\n\tsaturationl: getset('hsl', 1, maxfn(100)),\n\tlightness: getset('hsl', 2, maxfn(100)),\n\n\tsaturationv: getset('hsv', 1, maxfn(100)),\n\tvalue: getset('hsv', 2, maxfn(100)),\n\n\tchroma: getset('hcg', 1, maxfn(100)),\n\tgray: getset('hcg', 2, maxfn(100)),\n\n\twhite: getset('hwb', 1, maxfn(100)),\n\twblack: getset('hwb', 2, maxfn(100)),\n\n\tcyan: getset('cmyk', 0, maxfn(100)),\n\tmagenta: getset('cmyk', 1, maxfn(100)),\n\tyellow: getset('cmyk', 2, maxfn(100)),\n\tblack: getset('cmyk', 3, maxfn(100)),\n\n\tx: getset('xyz', 0, maxfn(100)),\n\ty: getset('xyz', 1, maxfn(100)),\n\tz: getset('xyz', 2, maxfn(100)),\n\n\tl: getset('lab', 0, maxfn(100)),\n\ta: getset('lab', 1),\n\tb: getset('lab', 2),\n\n\tkeyword: function (val) {\n\t\tif (arguments.length) {\n\t\t\treturn new Color(val);\n\t\t}\n\n\t\treturn convert[this.model].keyword(this.color);\n\t},\n\n\thex: function (val) {\n\t\tif (arguments.length) {\n\t\t\treturn new Color(val);\n\t\t}\n\n\t\treturn colorString.to.hex(this.rgb().round().color);\n\t},\n\n\trgbNumber: function () {\n\t\tvar rgb = this.rgb().color;\n\t\treturn ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF);\n\t},\n\n\tluminosity: function () {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tvar rgb = this.rgb().color;\n\n\t\tvar lum = [];\n\t\tfor (var i = 0; i < rgb.length; i++) {\n\t\t\tvar chan = rgb[i] / 255;\n\t\t\tlum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4);\n\t\t}\n\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast: function (color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tvar lum1 = this.luminosity();\n\t\tvar lum2 = color2.luminosity();\n\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel: function (color2) {\n\t\tvar contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7.1) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tisDark: function () {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tvar rgb = this.rgb().color;\n\t\tvar yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;\n\t\treturn yiq < 128;\n\t},\n\n\tisLight: function () {\n\t\treturn !this.isDark();\n\t},\n\n\tnegate: function () {\n\t\tvar rgb = this.rgb();\n\t\tfor (var i = 0; i < 3; i++) {\n\t\t\trgb.color[i] = 255 - rgb.color[i];\n\t\t}\n\t\treturn rgb;\n\t},\n\n\tlighten: function (ratio) {\n\t\tvar hsl = this.hsl();\n\t\thsl.color[2] += hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdarken: function (ratio) {\n\t\tvar hsl = this.hsl();\n\t\thsl.color[2] -= hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tsaturate: function (ratio) {\n\t\tvar hsl = this.hsl();\n\t\thsl.color[1] += hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdesaturate: function (ratio) {\n\t\tvar hsl = this.hsl();\n\t\thsl.color[1] -= hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\twhiten: function (ratio) {\n\t\tvar hwb = this.hwb();\n\t\thwb.color[1] += hwb.color[1] * ratio;\n\t\treturn hwb;\n\t},\n\n\tblacken: function (ratio) {\n\t\tvar hwb = this.hwb();\n\t\thwb.color[2] += hwb.color[2] * ratio;\n\t\treturn hwb;\n\t},\n\n\tgrayscale: function () {\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\t\tvar rgb = this.rgb().color;\n\t\tvar val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\treturn Color.rgb(val, val, val);\n\t},\n\n\tfade: function (ratio) {\n\t\treturn this.alpha(this.valpha - (this.valpha * ratio));\n\t},\n\n\topaquer: function (ratio) {\n\t\treturn this.alpha(this.valpha + (this.valpha * ratio));\n\t},\n\n\trotate: function (degrees) {\n\t\tvar hsl = this.hsl();\n\t\tvar hue = hsl.color[0];\n\t\thue = (hue + degrees) % 360;\n\t\thue = hue < 0 ? 360 + hue : hue;\n\t\thsl.color[0] = hue;\n\t\treturn hsl;\n\t},\n\n\tmix: function (mixinColor, weight) {\n\t\t// ported from sass implementation in C\n\t\t// https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t\tif (!mixinColor || !mixinColor.rgb) {\n\t\t\tthrow new Error('Argument to \"mix\" was not a Color instance, but rather an instance of ' + typeof mixinColor);\n\t\t}\n\t\tvar color1 = mixinColor.rgb();\n\t\tvar color2 = this.rgb();\n\t\tvar p = weight === undefined ? 0.5 : weight;\n\n\t\tvar w = 2 * p - 1;\n\t\tvar a = color1.alpha() - color2.alpha();\n\n\t\tvar w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\tvar w2 = 1 - w1;\n\n\t\treturn Color.rgb(\n\t\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\t\tw1 * color1.blue() + w2 * color2.blue(),\n\t\t\t\tcolor1.alpha() * p + color2.alpha() * (1 - p));\n\t}\n};\n\n// model conversion methods and static constructors\nObject.keys(convert).forEach(function (model) {\n\tif (skippedModels.indexOf(model) !== -1) {\n\t\treturn;\n\t}\n\n\tvar channels = convert[model].channels;\n\n\t// conversion methods\n\tColor.prototype[model] = function () {\n\t\tif (this.model === model) {\n\t\t\treturn new Color(this);\n\t\t}\n\n\t\tif (arguments.length) {\n\t\t\treturn new Color(arguments, model);\n\t\t}\n\n\t\tvar newAlpha = typeof arguments[channels] === 'number' ? channels : this.valpha;\n\t\treturn new Color(assertArray(convert[this.model][model].raw(this.color)).concat(newAlpha), model);\n\t};\n\n\t// 'static' construction methods\n\tColor[model] = function (color) {\n\t\tif (typeof color === 'number') {\n\t\t\tcolor = zeroArray(_slice.call(arguments), channels);\n\t\t}\n\t\treturn new Color(color, model);\n\t};\n});\n\nfunction roundTo(num, places) {\n\treturn Number(num.toFixed(places));\n}\n\nfunction roundToPlace(places) {\n\treturn function (num) {\n\t\treturn roundTo(num, places);\n\t};\n}\n\nfunction getset(model, channel, modifier) {\n\tmodel = Array.isArray(model) ? model : [model];\n\n\tmodel.forEach(function (m) {\n\t\t(limiters[m] || (limiters[m] = []))[channel] = modifier;\n\t});\n\n\tmodel = model[0];\n\n\treturn function (val) {\n\t\tvar result;\n\n\t\tif (arguments.length) {\n\t\t\tif (modifier) {\n\t\t\t\tval = modifier(val);\n\t\t\t}\n\n\t\t\tresult = this[model]();\n\t\t\tresult.color[channel] = val;\n\t\t\treturn result;\n\t\t}\n\n\t\tresult = this[model]().color[channel];\n\t\tif (modifier) {\n\t\t\tresult = modifier(result);\n\t\t}\n\n\t\treturn result;\n\t};\n}\n\nfunction maxfn(max) {\n\treturn function (v) {\n\t\treturn Math.max(0, Math.min(max, v));\n\t};\n}\n\nfunction assertArray(val) {\n\treturn Array.isArray(val) ? val : [val];\n}\n\nfunction zeroArray(arr, length) {\n\tfor (var i = 0; i < length; i++) {\n\t\tif (typeof arr[i] !== 'number') {\n\t\t\tarr[i] = 0;\n\t\t}\n\t}\n\n\treturn arr;\n}\n\nmodule.exports = Color;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport Color from 'color';\nexport function transform(obj, cb) {\n return Object.fromEntries(Object.entries(obj).map(cb));\n}\nexport function generateNodeIds(tree, parent, depth) {\n var _a;\n if (parent === void 0) { parent = 'node'; }\n if (depth === void 0) { depth = 0; }\n var id = \"\".concat(parent, \"-\").concat(depth);\n return __assign(__assign({}, tree), { id: id, branchset: ((_a = tree.branchset) === null || _a === void 0 ? void 0 : _a.map(function (b, i) {\n return generateNodeIds(b, \"\".concat(id, \"-\").concat(i), depth + 1);\n })) || [] });\n}\nexport function colorContrast(colorScheme, theme) {\n return transform(colorScheme, function (_a) {\n var letter = _a[0], color = _a[1];\n return [\n letter,\n theme.palette.getContrastText(Color(color).hex()),\n ];\n });\n}\n","import Color from 'color';\nimport { transform } from './util';\nvar colorSchemes = {\n clustal: {\n G: 'orange',\n P: 'orange',\n S: 'orange',\n T: 'orange',\n H: 'red',\n K: 'red',\n R: 'red',\n F: 'blue',\n W: 'blue',\n Y: 'blue',\n I: 'green',\n L: 'green',\n M: 'green',\n V: 'green',\n },\n lesk: {\n G: 'orange',\n A: 'orange',\n S: 'orange',\n T: 'orange',\n C: 'green',\n V: 'green',\n I: 'green',\n L: 'green',\n P: 'green',\n F: 'green',\n Y: 'green',\n M: 'green',\n W: 'green',\n N: 'magenta',\n Q: 'magenta',\n H: 'magenta',\n D: 'red',\n E: 'red',\n K: 'blue',\n R: 'blue',\n },\n maeditor: {\n A: 'lightgreen',\n G: 'lightgreen',\n C: 'green',\n D: 'darkgreen',\n E: 'darkgreen',\n N: 'darkgreen',\n Q: 'darkgreen',\n I: 'blue',\n L: 'blue',\n M: 'blue',\n V: 'blue',\n F: '#c8a2c8',\n W: '#c8a2c8',\n Y: '#c8a2c8',\n H: 'darkblue',\n K: 'orange',\n R: 'orange',\n P: 'pink',\n S: 'red',\n T: 'red',\n },\n percent_identity_dynamic: {},\n //https://github.com/biotite-dev/biotite/blob/8c460972f8ab904312f130dfb80f3efc8c9bd7c5/src/biotite/sequence/graphics/color_schemes/flower.json\n flower: {\n A: '#b18a51',\n C: '#ff5701',\n D: '#01a578',\n E: '#2da0a1',\n F: '#fa559d',\n G: '#b1c23c',\n H: '#0194f9',\n I: '#f27663',\n K: '#7fc3d7',\n L: '#df6e75',\n M: '#fe9daf',\n N: '#0bcec6',\n P: '#4fa32a',\n Q: '#7295ae',\n R: '#83bff1',\n S: '#b4bd9b',\n T: '#d2b576',\n V: '#fd997b',\n W: '#ff2ded',\n Y: '#c96ecf',\n },\n rainbow_dna: {\n A: '#3737f5',\n C: '#37f537',\n G: '#f5f537',\n T: '#f53737',\n U: '#f53737',\n },\n //https://github.com/biotite-dev/biotite/blob/8c460972f8ab904312f130dfb80f3efc8c9bd7c5/src/biotite/sequence/graphics/color_schemes/clustalx_protein.json\n clustalx_protein: {\n A: '#197fe5',\n C: '#e57f7f',\n D: '#cc4ccc',\n E: '#cc4ccc',\n F: '#197fe5',\n G: '#e5994c',\n H: '#19b2b2',\n I: '#197fe5',\n K: '#e53319',\n L: '#197fe5',\n M: '#197fe5',\n N: '#19cc19',\n P: '#cccc00',\n Q: '#19cc19',\n R: '#e53319',\n S: '#19cc19',\n T: '#19cc19',\n V: '#197fe5',\n W: '#197fe5',\n Y: '#19b2b2',\n },\n // this has special handling\n clustalx_protein_dynamic: {},\n clustalx_dna: {\n A: '#e53319',\n C: '#197fe5',\n G: '#e5994c',\n T: '#19cc19',\n U: '#19cc19',\n },\n jalview_buried: {\n A: '#00a35c',\n R: '#00fc03',\n N: '#00eb14',\n D: '#00eb14',\n C: '#0000ff',\n Q: '#00f10e',\n E: '#00f10e',\n G: '#009d62',\n H: '#00d52a',\n I: '#0054ab',\n L: '#007b84',\n K: '#00ff00',\n M: '#009768',\n F: '#008778',\n P: '#00e01f',\n S: '#00d52a',\n T: '#00db24',\n W: '#00a857',\n Y: '#00e619',\n V: '#005fa0',\n B: '#00eb14',\n X: '#00b649',\n Z: '#00f10e',\n },\n jalview_hydrophobicity: {\n A: '#ad0052',\n R: '#0000ff',\n N: '#0c00f3',\n D: '#0c00f3',\n C: '#c2003d',\n Q: '#0c00f3',\n E: '#0c00f3',\n G: '#6a0095',\n H: '#1500ea',\n I: '#ff0000',\n L: '#ea0015',\n K: '#0000ff',\n M: '#b0004f',\n F: '#cb0034',\n P: '#4600b9',\n S: '#5e00a1',\n T: '#61009e',\n W: '#5b00a4',\n Y: '#4f00b0',\n V: '#f60009',\n B: '#0c00f3',\n X: '#680097',\n Z: '#0c00f3',\n },\n jalview_prophelix: {\n A: '#e718e7',\n R: '#6f906f',\n N: '#1be41b',\n D: '#778877',\n C: '#23dc23',\n Q: '#926d92',\n E: '#ff00ff',\n G: '#00ff00',\n H: '#758a75',\n I: '#8a758a',\n L: '#ae51ae',\n K: '#a05fa0',\n M: '#ef10ef',\n F: '#986798',\n P: '#00ff00',\n S: '#36c936',\n T: '#47b847',\n W: '#8a758a',\n Y: '#21de21',\n V: '#857a85',\n B: '#49b649',\n X: '#758a75',\n Z: '#c936c9',\n },\n jalview_propstrand: {\n A: '#5858a7',\n R: '#6b6b94',\n N: '#64649b',\n D: '#2121de',\n C: '#9d9d62',\n Q: '#8c8c73',\n E: '#0000ff',\n G: '#4949b6',\n H: '#60609f',\n I: '#ecec13',\n L: '#b2b24d',\n K: '#4747b8',\n M: '#82827d',\n F: '#c2c23d',\n P: '#2323dc',\n S: '#4949b6',\n T: '#9d9d62',\n W: '#c0c03f',\n Y: '#d3d32c',\n V: '#ffff00',\n B: '#4343bc',\n X: '#797986',\n Z: '#4747b8',\n },\n jalview_propturn: {\n A: '#2cd3d3',\n R: '#708f8f',\n N: '#ff0000',\n D: '#e81717',\n C: '#a85757',\n Q: '#3fc0c0',\n E: '#778888',\n G: '#ff0000',\n H: '#708f8f',\n I: '#00ffff',\n L: '#1ce3e3',\n K: '#7e8181',\n M: '#1ee1e1',\n F: '#1ee1e1',\n P: '#f60909',\n S: '#e11e1e',\n T: '#738c8c',\n W: '#738c8c',\n Y: '#9d6262',\n V: '#07f8f8',\n B: '#f30c0c',\n X: '#7c8383',\n Z: '#5ba4a4',\n },\n jalview_taylor: {\n A: '#ccff00',\n R: '#0000ff',\n N: '#cc00ff',\n D: '#ff0000',\n C: '#ffff00',\n Q: '#ff00cc',\n E: '#ff0066',\n G: '#ff9900',\n H: '#0066ff',\n I: '#66ff00',\n L: '#33ff00',\n K: '#6600ff',\n M: '#00ff00',\n F: '#00ff66',\n P: '#ffcc00',\n S: '#ff3300',\n T: '#ff6600',\n W: '#00ccff',\n Y: '#00ffcc',\n V: '#99ff00',\n },\n jalview_zappo: {\n A: '#ffafaf',\n R: '#6464ff',\n N: '#00ff00',\n D: '#ff0000',\n C: '#ffff00',\n Q: '#00ff00',\n E: '#ff0000',\n G: '#ff00ff',\n H: '#6464ff',\n I: '#ffafaf',\n L: '#ffafaf',\n K: '#6464ff',\n M: '#ffafaf',\n F: '#ffc800',\n P: '#ff00ff',\n S: '#00ff00',\n T: '#00ff00',\n W: '#ffc800',\n Y: '#ffc800',\n V: '#ffafaf',\n },\n cinema: {\n H: 'blue',\n K: 'blue',\n R: 'blue',\n D: 'red',\n E: 'red',\n S: 'green',\n T: 'green',\n N: 'green',\n Q: 'green',\n A: 'white',\n V: 'white',\n L: 'white',\n I: 'white',\n M: 'white',\n F: 'magenta',\n W: 'magenta',\n Y: 'magenta',\n P: 'brown',\n G: 'brown',\n C: 'yellow',\n B: 'gray',\n Z: 'gray',\n X: 'gray',\n '-': 'gray',\n '.': 'gray',\n },\n};\n// turn all supplied colors to hex colors which getContrastText from mui\n// requires\nexport default transform(colorSchemes, function (_a) {\n var key = _a[0], val = _a[1];\n return [\n key,\n transform(val, function (_a) {\n var letter = _a[0], color = _a[1];\n return [letter, Color(color).hex()];\n }),\n ];\n});\n// info http://www.jalview.org/help/html/colourSchemes/clustal.html\n// modifications:\n// reference to clustalX source code scheme modifies what the jalview.org\n// scheme says there the jalview.org colorscheme says WLVIMAFCHP but it\n// should be WLVIMAFCHPY, colprot.xml says e.g. %#ACFHILMVWYPp\" which has Y\nexport function getClustalXColor(stats, model, row, col) {\n var total = Object.values(stats).reduce(function (a, b) { return a + b; }, 0);\n var l = model.columns[row][col];\n var _a = stats.W, W = _a === void 0 ? 0 : _a, _b = stats.L, L = _b === void 0 ? 0 : _b, _c = stats.V, V = _c === void 0 ? 0 : _c, _d = stats.I, I = _d === void 0 ? 0 : _d, _e = stats.M, M = _e === void 0 ? 0 : _e, _f = stats.A, A = _f === void 0 ? 0 : _f, _g = stats.F, F = _g === void 0 ? 0 : _g, _h = stats.C, C = _h === void 0 ? 0 : _h, _j = stats.H, H = _j === void 0 ? 0 : _j, _k = stats.P, P = _k === void 0 ? 0 : _k, _l = stats.R, R = _l === void 0 ? 0 : _l, _m = stats.K, K = _m === void 0 ? 0 : _m, _o = stats.Q, Q = _o === void 0 ? 0 : _o, _p = stats.E, E = _p === void 0 ? 0 : _p, _q = stats.D, D = _q === void 0 ? 0 : _q, _r = stats.T, T = _r === void 0 ? 0 : _r, _s = stats.S, S = _s === void 0 ? 0 : _s, _t = stats.G, G = _t === void 0 ? 0 : _t, _u = stats.Y, Y = _u === void 0 ? 0 : _u, _v = stats.N, N = _v === void 0 ? 0 : _v;\n var WLVIMAFCHP = W + L + V + I + M + A + F + C + H + P + Y;\n var KR = K + R;\n var QE = Q + E;\n var ED = E + D;\n var TS = T + S;\n if (WLVIMAFCHP / total > 0.6) {\n if (l === 'W' ||\n l === 'L' ||\n l === 'V' ||\n l === 'A' ||\n l === 'I' ||\n l === 'M' ||\n l === 'F' ||\n l === 'C') {\n // blue from jalview.org docs\n return 'rgb(128,179,230)';\n }\n }\n if ((l === 'K' || l === 'R') &&\n (KR / total > 0.6 || K / total > 0.8 || R / total > 0.8 || Q / total > 0.8)) {\n return '#d88';\n }\n if (l === 'E' &&\n (KR / total > 0.6 ||\n QE / total > 0.5 ||\n E / total > 0.8 ||\n Q / total > 0.8 ||\n D / total > 0.8)) {\n return 'rgb(192, 72, 192)';\n }\n if (l === 'D' &&\n (KR / total > 0.6 ||\n ED / total > 0.5 ||\n K / total > 0.8 ||\n R / total > 0.8 ||\n Q / total > 0.8)) {\n return 'rgb(204, 77, 204)';\n }\n if (l === 'N' && (N / total > 0.5 || Y / total > 0.85)) {\n return '#8f8';\n }\n if (l === 'Q' &&\n (KR / total > 0.6 ||\n QE / total > 0.6 ||\n Q / total > 0.85 ||\n E / total > 0.85 ||\n K / total > 0.85 ||\n R / total > 0.85)) {\n return '#8f8';\n }\n if ((l === 'S' || l === 'T') &&\n // WLVIMAFCHP modified from 0.6 to 0.55 on page to match what i see in jalview\n (WLVIMAFCHP / total > 0.6 ||\n TS / total > 0.5 ||\n S / total > 0.85 ||\n T / total > 0.85)) {\n return 'rgb(26,204,26)';\n }\n if (l === 'C' && C / total > 0.85) {\n return 'rgb(240, 128, 128)';\n }\n if (l === 'G' && G / total > 0) {\n return 'rgb(240, 144, 72)';\n }\n if (l === 'P' && P / total > 0) {\n return 'rgb(204, 204, 0)';\n }\n if ((l === 'H' || l === 'Y') &&\n (WLVIMAFCHP / total > 0.6 ||\n W > 0.85 ||\n Y > 0.85 ||\n A > 0.85 ||\n C > 0.85 ||\n P > 0.85 ||\n Q > 0.85 ||\n F > 0.85 ||\n H > 0.85 ||\n I > 0.85 ||\n L > 0.85 ||\n M > 0.85 ||\n V > 0.85)) {\n // cyan from jalview.org docs\n return 'rgb(26, 179, 179)';\n }\n return undefined;\n}\n// info http://www.jalview.org/help/html/colourSchemes/clustal.html\n// modifications:\n// reference to clustalX source code scheme modifies what the jalview.org\n// scheme says there the jalview.org colorscheme says WLVIMAFCHP but it\n// should be WLVIMAFCHPY, colprot.xml says e.g. %#ACFHILMVWYPp\" which has Y\nexport function getPercentIdentityColor(stats, model, row, col) {\n var total = Object.values(stats).reduce(function (a, b) { return a + b; }, 0);\n var l = model.columns[row][col];\n var entries = Object.entries(stats);\n var ent = 0;\n var letter = '';\n for (var i = 0; i < entries.length; i++) {\n if (entries[i][1] > ent && entries[i][0] !== '-') {\n letter = entries[i][0];\n ent = entries[i][1];\n }\n }\n var proportion = ent / total;\n var thresh = \"hsl(240, 30%, \".concat(100 * Math.max(1 - ent / total / 3, 0.3), \"%)\");\n if (proportion > 0.4) {\n if (l === letter) {\n return thresh;\n }\n }\n}\n","import React, { useEffect, useState, useRef, useMemo } from 'react';\nimport { Typography, CircularProgress, useTheme } from '@material-ui/core';\nimport { observer } from 'mobx-react';\nimport normalizeWheel from 'normalize-wheel';\nimport { colorContrast } from '../util';\nimport { getClustalXColor, getPercentIdentityColor } from '../colorSchemes';\nvar MSABlock = observer(function (_a) {\n var model = _a.model, offsetX = _a.offsetX, offsetY = _a.offsetY;\n var MSA = model.MSA, colWidth = model.colWidth, bgColor = model.bgColor, columns = model.columns, rowHeight = model.rowHeight, scrollY = model.scrollY, scrollX = model.scrollX, hierarchy = model.hierarchy, colorScheme = model.colorScheme, colorSchemeName = model.colorSchemeName, blockSize = model.blockSize, highResScaleFactor = model.highResScaleFactor, colStats = model.colStats;\n var theme = useTheme();\n var contrastScheme = useMemo(function () { return colorContrast(colorScheme, theme); }, [colorScheme, theme]);\n var ref = useRef(null);\n useEffect(function () {\n if (!ref.current) {\n return;\n }\n var ctx = ref.current.getContext('2d');\n if (!ctx) {\n return;\n }\n ctx.resetTransform();\n ctx.scale(highResScaleFactor, highResScaleFactor);\n ctx.clearRect(0, 0, blockSize, blockSize);\n ctx.translate(-offsetX, rowHeight / 2 - offsetY);\n ctx.textAlign = 'center';\n ctx.font = ctx.font.replace(/\\d+px/, \"\".concat(Math.max(8, rowHeight - 8), \"px\"));\n var leaves = hierarchy.leaves();\n var b = blockSize;\n // slice vertical rows, e.g. tree leaves, avoid negative slice\n var yStart = Math.max(0, Math.floor((offsetY - rowHeight) / rowHeight));\n var yEnd = Math.max(0, Math.ceil((offsetY + b + rowHeight) / rowHeight));\n // slice horizontal visible letters, avoid negative slice\n var xStart = Math.max(0, Math.floor(offsetX / colWidth));\n var xEnd = Math.max(0, Math.ceil((offsetX + b) / colWidth));\n var visibleLeaves = leaves.slice(yStart, yEnd);\n visibleLeaves.forEach(function (node) {\n var _a;\n var \n //@ts-ignore\n y = node.x, name = node.data.name;\n var str = (_a = columns[name]) === null || _a === void 0 ? void 0 : _a.slice(xStart, xEnd);\n for (var i = 0; i < (str === null || str === void 0 ? void 0 : str.length); i++) {\n var letter = str[i];\n var color = colorSchemeName === 'clustalx_protein_dynamic'\n ? getClustalXColor(colStats[xStart + i], model, name, xStart + i)\n : colorSchemeName === 'percent_identity_dynamic'\n ? getPercentIdentityColor(colStats[xStart + i], model, name, xStart + i)\n : colorScheme[letter.toUpperCase()];\n if (bgColor) {\n var x = i * colWidth + offsetX - (offsetX % colWidth);\n ctx.fillStyle = color || 'white';\n ctx.fillRect(x, y - rowHeight, colWidth, rowHeight);\n }\n }\n });\n if (rowHeight >= 10 && colWidth >= rowHeight / 2) {\n visibleLeaves.forEach(function (node) {\n var _a;\n var \n //@ts-ignore\n y = node.x, name = node.data.name;\n var str = (_a = columns[name]) === null || _a === void 0 ? void 0 : _a.slice(xStart, xEnd);\n for (var i = 0; i < (str === null || str === void 0 ? void 0 : str.length); i++) {\n var letter = str[i];\n var color = colorScheme[letter.toUpperCase()];\n var contrast = contrastScheme[letter.toUpperCase()] || 'black';\n var x = i * colWidth + offsetX - (offsetX % colWidth);\n //note: -rowHeight/4 matches +rowHeight/4 in tree\n ctx.fillStyle = bgColor ? contrast : color || 'black';\n ctx.fillText(letter, x + colWidth / 2, y - rowHeight / 4);\n }\n });\n }\n }, [\n MSA,\n highResScaleFactor,\n columns,\n colorScheme,\n contrastScheme,\n bgColor,\n rowHeight,\n colWidth,\n hierarchy,\n offsetX,\n offsetY,\n blockSize,\n ]);\n return (React.createElement(\"canvas\", { ref: ref, onMouseMove: function (event) {\n if (!ref.current) {\n return;\n }\n var _a = ref.current.getBoundingClientRect(), left = _a.left, top = _a.top;\n var mouseX = event.clientX - left;\n var mouseY = event.clientY - top;\n model.setMousePos(Math.floor((mouseX + offsetX) / colWidth) + 1, Math.floor((mouseY + offsetY) / rowHeight));\n }, onMouseLeave: function () { return model.setMousePos(); }, width: blockSize * highResScaleFactor, height: blockSize * highResScaleFactor, style: {\n position: 'absolute',\n top: scrollY + offsetY,\n left: scrollX + offsetX,\n width: blockSize,\n height: blockSize,\n } }));\n});\nvar MSACanvas = observer(function (_a) {\n var model = _a.model;\n var MSA = model.MSA, msaFilehandle = model.msaFilehandle, height = model.height, msaAreaWidth = model.msaAreaWidth, blocks2d = model.blocks2d;\n var ref = useRef(null);\n // wheel\n var scheduled = useRef(false);\n var deltaX = useRef(0);\n var deltaY = useRef(0);\n // mouse click-and-drag scrolling\n var prevX = useRef(0);\n var prevY = useRef(0);\n var _b = useState(false), mouseDragging = _b[0], setMouseDragging = _b[1];\n useEffect(function () {\n var curr = ref.current;\n if (!curr) {\n return;\n }\n function onWheel(origEvent) {\n var event = normalizeWheel(origEvent);\n deltaX.current += event.pixelX;\n deltaY.current += event.pixelY;\n if (!scheduled.current) {\n scheduled.current = true;\n requestAnimationFrame(function () {\n model.doScrollX(-deltaX.current);\n model.doScrollY(-deltaY.current);\n deltaX.current = 0;\n deltaY.current = 0;\n scheduled.current = false;\n });\n }\n origEvent.preventDefault();\n }\n curr.addEventListener('wheel', onWheel);\n return function () {\n curr.removeEventListener('wheel', onWheel);\n };\n }, [model]);\n useEffect(function () {\n var cleanup = function () { };\n function globalMouseMove(event) {\n event.preventDefault();\n var currX = event.clientX;\n var currY = event.clientY;\n var distanceX = currX - prevX.current;\n var distanceY = currY - prevY.current;\n if (distanceX || distanceY) {\n // use rAF to make it so multiple event handlers aren't fired per-frame\n // see https://calendar.perfplanet.com/2013/the-runtime-performance-checklist/\n if (!scheduled.current) {\n scheduled.current = true;\n window.requestAnimationFrame(function () {\n model.doScrollX(distanceX);\n model.doScrollY(distanceY);\n scheduled.current = false;\n prevX.current = event.clientX;\n prevY.current = event.clientY;\n });\n }\n }\n }\n function globalMouseUp() {\n prevX.current = 0;\n if (mouseDragging) {\n setMouseDragging(false);\n }\n }\n if (mouseDragging) {\n window.addEventListener('mousemove', globalMouseMove, true);\n window.addEventListener('mouseup', globalMouseUp, true);\n cleanup = function () {\n window.removeEventListener('mousemove', globalMouseMove, true);\n window.removeEventListener('mouseup', globalMouseUp, true);\n };\n }\n return cleanup;\n }, [model, mouseDragging]);\n return (React.createElement(\"div\", { ref: ref, onMouseDown: function (event) {\n // check if clicking a draggable element or a resize handle\n var target = event.target;\n if (target.draggable || target.dataset.resizer) {\n return;\n }\n // otherwise do click and drag scroll\n if (event.button === 0) {\n prevX.current = event.clientX;\n prevY.current = event.clientY;\n setMouseDragging(true);\n }\n }, onMouseUp: function (event) {\n event.preventDefault();\n setMouseDragging(false);\n }, onMouseLeave: function (event) {\n event.preventDefault();\n }, style: {\n position: 'relative',\n height: height,\n width: msaAreaWidth,\n overflow: 'hidden',\n } }, !MSA && !msaFilehandle ? null : !MSA ? (React.createElement(\"div\", { style: { position: 'absolute', left: '50%', top: '50%' } },\n React.createElement(CircularProgress, null),\n React.createElement(Typography, null, \"Loading...\"))) : (blocks2d.map(function (_a) {\n var bx = _a[0], by = _a[1];\n return (React.createElement(MSABlock, { key: \"\".concat(bx, \"_\").concat(by), model: model, offsetX: bx, offsetY: by }));\n }))));\n});\nexport default MSACanvas;\n","import React, { useRef } from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport { observer } from 'mobx-react';\n/**\n * Given a scale ( bp/px ) and minimum distances (px) between major and minor\n * gridlines, return an object like `{ majorPitch: bp, minorPitch: bp }` giving\n * the gridline pitches to use.\n */\nexport function chooseGridPitch(scale, minMajorPitchPx, minMinorPitchPx) {\n scale = Math.abs(scale);\n var minMajorPitchBp = minMajorPitchPx * scale;\n var majorMagnitude = parseInt(Number(minMajorPitchBp).toExponential().split(/e/i)[1], 10);\n var majorPitch = Math.pow(10, majorMagnitude);\n while (majorPitch < minMajorPitchBp) {\n majorPitch *= 2;\n if (majorPitch >= minMajorPitchBp) {\n break;\n }\n majorPitch *= 2.5;\n }\n majorPitch = Math.max(majorPitch, 5);\n var majorPitchPx = majorPitch / scale;\n var minorPitch = 0;\n if (!(majorPitch % 10) && majorPitchPx / 10 >= minMinorPitchPx) {\n minorPitch = majorPitch / 10;\n }\n else if (!(majorPitch % 5) && majorPitchPx / 5 >= minMinorPitchPx) {\n minorPitch = majorPitch / 5;\n }\n else if (!(majorPitch % 2) && majorPitchPx / 2 >= minMinorPitchPx) {\n minorPitch = majorPitch / 2;\n }\n return { majorPitch: majorPitch, minorPitch: minorPitch };\n}\nexport function makeTicks(start, end, bpPerPx, emitMajor, emitMinor) {\n var _a;\n if (emitMajor === void 0) { emitMajor = true; }\n if (emitMinor === void 0) { emitMinor = true; }\n var gridPitch = chooseGridPitch(bpPerPx, 60, 15);\n var minBase = start;\n var maxBase = end;\n if (minBase === null || maxBase === null) {\n return [];\n }\n if (bpPerPx < 0) {\n _a = [maxBase, minBase], minBase = _a[0], maxBase = _a[1];\n }\n // add 20px additional on the right and left to allow us to draw the ends of\n // labels that lie a little outside our region\n minBase -= Math.abs(20 * bpPerPx);\n maxBase += Math.abs(20 * bpPerPx) + 1;\n var iterPitch = gridPitch.minorPitch || gridPitch.majorPitch;\n var index = 0;\n var ticks = [];\n for (var base = Math.ceil(minBase / iterPitch) * iterPitch; base < maxBase; base += iterPitch) {\n if (emitMinor && base % (gridPitch.majorPitch * 2)) {\n ticks.push({ type: 'minor', base: base - 1, index: index });\n index += 1;\n }\n else if (emitMajor && !(base % (gridPitch.majorPitch * 2))) {\n ticks.push({ type: 'major', base: base - 1, index: index });\n index += 1;\n }\n }\n return ticks;\n}\nfunction mathPower(num) {\n if (num < 999) {\n return String(num);\n }\n return \"\".concat(mathPower(~~(num / 1000)), \",\").concat(\"00\".concat(~~(num % 1000)).substr(-3, 3));\n}\nvar useStyles = makeStyles(function ( /* theme */) { return ({\n majorTickLabel: {\n fontSize: '11px',\n },\n majorTick: {\n stroke: '#555',\n },\n minorTick: {\n stroke: '#999',\n },\n}); });\nfunction RulerBlock(_a) {\n var start = _a.start, end = _a.end, bpPerPx = _a.bpPerPx, reversed = _a.reversed, major = _a.major, minor = _a.minor;\n var classes = useStyles();\n var ticks = makeTicks(start, end, bpPerPx, major, minor);\n return (React.createElement(React.Fragment, null,\n ticks.map(function (tick) {\n var x = (reversed ? end - tick.base : tick.base - start) / bpPerPx;\n return (React.createElement(\"line\", { key: tick.base, x1: x, x2: x, y1: 11, y2: tick.type === 'major' ? 11 + 6 : 11 + 4, strokeWidth: 1, stroke: tick.type === 'major' ? '#555' : '#999', className: tick.type === 'major' ? classes.majorTick : classes.minorTick, \"data-bp\": tick.base }));\n }),\n ticks\n .filter(function (tick) { return tick.type === 'major'; })\n .map(function (tick) {\n var x = (reversed ? end - tick.base : tick.base - start) / bpPerPx;\n return (React.createElement(\"text\", { x: x, y: 10, key: \"label-\".concat(tick.base), textAnchor: \"middle\", style: { fontSize: '11px' }, className: classes.majorTickLabel }, mathPower(tick.base + 1)));\n })));\n}\nvar Ruler = observer(function (_a) {\n var model = _a.model;\n var MSA = model.MSA, colWidth = model.colWidth, msaAreaWidth = model.msaAreaWidth, resizeHandleWidth = model.resizeHandleWidth, scrollX = model.scrollX, blocksX = model.blocksX, blockSize = model.blockSize;\n var ref = useRef(null);\n var offsetX = blocksX[0];\n return !MSA ? null : (React.createElement(\"div\", { ref: ref, style: {\n position: 'relative',\n width: msaAreaWidth,\n cursor: 'crosshair',\n overflow: 'hidden',\n height: 20,\n background: '#ccc',\n } },\n React.createElement(\"svg\", { style: {\n width: blocksX.length * blockSize,\n position: 'absolute',\n left: scrollX + offsetX + resizeHandleWidth,\n pointerEvents: 'none',\n } },\n React.createElement(RulerBlock, { key: offsetX, start: offsetX / colWidth, end: offsetX / colWidth + (blockSize * blocksX.length) / colWidth, bpPerPx: 1 / colWidth }))));\n});\nexport default Ruler;\n","import React from 'react';\nimport { observer } from 'mobx-react';\nvar TreeRuler = observer(function (_a) {\n var model = _a.model;\n var treeWidth = model.treeWidth;\n return React.createElement(\"div\", { style: { width: treeWidth } });\n});\nexport default TreeRuler;\n","import React, { useState } from 'react';\nimport { observer } from 'mobx-react';\nimport { Button, Checkbox, Dialog, DialogActions, DialogTitle, DialogContent, FormControlLabel, MenuItem, TextField, } from '@material-ui/core';\nimport colorSchemes from '../colorSchemes';\nexport default observer(function (_a) {\n var model = _a.model, onClose = _a.onClose, open = _a.open;\n var rowHeightInit = model.rowHeight, colWidthInit = model.colWidth, treeWidthInit = model.treeWidth, colorSchemeName = model.colorSchemeName, noTree = model.noTree;\n var _b = useState(\"\".concat(rowHeightInit)), rowHeight = _b[0], setRowHeight = _b[1];\n var _c = useState(\"\".concat(colWidthInit)), colWidth = _c[0], setColWidth = _c[1];\n var _d = useState(\"\".concat(treeWidthInit)), treeWidth = _d[0], setTreeWidth = _d[1];\n function error(n) {\n return Number.isNaN(+n) || +n < 0;\n }\n var rowHeightError = error(rowHeight);\n var colWidthError = error(colWidth);\n var treeWidthError = error(treeWidth);\n return (React.createElement(Dialog, { onClose: function () { return onClose(); }, open: open },\n React.createElement(DialogTitle, null, \"Settings\"),\n React.createElement(DialogContent, null,\n React.createElement(FormControlLabel, { control: React.createElement(Checkbox, { checked: model.showBranchLen, onChange: function () { return model.toggleBranchLen(); } }), label: \"Show branch length\" }),\n React.createElement(FormControlLabel, { control: React.createElement(Checkbox, { checked: model.bgColor, onChange: function () { return model.toggleBgColor(); } }), label: \"Color background\" }),\n React.createElement(FormControlLabel, { control: React.createElement(Checkbox, { checked: model.drawNodeBubbles, onChange: function () { return model.toggleNodeBubbles(); } }), label: \"Draw node bubbles\" }),\n React.createElement(FormControlLabel, { control: React.createElement(Checkbox, { checked: model.drawTree, onChange: function () { return model.toggleDrawTree(); } }), label: \"Draw tree (if available)\" }),\n React.createElement(FormControlLabel, { control: React.createElement(Checkbox, { checked: model.labelsAlignRight, onChange: function () { return model.toggleLabelsAlignRight(); } }), label: \"Labels align right (note: labels may draw over tree, but can adjust tree width or tree area width in UI)\" }),\n React.createElement(TextField, { label: \"Row height (px)\", value: rowHeight, error: rowHeightError, onChange: function (event) { return setRowHeight(event.target.value); } }),\n React.createElement(TextField, { label: \"Column width (px)\", value: colWidth, error: colWidthError, onChange: function (event) { return setColWidth(event.target.value); } }),\n React.createElement(\"br\", null),\n !noTree ? (React.createElement(TextField, { label: \"Tree width (px)\", value: treeWidth, error: treeWidthError, onChange: function (event) { return setTreeWidth(event.target.value); } })) : null,\n React.createElement(\"br\", null),\n React.createElement(TextField, { select: true, label: \"Color scheme\", value: colorSchemeName, onChange: function (event) { return model.setColorSchemeName(event.target.value); } }, Object.keys(colorSchemes).map(function (option) { return (React.createElement(MenuItem, { key: option, value: option }, option)); })),\n React.createElement(DialogActions, null,\n React.createElement(Button, { disabled: rowHeightError || colWidthError || treeWidthError, onClick: function () {\n model.setRowHeight(+rowHeight);\n model.setColWidth(+colWidth);\n if (!noTree) {\n model.setTreeWidth(+treeWidth);\n }\n onClose();\n }, variant: \"contained\", color: \"primary\" }, \"Submit\")))));\n});\n","import React, { useState } from 'react';\nimport { Dialog, DialogTitle, DialogContent, Typography, Link, } from '@material-ui/core';\nimport { version } from './package.json';\nfunction LicenseDialog(_a) {\n var onClose = _a.onClose, open = _a.open;\n return (React.createElement(Dialog, { onClose: function () { return onClose(); }, open: open },\n React.createElement(DialogTitle, null, \"Biotite License\"),\n React.createElement(DialogContent, null,\n React.createElement(\"pre\", { style: { height: 100, overflow: 'auto' } }, \"\\nCopyright 2017 - 2020, The Biotite contributors\\nAll rights reserved.\\n\\nRedistribution and use in source and binary forms, with or without modification,\\nare permitted provided that the following conditions are met:\\n\\n1. Redistributions of source code must retain the above copyright notice, this\\nlist of conditions and the following disclaimer.\\n\\n2. Redistributions in binary form must reproduce the above copyright notice,\\nthis list of conditions and the following disclaimer in the documentation and/or\\nother materials provided with the distribution.\\n\\n3. Neither the name of the copyright holder nor the names of its contributors\\nmay be used to endorse or promote products derived from this software without\\nspecific prior written permission.\\n\\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \\\"AS IS\\\" AND\\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\\n \"))));\n}\nexport default function AboutDialog(_a) {\n var onClose = _a.onClose, open = _a.open;\n var _b = useState(false), dlgOpen = _b[0], setDlgOpen = _b[1];\n return (React.createElement(React.Fragment, null,\n React.createElement(LicenseDialog, { onClose: function () { return setDlgOpen(false); }, open: dlgOpen }),\n React.createElement(Dialog, { onClose: function () { return onClose(); }, open: open },\n React.createElement(DialogTitle, null, \"About this plugin\"),\n React.createElement(DialogContent, null,\n React.createElement(Typography, null,\n \"MSAView \",\n version,\n \" (\",\n React.createElement(Link, { href: \"https://github.com/gmod/jbrowse-plugin-msaview\" }, \"Github\"),\n \")\"),\n React.createElement(\"ul\", null,\n React.createElement(\"li\", null,\n React.createElement(Typography, null,\n \"We use some color schemes from the\",\n ' ',\n React.createElement(Link, { href: \"https://github.com/biotite-dev/biotite\" }, \"biotite\"),\n ' ',\n \"project, and their license is reproduced\",\n ' ',\n React.createElement(Link, { onClick: function () { return setDlgOpen(true); } }, \"here\"))),\n React.createElement(\"li\", null,\n React.createElement(Typography, null,\n \"See this page for some information on jalview colorings\",\n ' ',\n React.createElement(Link, { href: \"https://www.jalview.org/help/html/colourSchemes/\" }, \"here\"))),\n React.createElement(\"li\", null,\n React.createElement(Typography, null,\n \"See this page for some info on the clustal, cinema, maeditor, and lesk color schemes\",\n ' ',\n React.createElement(Link, { href: \"http://www.bioinformatics.nl/~berndb/aacolour.html\" }, \"here\"))),\n React.createElement(\"li\", null,\n React.createElement(Typography, null,\n \"See this paper about the flower color scheme\",\n ' ',\n React.createElement(Link, { href: \"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7245768/\" }, \"here\"))))))));\n}\n","import React from 'react';\nimport { Dialog, DialogTitle, DialogContent } from '@material-ui/core';\nimport { observer } from 'mobx-react';\nimport { Attributes } from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail';\nexport default observer(function (_a) {\n var model = _a.model, onClose = _a.onClose, open = _a.open;\n var alignmentDetails = model.alignmentDetails;\n return (React.createElement(Dialog, { onClose: function () { return onClose(); }, open: open },\n React.createElement(DialogTitle, null, \"Metadata\"),\n React.createElement(DialogContent, null,\n React.createElement(Attributes, { attributes: alignmentDetails }))));\n});\n","import React from 'react';\nimport { Dialog, DialogTitle, DialogContent, FormControlLabel, FormGroup, Checkbox, DialogActions, Button, Typography, } from '@material-ui/core';\nimport { observer } from 'mobx-react';\nexport default observer(function (_a) {\n var model = _a.model, onClose = _a.onClose, open = _a.open;\n var tracks = model.tracks;\n return (React.createElement(Dialog, { onClose: function () { return onClose(); }, open: open },\n React.createElement(DialogTitle, null, \"Add track\"),\n React.createElement(DialogContent, null,\n React.createElement(Typography, null, \"Open relevant per-alignment tracks e.g. protein domains\"),\n React.createElement(FormGroup, null, tracks.map(function (track) {\n return (React.createElement(FormControlLabel, { key: track.model.id, control: React.createElement(Checkbox, { checked: !model.turnedOffTracks.has(track.model.id), onChange: function () {\n model.toggleTrack(track.model.id);\n } }), label: track.model.name }));\n })),\n React.createElement(DialogActions, null,\n React.createElement(Button, { onClick: function () { return onClose(); }, variant: \"contained\", color: \"primary\" }, \"Close\")))));\n});\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z\"\n}), 'FolderOpen');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z\"\n}), 'Settings');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z\"\n}), 'Help');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3 13h2v-2H3v2zm0 4h2v-2H3v2zm0-8h2V7H3v2zm4 4h14v-2H7v2zm0 4h14v-2H7v2zM7 7v2h14V7H7z\"\n}), 'List');\n\nexports.default = _default;","import React, { useState } from 'react';\nimport { IconButton, Select, Typography } from '@material-ui/core';\nimport { observer } from 'mobx-react';\nimport SettingsDialog from './SettingsDlg';\nimport AboutDialog from './AboutDlg';\nimport DetailsDialog from './DetailsDlg';\nimport TracklistDialog from './TracklistDlg';\n//icons\nimport FolderOpenIcon from '@material-ui/icons/FolderOpen';\nimport SettingsIcon from '@material-ui/icons/Settings';\nimport HelpIcon from '@material-ui/icons/Help';\nimport AssignmentIcon from '@material-ui/icons/Assignment';\nimport ListIcon from '@material-ui/icons/List';\nvar InfoArea = observer(function (_a) {\n var model = _a.model;\n var mouseOverRowName = model.mouseOverRowName, mouseCol = model.mouseCol;\n return (React.createElement(\"div\", null,\n React.createElement(Typography, { display: \"inline\" },\n \"Row name: \",\n mouseOverRowName),\n React.createElement(\"span\", { style: { marginLeft: 10 } }),\n React.createElement(Typography, { display: \"inline\" },\n \"Position: \",\n mouseCol)));\n});\nvar Header = observer(function (_a) {\n var model = _a.model;\n var _b = useState(false), settingsDialogVisible = _b[0], setSettingsDialogVisible = _b[1];\n var _c = useState(false), aboutDialogVisible = _c[0], setAboutDialogVisible = _c[1];\n var _d = useState(false), detailsDialogVisible = _d[0], setDetailsDialogVisible = _d[1];\n var _e = useState(false), tracklistDialogVisible = _e[0], setTracklistDialogVisible = _e[1];\n var currentAlignment = model.currentAlignment, alignmentNames = model.alignmentNames;\n return (React.createElement(\"div\", { style: { display: 'flex' } },\n React.createElement(IconButton, { onClick: function () {\n model.setData({ tree: '', msa: '' });\n model.setTreeFilehandle(undefined);\n model.setMSAFilehandle(undefined);\n model.setScrollY(0);\n model.setScrollX(0);\n model.setCurrentAlignment(0);\n } },\n React.createElement(FolderOpenIcon, null)),\n React.createElement(IconButton, { onClick: function () { return setSettingsDialogVisible(true); } },\n React.createElement(SettingsIcon, null)),\n React.createElement(IconButton, { onClick: function () { return setDetailsDialogVisible(true); } },\n React.createElement(AssignmentIcon, null)),\n React.createElement(IconButton, { onClick: function () { return setTracklistDialogVisible(true); } },\n React.createElement(ListIcon, null)),\n settingsDialogVisible ? (React.createElement(SettingsDialog, { open: true, model: model, onClose: function () { return setSettingsDialogVisible(false); } })) : null,\n aboutDialogVisible ? (React.createElement(AboutDialog, { open: true, onClose: function () { return setAboutDialogVisible(false); } })) : null,\n detailsDialogVisible ? (React.createElement(DetailsDialog, { open: true, model: model, onClose: function () { return setDetailsDialogVisible(false); } })) : null,\n tracklistDialogVisible ? (React.createElement(TracklistDialog, { open: true, model: model, onClose: function () { return setTracklistDialogVisible(false); } })) : null,\n alignmentNames.length > 0 ? (React.createElement(Select, { native: true, value: currentAlignment, onChange: function (event) {\n model.setCurrentAlignment(+event.target.value);\n model.setScrollX(0);\n model.setScrollY(0);\n } }, alignmentNames.map(function (option, index) { return (React.createElement(\"option\", { key: \"\".concat(option, \"-\").concat(index), value: index }, option)); }))) : null,\n React.createElement(InfoArea, { model: model }),\n React.createElement(\"div\", { style: { flex: 1 } }),\n React.createElement(IconButton, { onClick: function () { return setAboutDialogVisible(true); } },\n React.createElement(HelpIcon, null))));\n});\nexport default Header;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7 10l5 5 5-5z\"\n}), 'ArrowDropDown');\n\nexports.default = _default;","\"use strict\";\n\nvar deselectCurrent = require(\"toggle-selection\");\n\nvar clipboardToIE11Formatting = {\n \"text/plain\": \"Text\",\n \"text/html\": \"Url\",\n \"default\": \"Text\"\n}\n\nvar defaultMessage = \"Copy to clipboard: #{key}, Enter\";\n\nfunction format(message) {\n var copyKey = (/mac os x/i.test(navigator.userAgent) ? \"⌘\" : \"Ctrl\") + \"+C\";\n return message.replace(/#{\\s*key\\s*}/g, copyKey);\n}\n\nfunction copy(text, options) {\n var debug,\n message,\n reselectPrevious,\n range,\n selection,\n mark,\n success = false;\n if (!options) {\n options = {};\n }\n debug = options.debug || false;\n try {\n reselectPrevious = deselectCurrent();\n\n range = document.createRange();\n selection = document.getSelection();\n\n mark = document.createElement(\"span\");\n mark.textContent = text;\n // reset user styles for span element\n mark.style.all = \"unset\";\n // prevents scrolling to the end of the page\n mark.style.position = \"fixed\";\n mark.style.top = 0;\n mark.style.clip = \"rect(0, 0, 0, 0)\";\n // used to preserve spaces and line breaks\n mark.style.whiteSpace = \"pre\";\n // do not inherit user-select (it may be `none`)\n mark.style.webkitUserSelect = \"text\";\n mark.style.MozUserSelect = \"text\";\n mark.style.msUserSelect = \"text\";\n mark.style.userSelect = \"text\";\n mark.addEventListener(\"copy\", function(e) {\n e.stopPropagation();\n if (options.format) {\n e.preventDefault();\n if (typeof e.clipboardData === \"undefined\") { // IE 11\n debug && console.warn(\"unable to use e.clipboardData\");\n debug && console.warn(\"trying IE specific stuff\");\n window.clipboardData.clearData();\n var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting[\"default\"]\n window.clipboardData.setData(format, text);\n } else { // all other browsers\n e.clipboardData.clearData();\n e.clipboardData.setData(options.format, text);\n }\n }\n if (options.onCopy) {\n e.preventDefault();\n options.onCopy(e.clipboardData);\n }\n });\n\n document.body.appendChild(mark);\n\n range.selectNodeContents(mark);\n selection.addRange(range);\n\n var successful = document.execCommand(\"copy\");\n if (!successful) {\n throw new Error(\"copy command was unsuccessful\");\n }\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using execCommand: \", err);\n debug && console.warn(\"trying IE specific stuff\");\n try {\n window.clipboardData.setData(options.format || \"text\", text);\n options.onCopy && options.onCopy(window.clipboardData);\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using clipboardData: \", err);\n debug && console.error(\"falling back to prompt\");\n message = format(\"message\" in options ? options.message : defaultMessage);\n window.prompt(message, text);\n }\n } finally {\n if (selection) {\n if (typeof selection.removeRange == \"function\") {\n selection.removeRange(range);\n } else {\n selection.removeAllRanges();\n }\n }\n\n if (mark) {\n document.body.removeChild(mark);\n }\n reselectPrevious();\n }\n\n return success;\n}\n\nmodule.exports = copy;\n","import React, { useState } from 'react';\nimport copy from 'copy-to-clipboard';\nimport { observer } from 'mobx-react';\nimport { Button, Dialog, DialogActions, DialogTitle, DialogContent, makeStyles, } from '@material-ui/core';\nvar useStyles = makeStyles(function (theme) { return ({\n textArea: {\n padding: theme.spacing(2),\n overflow: 'auto',\n background: '#ddd',\n wordBreak: 'break-word',\n },\n}); });\nvar TrackInfoDialog = observer(function (_a) {\n var model = _a.model, onClose = _a.onClose;\n var _b = useState('Copy to clipboard'), label = _b[0], setLabel = _b[1];\n var classes = useStyles();\n return (React.createElement(Dialog, { open: true, onClose: onClose, fullWidth: true, maxWidth: \"lg\" },\n React.createElement(DialogTitle, null,\n \"Track info - \",\n model.name),\n React.createElement(DialogContent, null,\n React.createElement(Button, { variant: \"contained\", color: \"primary\", onClick: function () {\n copy(model.data);\n setLabel('Copied!');\n setTimeout(function () {\n setLabel('Copy to clipboard');\n }, 300);\n } }, label),\n React.createElement(\"pre\", { className: classes.textArea }, model.data)),\n React.createElement(DialogActions, null,\n React.createElement(Button, { variant: \"contained\", onClick: onClose, color: \"secondary\" }, \"Close\"))));\n});\nexport default TrackInfoDialog;\n","\nmodule.exports = function () {\n var selection = document.getSelection();\n if (!selection.rangeCount) {\n return function () {};\n }\n var active = document.activeElement;\n\n var ranges = [];\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n\n switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML\n case 'INPUT':\n case 'TEXTAREA':\n active.blur();\n break;\n\n default:\n active = null;\n break;\n }\n\n selection.removeAllRanges();\n return function () {\n selection.type === 'Caret' &&\n selection.removeAllRanges();\n\n if (!selection.rangeCount) {\n ranges.forEach(function(range) {\n selection.addRange(range);\n });\n }\n\n active &&\n active.focus();\n };\n};\n","import React, { useState, useRef, useEffect } from 'react';\nimport normalizeWheel from 'normalize-wheel';\nimport { observer } from 'mobx-react';\nimport { IconButton, Menu, MenuItem, makeStyles } from '@material-ui/core';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport TrackInfoDialog from './TrackInfoDlg';\nvar useStyles = makeStyles(function () { return ({\n button: {\n padding: 0,\n },\n}); });\nexport var TrackLabel = observer(function (_a) {\n var model = _a.model, track = _a.track;\n var _b = useState(), anchorEl = _b[0], setAnchorEl = _b[1];\n var _c = useState(false), trackInfoDlgOpen = _c[0], setTrackInfoDlgOpen = _c[1];\n var rowHeight = model.rowHeight, width = model.treeAreaWidth;\n var height = track.height, name = track.model.name;\n var classes = useStyles();\n var trackLabelHeight = Math.max(8, rowHeight - 8);\n return (React.createElement(\"div\", { style: {\n width: width,\n height: height,\n flexShrink: 0,\n textAlign: 'right',\n fontSize: trackLabelHeight,\n } },\n name,\n React.createElement(IconButton, { className: classes.button, style: { width: trackLabelHeight, height: trackLabelHeight }, onClick: function (event) {\n setAnchorEl(event.target);\n } },\n React.createElement(ArrowDropDownIcon, null)),\n anchorEl ? (React.createElement(Menu, { anchorEl: anchorEl, transitionDuration: 0, open: true, onClose: function () {\n setAnchorEl(undefined);\n } },\n React.createElement(MenuItem, { dense: true, onClick: function () {\n model.toggleTrack(track.model.id);\n setAnchorEl(undefined);\n } }, \"Close\"),\n React.createElement(MenuItem, { dense: true, onClick: function () {\n setTrackInfoDlgOpen(true);\n setAnchorEl(undefined);\n } }, \"Get info\"))) : null,\n trackInfoDlgOpen ? (React.createElement(TrackInfoDialog, { model: track.model, onClose: function () { return setTrackInfoDlgOpen(false); } })) : null));\n});\nvar Track = observer(function (_a) {\n var model = _a.model, track = _a.track;\n var resizeHandleWidth = model.resizeHandleWidth;\n var height = track.model.height;\n var ref = useRef(null);\n var scheduled = useRef(false);\n var deltaX = useRef(0);\n useEffect(function () {\n var curr = ref.current;\n if (!curr) {\n return;\n }\n function onWheel(origEvent) {\n var event = normalizeWheel(origEvent);\n deltaX.current += event.pixelX;\n if (!scheduled.current) {\n scheduled.current = true;\n requestAnimationFrame(function () {\n model.doScrollX(-deltaX.current);\n deltaX.current = 0;\n scheduled.current = false;\n });\n }\n origEvent.preventDefault();\n }\n curr.addEventListener('wheel', onWheel);\n return function () {\n curr.removeEventListener('wheel', onWheel);\n };\n }, [model]);\n return (React.createElement(\"div\", { key: track.id, style: { display: 'flex', height: height } },\n React.createElement(TrackLabel, { model: model, track: track }),\n React.createElement(\"div\", { style: { width: resizeHandleWidth, flexShrink: 0 } }),\n React.createElement(\"div\", { ref: ref },\n React.createElement(track.ReactComponent, { model: model, track: track }))));\n});\nexport default Track;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\"\n}), 'Delete');\n\nexports.default = _default;","var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport React, { useState } from 'react';\nimport { observer } from 'mobx-react';\nimport { Button, Dialog, DialogActions, DialogTitle, DialogContent, IconButton, TextField, Typography, } from '@material-ui/core';\nimport DeleteIcon from '@material-ui/icons/Delete';\nvar specialFromEntries = function (val) {\n var ret = {};\n val.forEach(function (_a) {\n var key = _a[0], val = _a[1];\n if (!ret[key])\n ret[key] = [];\n ret[key].push(val);\n });\n return ret;\n};\nvar Row = observer(function (_a) {\n var name = _a.name, value = _a.value, setValue = _a.setValue, setName = _a.setName, onDelete = _a.onDelete;\n return (React.createElement(\"div\", null,\n React.createElement(IconButton, { onClick: onDelete, style: { margin: 10 } },\n React.createElement(DeleteIcon, null)),\n React.createElement(TextField, { value: name, onChange: function (event) { return setName(event.target.value); }, label: \"Key\" }),\n React.createElement(TextField, { value: value, onChange: function (event) { return setValue(event.target.value); }, label: \"Value\" })));\n});\nexport default observer(function (_a) {\n var onClose = _a.onClose, data = _a.data, model = _a.model;\n var blanks = model.blanks;\n var l = data.left, r = data.right;\n var _b = useState([\n ['Name', ''],\n ['ID', ''],\n ['Note', ''],\n ]), rows = _b[0], setRows = _b[1];\n return (React.createElement(Dialog, { onClose: function () { return onClose(); }, open: true },\n React.createElement(DialogTitle, null, \"Create new region annotation\"),\n React.createElement(DialogContent, null,\n React.createElement(Typography, null,\n \"Do you want to add an annotation to the MSA at \",\n l,\n \"..\",\n r,\n ' ',\n blanks.length\n ? \" (gapped \".concat(model.getPos(l), \"..\").concat(model.getPos(r))\n : ''),\n rows.map(function (_a, index) {\n var key = _a[0], val = _a[1];\n return (React.createElement(Row, { key: index, name: key, value: val, setValue: function (newValue) {\n var newRows = __spreadArray([], rows, true);\n newRows[index][1] = newValue;\n setRows(newRows);\n }, setName: function (newName) {\n var newRows = __spreadArray([], rows, true);\n newRows[index][0] = newName;\n setRows(newRows);\n }, onDelete: function () {\n rows.splice(index, 1);\n setRows(__spreadArray([], rows, true));\n } }));\n }),\n React.createElement(Button, { onClick: function () {\n setRows(__spreadArray(__spreadArray([], rows, true), [['', '']], false));\n } }, \"Add row\"),\n React.createElement(DialogActions, null,\n React.createElement(Button, { onClick: function () {\n model.addAnnotation(l, r, specialFromEntries(rows));\n onClose();\n }, variant: \"contained\", color: \"primary\" }, \"Submit\"),\n React.createElement(Button, { variant: \"contained\", color: \"secondary\", onClick: function () { return onClose(); } }, \"Cancel\")))));\n});\n","import React, { useEffect, useRef, useState } from 'react';\nimport { observer } from 'mobx-react';\nexport var VerticalResizeHandle = observer(function (_a) {\n var model = _a.model;\n var resizeHandleWidth = model.resizeHandleWidth;\n var _b = useState(false), mouseDragging = _b[0], setMouseDragging = _b[1];\n var scheduled = useRef(false);\n var prevX = useRef(0);\n useEffect(function () {\n function globalMouseMove(event) {\n event.preventDefault();\n var currX = event.clientX;\n if (prevX.current === 0) {\n prevX.current = event.clientX;\n }\n else {\n var distance_1 = currX - prevX.current;\n if (distance_1) {\n // use rAF to make it so multiple event handlers aren't fired per-frame\n // see https://calendar.perfplanet.com/2013/the-runtime-performance-checklist/\n if (!scheduled.current) {\n scheduled.current = true;\n window.requestAnimationFrame(function () {\n model.setTreeAreaWidth(model.treeAreaWidth + distance_1);\n scheduled.current = false;\n prevX.current = event.clientX;\n });\n }\n }\n }\n }\n function globalMouseUp() {\n prevX.current = 0;\n if (mouseDragging) {\n setMouseDragging(false);\n }\n }\n if (mouseDragging) {\n document.addEventListener('mousemove', globalMouseMove, true);\n document.addEventListener('mouseup', globalMouseUp, true);\n return function () {\n document.removeEventListener('mousemove', globalMouseMove, true);\n document.removeEventListener('mouseup', globalMouseUp, true);\n };\n }\n return function () { };\n }, [mouseDragging, model]);\n return (React.createElement(\"div\", null,\n React.createElement(\"div\", { onMouseDown: function () { return setMouseDragging(true); }, style: {\n cursor: 'ew-resize',\n height: '100%',\n width: resizeHandleWidth,\n background: \"rgba(200,200,200)\",\n position: 'relative',\n } })));\n});\nexport var HorizontalResizeHandle = observer(function (_a) {\n var model = _a.model;\n var resizeHandleWidth = model.resizeHandleWidth;\n var _b = useState(false), mouseDragging = _b[0], setMouseDragging = _b[1];\n var scheduled = useRef(false);\n var prevY = useRef(0);\n useEffect(function () {\n function globalMouseMove(event) {\n event.preventDefault();\n var currY = event.clientY;\n if (prevY.current === 0) {\n prevY.current = event.clientY;\n }\n else {\n var distance_2 = currY - prevY.current;\n if (distance_2) {\n // use rAF to make it so multiple event handlers aren't fired per-frame\n // see https://calendar.perfplanet.com/2013/the-runtime-performance-checklist/\n if (!scheduled.current) {\n scheduled.current = true;\n window.requestAnimationFrame(function () {\n model.setHeight(model.height + distance_2);\n scheduled.current = false;\n prevY.current = event.clientY;\n });\n }\n }\n }\n }\n function globalMouseUp() {\n prevY.current = 0;\n if (mouseDragging) {\n setMouseDragging(false);\n }\n }\n if (mouseDragging) {\n document.addEventListener('mousemove', globalMouseMove, true);\n document.addEventListener('mouseup', globalMouseUp, true);\n return function () {\n document.removeEventListener('mousemove', globalMouseMove, true);\n document.removeEventListener('mouseup', globalMouseUp, true);\n };\n }\n return function () { };\n }, [mouseDragging, model]);\n return (React.createElement(\"div\", null,\n React.createElement(\"div\", { onMouseDown: function () { return setMouseDragging(true); }, style: {\n cursor: 'ns-resize',\n width: '100%',\n height: resizeHandleWidth,\n background: \"rgba(200,200,200)\",\n position: 'relative',\n } })));\n});\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport React, { useRef, useEffect } from 'react';\nimport { observer } from 'mobx-react';\nimport { Typography } from '@material-ui/core';\nimport ImportForm from './ImportForm';\nimport Rubberband from './Rubberband';\nimport TreeCanvas from './TreeCanvas';\nimport MSACanvas from './MSACanvas';\nimport Ruler from './Ruler';\nimport TreeRuler from './TreeRuler';\nimport Header from './Header';\nimport Track from './Track';\nimport AnnotationDialog from './AnnotationDlg';\nimport { HorizontalResizeHandle, VerticalResizeHandle } from './ResizeHandles';\nvar MouseoverCanvas = observer(function (_a) {\n var model = _a.model;\n var ref = useRef(null);\n var height = model.height, width = model.width, treeAreaWidth = model.treeAreaWidth, resizeHandleWidth = model.resizeHandleWidth, scrollX = model.scrollX, mouseCol = model.mouseCol, colWidth = model.colWidth;\n useEffect(function () {\n if (!ref.current) {\n return;\n }\n var ctx = ref.current.getContext('2d');\n if (!ctx) {\n return;\n }\n ctx.resetTransform();\n ctx.clearRect(0, 0, width, height);\n if (mouseCol !== undefined) {\n var x = (mouseCol - 1) * colWidth + scrollX + treeAreaWidth + resizeHandleWidth;\n ctx.fillStyle = 'rgba(100,100,100,0.5)';\n ctx.fillRect(x, 0, colWidth, height);\n }\n }, [\n mouseCol,\n colWidth,\n scrollX,\n height,\n resizeHandleWidth,\n treeAreaWidth,\n width,\n ]);\n return (React.createElement(\"canvas\", { ref: ref, width: width, height: height, style: {\n position: 'absolute',\n top: 0,\n left: 0,\n width: width,\n height: height,\n zIndex: 1000,\n pointerEvents: 'none',\n } }));\n});\nexport default observer(function (_a) {\n var model = _a.model;\n var done = model.done, initialized = model.initialized, treeAreaWidth = model.treeAreaWidth, height = model.height, resizeHandleWidth = model.resizeHandleWidth, turnedOnTracks = model.turnedOnTracks;\n return (React.createElement(\"div\", null,\n !initialized ? (React.createElement(ImportForm, { model: model })) : !done ? (React.createElement(Typography, { variant: \"h4\" }, \"Loading...\")) : (React.createElement(\"div\", null,\n React.createElement(\"div\", { style: { height: height, overflow: 'hidden' } },\n React.createElement(Header, { model: model }),\n React.createElement(\"div\", null,\n React.createElement(\"div\", { style: { position: 'relative' } },\n React.createElement(\"div\", { style: { display: 'flex' } },\n React.createElement(\"div\", { style: { flexShrink: 0, width: treeAreaWidth } },\n React.createElement(TreeRuler, { model: model })),\n React.createElement(Rubberband, { model: model, ControlComponent: React.createElement(Ruler, { model: model }) })), turnedOnTracks === null || turnedOnTracks === void 0 ? void 0 :\n turnedOnTracks.map(function (track) { return (React.createElement(Track, { key: track.model.id, model: model, track: track })); }),\n React.createElement(\"div\", { style: { display: 'flex' } },\n React.createElement(\"div\", { style: { flexShrink: 0, width: treeAreaWidth } },\n React.createElement(TreeCanvas, { model: model })),\n React.createElement(VerticalResizeHandle, { model: model }),\n React.createElement(MSACanvas, { model: model }),\n React.createElement(MouseoverCanvas, { model: model }))))),\n React.createElement(HorizontalResizeHandle, { model: model }))),\n model.DialogComponent ? (React.createElement(model.DialogComponent, __assign({}, (model.DialogProps || {}), { onClose: function () {\n model.setDialogComponent(undefined, undefined);\n } }))) : null,\n model.annotPos ? (React.createElement(AnnotationDialog, { data: model.annotPos, model: model, onClose: function () { return model.clearAnnotPos(); } })) : null));\n});\n","function defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n return x + c.x;\n}\n\nfunction maxY(children) {\n return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n var children;\n while (children = node.children) node = children[0];\n return node;\n}\n\nfunction leafRight(node) {\n var children;\n while (children = node.children) node = children[children.length - 1];\n return node;\n}\n\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = false;\n\n function cluster(root) {\n var previousNode,\n x = 0;\n\n // First walk, computing the initial x & y values.\n root.eachAfter(function(node) {\n var children = node.children;\n if (children) {\n node.x = meanX(children);\n node.y = maxY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n\n var left = leafLeft(root),\n right = leafRight(root),\n x0 = left.x - separation(left, right) / 2,\n x1 = right.x + separation(right, left) / 2;\n\n // Second walk, normalizing x & y to the desired size.\n return root.eachAfter(nodeSize ? function(node) {\n node.x = (node.x - root.x) * dx;\n node.y = (root.y - node.y) * dy;\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * dx;\n node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n });\n }\n\n cluster.separation = function(x) {\n return arguments.length ? (separation = x, cluster) : separation;\n };\n\n cluster.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n };\n\n cluster.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n };\n\n return cluster;\n}\n","function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_find from \"./find.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n if (data instanceof Map) {\n data = [undefined, data];\n if (children === undefined) children = mapChildren;\n } else if (children === undefined) {\n children = objectChildren;\n }\n\n var root = new Node(data),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n while (node = nodes.pop()) {\n if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n node.children = childs;\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = childs[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n return d.children;\n}\n\nfunction mapChildren(d) {\n return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n if (node.data.value !== undefined) node.value = node.data.value;\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n find: node_find,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy,\n [Symbol.iterator]: node_iterator\n};\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], next = [], children, i, n, index = -1;\n while (node = nodes.pop()) {\n next.push(node);\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n }\n while (node = next.pop()) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], children, i, index = -1;\n while (node = nodes.pop()) {\n callback.call(that, node, ++index, this);\n if (children = node.children) {\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n }\n return this;\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n if (callback.call(that, node, ++index, this)) {\n return node;\n }\n }\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","export default function*() {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n yield node;\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n }\n } while (next.length);\n}\n","function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose.js\");\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutProperties;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","'use strict';\n\n// Found this seed-based random generator somewhere\n// Based on The Central Randomizer 1.3 (C) 1997 by Paul Houle (houle@msc.cornell.edu)\n\nvar seed = 1;\n\n/**\n * return a random number based on a seed\n * @param seed\n * @returns {number}\n */\nfunction getNextValue() {\n seed = (seed * 9301 + 49297) % 233280;\n return seed/(233280.0);\n}\n\nfunction setSeed(_seed_) {\n seed = _seed_;\n}\n\nmodule.exports = {\n nextValue: getNextValue,\n seed: setSeed\n};\n","'use strict';\n\nvar randomFromSeed = require('./random/random-from-seed');\n\nvar ORIGINAL = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-';\nvar alphabet;\nvar previousSeed;\n\nvar shuffled;\n\nfunction reset() {\n shuffled = false;\n}\n\nfunction setCharacters(_alphabet_) {\n if (!_alphabet_) {\n if (alphabet !== ORIGINAL) {\n alphabet = ORIGINAL;\n reset();\n }\n return;\n }\n\n if (_alphabet_ === alphabet) {\n return;\n }\n\n if (_alphabet_.length !== ORIGINAL.length) {\n throw new Error('Custom alphabet for shortid must be ' + ORIGINAL.length + ' unique characters. You submitted ' + _alphabet_.length + ' characters: ' + _alphabet_);\n }\n\n var unique = _alphabet_.split('').filter(function(item, ind, arr){\n return ind !== arr.lastIndexOf(item);\n });\n\n if (unique.length) {\n throw new Error('Custom alphabet for shortid must be ' + ORIGINAL.length + ' unique characters. These characters were not unique: ' + unique.join(', '));\n }\n\n alphabet = _alphabet_;\n reset();\n}\n\nfunction characters(_alphabet_) {\n setCharacters(_alphabet_);\n return alphabet;\n}\n\nfunction setSeed(seed) {\n randomFromSeed.seed(seed);\n if (previousSeed !== seed) {\n reset();\n previousSeed = seed;\n }\n}\n\nfunction shuffle() {\n if (!alphabet) {\n setCharacters(ORIGINAL);\n }\n\n var sourceArray = alphabet.split('');\n var targetArray = [];\n var r = randomFromSeed.nextValue();\n var characterIndex;\n\n while (sourceArray.length > 0) {\n r = randomFromSeed.nextValue();\n characterIndex = Math.floor(r * sourceArray.length);\n targetArray.push(sourceArray.splice(characterIndex, 1)[0]);\n }\n return targetArray.join('');\n}\n\nfunction getShuffled() {\n if (shuffled) {\n return shuffled;\n }\n shuffled = shuffle();\n return shuffled;\n}\n\n/**\n * lookup shuffled letter\n * @param index\n * @returns {string}\n */\nfunction lookup(index) {\n var alphabetShuffled = getShuffled();\n return alphabetShuffled[index];\n}\n\nfunction get () {\n return alphabet || ORIGINAL;\n}\n\nmodule.exports = {\n get: get,\n characters: characters,\n seed: setSeed,\n lookup: lookup,\n shuffled: getShuffled\n};\n","'use strict';\n\nvar generate = require('./generate');\nvar alphabet = require('./alphabet');\n\n// Ignore all milliseconds before a certain time to reduce the size of the date entropy without sacrificing uniqueness.\n// This number should be updated every year or so to keep the generated id short.\n// To regenerate `new Date() - 0` and bump the version. Always bump the version!\nvar REDUCE_TIME = 1567752802062;\n\n// don't change unless we change the algos or REDUCE_TIME\n// must be an integer and less than 16\nvar version = 7;\n\n// Counter is used when shortid is called multiple times in one second.\nvar counter;\n\n// Remember the last time shortid was called in case counter is needed.\nvar previousSeconds;\n\n/**\n * Generate unique id\n * Returns string id\n */\nfunction build(clusterWorkerId) {\n var str = '';\n\n var seconds = Math.floor((Date.now() - REDUCE_TIME) * 0.001);\n\n if (seconds === previousSeconds) {\n counter++;\n } else {\n counter = 0;\n previousSeconds = seconds;\n }\n\n str = str + generate(version);\n str = str + generate(clusterWorkerId);\n if (counter > 0) {\n str = str + generate(counter);\n }\n str = str + generate(seconds);\n return str;\n}\n\nmodule.exports = build;\n","'use strict';\n\nvar crypto = typeof window === 'object' && (window.crypto || window.msCrypto); // IE 11 uses window.msCrypto\n\nvar randomByte;\n\nif (!crypto || !crypto.getRandomValues) {\n randomByte = function(size) {\n var bytes = [];\n for (var i = 0; i < size; i++) {\n bytes.push(Math.floor(Math.random() * 256));\n }\n return bytes;\n };\n} else {\n randomByte = function(size) {\n return crypto.getRandomValues(new Uint8Array(size));\n };\n}\n\nmodule.exports = randomByte;\n","// This file replaces `format.js` in bundlers like webpack or Rollup,\n// according to `browser` config in `package.json`.\n\nmodule.exports = function (random, alphabet, size) {\n // We can’t use bytes bigger than the alphabet. To make bytes values closer\n // to the alphabet, we apply bitmask on them. We look for the closest\n // `2 ** x - 1` number, which will be bigger than alphabet size. If we have\n // 30 symbols in the alphabet, we will take 31 (00011111).\n // We do not use faster Math.clz32, because it is not available in browsers.\n var mask = (2 << Math.log(alphabet.length - 1) / Math.LN2) - 1\n // Bitmask is not a perfect solution (in our example it will pass 31 bytes,\n // which is bigger than the alphabet). As a result, we will need more bytes,\n // than ID size, because we will refuse bytes bigger than the alphabet.\n\n // Every hardware random generator call is costly,\n // because we need to wait for entropy collection. This is why often it will\n // be faster to ask for few extra bytes in advance, to avoid additional calls.\n\n // Here we calculate how many random bytes should we call in advance.\n // It depends on ID length, mask / alphabet size and magic number 1.6\n // (which was selected according benchmarks).\n\n // -~f => Math.ceil(f) if n is float number\n // -~i => i + 1 if n is integer number\n var step = -~(1.6 * mask * size / alphabet.length)\n var id = ''\n\n while (true) {\n var bytes = random(step)\n // Compact alternative for `for (var i = 0; i < step; i++)`\n var i = step\n while (i--) {\n // If random byte is bigger than alphabet even after bitmask,\n // we refuse it by `|| ''`.\n id += alphabet[bytes[i] & mask] || ''\n // More compact than `id.length + 1 === size`\n if (id.length === +size) return id\n }\n }\n}\n","'use strict';\n\nvar alphabet = require('./alphabet');\nvar random = require('./random/random-byte');\nvar format = require('nanoid/format');\n\nfunction generate(number) {\n var loopCounter = 0;\n var done;\n\n var str = '';\n\n while (!done) {\n str = str + format(random, alphabet.get(), 1);\n done = number < (Math.pow(16, loopCounter + 1 ) );\n loopCounter++;\n }\n return str;\n}\n\nmodule.exports = generate;\n","'use strict';\nvar alphabet = require('./alphabet');\n\nfunction isShortId(id) {\n if (!id || typeof id !== 'string' || id.length < 6 ) {\n return false;\n }\n\n var nonAlphabetic = new RegExp('[^' +\n alphabet.get().replace(/[|\\\\{}()[\\]^$+*?.-]/g, '\\\\$&') +\n ']');\n return !nonAlphabetic.test(id);\n}\n\nmodule.exports = isShortId;\n","'use strict';\n\nvar alphabet = require('./alphabet');\nvar build = require('./build');\nvar isValid = require('./is-valid');\n\n// if you are using cluster or multiple servers use this to make each instance\n// has a unique value for worker\n// Note: I don't know if this is automatically set when using third\n// party cluster solutions such as pm2.\nvar clusterWorkerId = require('./util/cluster-worker-id') || 0;\n\n/**\n * Set the seed.\n * Highly recommended if you don't want people to try to figure out your id schema.\n * exposed as shortid.seed(int)\n * @param seed Integer value to seed the random alphabet. ALWAYS USE THE SAME SEED or you might get overlaps.\n */\nfunction seed(seedValue) {\n alphabet.seed(seedValue);\n return module.exports;\n}\n\n/**\n * Set the cluster worker or machine id\n * exposed as shortid.worker(int)\n * @param workerId worker must be positive integer. Number less than 16 is recommended.\n * returns shortid module so it can be chained.\n */\nfunction worker(workerId) {\n clusterWorkerId = workerId;\n return module.exports;\n}\n\n/**\n *\n * sets new characters to use in the alphabet\n * returns the shuffled alphabet\n */\nfunction characters(newCharacters) {\n if (newCharacters !== undefined) {\n alphabet.characters(newCharacters);\n }\n\n return alphabet.shuffled();\n}\n\n/**\n * Generate unique id\n * Returns string id\n */\nfunction generate() {\n return build(clusterWorkerId);\n}\n\n// Export all other functions as properties of the generate function\nmodule.exports = generate;\nmodule.exports.generate = generate;\nmodule.exports.seed = seed;\nmodule.exports.worker = worker;\nmodule.exports.characters = characters;\nmodule.exports.isValid = isValid;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FileLocation = exports.UriLocation = exports.UriLocationRaw = exports.BlobLocation = exports.LocalPathLocation = exports.Region = exports.NoAssemblyRegion = exports.PropTypes = exports.ElementId = void 0;\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _shortid = _interopRequireDefault(require(\"shortid\"));\n\nvar _mobxStateTree = require(\"mobx-state-tree\");\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _mobxReact = require(\"mobx-react\");\n\nvar _excluded = [\"baseUri\"];\n\nvar ElementId = _mobxStateTree.types.optional(_mobxStateTree.types.identifier, _shortid.default.generate); // PropTypes that are useful when working with instances of these in react components\n\n\nexports.ElementId = ElementId;\nvar PropTypes = {\n Region: _propTypes.default.shape({\n refName: _propTypes.default.string.isRequired,\n start: _propTypes.default.number.isRequired,\n end: _propTypes.default.number.isRequired\n }),\n ConfigSchema: _mobxReact.PropTypes.objectOrObservableObject,\n Feature: _propTypes.default.shape({\n get: _propTypes.default.func.isRequired,\n id: _propTypes.default.func.isRequired\n })\n};\nexports.PropTypes = PropTypes;\n\nvar NoAssemblyRegion = _mobxStateTree.types.model('NoAssemblyRegion', {\n refName: _mobxStateTree.types.string,\n start: _mobxStateTree.types.number,\n end: _mobxStateTree.types.number,\n reversed: _mobxStateTree.types.optional(_mobxStateTree.types.boolean, false)\n}).actions(function (self) {\n return {\n setRefName: function setRefName(newRefName) {\n self.refName = newRefName;\n }\n };\n});\n\nexports.NoAssemblyRegion = NoAssemblyRegion;\n\nvar Region = _mobxStateTree.types.compose('Region', NoAssemblyRegion, _mobxStateTree.types.model({\n assemblyName: _mobxStateTree.types.string\n}));\n\nexports.Region = Region;\n\nvar LocalPathLocation = _mobxStateTree.types.model('LocalPathLocation', {\n localPath: _mobxStateTree.types.string // TODO: refine\n\n});\n\nexports.LocalPathLocation = LocalPathLocation;\n\nvar BlobLocation = _mobxStateTree.types.model('BlobLocation', {\n name: _mobxStateTree.types.string,\n // TODO: refine\n blobId: _mobxStateTree.types.string\n});\n\nexports.BlobLocation = BlobLocation;\n\nvar UriLocationRaw = _mobxStateTree.types.model('UriLocation', {\n uri: _mobxStateTree.types.string,\n // TODO: refine\n baseUri: _mobxStateTree.types.maybe(_mobxStateTree.types.string)\n});\n\nexports.UriLocationRaw = UriLocationRaw;\n\nvar UriLocation = _mobxStateTree.types.snapshotProcessor(UriLocationRaw, {\n postProcessor: function postProcessor(snap) {\n var baseUri = snap.baseUri,\n rest = (0, _objectWithoutProperties2.default)(snap, _excluded);\n\n if (!baseUri) {\n return rest;\n }\n\n return snap;\n }\n});\n\nexports.UriLocation = UriLocation;\n\nvar FileLocation = _mobxStateTree.types.union(LocalPathLocation, UriLocation, BlobLocation);\n\nexports.FileLocation = FileLocation;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _mobxStateTree = require(\"mobx-state-tree\");\n\nvar _mst = require(\"../../util/types/mst\");\n\nvar BaseViewModel = _mobxStateTree.types.model('BaseView', {\n id: _mst.ElementId,\n displayName: _mobxStateTree.types.maybe(_mobxStateTree.types.string)\n}).volatile(function () {\n return (\n /* self */\n {\n width: 800\n }\n );\n}).views(function () {\n return (\n /* self */\n {\n menuItems: function menuItems() {\n return [];\n }\n }\n );\n}).actions(function (self) {\n return {\n setDisplayName: function setDisplayName(name) {\n self.displayName = name;\n },\n setWidth: function setWidth(newWidth) {\n self.width = newWidth;\n }\n };\n});\n\nvar _default = BaseViewModel; // eslint-disable-next-line @typescript-eslint/no-empty-interface,@typescript-eslint/interface-name-prefix\n\nexports.default = _default;","const Stockholm = function() {\n let obj = { gf: {}, // gf[tag] = ARRAY\n gc: {}, // gc[tag] = STRING\n gs: {}, // gs[tag][seqname] = ARRAY\n gr: {}, // gr[tag][seqname] = STRING\n seqname: [], // optional, specify ordering of rows\n seqdata: {} // seqdata[seqname] = STRING\n }\n Object.keys(obj).forEach ((prop) => this[prop] = obj[prop])\n return this\n}\n\nconst formatStartRegex = /^# STOCKHOLM 1.0/;\nconst formatEndRegex = /^\\/\\/\\s*$/;\nconst gfRegex = /^#=GF\\s+(\\S+)\\s+(.*?)\\s*$/;\nconst gcRegex = /^#=GC\\s+(\\S+)\\s+(.*?)\\s*$/;\nconst gsRegex = /^#=GS\\s+(\\S+)\\s+(\\S+)\\s+(.*?)\\s*$/;\nconst grRegex = /^#=GR\\s+(\\S+)\\s+(\\S+)\\s+(.*?)\\s*$/;\nconst lineRegex = /^\\s*(\\S+)\\s+(\\S+)\\s*$/;\nconst nonwhiteRegex = /\\S/;\n\nconst noFormatStart = \"No format header: # STOCKHOLM 1.0\";\nconst noFormatEnd = \"No format footer: //\";\nconst badLine = \"Malformed line\";\nconst atLine = (n) => \"(At line \" + (n+1) + \") \";\n\nconst sniff = (text) => formatStartRegex.test (text);\n\nconst validate = (text) => {\n try {\n parseAll (text, { strict: true })\n } catch (e) {\n return false\n }\n return true\n}\n\nconst error = (err) => { throw new Error (err); }\nconst warning = (err) => console.warn(err);\n\nconst parseAll = (text, opts) => {\n opts = opts || {}\n const maybeWarning = opts.quiet ? (() => null) : warning;\n const maybeError = opts.strict ? error : maybeWarning;\n let db = [], stock = null\n const lines = text.split(\"\\n\")\n lines.forEach ((line, n) => {\n const makeStock = () => {\n if (!stock) {\n maybeError (atLine(n) + noFormatStart);\n stock = new Stockholm();\n }\n };\n let match;\n if (formatStartRegex.test(line)) {\n if (stock) maybeError (atLine(n) + noFormatEnd);\n stock = new Stockholm();\n } else if (formatEndRegex.test(line)) {\n if (stock)\n db.push (stock);\n else\n maybeError (atLine(n) + noFormatStart);\n stock = null;\n } else if (match = gfRegex.exec(line)) {\n makeStock();\n stock.gf[match[1]] = stock.gf[match[1]] || [];\n stock.gf[match[1]].push (match[2]);\n } else if (match = gcRegex.exec(line)) {\n makeStock();\n stock.gc[match[1]] = stock.gc[match[1]] || '';\n stock.gc[match[1]] += match[2];\n } else if (match = gsRegex.exec(line)) {\n makeStock();\n stock.gs[match[2]] = stock.gs[match[2]] || {};\n stock.gs[match[2]][match[1]] = stock.gs[match[2]][match[1]] || [];\n stock.gs[match[2]][match[1]].push (match[3]);\n } else if (match = grRegex.exec(line)) {\n makeStock();\n stock.gr[match[2]] = stock.gr[match[2]] || {};\n stock.gr[match[2]][match[1]] = stock.gr[match[2]][match[1]] || '';\n stock.gr[match[2]][match[1]] += match[3];\n } else if (match = lineRegex.exec(line)) {\n makeStock();\n if (!stock.seqdata[match[1]]) {\n stock.seqdata[match[1]] = '';\n stock.seqname.push (match[1]);\n }\n stock.seqdata[match[1]] += match[2];\n } else if (nonwhiteRegex.test (line)) {\n error (atLine(n) + badLine);\n }\n })\n if (stock) {\n maybeError (\"Warning: no end line //\");\n db.push (stock);\n }\n return db;\n}\n\nconst parse = (text, opts) => {\n const db = parseAll (text, opts);\n if (db.length === 0)\n error (\"No alignments found\");\n if (db.length > 1)\n error (\"More than one alignment found\");\n return db[0];\n}\n\nconst fromSeqIndex = (seqdata, names) => {\n let stock = new Stockholm()\n names = names || Object.keys(seqdata) // specifying order is optional\n names.forEach ((name) => stock.addRow (name, seqdata[name]))\n return stock\n}\n\nconst fromRowList = (array) => {\n let stock = new Stockholm()\n array.forEach ((row) => stock.addRow (row[0], row[1]))\n return stock\n}\n\nStockholm.prototype.rows = function() {\n return this.seqname.length\n}\n\nStockholm.prototype.columns = function() {\n let cols = 0\n this.seqname.forEach ((name) => { cols = Math.max (cols, this.seqdata[name].length) })\n Object.keys(this.gr).forEach ((tag) => Object.keys(this.gr[tag]).forEach ((name) => {\n cols = Math.max (cols, this.gr[tag][name].length)\n }))\n return cols\n}\n\nStockholm.prototype.allNames = function() {\n let isName = {},\n names = [],\n addName = (name) => { if (!isName[name]) { isName[name] = true; names.push (name) } },\n addNames = (list) => list.forEach (addName);\n addNames (this.seqname);\n addNames (Object.keys (this.seqdata)); // just in case seqdata has been independently modified\n Object.keys(this.gr).forEach ((tag) => addNames (Object.keys(this.gr[tag])));\n Object.keys(this.gs).forEach ((tag) => addNames (Object.keys(this.gs[tag])));\n return names\n}\n\nStockholm.prototype.allTags = function() {\n let isTag = {}\n const addTags = (obj) => Object.keys(obj).forEach ((tag) => isTag[tag] = true)\n addTags (this.gc)\n addTags (this.gf)\n addTags (this.gr)\n addTags (this.gs)\n return Object.keys(isTag).sort()\n}\n\nStockholm.prototype.addRow = function (name, data) {\n if (this.seqdata[name])\n error (\"Duplicate row name\")\n this.seqname.push (name)\n this.seqdata[name] = data || ''\n return this\n}\n\nStockholm.prototype.deleteRow = function (name) {\n if (!this.seqdata[name])\n error (\"Row not found\")\n this.seqname = this.seqname.filter ((n) => n !== name);\n delete this.seqdata[name];\n return this\n}\n\nfunction leftPad (text, width) {\n while (text.length < width)\n text = ' ' + text\n return text\n}\n\nfunction rightPad (text, width) {\n while (text.length < width)\n text = text + ' '\n return text\n}\n\nfunction space (width) {\n return leftPad (\"\", width)\n}\n\nStockholm.prototype.toString = function (opts) {\n opts = opts || { width: 80, indentNames: false }\n const names = this.allNames(), cols = this.columns()\n const nameWidth = Math.max.apply (null, names.map ((name) => name.length).concat([0]))\n const tagWidth = Math.max.apply (null, this.allTags().map ((tag) => tag.length).concat([0]))\n const seqIndent = tagWidth ? (tagWidth + 6) : 0;\n const width = opts.width ? Math.max (1, opts.width - nameWidth - seqIndent - 1) : cols\n const pad = opts.indentNames ? leftPad : rightPad\n const padTagName = (opts.indentNames\n ? ((tag, name) => leftPad(tag,tagWidth) + \" \" + leftPad(name,nameWidth))\n : ((tag, name) => rightPad(tag+\" \"+name,tagWidth+nameWidth+1)))\n let offsets = [0]\n for (let offset = width; offset < cols; offset += width)\n offsets.push (offset)\n return \"# STOCKHOLM 1.0\\n\"\n + Object.keys(this.gf).sort().map (tag => this.gf[tag].map((line) => \"#=GF \" + pad(tag,tagWidth) + \" \" + line + \"\\n\").join('')).join('')\n + Object.keys(this.gs).sort().map (tag => Object.keys(this.gs[tag]).map((name) => this.gs[tag][name].map ((line) => \"#=GS \" + padTagName(tag,name) + \" \" + line + \"\\n\").join('')).join('')).join('')\n + offsets.map ((offset) =>\n Object.keys(this.gc).sort().map (tag => \"#=GC \" + pad(tag,tagWidth) + space(nameWidth+2) + this.gc[tag].substr(offset,width) + \"\\n\").join('')\n + names.map ((name) => Object.keys(this.gr).filter ((tag) => this.gr[tag][name]).sort().map ((tag) => \"#=GR \" + padTagName(tag,name) + \" \" + this.gr[tag][name].substr(offset,width) + \"\\n\").join('')\n + (this.seqdata[name]\n ? (pad(name,nameWidth+seqIndent)\n + \" \" + this.seqdata[name].substr(offset,width) + \"\\n\")\n : '')).join('')).join(\"\\n\")\n + \"//\\n\"\n}\n\nStockholm.prototype.toFasta = function (opts) {\n opts = opts || { width: 80 }\n const cols = this.columns()\n const width = opts.width || cols\n let offsets = [0]\n for (let offset = width; offset < cols; offset += width)\n offsets.push (offset)\n return this.allNames()\n .map ((name) =>\n (this.seqdata[name]\n ? (\">\" + name + \"\\n\"\n + offsets.map ((offset) => this.seqdata[name].substr (offset, width) + \"\\n\").join(''))\n : ''))\n .join('')\n}\n\nStockholm.prototype.toRowList = function (opts) {\n return this.allNames()\n .filter ((name) => this.seqdata[name])\n .map ((name) => [name, this.seqdata[name]])\n}\n\nif (typeof(module) !== 'undefined')\n module.exports = { sniff, validate, parse, parseAll, fromSeqIndex, fromRowList, Stockholm }\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseBlocks = exports.parseBlock = exports.getSeqBounds = exports.getFirstNonEmptyLine = exports.parseHeader = exports.parseVersion = void 0;\nfunction parseVersion(line) {\n const res = line.match(/\\(?(\\d+(\\.\\d+)+)\\)?/);\n return res && res.length > 1 ? res[1] : \"\";\n}\nexports.parseVersion = parseVersion;\nfunction parseHeader(info) {\n const knownHeaders = [\"CLUSTAL\", \"PROBCONS\", \"MUSCLE\", \"MSAPROBS\", \"Kalign\"];\n if (!knownHeaders.find((l) => info.startsWith(l))) {\n console.warn(`${info} is not a known CLUSTAL header: ${knownHeaders.join(\",\")}, proceeding but could indicate an issue`);\n }\n const version = parseVersion(info);\n return { info, version };\n}\nexports.parseHeader = parseHeader;\nfunction getFirstNonEmptyLine(arr) {\n // There should be two blank lines after the header line\n let line = arr.next();\n while (!line.done && line.value.trim() === \"\") {\n line = arr.next();\n }\n return line.value;\n}\nexports.getFirstNonEmptyLine = getFirstNonEmptyLine;\nfunction getSeqBounds(line) {\n const fields = line.split(/\\s+/);\n const temp = line.slice(fields[0].length);\n const s = fields[0].length + temp.indexOf(fields[1]);\n const e = s + fields[1].length;\n return [s, e];\n}\nexports.getSeqBounds = getSeqBounds;\n// Use the first block to get the sequence identifiers\nfunction parseBlock(arr) {\n let line = getFirstNonEmptyLine(arr);\n const block = [];\n let consensusLine = \"\";\n if (!line)\n return undefined;\n while (line) {\n if (line[0] !== \" \")\n block.push(line);\n else\n consensusLine = line;\n line = arr.next().value;\n }\n const [start, end] = getSeqBounds(block[0]);\n const fields = block.map((s) => s.split(/\\s+/));\n const ids = fields.map((s) => s[0]);\n const seqs = block.map((s) => s.slice(start, end));\n let consensus = consensusLine.slice(start, end);\n // handle if the consensus trailing whitespace got trimmed\n const remainder = seqs[0].length - consensus.length;\n if (remainder) {\n consensus += \" \".repeat(remainder);\n }\n return { ids, seqs, consensus };\n}\nexports.parseBlock = parseBlock;\nfunction parseBlocks(arr) {\n let block;\n const res = parseBlock(arr);\n if (res !== undefined) {\n while ((block = parseBlock(arr))) {\n for (let i = 0; i < block.seqs.length; i++) {\n res.seqs[i] += block.seqs[i];\n }\n res.consensus += block.consensus;\n }\n }\n return res;\n}\nexports.parseBlocks = parseBlocks;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parse = exports.parseIter = void 0;\nconst util_1 = require(\"./util\");\nfunction parseIter(arr) {\n const line = util_1.getFirstNonEmptyLine(arr);\n if (!line)\n throw new Error(\"Empty file received\");\n const header = util_1.parseHeader(line);\n const res = util_1.parseBlocks(arr);\n if (res === undefined)\n throw new Error(\"No blocks parsed\");\n const alns = res.seqs.map((n, index) => ({ id: res.ids[index], seq: n }));\n const { consensus } = res;\n if (consensus.length != alns[0].seq.length) {\n throw new Error(`Consensus length != sequence length. Con ${consensus.length} seq ${alns[0].seq.length}`);\n }\n return { consensus, alns, header };\n}\nexports.parseIter = parseIter;\nfunction parse(contents) {\n const iter = contents.split(\"\\n\")[Symbol.iterator]();\n return parseIter(iter);\n}\nexports.parse = parse;\n","import { parse } from 'clustal-js';\nvar ClustalMSA = /** @class */ (function () {\n function ClustalMSA(text) {\n this.MSA = parse(text);\n }\n ClustalMSA.prototype.getMSA = function () {\n return this.MSA;\n };\n ClustalMSA.prototype.getRow = function (name) {\n var _a;\n return (_a = this.MSA.alns.find(function (aln) { return aln.id === name; })) === null || _a === void 0 ? void 0 : _a.seq.split('');\n };\n ClustalMSA.prototype.getWidth = function () {\n return this.MSA.alns[0].seq.length;\n };\n ClustalMSA.prototype.getDetails = function () {\n return this.MSA.header;\n };\n ClustalMSA.prototype.getNames = function () {\n return this.MSA.alns.map(function (aln) { return aln.id; });\n };\n ClustalMSA.prototype.getStructures = function () {\n return {};\n };\n Object.defineProperty(ClustalMSA.prototype, \"alignmentNames\", {\n get: function () {\n return [];\n },\n enumerable: false,\n configurable: true\n });\n ClustalMSA.prototype.getTree = function () {\n return {\n id: 'root',\n noTree: true,\n branchset: this.getNames().map(function (name) { return ({ id: name, name: name }); }),\n };\n };\n Object.defineProperty(ClustalMSA.prototype, \"seqConsensus\", {\n get: function () {\n return this.MSA.consensus;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ClustalMSA.prototype, \"secondaryStructureConsensus\", {\n get: function () {\n return undefined;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ClustalMSA.prototype, \"tracks\", {\n get: function () {\n var _a;\n return ((_a = this.seqConsensus) === null || _a === void 0 ? void 0 : _a.trim())\n ? [\n {\n id: 'seqConsensus',\n name: 'Sequence consensus',\n data: this.seqConsensus,\n customColorScheme: {\n '*': 'white',\n ':': 'grey',\n '.': 'darkgrey',\n ' ': 'black',\n },\n },\n ]\n : [];\n },\n enumerable: false,\n configurable: true\n });\n return ClustalMSA;\n}());\nexport default ClustalMSA;\n","/**\n * Newick format parser in JavaScript.\n *\n * Copyright (c) Jason Davies 2010.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *\n * Example tree (from http://en.wikipedia.org/wiki/Newick_format):\n *\n * +--0.1--A\n * F-----0.2-----B +-------0.3----C\n * +------------------0.5-----E\n * +---------0.4------D\n *\n * Newick format:\n * (A:0.1,B:0.2,(C:0.3,D:0.4)E:0.5)F;\n *\n * Converted to JSON:\n * {\n * name: \"F\",\n * branchset: [\n * {name: \"A\", length: 0.1},\n * {name: \"B\", length: 0.2},\n * {\n * name: \"E\",\n * length: 0.5,\n * branchset: [\n * {name: \"C\", length: 0.3},\n * {name: \"D\", length: 0.4}\n * ]\n * }\n * ]\n * }\n *\n * Converted to JSON, but with no names or lengths:\n * {\n * branchset: [\n * {}, {}, {\n * branchset: [{}, {}]\n * }\n * ]\n * }\n */\nexport default function parse(s) {\n var ancestors = [];\n var tree = {};\n var tokens = s.split(/\\s*(;|\\(|\\)|,|:)\\s*/);\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var subtree = {};\n switch (token) {\n case '(': // new branchset\n tree.branchset = [subtree];\n ancestors.push(tree);\n tree = subtree;\n break;\n case ',': // another branch\n ancestors[ancestors.length - 1].branchset.push(subtree);\n tree = subtree;\n break;\n case ')': // optional name next\n tree = ancestors.pop();\n break;\n case ':': // optional length next\n break;\n default: {\n var x = tokens[i - 1];\n if (x === ')' || x === '(' || x === ',') {\n tree.name = token;\n }\n else if (x === ':') {\n tree.length = parseFloat(token);\n }\n }\n }\n }\n return tree;\n}\n","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport Stockholm from 'stockholm-js';\nimport parseNewick from '../parseNewick';\nimport { generateNodeIds } from '../util';\nvar StockholmMSA = /** @class */ (function () {\n function StockholmMSA(text, currentAlignment) {\n var res = Stockholm.parseAll(text);\n this.data = res;\n this.MSA = res[currentAlignment];\n }\n StockholmMSA.prototype.getMSA = function () {\n return this.MSA;\n };\n StockholmMSA.prototype.getRow = function (name) {\n var _a, _b;\n return (_b = (_a = this.MSA) === null || _a === void 0 ? void 0 : _a.seqdata[name]) === null || _b === void 0 ? void 0 : _b.split('');\n };\n StockholmMSA.prototype.getWidth = function () {\n var _a;\n var name = Object.keys((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.seqdata)[0];\n return this.getRow(name).length;\n };\n Object.defineProperty(StockholmMSA.prototype, \"alignmentNames\", {\n get: function () {\n return this.data.map(function (aln, index) { var _a; return ((_a = aln.gf.DE) === null || _a === void 0 ? void 0 : _a[0]) || \"Alignment \".concat(index + 1); });\n },\n enumerable: false,\n configurable: true\n });\n StockholmMSA.prototype.getDetails = function () {\n var _a, _b;\n return {\n General: this.MSA.gf,\n Accessions: (_a = this.MSA.gs) === null || _a === void 0 ? void 0 : _a.AC,\n Dbxref: (_b = this.MSA.gs) === null || _b === void 0 ? void 0 : _b.DR,\n };\n };\n StockholmMSA.prototype.getRowDetails = function (rowName) {\n var _a, _b;\n return {\n name: rowName,\n accession: (_a = this.MSA.gs) === null || _a === void 0 ? void 0 : _a.AC[rowName],\n dbxref: (_b = this.MSA.gs) === null || _b === void 0 ? void 0 : _b.DR[rowName],\n };\n };\n StockholmMSA.prototype.getNames = function () {\n return Object.keys(this.MSA.seqdata);\n };\n StockholmMSA.prototype.getSeqCoords = function () { };\n StockholmMSA.prototype.getStructures = function () {\n var _a;\n var pdbRegex = /PDB; +(\\S+) +(\\S); ([0-9]+)-([0-9]+)/;\n var ent = this.MSA;\n return Object.entries(((_a = ent.gs) === null || _a === void 0 ? void 0 : _a.DR) || {})\n .map(function (_a) {\n var id = _a[0], dr = _a[1];\n return [id, pdbRegex.exec(dr)];\n })\n .filter(function (item) { return !!item[1]; })\n .map(function (_a) {\n var id = _a[0], match = _a[1];\n var pdb = match[1].toLowerCase();\n var chain = match[2];\n var startPos = +match[3];\n var endPos = +match[4];\n return { id: id, pdb: pdb, chain: chain, startPos: startPos, endPos: endPos };\n })\n .reduce(function (a, b) {\n var id = b.id, rest = __rest(b, [\"id\"]);\n if (!a[id]) {\n a[id] = [];\n }\n a[id].push(rest);\n return a;\n }, {});\n };\n StockholmMSA.prototype.getTree = function () {\n var _a, _b, _c;\n var tree = (_c = (_b = (_a = this.MSA) === null || _a === void 0 ? void 0 : _a.gf) === null || _b === void 0 ? void 0 : _b.NH) === null || _c === void 0 ? void 0 : _c[0];\n return tree\n ? generateNodeIds(parseNewick(tree))\n : {\n id: 'root',\n noTree: true,\n branchset: this.getNames().map(function (name) { return ({\n id: name,\n name: name,\n }); }),\n };\n };\n Object.defineProperty(StockholmMSA.prototype, \"seqConsensus\", {\n get: function () {\n var _a;\n return (_a = this.MSA.gc) === null || _a === void 0 ? void 0 : _a.seq_cons;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StockholmMSA.prototype, \"secondaryStructureConsensus\", {\n get: function () {\n var _a;\n return (_a = this.MSA.gc) === null || _a === void 0 ? void 0 : _a.SS_cons;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StockholmMSA.prototype, \"tracks\", {\n get: function () {\n return [\n {\n id: 'seqConsensus',\n name: 'Sequence consensus',\n data: this.seqConsensus,\n customColorScheme: {},\n },\n {\n id: 'secondaryStruct',\n name: 'Secondary-structure',\n data: this.secondaryStructureConsensus,\n customColorScheme: {\n '>': 'pink',\n '<': 'lightblue',\n },\n },\n ];\n },\n enumerable: false,\n configurable: true\n });\n return StockholmMSA;\n}());\nexport default StockholmMSA;\n","var FastaMSA = /** @class */ (function () {\n function FastaMSA(text) {\n var seq = {};\n var name = '';\n var re = /^>(\\S+)/;\n text.split('\\n').forEach(function (line) {\n var match = re.exec(line);\n if (match) {\n seq[(name = match[1])] = '';\n }\n else if (name) {\n seq[name] = seq[name] + line.replace(/[ \\t]/g, '');\n }\n });\n this.MSA = { seqdata: seq };\n }\n FastaMSA.prototype.getMSA = function () {\n return this.MSA;\n };\n FastaMSA.prototype.getNames = function () {\n return Object.keys(this.MSA.seqdata);\n };\n FastaMSA.prototype.getRow = function (name) {\n var _a, _b;\n return (_b = (_a = this.MSA) === null || _a === void 0 ? void 0 : _a.seqdata[name]) === null || _b === void 0 ? void 0 : _b.split('');\n };\n FastaMSA.prototype.getWidth = function () {\n var _a;\n var name = Object.keys((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.seqdata)[0];\n return this.getRow(name).length;\n };\n FastaMSA.prototype.getStructures = function () {\n return {};\n };\n Object.defineProperty(FastaMSA.prototype, \"alignmentNames\", {\n get: function () {\n return [];\n },\n enumerable: false,\n configurable: true\n });\n FastaMSA.prototype.getDetails = function () {\n return {};\n };\n FastaMSA.prototype.getTree = function () {\n return {\n id: 'root',\n noTree: true,\n branchset: this.getNames().map(function (name) { return ({\n id: name,\n name: name,\n }); }),\n };\n };\n Object.defineProperty(FastaMSA.prototype, \"seqConsensus\", {\n get: function () {\n return undefined;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FastaMSA.prototype, \"secondaryStructureConsensus\", {\n get: function () {\n return undefined;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FastaMSA.prototype, \"tracks\", {\n get: function () {\n return [];\n },\n enumerable: false,\n configurable: true\n });\n return FastaMSA;\n}());\nexport default FastaMSA;\n","import React, { useRef, useMemo, useEffect } from 'react';\nimport { useTheme } from '@material-ui/core';\nimport { observer } from 'mobx-react';\nimport { colorContrast } from '../util';\nvar AnnotationBlock = observer(function (_a) {\n var track = _a.track, model = _a.model, offsetX = _a.offsetX;\n var blockSize = model.blockSize, scrollX = model.scrollX, bgColor = model.bgColor, modelColorScheme = model.colorScheme, colWidth = model.colWidth, rowHeight = model.rowHeight, highResScaleFactor = model.highResScaleFactor;\n var _b = track.model, customColorScheme = _b.customColorScheme, data = _b.data;\n var colorScheme = customColorScheme || modelColorScheme;\n var theme = useTheme();\n var ref = useRef(null);\n var contrastScheme = useMemo(function () { return colorContrast(colorScheme, theme); }, [colorScheme, theme]);\n useEffect(function () {\n if (!ref.current) {\n return;\n }\n var ctx = ref.current.getContext('2d');\n if (!ctx) {\n return;\n }\n // this logic is very similar to MSACanvas\n ctx.resetTransform();\n ctx.scale(highResScaleFactor, highResScaleFactor);\n ctx.clearRect(0, 0, blockSize, rowHeight);\n ctx.translate(-offsetX, 0);\n ctx.textAlign = 'center';\n ctx.font = ctx.font.replace(/\\d+px/, \"\".concat(Math.max(8, rowHeight - 8), \"px\"));\n var xStart = Math.max(0, Math.floor(offsetX / colWidth));\n var xEnd = Math.max(0, Math.ceil((offsetX + blockSize) / colWidth));\n var str = data === null || data === void 0 ? void 0 : data.slice(xStart, xEnd);\n for (var i = 0; str && i < str.length; i++) {\n var letter = str[i];\n var color = colorScheme[letter.toUpperCase()];\n if (bgColor) {\n var x = i * colWidth + offsetX - (offsetX % colWidth);\n ctx.fillStyle = color || 'white';\n ctx.fillRect(x, 0, colWidth, rowHeight);\n if (rowHeight >= 10 && colWidth >= rowHeight / 2) {\n ctx.fillStyle = contrastScheme[letter.toUpperCase()] || 'black';\n ctx.fillText(letter, x + colWidth / 2, rowHeight / 2 + 1); //+1 to avoid cutoff at height:10\n }\n }\n }\n }, [\n bgColor,\n blockSize,\n colWidth,\n rowHeight,\n offsetX,\n contrastScheme,\n colorScheme,\n highResScaleFactor,\n data,\n ]);\n return (React.createElement(\"canvas\", { ref: ref, height: rowHeight * highResScaleFactor, width: blockSize * highResScaleFactor, style: {\n position: 'absolute',\n left: scrollX + offsetX,\n width: blockSize,\n height: rowHeight,\n } }));\n});\nvar AnnotationTrack = observer(function (_a) {\n var track = _a.track, model = _a.model;\n var blocksX = model.blocksX, msaAreaWidth = model.msaAreaWidth, rowHeight = model.rowHeight;\n return (React.createElement(\"div\", { style: {\n position: 'relative',\n height: rowHeight,\n width: msaAreaWidth,\n overflow: 'hidden',\n } }, blocksX.map(function (bx) { return (React.createElement(AnnotationBlock, { key: bx, track: track, model: model, offsetX: bx })); })));\n});\nexport default AnnotationTrack;\n","import RBush from 'rbush';\nvar Layout = /** @class */ (function () {\n function Layout(_a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.maxHeight, maxHeight = _c === void 0 ? 10000 : _c;\n this.maxHeightReached = false;\n this.rbush = new RBush();\n this.rectangles = new Map();\n this.maxHeight = Math.ceil(maxHeight);\n this.pTotalHeight = 0; // total height, in units of bitmap squares (px/pitchY)\n }\n /**\n * @returns top position for the rect, or Null if laying\n * out the rect would exceed maxHeighe\n */\n Layout.prototype.addRect = function (id, left, right, height, data) {\n // add to rbush\n var existingRecord = this.rectangles.get(id);\n if (existingRecord) {\n return existingRecord.minY;\n }\n var currHeight = 0;\n while (this.rbush.collides({\n minX: left,\n minY: currHeight,\n maxX: right,\n maxY: currHeight + height,\n }) &&\n currHeight <= this.maxHeight) {\n currHeight += 1;\n }\n var record = {\n minX: left,\n minY: currHeight,\n maxX: right,\n maxY: currHeight + height,\n id: id,\n data: data,\n };\n this.rbush.insert(record);\n this.rectangles.set(id, record);\n this.pTotalHeight = Math.max(this.pTotalHeight, currHeight);\n return currHeight;\n };\n Object.defineProperty(Layout.prototype, \"totalHeight\", {\n get: function () {\n return this.pTotalHeight;\n },\n enumerable: false,\n configurable: true\n });\n return Layout;\n}());\nexport default Layout;\n","import React, { useRef, useMemo, useEffect } from 'react';\nimport { observer } from 'mobx-react';\nimport { getSnapshot, isStateTreeNode } from 'mobx-state-tree';\nimport Layout from '../layout';\nvar AnnotationBlock = observer(function (_a) {\n var track = _a.track, model = _a.model, offsetX = _a.offsetX;\n var blockSize = model.blockSize, colWidth = model.colWidth, blanks = model.blanks, rowHeight = model.rowHeight, highResScaleFactor = model.highResScaleFactor, scrollX = model.scrollX;\n var _b = track.model, height = _b.height, features = _b.features, associatedRowName = _b.associatedRowName;\n var feats = isStateTreeNode(features)\n ? getSnapshot(features)\n : features;\n var layout = useMemo(function () {\n var temp = new Layout();\n feats === null || feats === void 0 ? void 0 : feats.forEach(function (feature, index) {\n var start = feature.start, end = feature.end;\n if (associatedRowName) {\n var s = model.rowSpecificBpToPx(associatedRowName, start - 1);\n var e = model.rowSpecificBpToPx(associatedRowName, end);\n temp.addRect(\"\".concat(index), s, e, rowHeight, feature);\n }\n else {\n var s = model.globalBpToPx(start - 1);\n var e = model.globalBpToPx(end);\n temp.addRect(\"\".concat(index), s, e, rowHeight, feature);\n }\n });\n return temp;\n }, [rowHeight, feats, associatedRowName, model, blanks]);\n var ref = useRef(null);\n var labelRef = useRef(null);\n var mouseoverRef = useRef(null);\n useEffect(function () {\n if (!ref.current) {\n return;\n }\n var ctx = ref.current.getContext('2d');\n if (!ctx) {\n return;\n }\n ctx.resetTransform();\n ctx.scale(highResScaleFactor, highResScaleFactor);\n ctx.clearRect(0, 0, blockSize, height);\n ctx.translate(-offsetX, 0);\n ctx.textAlign = 'center';\n ctx.font = ctx.font.replace(/\\d+px/, \"\".concat(Math.max(8, rowHeight - 8), \"px\"));\n var xStart = Math.max(0, Math.floor(offsetX / colWidth));\n ctx.fillStyle = 'goldenrod';\n layout.rectangles.forEach(function (value) {\n var minX = value.minX, maxX = value.maxX, minY = value.minY, maxY = value.maxY;\n var x1 = (minX - xStart) * colWidth + offsetX - (offsetX % colWidth);\n var x2 = (maxX - xStart) * colWidth + offsetX - (offsetX % colWidth);\n if (x2 - x1 > 0) {\n ctx.fillRect(x1, minY, x2 - x1, (maxY - minY) / 2);\n }\n });\n }, [\n associatedRowName,\n blockSize,\n colWidth,\n layout.rectangles,\n model,\n rowHeight,\n height,\n offsetX,\n highResScaleFactor,\n features,\n blanks,\n ]);\n useEffect(function () {\n if (!labelRef.current) {\n return;\n }\n var ctx = labelRef.current.getContext('2d');\n if (!ctx) {\n return;\n }\n // this logic is very similar to MSACanvas\n ctx.resetTransform();\n ctx.scale(highResScaleFactor, highResScaleFactor);\n ctx.clearRect(0, 0, blockSize, height);\n ctx.translate(-offsetX, 0);\n ctx.textAlign = 'center';\n ctx.font = ctx.font.replace(/\\d+px/, \"\".concat(Math.max(8, rowHeight - 8), \"px\"));\n ctx.fillStyle = 'black';\n ctx.textAlign = 'left';\n layout.rectangles.forEach(function (value) {\n var _a, _b, _c, _d;\n var minX = value.minX, maxX = value.maxX, maxY = value.maxY, minY = value.minY;\n var feature = value.data;\n var x1 = minX * colWidth;\n var x2 = maxX * colWidth;\n if (x2 - x1 > 0) {\n var note = (_b = (_a = feature.attributes) === null || _a === void 0 ? void 0 : _a.Note) === null || _b === void 0 ? void 0 : _b[0];\n var name_1 = (_d = (_c = feature.attributes) === null || _c === void 0 ? void 0 : _c.Name) === null || _d === void 0 ? void 0 : _d[0];\n var type = feature.type;\n ctx.fillText([type, name_1, note].filter(function (f) { return !!f; }).join(' - '), Math.max(Math.min(-scrollX, x2), x1), minY + (maxY - minY));\n }\n });\n }, [\n blockSize,\n colWidth,\n scrollX,\n highResScaleFactor,\n height,\n layout.rectangles,\n offsetX,\n features,\n model,\n rowHeight,\n blanks,\n ]);\n return !features ? null : (React.createElement(React.Fragment, null,\n React.createElement(\"canvas\", { ref: ref, height: height * highResScaleFactor, width: blockSize * highResScaleFactor, style: {\n position: 'absolute',\n left: scrollX + offsetX,\n width: blockSize,\n height: height,\n } }),\n React.createElement(\"canvas\", { ref: labelRef, height: height * highResScaleFactor, width: blockSize * highResScaleFactor, style: {\n position: 'absolute',\n left: scrollX + offsetX,\n width: blockSize,\n height: height,\n } }),\n React.createElement(\"canvas\", { ref: mouseoverRef, height: height * highResScaleFactor, width: blockSize * highResScaleFactor, style: {\n position: 'absolute',\n left: scrollX + offsetX,\n width: blockSize,\n height: height,\n } })));\n});\nvar AnnotationTrack = observer(function (_a) {\n var model = _a.model, track = _a.track;\n var blocksX = model.blocksX, msaAreaWidth = model.msaAreaWidth;\n var height = track.model.height;\n return (React.createElement(\"div\", { style: {\n position: 'relative',\n height: height,\n width: msaAreaWidth,\n overflow: 'hidden',\n } }, blocksX.map(function (bx) { return (React.createElement(AnnotationBlock, { track: track, key: bx, model: model, offsetX: bx })); })));\n});\nexport default AnnotationTrack;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { cast, types, addDisposer } from 'mobx-state-tree';\nimport { hierarchy, cluster } from 'd3-hierarchy';\nimport { ascending, max } from 'd3-array';\nimport { FileLocation, ElementId } from '@jbrowse/core/util/types/mst';\nimport { openLocation } from '@jbrowse/core/util/io';\nimport { autorun } from 'mobx';\nimport BaseViewModel from '@jbrowse/core/pluggableElementTypes/models/BaseViewModel';\nimport Stockholm from 'stockholm-js';\nimport ClustalMSA from './parsers/ClustalMSA';\nimport StockholmMSA from './parsers/StockholmMSA';\nimport FastaMSA from './parsers/FastaMSA';\nimport parseNewick from './parseNewick';\nimport colorSchemes from './colorSchemes';\nimport { generateNodeIds } from './util';\nimport TextTrack from './components/TextTrack';\nimport BoxTrack from './components/BoxTrack';\nfunction skipBlanks(blanks, arg) {\n var s = '';\n var b = 0;\n for (var j = 0; j < arg.length; j++) {\n if (j === blanks[b]) {\n b++;\n }\n else {\n s += arg[j];\n }\n }\n return s;\n}\nfunction setBrLength(d, y0, k) {\n var _a;\n //@ts-ignore\n d.len = (y0 += Math.max(d.data.length || 0, 0)) * k;\n (_a = d.children) === null || _a === void 0 ? void 0 : _a.forEach(function (d) {\n setBrLength(d, y0, k);\n });\n}\nfunction maxLength(d) {\n return (d.data.length || 1) + (d.children ? max(d.children, maxLength) : 0);\n}\n// Collapse the node and all it's children, from\n// https://bl.ocks.org/d3noob/43a860bc0024792f8803bba8ca0d5ecd\nfunction collapse(d) {\n if (d.children) {\n //@ts-ignore\n d._children = d.children;\n //@ts-ignore\n d._children.forEach(collapse);\n //@ts-ignore\n d.children = null;\n }\n}\nfunction clamp(min, num, max) {\n return Math.min(Math.max(num, min), max);\n}\nvar StructureModel = types.model({\n id: types.identifier,\n structure: types.model({\n pdb: types.string,\n startPos: types.number,\n endPos: types.number,\n }),\n range: types.maybe(types.string),\n});\nvar UniprotTrack = types\n .model({\n id: types.string,\n accession: types.string,\n name: types.string,\n associatedRowName: types.string,\n height: types.optional(types.number, 100),\n})\n .volatile(function () { return ({\n error: undefined,\n data: undefined,\n}); })\n .actions(function (self) { return ({\n setError: function (error) {\n self.error = error;\n },\n setData: function (data) {\n self.data = data;\n },\n}); })\n .actions(function (self) { return ({\n afterCreate: function () {\n var _this = this;\n addDisposer(self, autorun(function () { return __awaiter(_this, void 0, void 0, function () {\n var accession, url, response, text, e_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 3, , 4]);\n accession = self.accession;\n url = \"https://www.uniprot.org/uniprot/\".concat(accession, \".gff\");\n return [4 /*yield*/, fetch(url)];\n case 1:\n response = _a.sent();\n if (!response.ok) {\n throw new Error(\"HTTP \".concat(response.status, \" \").concat(response.statusText, \" fetching \").concat(url));\n }\n return [4 /*yield*/, response.text()];\n case 2:\n text = _a.sent();\n self.setData(text);\n return [3 /*break*/, 4];\n case 3:\n e_1 = _a.sent();\n self.setError(e_1);\n return [3 /*break*/, 4];\n case 4: return [2 /*return*/];\n }\n });\n }); }));\n },\n}); })\n .views(function (self) { return ({\n get loading() {\n return !self.data;\n },\n get features() {\n var _a;\n return (_a = self.data) === null || _a === void 0 ? void 0 : _a.split('\\n').map(function (f) { return f.trim(); }).filter(function (f) { return !!f; }).filter(function (f) { return !f.startsWith('#'); }).map(function (f) {\n var _a = f.split('\\t'), seq_id = _a[0], source = _a[1], type = _a[2], start = _a[3], end = _a[4], score = _a[5], strand = _a[6], phase = _a[7], col9 = _a[8];\n return __assign({ seq_id: seq_id, source: source, type: type, start: +start, end: +end, score: +score, strand: strand, phase: phase }, Object.fromEntries(col9\n .split(';')\n .map(function (f) { return f.trim(); })\n .filter(function (f) { return !!f; })\n .map(function (f) { return f.split('='); })\n .map(function (_a) {\n var key = _a[0], val = _a[1];\n return [\n key.trim(),\n decodeURIComponent(val).trim().split(',').join(' '),\n ];\n })));\n });\n },\n}); });\nvar MSAModel = types\n .model('MsaView', {\n id: ElementId,\n type: types.literal('MsaView'),\n height: types.optional(types.number, 550),\n treeAreaWidth: types.optional(types.number, 400),\n treeWidth: types.optional(types.number, 300),\n rowHeight: 20,\n scrollY: 0,\n scrollX: 0,\n resizeHandleWidth: 5,\n blockSize: 1000,\n mouseRow: types.maybe(types.number),\n mouseCol: types.maybe(types.number),\n selectedStructures: types.array(StructureModel),\n labelsAlignRight: false,\n colWidth: 16,\n showBranchLen: true,\n bgColor: true,\n drawTree: true,\n drawNodeBubbles: true,\n highResScaleFactor: 2,\n colorSchemeName: 'maeditor',\n treeFilehandle: types.maybe(FileLocation),\n msaFilehandle: types.maybe(FileLocation),\n currentAlignment: 0,\n collapsed: types.array(types.string),\n showOnly: types.maybe(types.string),\n boxTracks: types.array(UniprotTrack),\n turnedOffTracks: types.map(types.boolean),\n annotatedRegions: types.array(types.model({\n start: types.number,\n end: types.number,\n attributes: types.frozen(),\n })),\n data: types.optional(types\n .model({\n tree: types.maybe(types.string),\n msa: types.maybe(types.string),\n })\n .actions(function (self) { return ({\n setTree: function (tree) {\n self.tree = tree;\n },\n setMSA: function (msa) {\n self.msa = msa;\n },\n }); }), { tree: '', msa: '' }),\n})\n .volatile(function () { return ({\n error: undefined,\n margin: { left: 20, top: 20 },\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n DialogComponent: undefined,\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n DialogProps: undefined,\n // annotations\n annotPos: undefined,\n}); })\n .actions(function (self) { return ({\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n setDialogComponent: function (dlg, props) {\n self.DialogComponent = dlg;\n self.DialogProps = props;\n },\n setHeight: function (height) {\n self.height = height;\n },\n addStructureToSelection: function (elt) {\n self.selectedStructures.push(elt);\n },\n removeStructureFromSelection: function (elt) {\n var r = self.selectedStructures.find(function (node) { return node.id === elt.id; });\n if (r) {\n self.selectedStructures.remove(r);\n }\n },\n toggleStructureSelection: function (elt) {\n var r = self.selectedStructures.find(function (node) { return node.id === elt.id; });\n if (r) {\n self.selectedStructures.remove(r);\n }\n else {\n self.selectedStructures.push(elt);\n }\n },\n clearSelectedStructures: function () {\n //@ts-ignore\n self.selectedStructures = [];\n },\n setError: function (error) {\n if (error) {\n console.error(error);\n }\n self.error = error;\n },\n setMousePos: function (col, row) {\n self.mouseCol = col;\n self.mouseRow = row;\n },\n setRowHeight: function (n) {\n self.rowHeight = n;\n },\n setColWidth: function (n) {\n self.colWidth = n;\n },\n setColorSchemeName: function (name) {\n self.colorSchemeName = name;\n },\n setScrollY: function (n) {\n self.scrollY = n;\n },\n setScrollX: function (n) {\n self.scrollX = n;\n },\n setTreeAreaWidth: function (n) {\n self.treeAreaWidth = n;\n },\n setTreeWidth: function (n) {\n self.treeWidth = n;\n },\n setCurrentAlignment: function (n) {\n self.currentAlignment = n;\n },\n toggleLabelsAlignRight: function () {\n self.labelsAlignRight = !self.labelsAlignRight;\n },\n toggleDrawTree: function () {\n self.drawTree = !self.drawTree;\n },\n toggleCollapsed: function (node) {\n if (self.collapsed.includes(node)) {\n self.collapsed.remove(node);\n }\n else {\n self.collapsed.push(node);\n }\n },\n setShowOnly: function (node) {\n self.showOnly = node;\n },\n toggleBranchLen: function () {\n self.showBranchLen = !self.showBranchLen;\n },\n toggleBgColor: function () {\n self.bgColor = !self.bgColor;\n },\n toggleNodeBubbles: function () {\n self.drawNodeBubbles = !self.drawNodeBubbles;\n },\n setData: function (data) {\n self.data = cast(data);\n },\n setMSAFilehandle: function (msaFilehandle) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n self.msaFilehandle = msaFilehandle;\n return [2 /*return*/];\n });\n });\n },\n setTreeFilehandle: function (treeFilehandle) {\n return __awaiter(this, void 0, void 0, function () {\n var r;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(treeFilehandle && 'blobId' in treeFilehandle)) return [3 /*break*/, 2];\n return [4 /*yield*/, openLocation(treeFilehandle).readFile('utf8')];\n case 1:\n r = (_a.sent());\n this.setTree(r);\n return [3 /*break*/, 3];\n case 2:\n self.treeFilehandle = treeFilehandle;\n _a.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n });\n },\n setMSA: function (result) {\n self.data.setMSA(result);\n },\n setTree: function (result) {\n self.data.setTree(result);\n },\n afterCreate: function () {\n var _this = this;\n addDisposer(self, autorun(function () { return __awaiter(_this, void 0, void 0, function () {\n var treeFilehandle, _a, e_2;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n treeFilehandle = self.treeFilehandle;\n if (!treeFilehandle) return [3 /*break*/, 4];\n _b.label = 1;\n case 1:\n _b.trys.push([1, 3, , 4]);\n _a = this.setTree;\n return [4 /*yield*/, openLocation(treeFilehandle).readFile('utf8')];\n case 2:\n _a.apply(this, [(_b.sent())]);\n return [3 /*break*/, 4];\n case 3:\n e_2 = _b.sent();\n this.setError(e_2);\n return [3 /*break*/, 4];\n case 4: return [2 /*return*/];\n }\n });\n }); }));\n addDisposer(self, autorun(function () { return __awaiter(_this, void 0, void 0, function () {\n var msaFilehandle, _a, e_3;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n msaFilehandle = self.msaFilehandle;\n if (!msaFilehandle) return [3 /*break*/, 4];\n _b.label = 1;\n case 1:\n _b.trys.push([1, 3, , 4]);\n _a = this.setMSA;\n return [4 /*yield*/, openLocation(msaFilehandle).readFile('utf8')];\n case 2:\n _a.apply(this, [(_b.sent())]);\n return [3 /*break*/, 4];\n case 3:\n e_3 = _b.sent();\n this.setError(e_3);\n return [3 /*break*/, 4];\n case 4: return [2 /*return*/];\n }\n });\n }); }));\n },\n}); })\n .views(function (self) {\n var oldBlocksX = [];\n var oldBlocksY = [];\n var oldValX = 0;\n var oldValY = 0;\n return {\n get initialized() {\n return ((self.data.msa ||\n self.data.tree ||\n self.msaFilehandle ||\n self.treeFilehandle) &&\n !self.error);\n },\n get blocksX() {\n var scrollX = self.scrollX, size = self.blockSize, colWidth = self.colWidth;\n var ret = -(size * Math.floor(scrollX / size)) - size;\n var b = [];\n for (var i = ret; i < ret + size * 3; i += size) {\n if (i + size > 0) {\n b.push(i);\n }\n }\n if (JSON.stringify(b) !== JSON.stringify(oldBlocksX) ||\n colWidth !== oldValX) {\n oldBlocksX = b;\n oldValX = colWidth;\n }\n return oldBlocksX;\n },\n get blocksY() {\n var scrollY = self.scrollY, size = self.blockSize, rowHeight = self.rowHeight;\n var ret = -(size * Math.floor(scrollY / size)) - 2 * size;\n var b = [];\n for (var i = ret; i < ret + size * 3; i += size) {\n if (i + size > 0) {\n b.push(i);\n }\n }\n if (JSON.stringify(b) !== JSON.stringify(oldBlocksY) ||\n rowHeight !== oldValY) {\n oldBlocksY = b;\n oldValY = rowHeight;\n }\n return oldBlocksY;\n },\n };\n})\n .views(function (self) { return ({\n get blocks2d() {\n return self.blocksY.map(function (by) { return self.blocksX.map(function (bx) { return [bx, by]; }); }).flat();\n },\n get done() {\n return self.initialized && (self.data.msa || self.data.tree);\n },\n get colorScheme() {\n return colorSchemes[self.colorSchemeName];\n },\n get alignmentDetails() {\n var _a;\n return ((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getDetails()) || {};\n },\n getRowDetails: function (name) {\n var _a, _b;\n //@ts-ignore\n var details = (_b = (_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getRowDetails) === null || _b === void 0 ? void 0 : _b.call(_a, name);\n var matches = name.match(/\\S+\\/(\\d+)-(\\d+)/);\n return __assign(__assign({}, details), (matches && { range: { start: +matches[1], end: +matches[2] } }));\n },\n get currentAlignmentName() {\n return this.alignmentNames[self.currentAlignment];\n },\n get alignmentNames() {\n var _a;\n return ((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.alignmentNames) || [];\n },\n get noTree() {\n return !!this.tree.noTree;\n },\n get menuItems() {\n return [];\n },\n get MSA() {\n var text = self.data.msa;\n if (text) {\n if (Stockholm.sniff(text)) {\n return new StockholmMSA(text, self.currentAlignment);\n }\n else if (text.startsWith('>')) {\n return new FastaMSA(text);\n }\n else {\n return new ClustalMSA(text);\n }\n }\n return null;\n },\n get numColumns() {\n var _a;\n return ((((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getWidth()) || 0) - this.blanks.length) * self.colWidth;\n },\n get tree() {\n var _a;\n return self.data.tree\n ? generateNodeIds(parseNewick(self.data.tree))\n : ((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getTree()) || { noTree: true };\n },\n get rowNames() {\n return this.hierarchy.leaves().map(function (node) { return node.data.name; });\n },\n get mouseOverRowName() {\n return self.mouseRow !== undefined\n ? this.rowNames[self.mouseRow]\n : undefined;\n },\n getMouseOverResidue: function (rowName) {\n return this.columns[rowName];\n },\n get root() {\n var hier = hierarchy(this.tree, function (d) { return d.branchset; })\n .sum(function (d) { return (d.branchset ? 0 : 1); })\n .sort(function (a, b) {\n return ascending(a.data.length || 1, b.data.length || 1);\n });\n if (self.showOnly) {\n var res = hier.find(function (node) { return node.data.id === self.showOnly; });\n if (res) {\n hier = res;\n }\n }\n if (self.collapsed.length) {\n self.collapsed\n .map(function (collapsedId) {\n return hier.find(function (node) { return node.data.id === collapsedId; });\n })\n .filter(function (f) { return !!f; })\n .map(function (node) { return collapse(node); });\n }\n return hier;\n },\n get structures() {\n var _a;\n return ((_a = this.MSA) === null || _a === void 0 ? void 0 : _a.getStructures()) || {};\n },\n get inverseStructures() {\n var map = Object.entries(this.structures)\n .map(function (_a) {\n var key = _a[0], val = _a[1];\n return val.map(function (pdbEntry) { return [pdbEntry.pdb, { id: key }]; });\n })\n .flat();\n return Object.fromEntries(map);\n },\n get msaAreaWidth() {\n //@ts-ignore\n return self.width - self.treeAreaWidth;\n },\n get blanks() {\n var _this = this;\n var _a;\n var blanks = [];\n var strs = this.hierarchy\n .leaves()\n .map(function (_a) {\n var _b;\n var data = _a.data;\n return (_b = _this.MSA) === null || _b === void 0 ? void 0 : _b.getRow(data.name);\n })\n .filter(function (item) { return !!item; });\n for (var i = 0; i < ((_a = strs[0]) === null || _a === void 0 ? void 0 : _a.length); i++) {\n var counter = 0;\n for (var j = 0; j < strs.length; j++) {\n if (strs[j][i] === '-') {\n counter++;\n }\n }\n if (counter === strs.length) {\n blanks.push(i);\n }\n }\n return blanks;\n },\n get rows() {\n var _this = this;\n return this.hierarchy\n .leaves()\n .map(function (_a) {\n var _b;\n var data = _a.data;\n return [data.name, (_b = _this.MSA) === null || _b === void 0 ? void 0 : _b.getRow(data.name)];\n })\n .filter(function (f) { return !!f[1]; });\n },\n get columns() {\n var rows = this.rows;\n var cols = this.columns2d;\n return Object.fromEntries(rows.map(function (row, index) { return [row[0], cols[index]]; }));\n },\n get columns2d() {\n var strs = this.rows.map(function (r) { return r[1]; });\n var ret = [];\n for (var i = 0; i < strs.length; i++) {\n ret.push(skipBlanks(this.blanks, strs[i]));\n }\n return ret;\n },\n get colStats() {\n var r = [];\n var m = this.columns2d;\n for (var i = 0; i < m.length; i++) {\n for (var j = 0; j < m[i].length; j++) {\n var l = r[j] || {};\n if (!l[m[i][j]]) {\n l[m[i][j]] = 0;\n }\n l[m[i][j]]++;\n r[j] = l;\n }\n }\n return r;\n },\n // generates a new tree that is clustered with x,y positions\n get hierarchy() {\n var root = this.root;\n var clust = cluster()\n .size([this.totalHeight, self.treeWidth])\n .separation(function () { return 1; });\n clust(root);\n setBrLength(root, \n //@ts-ignore\n (root.data.length = 0), self.treeWidth / maxLength(root));\n return root;\n },\n get totalHeight() {\n return this.root.leaves().length * self.rowHeight;\n },\n}); })\n .actions(function (self) { return ({\n addUniprotTrack: function (node) {\n if (self.boxTracks.find(function (t) { return t.name === node.name; })) {\n if (self.turnedOffTracks.has(node.name)) {\n this.toggleTrack(node.name);\n }\n }\n else {\n self.boxTracks.push(__assign(__assign({}, node), { id: node.name, associatedRowName: node.name }));\n }\n },\n doScrollY: function (deltaY) {\n self.scrollY = clamp(-self.totalHeight + 10, self.scrollY + deltaY, 0);\n },\n doScrollX: function (deltaX) {\n self.scrollX = clamp(-self.numColumns + (self.msaAreaWidth - 100), self.scrollX + deltaX, 0);\n },\n setMouseoveredColumn: function (n, chain, file) {\n var _a;\n var j = 0;\n var i = 0;\n var id = (self.inverseStructures[file.slice(0, -4)] || {}).id;\n var row = (_a = self.MSA) === null || _a === void 0 ? void 0 : _a.getRow(id);\n if (row) {\n for (i = 0; i < row.length && j < n; i++) {\n if (row[i] !== '-') {\n j++;\n }\n }\n self.mouseCol = j + 1;\n }\n else {\n self.mouseCol = undefined;\n }\n },\n toggleTrack: function (id) {\n if (self.turnedOffTracks.has(id)) {\n self.turnedOffTracks.delete(id);\n }\n else {\n self.turnedOffTracks.set(id, true);\n }\n },\n}); })\n .views(function (self) { return ({\n get secondaryStructureConsensus() {\n var _a;\n return (_a = self.MSA) === null || _a === void 0 ? void 0 : _a.secondaryStructureConsensus;\n },\n get seqConsensus() {\n var _a;\n return (_a = self.MSA) === null || _a === void 0 ? void 0 : _a.seqConsensus;\n },\n get conservation() {\n var m = self.columns2d;\n if (m.length) {\n for (var i = 0; i < m[0].length; i++) {\n var col = [];\n for (var j = 0; j < m.length; j++) {\n col.push(m[j][i]);\n }\n }\n }\n return ['a'];\n },\n get tracks() {\n var blanks = self.blanks;\n var adapterTracks = self.MSA\n ? self.MSA.tracks.map(function (track) {\n var data = track.data;\n return {\n model: __assign(__assign({}, track), { data: data ? skipBlanks(blanks, data) : undefined, height: self.rowHeight }),\n ReactComponent: TextTrack,\n };\n })\n : [];\n var boxTracks = self.boxTracks\n // filter out tracks that are associated with hidden rows\n .filter(function (track) { return !!self.rows.find(function (row) { return row[0] === track.name; }); })\n .map(function (track) { return ({\n model: track,\n ReactComponent: BoxTrack,\n }); });\n var annotationTracks = self.annotatedRegions.length > 0\n ? [\n {\n model: {\n features: self.annotatedRegions,\n height: 100,\n id: 'annotations',\n name: 'User-created annotations',\n data: self.annotatedRegions\n .map(function (region) {\n var attrs = region.attributes\n ? Object.entries(region.attributes)\n .map(function (_a) {\n var k = _a[0], v = _a[1];\n return \"\".concat(k, \"=\").concat(v.join(','));\n })\n .join(';')\n : '.';\n return [\n 'MSA_refcoord',\n '.',\n '.',\n region.start,\n region.end,\n '.',\n '.',\n '.',\n attrs,\n ].join('\\t');\n })\n .join('\\n'),\n },\n ReactComponent: BoxTrack,\n },\n ]\n : [];\n return __spreadArray(__spreadArray(__spreadArray([], adapterTracks, true), boxTracks, true), annotationTracks, true);\n },\n get turnedOnTracks() {\n return this.tracks.filter(function (f) { return !self.turnedOffTracks.has(f.model.id); });\n },\n // returns coordinate in the current relative coordinate scheme\n pxToBp: function (coord) {\n return Math.floor((coord - self.scrollX) / self.colWidth);\n },\n rowSpecificBpToPx: function (rowName, position) {\n var _a;\n var rowNames = self.rowNames, rows = self.rows, blanks = self.blanks;\n var index = rowNames.indexOf(rowName);\n var row = rows[index][1];\n var details = self.getRowDetails(rowName);\n var offset = ((_a = details.range) === null || _a === void 0 ? void 0 : _a.start) || 0;\n var current = position - offset;\n if (current < 0) {\n return 0;\n }\n var j = 0;\n var i = 0;\n for (; i < row.length; i++) {\n if (row[i] !== '-' && j++ === current) {\n break;\n }\n }\n var count = 0;\n for (var k = 0; k < row.length; k++) {\n if (blanks.indexOf(k) !== -1 && k < i + 1) {\n count++;\n }\n }\n return i - count;\n },\n globalBpToPx: function (position) {\n var _a;\n var count = 0;\n for (var k = 0; k < ((_a = self.rows[0]) === null || _a === void 0 ? void 0 : _a[1].length); k++) {\n if (self.blanks.indexOf(k) !== -1 && k < position + 1) {\n count++;\n }\n }\n return position - count;\n },\n relativePxToBp: function (rowName, position) {\n var rowNames = self.rowNames, rows = self.rows;\n var index = rowNames.indexOf(rowName);\n var row = rows[index][1];\n var k = 0;\n for (var i = 0; i < position; i++) {\n if (row[i] !== '-') {\n k++;\n }\n else if (k >= position) {\n break;\n }\n }\n return k;\n },\n getPos: function (pos) {\n var j = 0;\n for (var i = 0, k = 0; i < pos; i++, j++) {\n while (j === self.blanks[k]) {\n k++;\n j++;\n }\n }\n return j;\n },\n}); })\n .actions(function (self) { return ({\n addAnnotation: function (start, end, attributes) {\n self.annotatedRegions.push({\n start: self.getPos(start),\n end: self.getPos(end),\n attributes: attributes,\n });\n },\n setOffsets: function (left, right) {\n self.annotPos = { left: left, right: right };\n },\n clearAnnotPos: function () {\n self.annotPos = undefined;\n },\n}); });\nvar model = types.snapshotProcessor(types.compose(BaseViewModel, MSAModel), {\n postProcessor: function (result) {\n var _a = result.data, tree = _a.tree, msa = _a.msa, rest = __rest(result\n // remove the MSA/tree data from the tree if the filehandle available in\n // which case it can be reloaded on refresh\n , [\"data\"]);\n // remove the MSA/tree data from the tree if the filehandle available in\n // which case it can be reloaded on refresh\n return __assign({ data: __assign(__assign({}, (!result.treeFilehandle && { tree: tree })), (!result.msaFilehandle && { msa: msa })) }, rest);\n },\n});\nexport default model;\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM8 20H4v-4h4v4zm0-6H4v-4h4v4zm0-6H4V4h4v4zm6 12h-4v-4h4v4zm0-6h-4v-4h4v4zm0-6h-4V4h4v4zm6 12h-4v-4h4v4zm0-6h-4v-4h4v4zm0-6h-4V4h4v4z\"\n}), 'GridOn');\n\nexports.default = _default;","import Plugin from '@jbrowse/core/Plugin'\nimport PluginManager from '@jbrowse/core/PluginManager'\nimport { version } from '../package.json'\nimport { AbstractSessionModel, isAbstractMenuManager } from '@jbrowse/core/util'\nimport * as MSA from 'react-msaview'\nimport ViewType from '@jbrowse/core/pluggableElementTypes/ViewType'\nimport GridOn from '@material-ui/icons/GridOn'\n\nexport default class MsaViewPlugin extends Plugin {\n name = 'MsaViewPlugin'\n version = version\n\n install(pluginManager: PluginManager) {\n console.log({ MSA })\n pluginManager.addViewType(\n () =>\n new ViewType({\n name: 'MsaView',\n //@ts-ignore\n stateModel: MSA.MSAModel,\n ReactComponent: MSA.MSAView,\n }),\n )\n }\n\n configure(pluginManager: PluginManager) {\n if (isAbstractMenuManager(pluginManager.rootModel)) {\n pluginManager.rootModel.appendToSubMenu(['Add'], {\n label: 'Multiple sequence alignment view',\n icon: GridOn,\n onClick: (session: AbstractSessionModel) => {\n session.addView('MsaView', {})\n },\n })\n }\n }\n}\n"],"names":["ListItem","_a","onClick","model","React","createElement","Link","event","setError","undefined","preventDefault","href","Typography","children","observer","_b","useState","msaFile","setMsaFile","_c","treeFile","setTreeFile","error","Container","style","width","padding","color","concat","Grid","container","spacing","justifyContent","alignItems","item","FileSelector","location","setLocation","Button","setMSAFilehandle","setTreeFilehandle","variant","disabled","uri","locationType","setData","msa","tree","transaction","module","obj","__esModule","default","exports","_typeof","Symbol","iterator","constructor","prototype","require$$0","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","hasOwnProperty","call","desc","set","value","enumerable","_utils","createSvgIcon","_ie","_firefox","_opera","_webkit","_chrome","_ie_real_version","_osx","_windows","_linux","_android","_win64","_iphone","_ipad","_native","_mobile","_interopRequireWildcard","_default","_interopRequireDefault","require$$1","d","useStyles","makeStyles","theme","rubberband","height","background","alpha","palette","tertiary","main","primary","position","zIndex","textAlign","overflow","rubberbandControl","cursor","minHeight","rubberbandText","contrastText","popover","mouseEvents","paper","paddingLeft","paddingRight","guide","pointerEvents","VerticalGuide","coordX","treeAreaWidth","classes","Fragment","Tooltip","open","placement","title","pxToBp","arrow","left","className","ControlComponent","startX","setStartX","_d","currentX","setCurrentX","_e","anchorPosition","setAnchorPosition","_f","guideX","setGuideX","controlsRef","useRef","rubberbandRef","mouseDragging","mouseDown","stopPropagation","relativeX","clientX","target","getBoundingClientRect","mouseMove","mouseOut","clearAnnotPos","handleClose","useEffect","globalMouseMove","current","globalMouseUp","clientY","offsetX","window","addEventListener","removeEventListener","Math","abs","colWidth","data-testid","role","ref","onMouseDown","onMouseOut","onMouseMove","right","leftBpOffset","rightBpOffset","numOfBpSelected","ceil","menuItems","label","icon","AssignmentIcon","setOffsets","Popover","anchorEl","anchorOrigin","vertical","horizontal","transformOrigin","keepMounted","disableRestoreFocus","toLocaleString","Menu","anchorReference","top","onMenuItemClick","_","callback","Boolean","onClose","_populated","_populate","uas","navigator","userAgent","agent","exec","os","parseFloat","NaN","document","documentMode","trident","ver","replace","useHasFeature","UserAgent_DEPRECATED","ie","ieCompatibilityMode","ie64","firefox","opera","webkit","safari","chrome","windows","osx","linux","iphone","mobile","nativeApp","android","ipad","canUseDOM","normalizeWheel","sX","sY","pX","pY","detail","wheelDelta","wheelDeltaY","wheelDeltaX","axis","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","ExecutionEnvironment","implementation","hasFeature","getEventType","eventNameSuffix","capture","isSupported","element","setAttribute","quickselect","arr","k","compare","quickselectStep","n","m","z","log","s","exp","sd","sqrt","max","floor","min","t","i","j","swap","length","defaultCompare","tmp","a","b","RBush","[object Object]","maxEntries","this","_maxEntries","_minEntries","clear","_all","data","bbox","node","result","intersects","toBBox","nodesToSearch","child","childBBox","leaf","push","contains","pop","insert","_build","slice","_splitRoot","tmpNode","_insert","createNode","equalsFn","path","indexes","parent","goingUp","index","findItem","splice","_condense","minX","minY","items","N","M","calcBBox","pow","N2","N1","multiSelect","compareMinX","right2","compareMinY","right3","level","targetNode","minArea","Infinity","minEnlargement","area","bboxArea","enlargement","maxX","maxY","isNode","insertPath","_chooseSubtree","extend","_split","_adjustParentBBoxes","_chooseSplitAxis","splitIndex","_chooseSplitIndex","newNode","minOverlap","bbox1","distBBox","bbox2","overlap","intersectionArea","compareNodeMinX","compareNodeMinY","_allDistMargin","sort","leftBBox","rightBBox","margin","bboxMargin","siblings","indexOf","p","destNode","stack","mid","info","Dialog","DialogTitle","DialogContent","Attributes","attributes","__assign","assign","arguments","apply","TreeMenu","structures","nodeDetails","getRowDetails","name","y","x","transitionDuration","MenuItem","dense","setDialogComponent","MoreInfoDlg","map","entry","selectedStructures","find","id","JSON","stringify","removeStructureFromSelection","structure","pdb","addStructureToSelection","accession","addUniprotTrack","TreeBranchMenu","toggleCollapsed","collapsed","includes","setShowOnly","showOnly","TreeBlock","offsetY","clickMap","mouseoverRef","branchMenu","setBranchMenu","toggleNodeMenu","setToggleNodeMenu","hoverElt","setHoverElt","hierarchy","rowHeight","scrollY","treeWidth","showBranchLen","labelsAlignRight","noTree","blockSize","drawNodeBubbles","drawTree","highResScaleFactor","hoverBranchClickMap","nativeEvent","search","branch","hoverNameClickMap","ctx","getContext","resetTransform","scale","clearRect","translate","font","links","forEach","source","sy","sx","ty","tx","y1","y2","beginPath","moveTo","lineTo","stroke","descendants","strokeStyle","fillStyle","arc","PI","fill","radius","setLineDash","leaves","yp","xp","len","measureText","offset","width_1","fillText","canvas","fillRect","ret","data2","TreeCanvas","scheduled","prevY","blocksY","setMouseDragging","curr","onWheel","origEvent","requestAnimationFrame","doScrollY","cleanup","distanceY","draggable","dataset","resizer","button","onMouseUp","onMouseLeave","block","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","Array","swizzle","args","results","arg","isArray","Function","wrap","fn","reverseNames","colorNames","cs","to","clamp","num","hexDouble","str","round","toString","toUpperCase","string","val","substring","toLowerCase","hsl","hwb","rgb","match","hexAlpha","i2","parseInt","isNaN","hex","rgba","percent","r","g","hsla","hwba","keyword","reverseKeywords","cssKeywords","convert","channels","labels","hsv","cmyk","xyz","lab","lch","ansi16","ansi256","hcg","apple","Error","h","l","delta","rdif","gdif","bdif","v","diff","diffc","c","reversed","currentClosestKeyword","currentClosestDistance","distance","t1","t2","t3","smin","lmin","hi","f","q","sl","vmin","wh","bl","ratio","x2","z2","atan2","hr","cos","sin","ansi","mult","rem","colorString","split","char","join","integer","hue","chroma","mg","pure","w","link","from","wrapConversion","toModel","graph","conversions","cur","unshift","conversion","keys","fromModel","routes","models","buildGraph","queue","adjacents","adjacent","deriveBFS","route","wrappedFn","wrapRounded","raw","wrapRaw","_slice","skippedModels","hashedModelKeys","limiters","Color","valpha","newArr","zeroArray","hashedKeys","limit","freeze","getset","channel","modifier","maxfn","assertArray","toJSON","places","self","percentString","array","object","unitArray","unitObject","Number","toFixed","roundTo","roundToPlace","saturationl","lightness","saturationv","wblack","rgbNumber","luminosity","lum","chan","contrast","color2","lum1","lum2","contrastRatio","isDark","isLight","negate","lighten","darken","saturate","desaturate","whiten","blacken","grayscale","fade","opaquer","rotate","degrees","mix","mixinColor","weight","color1","w1","w2","newAlpha","transform","cb","fromEntries","entries","generateNodeIds","depth","branchset","colorContrast","colorScheme","getContrastText","clustal","G","P","S","T","H","K","R","F","W","Y","I","L","V","lesk","A","C","Q","D","E","maeditor","percent_identity_dynamic","flower","rainbow_dna","U","clustalx_protein","clustalx_protein_dynamic","clustalx_dna","jalview_buried","B","X","Z","jalview_hydrophobicity","jalview_prophelix","jalview_propstrand","jalview_propturn","jalview_taylor","jalview_zappo","cinema","-",".","getClustalXColor","stats","row","col","total","values","reduce","columns","_g","_h","_j","_k","_l","_m","_o","_p","_q","_r","_s","_t","_u","_v","WLVIMAFCHP","KR","QE","getPercentIdentityColor","ent","letter","proportion","thresh","MSABlock","MSA","bgColor","scrollX","colorSchemeName","colStats","useTheme","contrastScheme","useMemo","yStart","yEnd","xStart","xEnd","visibleLeaves","mouseY","setMousePos","MSACanvas","msaFilehandle","msaAreaWidth","blocks2d","prevX","doScrollX","distanceX","bx","by","CircularProgress","majorTickLabel","fontSize","majorTick","minorTick","RulerBlock","start","end","bpPerPx","major","minor","ticks","emitMajor","emitMinor","gridPitch","minMajorPitchPx","minMinorPitchPx","minMajorPitchBp","majorMagnitude","toExponential","majorPitch","majorPitchPx","minorPitch","chooseGridPitch","minBase","maxBase","iterPitch","base","type","makeTicks","tick","x1","strokeWidth","data-bp","filter","textAnchor","mathPower","String","substr","Ruler","resizeHandleWidth","blocksX","TreeRuler","colWidthInit","treeWidthInit","setRowHeight","setColWidth","setTreeWidth","rowHeightError","colWidthError","treeWidthError","FormControlLabel","control","Checkbox","checked","onChange","toggleBranchLen","toggleBgColor","toggleNodeBubbles","toggleDrawTree","toggleLabelsAlignRight","TextField","select","setColorSchemeName","colorSchemes","option","DialogActions","LicenseDialog","AboutDialog","setDlgOpen","alignmentDetails","tracks","FormGroup","track","turnedOffTracks","toggleTrack","InfoArea","mouseCol","display","mouseOverRowName","marginLeft","Header","settingsDialogVisible","setSettingsDialogVisible","aboutDialogVisible","setAboutDialogVisible","detailsDialogVisible","setDetailsDialogVisible","tracklistDialogVisible","setTracklistDialogVisible","currentAlignment","alignmentNames","IconButton","setScrollY","setScrollX","setCurrentAlignment","FolderOpenIcon","SettingsIcon","ListIcon","SettingsDialog","DetailsDialog","TracklistDialog","Select","native","flex","HelpIcon","clipboardToIE11Formatting","text/plain","text/html","textArea","wordBreak","TrackInfoDialog","setLabel","fullWidth","maxWidth","text","options","debug","message","reselectPrevious","range","selection","mark","getSelection","rangeCount","active","activeElement","ranges","getRangeAt","tagName","blur","removeAllRanges","addRange","focus","deselectCurrent","createRange","textContent","all","clip","whiteSpace","webkitUserSelect","MozUserSelect","msUserSelect","userSelect","e","format","clipboardData","console","warn","clearData","onCopy","body","appendChild","selectNodeContents","execCommand","err","copyKey","test","prompt","removeRange","removeChild","copy","setTimeout","TrackLabel","setAnchorEl","trackInfoDlgOpen","setTrackInfoDlgOpen","trackLabelHeight","flexShrink","ArrowDropDownIcon","Track","ReactComponent","__spreadArray","pack","ar","Row","setValue","setName","onDelete","DeleteIcon","blanks","rows","setRows","getPos","newValue","newRows","newName","addAnnotation","VerticalResizeHandle","currX","distance_1","setTreeAreaWidth","HorizontalResizeHandle","currY","distance_2","setHeight","MouseoverCanvas","turnedOnTracks","initialized","done","Rubberband","ImportForm","DialogComponent","DialogProps","annotPos","AnnotationDialog","defaultSeparation","meanXReduce","maxYReduce","count","sum","Map","mapChildren","objectChildren","childs","root","Node","nodes","eachBefore","computeHeight","copyData","eachAfter","each","that","next","ancestor","aNodes","ancestors","bNodes","leastCommonAncestor","reverse","excluded","sourceKeys","objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","alphabet","previousSeed","shuffled","seed","_seed_","ORIGINAL","reset","setCharacters","_alphabet_","unique","ind","lastIndexOf","getShuffled","characterIndex","sourceArray","targetArray","randomFromSeed","shuffle","counter","previousSeconds","characters","lookup","crypto","msCrypto","getRandomValues","size","Uint8Array","bytes","random","mask","LN2","step","number","loopCounter","RegExp","clusterWorkerId","generate","seconds","Date","now","build","seedValue","workerId","newCharacters","isValid","_objectWithoutProperties2","_shortid","_propTypes","require$$2","_excluded","ElementId","_mobxStateTree","types","optional","identifier","PropTypes","Region","shape","refName","isRequired","ConfigSchema","_mobxReact","objectOrObservableObject","Feature","func","NoAssemblyRegion","boolean","actions","setRefName","newRefName","compose","assemblyName","LocalPathLocation","localPath","BlobLocation","blobId","UriLocationRaw","baseUri","maybe","UriLocation","snapshotProcessor","postProcessor","snap","rest","FileLocation","union","BaseViewModel","_mst","displayName","volatile","views","setDisplayName","setWidth","newWidth","Stockholm","gf","gc","gs","gr","seqname","seqdata","prop","formatStartRegex","formatEndRegex","gfRegex","gcRegex","gsRegex","grRegex","lineRegex","nonwhiteRegex","atLine","warning","parseAll","opts","maybeError","strict","quiet","db","stock","line","makeStock","leftPad","rightPad","cols","tag","allNames","isName","names","addName","addNames","list","allTags","isTag","addTags","addRow","deleteRow","indentNames","nameWidth","tagWidth","seqIndent","pad","padTagName","offsets","space","toFasta","toRowList","sniff","validate","parse","fromSeqIndex","fromRowList","parseVersion","res","getFirstNonEmptyLine","trim","getSeqBounds","fields","temp","parseBlock","consensusLine","ids","seqs","consensus","remainder","repeat","knownHeaders","startsWith","version","parseIter","util_1","header","parseHeader","parseBlocks","alns","seq","contents","ClustalMSA","getMSA","getRow","aln","getWidth","getDetails","getNames","getStructures","configurable","getTree","seqConsensus","customColorScheme","*",":"," ","tokens","token","subtree","StockholmMSA","DE","General","Accessions","AC","Dbxref","DR","rowName","dbxref","getSeqCoords","pdbRegex","chain","startPos","endPos","__rest","NH","parseNewick","seq_cons","SS_cons","secondaryStructureConsensus",">","<","FastaMSA","re","AnnotationBlock","AnnotationTrack","Layout","maxHeight","maxHeightReached","rbush","rectangles","pTotalHeight","addRect","existingRecord","currHeight","collides","record","features","associatedRowName","feats","isStateTreeNode","getSnapshot","layout","feature","rowSpecificBpToPx","globalBpToPx","labelRef","note","Note","name_1","Name","__awaiter","thisArg","_arguments","generator","Promise","resolve","reject","fulfilled","rejected","then","__generator","sent","trys","ops","verb","throw","return","op","TypeError","skipBlanks","maxLength","valueof","collapse","_children","StructureModel","UniprotTrack","afterCreate","_this","addDisposer","autorun","url","response","e_1","fetch","ok","status","statusText","loading","seq_id","score","strand","phase","decodeURIComponent","MSAModel","literal","mouseRow","treeFilehandle","boxTracks","annotatedRegions","frozen","setTree","setMSA","dlg","props","elt","remove","toggleStructureSelection","clearSelectedStructures","cast","openLocation","readFile","e_2","e_3","oldBlocksX","oldBlocksY","oldValX","oldValY","flat","details","matches","currentAlignmentName","numColumns","rowNames","getMouseOverResidue","hier","ascending","collapsedId","inverseStructures","pdbEntry","strs","columns2d","separation","dx","dy","nodeSize","cluster","previousNode","meanX","leafLeft","leafRight","x0","totalHeight","clust","setBrLength","y0","setMouseoveredColumn","file","delete","conservation","adapterTracks","TextTrack","BoxTrack","annotationTracks","region","attrs","coord","relativePxToBp","pos","pluginManager","addViewType","ViewType","stateModel","isAbstractMenuManager","rootModel","appendToSubMenu","GridOn","session","addView","Plugin"],"mappings":"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"}
|