jbrowse-plugin-msaview 5.12.0 → 5.13.0
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/dist/chunks/{AboutDialog-QWBMKHTT.js → AboutDialog-HJKHE6X5.js} +2 -2
- package/dist/chunks/{AboutDialog-QWBMKHTT.js.map → AboutDialog-HJKHE6X5.js.map} +1 -1
- package/dist/chunks/{AnnotationFileDialog-M3VBMOKS.js → AnnotationFileDialog-MGUAGUEN.js} +2 -2
- package/dist/chunks/{AnnotationFileDialog-M3VBMOKS.js.map → AnnotationFileDialog-MGUAGUEN.js.map} +1 -1
- package/dist/chunks/{ExportSVGDialog-GBJXLLOT.js → ExportSVGDialog-JNEIAPDD.js} +2 -2
- package/dist/chunks/{ExportSVGDialog-GBJXLLOT.js.map → ExportSVGDialog-JNEIAPDD.js.map} +1 -1
- package/dist/chunks/{FeatureDialog-VYCJWC4A.js → FeatureDialog-36U3KHHS.js} +1 -1
- package/dist/chunks/{FeatureDialog-VYCJWC4A.js.map → FeatureDialog-36U3KHHS.js.map} +1 -1
- package/dist/chunks/{GapThresholdDialog-AXIDV62R.js → GapThresholdDialog-MMQTM2ZY.js} +1 -1
- package/dist/chunks/{GapThresholdDialog-AXIDV62R.js.map → GapThresholdDialog-MMQTM2ZY.js.map} +1 -1
- package/dist/chunks/{GoToDialog-7RZHEZXR.js → GoToDialog-HYG2ADFF.js} +2 -2
- package/dist/chunks/{GoToDialog-7RZHEZXR.js.map → GoToDialog-HYG2ADFF.js.map} +1 -1
- package/dist/chunks/{HelpDialog-ELECZLPQ.js → HelpDialog-5WXA5QYK.js} +2 -2
- package/dist/chunks/{HelpDialog-ELECZLPQ.js.map → HelpDialog-5WXA5QYK.js.map} +1 -1
- package/dist/chunks/{MetadataDialog-Z6Z5PJJI.js → MetadataDialog-QQNNQELM.js} +2 -2
- package/dist/chunks/{MetadataDialog-Z6Z5PJJI.js.map → MetadataDialog-QQNNQELM.js.map} +1 -1
- package/dist/chunks/{MsaViewPanel-TWWHZCKE.js → MsaViewPanel-4PHVMXIL.js} +2 -2
- package/dist/chunks/{TrackInfoDialog-KBMR6BIS.js → TrackInfoDialog-WJAJNV5S.js} +2 -2
- package/dist/chunks/{TrackInfoDialog-KBMR6BIS.js.map → TrackInfoDialog-WJAJNV5S.js.map} +1 -1
- package/dist/chunks/{TreeNodeInfoDialog-PY22OL3S.js → TreeNodeInfoDialog-JATVC2AB.js} +2 -2
- package/dist/chunks/{TreeNodeInfoDialog-PY22OL3S.js.map → TreeNodeInfoDialog-JATVC2AB.js.map} +1 -1
- package/dist/chunks/{chunk-GS7LNBOS.js → chunk-4IRL4OLU.js} +1 -1
- package/dist/chunks/{chunk-GS7LNBOS.js.map → chunk-4IRL4OLU.js.map} +1 -1
- package/dist/chunks/{chunk-J47OLCJU.js → chunk-5YOLE75H.js} +2 -2
- package/dist/chunks/{chunk-J47OLCJU.js.map → chunk-5YOLE75H.js.map} +1 -1
- package/dist/chunks/{chunk-4HAJC5MK.js → chunk-GFANDTQR.js} +2 -2
- package/dist/chunks/{chunk-4HAJC5MK.js.map → chunk-GFANDTQR.js.map} +1 -1
- package/dist/chunks/{chunk-UM4CICOY.js → chunk-IBVOKJV3.js} +1 -1
- package/dist/chunks/{chunk-UM4CICOY.js.map → chunk-IBVOKJV3.js.map} +1 -1
- package/dist/chunks/chunk-JYQQZRPF.js +2 -0
- package/dist/chunks/{chunk-LNWEADY6.js.map → chunk-JYQQZRPF.js.map} +2 -2
- package/dist/chunks/{chunk-MUSD22PZ.js → chunk-MDZDMDUF.js} +1 -1
- package/dist/chunks/{chunk-MUSD22PZ.js.map → chunk-MDZDMDUF.js.map} +1 -1
- package/dist/chunks/{chunk-LTSMXRUM.js → chunk-NRAUA3EX.js} +1 -1
- package/dist/chunks/{chunk-LTSMXRUM.js.map → chunk-NRAUA3EX.js.map} +1 -1
- package/dist/chunks/{chunk-4OQ4GYVP.js → chunk-RTIGCYCA.js} +6 -6
- package/dist/chunks/{chunk-4OQ4GYVP.js.map → chunk-RTIGCYCA.js.map} +1 -1
- package/dist/chunks/chunk-W5VCM3IV.js +2 -0
- package/dist/chunks/chunk-W5VCM3IV.js.map +7 -0
- package/dist/chunks/{chunk-YW5C4OPH.js → chunk-Y7M36762.js} +1 -1
- package/dist/chunks/{chunk-YW5C4OPH.js.map → chunk-Y7M36762.js.map} +1 -1
- package/dist/chunks/{chunk-QIGWGLIM.js → chunk-YTIKINP5.js} +1 -1
- package/dist/chunks/{chunk-QIGWGLIM.js.map → chunk-YTIKINP5.js.map} +1 -1
- package/dist/chunks/{chunk-JXNLFOHN.js → chunk-YXL36I7H.js} +1 -1
- package/dist/chunks/{chunk-JXNLFOHN.js.map → chunk-YXL36I7H.js.map} +1 -1
- package/dist/chunks/{dist-ENWWFQRW.js → dist-J332RCWL.js} +1 -1
- package/dist/chunks/{dist-ENWWFQRW.js.map → dist-J332RCWL.js.map} +1 -1
- package/dist/chunks/{dist-3BAA53CZ.js → dist-KSNV45ZL.js} +2 -2
- package/dist/chunks/{model-UTGDKBLI.js → model-T6Q2NL4X.js} +2 -2
- package/dist/chunks/{renderToSvg-BXHHPMDS.js → renderToSvg-EBTD7XU6.js} +2 -2
- package/dist/jbrowse-plugin-msaview.esm.js +1 -1
- package/dist/jbrowse-plugin-msaview.esm.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
- package/src/version.ts +1 -1
- package/dist/chunks/chunk-F3DI5E5G.js +0 -2
- package/dist/chunks/chunk-F3DI5E5G.js.map +0 -7
- package/dist/chunks/chunk-LNWEADY6.js +0 -2
- /package/dist/chunks/{MsaViewPanel-TWWHZCKE.js.map → MsaViewPanel-4PHVMXIL.js.map} +0 -0
- /package/dist/chunks/{dist-3BAA53CZ.js.map → dist-KSNV45ZL.js.map} +0 -0
- /package/dist/chunks/{model-UTGDKBLI.js.map → model-T6Q2NL4X.js.map} +0 -0
- /package/dist/chunks/{renderToSvg-BXHHPMDS.js.map → renderToSvg-EBTD7XU6.js.map} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as l}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=AboutDialog-
|
|
1
|
+
import{a as l}from"./chunk-JYQQZRPF.js";import{a as i}from"./chunk-DNFD5II2.js";import{a as m}from"./chunk-BX4Z274Q.js";import{a}from"./chunk-J6KYLXRD.js";import{b as r}from"./chunk-FY3BTKY4.js";var e=r(a(),1),o=r(i(),1),t=r(m(),1);function c({onClose:n}){return e.default.createElement(o.Dialog,{open:!0,title:"About",onClose:()=>{n()}},e.default.createElement(t.DialogContent,null,e.default.createElement(t.Typography,null,"MSAView ",l," (",e.default.createElement(t.Link,{target:"_blank",rel:"noopener",href:"https://github.com/gmod/react-msaview"},"Github"),")"),e.default.createElement("ul",null,e.default.createElement("li",null,e.default.createElement(t.Typography,null,"We use some color schemes from the"," ",e.default.createElement(t.Link,{target:"_blank",rel:"noopener",href:"https://github.com/biotite-dev/biotite"},"biotite")," ","project, and their license is reproduced"," ",e.default.createElement(t.Link,{target:"_blank",rel:"noopener",href:"https://github.com/biotite-dev/biotite/blob/master/LICENSE.rst"},"here"))),e.default.createElement("li",null,e.default.createElement(t.Typography,null,"See this page for some information on jalview colorings"," ",e.default.createElement(t.Link,{target:"_blank",rel:"noopener",href:"https://www.jalview.org/help/html/colourSchemes/"},"here"))),e.default.createElement("li",null,e.default.createElement(t.Typography,null,"See this page for some info on the clustal, cinema, maeditor, and lesk color schemes"," ",e.default.createElement(t.Link,{target:"_blank",rel:"noopener",href:"http://www.bioinformatics.nl/~berndb/aacolour.html"},"here"))),e.default.createElement("li",null,e.default.createElement(t.Typography,null,"See this paper about the flower color scheme"," ",e.default.createElement(t.Link,{target:"_blank",rel:"noopener",href:"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7245768/"},"here"))))))}export{c as default};
|
|
2
|
+
//# sourceMappingURL=AboutDialog-HJKHE6X5.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/react-msaview@9.
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/react-msaview@9.8.0_a4121c98828e538e8b3708814bbfe622/node_modules/react-msaview/src/components/dialogs/AboutDialog.tsx"],
|
|
4
4
|
"sourcesContent": ["import React from 'react'\n\nimport { Dialog } from '@jbrowse/core/ui'\nimport { DialogContent, Link, Typography } from '@mui/material'\n\nimport { version } from '../../version.ts'\n\nexport default function AboutDialog({ onClose }: { onClose: () => void }) {\n return (\n <Dialog\n open\n title=\"About\"\n onClose={() => {\n onClose()\n }}\n >\n <DialogContent>\n <Typography>\n MSAView {version} (\n <Link\n target=\"_blank\"\n rel=\"noopener\"\n href=\"https://github.com/gmod/react-msaview\"\n >\n Github\n </Link>\n )\n </Typography>\n\n <ul>\n <li>\n <Typography>\n We use some color schemes from the{' '}\n <Link\n target=\"_blank\"\n rel=\"noopener\"\n href=\"https://github.com/biotite-dev/biotite\"\n >\n biotite\n </Link>{' '}\n project, and their license is reproduced{' '}\n <Link\n target=\"_blank\"\n rel=\"noopener\"\n href=\"https://github.com/biotite-dev/biotite/blob/master/LICENSE.rst\"\n >\n here\n </Link>\n </Typography>\n </li>\n <li>\n <Typography>\n See this page for some information on jalview colorings{' '}\n <Link\n target=\"_blank\"\n rel=\"noopener\"\n href=\"https://www.jalview.org/help/html/colourSchemes/\"\n >\n here\n </Link>\n </Typography>\n </li>\n <li>\n <Typography>\n See this page for some info on the clustal, cinema, maeditor, and\n lesk color schemes{' '}\n <Link\n target=\"_blank\"\n rel=\"noopener\"\n href=\"http://www.bioinformatics.nl/~berndb/aacolour.html\"\n >\n here\n </Link>\n </Typography>\n </li>\n <li>\n <Typography>\n See this paper about the flower color scheme{' '}\n <Link\n target=\"_blank\"\n rel=\"noopener\"\n href=\"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7245768/\"\n >\n here\n </Link>\n </Typography>\n </li>\n </ul>\n </DialogContent>\n </Dialog>\n )\n}\n"],
|
|
5
5
|
"mappings": "mMAAA,IAAAA,EAAkB,SAElBC,EAAuB,SACvBC,EAAgD,SAIlC,SAAPC,EAA6B,CAAE,QAAAC,CAAO,EAA2B,CACtE,OACE,EAAAC,QAAA,cAAC,SAAM,CACL,KAAI,GACJ,MAAM,QACN,QAAS,IAAK,CACZD,EAAO,CACT,CAAC,EAED,EAAAC,QAAA,cAAC,gBAAa,KACZ,EAAAA,QAAA,cAAC,aAAU,gBACAC,OACT,EAAAD,QAAA,cAAC,OAAI,CACH,OAAO,SACP,IAAI,WACJ,KAAK,uCAAuC,EAAA,QAAA,OAOhD,EAAAA,QAAA,cAAA,KAAA,KACE,EAAAA,QAAA,cAAA,KAAA,KACE,EAAAA,QAAA,cAAC,aAAU,0CAC0B,IACnC,EAAAA,QAAA,cAAC,OAAI,CACH,OAAO,SACP,IAAI,WACJ,KAAK,wCAAwC,EAAA,SAAA,EAGvC,+CACiC,IACzC,EAAAA,QAAA,cAAC,OAAI,CACH,OAAO,SACP,IAAI,WACJ,KAAK,gEAAgE,EAAA,MAAA,CAGhE,CACI,EAEf,EAAAA,QAAA,cAAA,KAAA,KACE,EAAAA,QAAA,cAAC,aAAU,+DAC+C,IACxD,EAAAA,QAAA,cAAC,OAAI,CACH,OAAO,SACP,IAAI,WACJ,KAAK,kDAAkD,EAAA,MAAA,CAGlD,CACI,EAEf,EAAAA,QAAA,cAAA,KAAA,KACE,EAAAA,QAAA,cAAC,aAAU,4FAEU,IACnB,EAAAA,QAAA,cAAC,OAAI,CACH,OAAO,SACP,IAAI,WACJ,KAAK,oDAAoD,EAAA,MAAA,CAGpD,CACI,EAEf,EAAAA,QAAA,cAAA,KAAA,KACE,EAAAA,QAAA,cAAC,aAAU,oDACoC,IAC7C,EAAAA,QAAA,cAAC,OAAI,CACH,OAAO,SACP,IAAI,WACJ,KAAK,uDAAuD,EAAA,MAAA,CAGvD,CACI,CACV,CACF,CACS,CAGtB",
|
|
6
6
|
"names": ["import_react", "import_ui", "import_material", "AboutDialog", "onClose", "React", "version"]
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{g as d}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=AnnotationFileDialog-
|
|
1
|
+
import{g as d}from"./chunk-YXL36I7H.js";import"./chunk-K55ZVN73.js";import"./chunk-73KAPCJ2.js";import{a as x}from"./chunk-CVLB4VFP.js";import{a as C}from"./chunk-DNFD5II2.js";import{a as w}from"./chunk-BX4Z274Q.js";import{a as y}from"./chunk-J6KYLXRD.js";import{b as i}from"./chunk-FY3BTKY4.js";var e=i(y(),1),c=i(C(),1),t=i(w(),1),E=i(x(),1);var T="https://gmod.org/JBrowseMSA/tutorials/protein_family";async function b(l){let o=await fetch(l);if(!o.ok)throw new Error(`HTTP ${o.status} fetching ${l} ${await o.text()}`);return o.text()}var k=(0,E.observer)(function({handleClose:l,model:o}){let[r,h]=(0,e.useState)(),[a,g]=(0,e.useState)("file"),[s,F]=(0,e.useState)(""),[m,u]=(0,e.useState)(),[v,f]=(0,e.useState)(!1);return e.default.createElement(c.Dialog,{maxWidth:"xl",title:"Open annotation file",onClose:()=>{l()},open:!0},e.default.createElement(t.DialogContent,null,m?e.default.createElement(c.ErrorMessage,{error:m}):null,e.default.createElement(t.Typography,null,"Open a GFF3 file of annotations, such as the one `react-msaview-cli interpro` writes, or the JSON an InterProScan run returns."," ",e.default.createElement(t.Link,{href:T,target:"_blank",rel:"noopener noreferrer"},"How to make one")),e.default.createElement("div",{style:{display:"flex",margin:30}},e.default.createElement(t.FormControl,{component:"fieldset"},e.default.createElement(t.RadioGroup,{value:a,onChange:n=>{g(n.target.value)}},e.default.createElement(t.FormControlLabel,{value:"url",control:e.default.createElement(t.Radio,null),label:"URL"}),e.default.createElement(t.FormControlLabel,{value:"file",control:e.default.createElement(t.Radio,null),label:"File"}))),a==="url"?e.default.createElement("div",null,e.default.createElement(t.Typography,null,"Open an annotation file from a URL"),e.default.createElement(t.TextField,{label:"URL",value:s,onChange:n=>{F(n.target.value)}})):e.default.createElement("div",{style:{paddingTop:20}},e.default.createElement(t.Typography,null,"Open an annotation file from your local drive"),e.default.createElement(t.Button,{variant:"outlined",component:"label"},"Choose File",e.default.createElement("input",{type:"file",hidden:!0,onChange:({target:n})=>{let p=n.files?.[0];p&&h(p)}})),r?e.default.createElement(t.Typography,null,r.name):null))),e.default.createElement(t.DialogActions,null,e.default.createElement(t.Button,{variant:"contained",color:"primary",disabled:v||(a==="file"?!r:!s.trim()),onClick:()=>{(async()=>{f(!0),u(void 0);try{let n=await(a==="file"&&r?r.text():b(s));o.setGFFFilehandle(void 0),o.setGFF(d(n)),o.setShowDomains(!0),o.setCellFill("domain"),l()}catch(n){console.error(n),u(n)}finally{f(!1)}})()}},"Open annotations"),e.default.createElement(t.Button,{variant:"contained",color:"secondary",onClick:()=>{l()}},"Cancel")))}),O=k;export{O as default};
|
|
2
|
+
//# sourceMappingURL=AnnotationFileDialog-MGUAGUEN.js.map
|
package/dist/chunks/{AnnotationFileDialog-M3VBMOKS.js.map → AnnotationFileDialog-MGUAGUEN.js.map}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/react-msaview@9.
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/react-msaview@9.8.0_a4121c98828e538e8b3708814bbfe622/node_modules/react-msaview/src/components/dialogs/AnnotationFileDialog.tsx"],
|
|
4
4
|
"sourcesContent": ["import React, { useState } from 'react'\n\nimport { Dialog, ErrorMessage } from '@jbrowse/core/ui'\nimport {\n Button,\n DialogActions,\n DialogContent,\n FormControl,\n FormControlLabel,\n Link,\n Radio,\n RadioGroup,\n TextField,\n Typography,\n} from '@mui/material'\nimport { observer } from 'mobx-react'\nimport { annotationTextToGFF } from 'msa-parsers'\n\nimport type { MsaViewModel } from '../../model.ts'\n\nconst domainsTutorial = 'https://gmod.org/JBrowseMSA/tutorials/protein_family'\n\nasync function fetchText(url: string) {\n const response = await fetch(url)\n if (!response.ok) {\n throw new Error(\n `HTTP ${response.status} fetching ${url} ${await response.text()}`,\n )\n }\n return response.text()\n}\n\nconst AnnotationFileDialog = observer(function ({\n handleClose,\n model,\n}: {\n handleClose: () => void\n model: MsaViewModel\n}) {\n const [file, setFile] = useState<File>()\n const [choice, setChoice] = useState('file')\n const [url, setUrl] = useState('')\n const [error, setError] = useState<unknown>()\n const [loading, setLoading] = useState(false)\n\n // the error is shown here rather than notified: the standalone app and the\n // MSAViewer component have no jbrowse session to notify, and asking one for\n // its notify() threw out of the success path into the catch, which threw\n // again on the same missing session\n return (\n <Dialog\n maxWidth=\"xl\"\n title=\"Open annotation file\"\n onClose={() => {\n handleClose()\n }}\n open\n >\n <DialogContent>\n {error ? <ErrorMessage error={error} /> : null}\n <Typography>\n Open a GFF3 file of annotations, such as the one `react-msaview-cli\n interpro` writes, or the JSON an InterProScan run returns.{' '}\n <Link\n href={domainsTutorial}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n How to make one\n </Link>\n </Typography>\n\n <div style={{ display: 'flex', margin: 30 }}>\n <FormControl component=\"fieldset\">\n <RadioGroup\n value={choice}\n onChange={event => {\n setChoice(event.target.value)\n }}\n >\n <FormControlLabel value=\"url\" control={<Radio />} label=\"URL\" />\n <FormControlLabel value=\"file\" control={<Radio />} label=\"File\" />\n </RadioGroup>\n </FormControl>\n {choice === 'url' ? (\n <div>\n <Typography>Open an annotation file from a URL</Typography>\n <TextField\n label=\"URL\"\n value={url}\n onChange={event => {\n setUrl(event.target.value)\n }}\n />\n </div>\n ) : (\n <div style={{ paddingTop: 20 }}>\n <Typography>\n Open an annotation file from your local drive\n </Typography>\n <Button variant=\"outlined\" component=\"label\">\n Choose File\n <input\n type=\"file\"\n hidden\n onChange={({ target }) => {\n const chosen = target.files?.[0]\n if (chosen) {\n setFile(chosen)\n }\n }}\n />\n </Button>\n {file ? <Typography>{file.name}</Typography> : null}\n </div>\n )}\n </div>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n color=\"primary\"\n disabled={loading || (choice === 'file' ? !file : !url.trim())}\n onClick={() => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n ;(async () => {\n setLoading(true)\n setError(undefined)\n try {\n const text = await (choice === 'file' && file\n ? file.text()\n : fetchText(url))\n // through the model's own GFF text, so the annotations travel\n // in the snapshot and the shared URL like every other layer. A\n // filehandle left set would make the snapshot drop that text\n model.setGFFFilehandle(undefined)\n model.setGFF(annotationTextToGFF(text))\n model.setShowDomains(true)\n model.setCellFill('domain')\n handleClose()\n } catch (e) {\n console.error(e)\n setError(e)\n } finally {\n setLoading(false)\n }\n })()\n }}\n >\n Open annotations\n </Button>\n <Button\n variant=\"contained\"\n color=\"secondary\"\n onClick={() => {\n handleClose()\n }}\n >\n Cancel\n </Button>\n </DialogActions>\n </Dialog>\n )\n})\n\nexport default AnnotationFileDialog\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["import_react", "import_ui", "import_material", "import_mobx_react", "domainsTutorial", "fetchText", "url", "response", "AnnotationFileDialog", "handleClose", "model", "file", "setFile", "choice", "setChoice", "setUrl", "error", "setError", "loading", "setLoading", "React", "event", "target", "chosen", "text", "annotationTextToGFF", "e", "AnnotationFileDialog_default"]
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as p}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=ExportSVGDialog-
|
|
1
|
+
import{a as p}from"./chunk-NRAUA3EX.js";import{aa as v,ba as y}from"./chunk-4IRL4OLU.js";import{a as L}from"./chunk-CVLB4VFP.js";import{a as D}from"./chunk-DNFD5II2.js";import{a as V}from"./chunk-BX4Z274Q.js";import{a as I}from"./chunk-J6KYLXRD.js";import{b as l}from"./chunk-FY3BTKY4.js";var t=l(I(),1),i=l(D(),1),e=l(V(),1),k=l(L(),1);function z(r){requestAnimationFrame(()=>{requestAnimationFrame(r)})}var P=(0,k.observer)(function({model:r,onClose:c}){let[s,C]=(0,t.useState)(!0),[n,T]=(0,t.useState)(!0),[o,b]=(0,t.useState)("viewport"),[E,w]=(0,t.useState)(),[m,h]=(0,t.useState)(!1),d=(0,e.useTheme)(),{turnedOnTracks:M,numColumns:S,leaves:A,showMsaLetters:F}=r,g=M.length>0,x=y(r,v(r,{theme:d,exportType:"entire",includeTracks:n})),f=F&&o==="entire"?S*A.length:0,G=f>1e5;return t.default.createElement(i.Dialog,{onClose:()=>{c()},open:!0,title:"Export SVG"},t.default.createElement(e.DialogContent,null,E?t.default.createElement(i.ErrorMessage,{error:E}):null,t.default.createElement(e.Typography,null,"Settings:"),t.default.createElement(p,{label:"Include minimap?",disabled:o==="entire",checked:s,onChange:()=>{C(!s)}}),g?t.default.createElement(p,{label:"Include tracks?",checked:n,onChange:()=>{T(!n)}}):null,t.default.createElement("div",null,t.default.createElement(e.FormControl,null,t.default.createElement(e.FormLabel,null,"Export type"),t.default.createElement(e.RadioGroup,{value:o,onChange:a=>{let{value:u}=a.target;(u==="entire"||u==="viewport")&&b(u)}},t.default.createElement(e.FormControlLabel,{value:"entire",control:t.default.createElement(e.Radio,null),label:"Entire MSA"}),t.default.createElement(e.FormControlLabel,{value:"viewport",control:t.default.createElement(e.Radio,null),label:"Current viewport only"})))),G?t.default.createElement(e.Alert,{severity:"warning",style:{marginTop:8}},"The entire MSA is ",Math.round(x.width),"x",Math.round(x.height)," pixels and draws"," ",Math.round(f/1e3),"k residue letters, each its own SVG element. Export may be slow or fail \u2014 zooming out far enough to hide the letters exports the same alignment as an image instead."):null),t.default.createElement(e.DialogActions,null,t.default.createElement(e.Button,{variant:"contained",color:"primary",disabled:m,startIcon:m?t.default.createElement(e.CircularProgress,{size:16,color:"inherit"}):null,onClick:()=>{h(!0),z(()=>{r.exportSVG({theme:d,includeMinimap:s,includeTracks:g&&n,exportType:o}).then(()=>{c()}).catch(a=>{console.error(a),w(a)}).finally(()=>{h(!1)})})}},m?"Exporting\u2026":"Export"),t.default.createElement(e.Button,{variant:"contained",color:"secondary",onClick:()=>{c()}},"Cancel")))}),B=P;export{B as default};
|
|
2
|
+
//# sourceMappingURL=ExportSVGDialog-JNEIAPDD.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/react-msaview@9.
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/react-msaview@9.8.0_a4121c98828e538e8b3708814bbfe622/node_modules/react-msaview/src/components/dialogs/ExportSVGDialog.tsx"],
|
|
4
4
|
"sourcesContent": ["import React, { useState } from 'react'\n\nimport { Dialog, ErrorMessage } from '@jbrowse/core/ui'\nimport {\n Alert,\n Button,\n CircularProgress,\n DialogActions,\n DialogContent,\n FormControl,\n FormControlLabel,\n FormLabel,\n Radio,\n RadioGroup,\n Typography,\n useTheme,\n} from '@mui/material'\nimport { observer } from 'mobx-react'\n\nimport { exportPageSize, getLayout } from '../../exportLayout.ts'\nimport Checkbox2 from '../Checkbox2.tsx'\n\nimport type { MsaViewModel } from '../../model.ts'\n\n// Run after the browser has painted. A requestAnimationFrame callback still\n// runs *before* the frame it was queued for, so one alone hands the main thread\n// to the render with the spinner not yet on screen; the second fires once that\n// frame is out.\nfunction afterPaint(fn: () => void) {\n requestAnimationFrame(() => {\n requestAnimationFrame(fn)\n })\n}\n\nconst ExportSVGDialog = observer(function ({\n model,\n onClose,\n}: {\n model: MsaViewModel\n onClose: () => void\n}) {\n const [includeMinimap, setIncludeMinimap] = useState(true)\n const [includeTracks, setIncludeTracks] = useState(true)\n const [exportType, setExportType] = useState<'entire' | 'viewport'>(\n 'viewport',\n )\n const [error, setError] = useState<unknown>()\n const [exporting, setExporting] = useState(false)\n const theme = useTheme()\n const { turnedOnTracks, numColumns, leaves, showMsaLetters } = model\n const hasTracks = turnedOnTracks.length > 0\n const entire = exportPageSize(\n model,\n getLayout(model, { theme, exportType: 'entire', includeTracks }),\n )\n // the background is one raster image whatever its size, so what the figure\n // actually costs is its residue letters: each is an svg element of its own.\n // Past roughly this many the export runs to tens of seconds and can exhaust\n // the tab's memory outright\n const glyphs =\n showMsaLetters && exportType === 'entire' ? numColumns * leaves.length : 0\n const isLargeExport = glyphs > 100_000\n return (\n <Dialog\n onClose={() => {\n onClose()\n }}\n open\n title=\"Export SVG\"\n >\n <DialogContent>\n {error ? <ErrorMessage error={error} /> : null}\n <Typography>Settings:</Typography>\n <Checkbox2\n label=\"Include minimap?\"\n disabled={exportType === 'entire'}\n checked={includeMinimap}\n onChange={() => {\n setIncludeMinimap(!includeMinimap)\n }}\n />\n {hasTracks ? (\n <Checkbox2\n label=\"Include tracks?\"\n checked={includeTracks}\n onChange={() => {\n setIncludeTracks(!includeTracks)\n }}\n />\n ) : null}\n <div>\n <FormControl>\n <FormLabel>Export type</FormLabel>\n <RadioGroup\n value={exportType}\n onChange={event => {\n const { value } = event.target\n if (value === 'entire' || value === 'viewport') {\n setExportType(value)\n }\n }}\n >\n <FormControlLabel\n value=\"entire\"\n control={<Radio />}\n label=\"Entire MSA\"\n />\n <FormControlLabel\n value=\"viewport\"\n control={<Radio />}\n label=\"Current viewport only\"\n />\n </RadioGroup>\n </FormControl>\n </div>\n {isLargeExport ? (\n <Alert severity=\"warning\" style={{ marginTop: 8 }}>\n The entire MSA is {Math.round(entire.width)}x\n {Math.round(entire.height)} pixels and draws{' '}\n {Math.round(glyphs / 1000)}k residue letters, each its own SVG\n element. Export may be slow or fail \u2014 zooming out far enough to hide\n the letters exports the same alignment as an image instead.\n </Alert>\n ) : null}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n color=\"primary\"\n // rendering runs on the main thread and a large figure holds it for\n // seconds; without this the button stays live through the freeze and\n // a second click starts a second export\n disabled={exporting}\n startIcon={\n exporting ? <CircularProgress size={16} color=\"inherit\" /> : null\n }\n onClick={() => {\n setExporting(true)\n afterPaint(() => {\n void model\n .exportSVG({\n theme,\n includeMinimap,\n includeTracks: hasTracks && includeTracks,\n exportType,\n })\n .then(() => {\n onClose()\n })\n .catch((e: unknown) => {\n console.error(e)\n setError(e)\n })\n .finally(() => {\n setExporting(false)\n })\n })\n }}\n >\n {exporting ? 'Exporting\u2026' : 'Export'}\n </Button>\n <Button\n variant=\"contained\"\n color=\"secondary\"\n onClick={() => {\n onClose()\n }}\n >\n Cancel\n </Button>\n </DialogActions>\n </Dialog>\n )\n})\n\nexport default ExportSVGDialog\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["import_react", "import_ui", "import_material", "import_mobx_react", "afterPaint", "fn", "ExportSVGDialog", "model", "onClose", "includeMinimap", "setIncludeMinimap", "includeTracks", "setIncludeTracks", "exportType", "setExportType", "error", "setError", "exporting", "setExporting", "theme", "turnedOnTracks", "numColumns", "leaves", "showMsaLetters", "hasTracks", "entire", "exportPageSize", "getLayout", "glyphs", "isLargeExport", "React", "Checkbox2", "event", "value", "e", "ExportSVGDialog_default"]
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import{a as C}from"./chunk-CVLB4VFP.js";import{a as k}from"./chunk-DNFD5II2.js";import{a as F}from"./chunk-BX4Z274Q.js";import{a as T}from"./chunk-J6KYLXRD.js";import{b as c}from"./chunk-FY3BTKY4.js";var e=c(T(),1),p=c(k(),1),t=c(F(),1),s=c(C(),1);function w(n,a){return[n.accession,n.name,n.description].some(o=>o?.toLowerCase().includes(a))}var x=(0,s.observer)(function({model:n,accessions:a}){let o=m=>{for(let u of a)n.setFilter(u,m)};return e.default.createElement("div",null,e.default.createElement(t.Button,{onClick:()=>{o(!0)}},"Toggle all on"),e.default.createElement(t.Button,{onClick:()=>{o(!1)}},"Toggle all off"))}),v=(0,s.observer)(function({model:n}){let{annotationTypes:a,annotations:o,featureColors:m,fillPalette:u}=n,[E,h]=(0,e.useState)(""),g=E.trim().toLowerCase(),d=[...a.values()].filter(l=>!g||w(l,g)),i=new Map,f=new Map;for(let l of o){let{accession:r}=l;i.set(r,(i.get(r)??0)+1),f.has(r)||f.set(r,m.get(l)?.fill??u[r])}return e.default.createElement(e.default.Fragment,null,e.default.createElement(t.TextField,{label:"Filter",size:"small",value:E,onChange:l=>{h(l.target.value)}}),e.default.createElement(x,{model:n,accessions:d.map(l=>l.accession)}),e.default.createElement(t.Table,{size:"small"},e.default.createElement(t.TableHead,null,e.default.createElement(t.TableRow,null,e.default.createElement(t.TableCell,{padding:"checkbox"}),e.default.createElement(t.TableCell,null,"color"),e.default.createElement(t.TableCell,null,"accession"),e.default.createElement(t.TableCell,null,"name"),e.default.createElement(t.TableCell,null,"count"),e.default.createElement(t.TableCell,null,"description"))),e.default.createElement(t.TableBody,null,d.map(({accession:l,name:r,description:b})=>e.default.createElement(t.TableRow,{key:l},e.default.createElement(t.TableCell,{padding:"checkbox"},e.default.createElement(t.Checkbox,{checked:!n.featureOff(l),onChange:()=>{n.setFilter(l,n.featureOff(l))}})),e.default.createElement(t.TableCell,null,e.default.createElement("div",{style:{width:20,height:20,background:f.get(l)}})),e.default.createElement(t.TableCell,null,l),e.default.createElement(t.TableCell,null,r),e.default.createElement(t.TableCell,null,i.get(l)),e.default.createElement(t.TableCell,null,b))))))}),y=(0,s.observer)(function({onClose:n,model:a}){return e.default.createElement(p.Dialog,{onClose:()=>{n()},open:!0,title:"Feature filters",maxWidth:"xl"},e.default.createElement(t.DialogContent,null,e.default.createElement(v,{model:a})))}),D=y;export{D as default};
|
|
2
|
-
//# sourceMappingURL=FeatureDialog-
|
|
2
|
+
//# sourceMappingURL=FeatureDialog-36U3KHHS.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/react-msaview@9.
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/react-msaview@9.8.0_a4121c98828e538e8b3708814bbfe622/node_modules/react-msaview/src/components/dialogs/FeatureDialog.tsx"],
|
|
4
4
|
"sourcesContent": ["import React, { useState } from 'react'\n\nimport { Dialog } from '@jbrowse/core/ui'\nimport {\n Button,\n Checkbox,\n DialogContent,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n TextField,\n} from '@mui/material'\nimport { observer } from 'mobx-react'\n\nimport type { MsaViewModel } from '../../model.ts'\nimport type { Annotation } from '../../types.ts'\n\nfunction matches(type: Annotation, query: string) {\n return [type.accession, type.name, type.description].some(field =>\n field?.toLowerCase().includes(query),\n )\n}\n\nconst Toggles = observer(function ({\n model,\n accessions,\n}: {\n model: MsaViewModel\n accessions: string[]\n}) {\n const setAll = (shown: boolean) => {\n for (const accession of accessions) {\n model.setFilter(accession, shown)\n }\n }\n return (\n <div>\n <Button\n onClick={() => {\n setAll(true)\n }}\n >\n Toggle all on\n </Button>\n\n <Button\n onClick={() => {\n setAll(false)\n }}\n >\n Toggle all off\n </Button>\n </div>\n )\n})\n\nconst FeatureTable = observer(function ({ model }: { model: MsaViewModel }) {\n const { annotationTypes, annotations, featureColors, fillPalette } = model\n const [query, setQuery] = useState('')\n const needle = query.trim().toLowerCase()\n const types = [...annotationTypes.values()].filter(\n type => !needle || matches(type, needle),\n )\n const counts = new Map<string, number>()\n const swatches = new Map<string, string>()\n for (const annot of annotations) {\n const { accession } = annot\n counts.set(accession, (counts.get(accession) ?? 0) + 1)\n if (!swatches.has(accession)) {\n swatches.set(\n accession,\n featureColors.get(annot)?.fill ?? fillPalette[accession]!,\n )\n }\n }\n return (\n <>\n <TextField\n label=\"Filter\"\n size=\"small\"\n value={query}\n onChange={event => {\n setQuery(event.target.value)\n }}\n />\n <Toggles model={model} accessions={types.map(t => t.accession)} />\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell padding=\"checkbox\" />\n <TableCell>color</TableCell>\n <TableCell>accession</TableCell>\n <TableCell>name</TableCell>\n <TableCell>count</TableCell>\n <TableCell>description</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {types.map(({ accession, name, description }) => (\n <TableRow key={accession}>\n <TableCell padding=\"checkbox\">\n <Checkbox\n checked={!model.featureOff(accession)}\n onChange={() => {\n model.setFilter(accession, model.featureOff(accession))\n }}\n />\n </TableCell>\n <TableCell>\n <div\n style={{\n width: 20,\n height: 20,\n background: swatches.get(accession),\n }}\n />\n </TableCell>\n <TableCell>{accession}</TableCell>\n <TableCell>{name}</TableCell>\n <TableCell>{counts.get(accession)}</TableCell>\n <TableCell>{description}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </>\n )\n})\n\nconst FeatureTypeDialog = observer(function ({\n onClose,\n model,\n}: {\n onClose: () => void\n model: MsaViewModel\n}) {\n return (\n <Dialog\n onClose={() => {\n onClose()\n }}\n open\n title=\"Feature filters\"\n maxWidth=\"xl\"\n >\n <DialogContent>\n <FeatureTable model={model} />\n </DialogContent>\n </Dialog>\n )\n})\n\nexport default FeatureTypeDialog\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["import_react", "import_ui", "import_material", "import_mobx_react", "matches", "type", "query", "field", "Toggles", "model", "accessions", "setAll", "shown", "accession", "React", "FeatureTable", "annotationTypes", "annotations", "featureColors", "fillPalette", "setQuery", "needle", "types", "counts", "swatches", "annot", "event", "t", "name", "description", "FeatureTypeDialog", "onClose", "FeatureDialog_default"]
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import{a as c}from"./chunk-CVLB4VFP.js";import{a as v}from"./chunk-DNFD5II2.js";import{a as d}from"./chunk-BX4Z274Q.js";import{a as m}from"./chunk-J6KYLXRD.js";import{b as t}from"./chunk-FY3BTKY4.js";var a=t(m(),1),h=t(v(),1),e=t(d(),1),y=t(c(),1);var r=t(m(),1),o=t(d(),1),u=t(c(),1),w=(0,u.observer)(function({model:n}){let[f,s]=(0,r.useState)(),p=f??n.allowedGappyness;return r.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:8}},r.default.createElement(o.Typography,{style:{whiteSpace:"nowrap"}},"\u2265",p,"% gaps"),r.default.createElement(o.Slider,{"data-testid":"gappyness_slider",style:{width:200,marginInline:10},min:1,max:100,value:p,onChange:(E,l)=>{s(l)},onChangeCommitted:(E,l)=>{n.setAllowedGappyness(l),s(void 0)}}))}),g=w;var C=(0,y.observer)(function({model:i,onClose:n}){return a.default.createElement(h.Dialog,{open:!0,onClose:n,title:"Hide gappy columns"},a.default.createElement(e.DialogContent,null,a.default.createElement(e.Typography,{variant:"body2",sx:{mb:2}},"The viewer hides each column where at least this share of the rows has a gap."),a.default.createElement(g,{model:i})),a.default.createElement(e.DialogActions,null,a.default.createElement(e.Button,{variant:"contained",onClick:n},"Close")))}),x=C;export{x as default};
|
|
2
|
-
//# sourceMappingURL=GapThresholdDialog-
|
|
2
|
+
//# sourceMappingURL=GapThresholdDialog-MMQTM2ZY.js.map
|
package/dist/chunks/{GapThresholdDialog-AXIDV62R.js.map → GapThresholdDialog-MMQTM2ZY.js.map}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/react-msaview@9.
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/react-msaview@9.8.0_a4121c98828e538e8b3708814bbfe622/node_modules/react-msaview/src/components/dialogs/GapThresholdDialog.tsx", "../../node_modules/.pnpm/react-msaview@9.8.0_a4121c98828e538e8b3708814bbfe622/node_modules/react-msaview/src/components/dialogs/GappynessSlider.tsx"],
|
|
4
4
|
"sourcesContent": ["import React from 'react'\n\nimport { Dialog } from '@jbrowse/core/ui'\nimport { Button, DialogActions, DialogContent, Typography } from '@mui/material'\nimport { observer } from 'mobx-react'\n\nimport GappynessSlider from './GappynessSlider.tsx'\n\nimport type { MsaViewModel } from '../../model.ts'\n\nconst GapThresholdDialog = observer(function ({\n model,\n onClose,\n}: {\n model: MsaViewModel\n onClose: () => void\n}) {\n return (\n <Dialog open onClose={onClose} title=\"Hide gappy columns\">\n <DialogContent>\n <Typography variant=\"body2\" sx={{ mb: 2 }}>\n The viewer hides each column where at least this share of the rows has\n a gap.\n </Typography>\n <GappynessSlider model={model} />\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={onClose}>\n Close\n </Button>\n </DialogActions>\n </Dialog>\n )\n})\n\nexport default GapThresholdDialog\n", "import React, { useState } from 'react'\n\nimport { Slider, Typography } from '@mui/material'\nimport { observer } from 'mobx-react'\n\nimport type { MsaViewModel } from '../../model.ts'\n\nconst GappynessSlider = observer(function GappynessSlider({\n model,\n}: {\n model: MsaViewModel\n}) {\n const [dragValue, setDragValue] = useState<number>()\n const value = dragValue ?? model.allowedGappyness\n return (\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n {/* the threshold is inclusive: blanks are columns whose gap count is at\n least ceil(allowedGappyness% of the rows), so at 100 it hides the\n columns that are entirely gaps rather than nothing */}\n <Typography style={{ whiteSpace: 'nowrap' }}>\n ≥{value}% gaps\n </Typography>\n <Slider\n // In JBrowse other MUI Sliders share the page, so `.MuiSlider-thumb`\n // can match the wrong one. Tests and screenshot specs target\n // `[data-testid=\"gappyness_slider\"] input`, the hidden range input that\n // takes focus and arrow/PageUp/PageDown.\n //\n // Not `slotProps={{ input: ... }}`: that widens `onChange`'s `val` to\n // `number | number[]`, which setAllowedGappyness rejects.\n //\n // The thumb follows local state while dragging and the model takes the\n // value on release, since each write recomputes the gap columns over\n // the whole alignment.\n data-testid=\"gappyness_slider\"\n style={{ width: 200, marginInline: 10 }}\n min={1}\n max={100}\n value={value}\n onChange={(_, val) => {\n setDragValue(val)\n }}\n onChangeCommitted={(_, val) => {\n model.setAllowedGappyness(val)\n setDragValue(undefined)\n }}\n />\n </div>\n )\n})\n\nexport default GappynessSlider\n"],
|
|
5
5
|
"mappings": "wMAAA,IAAAA,EAAkB,SAElBC,EAAuB,SACvBC,EAAiE,SACjEC,EAAyB,SCJzB,IAAAC,EAAgC,SAEhCC,EAAmC,SACnCC,EAAyB,SAInBC,KAAkB,YAAS,SAAyB,CACxD,MAAAC,CAAK,EAGN,CACC,GAAM,CAACC,EAAWC,CAAY,KAAI,YAAQ,EACpCC,EAAQF,GAAaD,EAAM,iBACjC,OACE,EAAAI,QAAA,cAAA,MAAA,CAAK,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,CAAC,CAAE,EAI3D,EAAAA,QAAA,cAAC,aAAU,CAAC,MAAO,CAAE,WAAY,QAAQ,CAAE,WACpCD,YAEP,EAAAC,QAAA,cAAC,wBAYa,mBACZ,MAAO,CAAE,MAAO,IAAK,aAAc,EAAE,EACrC,IAAK,EACL,IAAK,IACL,MAAOD,EACP,SAAU,CAACE,EAAGC,IAAO,CACnBJ,EAAaI,CAAG,CAClB,EACA,kBAAmB,CAACD,EAAGC,IAAO,CAC5BN,EAAM,oBAAoBM,CAAG,EAC7BJ,EAAa,MAAS,CACxB,CAAC,CAAA,CACD,CAGR,CAAC,EAEDK,EAAeR,EDzCf,IAAMS,KAAqB,YAAS,SAAU,CAC5C,MAAAC,EACA,QAAAC,CAAO,EAIR,CACC,OACE,EAAAC,QAAA,cAAC,SAAM,CAAC,KAAI,GAAC,QAASD,EAAS,MAAM,oBAAoB,EACvD,EAAAC,QAAA,cAAC,gBAAa,KACZ,EAAAA,QAAA,cAAC,aAAU,CAAC,QAAQ,QAAQ,GAAI,CAAE,GAAI,CAAC,CAAE,EAAA,+EAAA,EAIzC,EAAAA,QAAA,cAACC,EAAe,CAAC,MAAOH,CAAK,CAAA,CAAI,EAEnC,EAAAE,QAAA,cAAC,gBAAa,KACZ,EAAAA,QAAA,cAAC,SAAM,CAAC,QAAQ,YAAY,QAASD,CAAO,EAAA,OAAA,CAEnC,CACK,CAGtB,CAAC,EAEDG,EAAeL",
|
|
6
6
|
"names": ["import_react", "import_ui", "import_material", "import_mobx_react", "import_react", "import_material", "import_mobx_react", "GappynessSlider", "model", "dragValue", "setDragValue", "value", "React", "_", "val", "GappynessSlider_default", "GapThresholdDialog", "model", "onClose", "React", "GappynessSlider_default", "GapThresholdDialog_default"]
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{b as r}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=GoToDialog-
|
|
1
|
+
import{b as r}from"./chunk-MDZDMDUF.js";import"./chunk-CVLB4VFP.js";import{a}from"./chunk-DNFD5II2.js";import{a as u}from"./chunk-BX4Z274Q.js";import{a as i}from"./chunk-J6KYLXRD.js";import{b as t}from"./chunk-FY3BTKY4.js";var o=t(i(),1),l=t(a(),1),m=t(u(),1);function f({model:n,onClose:e}){return o.default.createElement(l.Dialog,{open:!0,onClose:e,title:"Go to row or column",maxWidth:"xs",fullWidth:!0},o.default.createElement(m.DialogContent,null,o.default.createElement(r,{model:n,onFound:e})))}export{f as default};
|
|
2
|
+
//# sourceMappingURL=GoToDialog-HYG2ADFF.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/react-msaview@9.
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/react-msaview@9.8.0_a4121c98828e538e8b3708814bbfe622/node_modules/react-msaview/src/components/dialogs/GoToDialog.tsx"],
|
|
4
4
|
"sourcesContent": ["import React from 'react'\n\nimport { Dialog } from '@jbrowse/core/ui'\nimport { DialogContent } from '@mui/material'\n\nimport GoToBox from './GoToBox.tsx'\n\nimport type { MsaViewModel } from '../../model.ts'\n\nexport default function GoToDialog({\n model,\n onClose,\n}: {\n model: MsaViewModel\n onClose: () => void\n}) {\n return (\n <Dialog\n open\n onClose={onClose}\n title=\"Go to row or column\"\n maxWidth=\"xs\"\n fullWidth\n >\n <DialogContent>\n <GoToBox model={model} onFound={onClose} />\n </DialogContent>\n </Dialog>\n )\n}\n"],
|
|
5
5
|
"mappings": "+NAAA,IAAAA,EAAkB,SAElBC,EAAuB,SACvBC,EAA8B,SAMhB,SAAPC,EAA4B,CACjC,MAAAC,EACA,QAAAC,CAAO,EAIR,CACC,OACE,EAAAC,QAAA,cAAC,SAAM,CACL,KAAI,GACJ,QAASD,EACT,MAAM,sBACN,SAAS,KACT,UAAS,EAAA,EAET,EAAAC,QAAA,cAAC,gBAAa,KACZ,EAAAA,QAAA,cAACC,EAAO,CAAC,MAAOH,EAAO,QAASC,CAAO,CAAA,CAAI,CAC7B,CAGtB",
|
|
6
6
|
"names": ["import_react", "import_ui", "import_material", "GoToDialog", "model", "onClose", "React", "GoToBox_default"]
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as i,b as m}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=HelpDialog-
|
|
1
|
+
import{a as i,b as m}from"./chunk-YTIKINP5.js";import{a as n}from"./chunk-JYQQZRPF.js";import{a as E}from"./chunk-DNFD5II2.js";import{a as b}from"./chunk-BX4Z274Q.js";import{a as p}from"./chunk-J6KYLXRD.js";import{b as a}from"./chunk-FY3BTKY4.js";var e=a(p(),1),u=a(E(),1),t=a(b(),1);var f=(0,e.lazy)(()=>import("./AboutDialog-HJKHE6X5.js"));function c({title:o,rows:l}){return e.default.createElement(e.default.Fragment,null,e.default.createElement(t.Typography,{variant:"subtitle2",sx:{mt:1}},o),e.default.createElement(t.Table,{size:"small","aria-label":o},e.default.createElement(t.TableBody,null,l.map(({label:r,action:s})=>e.default.createElement(t.TableRow,{key:r},e.default.createElement(t.TableCell,{sx:{whiteSpace:"nowrap",fontWeight:500}},r),e.default.createElement(t.TableCell,null,s))))))}function g({model:o,onClose:l}){return e.default.createElement(u.Dialog,{open:!0,title:"Mouse & keyboard",onClose:l},e.default.createElement(t.DialogContent,null,e.default.createElement(c,{title:"Mouse",rows:m}),e.default.createElement(c,{title:"Keyboard (click the alignment first)",rows:i})),e.default.createElement(t.DialogActions,null,e.default.createElement(t.Typography,{variant:"caption",sx:{mr:"auto",pl:1}},"MSAView ",n),e.default.createElement(t.Button,{onClick:()=>{o.queueDialog(r=>[f,{onClose:r}]),l()}},"About & credits"),e.default.createElement(t.Button,{variant:"contained",onClick:l},"Close")))}export{g as default};
|
|
2
|
+
//# sourceMappingURL=HelpDialog-5WXA5QYK.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/react-msaview@9.
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/react-msaview@9.8.0_a4121c98828e538e8b3708814bbfe622/node_modules/react-msaview/src/components/dialogs/HelpDialog.tsx"],
|
|
4
4
|
"sourcesContent": ["import React, { lazy } from 'react'\n\nimport { Dialog } from '@jbrowse/core/ui'\nimport {\n Button,\n DialogActions,\n DialogContent,\n Table,\n TableBody,\n TableCell,\n TableRow,\n Typography,\n} from '@mui/material'\n\nimport { version } from '../../version.ts'\nimport { keyboardControls, mouseControls } from '../controls.ts'\n\nimport type { MsaViewModel } from '../../model.ts'\nimport type { Control } from '../controls.ts'\n\nconst AboutDialog = lazy(() => import('./AboutDialog.tsx'))\n\nfunction ControlTable({ title, rows }: { title: string; rows: Control[] }) {\n return (\n <>\n <Typography variant=\"subtitle2\" sx={{ mt: 1 }}>\n {title}\n </Typography>\n <Table size=\"small\" aria-label={title}>\n <TableBody>\n {rows.map(({ label, action }) => (\n <TableRow key={label}>\n <TableCell sx={{ whiteSpace: 'nowrap', fontWeight: 500 }}>\n {label}\n </TableCell>\n <TableCell>{action}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </>\n )\n}\n\nexport default function HelpDialog({\n model,\n onClose,\n}: {\n model: MsaViewModel\n onClose: () => void\n}) {\n return (\n <Dialog open title=\"Mouse & keyboard\" onClose={onClose}>\n <DialogContent>\n <ControlTable title=\"Mouse\" rows={mouseControls} />\n <ControlTable\n title=\"Keyboard (click the alignment first)\"\n rows={keyboardControls}\n />\n </DialogContent>\n <DialogActions>\n <Typography variant=\"caption\" sx={{ mr: 'auto', pl: 1 }}>\n MSAView {version}\n </Typography>\n <Button\n onClick={() => {\n model.queueDialog(done => [AboutDialog, { onClose: done }])\n onClose()\n }}\n >\n About & credits\n </Button>\n <Button variant=\"contained\" onClick={onClose}>\n Close\n </Button>\n </DialogActions>\n </Dialog>\n )\n}\n"],
|
|
5
5
|
"mappings": "uPAAA,IAAAA,EAA4B,SAE5BC,EAAuB,SACvBC,EASO,SAQP,IAAMC,KAAc,QAAK,IAAM,OAAO,2BAAmB,CAAC,EAE1D,SAASC,EAAa,CAAE,MAAAC,EAAO,KAAAC,CAAI,EAAsC,CACvE,OACE,EAAAC,QAAA,cAAA,EAAAA,QAAA,SAAA,KACE,EAAAA,QAAA,cAAC,aAAU,CAAC,QAAQ,YAAY,GAAI,CAAE,GAAI,CAAC,CAAE,EAC1CF,CAAK,EAER,EAAAE,QAAA,cAAC,QAAK,CAAC,KAAK,QAAO,aAAaF,CAAK,EACnC,EAAAE,QAAA,cAAC,YAAS,KACPD,EAAK,IAAI,CAAC,CAAE,MAAAE,EAAO,OAAAC,CAAM,IACxB,EAAAF,QAAA,cAAC,WAAQ,CAAC,IAAKC,CAAK,EAClB,EAAAD,QAAA,cAAC,YAAS,CAAC,GAAI,CAAE,WAAY,SAAU,WAAY,GAAG,CAAE,EACrDC,CAAK,EAER,EAAAD,QAAA,cAAC,YAAS,KAAEE,CAAM,CAAa,CAElC,CAAC,CACQ,CACN,CAGd,CAEc,SAAPC,EAA4B,CACjC,MAAAC,EACA,QAAAC,CAAO,EAIR,CACC,OACE,EAAAL,QAAA,cAAC,SAAM,CAAC,KAAI,GAAC,MAAM,mBAAmB,QAASK,CAAO,EACpD,EAAAL,QAAA,cAAC,gBAAa,KACZ,EAAAA,QAAA,cAACH,EAAY,CAAC,MAAM,QAAQ,KAAMS,CAAa,CAAA,EAC/C,EAAAN,QAAA,cAACH,EAAY,CACX,MAAM,uCACN,KAAMU,CAAgB,CAAA,CACtB,EAEJ,EAAAP,QAAA,cAAC,gBAAa,KACZ,EAAAA,QAAA,cAAC,aAAU,CAAC,QAAQ,UAAU,GAAI,CAAE,GAAI,OAAQ,GAAI,CAAC,CAAE,aAC5CQ,CAAO,EAElB,EAAAR,QAAA,cAAC,SAAM,CACL,QAAS,IAAK,CACZI,EAAM,YAAYK,GAAQ,CAACb,EAAa,CAAE,QAASa,CAAI,CAAE,CAAC,EAC1DJ,EAAO,CACT,CAAC,EAAA,iBAAA,EAIH,EAAAL,QAAA,cAAC,SAAM,CAAC,QAAQ,YAAY,QAASK,CAAO,EAAA,OAAA,CAEnC,CACK,CAGtB",
|
|
6
6
|
"names": ["import_react", "import_ui", "import_material", "AboutDialog", "ControlTable", "title", "rows", "React", "label", "action", "HelpDialog", "model", "onClose", "mouseControls", "keyboardControls", "version", "done"]
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as p,b as d,c as m,d as h}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=MetadataDialog-
|
|
1
|
+
import{a as p,b as d,c as m,d as h}from"./chunk-5YOLE75H.js";import"./chunk-IBVOKJV3.js";import"./chunk-YXL36I7H.js";import"./chunk-NRAUA3EX.js";import"./chunk-K55ZVN73.js";import"./chunk-73KAPCJ2.js";import"./chunk-GFANDTQR.js";import"./chunk-Y7M36762.js";import{a as O}from"./chunk-CVLB4VFP.js";import{a as N}from"./chunk-DNFD5II2.js";import{a as L}from"./chunk-BX4Z274Q.js";import{a as R}from"./chunk-J6KYLXRD.js";import{b as a}from"./chunk-FY3BTKY4.js";var r=a(R(),1),T=a(N(),1),c=a(L(),1),M=a(O(),1);var E={General:"Alignment",Accessions:"Row accessions",Dbxref:"Row cross-references"},C={ID:"Identifier",AC:"Accession",DE:"Description",AU:"Authors",SE:"Source of seed",SS:"Source of structure",BM:"Build method",SM:"Search method",GA:"Gathering threshold",TC:"Trusted cutoff",NC:"Noise cutoff",TP:"Family type",CL:"Clan",MB:"Clan members",PI:"Previous identifiers",DR:"Database references",CC:"Comment",WK:"Wikipedia",NE:"Pfam family nested in this one",NL:"Nesting location",NH:"Tree (Newick)",SQ:"Number of sequences",RC:"Reference comment",RN:"Reference number",RM:"PubMed ID",RT:"Reference title",RA:"Reference authors",RL:"Reference journal",CB:"Curation: build",DC:"Database comment",DW:"Database web link",OS:"Organism",OC:"Organism classification",AM:"Alignment method",FT:"Feature",SO:"Sequence Ontology term"},y={RT:"Title",RA:"Authors",RL:"Journal",RM:"PubMed",RC:"Comment"},A=new Set(["NH"]);var D=a(R(),1);var g=["RM","RT","RA","RL","RC"];function x(e){return/^\d+$/.test(e)?D.default.createElement("a",{href:`https://pubmed.ncbi.nlm.nih.gov/${e}/`,target:"_blank",rel:"noreferrer"},e):e}function j(e){let o=e.RN;if(!Array.isArray(o)||o.length===0)return e;let s=g.filter(n=>e[n]!=null);if(!s.every(n=>{let i=e[n];return Array.isArray(i)&&i.length===o.length}))return e;let f=Object.fromEntries(Object.entries(e).filter(([n])=>n!=="RN"&&!g.includes(n))),t=Object.fromEntries(o.map((n,i)=>[n,Object.fromEntries(s.map(u=>{let b=e[u][i];return[y[u],u==="RM"?x(b):b]}))]));return{...f,References:t}}function S(e){return e&&typeof e=="object"?j(e):{}}var v=(0,M.observer)(function({model:e,onClose:o}){let s=Object.entries(e.header).filter(([,t])=>t!=null&&!d(t)),l=Object.fromEntries(s.filter(([,t])=>!p(t))),f=s.filter(([,t])=>p(t));return r.default.createElement(T.Dialog,{onClose:()=>{o()},open:!0,title:"Metadata",maxWidth:"xl"},r.default.createElement(c.DialogContent,null,s.length===0?r.default.createElement(c.Typography,null,"This alignment has no metadata."):r.default.createElement(r.default.Fragment,null,Object.keys(l).length>0?r.default.createElement(m,{record:l}):null,f.map(([t,n])=>r.default.createElement("div",{key:t},r.default.createElement(c.Typography,{variant:"h6"},E[t]??t),t==="General"?r.default.createElement(m,{record:S(n),labels:C,monospaceKeys:A}):r.default.createElement(m,{record:n})))),r.default.createElement(c.Typography,{variant:"h6"},"Sequences"),r.default.createElement(h,{str:e.rows})))}),I=v;export{I as default};
|
|
2
|
+
//# sourceMappingURL=MetadataDialog-QQNNQELM.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/react-msaview@9.
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/react-msaview@9.8.0_a4121c98828e538e8b3708814bbfe622/node_modules/react-msaview/src/components/dialogs/MetadataDialog.tsx", "../../node_modules/.pnpm/react-msaview@9.8.0_a4121c98828e538e8b3708814bbfe622/node_modules/react-msaview/src/components/dialogs/metadataLabels.ts", "../../node_modules/.pnpm/react-msaview@9.8.0_a4121c98828e538e8b3708814bbfe622/node_modules/react-msaview/src/components/dialogs/metadataRecord.tsx"],
|
|
4
4
|
"sourcesContent": ["import React from 'react'\n\nimport { Dialog } from '@jbrowse/core/ui'\nimport { DialogContent, Typography } from '@mui/material'\nimport { observer } from 'mobx-react'\n\nimport MetadataTable, { isEmpty, isRecord } from '../MetadataTable.tsx'\nimport SequenceTextArea from '../SequenceTextArea.tsx'\nimport { gfLabels, monospaceKeys, sectionLabels } from './metadataLabels.ts'\nimport { groupGeneral } from './metadataRecord.tsx'\n\nimport type { MsaViewModel } from '../../model.ts'\n\nconst MetadataDialog = observer(function ({\n model,\n onClose,\n}: {\n model: MsaViewModel\n onClose: () => void\n}) {\n const entries = Object.entries(model.header).filter(\n ([, value]) => value != null && !isEmpty(value),\n )\n const fields = Object.fromEntries(\n entries.filter(([, value]) => !isRecord(value)),\n )\n const sections = entries.filter(([, value]) => isRecord(value))\n return (\n <Dialog\n onClose={() => {\n onClose()\n }}\n open\n title=\"Metadata\"\n maxWidth=\"xl\"\n >\n <DialogContent>\n {entries.length === 0 ? (\n <Typography>This alignment has no metadata.</Typography>\n ) : (\n <>\n {Object.keys(fields).length > 0 ? (\n <MetadataTable record={fields} />\n ) : null}\n {sections.map(([section, value]) => (\n <div key={section}>\n <Typography variant=\"h6\">\n {sectionLabels[section] ?? section}\n </Typography>\n {section === 'General' ? (\n <MetadataTable\n record={groupGeneral(value)}\n labels={gfLabels}\n monospaceKeys={monospaceKeys}\n />\n ) : (\n <MetadataTable record={value as Record<string, unknown>} />\n )}\n </div>\n ))}\n </>\n )}\n <Typography variant=\"h6\">Sequences</Typography>\n <SequenceTextArea str={model.rows} />\n </DialogContent>\n </Dialog>\n )\n})\n\nexport default MetadataDialog\n", "export const sectionLabels: Record<string, string> = {\n General: 'Alignment',\n Accessions: 'Row accessions',\n Dbxref: 'Row cross-references',\n}\n\nexport const gfLabels: Record<string, string> = {\n ID: 'Identifier',\n AC: 'Accession',\n DE: 'Description',\n AU: 'Authors',\n SE: 'Source of seed',\n SS: 'Source of structure',\n BM: 'Build method',\n SM: 'Search method',\n GA: 'Gathering threshold',\n TC: 'Trusted cutoff',\n NC: 'Noise cutoff',\n TP: 'Family type',\n CL: 'Clan',\n MB: 'Clan members',\n PI: 'Previous identifiers',\n DR: 'Database references',\n CC: 'Comment',\n WK: 'Wikipedia',\n NE: 'Pfam family nested in this one',\n NL: 'Nesting location',\n NH: 'Tree (Newick)',\n SQ: 'Number of sequences',\n RC: 'Reference comment',\n RN: 'Reference number',\n RM: 'PubMed ID',\n RT: 'Reference title',\n RA: 'Reference authors',\n RL: 'Reference journal',\n CB: 'Curation: build',\n DC: 'Database comment',\n DW: 'Database web link',\n OS: 'Organism',\n OC: 'Organism classification',\n AM: 'Alignment method',\n FT: 'Feature',\n SO: 'Sequence Ontology term',\n}\n\nexport const referenceFieldLabels: Record<string, string> = {\n RT: 'Title',\n RA: 'Authors',\n RL: 'Journal',\n RM: 'PubMed',\n RC: 'Comment',\n}\n\nexport const monospaceKeys = new Set(['NH'])\n", "import React from 'react'\n\nimport { referenceFieldLabels } from './metadataLabels.ts'\n\nconst referenceTags = ['RM', 'RT', 'RA', 'RL', 'RC'] as const\n\nfunction pubmed(id: string) {\n return /^\\d+$/.test(id) ? (\n <a\n href={`https://pubmed.ncbi.nlm.nih.gov/${id}/`}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {id}\n </a>\n ) : (\n id\n )\n}\n\nfunction groupReferences(general: Record<string, unknown>) {\n const numbers = general.RN\n if (!Array.isArray(numbers) || numbers.length === 0) {\n return general\n }\n const present = referenceTags.filter(tag => general[tag] != null)\n const aligned = present.every(tag => {\n const values = general[tag]\n return Array.isArray(values) && values.length === numbers.length\n })\n if (!aligned) {\n return general\n }\n const rest = Object.fromEntries(\n Object.entries(general).filter(\n ([tag]) =>\n tag !== 'RN' && !(referenceTags as readonly string[]).includes(tag),\n ),\n )\n const references = Object.fromEntries(\n numbers.map((number: string, i) => [\n number,\n Object.fromEntries(\n present.map(tag => {\n const value = (general[tag] as string[])[i]!\n return [\n referenceFieldLabels[tag],\n tag === 'RM' ? pubmed(value) : value,\n ]\n }),\n ),\n ]),\n )\n return { ...rest, References: references }\n}\n\nexport function groupGeneral(general: unknown) {\n return general && typeof general === 'object'\n ? groupReferences(general as Record<string, unknown>)\n : {}\n}\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["import_react", "import_ui", "import_material", "import_mobx_react", "sectionLabels", "gfLabels", "referenceFieldLabels", "monospaceKeys", "import_react", "referenceTags", "pubmed", "id", "React", "groupReferences", "general", "numbers", "present", "tag", "values", "rest", "references", "number", "value", "referenceFieldLabels", "groupGeneral", "MetadataDialog", "model", "onClose", "entries", "value", "isEmpty", "fields", "isRecord", "sections", "React", "MetadataTable", "section", "sectionLabels", "groupGeneral", "gfLabels", "monospaceKeys", "SequenceTextArea", "MetadataDialog_default"]
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as b,c as k,d as C}from"./chunk-KYQ2SO7B.js";import{d as M}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=MsaViewPanel-
|
|
1
|
+
import{a as b,c as k,d as C}from"./chunk-KYQ2SO7B.js";import{d as M}from"./chunk-RTIGCYCA.js";import"./chunk-MDZDMDUF.js";import"./chunk-YTIKINP5.js";import"./chunk-IBVOKJV3.js";import"./chunk-YXL36I7H.js";import"./chunk-FCWXYIFC.js";import{a as B}from"./chunk-M2AAIXY5.js";import"./chunk-6GRHBYHB.js";import"./chunk-QWXSEUZI.js";import"./chunk-K55ZVN73.js";import{a as L}from"./chunk-NSASZ5FM.js";import"./chunk-EKTRLQV7.js";import"./chunk-W5VCM3IV.js";import"./chunk-4IRL4OLU.js";import"./chunk-73KAPCJ2.js";import"./chunk-Y7M36762.js";import{a as y}from"./chunk-CVLB4VFP.js";import{a as P}from"./chunk-DNFD5II2.js";import{a as w}from"./chunk-BX4Z274Q.js";import{a as h}from"./chunk-J6KYLXRD.js";import{b as i}from"./chunk-FY3BTKY4.js";var e=i(h()),z=i(P()),E=i(y());var I=i(L());var o=i(h()),d=i(P()),n=i(w()),S=i(y()),x=i(L());var c=i(h()),J=i(w());function N({jobId:s}){let r=C(s)?k(s):b(s);return c.default.createElement(J.Typography,null,"Job ",s," (",c.default.createElement(B,{href:r},"see status"),")")}var v=N;var U=(0,x.makeStyles)()({margin:{padding:20},progressRow:{display:"flex",alignItems:"center",gap:12}}),D=(0,S.observer)(function({model:r}){let{progress:u,rid:a,error:m}=r,{classes:t}=U(),f=!r.launchCompleted,{blastParams:l,orthologParams:g}=r,p=l?`Running EBI ${l.searchProgram==="phmmer"?"phmmer":"BLAST"}`:g?g.source==="uniref"?"Building UniRef homolog alignment":"Building ortholog alignment":"Loading alignment";return o.default.createElement("div",{className:t.margin},m?o.default.createElement(o.default.Fragment,null,o.default.createElement(n.Typography,{variant:"h5"},f?`${p} failed`:"Alignment no longer available"),a?o.default.createElement(v,{jobId:a}):null,o.default.createElement(d.ErrorMessage,{error:m}),o.default.createElement("div",{className:t.progressRow},o.default.createElement(n.Button,{variant:"outlined",size:"small",onClick:()=>{r.retryLaunch()}},"Retry"),o.default.createElement(n.Button,{variant:"outlined",size:"small",onClick:()=>{r.cancelLaunch()}},"Dismiss"))):o.default.createElement(o.default.Fragment,null,o.default.createElement(d.LoadingEllipses,{message:p,variant:"h5"}),a?o.default.createElement(v,{jobId:a}):null,o.default.createElement("div",{className:t.progressRow},o.default.createElement(n.Typography,null,u||"Initializing"),o.default.createElement(n.Button,{variant:"outlined",size:"small",onClick:()=>{r.cancelLaunch()}},"Cancel"))))}),V=D;var $=(0,I.makeStyles)()({loadingContainer:{padding:20}}),q=(0,E.observer)(function({model:r}){let{classes:u}=$(),{blastParams:a,orthologParams:m,init:t,loadingStoredData:f}=r,l=a??m,g=!!l&&!r.launchCompleted,p=!!(r.data.msa||r.data.tree),T=!!l&&!!r.error&&!p,A=g||T||!!t&&!r.dataInitialized;return e.default.createElement("div",null,A?e.default.createElement(V,{model:r}):f&&!r.dataInitialized?e.default.createElement("div",{className:u.loadingContainer},e.default.createElement(z.LoadingEllipses,{message:"Loading MSA data",variant:"h6"})):e.default.createElement(M,{model:r}))}),X=q;export{X as default};
|
|
2
|
+
//# sourceMappingURL=MsaViewPanel-4PHVMXIL.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as l}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=TrackInfoDialog-
|
|
1
|
+
import{a as l}from"./chunk-GFANDTQR.js";import{a as k}from"./chunk-Y7M36762.js";import{a as p}from"./chunk-CVLB4VFP.js";import{a as f}from"./chunk-DNFD5II2.js";import{a as g}from"./chunk-BX4Z274Q.js";import{a as d}from"./chunk-J6KYLXRD.js";import{b as o}from"./chunk-FY3BTKY4.js";var e=o(d(),1),c=o(f(),1),i=o(k(),1),t=o(g(),1),m=o(p(),1);var E=(0,i.makeStyles)()(a=>({textArea:{padding:a.spacing(2),overflow:"auto",background:a.palette.action.selected,wordBreak:"break-word"}})),x=(0,m.observer)(function({model:a,onClose:n}){let{name:s,data:r}=a,{classes:u}=E();return e.default.createElement(c.Dialog,{open:!0,onClose:n,fullWidth:!0,maxWidth:"lg",title:`Track info - ${s}`},e.default.createElement(t.DialogContent,null,r===void 0?e.default.createElement(t.Typography,null,"This track has no text data."):e.default.createElement(e.default.Fragment,null,e.default.createElement(l,{text:r}),e.default.createElement("pre",{className:u.textArea},r))),e.default.createElement(t.DialogActions,null,e.default.createElement(t.Button,{variant:"contained",onClick:n,color:"secondary"},"Close")))}),h=x;export{h as default};
|
|
2
|
+
//# sourceMappingURL=TrackInfoDialog-WJAJNV5S.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/react-msaview@9.
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/react-msaview@9.8.0_a4121c98828e538e8b3708814bbfe622/node_modules/react-msaview/src/components/dialogs/TrackInfoDialog.tsx"],
|
|
4
4
|
"sourcesContent": ["import React from 'react'\n\nimport { Dialog } from '@jbrowse/core/ui'\nimport { makeStyles } from '@jbrowse/core/util/tss-react'\nimport { Button, DialogActions, DialogContent, Typography } from '@mui/material'\nimport { observer } from 'mobx-react'\n\nimport CopyButton from '../CopyButton.tsx'\n\nimport type { BasicTrack } from '../../types.ts'\n\nconst useStyles = makeStyles()(theme => ({\n textArea: {\n padding: theme.spacing(2),\n overflow: 'auto',\n background: theme.palette.action.selected,\n wordBreak: 'break-word',\n },\n}))\n\nconst TrackInfoDialog = observer(function ({\n model,\n onClose,\n}: {\n model: BasicTrack['model']\n onClose: () => void\n}) {\n const { name, data } = model\n const { classes } = useStyles()\n return (\n <Dialog\n open\n onClose={onClose}\n fullWidth\n maxWidth=\"lg\"\n title={`Track info - ${name}`}\n >\n <DialogContent>\n {/* the bar tracks (conservation) are computed per column and carry no\n text of their own, so there is nothing to show or copy for them */}\n {data === undefined ? (\n <Typography>This track has no text data.</Typography>\n ) : (\n <>\n <CopyButton text={data} />\n <pre className={classes.textArea}>{data}</pre>\n </>\n )}\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={onClose} color=\"secondary\">\n Close\n </Button>\n </DialogActions>\n </Dialog>\n )\n})\n\nexport default TrackInfoDialog\n"],
|
|
5
5
|
"mappings": "wRAAA,IAAAA,EAAkB,SAElBC,EAAuB,SACvBC,EAA2B,SAC3BC,EAAiE,SACjEC,EAAyB,SAMzB,IAAMC,KAAY,cAAU,EAAGC,IAAU,CACvC,SAAU,CACR,QAASA,EAAM,QAAQ,CAAC,EACxB,SAAU,OACV,WAAYA,EAAM,QAAQ,OAAO,SACjC,UAAW,eAEb,EAEIC,KAAkB,YAAS,SAAU,CACzC,MAAAC,EACA,QAAAC,CAAO,EAIR,CACC,GAAM,CAAE,KAAAC,EAAM,KAAAC,CAAI,EAAKH,EACjB,CAAE,QAAAI,CAAO,EAAKP,EAAS,EAC7B,OACE,EAAAQ,QAAA,cAAC,SAAM,CACL,KAAI,GACJ,QAASJ,EACT,UAAS,GACT,SAAS,KACT,MAAO,gBAAgBC,CAAI,EAAE,EAE7B,EAAAG,QAAA,cAAC,gBAAa,KAGXF,IAAS,OACR,EAAAE,QAAA,cAAC,aAAU,KAAA,8BAAA,EAEX,EAAAA,QAAA,cAAA,EAAAA,QAAA,SAAA,KACE,EAAAA,QAAA,cAACC,EAAU,CAAC,KAAMH,CAAI,CAAA,EACtB,EAAAE,QAAA,cAAA,MAAA,CAAK,UAAWD,EAAQ,QAAQ,EAAGD,CAAI,CAAO,CAEjD,EAEH,EAAAE,QAAA,cAAC,gBAAa,KACZ,EAAAA,QAAA,cAAC,SAAM,CAAC,QAAQ,YAAY,QAASJ,EAAS,MAAM,WAAW,EAAA,OAAA,CAEtD,CACK,CAGtB,CAAC,EAEDM,EAAeR",
|
|
6
6
|
"names": ["import_react", "import_ui", "import_tss_react", "import_material", "import_mobx_react", "useStyles", "theme", "TrackInfoDialog", "model", "onClose", "name", "data", "classes", "React", "CopyButton", "TrackInfoDialog_default"]
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as n,d as c}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=TreeNodeInfoDialog-
|
|
1
|
+
import{c as n,d as c}from"./chunk-5YOLE75H.js";import"./chunk-IBVOKJV3.js";import"./chunk-YXL36I7H.js";import"./chunk-NRAUA3EX.js";import"./chunk-K55ZVN73.js";import"./chunk-73KAPCJ2.js";import"./chunk-GFANDTQR.js";import"./chunk-Y7M36762.js";import{a as g}from"./chunk-CVLB4VFP.js";import{a as h}from"./chunk-DNFD5II2.js";import{a as x}from"./chunk-BX4Z274Q.js";import{a as d}from"./chunk-J6KYLXRD.js";import{b as r}from"./chunk-FY3BTKY4.js";var e=r(d(),1),i=r(h(),1),t=r(x(),1),f=r(g(),1);var T=(0,f.observer)(function({info:u,model:o,nodeName:a,onClose:E}){let{rows:p}=o,l=o.rowDataOf(a),m=p.find(s=>s[0]===a);return e.default.createElement(i.Dialog,{onClose:()=>{E()},open:!0,title:"Tree node info",maxWidth:"xl"},e.default.createElement(t.DialogContent,null,e.default.createElement(t.Typography,{variant:"h6"},"Attributes"),e.default.createElement(n,{record:{nodeName:a,...u}}),e.default.createElement(t.Typography,{variant:"h6"},"Sequence"),m?e.default.createElement(c,{str:[m]}):e.default.createElement(t.Typography,null,"Sequence not found"),l?e.default.createElement(e.default.Fragment,null,e.default.createElement(t.Typography,{variant:"h6"},"Extra metadata"),e.default.createElement(n,{record:l})):null))}),b=T;export{b as default};
|
|
2
|
+
//# sourceMappingURL=TreeNodeInfoDialog-JATVC2AB.js.map
|
package/dist/chunks/{TreeNodeInfoDialog-PY22OL3S.js.map → TreeNodeInfoDialog-JATVC2AB.js.map}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/react-msaview@9.
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/react-msaview@9.8.0_a4121c98828e538e8b3708814bbfe622/node_modules/react-msaview/src/components/tree/dialogs/TreeNodeInfoDialog.tsx"],
|
|
4
4
|
"sourcesContent": ["import React from 'react'\n\nimport { Dialog } from '@jbrowse/core/ui'\nimport { DialogContent, Typography } from '@mui/material'\nimport { observer } from 'mobx-react'\n\nimport MetadataTable from '../../MetadataTable.tsx'\nimport SequenceTextArea from '../../SequenceTextArea.tsx'\n\nimport type { MsaViewModel } from '../../../model.ts'\n\nconst TreeNodeInfoDialog = observer(function ({\n info,\n model,\n nodeName,\n onClose,\n}: {\n info: Record<string, unknown>\n model: MsaViewModel\n nodeName: string\n onClose: () => void\n}) {\n const { rows } = model\n const metadata = model.rowDataOf(nodeName)\n const res = rows.find(f => f[0] === nodeName)\n return (\n <Dialog\n onClose={() => {\n onClose()\n }}\n open\n title=\"Tree node info\"\n maxWidth=\"xl\"\n >\n <DialogContent>\n <Typography variant=\"h6\">Attributes</Typography>\n <MetadataTable record={{ nodeName, ...info }} />\n <Typography variant=\"h6\">Sequence</Typography>\n {res ? (\n <SequenceTextArea str={[res]} />\n ) : (\n <Typography>Sequence not found</Typography>\n )}\n {metadata ? (\n <>\n <Typography variant=\"h6\">Extra metadata</Typography>\n <MetadataTable record={metadata} />\n </>\n ) : null}\n </DialogContent>\n </Dialog>\n )\n})\n\nexport default TreeNodeInfoDialog\n"],
|
|
5
5
|
"mappings": "2bAAA,IAAAA,EAAkB,SAElBC,EAAuB,SACvBC,EAA0C,SAC1CC,EAAyB,SAOzB,IAAMC,KAAqB,YAAS,SAAU,CAC5C,KAAAC,EACA,MAAAC,EACA,SAAAC,EACA,QAAAC,CAAO,EAMR,CACC,GAAM,CAAE,KAAAC,CAAI,EAAKH,EACXI,EAAWJ,EAAM,UAAUC,CAAQ,EACnCI,EAAMF,EAAK,KAAKG,GAAKA,EAAE,CAAC,IAAML,CAAQ,EAC5C,OACE,EAAAM,QAAA,cAAC,SAAM,CACL,QAAS,IAAK,CACZL,EAAO,CACT,EACA,KAAI,GACJ,MAAM,iBACN,SAAS,IAAI,EAEb,EAAAK,QAAA,cAAC,gBAAa,KACZ,EAAAA,QAAA,cAAC,aAAU,CAAC,QAAQ,IAAI,EAAA,YAAA,EACxB,EAAAA,QAAA,cAACC,EAAa,CAAC,OAAQ,CAAE,SAAAP,EAAU,GAAGF,CAAI,CAAE,CAAA,EAC5C,EAAAQ,QAAA,cAAC,aAAU,CAAC,QAAQ,IAAI,EAAA,UAAA,EACvBF,EACC,EAAAE,QAAA,cAACE,EAAgB,CAAC,IAAK,CAACJ,CAAG,CAAC,CAAA,EAE5B,EAAAE,QAAA,cAAC,aAAU,KAAA,oBAAA,EAEZH,EACC,EAAAG,QAAA,cAAA,EAAAA,QAAA,SAAA,KACE,EAAAA,QAAA,cAAC,aAAU,CAAC,QAAQ,IAAI,EAAA,gBAAA,EACxB,EAAAA,QAAA,cAACC,EAAa,CAAC,OAAQJ,CAAQ,CAAA,CAAI,EAEnC,IAAI,CACM,CAGtB,CAAC,EAEDM,EAAeZ",
|
|
6
6
|
"names": ["import_react", "import_ui", "import_material", "import_mobx_react", "TreeNodeInfoDialog", "info", "model", "nodeName", "onClose", "rows", "metadata", "res", "f", "React", "MetadataTable", "SequenceTextArea", "TreeNodeInfoDialog_default"]
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
function c(t){let o=t.length>1;return t.flatMap(r=>[...o?[{key:r.id,label:r.title}]:[],...r.entries.map(e=>({key:`${r.id}:${e.id}`,label:e.label,color:e.color,hint:e.id}))])}var z=new Set(["exon","CDS","five_prime_UTR","three_prime_UTR","UTR","intron"]),G=["#9fb6d4","#d4dcea"];function O(t){return!!t&&/(^|[_ ])site$/i.test(t)}var P=["#8fb3d9","#f2b277","#9fd18f","#c3a5d9","#ee9f9f","#d4c08f","#8fd1cb"],B=["#0f6e52","#a84a00","#5a54a0","#3f6b12","#7a5514"],X=!0,y=!1,k=["both","horizontal","vertical"],Z="both",U=8,Y=5,I=2e3,$=9;function A(t){return Math.min(Math.max(6,t-3),18)}var J=A(16),j=.2,q=.2,K=80,Q=280,V=!0,tt="maeditor",et=!0,ot=!0,rt=!1,nt=70,at=160,it=10,st=.3,lt=!0,ct=["branchLength","input","ladderize","ladderizeReverse"],pt="branchLength",dt=!0,ht=!0,xt=!1,ft=!1,ut=120,gt=500,mt=.25,wt="#fff3c4",Ht=.6,St=5e4,bt=56,g=22,Lt=200,D=1e3,Wt=D+1;var p=8,_=16,R=12,_t=12,E=7,v=360,C=p+R+6;function F(t){let o=t.reduce((e,n)=>Math.max(e,n.label.length),0),r=C+p+o*E;return Math.min(v,Math.max(120,r))}function M(t){return p*2+t.length*_}function Rt(t,o){let{scrollX:r,scrollY:e,totalWidth:n,totalHeight:a,effectiveTreeAreaWidth:m,rowPanelsWidth:w,rowPanelsHeaderHeight:H,totalTrackAreaHeight:S,minimapHeight:b,msaAreaHeight:d,msaCanvasWidth:h,showHorizontalScrollbar:L,treeOverviewHeight:W,treeScaleBar:T}=t,i=o.includeTracks?S:0,l=o.exportType==="viewport"&&!!o.includeMinimap&&L,x=c(t.legends),f=x.length>0?F(x):0,s=Math.max(l?b:0,H,W+(T?g:0)),u=m+w;return o.exportType==="entire"?{width:n+u,msaAreaWidth:n,height:a+i+s,contentHeight:a,trackHeight:i,topHeight:s,offsetX:0,offsetY:0,includeMinimap:l,legendWidth:f}:{width:h+u,msaAreaWidth:h,height:d+s+i,contentHeight:d,trackHeight:i,topHeight:s,offsetX:-r,offsetY:-e,includeMinimap:l,legendWidth:f}}function Et(t,o){let{width:r,height:e,legendWidth:n,topHeight:a}=o;return{width:r+n,height:n>0?Math.max(e,a+M(c(t.legends))):e}}export{c as a,z as b,G as c,O as d,P as e,B as f,X as g,y as h,k as i,Z as j,U as k,Y as l,I as m,$ as n,A as o,J as p,j as q,q as r,K as s,Q as t,V as u,tt as v,et as w,ot as x,rt as y,nt as z,at as A,it as B,st as C,lt as D,ct as E,pt as F,dt as G,ht as H,xt as I,ft as J,ut as K,gt as L,mt as M,wt as N,Ht as O,St as P,bt as Q,g as R,Lt as S,D as T,Wt as U,p as V,_ as W,R as X,_t as Y,E as Z,C as _,M as $,Rt as aa,Et as ba};
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
2
|
+
//# sourceMappingURL=chunk-4IRL4OLU.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/react-msaview@9.
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/react-msaview@9.8.0_a4121c98828e538e8b3708814bbfe622/node_modules/react-msaview/src/components/msa/legendRows.ts", "../../node_modules/.pnpm/react-msaview@9.8.0_a4121c98828e538e8b3708814bbfe622/node_modules/react-msaview/src/constants.ts", "../../node_modules/.pnpm/react-msaview@9.8.0_a4121c98828e538e8b3708814bbfe622/node_modules/react-msaview/src/exportLayout.ts"],
|
|
4
4
|
"sourcesContent": ["import type { Legend } from '../../types.ts'\n\nexport interface LegendRow {\n key: string\n label: string\n color?: string\n hint?: string\n}\n\n// the legends flattened into the rows both the overlay and the export stack\n// top to bottom. A title row separates one legend from the next, and a lone\n// legend needs no title.\nexport function legendRows(legends: Legend[]): LegendRow[] {\n const titled = legends.length > 1\n return legends.flatMap(legend => [\n ...(titled ? [{ key: legend.id, label: legend.title }] : []),\n ...legend.entries.map(entry => ({\n key: `${legend.id}:${entry.id}`,\n label: entry.label,\n color: entry.color,\n hint: entry.id,\n })),\n ])\n}\n", "import type { TreeOrder } from './types.ts'\n\n// Main model defaults\nexport const defaultRowHeight = 16\nexport const defaultColWidth = 12\nexport const defaultHeight = 550\n// the dividers' thickness, between the tree and the alignment and under the view\nexport const resizeHandleWidth = 5\nexport const defaultScrollX = 0\nexport const defaultScrollY = 0\nexport const defaultCurrentAlignment = 0\n// Only a hidden overlay is stored, so a link that never mentions it opens\n// showing its annotations.\nexport const defaultShowDomains = true\nexport const defaultShowDomainLegend = true\nexport const defaultHideGaps = true\nexport const defaultAllowedGappyness = 100\nexport const defaultSubFeatureRows = false\n// height of one sub-row when subFeatureRows is on, unless the row has more\n// lanes than fit at this height (see renderBoxFeatureCanvasBlock)\nexport const subFeatureRowHeight = 4\n// height of the bar the overlay draws under a row in letter-color mode\nexport const domainUnderlineHeight = 3\n\n// Feature types that are ordinal segments of one transcript. The overlay\n// alternates two shades across them and labels them by number, and every other\n// type gets its own color and legend row.\nexport const segmentFeatureTypes = new Set([\n 'exon',\n 'CDS',\n 'five_prime_UTR',\n 'three_prime_UTR',\n 'UTR',\n 'intron',\n])\n\n// the two shades alternated across adjacent segments (exons)\nexport const segmentShades = ['#9fb6d4', '#d4dcea']\n\n/**\n * A site's feature type: CDD's GenPept `Site`, a Sequence Ontology `*_site`,\n * InterPro's `Binding_site`, `Active_site` and `Conserved_site`, and UniProt's\n * `Binding site`. A site is a set of scattered residues, often single columns\n */\nexport function isSiteType(featureType: string | undefined) {\n return !!featureType && /(^|[_ ])site$/i.test(featureType)\n}\n\n// A domain fills a span the residue letters draw over, so it takes a mid-light\n// color, CIELAB L* 70 to 80, dark enough that its ends show against unfilled\n// cells. A site marks a few residues inside a domain, so it takes a dark one,\n// L* 45 or less: a thin mark needs lightness contrast to show on a fill, and\n// hue alone gives none. Neither list holds a grey or a magenta, which a\n// structure view draws for uncolored chains and for the hovered residue\nexport const domainFills = [\n '#8fb3d9',\n '#f2b277',\n '#9fd18f',\n '#c3a5d9',\n '#ee9f9f',\n '#d4c08f',\n '#8fd1cb',\n]\nexport const siteFills = ['#0f6e52', '#a84a00', '#5a54a0', '#3f6b12', '#7a5514']\nexport const defaultDrawMsaLetters = true\nexport const defaultScrollZoom = false\n\n// Which cell dimensions a wheel zoom scales. 'horizontal' holds the row height,\n// which fixes the label and letter font size while the columns compress.\n// 'vertical' does the reverse.\nexport const scrollZoomAxes = ['both', 'horizontal', 'vertical'] as const\nexport type ScrollZoomAxis = (typeof scrollZoomAxes)[number]\nexport const defaultScrollZoomAxis: ScrollZoomAxis = 'both'\n\n// Cell size floors for drawing residue letters and tree labels. Below these a\n// 500px block holds thousands of glyphs, and fillText dominates every zoom\n// frame. A sprite atlas measured slower.\nexport const minLetterRowHeight = 8\nexport const minLetterColWidth = 5\n\n// A wheel-zoom frame draws a block's letters only when the block holds at most\n// this many cells; the settle redraw after the gesture draws the rest\nexport const zoomFrameMaxLetters = 2000\n\n// A feature span draws its label at two pixels under its height, capped at 11,\n// so a span shorter than this holds no readable text: an underline bar, a\n// sub-row band or a features panel over small rows\nexport const minFeatureLabelHeight = 9\n\nexport function fontSizeFor(rowHeight: number) {\n return Math.min(Math.max(6, rowHeight - 3), 18)\n}\n\n// The fitted tree area measures the tip labels and the clade labels at the\n// font a default row draws, so a vertical zoom leaves the alignment in place.\n// A larger font ellipsizes the labels.\nexport const labelFitFontSize = fontSizeFor(defaultRowHeight)\n\n// Zoom limits, px per cell. maxCellSize caps both smooth zoom and the stepwise\n// zoom-in buttons (which otherwise grow unbounded). minColWidth/minRowHeight are\n// the smooth-zoom floors.\nexport const minColWidth = 0.2\nexport const minRowHeight = 0.2\nexport const maxCellSize = 80\n\n// the settings panel's width, which it takes out of the view's\nexport const settingsPanelWidth = 280\n\n// MSA model defaults\nexport const defaultBgColor = true\nexport const defaultColorSchemeName = 'maeditor'\nexport const defaultShowColumnStats = true\n\n// Tree model defaults\nexport const defaultDrawLabels = true\nexport const defaultLabelsAlignRight = false\n// The fitted tree area gives the tree pxPerTreeDepth per level of its depth,\n// between minTreeWidth and maxFitTreeWidth, beside the widest label, and takes\n// at most maxTreeAreaShare of a view with an alignment. Where the share binds,\n// the tree keeps minTreeWidth and the labels ellipsize.\nexport const minTreeWidth = 70\nexport const maxFitTreeWidth = 160\nexport const pxPerTreeDepth = 10\nexport const maxTreeAreaShare = 0.3\nexport const defaultShowBranchLen = true\nexport const treeOrders = [\n 'branchLength',\n 'input',\n 'ladderize',\n 'ladderizeReverse',\n] as const satisfies readonly TreeOrder[]\nexport const defaultTreeOrder: TreeOrder = 'branchLength'\nexport const defaultDrawTree = true\nexport const defaultDrawNodeBubbles = true\nexport const defaultDrawNodeLabels = false\nexport const defaultShowTreeOverview = false\nexport const defaultOverviewHeight = 120\n\n// Neighbor joining does not run above this many rows. The distance matrix is\n// O(n^2*L) and the join loop O(n^3), both on the main thread with no progress\n// and no cancel: 400 rows measured 1.5s, 800 rows 10s, and 1600 would be about\n// seventy. See agent-docs/reference/neighbor-joining-scaling.md.\nexport const maxNeighborJoiningRows = 500\n\n// The opacity a `rowTint` encoding draws its scale's color at, so the residues\n// under the wash stay readable. A color the producer already gave an alpha\n// keeps it.\nexport const rowTintAlpha = 0.25\n\n// The fill a `clades` record with the `highlight` mark draws behind its rows,\n// and the opacity a producer's own color takes when it carries none.\nexport const cladeHighlightColor = '#fff3c4'\nexport const cladeHighlightAlpha = 0.6\n\n// The largest inline document a snapshot carries by default, which keeps a\n// jbrowse session small. A larger pasted or locally-opened file stays in the\n// live model and out of the snapshot, and `unshareableData` warns using the\n// same number. `MSAModelF({ maxInlineSnapshotBytes })` sets another; the demo\n// app's links hold far more.\nexport const maxInlineSnapshotBytes = 50_000\n\n// Height of the band the `rowPanels` headers draw in, above the strips in the\n// top area beside the tree ruler and the minimap. A panel wider than the band\n// is tall writes its header across, where it has more room.\nexport const rowPanelHeaderHeight = 56\n\n// Height of the branch-length scale bar above the tree.\nexport const treeScaleBarHeight = 22\n\n// Width of a `features` row panel that names none, wide enough for a gene\n// neighborhood of a few arrows to read.\nexport const defaultFeaturePanelWidth = 200\n\n// The alignment's overlay canvas draws the mouseover, the persisted highlights\n// and the row tints over the residues, and the legend key floats above that,\n// so a tint reaching the top right corner leaves the key readable.\nexport const msaOverlayZIndex = 1000\nexport const legendZIndex = msaOverlayZIndex + 1\n", "import { legendRows } from './components/msa/legendRows.ts'\nimport { treeScaleBarHeight } from './constants.ts'\n\nimport type { LegendRow } from './components/msa/legendRows.ts'\nimport type { MsaViewModel } from './model.ts'\nimport type { Theme } from '@mui/material'\n\nexport interface ExportSvgOptions {\n theme: Theme\n includeMinimap?: boolean\n includeTracks?: boolean\n exportType: 'entire' | 'viewport'\n}\n\n// legend geometry, shared by the width calculation and the renderer so the\n// reserved column on the right exactly fits the drawn legends\nexport const LEGEND_PAD = 8\nexport const LEGEND_ROW_H = 16\nexport const LEGEND_SWATCH = 12\nexport const LEGEND_FONT = 12\nexport const LEGEND_CHAR_W = 7\n\nexport const LEGEND_MAX_W = 360\nexport const LEGEND_TEXT_X = LEGEND_PAD + LEGEND_SWATCH + 6\n\nexport function getLegendWidth(rows: LegendRow[]) {\n const maxLen = rows.reduce((a, r) => Math.max(a, r.label.length), 0)\n const w = LEGEND_TEXT_X + LEGEND_PAD + maxLen * LEGEND_CHAR_W\n return Math.min(LEGEND_MAX_W, Math.max(120, w))\n}\n\nexport function legendHeight(rows: LegendRow[]) {\n return LEGEND_PAD * 2 + rows.length * LEGEND_ROW_H\n}\n\n// resolved sizes/offsets (in svg user units) for the chosen export, shared by\n// every layer; 'entire' renders the whole alignment unscrolled, 'viewport'\n// mirrors the live scroll position\nexport interface Layout {\n width: number\n msaAreaWidth: number\n height: number\n contentHeight: number\n trackHeight: number\n // the band the minimap, the row panel headers and the tree overview stacked\n // on the scale bar share across the top\n topHeight: number\n offsetX: number\n offsetY: number\n includeMinimap: boolean\n legendWidth: number\n}\n\nexport function getLayout(model: MsaViewModel, opts: ExportSvgOptions): Layout {\n const {\n scrollX,\n scrollY,\n totalWidth,\n totalHeight,\n effectiveTreeAreaWidth,\n rowPanelsWidth,\n rowPanelsHeaderHeight,\n totalTrackAreaHeight,\n minimapHeight,\n msaAreaHeight,\n msaCanvasWidth,\n showHorizontalScrollbar,\n treeOverviewHeight,\n treeScaleBar,\n } = model\n const trackHeight = opts.includeTracks ? totalTrackAreaHeight : 0\n // the minimap reflects the live viewport scroll position, so it's only\n // meaningful for a viewport export, never for the entire alignment -- and\n // only when the live view shows one at all, since a minimap over an alignment\n // that already fits marks a viewport wider than the bar\n const includeMinimap =\n opts.exportType === 'viewport' &&\n !!opts.includeMinimap &&\n showHorizontalScrollbar\n const rows = legendRows(model.legends)\n const legendWidth = rows.length > 0 ? getLegendWidth(rows) : 0\n const topHeight = Math.max(\n includeMinimap ? minimapHeight : 0,\n rowPanelsHeaderHeight,\n treeOverviewHeight + (treeScaleBar ? treeScaleBarHeight : 0),\n )\n const gutterWidth = effectiveTreeAreaWidth + rowPanelsWidth\n\n // width stays content-only; the legend occupies an extra column added at the\n // svg root in MsaSvg. The viewport export takes the alignment canvas's own\n // size rather than the widget's -- the widget box also covers the header, the\n // resize handle and the scrollbars, and rendering that box exports rows and\n // columns the scrollbars hide on screen\n return opts.exportType === 'entire'\n ? {\n width: totalWidth + gutterWidth,\n msaAreaWidth: totalWidth,\n height: totalHeight + trackHeight + topHeight,\n contentHeight: totalHeight,\n trackHeight,\n topHeight,\n offsetX: 0,\n offsetY: 0,\n includeMinimap,\n legendWidth,\n }\n : {\n width: msaCanvasWidth + gutterWidth,\n msaAreaWidth: msaCanvasWidth,\n height: msaAreaHeight + topHeight + trackHeight,\n contentHeight: msaAreaHeight,\n trackHeight,\n topHeight,\n offsetX: -scrollX,\n offsetY: -scrollY,\n includeMinimap,\n legendWidth,\n }\n}\n\n/**\n * the exported page's size: the layout plus the legend column, and as tall as\n * the legend where the key outgrows a short alignment\n */\nexport function exportPageSize(model: MsaViewModel, layout: Layout) {\n const { width, height, legendWidth, topHeight } = layout\n return {\n width: width + legendWidth,\n height:\n legendWidth > 0\n ? Math.max(height, topHeight + legendHeight(legendRows(model.legends)))\n : height,\n }\n}\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["legendRows", "legends", "titled", "legend", "entry", "segmentFeatureTypes", "segmentShades", "isSiteType", "featureType", "domainFills", "siteFills", "defaultDrawMsaLetters", "defaultScrollZoom", "scrollZoomAxes", "defaultScrollZoomAxis", "minLetterRowHeight", "minLetterColWidth", "zoomFrameMaxLetters", "minFeatureLabelHeight", "fontSizeFor", "rowHeight", "labelFitFontSize", "minColWidth", "minRowHeight", "maxCellSize", "settingsPanelWidth", "defaultBgColor", "defaultColorSchemeName", "defaultShowColumnStats", "defaultDrawLabels", "defaultLabelsAlignRight", "minTreeWidth", "maxFitTreeWidth", "pxPerTreeDepth", "maxTreeAreaShare", "defaultShowBranchLen", "treeOrders", "defaultTreeOrder", "defaultDrawTree", "defaultDrawNodeBubbles", "defaultDrawNodeLabels", "defaultShowTreeOverview", "defaultOverviewHeight", "maxNeighborJoiningRows", "rowTintAlpha", "cladeHighlightColor", "cladeHighlightAlpha", "maxInlineSnapshotBytes", "rowPanelHeaderHeight", "treeScaleBarHeight", "defaultFeaturePanelWidth", "msaOverlayZIndex", "legendZIndex", "LEGEND_PAD", "LEGEND_ROW_H", "LEGEND_SWATCH", "LEGEND_FONT", "LEGEND_CHAR_W", "LEGEND_MAX_W", "LEGEND_TEXT_X", "getLegendWidth", "rows", "maxLen", "a", "r", "w", "legendHeight", "getLayout", "model", "opts", "scrollX", "scrollY", "totalWidth", "totalHeight", "effectiveTreeAreaWidth", "rowPanelsWidth", "rowPanelsHeaderHeight", "totalTrackAreaHeight", "minimapHeight", "msaAreaHeight", "msaCanvasWidth", "showHorizontalScrollbar", "treeOverviewHeight", "treeScaleBar", "trackHeight", "includeMinimap", "legendRows", "legendWidth", "topHeight", "treeScaleBarHeight", "gutterWidth", "exportPageSize", "layout", "width", "height"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{a as S}from"./chunk-
|
|
1
|
+
import{a as S}from"./chunk-IBVOKJV3.js";import{d as y}from"./chunk-YXL36I7H.js";import{a as g}from"./chunk-NRAUA3EX.js";import{a as w}from"./chunk-GFANDTQR.js";import{a as h}from"./chunk-Y7M36762.js";import{a as N}from"./chunk-BX4Z274Q.js";import{a as x}from"./chunk-J6KYLXRD.js";import{b as d}from"./chunk-FY3BTKY4.js";var l=d(x(),1),E=d(h(),1),T=(0,E.makeStyles)()(e=>({list:{display:"grid",gridTemplateColumns:"minmax(8em, max-content) minmax(0, 1fr)",columnGap:e.spacing(3),margin:0},row:{display:"contents"},key:{fontWeight:600,padding:e.spacing(.75,0),borderTop:`1px solid ${e.palette.divider}`},code:{marginLeft:e.spacing(1),fontWeight:400,fontSize:"0.75em",fontFamily:"monospace",color:e.palette.text.secondary},value:{margin:0,padding:e.spacing(.75,0),borderTop:`1px solid ${e.palette.divider}`,whiteSpace:"pre-wrap",overflowWrap:"anywhere"},mono:{fontFamily:"monospace",fontSize:"0.85em",maxHeight:"8em",overflow:"auto"},nested:{"& > dl":{paddingLeft:e.spacing(2),borderLeft:`2px solid ${e.palette.divider}`}}}));function b(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&!l.default.isValidElement(e)}function $(e){return b(e)&&Object.keys(e).length===0}function C({record:e,labels:s={},monospaceKeys:t}){let{classes:o,cx:i}=T();return l.default.createElement("dl",{className:o.list},Object.entries(e).filter(([,n])=>n!=null&&!$(n)).map(([n,r])=>{let m=s[n],c=b(r);return l.default.createElement("div",{key:n,className:o.row},l.default.createElement("dt",{className:o.key},m??n,m&&m!==n?l.default.createElement("span",{className:o.code},n):null),l.default.createElement("dd",{className:i(o.value,c&&o.nested,t?.has(n)&&o.mono)},c?l.default.createElement(C,{record:r,labels:s,monospaceKeys:t}):Array.isArray(r)?r.join(`
|
|
2
2
|
`):l.default.isValidElement(r)?r:String(r)))}))}var a=d(x(),1),A=d(h(),1),f=d(N(),1);var F=(0,A.makeStyles)()(e=>({textAreaFont:{fontFamily:"Courier New",wordWrap:"break-word"},dialogContent:{background:e.palette.action.selected,margin:4}})),R=100,j=2e5;function k([e,s],t){return`>${e}
|
|
3
3
|
${t?s:y(s)}`}function L(e){return!/[^.-]/.test(e)}function W(e,s){let t=[],o=0;for(let i of e){if(t.length>=R||o>=j)break;let n=k(i,s);t.push(n),o+=n.length+1}return{text:t.join(`
|
|
4
4
|
`),hidden:e.length-t.length}}function G({str:e}){let{classes:s}=F(),[t,o]=(0,a.useState)(!1),[i,n]=(0,a.useState)(!1),r=i?e:e.filter(([,p])=>t?!!p:!L(p)),{text:m,hidden:c}=W(r,t),u=()=>r.map(p=>k(p,t)).join(`
|
|
5
5
|
`);return a.default.createElement(a.default.Fragment,null,a.default.createElement(w,{text:u}),a.default.createElement(f.Button,{onClick:()=>{S(new Blob([u()],{type:"text/plain"}),"sequences.fasta")}},"Download"),a.default.createElement(g,{label:"Show gaps",checked:t,onChange:()=>{o(!t)}}),a.default.createElement(g,{label:"Show empty",checked:i,onChange:()=>{n(!i)}}),a.default.createElement(f.TextField,{variant:"outlined",multiline:!0,className:s.dialogContent,minRows:5,maxRows:10,fullWidth:!0,value:m,helperText:c>0?`Showing ${r.length-c} of ${r.length.toLocaleString()} sequences. ${c.toLocaleString()} more are in the copy and the download.`:void 0,slotProps:{input:{readOnly:!0,className:s.textAreaFont}}}))}export{b as a,$ as b,C as c,G as d};
|
|
6
|
-
//# sourceMappingURL=chunk-
|
|
6
|
+
//# sourceMappingURL=chunk-5YOLE75H.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/react-msaview@9.
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/react-msaview@9.8.0_a4121c98828e538e8b3708814bbfe622/node_modules/react-msaview/src/components/MetadataTable.tsx", "../../node_modules/.pnpm/react-msaview@9.8.0_a4121c98828e538e8b3708814bbfe622/node_modules/react-msaview/src/components/SequenceTextArea.tsx"],
|
|
4
4
|
"sourcesContent": ["import React from 'react'\n\nimport { makeStyles } from '@jbrowse/core/util/tss-react'\n\nconst useStyles = makeStyles()(theme => ({\n list: {\n display: 'grid',\n gridTemplateColumns: 'minmax(8em, max-content) minmax(0, 1fr)',\n columnGap: theme.spacing(3),\n margin: 0,\n },\n row: {\n display: 'contents',\n },\n key: {\n fontWeight: 600,\n padding: theme.spacing(0.75, 0),\n borderTop: `1px solid ${theme.palette.divider}`,\n },\n code: {\n marginLeft: theme.spacing(1),\n fontWeight: 400,\n fontSize: '0.75em',\n fontFamily: 'monospace',\n color: theme.palette.text.secondary,\n },\n value: {\n margin: 0,\n padding: theme.spacing(0.75, 0),\n borderTop: `1px solid ${theme.palette.divider}`,\n whiteSpace: 'pre-wrap',\n overflowWrap: 'anywhere',\n },\n mono: {\n fontFamily: 'monospace',\n fontSize: '0.85em',\n maxHeight: '8em',\n overflow: 'auto',\n },\n nested: {\n '& > dl': {\n paddingLeft: theme.spacing(2),\n borderLeft: `2px solid ${theme.palette.divider}`,\n },\n },\n}))\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n !React.isValidElement(value)\n )\n}\n\nexport function isEmpty(value: unknown) {\n return isRecord(value) && Object.keys(value).length === 0\n}\n\nexport default function MetadataTable({\n record,\n labels = {},\n monospaceKeys,\n}: {\n record: Record<string, unknown>\n labels?: Record<string, string>\n monospaceKeys?: Set<string>\n}) {\n const { classes, cx } = useStyles()\n return (\n <dl className={classes.list}>\n {Object.entries(record)\n .filter(([, value]) => value != null && !isEmpty(value))\n .map(([key, value]) => {\n const label = labels[key]\n const nested = isRecord(value)\n return (\n <div key={key} className={classes.row}>\n <dt className={classes.key}>\n {label ?? key}\n {label && label !== key ? (\n <span className={classes.code}>{key}</span>\n ) : null}\n </dt>\n <dd\n className={cx(\n classes.value,\n nested && classes.nested,\n monospaceKeys?.has(key) && classes.mono,\n )}\n >\n {nested ? (\n <MetadataTable\n record={value}\n labels={labels}\n monospaceKeys={monospaceKeys}\n />\n ) : Array.isArray(value) ? (\n value.join('\\n')\n ) : React.isValidElement(value) ? (\n value\n ) : (\n String(value)\n )}\n </dd>\n </div>\n )\n })}\n </dl>\n )\n}\n", "import React, { useState } from 'react'\n\nimport { makeStyles } from '@jbrowse/core/util/tss-react'\nimport { Button, TextField } from '@mui/material'\nimport { getUngappedSequence } from 'msa-parsers'\n\nimport { saveAs } from '../vendor/fileSaver.ts'\nimport Checkbox2 from './Checkbox2.tsx'\nimport CopyButton from './CopyButton.tsx'\n\nconst useStyles = makeStyles()(theme => ({\n textAreaFont: {\n fontFamily: 'Courier New',\n wordWrap: 'break-word',\n },\n dialogContent: {\n background: theme.palette.action.selected,\n margin: 4,\n },\n}))\n\nexport const maxShownRecords = 100\nexport const maxShownChars = 200_000\n\nfunction fastaRecord([name, seq]: [string, string], showGaps: boolean) {\n return `>${name}\\n${showGaps ? seq : getUngappedSequence(seq)}`\n}\n\nfunction isAllGaps(seq: string) {\n return !/[^.-]/.test(seq)\n}\n\n/**\n * The first records of `rows` as FASTA, up to `maxShownRecords` records or\n * `maxShownChars` characters, whichever comes first. A textarea holding every\n * row of a large alignment freezes the page.\n */\nexport function fastaPreview(rows: [string, string][], showGaps: boolean) {\n const shown: string[] = []\n let chars = 0\n for (const row of rows) {\n if (shown.length >= maxShownRecords || chars >= maxShownChars) {\n break\n }\n const record = fastaRecord(row, showGaps)\n shown.push(record)\n chars += record.length + 1\n }\n return { text: shown.join('\\n'), hidden: rows.length - shown.length }\n}\n\nexport default function SequenceTextArea({ str }: { str: [string, string][] }) {\n const { classes } = useStyles()\n const [showGaps, setShowGaps] = useState(false)\n const [showEmpty, setShowEmpty] = useState(false)\n\n const rows = showEmpty\n ? str\n : str.filter(([, seq]) => (showGaps ? !!seq : !isAllGaps(seq)))\n const { text, hidden } = fastaPreview(rows, showGaps)\n const fullText = () => rows.map(row => fastaRecord(row, showGaps)).join('\\n')\n return (\n <>\n <CopyButton text={fullText} />\n <Button\n onClick={() => {\n saveAs(\n new Blob([fullText()], { type: 'text/plain' }),\n 'sequences.fasta',\n )\n }}\n >\n Download\n </Button>\n <Checkbox2\n label=\"Show gaps\"\n checked={showGaps}\n onChange={() => {\n setShowGaps(!showGaps)\n }}\n />\n <Checkbox2\n label=\"Show empty\"\n checked={showEmpty}\n onChange={() => {\n setShowEmpty(!showEmpty)\n }}\n />\n <TextField\n variant=\"outlined\"\n multiline\n className={classes.dialogContent}\n minRows={5}\n maxRows={10}\n fullWidth\n value={text}\n helperText={\n hidden > 0\n ? `Showing ${rows.length - hidden} of ${rows.length.toLocaleString()} sequences. ${hidden.toLocaleString()} more are in the copy and the download.`\n : undefined\n }\n slotProps={{\n input: {\n readOnly: true,\n className: classes.textAreaFont,\n },\n }}\n />\n </>\n )\n}\n"],
|
|
5
5
|
"mappings": "gUAAA,IAAAA,EAAkB,SAElBC,EAA2B,SAErBC,KAAY,cAAU,EAAGC,IAAU,CACvC,KAAM,CACJ,QAAS,OACT,oBAAqB,0CACrB,UAAWA,EAAM,QAAQ,CAAC,EAC1B,OAAQ,GAEV,IAAK,CACH,QAAS,YAEX,IAAK,CACH,WAAY,IACZ,QAASA,EAAM,QAAQ,IAAM,CAAC,EAC9B,UAAW,aAAaA,EAAM,QAAQ,OAAO,IAE/C,KAAM,CACJ,WAAYA,EAAM,QAAQ,CAAC,EAC3B,WAAY,IACZ,SAAU,SACV,WAAY,YACZ,MAAOA,EAAM,QAAQ,KAAK,WAE5B,MAAO,CACL,OAAQ,EACR,QAASA,EAAM,QAAQ,IAAM,CAAC,EAC9B,UAAW,aAAaA,EAAM,QAAQ,OAAO,GAC7C,WAAY,WACZ,aAAc,YAEhB,KAAM,CACJ,WAAY,YACZ,SAAU,SACV,UAAW,MACX,SAAU,QAEZ,OAAQ,CACN,SAAU,CACR,YAAaA,EAAM,QAAQ,CAAC,EAC5B,WAAY,aAAaA,EAAM,QAAQ,OAAO,MAGlD,EAEI,SAAUC,EAASC,EAAc,CACrC,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,CAAC,MAAM,QAAQA,CAAK,GACpB,CAAC,EAAAC,QAAM,eAAeD,CAAK,CAE/B,CAEM,SAAUE,EAAQF,EAAc,CACpC,OAAOD,EAASC,CAAK,GAAK,OAAO,KAAKA,CAAK,EAAE,SAAW,CAC1D,CAEc,SAAPG,EAA+B,CACpC,OAAAC,EACA,OAAAC,EAAS,CAAA,EACT,cAAAC,CAAa,EAKd,CACC,GAAM,CAAE,QAAAC,EAAS,GAAAC,CAAE,EAAKX,EAAS,EACjC,OACE,EAAAI,QAAA,cAAA,KAAA,CAAI,UAAWM,EAAQ,IAAI,EACxB,OAAO,QAAQH,CAAM,EACnB,OAAO,CAAC,CAAC,CAAEJ,CAAK,IAAMA,GAAS,MAAQ,CAACE,EAAQF,CAAK,CAAC,EACtD,IAAI,CAAC,CAACS,EAAKT,CAAK,IAAK,CACpB,IAAMU,EAAQL,EAAOI,CAAG,EAClBE,EAASZ,EAASC,CAAK,EAC7B,OACE,EAAAC,QAAA,cAAA,MAAA,CAAK,IAAKQ,EAAK,UAAWF,EAAQ,GAAG,EACnC,EAAAN,QAAA,cAAA,KAAA,CAAI,UAAWM,EAAQ,GAAG,EACvBG,GAASD,EACTC,GAASA,IAAUD,EAClB,EAAAR,QAAA,cAAA,OAAA,CAAM,UAAWM,EAAQ,IAAI,EAAGE,CAAG,EACjC,IAAI,EAEV,EAAAR,QAAA,cAAA,KAAA,CACE,UAAWO,EACTD,EAAQ,MACRI,GAAUJ,EAAQ,OAClBD,GAAe,IAAIG,CAAG,GAAKF,EAAQ,IAAI,CACxC,EAEAI,EACC,EAAAV,QAAA,cAACE,EAAa,CACZ,OAAQH,EACR,OAAQK,EACR,cAAeC,CAAa,CAAA,EAE5B,MAAM,QAAQN,CAAK,EACrBA,EAAM,KAAK;CAAI,EACb,EAAAC,QAAM,eAAeD,CAAK,EAC5BA,EAEA,OAAOA,CAAK,CACb,CACE,CAGX,CAAC,CAAC,CAGV,CC/GA,IAAAY,EAAgC,SAEhCC,EAA2B,SAC3BC,EAAkC,SAOlC,IAAMC,KAAY,cAAU,EAAGC,IAAU,CACvC,aAAc,CACZ,WAAY,cACZ,SAAU,cAEZ,cAAe,CACb,WAAYA,EAAM,QAAQ,OAAO,SACjC,OAAQ,IAEV,EAEWC,EAAkB,IAClBC,EAAgB,IAE7B,SAASC,EAAY,CAACC,EAAMC,CAAG,EAAqBC,EAAiB,CACnE,MAAO,IAAIF,CAAI;EAAKE,EAAWD,EAAME,EAAoBF,CAAG,CAAC,EAC/D,CAEA,SAASG,EAAUH,EAAW,CAC5B,MAAO,CAAC,QAAQ,KAAKA,CAAG,CAC1B,CAOM,SAAUI,EAAaC,EAA0BJ,EAAiB,CACtE,IAAMK,EAAkB,CAAA,EACpBC,EAAQ,EACZ,QAAWC,KAAOH,EAAM,CACtB,GAAIC,EAAM,QAAUV,GAAmBW,GAASV,EAC9C,MAEF,IAAMY,EAASX,EAAYU,EAAKP,CAAQ,EACxCK,EAAM,KAAKG,CAAM,EACjBF,GAASE,EAAO,OAAS,CAC3B,CACA,MAAO,CAAE,KAAMH,EAAM,KAAK;CAAI,EAAG,OAAQD,EAAK,OAASC,EAAM,MAAM,CACrE,CAEc,SAAPI,EAAkC,CAAE,IAAAC,CAAG,EAA+B,CAC3E,GAAM,CAAE,QAAAC,CAAO,EAAKlB,EAAS,EACvB,CAACO,EAAUY,CAAW,KAAI,YAAS,EAAK,EACxC,CAACC,EAAWC,CAAY,KAAI,YAAS,EAAK,EAE1CV,EAAOS,EACTH,EACAA,EAAI,OAAO,CAAC,CAAC,CAAEX,CAAG,IAAOC,EAAW,CAAC,CAACD,EAAM,CAACG,EAAUH,CAAG,CAAE,EAC1D,CAAE,KAAAgB,EAAM,OAAAC,CAAM,EAAKb,EAAaC,EAAMJ,CAAQ,EAC9CiB,EAAW,IAAMb,EAAK,IAAIG,GAAOV,EAAYU,EAAKP,CAAQ,CAAC,EAAE,KAAK;CAAI,EAC5E,OACE,EAAAkB,QAAA,cAAA,EAAAA,QAAA,SAAA,KACE,EAAAA,QAAA,cAACC,EAAU,CAAC,KAAMF,CAAQ,CAAA,EAC1B,EAAAC,QAAA,cAAC,SAAM,CACL,QAAS,IAAK,CACZE,EACE,IAAI,KAAK,CAACH,EAAQ,CAAE,EAAG,CAAE,KAAM,YAAY,CAAE,EAC7C,iBAAiB,CAErB,CAAC,EAAA,UAAA,EAIH,EAAAC,QAAA,cAACG,EAAS,CACR,MAAM,YACN,QAASrB,EACT,SAAU,IAAK,CACbY,EAAY,CAACZ,CAAQ,CACvB,CAAC,CAAA,EAEH,EAAAkB,QAAA,cAACG,EAAS,CACR,MAAM,aACN,QAASR,EACT,SAAU,IAAK,CACbC,EAAa,CAACD,CAAS,CACzB,CAAC,CAAA,EAEH,EAAAK,QAAA,cAAC,YAAS,CACR,QAAQ,WACR,UAAS,GACT,UAAWP,EAAQ,cACnB,QAAS,EACT,QAAS,GACT,UAAS,GACT,MAAOI,EACP,WACEC,EAAS,EACL,WAAWZ,EAAK,OAASY,CAAM,OAAOZ,EAAK,OAAO,eAAc,CAAE,eAAeY,EAAO,eAAc,CAAE,0CACxG,OAEN,UAAW,CACT,MAAO,CACL,SAAU,GACV,UAAWL,EAAQ,cAEtB,CAAA,CACD,CAGR",
|
|
6
6
|
"names": ["import_react", "import_tss_react", "useStyles", "theme", "isRecord", "value", "React", "isEmpty", "MetadataTable", "record", "labels", "monospaceKeys", "classes", "cx", "key", "label", "nested", "import_react", "import_tss_react", "import_material", "useStyles", "theme", "maxShownRecords", "maxShownChars", "fastaRecord", "name", "seq", "showGaps", "getUngappedSequence", "isAllGaps", "fastaPreview", "rows", "shown", "chars", "row", "record", "SequenceTextArea", "str", "classes", "setShowGaps", "showEmpty", "setShowEmpty", "text", "hidden", "fullText", "React", "CopyButton", "saveAs", "Checkbox2"]
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{b as n}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{b as n}from"./chunk-Y7M36762.js";import{a as f}from"./chunk-BX4Z274Q.js";import{a as p}from"./chunk-J6KYLXRD.js";import{b as i}from"./chunk-FY3BTKY4.js";var e=i(p(),1),c=i(f(),1);function m({text:t,label:u="Copy to clipboard"}){let[a,r]=(0,e.useState)(!1),o=(0,e.useRef)(void 0);return(0,e.useEffect)(()=>()=>{clearTimeout(o.current)},[]),e.default.createElement(c.Button,{variant:"contained",color:"primary",onClick:()=>{n(typeof t=="string"?t:t()),r(!0),clearTimeout(o.current),o.current=setTimeout(()=>{r(!1)},500)}},a?"Copied!":u)}export{m as a};
|
|
2
|
+
//# sourceMappingURL=chunk-GFANDTQR.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/react-msaview@9.
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/react-msaview@9.8.0_a4121c98828e538e8b3708814bbfe622/node_modules/react-msaview/src/components/CopyButton.tsx"],
|
|
4
4
|
"sourcesContent": ["import React, { useEffect, useRef, useState } from 'react'\n\nimport { Button } from '@mui/material'\n\nimport copy from '../vendor/copyToClipboard.ts'\n\n/**\n * Copy-to-clipboard button that confirms on the label for a moment. The timer is\n * cleared on unmount, since these live in dialogs the copy itself often closes.\n */\nexport default function CopyButton({\n text,\n label = 'Copy to clipboard',\n}: {\n text: string | (() => string)\n label?: string\n}) {\n const [copied, setCopied] = useState(false)\n const timer = useRef<ReturnType<typeof setTimeout>>(undefined)\n\n useEffect(\n () => () => {\n clearTimeout(timer.current)\n },\n [],\n )\n\n return (\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n copy(typeof text === 'string' ? text : text())\n setCopied(true)\n clearTimeout(timer.current)\n timer.current = setTimeout(() => {\n setCopied(false)\n }, 500)\n }}\n >\n {copied ? 'Copied!' : label}\n </Button>\n )\n}\n"],
|
|
5
5
|
"mappings": "gKAAA,IAAAA,EAAmD,SAEnDC,EAAuB,SAQT,SAAPC,EAA4B,CACjC,KAAAC,EACA,MAAAC,EAAQ,mBAAmB,EAI5B,CACC,GAAM,CAACC,EAAQC,CAAS,KAAI,YAAS,EAAK,EACpCC,KAAQ,UAAsC,MAAS,EAE7D,sBACE,IAAM,IAAK,CACT,aAAaA,EAAM,OAAO,CAC5B,EACA,CAAA,CAAE,EAIF,EAAAC,QAAA,cAAC,SAAM,CACL,QAAQ,YACR,MAAM,UACN,QAAS,IAAK,CACZC,EAAK,OAAON,GAAS,SAAWA,EAAOA,EAAI,CAAE,EAC7CG,EAAU,EAAI,EACd,aAAaC,EAAM,OAAO,EAC1BA,EAAM,QAAU,WAAW,IAAK,CAC9BD,EAAU,EAAK,CACjB,EAAG,GAAG,CACR,CAAC,EAEAD,EAAS,UAAYD,CAAK,CAGjC",
|
|
6
6
|
"names": ["import_react", "import_material", "CopyButton", "text", "label", "copied", "setCopied", "timer", "React", "copy"]
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
function n(c,o){let t=URL.createObjectURL(c),e=document.createElement("a");e.href=t,e.download=o,e.click(),setTimeout(()=>{URL.revokeObjectURL(t)},4e4)}export{n as a};
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
2
|
+
//# sourceMappingURL=chunk-IBVOKJV3.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/react-msaview@9.
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/react-msaview@9.8.0_a4121c98828e538e8b3708814bbfe622/node_modules/react-msaview/src/vendor/fileSaver.ts"],
|
|
4
4
|
"sourcesContent": ["export function saveAs(blob: Blob, name: string) {\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = name\n a.click()\n setTimeout(() => {\n URL.revokeObjectURL(url)\n }, 40_000)\n}\n"],
|
|
5
5
|
"mappings": "AAAM,SAAUA,EAAOC,EAAYC,EAAY,CAC7C,IAAMC,EAAM,IAAI,gBAAgBF,CAAI,EAC9BG,EAAI,SAAS,cAAc,GAAG,EACpCA,EAAE,KAAOD,EACTC,EAAE,SAAWF,EACbE,EAAE,MAAK,EACP,WAAW,IAAK,CACd,IAAI,gBAAgBD,CAAG,CACzB,EAAG,GAAM,CACX",
|
|
6
6
|
"names": ["saveAs", "blob", "name", "url", "a"]
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/react-msaview@9.
|
|
4
|
-
"sourcesContent": ["export const version = '9.
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/react-msaview@9.8.0_a4121c98828e538e8b3708814bbfe622/node_modules/react-msaview/src/version.ts"],
|
|
4
|
+
"sourcesContent": ["export const version = '9.8.0'\n"],
|
|
5
5
|
"mappings": "AAAO,IAAMA,EAAU",
|
|
6
6
|
"names": ["version"]
|
|
7
7
|
}
|