jbrowse-plugin-graphgenomeviewer 7.4.4 → 7.5.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.
Files changed (129) hide show
  1. package/dist/chunks/{GbzBaseSyntenyAdapter-A5MNPCKX.js → GbzBaseSyntenyAdapter-4KVWVUN6.js} +2 -2
  2. package/dist/chunks/{GbzBaseSyntenyAdapter-A5MNPCKX.js.map → GbzBaseSyntenyAdapter-4KVWVUN6.js.map} +1 -1
  3. package/dist/chunks/{GraphGenomeView-SEAPDRXS.js → GraphGenomeView-KI4FQ5A7.js} +2 -2
  4. package/dist/chunks/GraphTrackSettingsDialog-UQNMDXTE.js +4 -0
  5. package/dist/chunks/GraphTrackSettingsDialog-UQNMDXTE.js.map +7 -0
  6. package/dist/chunks/{HighlightColorDialog-QAYWLO5I.js → HighlightColorDialog-D4RCUCUF.js} +2 -2
  7. package/dist/chunks/LinearGraphDisplay-RPZUZSM2.js +2 -0
  8. package/dist/chunks/{LinearGraphDisplay-ZC4BQ27J.js.map → LinearGraphDisplay-RPZUZSM2.js.map} +2 -2
  9. package/dist/chunks/{MinigraphBubbleAdapter-3QM4XV47.js → MinigraphBubbleAdapter-TJYI7KEN.js} +2 -2
  10. package/dist/chunks/RgfaTabixAdapter-5ZMJLFZP.js +2 -0
  11. package/dist/chunks/RgfaTabixAdapter-5ZMJLFZP.js.map +7 -0
  12. package/dist/chunks/{WalkFormsAdapter-FT2SW4H6.js → WalkFormsAdapter-CAJOWOEX.js} +2 -2
  13. package/dist/chunks/WalkTabixSyntenyAdapter-VI3KA2GX.js +2 -0
  14. package/dist/chunks/{WalkTabixSyntenyAdapter-3WRVNDLB.js.map → WalkTabixSyntenyAdapter-VI3KA2GX.js.map} +2 -2
  15. package/dist/chunks/{chunk-6WUWQX2P.js → chunk-22ANI2KL.js} +2 -2
  16. package/dist/chunks/{chunk-6WUWQX2P.js.map → chunk-22ANI2KL.js.map} +1 -1
  17. package/dist/chunks/chunk-42KD4AVY.js +2 -0
  18. package/dist/chunks/{chunk-HCDKP3IP.js.map → chunk-42KD4AVY.js.map} +4 -4
  19. package/dist/chunks/chunk-4NIWMRKH.js +2 -0
  20. package/dist/chunks/{chunk-S333HOG5.js.map → chunk-4NIWMRKH.js.map} +4 -4
  21. package/dist/chunks/chunk-BCOXRUNQ.js +3 -0
  22. package/dist/chunks/chunk-BCOXRUNQ.js.map +7 -0
  23. package/dist/chunks/chunk-DAPI7M4M.js +4 -0
  24. package/dist/chunks/chunk-DAPI7M4M.js.map +7 -0
  25. package/dist/chunks/{chunk-G53BI7VK.js → chunk-DEWZOJSC.js} +2 -2
  26. package/dist/chunks/{chunk-G53BI7VK.js.map → chunk-DEWZOJSC.js.map} +1 -1
  27. package/dist/chunks/{chunk-6SWXMRAV.js → chunk-FCMXEFJA.js} +1 -1
  28. package/dist/chunks/{chunk-6SWXMRAV.js.map → chunk-FCMXEFJA.js.map} +1 -1
  29. package/dist/chunks/{chunk-P3FBI5ML.js → chunk-GYY6LF5L.js} +1 -1
  30. package/dist/chunks/{chunk-P3FBI5ML.js.map → chunk-GYY6LF5L.js.map} +1 -1
  31. package/dist/chunks/{chunk-HF4H6LQI.js → chunk-HHMJNAA3.js} +2 -2
  32. package/dist/chunks/{chunk-XXBE4IFZ.js → chunk-HTTONSO4.js} +2 -2
  33. package/dist/chunks/{chunk-XXBE4IFZ.js.map → chunk-HTTONSO4.js.map} +1 -1
  34. package/dist/chunks/{chunk-MUONTMYZ.js → chunk-K4JL57NR.js} +2 -2
  35. package/dist/chunks/chunk-KOC23YNN.js +4 -0
  36. package/dist/chunks/chunk-KOC23YNN.js.map +7 -0
  37. package/dist/chunks/{chunk-OJWBLPPH.js → chunk-LTNFVL2F.js} +2 -2
  38. package/dist/chunks/chunk-OZEKEYT3.js +2 -0
  39. package/dist/chunks/{chunk-6VNU7SD4.js.map → chunk-OZEKEYT3.js.map} +4 -4
  40. package/dist/chunks/{chunk-KIYRMZWP.js → chunk-POUV7OPY.js} +2 -2
  41. package/dist/chunks/{chunk-KIYRMZWP.js.map → chunk-POUV7OPY.js.map} +1 -1
  42. package/dist/chunks/{chunk-LE7FZM6Y.js → chunk-SPL3UO2D.js} +2 -2
  43. package/dist/chunks/{chunk-LE7FZM6Y.js.map → chunk-SPL3UO2D.js.map} +1 -1
  44. package/dist/chunks/chunk-UR2MJJUP.js +2 -0
  45. package/dist/chunks/chunk-VTMJQFN5.js +2 -0
  46. package/dist/chunks/chunk-VTMJQFN5.js.map +7 -0
  47. package/dist/chunks/{chunk-2KVE7YAS.js → chunk-XZGYJ3JC.js} +1 -1
  48. package/dist/chunks/{chunk-2KVE7YAS.js.map → chunk-XZGYJ3JC.js.map} +1 -1
  49. package/dist/chunks/{chunk-7RJMG6I2.js → chunk-Z3IKZAYC.js} +1 -1
  50. package/dist/chunks/{chunk-7RJMG6I2.js.map → chunk-Z3IKZAYC.js.map} +1 -1
  51. package/dist/chunks/{chunk-FTXDTU27.js → chunk-ZV5FNOHS.js} +3 -3
  52. package/dist/chunks/{chunk-FTXDTU27.js.map → chunk-ZV5FNOHS.js.map} +2 -2
  53. package/dist/chunks/{renderSvg-ZIUOPWJQ.js → renderSvg-3PPAEMBT.js} +2 -2
  54. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +4 -3
  55. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +4 -4
  56. package/package.json +2 -2
  57. package/src/GraphComputeLayout.test.ts +24 -0
  58. package/src/GraphComputeLayout.ts +4 -2
  59. package/src/GraphGenomeView/components/GraphSettingsDialog.tsx +16 -0
  60. package/src/GraphGenomeView/components/WalkRowsOverlay.tsx +83 -0
  61. package/src/GraphGenomeView/components/usePaneGestures.test.tsx +82 -5
  62. package/src/GraphGenomeView/components/usePaneGestures.ts +10 -4
  63. package/src/GraphGenomeView/graphLayers.ts +14 -1
  64. package/src/GraphGenomeView/legendSections.ts +32 -0
  65. package/src/GraphGenomeView/model.test.ts +292 -4
  66. package/src/GraphGenomeView/model.ts +3 -10
  67. package/src/GraphGenomeView/nodeSize.test.ts +21 -5
  68. package/src/GraphGenomeView/nodeSize.ts +24 -8
  69. package/src/GraphGenomeView/pane/fitViews.ts +5 -1
  70. package/src/GraphGenomeView/pane/graphViews.ts +96 -16
  71. package/src/GraphGenomeView/pane/launchActions.ts +55 -11
  72. package/src/GraphGenomeView/pane/launchViews.ts +46 -0
  73. package/src/GraphGenomeView/pane/loadActions.ts +85 -25
  74. package/src/GraphGenomeView/pane/morph.test.ts +25 -1
  75. package/src/GraphGenomeView/pane/morph.ts +3 -1
  76. package/src/GraphGenomeView/pane/paneBase.ts +5 -0
  77. package/src/GraphGenomeView/pane/renderingActions.ts +61 -2
  78. package/src/GraphGenomeView/pane/settingActions.ts +62 -4
  79. package/src/GraphGenomeView/pane/walkRowViews.ts +17 -6
  80. package/src/GraphGenomeView/tubeMapPanels.ts +2 -1
  81. package/src/GraphGenomeView/viewModel.ts +4 -6
  82. package/src/GraphGenomeView/walkRowBlocks.ts +50 -0
  83. package/src/LinearGraphDisplay/LinearGraphDisplay.test.ts +35 -5
  84. package/src/LinearGraphDisplay/components/GraphStatusChrome.test.tsx +18 -0
  85. package/src/LinearGraphDisplay/components/GraphStatusChrome.tsx +4 -2
  86. package/src/LinearGraphDisplay/components/SubgraphHaplotypesField.test.tsx +41 -1
  87. package/src/LinearGraphDisplay/components/SubgraphHaplotypesField.tsx +33 -19
  88. package/src/LinearGraphDisplay/configSchema.ts +4 -3
  89. package/src/RgfaTabixAdapter/RgfaTabixAdapter.ts +2 -9
  90. package/src/WalkTabixSyntenyAdapter/WalkTabixSyntenyAdapter.ts +3 -6
  91. package/src/hoverSync/graphViewHighlights.test.ts +53 -0
  92. package/src/hoverSync/graphViewHighlights.ts +25 -0
  93. package/src/hoverSync/lgvHover.test.ts +100 -1
  94. package/src/hoverSync/lgvHover.ts +77 -6
  95. package/src/launchFromGraph/contributors.test.ts +52 -0
  96. package/src/launchFromGraph/contributors.ts +105 -1
  97. package/src/launchFromGraph/launchFromGraph.ts +2 -2
  98. package/src/panSNTabix.test.ts +28 -0
  99. package/src/panSNTabix.ts +26 -8
  100. package/src/version.ts +1 -1
  101. package/dist/chunks/GraphTrackSettingsDialog-EVIIGC5G.js +0 -6
  102. package/dist/chunks/GraphTrackSettingsDialog-EVIIGC5G.js.map +0 -7
  103. package/dist/chunks/LinearGraphDisplay-ZC4BQ27J.js +0 -2
  104. package/dist/chunks/RgfaTabixAdapter-XSOIEWBK.js +0 -2
  105. package/dist/chunks/RgfaTabixAdapter-XSOIEWBK.js.map +0 -7
  106. package/dist/chunks/WalkTabixSyntenyAdapter-3WRVNDLB.js +0 -2
  107. package/dist/chunks/chunk-6VNU7SD4.js +0 -2
  108. package/dist/chunks/chunk-GRTN25B6.js +0 -3
  109. package/dist/chunks/chunk-GRTN25B6.js.map +0 -7
  110. package/dist/chunks/chunk-HCDKP3IP.js +0 -2
  111. package/dist/chunks/chunk-LE43I4PT.js +0 -4
  112. package/dist/chunks/chunk-LE43I4PT.js.map +0 -7
  113. package/dist/chunks/chunk-QV7SSOMJ.js +0 -2
  114. package/dist/chunks/chunk-S333HOG5.js +0 -2
  115. package/dist/chunks/chunk-VZQ6VOUP.js +0 -2
  116. package/dist/chunks/chunk-VZQ6VOUP.js.map +0 -7
  117. package/dist/chunks/chunk-WLRRI35A.js +0 -3
  118. package/dist/chunks/chunk-WLRRI35A.js.map +0 -7
  119. package/src/launchFromGraph/launchTracks.test.ts +0 -95
  120. package/src/launchFromGraph/launchTracks.ts +0 -49
  121. /package/dist/chunks/{GraphGenomeView-SEAPDRXS.js.map → GraphGenomeView-KI4FQ5A7.js.map} +0 -0
  122. /package/dist/chunks/{HighlightColorDialog-QAYWLO5I.js.map → HighlightColorDialog-D4RCUCUF.js.map} +0 -0
  123. /package/dist/chunks/{MinigraphBubbleAdapter-3QM4XV47.js.map → MinigraphBubbleAdapter-TJYI7KEN.js.map} +0 -0
  124. /package/dist/chunks/{WalkFormsAdapter-FT2SW4H6.js.map → WalkFormsAdapter-CAJOWOEX.js.map} +0 -0
  125. /package/dist/chunks/{chunk-HF4H6LQI.js.map → chunk-HHMJNAA3.js.map} +0 -0
  126. /package/dist/chunks/{chunk-MUONTMYZ.js.map → chunk-K4JL57NR.js.map} +0 -0
  127. /package/dist/chunks/{chunk-OJWBLPPH.js.map → chunk-LTNFVL2F.js.map} +0 -0
  128. /package/dist/chunks/{chunk-QV7SSOMJ.js.map → chunk-UR2MJJUP.js.map} +0 -0
  129. /package/dist/chunks/{renderSvg-ZIUOPWJQ.js.map → renderSvg-3PPAEMBT.js.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/LinearGraphDisplay/components/SubgraphContextSelect.tsx", "../../src/LinearGraphDisplay/components/SubgraphHaplotypesField.tsx", "../../src/LinearGraphDisplay/components/GraphTrackSettingsDialog.tsx"],
4
- "sourcesContent": ["import { Typography } from '@mui/material'\nimport { observer } from 'mobx-react'\nimport { makeStyles } from 'tss-react/mui'\n\nimport LabelledSelect from '../../GraphGenomeView/components/LabelledSelect'\nimport { walkIndexed } from '../../graphTrackConfig'\n\nimport type { LinearGraphCutModel } from '../model'\n\nconst useStyles = makeStyles()({\n section: {\n marginBottom: 24,\n },\n})\n\n// Only an rGFA cut from segment rows reads hops: a GBZ cut widens by its\n// adapter's bp `context`, and a walk-indexed cut follows its walks.\n// Hops past the region's own segments, each costing a tabix query per\n// off-reference segment already reached. One is the default: at none a single\n// detour draws as two unrelated stubs, which is a wrong picture of the graph\n// rather than a cheaper one. Two exists for a graph whose alleles have alleles\n// (HPRC's amylase window keeps growing at 2, the E. coli paa locus does not), and\n// it stops there because a frontier is still not a bubble decomposition. Cut an\n// exact slice with gfatools when that is what is wanted.\nconst SUBGRAPH_CONTEXTS = [\n { value: '0', label: 'None' },\n { value: '1', label: '1 hop' },\n { value: '2', label: '2 hops' },\n]\n\nconst SubgraphContextSelect = observer(function SubgraphContextSelect({\n model,\n}: {\n model: LinearGraphCutModel\n}) {\n const { classes } = useStyles()\n const adapter = model.sourceAdapter\n return adapter?.type === 'RgfaTabixAdapter' && !walkIndexed(adapter) ? (\n <div className={classes.section}>\n <LabelledSelect\n label=\"Graph context\"\n sx={{ minWidth: 200 }}\n value={String(model.subgraphContext)}\n options={SUBGRAPH_CONTEXTS}\n testId=\"graph-context-select\"\n onChange={hops => {\n model.setSubgraphContext(Number(hops))\n model.recut()\n }}\n />\n <Typography variant=\"caption\" component=\"div\" color=\"text.secondary\">\n How far the cut follows links out of the region. At none, a detour that\n leaves the window draws as two stubs. No effect on gfa-to-tabix&apos;s\n default anchored index.\n </Typography>\n </div>\n ) : null\n})\n\nexport default SubgraphContextSelect\n", "import { useRef, useState } from 'react'\n\nimport { Autocomplete, TextField, Typography } from '@mui/material'\nimport { observer } from 'mobx-react'\nimport { makeStyles } from 'tss-react/mui'\n\nimport { cutsByHaplotype } from '../../graphTrackConfig'\n\nimport type { LinearGraphCutModel } from '../model'\n\nconst useStyles = makeStyles()({\n section: {\n marginBottom: 24,\n },\n})\n\nfunction parseHaplotypeList(text: string) {\n return text.split(/[\\s,]+/).filter(name => name !== '')\n}\n\nconst HaplotypeListField = observer(function HaplotypeListField({\n model,\n}: {\n model: LinearGraphCutModel\n}) {\n const [draft, setDraft] = useState(model.cutHaplotypes?.join(', ') ?? '')\n const apply = () => {\n const parsed = parseHaplotypeList(draft)\n const unchanged =\n parsed.join('\\n') === (model.cutHaplotypes ?? []).join('\\n')\n if (!unchanged) {\n model.setSubgraphHaplotypes(parsed)\n model.recut()\n }\n }\n return (\n <TextField\n fullWidth\n label=\"Haplotypes\"\n placeholder=\"every haplotype\"\n value={draft}\n slotProps={{ htmlInput: { 'data-testid': 'graph-haplotypes-field' } }}\n onChange={e => {\n setDraft(e.target.value)\n }}\n onBlur={() => {\n apply()\n }}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n apply()\n }\n }}\n />\n )\n})\n\n// The haplotypes a walk-indexed graph's header names, searched as typed. A\n// typed prefix the list lacks (HG002 for both haplotypes) is kept too, on\n// Enter or when the field loses focus. The set applies when the list closes\n// or, with the list closed, as it changes. Not MUI's `autoSelect`: in a\n// multiple select its blur toggles the highlighted option, so a pick made by\n// keyboard was dropped again on Tab.\nconst HaplotypePickField = observer(function HaplotypePickField({\n model,\n names,\n}: {\n model: LinearGraphCutModel\n names: string[]\n}) {\n const [draft, setDraft] = useState(model.cutHaplotypes ?? [])\n const draftRef = useRef(draft)\n const typed = useRef('')\n const [open, setOpen] = useState(false)\n const apply = (haplotypes: string[]) => {\n if (haplotypes.join('\\n') !== (model.cutHaplotypes ?? []).join('\\n')) {\n model.setSubgraphHaplotypes(haplotypes)\n model.recut()\n }\n }\n return (\n <Autocomplete\n multiple\n freeSolo\n disableCloseOnSelect\n options={names}\n value={draft}\n open={open}\n onOpen={() => {\n setOpen(true)\n }}\n onInputChange={(_, text) => {\n typed.current = text\n }}\n onClose={(_, reason) => {\n setOpen(false)\n const text = typed.current.trim()\n if (reason === 'blur' && text && !draftRef.current.includes(text)) {\n draftRef.current = [...draftRef.current, text]\n setDraft(draftRef.current)\n }\n apply(draftRef.current)\n }}\n onChange={(_, value) => {\n draftRef.current = value\n setDraft(value)\n if (!open) {\n apply(value)\n }\n }}\n renderInput={params => (\n <TextField\n {...params}\n label=\"Haplotypes\"\n placeholder={draft.length === 0 ? 'every haplotype' : undefined}\n slotProps={{\n ...params.slotProps,\n htmlInput: {\n ...params.slotProps.htmlInput,\n 'data-testid': 'graph-haplotypes-field',\n },\n }}\n />\n )}\n />\n )\n})\n\n// Only a GBZ cut and a walk-indexed rGFA cut read the set. The inner field is\n// keyed on it so an outside change (a restored session, a launch) resets the\n// draft rather than fighting it.\nconst SubgraphHaplotypesField = observer(function SubgraphHaplotypesField({\n model,\n}: {\n model: LinearGraphCutModel\n}) {\n const { classes } = useStyles()\n const names = model.haplotypeNames\n const key = model.cutHaplotypes?.join(',') ?? ''\n const adapter = model.sourceAdapter\n return adapter && cutsByHaplotype(adapter) ? (\n <div className={classes.section}>\n {names ? (\n <HaplotypePickField key={key} model={model} names={names} />\n ) : (\n <HaplotypeListField key={key} model={model} />\n )}\n <Typography variant=\"caption\" component=\"div\" color=\"text.secondary\">\n {names\n ? `Which of the graph's ${names.length.toLocaleString()} haplotypes to cut, or a PanSN prefix (HG002 for both).`\n : 'Which haplotypes to cut, as lane assembly names or PanSN prefixes (HG002#1, or HG002 for both) separated by commas.'}{' '}\n Empty is every haplotype.\n </Typography>\n </div>\n ) : null\n})\n\nexport default SubgraphHaplotypesField\n", "import SubgraphContextSelect from './SubgraphContextSelect'\nimport SubgraphHaplotypesField from './SubgraphHaplotypesField'\nimport GraphSettingsDialog from '../../GraphGenomeView/components/GraphSettingsDialog'\n\nimport type { LinearGraphCutModel } from '../model'\n\nexport default function GraphTrackSettingsDialog({\n model,\n onClose,\n}: {\n model: LinearGraphCutModel\n onClose: () => void\n}) {\n return (\n <GraphSettingsDialog model={model} onClose={onClose}>\n <SubgraphContextSelect model={model} />\n <SubgraphHaplotypesField model={model} />\n </GraphSettingsDialog>\n )\n}\n"],
5
- "mappings": "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",
6
- "names": ["useStyles", "makeStyles", "SUBGRAPH_CONTEXTS", "SubgraphContextSelect", "observer", "model", "classes", "adapter", "walkIndexed", "jsxs", "jsx", "LabelledSelect", "hops", "Typography", "SubgraphContextSelect_default", "useStyles", "makeStyles", "parseHaplotypeList", "text", "name", "HaplotypeListField", "observer", "model", "draft", "setDraft", "useState", "apply", "parsed", "jsx", "TextField", "HaplotypePickField", "names", "draftRef", "useRef", "typed", "open", "setOpen", "haplotypes", "Autocomplete", "_", "reason", "value", "params", "SubgraphHaplotypesField", "classes", "key", "adapter", "cutsByHaplotype", "jsxs", "Typography", "SubgraphHaplotypesField_default", "GraphTrackSettingsDialog", "model", "onClose", "jsxs", "GraphSettingsDialog_default", "jsx", "SubgraphContextSelect_default", "SubgraphHaplotypesField_default"]
7
- }
@@ -1,2 +0,0 @@
1
- import{a as h}from"./chunk-HCDKP3IP.js";import"./chunk-6VNU7SD4.js";import"./chunk-LE43I4PT.js";import"./chunk-GRTN25B6.js";import"./chunk-7RJMG6I2.js";import"./chunk-WLRRI35A.js";import"./chunk-VZQ6VOUP.js";import"./chunk-2KVE7YAS.js";import"./chunk-S333HOG5.js";import"./chunk-P3FBI5ML.js";import"./chunk-6WUWQX2P.js";import"./chunk-KIYRMZWP.js";import"./chunk-YBLNN5FU.js";import"./chunk-G53BI7VK.js";import"./chunk-LE7FZM6Y.js";import"./chunk-YBLNN5FU.js";import"./chunk-JRJHXLGP.js";import"./chunk-6SWXMRAV.js";import"./chunk-IKJZPPOA.js";import"./chunk-NDRLCGPC.js";import"./chunk-TENPGIPX.js";import{h as T}from"./chunk-YU7T5WOQ.js";import"./chunk-UGCNPRKC.js";import{b as e,c as d,d as i}from"./chunk-JMBDTNUR.js";var n=JBrowseExports["@jbrowse/display-kit/DisplayBackgroundProgress"];var f=n&&n.__esModule?n.default:n;var l=JBrowseExports["@jbrowse/display-kit/DisplayErrorBar"];var v=l&&l.__esModule?l.default:l;var p=JBrowseExports["@jbrowse/display-kit/DisplayLoadingOverlay"];var O=p&&p.__esModule?p.default:p;var c=JBrowseExports["@jbrowse/display-kit/TooLargeMessage"];var L=c&&c.__esModule?c.default:c;var s=JBrowseExports["@jbrowse/display-ui"],u=r=>s!=null&&r in Object(s)?s[r]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+r+"' from '@jbrowse/display-ui' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:r});var w=u("BottomRightCornerContext");var g=u("TrackOverlayPortal");var C=u("useChromeOverlayOverride");var U=s&&s.__esModule?s.default:s;var k={TooLarge:L,ErrorBar:v,Loading:O,BackgroundProgress:f},m="Zoom in to see features, or force load this track for the rest of the session (may be slow)",M="Force load this track for the rest of the session (may be slow)";function H(r){let o=r.error??r.renderError,t=o instanceof Error&&o.regionTooLarge===!0;return{error:{error:o,onRetry:t?void 0:()=>{r.reload()}},tooLarge:{message:[r.regionTooLargeReason,r.zoomCanReleaseGate?m:M].filter(Boolean).join(". "),onForceLoad:()=>{r.forceLoad()}},loading:{message:r.statusMessage,progress:r.statusProgress,canceled:r.fetchCanceled,onCancel:()=>{r.cancelFetchByUser()},onRetry:()=>{r.reload()}},background:{message:r.statusMessage,progress:r.statusProgress}}}var _=i(function({model:o,phase:t,drawn:x,testid:E,style:B,children:G,...S}){let{TooLarge:b,ErrorBar:P,Loading:A,BackgroundProgress:D}=C()??k,[R,I]=T(null),a=H(o),y={...S,"data-testid":E,"data-display-id":o.configuration.displayId,"data-display-drawn":x,"data-display-phase":t};return t==="tooLarge"?e("div",{style:{display:"contents"},...y,children:e(g,{children:e("div",{style:{pointerEvents:"auto"},children:e(b,{model:o,...a.tooLarge})})})}):d("div",{style:{position:"relative",height:o.height,...B},...y,children:[e(w,{value:R,children:G}),d(g,{children:[t==="error"?e(P,{model:o,visible:!0,...a.error}):null,e(A,{model:o,...a.loading,visible:t==="loading"||t==="canceled",immediate:!x}),e("div",{ref:I,style:{position:"absolute",bottom:2,right:2,display:"flex",flexDirection:"column",alignItems:"flex-end",gap:4,pointerEvents:"none"},children:t==="ready"&&o.statusMessage?e(D,{model:o,visible:!0,...a.background}):null})]})]})});var j=i(function({model:o}){return e(_,{model:o,phase:o.displayPhase,drawn:o.painted&&o.geometryPainted,testid:"linear-graph-display","data-layout":o.chosenLayoutMode,"data-cut-tier":o.cutTier,"data-recuts":o.recuts,"data-node-count":o.hasGraph?o.nodeCount:void 0,"data-loading":o.isLoading?"":void 0,style:{width:o.paneWidth,height:o.height,overflow:"hidden"},children:e(h,{model:o,ownChrome:!1})})}),so=j;export{so as default};
2
- //# sourceMappingURL=LinearGraphDisplay-ZC4BQ27J.js.map
@@ -1,2 +0,0 @@
1
- import{a as b}from"./chunk-OJWBLPPH.js";import"./chunk-QV7SSOMJ.js";import{a as N}from"./chunk-KOB7YIMR.js";import"./chunk-YBLNN5FU.js";import"./chunk-G53BI7VK.js";import"./chunk-LE7FZM6Y.js";import{C as m,D as k,E as x,b as g,u as c,v as u,w as h,x as w}from"./chunk-FTXDTU27.js";import"./chunk-YBLNN5FU.js";import"./chunk-JRJHXLGP.js";import"./chunk-6SWXMRAV.js";import{d}from"./chunk-IKJZPPOA.js";import"./chunk-OGQ6OQDN.js";import"./chunk-NDRLCGPC.js";import{a as p,o as f}from"./chunk-TENPGIPX.js";var l=class extends g{constructor(){super(...arguments);this.fine=this.openIndex([])}static{this.capabilities=["getFeatures","getRefNames"]}openIndex(e){let a=m(this,[...e,"segmentsLocation"],[...e,"segmentsIndex"]),s=m(this,[...e,"linksLocation"],[...e,"linksIndex"]),n=this.getConf("walksLocation"),r=e.length===0&&d(n)?new b(m(this,["walksLocation"],["walksIndex"]),this):void 0;return{segments:a,links:s,walks:r,refNames:new x(r?.file??a,this)}}async getHaplotypeNames(e={}){return this.fine.walks?.haplotypeNames(e)}index(e="fine"){return e==="fine"?this.fine:(this.coarse??=this.openIndex(["coarse"]),this.coarse)}async getRefNames(e={}){return this.fine.refNames.assemblyRefNames(e)}async getRegionByteSize(e,a={}){let{walks:s,refNames:n}=this.fine;return n.regionBytes(e,a,s&&((r,{start:t,end:i})=>s.reader.queryStart(t,{...a,refName:r,end:i})))}async hasDataForRefName(){return!0}getFeatures(e,a={}){return N(async s=>{let n=await this.fine.refNames.resolveMapped(e,a);if(n!==void 0){let{walks:r}=this.fine,t=i=>{s.next(i)};await(r?this.walkFeatures(r,n,e,a,t):this.segmentFeatures(n,e,a,t))}s.complete()},a.signal)}async walkFeatures(e,a,s,n,r){let t=await f("Downloading walks",n.statusCallback,()=>e.referenceNodes(a,s,n));for(let i of t){let o=String(i.id);r(new p({uniqueId:o,refName:s.refName,start:i.start,end:i.end,name:o,type:"segment",rank:0,stableName:i.refName}))}}async segmentFeatures(e,a,s,n){await f("Downloading segments",s.statusCallback,()=>w(this.fine.segments,e,a.start,a.end,{signal:s.signal,lineCallback:r=>{let{segment:t,anchored:i}=c(r);if(i&&t.refName!==e)return;let o=u(t);n(new p({uniqueId:t.id,refName:a.refName,start:t.start,end:t.end,name:t.id,type:"segment",rank:t.rank,stableName:t.refName,...o&&{samples:o,sampleCount:o.length}}))}}))}async getSubgraph(e,a={}){let{hops:s,signal:n,tier:r}=a,t=this.index(r),i=await t.refNames.resolve(e,{signal:n});if(i===void 0)throw new Error(k(e));return t.walks?t.walks.subgraph(i,e,a):h(t,{refName:i,start:e.start,end:e.end},{hops:s,signal:n})}};export{l as default};
2
- //# sourceMappingURL=RgfaTabixAdapter-XSOIEWBK.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/RgfaTabixAdapter/RgfaTabixAdapter.ts"],
4
- "sourcesContent": ["import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter'\nimport { SimpleFeature, updateStatus } from '@jbrowse/core/util'\nimport { ObservableCreate } from '@jbrowse/core/util/rxjs'\nimport { parseSegmentRow, rgfaCut, segmentSamples } from '@jbrowse/graph-walks'\n\nimport { locationIsSet } from '../locationName.ts'\nimport {\n PanSNRefNames,\n openTabixSlot,\n unmappedRegionMessage,\n} from '../panSNTabix.ts'\nimport { getLines } from '../tabixRange.ts'\nimport { WalkIndex } from './walkReader.ts'\n\nimport type { RgfaTabixAdapterConfig } from './configSchema.ts'\nimport type { SubgraphAdapterOptions, SubgraphTier } from '../GetSubgraph.ts'\nimport type { WalkCut } from './walkCut.ts'\nimport type { TabixIndexedFile } from '@gmod/tabix'\nimport type { BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter'\nimport type { Feature } from '@jbrowse/core/util'\nimport type { FileLocation, Region } from '@jbrowse/core/util/types'\n\ninterface GraphIndex {\n segments: TabixIndexedFile\n links: TabixIndexedFile\n walks?: WalkIndex\n refNames: PanSNRefNames\n}\n\nexport default class RgfaTabixAdapter extends BaseFeatureDataAdapter<RgfaTabixAdapterConfig> {\n public static capabilities = ['getFeatures', 'getRefNames']\n\n private readonly fine = this.openIndex([])\n private coarse: GraphIndex | undefined\n\n // refNames off the SEGMENT index: it is the one that names every stable\n // sequence the graph is anchored to, where the link index only names those a\n // link touches. A walk-indexed graph's walk file names the same sequences,\n // and it has no segment file.\n private openIndex(under: string[]): GraphIndex {\n const segments = openTabixSlot(\n this,\n [...under, 'segmentsLocation'],\n [...under, 'segmentsIndex'],\n )\n const links = openTabixSlot(\n this,\n [...under, 'linksLocation'],\n [...under, 'linksIndex'],\n )\n const walksLocation: FileLocation = this.getConf('walksLocation')\n const walks =\n under.length === 0 && locationIsSet(walksLocation)\n ? new WalkIndex(\n openTabixSlot(this, ['walksLocation'], ['walksIndex']),\n this,\n )\n : undefined\n return {\n segments,\n links,\n walks,\n refNames: new PanSNRefNames(walks?.file ?? segments, this),\n }\n }\n\n /**\n * The haplotypes a walk-indexed graph's header names, `sample#haplotype`\n * in byte order, or undefined when it names none\n */\n async getHaplotypeNames(opts: BaseOptions = {}) {\n return this.fine.walks?.haplotypeNames(opts)\n }\n\n private index(tier: SubgraphTier = 'fine') {\n if (tier === 'fine') {\n return this.fine\n }\n this.coarse ??= this.openIndex(['coarse'])\n return this.coarse\n }\n\n async getRefNames(opts: BaseOptions = {}) {\n return this.fine.refNames.assemblyRefNames(opts)\n }\n\n // getFeatures reads a walk file from the chunk before the window\n async getRegionByteSize(regions: Region[], opts: BaseOptions = {}) {\n const { walks, refNames } = this.fine\n return refNames.regionBytes(\n regions,\n opts,\n walks &&\n ((refName, { start, end }) =>\n walks.reader.queryStart(start, { ...opts, refName, end })),\n )\n }\n\n public async hasDataForRefName() {\n return true\n }\n\n getFeatures(query: Region, opts: BaseOptions = {}) {\n return ObservableCreate<Feature>(async observer => {\n const tabixRefName = await this.fine.refNames.resolveMapped(query, opts)\n if (tabixRefName !== undefined) {\n const { walks } = this.fine\n const emit = (feature: Feature) => {\n observer.next(feature)\n }\n await (walks\n ? this.walkFeatures(walks, tabixRefName, query, opts, emit)\n : this.segmentFeatures(tabixRefName, query, opts, emit))\n }\n observer.complete()\n }, opts.signal)\n }\n\n // A walk-indexed graph's reference nodes are its ref rows' steps\n private async walkFeatures(\n walks: WalkIndex,\n tabixRefName: string,\n query: Region,\n opts: BaseOptions,\n emit: (feature: Feature) => void,\n ) {\n const nodes = await updateStatus(\n 'Downloading walks',\n opts.statusCallback,\n () => walks.referenceNodes(tabixRefName, query, opts),\n )\n for (const node of nodes) {\n const id = String(node.id)\n emit(\n new SimpleFeature({\n uniqueId: id,\n refName: query.refName,\n start: node.start,\n end: node.end,\n name: id,\n type: 'segment',\n rank: 0,\n stableName: node.refName,\n }),\n )\n }\n }\n\n private async segmentFeatures(\n tabixRefName: string,\n query: Region,\n opts: BaseOptions,\n emit: (feature: Feature) => void,\n ) {\n await updateStatus('Downloading segments', opts.statusCallback, () =>\n getLines(this.fine.segments, tabixRefName, query.start, query.end, {\n signal: opts.signal,\n lineCallback: line => {\n const { segment, anchored } = parseSegmentRow(line)\n // An anchored index also returns the alleles under the region,\n // which lie on other stable sequences and have no place on this one\n if (anchored && segment.refName !== tabixRefName) {\n return\n }\n // `samples` lists the haplotypes whose paths visit the segment and\n // `sampleCount` counts them. A lane's color reads the count, and\n // a count in jexl would otherwise rely on `.length` resolving\n // through a member access on an array.\n const samples = segmentSamples(segment)\n emit(\n new SimpleFeature({\n uniqueId: segment.id,\n refName: query.refName,\n start: segment.start,\n end: segment.end,\n name: segment.id,\n type: 'segment',\n rank: segment.rank,\n stableName: segment.refName,\n ...(samples && { samples, sampleCount: samples.length }),\n }),\n )\n },\n }),\n )\n }\n\n // The graph around a region for GraphGenomeView: GFA text (rgfaCut), or a\n // walk-indexed graph's tables (WalkIndex.subgraph). `tier: 'coarse'` reads\n // the `coarse` pair instead, the same way.\n async getSubgraph(\n region: Region,\n opts: SubgraphAdapterOptions = {},\n ): Promise<string | WalkCut> {\n const { hops, signal, tier } = opts\n const index = this.index(tier)\n const tabixRefName = await index.refNames.resolve(region, { signal })\n if (tabixRefName === undefined) {\n throw new Error(unmappedRegionMessage(region))\n }\n if (index.walks) {\n return index.walks.subgraph(tabixRefName, region, opts)\n }\n return rgfaCut(\n index,\n { refName: tabixRefName, start: region.start, end: region.end },\n { hops, signal },\n )\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["RgfaTabixAdapter", "BaseFeatureDataAdapter", "under", "segments", "openTabixSlot", "links", "walksLocation", "walks", "locationIsSet", "WalkIndex", "PanSNRefNames", "opts", "tier", "regions", "refNames", "refName", "start", "end", "query", "ObservableCreate", "observer", "tabixRefName", "emit", "feature", "nodes", "updateStatus", "node", "id", "SimpleFeature", "getLines", "line", "segment", "anchored", "parseSegmentRow", "samples", "segmentSamples", "region", "hops", "signal", "index", "unmappedRegionMessage", "rgfaCut"]
7
- }
@@ -1,2 +0,0 @@
1
- import{a as K}from"./chunk-OJWBLPPH.js";import{b as q,d as U,e as X,f as O,g as z,h as G}from"./chunk-HF4H6LQI.js";import"./chunk-QV7SSOMJ.js";import{a as H}from"./chunk-KOB7YIMR.js";import{p as M,q as _,r as T}from"./chunk-M2D7NUOY.js";import"./chunk-YBLNN5FU.js";import"./chunk-G53BI7VK.js";import"./chunk-LE7FZM6Y.js";import{C as j,E as D,i as $}from"./chunk-FTXDTU27.js";import"./chunk-YBLNN5FU.js";import"./chunk-JRJHXLGP.js";import{a as A,c as I,d as W,g as F,h as w,i as x}from"./chunk-6SWXMRAV.js";import"./chunk-T4R3ZVEM.js";import"./chunk-7WIBGKBU.js";import"./chunk-OGQ6OQDN.js";import"./chunk-NDRLCGPC.js";import{o as R}from"./chunk-TENPGIPX.js";var se=50;function re(r){let i=[];for(let e=0;e<r.length;e++){let[t,a]=r[e],[s,n]=r[e+1]??[];a===n&&a<=se&&(t==="I"&&s==="D"||t==="D"&&s==="I")?(i.push(["X",a]),e++):i.push([t,a])}return i}function v(r){return Array.from(r.ids,(i,e)=>2*i+r.rev[e])}function P(r,i){let e=r.get(i);return e===void 0?0:e.end-e.start}function V(r){let i=new Map,e=s=>{let n=P(r,s),o=i.get(n);return o===void 0&&(o="N".repeat(n),i.set(n,o)),o},t=new Map,a=s=>{let n=t.get(s);return n===void 0&&(n=v(s),t.set(s,n)),n};return(s,n)=>_({query:a(s),target:a(n),sequenceOf:e,bases:!1})}var B=100;function E(r,i,e){let t=r.at(-1);e>0&&(t?.[0]===i?t[1]+=e:r.push([i,e]))}function Z(r){let i=t=>P(r,t>>1),e=t=>{let a=new Float64Array(t.length+1);return t.forEach((s,n)=>{a[n+1]=a[n]+i(s)}),a};return(t,a)=>{let s=v(a),n=v(t),[o,l]=M(n,s,i),[u,f]=M(n.map(g=>g^1).reverse(),s,i),c=f>l,p=c?u:o,N=Math.max(l,f);if(N<B)return[];let d=e(s),h=e(n),y=g=>c?n.length-1-p[g][0]:p[g][0],m=[];p.forEach(([,g],k)=>{if(k>0){let[ee,te]=[y(k-1),y(k)].sort((ae,ne)=>ae-ne);E(m,"I",h[te]-h[ee+1]),E(m,"D",d[g]-d[p[k-1][1]+1])}E(m,"=",i(s[g]))});let[b,S]=[y(0),y(p.length-1)].sort((g,k)=>g-k);return[{queryStart:h[b],queryEnd:h[S+1],targetStart:d[p[0][1]],targetEnd:d[p.at(-1)[1]+1],strand:c?"-":"+",edits:m,sharedBases:N}]}}function oe(r){let i=new Map,e=new Set;r.ids.forEach((t,a)=>{i.has(t)?e.add(t):i.set(t,r.rev[a])});for(let t of e)i.delete(t);return i}function J(r){let i=new Map,e=t=>{let a=i.get(t);return a===void 0&&(a=oe(t),i.set(t,a)),a};return(t,a)=>{let s=e(a),n=0,o=0;for(let[l,u]of e(t)){let f=s.get(l);f===u?n+=P(r,l):f!==void 0&&(o+=P(r,l))}return{same:n,opposite:o}}}function Q(r){let i=Z(r),e=V(r),t=J(r);return(a,s)=>{let{same:n,opposite:o}=t(a,s);return n>=B&&o>=B?e(a,s):i(a,s)}}var ie=1e4;function Y(r){let i=Z(r),e=V(r),t=J(r);return(a,s)=>{let n=i(a,s),o=n[0]?.strand,{same:l,opposite:u}=t(a,s);return o===void 0||Math.min(l,u)<ie?n:[...n,...e(a,s).filter(f=>f.strand!==o)]}}function C({chain:r,target:i,query:e,assemblyName:t,refName:a,mateAssemblyName:s}){let n=re(r.edits);return G({target:{name:i.name,assemblyName:t,refName:a,start:i.hapStart+r.targetStart,end:i.hapStart+r.targetEnd},query:{name:e.name,assemblyName:s,refName:W(e.name),start:e.hapStart+r.queryStart,end:e.hapStart+r.queryEnd},strand:r.strand,cigar:T(n),matches:n.reduce((o,[l,u])=>o+(l==="="?u:0),0),columns:n.reduce((o,[,l])=>o+l,0)})}var me=r=>I(r.name)??r.name,L=class extends q{constructor(){super(...arguments);this.walks=new K(j(this,["walksLocation"],["walksIndex"]),this);this.refNames=new D(this.walks.file,this)}get anchor(){let e=this.getConf("assemblyNames")[0];if(e===void 0)throw new Error("WalkTabixSyntenyAdapter needs assemblyNames: its first entry is the assembly the reference sample is loaded as");return e}async getHaplotypeNames(e={}){return this.walks.haplotypeNames(e)}async getHeader(e={}){let{haplotypes:t}=await this.walks.reader.header(e),{anchor:a}=this,s=w(this,a),n=x(this);return{hasCoarseTier:!1,anchorAssemblyName:a,lanes:t.filter(o=>o!==s&&A(o)!==s).map(o=>({name:O(n,o),label:o,group:A(o)}))}}async getRefNames(e={}){let{assemblyName:t}=e;return t===void 0||t===this.anchor?this.refNames.assemblyRefNames({...e,assemblyName:this.anchor}):[]}async getSubgraph(e,t={}){let a=await this.refNames.resolve(e,{signal:t.signal});if(a===void 0)throw new Error(`${e.assemblyName} ${e.refName} is not in this graph's index; the graph is cut on ${this.anchor}, mapped to its PanSN prefix in assemblyNameToPanSN`);return this.walks.subgraph(a,e,t)}async laneWalks(e,t,a,s,n){let o=$(a,e);return R(n,s.statusCallback,()=>this.walks.reader.cut(e,t,{...this.walks.budgets(),signal:s.signal,keep:o,expand:o,links:!1}).catch(l=>{throw z(l,t.end-t.start)}))}async anchorFeatures(e,t,a){let s=a.haplotypes?.length?a.haplotypes.map(m=>w(this,m)):void 0,n=w(this,a.targetAssemblyName),o=n===void 0?s:s===void 0||s.some(m=>F(n,m)||F(m,n))?[n]:[];if(o?.length===0)return[];let{start:l,end:u}=t,{graph:f,fragments:c}=await this.laneWalks(e,t,o,a,`Reading walks ${t.refName}:${l.toLocaleString()}-${u.toLocaleString()}`),p=Y(f.nodes),N=x(this),d=c.filter(m=>m.name===e),h=m=>o===void 0?0:o.findIndex(b=>F(m.name,b));return c.filter(m=>m.name!==e&&h(m)>=0).sort((m,b)=>h(m)-h(b)).flatMap(m=>d.flatMap(b=>p(m,b).map(S=>C({chain:S,target:b,query:m,assemblyName:t.assemblyName,refName:t.refName,mateAssemblyName:O(N,me(m))}))))}async pairFeatures(e,t,a,s){let n=a.map(c=>({pair:c,featurePrefix:w(this,c.queryAssemblyName),matePrefix:w(this,c.targetAssemblyName)})),{graph:o,fragments:l}=await this.laneWalks(e,t,n.flatMap(c=>[c.featurePrefix,c.matePrefix]),s,X(a)),u=Q(o.nodes),f=c=>l.filter(p=>F(p.name,c));return n.flatMap(({pair:c,featurePrefix:p,matePrefix:N})=>f(p).flatMap(d=>f(N).flatMap(h=>u(h,d).map(y=>C({chain:y,target:d,query:h,assemblyName:c.queryAssemblyName,refName:W(d.name),mateAssemblyName:c.targetAssemblyName})))))}getFeatures(e,t={}){return H(async a=>{let s=e.assemblyName===this.anchor?await this.refNames.resolve(e,t):void 0;if(s!==void 0){let n=U(t),o=n.length>0?await this.pairFeatures(s,e,n,t):await this.anchorFeatures(s,e,t);for(let l of o)a.next(l)}a.complete()},t.signal)}};export{L as default};
2
- //# sourceMappingURL=WalkTabixSyntenyAdapter-3WRVNDLB.js.map
@@ -1,2 +0,0 @@
1
- import{h as B,k as M,n as F}from"./chunk-7RJMG6I2.js";import{b as O,h as _}from"./chunk-2KVE7YAS.js";import{J as b,P as A}from"./chunk-S333HOG5.js";import{e as R}from"./chunk-YU7T5WOQ.js";import{D as P,E,H as m,d as v,o as T,q as I,r as L,s as w,t as N,w as x,y as D,z as G}from"./chunk-UGCNPRKC.js";import{b as t,c as i,d as k}from"./chunk-JMBDTNUR.js";var S=[{value:0,label:"Fastest"},{value:1,label:"Fast"},{value:2,label:"Default"},{value:3,label:"Fine"},{value:4,label:"Best"}];function f({label:o,value:n,options:e,testId:s,size:c,sx:d,disabled:a,title:h,shown:g,onChange:Q}){let C=R();return i(w,{size:c,sx:d,disabled:a,title:h,children:[t(x,{id:C,shrink:!0,children:o}),t(P,{labelId:C,value:n,label:o,notched:!0,displayEmpty:!0,"data-testid":s,renderValue:l=>g??e.find(z=>z.value===l)?.label??l,onChange:l=>{Q(l.target.value)},children:e.map(l=>t(G,{value:l.value,disabled:l.disabled,title:l.disabled?void 0:l.description,children:t(D,{primary:l.label,secondary:l.disabled?l.description:void 0})},l.value))})]})}var u=F()({section:{marginBottom:24},group:{marginBottom:16},heading:{marginBottom:8}});function r({warn:o=!1,children:n}){return t(m,{variant:"caption",component:"div",color:o?"warning.main":"text.secondary",children:n})}function y({title:o,children:n}){let{classes:e}=u();return i("section",{className:e.group,children:[t(m,{variant:"subtitle1",className:e.heading,children:o}),n]})}function U({label:o,checked:n,onChange:e,children:s}){let{classes:c}=u();return i("div",{className:c.section,children:[t(N,{control:t(E,{checked:n,onChange:d=>{e(d.target.checked)}}),label:o}),s]})}function p({children:o,...n}){let{classes:e}=u();return i("div",{className:e.section,children:[t(f,{sx:{minWidth:200},...n}),o]})}var Y=[5e3,2e4,5e4,1e5];function H(o){return[...new Set([...Y,o])].sort((n,e)=>n-e).map(n=>({value:String(n),label:n.toLocaleString()}))}function W({label:o,choices:n,stored:e,auto:s,testId:c,onChange:d,children:a}){return n.length>0?t(p,{label:o,value:n.some(h=>h.trackId===e)?e:"",options:[{value:"",label:`Automatic (${s?.name??"none"})`},...n.map(({trackId:h,name:g})=>({value:h,label:g}))],testId:c,onChange:d,children:a}):null}var $=k(function(n){let{model:e,onClose:s,children:c}=n,{classes:d}=u();return i(v,{open:!0,onClose:s,title:"Graph settings",children:[i(L,{children:[i(y,{title:"Subgraph",children:[c,t(p,{label:"Node limit",value:String(e.maxGraphNodes),options:H(e.maxGraphNodes),testId:"graph-node-limit-select",onChange:a=>{e.setMaxGraphNodes(Number(a))},children:t(r,{children:"The most nodes a layout draws; past it the graph is declined. Walk rows take no limit."})})]}),i(y,{title:"Drawing",children:[e.anchorPaths.length>1?t(p,{label:"Reference path",value:e.activeReferencePath??"",options:e.anchorPaths.map(({name:a})=>({value:a,label:a})),testId:"graph-reference-path-select",onChange:a=>{e.setReferencePath(a),e.recomputeLayout()},children:t(r,{children:"The path the anchored layouts place x along"})}):null,t(p,{label:"Node width",value:e.nodeWidth,options:A,testId:"graph-node-width-select",onChange:a=>{e.setNodeWidth(a)},children:t(r,{children:"Depth as width. In a cut with walks, depth is how many haplotypes carry the node."})}),i(U,{label:"Draw paths",checked:e.drawPaths,onChange:a=>{e.setLayer("paths",a)},children:[t(r,{children:"Color each node by the paths through it, one lane per path"}),e.drawPaths&&!e.effectiveDrawPaths?t(r,{warn:!0,children:e.pathCount>b?`Off: ${e.pathCount.toLocaleString()} paths is past the ${b} this can tell apart`:"Off: this graph states no paths"}):null]}),t(W,{label:"Gene track",choices:e.geneTrackChoices,stored:e.geneTrackId,auto:M(e.geneTrackChoices,""),testId:"graph-gene-track-select",onChange:a=>{e.setGeneTrackId(a)},children:t(r,{children:"Where genes on the backbone come from"})}),t(W,{label:"Repeat track",choices:e.repeatTrackChoices,stored:e.repeatTrackId,auto:B(e.repeatTrackChoices,""),testId:"graph-repeat-track-select",onChange:a=>{e.setRepeatTrackId(a)},children:t(r,{children:"The tandem repeat annotation walk rows measure and tile by"})})]}),i(y,{title:"Force-directed layout",children:[e.hasGraph&&!e.usesLayoutEngine?t("div",{className:d.section,children:t(r,{warn:!0,children:"No effect on the current layout until Layout is Force-directed"})}):null,t(p,{label:"Engine",value:e.layoutEngine,options:O,testId:"graph-layout-engine-select",onChange:a=>{e.setLayoutEngine(a)},children:t(r,{children:"Stress keeps the reference straight, so a zoom keeps the picture; FMMM lets the whole graph settle."})}),t(p,{label:"Layout quality",value:String(e.layoutQuality),options:S.map(a=>({value:String(a.value),label:a.label})),testId:"graph-layout-quality-select",onChange:a=>{e.setLayoutQuality(Number(a))},children:t(r,{children:"The engine's iteration budget; higher is slower"})}),t(p,{label:"Bubble spread",value:e.bubbleSpread,options:_,testId:"graph-bubble-spread-select",onChange:a=>{e.setBubbleSpread(a)},children:t(r,{children:"How far the layout opens a bubble"})}),e.layoutEngine==="stress"?null:t(U,{label:"Linear layout",checked:e.linearLayout,onChange:a=>{e.setLinearLayout(a)},children:t(r,{children:"Keeps a chain of nodes on one line where it can"})})]})]}),t(I,{children:t(T,{variant:"contained",color:"primary",onClick:s,children:"Close"})})]})}),he=$;export{f as a,he as b};
2
- //# sourceMappingURL=chunk-6VNU7SD4.js.map
@@ -1,3 +0,0 @@
1
- import{b as jn,g as _o,h as $o,j as ct,k as dt,l as Ho,m as Wo}from"./chunk-7RJMG6I2.js";import{$ as ot,$b as it,A as Xn,Aa as no,B as Je,Ba as oo,C as Vn,D as qe,Da as ro,Db as ko,E as Ct,Ea as so,Eb as xo,Fb as Dt,Gb as Ro,Ha as ce,Hb as So,I as Bt,J as Ze,Ja as io,Jb as vo,L as Ot,M as Pe,Mb as ee,N as Qe,O as K,Ob as Mo,P as et,Pb as Lo,Qb as No,R as tt,Ra as co,Rb as Po,S as nt,Sb as Ao,Tb as To,U as _t,Ub as Go,Vb as Eo,W as B,Wa as po,Xb as Io,Yb as Co,Z as Ae,Zb as Bo,_ as Te,_b as Oo,aa as Yn,b as Ln,bb as lo,bc as Fo,cc as Do,d as Pt,db as mo,ea as Jn,eb as uo,fa as rt,fb as ho,ga as qn,gb as fo,h as Gt,i as Gn,ia as Zn,j as Et,ja as Qn,k as En,l as In,lb as go,m as Me,n as ue,ob as Ft,q as Le,qb as wo,r as Q,ra as eo,rb as bo,s as ie,sb as yo,ta as to,ua as Wt,x as Dn,xa as Ge}from"./chunk-WLRRI35A.js";import{A as zn,B as Un,C as Kn,D as Ht,a as Z,b as It,c as Cn,d as Bn,e as On,g as _n,i as $n,p as Ue,s as Hn,t as Ne,u as Wn,v as Fn,w as Ke,z as $t}from"./chunk-VZQ6VOUP.js";import{A as Se,B as An,D as Tn,K as je,N as ve,O as Ye,T as ze,a as j,b as ye,i as ke,n as xe,o as se,p as At,r as Nn,s as Pn,v as Tt,z as Re}from"./chunk-S333HOG5.js";import{b as at,c as st,e as ao}from"./chunk-P3FBI5ML.js";import{b as St,c as vt,d as Mt,f as Lt}from"./chunk-6WUWQX2P.js";import{e as Rn,l as Mn,m as Nt}from"./chunk-G53BI7VK.js";import{a as bn,b as yn,d as kn,f as le,g as I,h as we,i as q,j as kt,k as ae,l as xt,m as Rt,n as be,r as H,w as vn}from"./chunk-LE7FZM6Y.js";import{d as V}from"./chunk-JRJHXLGP.js";import{a as me,c as xn,d as Ve}from"./chunk-6SWXMRAV.js";import{d as Sn}from"./chunk-IKJZPPOA.js";import{f as gn,g as yt,h as wn,j as U}from"./chunk-TENPGIPX.js";import{b as D}from"./chunk-JMBDTNUR.js";var de=JBrowseExports["@mui/material/SvgIcon"],Kr=e=>de!=null&&e in Object(de)?de[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@mui/material/SvgIcon' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e}),W=Kr("createSvgIcon"),ds=de&&de.__esModule?de.default:de;function Xo(e){if(typeof e!="object"||e===null)return!1;let t=e;return typeof t.horizontalScroll=="function"&&typeof t.zoomTo=="function"&&"coarseDynamicBlocks"in t&&"dynamicBlocks"in t}function Vo(e){return e.reduce((t,n)=>t&&t.end-t.start>=n.end-n.start?t:n,void 0)}function jo(e,t){let n=Vo(e.dynamicBlocks.contentBlocks.filter(r=>r.refName===t.refName&&r.assemblyName===t.assemblyName)),{bpPerPx:o}=e;if(!n||!(o>0))return;let a=n.offsetPx-e.offsetPx;return n.reversed?{scale:-1/o,translateX:a+n.end/o}:{scale:1/o,translateX:a-n.start/o}}function us(e){let t=Vo(e.dynamicBlocks.contentBlocks),n=t?.displayedRegionIndex===void 0?void 0:e.displayedRegions[t.displayedRegionIndex];return t&&e.bpPerPx>0?{refName:t.refName,assemblyName:t.assemblyName,start:t.start,end:t.end,bpPerPx:e.bpPerPx,span:e.bpPerPx*e.width,regionStart:n?.start??t.start,regionEnd:n?.end??t.end}:void 0}function Jr(e,t,n=!0){let o=e.end-e.start,a=n?Math.max(0,Math.min(e.span,(t-o)/2)):0,r=Math.max(e.regionStart,Math.floor(e.start-a)),s=Math.min(e.regionEnd,Math.ceil(e.end+a)),i=s-r-t;return i>0&&(r+=Math.floor(i/2),s-=Math.ceil(i/2)),{refName:e.refName,assemblyName:e.assemblyName,start:r,end:s}}function hs(e,t,n=!0){if(e?.refName!==t.refName||e.assemblyName!==t.assemblyName)return!1;if(n)return e.start<=t.start+1&&t.end<=e.end+1;let o=Jr(t,1/0,!1);return Math.abs(e.start-o.start)<1&&Math.abs(e.end-o.end)<1}var qr=/^[^#]+#\d+$/;function Zr(e,t){let n=e.assemblyNameToPanSN??{},o=new Set(Object.values(n)),a={};for(let{name:r,aliases:s}of t){let i=s.find(c=>qr.test(c));i!==void 0&&!o.has(i)&&(a[r]=i)}return Object.keys(a).length===0?e:{...e,assemblyNameToPanSN:{...a,...n}}}function Qr(e,t){let n=s=>t.find(i=>i.name===s||i.aliases.includes(s))?.name??s,o=e.assemblyNames??[],a=e.assemblyNameToPanSN??{};if([...o,...Object.keys(a)].every(s=>n(s)===s))return e;let r=new Map;for(let[s,i]of Object.entries(a)){let c=n(s);(c===s||!r.has(c))&&r.set(c,i)}for(let s of o){let i=n(s);i!==s&&!r.has(i)&&r.set(i,s)}return{...e,assemblyNames:o.map(n),assemblyNameToPanSN:Object.fromEntries(r)}}var ea=new Set(["GbzBaseSyntenyAdapter","WalkTabixSyntenyAdapter"]);function Yo(e,t){let n=V(t,"adapter");if(!ea.has(n.type)&&!jn(n))return n;let o=U(e).assemblyManager.assemblyList.map(a=>({name:V(a,"name"),aliases:V(a,"aliases")??[]}));return Zr(Qr(n,o),o)}var ta=1,na=.015;function pt({graph:e,span:t,rowY:n,positions:o}){let a=t*na,r=In(e),s=new Map(e.nodes.map(m=>[m.id,m])),i=[];for(let m of r){let p=m.refSpan-m.pathLength;p>=ta&&i.push({nodeIds:m.nodeIds,bp:p});let l=Math.max(m.refSpan,a),u=m.pathLength>0?l/m.pathLength:0;m.nodeIds.forEach((h,f)=>{let g=s.get(h);if(g){let w=m.nodeOffsets[f],x=l/m.nodeIds.length,v=k=>m.start+k*u,y=n(g);o[h]=u?[{x:v(w),y},{x:v(w+g.length),y}]:[{x:m.start+f*x,y},{x:m.start+(f+1)*x,y}]}})}let c=Z(e),d=Object.keys(o);for(let m of d){let p=o[m].at(-1).x;for(let l of c.get(m)??[]){let u=s.get(l);if(u&&!(l in o)){let h=n(u);o[l]=[{x:p,y:h},{x:p+a,y:h}],d.push(l)}}}return i}function oa(e,t){let n=new Map;for(let a of e.nodes)if(we(a)){let r=me(a.stable.refName);n.set(r,(n.get(r)??0)+a.length)}let o=new Map(t.map((a,r)=>[a,r]));return[...n.keys()].sort((a,r)=>(o.get(a)??1/0)-(o.get(r)??1/0)||n.get(r)-n.get(a)||a.localeCompare(r))}function zo(e,t,n=[]){let o=q(e),a=oa(e,n);if(o.length===0||a.length===0)return;let r=be(o,t),s=new Map(a.map((l,u)=>[l,u+1])),i=ae(o),c=a.length+1,d=pt({graph:e,span:r,rowY:l=>{let u=l.stable;return((u?s.get(me(u.refName)):void 0)??c)*j},positions:i}),p=[{label:me(o[0].stable.refName),y:0},...a.map(l=>({label:l,y:s.get(l)*j}))];return{nodePositions:i,rowLabels:p,sampleRows:a,referenceAxis:!0,pixelRows:!0,alleleDeletions:d}}function ra(e){let t=new Set;for(let n of e.nodes)n.stable&&t.add(n.stable.rank);return new Map([...t].sort((n,o)=>n-o).map((n,o)=>[n,o]))}function Uo(e,t){let n=q(e);if(n.length===0)return;let o=be(n,t),a=ra(e),r=ae(n),s=pt({graph:e,span:o,rowY:c=>(c.stable?a.get(c.stable.rank)??a.size:a.size)*j,positions:r}),i=[...a].map(([c,d])=>({label:c===0?"Reference (rank 0)":`Rank ${c}`,y:d*j}));return{nodePositions:r,rowLabels:i,referenceAxis:!0,pixelRows:!0,alleleDeletions:s}}var aa=12,Xt=j;function Ko(e){return 10+8*Math.log2(1+e.length)}function te(e,t){return e<t?-1:e>t?1:0}function qo(e,t){return te(e.at,t.at)||te(e.side,t.side)||te(e.hops,t.hops)}var Jo={at:1/0,side:0,hops:0};function Vt(e){let t=new Map(e.nodes.map(o=>[o.id,o])),n=ca(e);return e.nodes.map(o=>o.id).sort((o,a)=>qo(n.get(o)??Jo,n.get(a)??Jo)||te(t.get(o).name,t.get(a).name)||te(o,a))}function sa(e,t){let n=new Set(e.nodes.map(m=>m.id)),o=new Map(t.map(m=>[m.id,m.stable.start])),a=new Map,r=new Map;t.forEach((m,p)=>{r.set(m.id,t[p-1]?.id),a.set(m.id,t[p+1]?.id)});let s=t[0]?.id,i=(m,p)=>{let l=a.get(m);a.set(m,p),r.set(p,m),a.set(p,l),l!==void 0&&r.set(l,p)},c=(m,p)=>{let l=r.get(m);l===void 0?(s=p,r.set(p,void 0),a.set(p,m),r.set(m,p)):i(l,p)};for(let m of e.paths??[]){let p=0,l=0,u;for(let w of m.nodeIds){let x=o.get(w);x!==void 0&&(u!==void 0&&x!==u&&(x>u?p++:l++),u=x)}let h=l>p?[...m.nodeIds].reverse():m.nodeIds,f,g=new Set;for(let w of h)if(a.has(w)){if(f===void 0)for(let x of g)c(w,x);f=w}else n.has(w)&&(f===void 0?g.add(w):(i(f,w),f=w))}let d=[];for(let m=s;m!==void 0;m=a.get(m))d.push(m);return d}function ia(e,t,n){let o=[...t.entries()].sort(([i,c],[d,m])=>qo(c,m)||te(i,d)).map(([i])=>i),a=o.length;for(let i of o){let c=t.get(i);for(let d of e.get(i)??[])n.has(d)&&!t.has(d)&&(t.set(d,{at:c.at,side:1,hops:c.hops+1}),o.push(d))}let r=new Set(o.slice(a)),s=new Set;for(let i of r){if(s.has(i))continue;let{at:c}=t.get(i),d=[i];s.add(i);let m=!0;for(let p of d){let{hops:l}=t.get(p),u=!0,h=!1;for(let f of e.get(p)??[]){let g=t.get(f);g&&(g.at===c&&r.has(f)?(u&&=g.hops<=l,s.has(f)||(s.add(f),d.push(f))):g.at!==c&&(h||=g.at<c,m&&=g.at<c))}m&&=!u||h}if(m)for(let p of d){let l=t.get(p);t.set(p,{...l,side:-1,hops:-l.hops})}}}function ca(e){let t=e.nodes.filter(I).sort((o,a)=>te(o.stable.start,a.stable.start)||te(o.name,a.name)),n=new Map;return sa(e,t).forEach((o,a)=>{n.set(o,{at:a,side:0,hops:0})}),ia(Z(e),n,new Set(e.nodes.map(o=>o.id))),n}function da(e){let t=new Map(e.nodes.map(p=>[p.id,p])),n=Vt(e),o=new Map(n.map((p,l)=>[p,l])),a=p=>I(t.get(p)),r=new Map(n.map(p=>[p,[]])),s=new Map(n.map(p=>[p,[]])),i=(p,l)=>{r.get(l).push(p),s.get(p).push(l)};for(let p of e.edges)p.from===p.to||!o.has(p.from)||!o.has(p.to)||(o.get(p.from)<o.get(p.to)?i(p.from,p.to):i(p.to,p.from));let c=n.filter(a);for(let p=1;p<c.length;p++)i(c[p-1],c[p]);let d=new Map;for(let p of n){let l=0;for(let u of r.get(p))l=Math.max(l,d.get(u)+1);d.set(p,l)}for(let p=n.length-1;p>=0;p--){let l=n[p],u=s.get(l);if(a(l)||u.length===0)continue;let h=1/0;for(let w of u)h=Math.min(h,d.get(w));let f=d.get(l),g=Math.max(f,h-1);d.set(l,Math.floor((f+g)/2))}let m=[];for(let p of n)(m[d.get(p)]??=[]).push(p);return{layers:m,layerOf:d,preds:r}}function Zo(e){if(!e.nodes.some(I))return;let t=new Map(e.nodes.map(p=>[p.id,p])),n=p=>I(t.get(p)),{layers:o,layerOf:a,preds:r}=da(e),s=o.map(p=>{let l=0;for(let u of p)l=Math.max(l,Ko(t.get(u)));return l}),i=[],c=0;for(let p=0;p<o.length;p++)i[p]=c,c+=s[p]+aa;let d=new Map;for(let p of o){let l=[];for(let h of p){if(n(h)){d.set(h,0);continue}let f=r.get(h).filter(w=>d.has(w)),g=0;for(let w of f)g+=d.get(w)/f.length;l.push({id:h,ideal:g===0?Xt:g})}l.sort((h,f)=>h.ideal-f.ideal);let u=new Set([0]);for(let{id:h,ideal:f}of l){let g=Math.round(f/Xt);g===0&&(g=f>=0?1:-1);for(let w=1;u.has(g);w++)u.has(g+w)?u.has(g-w)||(g-=w):g+=w;u.add(g),d.set(h,g*Xt)}}let m={};for(let p of e.nodes){let l=a.get(p.id),u=Ko(p),h=i[l]+s[l]/2,f=d.get(p.id);m[p.id]=[{x:h-u/2,y:f},{x:h+u/2,y:f}]}return{nodePositions:m,referenceAxis:!1,pixelRows:!0}}var lt=1.3;function mt(e){return Math.max(e.reference.bp,...e.rows.map(t=>t.bp))}function he(e,t={rowPx:j,readouts:!0}){return{maxX:e.origin+mt(e)*(t.readouts?lt:1),maxY:e.rows.length*t.rowPx}}function fe(e,t,n){return e?n&&!n.labelled?[]:[e.reference,...e.rows].map((o,a)=>({label:o.label,y:a*(n?.rowPx??j)})):t?.rowLabels??[]}function jt(e,t){let n=ue(e,t);return n&&Qo(e,n,t)}function Qo(e,t,n){let o=q(e);if(o.length===0)return;let a=n?o.filter(s=>kt(s,n)):o;return{nodePositions:ae(a.length>0?a:o),rowLabels:fe(t),referenceAxis:!0,pixelRows:!0,extent:he(t)}}var nr="Force-directed layout",ge=e=>e.nodes.some(I),er=e=>ge(e)&&(e.paths?.length??0)>1,tr=e=>ge(e)&&e.nodes.some(we),ut=[{value:"auto",label:"Anchored",description:"x is reference bp, one row per stable rank. Needs rGFA tags or a reference path.",run:Uo,cutMargins:!0,wholeWalks:!1,available:ge,drawsLocally:ge,drawsNodes:!0},{value:"samplerows",label:"Sample rows",description:"x is reference bp, one row per contributing assembly. Needs rGFA tags or a reference path.",run:zo,cutMargins:!0,wholeWalks:!1,available:tr,drawsLocally:tr,drawsNodes:!0},{value:"walkrows",label:"Walk rows",description:"x is each walk's own bp: one bar per haplotype, blue on the reference's path and purple off it, so a repeat expansion reads as bar length, and each bar boxes its haplotype's own genes where the session has them. Needs a reference and two or more walks.",run:jt,cutMargins:!1,wholeWalks:!0,available:er,drawsLocally:er,drawsNodes:!1},{value:"ordered",label:"Ordered",description:"x is reference order, not bp: every node gets room, bubbles read as lenses. Needs rGFA tags or a reference path.",run:Zo,cutMargins:!1,wholeWalks:!1,available:ge,drawsLocally:ge,drawsNodes:!0},{value:"tubemap",label:"Tube map",description:"sequenceTubeMap: every path a coloured tube through boxed nodes, columns in node order and node widths log-scaled. Needs P or W lines.",run:Gn,cutMargins:!1,wholeWalks:!1,available:Gt,drawsLocally:Gt,drawsNodes:!1},{value:"tubemapref",label:"Tube map on reference",description:"The tube map with each column at the reference bp it covers, so the tubes line up with the tracks around them. Needs P or W lines and a reference path.",run:En,cutMargins:!0,wholeWalks:!1,available:Et,drawsLocally:Et,drawsNodes:!1},{value:"force",label:nr,description:"OGDF FMMM (wasm) or stress, whichever engine is chosen.",run:()=>{},cutMargins:!1,wholeWalks:!1,available:()=>!0,drawsLocally:()=>!1,drawsNodes:!0}],pa=ut.map(e=>e.value);function Yt(e,t){return!Y(e).drawsLocally(t)}function Y(e){return ut.find(t=>t.value===e)??ut[0]}function zt(e){return e.walkStrip&&e.mode.drawsNodes&&!e.drawsPicture&&!e.popped&&!e.host&&e.walks>1}function Ut(e,t){return e.wholeWalks||t.walkStrip&&!t.host}var Ee=6,ar=260,la=11,ma=3,ua="#111",or=3;function Kt(e,t,n){let o=e.pathVisits?.get(n.name)??[],a=[];for(let r of t){let s=r.axis;if(!s)continue;let i=H(r.name).name;for(let c of o){if(c.path!==i)continue;let{start:d,end:m}=Xn(s,c.start,c.start+n.length);m>0&&d<r.bp&&a.push({row:r.name,start:d,bp:m-d})}}return a}var rr=new WeakMap;function ha(e,t){let n=rr.get(e);if(n||(n=new Map,rr.set(e,n)),n.has(t))return n.get(t);let o=new Map(e.nodes.map(i=>[i.id,i.length])),a=H(t).name,r=(e.paths??[]).filter(i=>H(i.name).name===a),s;if(r.every(i=>i.start!==void 0)){s={ids:[],starts:[],ends:[]};for(let i of[...r].sort((c,d)=>c.start-d.start)){let c=i.start;for(let d of i.nodeIds){let m=o.get(d)??0;s.ids.push(d),s.starts.push(c),s.ends.push(c+m),c+=m}}}return n.set(t,s),s}function fa(e,t,n,o){let a=t.axis,r=a&&ha(e,t.name);if(!a||!r||n<0||n>t.bp)return;let s=a.reversed?a.start-n:a.start+n,i=.5/o,c=Je(a,t.bp),d=Math.max(s-i,c.start),m=Math.min(s+i,c.end),p=kn(r.starts.length,f=>r.ends[f]<=d),l,u=-1,h=!1;for(let f=p;f<r.starts.length&&r.starts[f]<m;f++){let g=r.ends[f]-r.starts[f],w=r.starts[f]<=s&&s<r.ends[f];(g>u||g===u&&w&&!h)&&(u=g,l=r.ids[f],h=w)}return l}function Ie(e,t){let n=t.maxHeight??ar,o=t.labelPx??Math.max(...[e.reference,...e.rows].map(u=>u.label.length))*se+16,a=e.rows.length+1,{rowPx:r,barPx:s,labelled:i,readouts:c}=Ze(a,n-2*Ee,ma),d=Math.max(mt(e),1),m=i?o:Ee,l=Math.max(1,t.width-m-Ee)/(d*(c?lt:1));return{scaleX:l,scaleY:1,translateX:m-e.origin*l,translateY:Ee+r/2,width:t.width,height:a*r+2*Ee,rowPx:r,barPx:s,readouts:c,labelled:i,boxesGenes:qe(r,s)}}function ga(e,t,n,o){let a=Math.round((o-t.translateY)/t.rowPx),r=[e.reference,...e.rows][a],s=(n-t.translateX)/t.scaleX-e.origin;return r&&a>=0&&s>=0&&s<=r.bp?{index:a,row:r,offset:s}:void 0}function wa(e,t,n){let o=new Map([e.reference,...e.rows].map((r,s)=>[r.name,s])),a=r=>(e.origin+r)*t.scaleX+t.translateX;return Le("g",{"data-testid":"graph-walk-marks"},...n.flatMap(r=>{let s=o.get(r.row);if(s===void 0)return[];let i=s*t.rowPx+t.translateY,c=a(r.start),d=Math.max(2,r.bp*t.scaleX),m=p=>Le("rect",{x:c,y:p,width:d,height:or,fill:ua});return[m(i-t.barPx/2-or-1),m(i+t.barPx/2+1)]}))}function Jt(e,t,n=new Set){return Le("g",{"font-family":"sans-serif","font-size":la,fill:"#333"},...(t.labelled?[e.reference,...e.rows]:[]).map((o,a)=>Le("text",{x:6,y:a*t.rowPx+t.translateY+4,"font-weight":n.has(o.name)?600:void 0},o.label)))}function qt(e,t,n){if(t?.size)return e.boxesGenes?n:{untracked:0,unread:0,...n,crowded:!0}}function ne(e){return`${e.refName}:${(e.start+1).toLocaleString()}-${e.end.toLocaleString()}`}function ba(e,t,n=o=>o){return t?{deletion:{bp:`${t.bp.toLocaleString()} bp`,where:ne(t)}}:{ends:`${n(e.from)}${e.fromStrand??""} \u2192 ${n(e.to)}${e.toStrand??""}`}}function sr(e){return le(e)?ir(e):void 0}function ir(e){return{sample:me(e.stable.refName),haplotype:xn(e.stable.refName),refName:Ve(e.stable.refName),start:e.stable.start,end:e.stable.start+e.length}}function ya(e,t){let n=[...e].sort((r,s)=>r.start-s.start),o,a;for(let r of n)a=a&&r.start-a.end<=t?{start:a.start,end:Math.max(a.end,r.end)}:{start:r.start,end:r.end},(!o||a.end-a.start>o.end-o.start)&&(o=a);return o}function ka(e){return`${e.haplotype??e.sample}\0${e.refName}`}function cr(e,{maxGap:t=1/0}={}){let n=new Map;for(let a of e.nodes)if(le(a)){let r=ir(a),s=ka(r),i=n.get(s);i?(i.spans.push({start:r.start,end:r.end}),i.rank=Math.min(i.rank,a.stable.rank)):n.set(s,{sample:r.sample,haplotype:r.haplotype,refName:r.refName,rank:a.stable.rank,spans:[{start:r.start,end:r.end}]})}let o=new Map;for(let a of n.values()){let r=ya(a.spans,t);if(r){let s={sample:a.sample,haplotype:a.haplotype,refName:a.refName,start:r.start,end:r.end,rank:a.rank,nodeCount:a.spans.length},i=a.haplotype??a.sample,c=o.get(i);(!c||s.nodeCount>c.nodeCount)&&o.set(i,s)}}return[...o.values()].sort((a,r)=>+(a.rank!==0)-+(r.rank!==0)||a.sample.localeCompare(r.sample)||(a.haplotype??"").localeCompare(r.haplotype??""))}function Ce(e,t){return(t.haplotype===void 0?void 0:e(t.haplotype))??e(t.sample)}function dr(e,t){return e.flatMap(n=>{let o=Ce(t,n);return o===void 0?[]:[{...n,sample:o}]})}function ht(e){return`${e.refName}:${e.start+1}-${e.end}`}function z(e){return typeof e=="object"&&e!==null}function xa(e){return z(e)&&e.type==="LinearGenomeView"&&typeof e.id=="string"&&typeof e.navToLocString=="function"&&Array.isArray(e.assemblyNames)}function Ra(e){return e.flatMap(t=>z(t)&&Array.isArray(t.views)?[t,...t.views]:[t])}function Be({views:e,connectedViewId:t,assemblyName:n}){let o=Ra(e).filter(r=>xa(r)).filter(r=>r.assemblyNames.includes(n));return o.find(r=>r.id===t)??(o.length===1?o[0]:void 0)}function Zt(e,t){let n=e.assemblyManager;return n?.has(t)?n.get(t)?.name??t:t}function Lc(e,t){let n=e.assemblyManager,o=n?.has(t.assemblyName)?n.get(t.assemblyName):void 0;return o?{...t,assemblyName:o.name,refName:o.getCanonicalRefName2?.(t.refName)??t.refName}:t}function Qt(e,t){let n=V(t,"assemblyNames");return Array.isArray(n)?n.filter(o=>typeof o=="string").map(o=>Zt(e,o)):[]}function lr(e,t,n){n.catch(o=>{console.error(`[GraphGenomeView] ${t}`,o),e.notifyError?.(`${t}: ${o}`,o)})}var Sa=1e3;function en(e,t=Sa){let n=Math.max(0,Math.ceil((t-(e.end-e.start))/2));return{...e,start:Math.max(0,e.start-n),end:e.end+n}}function mr(e,t){return t?e.map(n=>n.rank===0?{...n,sample:t.assemblyName,haplotype:void 0,refName:t.refName,start:t.start,end:t.end}:n):e}function Nc({session:e,location:t,assembly:n,connectedViewId:o,tracks:a=[]}){let r=Be({views:e.views,connectedViewId:o,assemblyName:n}),s;return r?(lr(e,`Could not show ${n} ${ne(t)}`,Promise.resolve(r.navToLocString(ht(t),n))),s=r.id):s=e.addView("LinearGenomeView",{displayName:`${n} \u2014 ${ne(t)}`,init:{assembly:n,loc:ht(t),tracks:a}}).id,s}function Pc({session:e,location:t,assembly:n,connectedViewId:o}){Be({views:e.views,connectedViewId:o,assemblyName:n})&&e.addHighlight?.({refName:t.refName,start:t.start,end:t.end,assemblyName:n})}function pr(e,t){let n=t===void 0?void 0:e.tracks.find(o=>V(o,"trackId")===t);return n?Qt(e,n):[]}function Ac({session:e,contributors:t,trackId:n,graphTrackId:o}){let a=pr(e,o),r=pr(e,n),s=t.filter(d=>r.includes(d.sample)),i=s.length>=2?s:t,c={init:{views:i.map(d=>({assembly:d.sample,loc:ht(d),...o!==void 0&&a.includes(d.sample)?{tracks:[o]}:{}})),tracks:n?i.slice(1).map(()=>[n]):[],collapseEmptyRows:!0}};lr(e,"Could not open the synteny view",e.launchView("LinearSyntenyView",c))}function Oe(e,t,n){let o=new Map;for(let r of e.nodes)if(le(r)){let{refName:s}=r.stable;if(n[r.id]?.length){let i=o.get(s)??o.set(s,{nodes:[],reach:0}).get(s);i.nodes.push(r),i.reach=Math.max(i.reach,r.length)}}for(let{nodes:r}of o.values())r.sort((s,i)=>s.stable.start-i.stable.start);let a=[];for(let r of t){let s=o.get(r.refName);if(!s)continue;let i=[],c=[],d=new Set,m,p=1/0,l=0,u=(r.start+r.end)/2,{nodes:h,reach:f}=s;for(let g=xt(h,r.start-f);g<h.length&&h[g].stable.start<r.end;g++){let w=h[g],x=w.stable.start,v=x+w.length;if(v<=r.start)continue;let y=n[w.id];d.add(w.id),l+=Math.min(v,r.end)-Math.max(x,r.start);let k=[],b=[];for(let S of r.exons){let M=Math.max(S.start,x),N=Math.min(S.end,v);if(N<=M)continue;let C=Tt(y,(M-x)/w.length,(N-x)/w.length);C.length===1&&C.push({...C[0]}),k.push(ye(C)),b.push(C)}k.length>0&&(i.push(...k),c.push({nodeId:w.id,d:k.join(""),stretches:b}));let L=Math.min(Math.max(u,x),v),R=Math.abs(L-u);if(R<p){p=R;let S=w.length?(L-x)/w.length:0;m=Tt(y,S,S)[0]}}m&&a.push({gene:r,exons:i.join(""),exonsByNode:c,nodeIds:d,at:m,covered:l/(r.end-r.start)})}return a}var ur="11.9.0";function _e(e,t,n={}){return{nodePositions:n.drawsRows?{}:e.nodePositions,deletions:t.bypassed,deletionRoutes:e.deletionRoutes,stranded:e.stranded,hiddenEdges:t.hidden}}var hr=(e,t)=>!!e.referencePath&&H(t).name===e.referencePath;function va(e,t){let n=H(t).name;return(e.paths??[]).filter(o=>H(o.name).name===n).sort((o,a)=>(o.start??0)-(a.start??0))}var fr=e=>new Map(e.nodes.map(t=>[t.id,t]));function Ma(e){let t=new Map;return e.edges.forEach((n,o)=>{t.set(`${n.from}>${n.to}`,o)}),{byId:fr(e),edgeAt:t}}function La(e,t,{byId:n,edgeAt:o}){let a=va(e,t),r=a[0];if(!r)return;let s=R=>n.get(R)?.length??0,i=R=>R.nodeIds.reduce((S,M)=>S+s(M),0),c=a.reduce((R,S)=>R+i(S),0),d=R=>{let S=Math.min(...R.map(M=>M.start??1/0));return Number.isFinite(S)?{start:S,end:Math.max(...R.map(M=>(M.start??0)+i(M)))}:void 0},m=d(a),p=m&&{contig:r.contig??Ve(H(t).name),...m},l=p?p.end-p.start:c,u=new Set,h=new Set,f=new Map,g=new Map,w=1,x=0;for(let R of a)p&&(x=Math.max(x,(R.start??0)-p.start)),R.nodeIds.forEach((S,M)=>{u.add(S);let N=(g.get(S)??0)+1;if(g.set(S,N),w=Math.max(w,N),M>0){let Xe=R.nodeIds[M-1],P=o.get(`${Xe}>${S}`)??o.get(`${S}>${Xe}`);P!==void 0&&h.add(P)}let C=s(S);f.has(S)||f.set(S,l>0?(x+C/2)/l:0),x+=C});let v=0,y=0,k;a.forEach((R,S)=>{if(k!==void 0&&R.start!==void 0&&R.start>k)for(let M of Rn(R.start-k,a[S-1].after,R.before))v+=M.cause==="missing"?M.bp:0,y+=M.cause==="unknown"?M.bp:0;k=R.start===void 0?void 0:R.start+i(R)});let b=hr(e,t),L=()=>{let R=b?[]:(e.paths??[]).filter(M=>hr(e,M.name));if(R.length===0)return;let S=d(R);return S?S.end-S.start:R.reduce((M,N)=>M+i(N),0)};return{name:t,reference:b,range:p,nodeIds:u,edgeIndexes:h,progress:f,passes:g,mostPasses:w,route:a.map(R=>R.nodeIds),steps:a.reduce((R,S)=>R+S.nodeIds.length,0),bp:c,referenceBp:L(),missingBp:v,unknownBp:y}}function gr(e,t,n,o){let a=new Map;for(let[r,s]of t.progress){let i=e.get(r),c=n.field==="progress"?s:o&&i?Hn(i,o):void 0;a.set(r,Un(n,c))}return a}function Na(e,t,n){let o=new Set,a=0,r=e.referencePath;if(!r||n.reference)return{reversed:o,bp:a};let s=e.pathVisits;if(!s)return{reversed:o,bp:a};let i=s.pathIndex(H(n.name).name),c=s.pathIndex(r);for(let d of n.progress.keys()){let m=t.get(d),p=m?s.slot(m.name):-1,l=p<0?-1:s.firstBy(p,i),u=p<0?-1:s.firstBy(p,c);l>=0&&u>=0&&s.reversed[l]!==s.reversed[u]&&(o.add(d),a+=m.length)}return{reversed:o,bp:a}}function $e(e,t,n){let o=Ma(e),a=new Set,r=t.filter(d=>!a.has(d.walk)&&a.add(d.walk)).flatMap(d=>{let m=La(e,d.walk,o);return m?[{walk:m,layer:d}]:[]}).sort((d,m)=>Number(m.walk.reference)-Number(d.walk.reference));if(r.length===0)return;let s=0,i=zn(r.map(({walk:d,layer:m})=>$t(m,d.reference,d.reference?0:s++,r.length===1))),c=r.map(({walk:d},m)=>{let p=i[m],{reversed:l,bp:u}=Na(e,o.byId,d);return{...d,encoding:p,colors:gr(o.byId,d,p,n),reversed:l,reversedBp:u}});return wr(c,n)}var Pa={field:"progress",scheme:"red"};function He(e,t,n,o){let a=fr(e);return t.walks.map(r=>{let s=n.find(c=>c.walk===r.name)?.color,i=$t({walk:r.name,color:{...Pa,...s}},r.reference,0);return wr([{...r,encoding:i,colors:gr(a,r,i,o)}],o)})}function wr(e,t){return{walks:e,referenceDomain:t?{start:t.start,end:t.start+t.span}:void 0,nodeIds:new Set(e.flatMap(n=>[...n.nodeIds])),edgeIndexes:new Set(e.flatMap(n=>[...n.edgeIndexes])),names:new Set(e.map(n=>n.name))}}var oe={..._t,width:1200,height:800,colorScheme:"auto",nodeWidth:"depth",contigThickness:6,connectorThickness:2};var br=[{value:"auto",label:"Auto"},{value:"uniform",label:"Uniform"},{value:"random",label:"Random"},{value:"rainbow",label:"Rainbow"},{value:"depth",label:"Depth"},{value:"node-length",label:"Node length"},{value:"stable-rank",label:"Stable rank"},{value:"reference-position",label:"Reference position"},{value:"grey",label:"Grey"}],Aa=br.map(e=>e.value);function We(e,t){return e!=="auto"?e:t?.anchoredBy?"reference-position":"uniform"}function yr(e,t,n){let o=n.region,a=n.colorDomain??o,r=n.walkRows,s=Te(t,{region:n.fitToDrawing?void 0:o,extent:r&&t.extent?he(r,n.walkRowPitch):void 0}),i=new Map(e.nodes.map(b=>[b.id,b])),c=We(n.colorScheme??oe.colorScheme,e),d=c==="reference-position"&&!t.tubeMap?Ne(e,a):void 0,m=Se(e,t.tubeMap?[]:Re(e),n.showDeletionEdges),p=n.walks??[],l=p.some(b=>b.color?.field==="reference")?d??Ne(e,a):void 0,u=p.length>0&&!t.tubeMap?$e(e,p,l):void 0,h=tt(n.facet),f=h.field&&u&&u.walks.length>1?He(e,u,p,l):void 0,g=h.field&&f?{panels:f,place:nt(f.map(b=>b.walks[0].name),h.field,h.domain)}:void 0,w=Ye(e.paths?.length?ve(e.paths):[]),x=n.referenceName??vt(e,o),v=n.contigThickness??oe.contigThickness,y=n.nodeWidth??oe.nodeWidth,k=u?.referenceDomain&&{...u.referenceDomain,name:x};return{bounds:s,nodeById:i,colorScheme:c,referenceRamp:d,drawnDeletions:m,layers:p,lift:u,facet:h,facets:g,labelOf:b=>w.get(b)??b,referenceName:x,keyText:b=>{let L=Po(b,k);return{note:L.delta+L.gaps+L.reversed,scale:L.scale}},contigThickness:v,nodeWidth:y,geometry:(b,L)=>Ke({..._e(t,m,{drawsRows:!!r}),graph:e,nodeById:i,colorScheme:c,contigThickness:v,connectorThickness:n.connectorThickness??oe.connectorThickness,drawPaths:!1,nodeWidth:y,linearLayout:n.linearLayout,highlight:b,axis:L,referenceRamp:d})}}var ft='font-family="Helvetica, Arial, sans-serif" font-size="11"',Ta=48,pe=18,xr=16,gt=16,Ga=32,Ea=22,Ia="rgb(160,160,160)",Rr="#1c1c22";function tn(e,t,n,o,a,r,s,i=1){let c=o.length>1?Ta:pe,d=o.length>1?`fill="url(#${e})"`:`fill="${o[0].color}"${i<1?` fill-opacity="${i}"`:""}`,m=o.length>1?`<linearGradient id="${e}">${o.map(l=>`<stop offset="${l.offset}" stop-color="${l.color}"/>`).join("")}</linearGradient>`:"";return{width:Math.max(c+5+(a.length+r.length)*se,(s?.length??0)*se),height:s?Ga:gt,markup:`${m}<g transform="translate(${t} ${n})" ${ft}><rect y="5" width="${c}" height="8" rx="2" ${d}/><text x="${c+5}" y="13"><tspan font-weight="bold">${Q(a)}</tspan>${Q(r)}</text>${s?`<text y="28">${Q(s)}</text>`:""}</g>`}}function Ca(e,t){return{width:pe+5+4*se,height:gt,markup:`<g transform="translate(${e} ${t})" ${ft}><rect x="1" y="4" width="${pe-2}" height="10" rx="4" fill="none" stroke="${Dt}" stroke-width="2"/><text x="${pe+5}" y="13">exon</text></g>`}}function Ba(e,t,n){let o=[6,9,12].map(a=>`<line y1="${a}" y2="${a}" x2="${pe}" stroke="#444" stroke-width="${Cn}"/>`).join("");return{width:pe+5+n.length*se,height:gt,markup:`<g transform="translate(${e} ${t})" ${ft}>${o}<text x="${pe+5}" y="13">${n}</text></g>`}}function Oa(e,t){let n=[],o=6,a=2,r=0;for(let s of e){let i=s(0,0);o>6&&o+i.width>t-6&&(o=6,a+=r+4,r=0),n.push(s(o,a).markup),o+=i.width+xr,r=Math.max(r,i.height)}return{markup:n,height:a+r}}function kr(e,t,n,o,a,r){return tn(e,t,n,Ht(o.encoding),a,r.note,r.scale)}function _a(e,t){return e.replaceAll(/([ML])(-?[\d.e-]+),(-?[\d.e-]+)/g,(n,o,a,r)=>`${o}${+(Number(a)*t.scaleX+t.translateX).toFixed(1)},${+(Number(r)*t.scaleY+t.translateY).toFixed(1)}`)}function $a(e,t,n,o,a){return`<rect x="${e-n/2}" y="${t-xe-At+2}" width="${n}" height="${xe+At*2-2}" rx="3" fill="#fff" fill-opacity="0.85" stroke="${Dt}"/><text x="${e}" y="${t}" font-family="Helvetica, Arial, sans-serif" font-size="${xe}" fill="${Rr}" text-anchor="middle"><tspan font-style="italic" font-weight="600">${Q(o)}</tspan>${a?Q(a):""}</text>`}function nn(e,t,n={}){let o=n.width??oe.width,a=n.height??oe.height,r=n.walkRows,{bounds:s,nodeById:i,referenceRamp:c,layers:d,lift:m,facet:p,facets:l,labelOf:u,referenceName:h,keyText:f,contigThickness:g,nodeWidth:w,geometry:x}=yr(e,t,n),v=t.pixelRows??!1,y=c&&{start:c.start,end:c.start+c.span},k=n.genes?.length&&!t.tubeMap&&!r?Oe(e,n.genes,t.nodePositions):[],b=ze(e,i,g,w),L=0;function R(P,T,A,O){let _=[],X=So(Ro(k,b.halfWidthPx,P,$=>_a($,T)),{id:`exons${L++}`,width:A,height:O});X&&_.push(ie(X));let G=$=>({x:$.x*T.scaleX+T.translateX,y:$.y*T.scaleY+T.translateY}),E={width:A,height:O};for(let{item:$,x:re,y:J,w:Yr,text:zr}of Pn(Mo(k,G,g,vo(t.nodePositions,T)),E,Nn(E))){let Ur=G($.at).y+g/2;_.push(`<line x1="${re}" x2="${re}" y1="${J-xe-2}" y2="${Ur}" stroke="${Rr}" stroke-width="0.8" stroke-opacity="0.6"/>`,$a(re,J,Yr,$.gene.name,zr.slice($.gene.name.length)))}r&&_.push(ie(Ot(r,{...T,width:A,height:O,...n.walkRowPitch},{ramp:y,rowGenes:n.rowGenes})));let F=fe(r,t,n.walkRowPitch);for(let{label:$,y:re}of F){let J=re*T.scaleY+T.translateY;J>=0&&J<=O&&_.push(`<text x="6" y="${J+4}" ${ft} stroke="#fff" stroke-width="3" paint-order="stroke">${Q($)}</text>`)}return _.join("")}function S(P,T,A){let O=Ae(s,T,A,v,l?{padLeft:K,padTop:K,padRight:K,padBottom:K}:{});if(!O)return"";let _=ot(O.scale,v),{canvas:X,markup:G}=xo(T,A),E=new ko(X);E.uploadGeometry(x(P,_));let F={scaleX:_.scaleX,scaleY:_.scaleY,translateX:O.translateX,translateY:O.translateY};return E.updateTransform({...F,dpr:1}),E.render([1,1,1,1]),G()+R(P,F,T,A)}let M=[],N;if(l){let{panels:P,place:T}=l,A=et({count:T.count,bounds:s,pixelRows:v,width:o,room:a,columns:T.columns??p.columns});P.forEach((O,_)=>{let X=T.cells[_],G=X%A.columns*(A.width+Pe),E=Math.floor(X/A.columns)*(A.height+Qe+Pe),F=O.walks[0];M.push(kr(`key${_}`,G+6,E+2,F,u(F.name),f(F)).markup,`<svg x="${G}" y="${E+Qe}" width="${A.width}" height="${A.height}">${S(O,A.width,A.height)}</svg>`)}),N=A.total}else{let P=[];m&&(m.walks.forEach((G,E)=>{P.push((F,$)=>kr(`key${E}`,F,$,G,u(G.name),f(G)))}),P.push((G,E)=>tn("faded",G,E,[{offset:0,color:Ia}],"",`not on ${m.walks.length===1?u(m.walks[0].name):"these walks"}`,void 0,.3)),Bn(m.walks)&&P.push((G,E)=>Ba(G,E,On(m.walks)))),r?Ct(r,{ramp:y,genes:n.rowGenes?.size?n.rowGeneGaps:void 0}).forEach((E,F)=>{P.push(($,re)=>{let J=Bt([E],$,re,`rows-key-${F}`);return{width:J.width-xr,height:gt,markup:ie(J.tree)}})}):!m&&c&&P.push((G,E)=>tn("ramp",G,E,Ht({field:"reference",scheme:"rainbow"}),h?`${h} position`:"Reference position","",No(h,c.start,c.start+c.span))),k.some(G=>G.exonsByNode.length>0)&&P.push((G,E)=>Ca(G,E));let T=Oa(P,o);M.push(...T.markup);let A=P.length>0?Math.max(Qe,T.height):0,O=o-2*B,_=v||!(s.w>0)?s.h:s.h*O/s.w,X=Math.max(160,Math.min(a-A,Math.ceil(_+2*B)));M.push(`<svg y="${A}" width="${o}" height="${X}">${S(m,o,X)}</svg>`),N=A+X}let C=n.walkStrip;if(C&&!r&&!t.tubeMap){let P=Ie(C.rows,{width:o}),T=Bt(Ct(C.rows,{ramp:y,genes:qt(P,C.rowGenes,C.rowGeneGaps)}),6,N+P.height,"strip-key");M.push(`<line x1="0" x2="${o}" y1="${N+.5}" y2="${N+.5}" stroke="#ddd"/>`,`<svg y="${N}" width="${o}" height="${P.height}">${ie(Ot(C.rows,P,{ramp:y,rowGenes:C.rowGenes,idPrefix:"strip"}))}${ie(Jt(C.rows,P,new Set(d.map(A=>A.walk))))}</svg>`,ie(T.tree)),N+=P.height+Ea}let Xe=JSON.stringify({generator:`@jbrowse/bandage-core@${ur}`,...n.spec===void 0?{}:{spec:n.spec}});return`<svg xmlns="http://www.w3.org/2000/svg" width="${o}" height="${N}" viewBox="0 0 ${o} ${N}"><metadata>${Q(Xe)}</metadata><rect width="${o}" height="${N}" fill="#fff"/>${M.join("")}</svg>
2
- `}var Ha=.9;function Fe(e,t){return e+2>=t||e>=Ha*t}var Wa=50;function on(e,t,n,o=[]){let a=new Map(e.nodes.map(s=>[s.name,s])),r=[];for(let s of t){let i=[],c=1/0,d=-1/0,m=1/0,p=[],l=ce(s);for(let[f,g]of l.entries()){let w=a.get(g),x=w&&n[w.id];if(!(!w||!x?.length)&&!(s.key?f===0||f===l.length-1:I(w)&&(w.stable.start<s.start||w.stable.start>=s.end))){p.push(w.id),i.push(ye(x.length===1?[x[0],x[0]]:x));for(let v of x)c=Math.min(c,v.x),d=Math.max(d,v.x),m=Math.min(m,v.y)}}if(p.length===0)continue;let u={x:(c+d)/2,y:m},h=s.covering===!0||Fe(p.length,e.nodes.length);r.push({bubble:s,...so(s,o),path:i.join(""),labelAt:u,members:p.length,nodeIds:p,whole:h,tick:!h&&!s.partial&&s.longestAlleleLength<Wa})}return r}function De(e,t){let n=new Set(t),o=e.nodes.filter(c=>n.has(c.name)),a=new Set(o.map(c=>c.id)),r=new Map(e.nodes.map(c=>[c.id,c.length])),s=new Map,i=e.paths?.flatMap(c=>{let d=c.nodeIds.findIndex(l=>a.has(l));if(d<0)return[];let m=c.nodeIds.filter(l=>a.has(l));s.set(c.name,{first:d,nodeIds:m});let p=c.nodeIds.slice(0,d).reduce((l,u)=>l+(r.get(u)??0),0);return[{...c,nodeIds:m,...c.start===void 0?{}:{start:c.start+p}}]});return{name:e.name,nodes:o,edges:e.edges.filter(c=>a.has(c.from)&&a.has(c.to)),...i?.length?{paths:i}:{},anchorPaths:vn(e,s),pathVisits:e.pathVisits,anchoredBy:e.anchoredBy,referencePath:e.referencePath}}function rn(e,t,n,o){let a=e.get(t);e.set(t,{min:Math.min(a?.min??1/0,n.min+o),max:Math.max(a?.max??-1/0,n.max+o),n:Math.min(ao,n.n+(a?.n??0))})}function Sr(e){if(!e.nodes.some(I))return[];let t=new Map(e.nodes.map(l=>[l.id,l])),n=Vt(e),o=new Map(n.map((l,u)=>[l,u])),a=new Int32Array(n.length+1),r=new Map,s=new Set;for(let l of e.edges){let u=o.get(l.from),h=o.get(l.to);if(u===void 0||h===void 0||u===h)continue;s.add(`${l.from}>${l.to}`).add(`${l.to}>${l.from}`);let[f,g]=u<h?[u,h]:[h,u];a[f+1]++,a[g]--;let[w,x]=u<h?[l.from,l.to]:[l.to,l.from];yn(r,w,x)}for(let l=1;l<a.length;l++)a[l]+=a[l-1];let i=e.nodes.filter(I).sort((l,u)=>l.stable.start-u.stable.start),c=new Set([i[0].id,i.at(-1).id]),d=i.map(l=>[l,o.get(l.id)]).filter(([l,u])=>c.has(l.id)||a[u]===0).sort(([l,u],[h,f])=>u-f||l.stable.start-h.stable.start),m=an(e,d.map(([l])=>l.id)),p=[];for(let l=0;l+1<d.length;l++){let[u,h]=d[l],[f,g]=d[l+1],w=n.slice(h+1,g);if(w.length===0)continue;let x=new Map([[u.id,{min:0,max:0,n:1}]]);for(let S of[u.id,...w]){let M=x.get(S);if(M)for(let N of r.get(S)??[])o.get(N)>g||rn(x,N,M,N===f.id?0:t.get(N).length)}let v=sn(e,t,m,u.id,f.id,()=>x.get(f.id)??{min:0,max:0,n:0}),y=u.stable.start+u.length,k=f.stable.start,b=[u.id,...w.filter(S=>I(t.get(S))),f.id],L=b.some((S,M)=>M>0&&!s.has(`${b[M-1]}>${S}`)),R=k-y;p.push(cn({refName:u.stable.refName,start:y,end:k},[u,...w.map(S=>t.get(S)),f],L&&!v.routes?{...v,min:R,max:R}:v,L||v.walksLeave))}return p}function an(e,t){let n=e.paths;if(!n)return;let o=new Map;for(let a of t)o.set(a,new Int32Array(n.length).fill(-1));return n.forEach((a,r)=>{let s=a.nodeIds;for(let i=0;i<s.length;i++){let c=o.get(s[i]);c?.[r]===-1&&(c[r]=i)}}),o}function sn(e,t,n,o,a,r){if(!n)return{...r(),walksLeave:!1};let s=[],i=1/0,c=-1/0,d=0,m=n.get(o),p=n.get(a);e.paths.forEach((u,h)=>{let f=m[h],g=p[h];if(f<0||g<0){(f>=0||g>=0)&&d++;return}let w=u.nodeIds,x=Math.min(f,g)+1,v=Math.max(f,g),y=g<f?b=>w[v-1-b]:b=>w[x+b],k=s.find(b=>b.steps.length===v-x&&b.steps.every((L,R)=>L===y(R)));if(!k){let b=Array.from({length:v-x},(R,S)=>y(S)),L=0;for(let R of b)L+=t.get(R)?.length??0;k={steps:b,bp:L,walks:[]},s.push(k)}k.walks.push(u.name),i=Math.min(i,k.bp),c=Math.max(c,k.bp)});let l=d>0;return s.length?{min:i,max:c,n:s.length,routes:s,walksLeave:l}:{...r(),walksLeave:l}}function cn(e,t,{min:n,max:o,n:a,routes:r},s){return{...e,segmentCount:t.length,pathCount:a,inversion:!1,shortestAlleleLength:n,longestAlleleLength:o,segments:t.map(i=>i.name).join(","),shortestAllele:void 0,longestAllele:void 0,partial:s,routes:r}}function Fa(e,t){let n=e.nodes.length*2,o=new Set,a=[],r=new Int32Array(n);for(let d of e.edges){let m=t.get(d.from),p=t.get(d.to);if(m===void 0||p===void 0)continue;let l=ke(d),u=m*2+(l.from==="end"?1:0),h=p*2+(l.to==="end"?1:0),f=Math.min(u,h)*n+Math.max(u,h);o.has(f)||(o.add(f),a.push(u,h),r[u]++,u!==h&&r[h]++)}let s=new Int32Array(n+1);for(let d=0;d<n;d++)s[d+1]=s[d]+r[d];let i=new Int32Array(s[n]),c=s.slice(0,n);for(let d=0;d<a.length;d+=2){let m=a[d],p=a[d+1];i[c[m]++]=p,m!==p&&(i[c[p]++]=m)}return{offset:s,next:i}}function Da(e,t,n){let o=new Int32Array(e),a=new Uint8Array(e*2),r=new Int32Array(e*2),s=new Int32Array(e),i=[],c=0;return d=>{let m=d>>1;c++,i.length=0;let p=0,l=0,u=0,h,f=g=>{a[g]||(a[g]=1,p++,i.push(g))};f(d),r[l++]=d;e:for(;l>0;){let g=r[--l],w=g>>1;if(o[w]=c,w!==m&&(s[u++]=g),a[g]&&(a[g]=0,p--),t[g]===t[g+1])break;for(let x=t[g];x<t[g+1];x++){let v=n[x],y=v>>1;if(y===m)break e;if(f(v^1),o[y]===c)continue;let k=!0;for(let b=t[v];b<t[v+1];b++)if(o[n[b]>>1]!==c){k=!1;break}k&&(r[l++]=v^1)}if(l===1&&p===1){u>0&&(h={source:d,sink:r[0],inside:s.slice(0,u)});break}}for(let g of i)a[g]=0;return h}}function Xa(e){return{source:e.sink^1,sink:e.source^1,inside:e.inside.map(t=>t^1).reverse()}}var Lr=new Intl.Collator(void 0,{numeric:!0});function dn(e,t){return I(e)&&I(t)&&e.stable.refName===t.stable.refName}function vr(e,t){let n=t[e.source>>1],o=t[e.sink>>1],a=dn(n,o)?n.stable.start-o.stable.start:0,r=((e.sink^1)&1)-(e.source&1);return(a||r||Lr.compare(n.name,o.name))<0}function Mr(e){return[e.source>>1,...Array.from(e.inside,t=>t>>1),e.sink>>1]}function Va(e){let{nodes:t}=e,n=new Map(t.map((c,d)=>[c.id,d])),{offset:o,next:a}=Fa(e,n),r=Da(t.length,o,a),s=new Map;for(let c=0;c<t.length*2;c++){let d=r(c);if(!d)continue;let m=d.source>>1,p=d.sink>>1,l=Math.min(m,p)*t.length+Math.max(m,p);(vr(d,t)||!s.has(l))&&s.set(l,d)}return{found:[...s.values()].map(c=>vr(c,t)?c:Xa(c)),offset:o,next:a}}function ja(e,t,n,o){let a=o.sink>>1,r=new Map([[o.source>>1,{min:0,max:0,n:1}]]);for(let s of[o.source,...o.inside]){let i=r.get(s>>1);if(i)for(let c=t[s];c<t[s+1];c++){let d=n[c]>>1;rn(r,d,i,d===a?0:e[d].length)}}return r.get(a)??{min:0,max:0,n:0}}function pn(e,t){let{nodes:n}=e,{found:o,offset:a,next:r}=Va(e),s=o.map(h=>Fe(h.inside.length,n.length)),i=o.map(Mr),c=new Map;i.forEach((h,f)=>{for(let g of h)bn(c,g,f)});let d=(h,f)=>c.get(h.inside[0]>>1).some(g=>g!==f&&!s[g]&&i[g].length>i[f].length&&i[f].every(w=>c.get(w).includes(g))),m=h=>t!==void 0||dn(n[h.source>>1],n[h.sink>>1]),p=o.filter((h,f)=>!s[f]&&m(h)&&!d(h,f)),l=new Map(n.map(h=>[h.id,h])),u=an(e,p.flatMap(h=>[n[h.source>>1].id,n[h.sink>>1].id]));return p.map(h=>{let f=n[h.source>>1],g=n[h.sink>>1],w=sn(e,l,u,f.id,g.id,()=>ja(n,a,r,h)),x=dn(f,g);return{...cn({refName:x?f.stable.refName:t.refName,start:x?f.stable.start+f.length:t.start,end:x?g.stable.start:t.end},Mr(h).map(v=>n[v]),w,w.walksLeave),key:`${f.name}>${g.name}`,...x?{}:{offReference:!0}}}).sort((h,f)=>h.start-f.start||h.end-f.end||Lr.compare(h.key,f.key))}function wt(e,t){let n=e.nodes.length,o=Sr(e);if(o.length===0){let a=pn(e,t);return t?[...a,{...t,covering:!0}]:a}return o.flatMap(a=>Fe(a.segmentCount-2,n)?[...pn(a.segmentCount===n?e:De(e,ce(a)),a),{...a,covering:!0}]:[a])}function ln(e,t,n){if(t==="uniform"||t==="grey")return;let o=Wn(e,n);return new Map(e.nodes.map((a,r)=>[a.id,_n(Fn(a,r,t,o))]))}var bt=JBrowseExports["@jbrowse/core/pluggableElementTypes/renderers/util/serializableFilterChain"];var Nr=bt&&bt.__esModule?bt.default:bt;var mn={paths:!1,bubbles:!1,deletions:!0,genes:!0,referenceStrip:!0,walkStrip:!1};function Pr(e){let t=z(e)?e:{};return new Set(Object.keys(mn).filter(n=>t[n]??mn[n]))}function Dh(e,t,n){let{[t]:o,...a}=z(e)?e:{};return n===mn[t]?a:{...a,[t]:n}}var un={depth:"depth",length:"node-length",rank:"stable-rank",position:"reference-position"},Ar=Object.fromEntries(Object.entries(un).map(([e,t])=>[t,e]));function Tr(e){if(e==="grey"||e==="uniform")return e;if(z(e)){let{field:t,scheme:n}=e;if(t==="id")return n==="rainbow"?"rainbow":"random";if(typeof t=="string"&&t in un)return un[t]}return"auto"}function Gr(e){return z(e)&&typeof e.domainMin=="number"&&typeof e.domainMax=="number"?{start:e.domainMin,end:e.domainMax}:void 0}function jh(e,t){return e==="grey"||e==="uniform"?e:e==="random"?{field:"id",scale:"categorical"}:e==="rainbow"?{field:"id",scheme:"rainbow"}:e==="reference-position"&&t?{field:"position",domainMin:t.start,domainMax:t.end}:Ar[e]?{field:Ar[e]}:{}}var Er=6;function hn(e){return typeof e=="number"?{width:"uniform",px:e}:z(e)?{width:e.field==="depth"?"depth":"uniform",px:typeof e.value=="number"?e.value:Er}:{width:"depth",px:Er}}function Uh(e,t){return e==="depth"?{field:"depth",value:t}:t}function Ya(e,t,n){let o=Mn(e,t);return o?Nt(o,n):void 0}function Ir(e){try{return e()}catch{return}}function Cr(e){let t=new Map;for(let n of e.nodes)t.set(n.id,n);return t}function Br(e,t,n){return t&&n?It({nodeId:e,nodeById:t,neighbors:n}):void 0}var Or=ro.views(e=>({sessionTrack(t){return U(e).tracks.find(n=>n.trackId===t)},get grammar(){return{}},get hasPendingSource(){return!1},get canRetryLoad(){return!1},get sourceTrack(){return Ir(()=>gn(e).configuration)},get containingView(){return Ir(()=>yt(e))}})).views(e=>{let t=r=>Ln(r,{equals:(s,i)=>JSON.stringify(s)===JSON.stringify(i)}),n=t(()=>Gr(e.grammar.color)),o=t(()=>tt(e.grammar.facet)),a=t(()=>{let r=uo(e.grammar.facet);return r&&r.field!=="walk"&&r.field!=="sample"?r:void 0});return{get chosenLayoutMode(){return e.grammar.layoutMode??"force"},get chosenColorScheme(){return Tr(e.grammar.color)},get statedColorDomain(){return n.get()},get chosenHover(){return e.grammar.hover??"nodes"},get nodeWidth(){return hn(e.grammar.size).width},get contigThickness(){return hn(e.grammar.size).px},get layerSet(){return Pr(e.grammar.layers)},get drawPaths(){return this.layerSet.has("paths")},get showBubbles(){return this.layerSet.has("bubbles")},get showDeletionEdges(){return this.layerSet.has("deletions")},get showGenes(){return this.layerSet.has("genes")},get showReferenceStrip(){return this.layerSet.has("referenceStrip")},get walkStrip(){return this.layerSet.has("walkStrip")},get facetSetting(){return o.get()},get walkRowGroupBy(){return a.get()},get walkRowSamples(){let r=e.grammar.rows?.kept;return Array.isArray(r)?r:void 0},get hoverLightsEverything(){return this.chosenHover==="everything"},get litNode(){return this.chosenHover==="off"?null:e.hoveredNode}}}).views(e=>({get paneWidth(){return yt(e).width},get paneMeasured(){return!0},get drawnGraph(){return e.layoutResult?.tubeMap?.graph??e.graph}})).views(e=>({get nodeById(){return e.drawnGraph&&Cr(e.drawnGraph)},get nodeLengths(){let t=new Map;for(let n of e.drawnGraph?.nodes??[])t.set(n.id,n.length);return t},get nodeCount(){return e.graph?.nodes.length??0},get edgeCount(){return e.graph?.edges.length??0},get pathCount(){return e.graph?.paths?.length??0},get legendAtRest(){return e.hoveredNode===null&&e.hoveredRowWalks.length===0},get hasGraph(){return e.graph!==void 0},get geometryPainted(){return no(e)},get showLoading(){return e.error===void 0&&(e.isLoading||e.hasPendingSource||e.graph!==void 0&&!this.geometryPainted)},get canCancelLoad(){return e.isLoading&&!e.layoutResult},get usesLayoutEngine(){return e.graph?Yt(e.chosenLayoutMode,e.graph):!1},get anchorPaths(){return e.graph?.anchorPaths??[]},get walkChoices(){let t=e.graph?.paths;return t?.length?ve(t):[]},get effectiveDrawPaths(){return e.drawPaths&&je(e.graph?.paths?.length??0)},get activeReferencePath(){return e.graph?.referencePath},get rampDomain(){let t=e.openBubbles.at(-1);return t&&!t.offReference&&t.end>t.start?{start:t.start,end:t.end}:e.statedColorDomain??e.graphRegion},get drawnReferenceRamp(){let t=e.drawnGraph;return t?Ne(t,this.rampDomain):void 0},get walkRamp(){return e.walkLayers.some(t=>t.color?.field==="reference")?this.drawnReferenceRamp:void 0},get modeDrawsNodes(){return Y(e.chosenLayoutMode).drawsNodes},get liftedWalkLayers(){return e.walkLayers.length>0||!this.modeDrawsNodes?e.walkLayers:e.hoveredRowWalks.map(t=>({walk:t}))},get walkLift(){let{graph:t}=e,n=this.liftedWalkLayers;return t&&!e.walkCut&&n.length>0&&!e.layoutResult?.tubeMap?$e(t,n,this.walkRamp):void 0},get facetPanels(){let{graph:t}=e,n=this.walkLift;return e.facetSetting.field!==""&&this.modeDrawsNodes&&t&&n&&e.walkLayers.length>1&&n.walks.length>1?He(t,n,e.walkLayers,this.walkRamp):void 0},get drawnWalks(){return this.facetPanels?.map(t=>t.walks[0])??this.walkLift?.walks??[]},get liftsWalks(){return!Qn.has(e.chosenLayoutMode)},get walkReference(){let t=this.walkLift?.referenceDomain;return t&&{...t,name:e.graphRegion?.refName}},get walkLabels(){return Ye(this.walkChoices)},walkLabel(t){return this.walkLabels.get(t)??t},get liftPaintsOffReference(){return!!this.walkLift?.walks.some(t=>t.encoding.field!=="walk"&&[...t.colors.values()].includes(Kn))},get liftedWalksLabel(){let t=this.walkLift?.walks??[];return t.length===1?this.walkLabel(t[0].name):"these walks"},get effectiveColorScheme(){return e.layoutResult?.tubeMap&&(this.tubeMapReads||e.chosenColorScheme==="auto")?"uniform":We(e.chosenColorScheme,e.graph)},get tubeMapReads(){let t=e.layoutResult;return!t?.tubeMapPanels&&(t?.tubeMap?.layout.reads.length??0)>0},get colorSchemeLock(){return this.walkLift?{value:"By walk",why:"Each highlighted haplotype colours its own lane: set it under Haplotypes, Color highlighted..."}:this.tubeMapReads?{value:"By strand",why:"Reads take the reds and blues, so the tube map leaves its nodes clear"}:void 0},get nodePositions(){return e.layoutResult?.nodePositions},get labelsNodeSizes(){return!e.layoutResult?.tubeMap&&!this.walkLift},get alleleDeletions(){return e.layoutResult?.alleleDeletions??[]},get deletionRoutes(){return e.layoutResult?.deletionRoutes},get stranded(){return e.layoutResult?.stranded},get pixelRows(){return e.layoutResult?.pixelRows??!1},get zoomPercent(){return`${(e.scale*100).toFixed(1)}%`},get isDefaultViewport(){return e.scale===1&&e.translateX===0&&e.translateY===0}})).views(e=>({get derivedBubbles(){return e.graph?wt(e.graph):[]},get openBubbleInsides(){let{graph:t}=e;return t?e.openBubbles.map(n=>wt(De(t,ce(n)),n).filter(o=>!o.covering)):[]},get openBubble(){return e.openBubbles.at(-1)},get openBubbleFocus(){let t=this.openBubble,{graph:n}=e;if(!t||!n)return;let o=new Set(ce(t)),a=new Set(n.nodes.filter(s=>o.has(s.name)).map(s=>s.id)),r=new Set;return n.edges.forEach((s,i)=>{a.has(s.from)&&a.has(s.to)&&r.add(i)}),{walks:[],nodeIds:a,edgeIndexes:r,names:new Set}},get drawnHighlight(){return e.walkLift??this.openBubbleFocus},bubbleIsOpen(t){return e.openBubbles.some(n=>at(n,t))},bubbleFaded({bubble:t,nodeIds:n}){let o=e.walkLift,a=this.openBubbleFocus;return o?!n.some(r=>o.nodeIds.has(r)):!!a&&!this.bubbleIsOpen(t)&&!n.every(r=>a.nodeIds.has(r))}})).views(e=>({get bubbles(){let t=e.indexBubbles?.length?e.indexBubbles:e.derivedBubbles,n=new Set(t.map(st));return[...t,...e.openBubbleInsides.flat().filter(o=>!n.has(st(o))&&n.add(st(o)))]},get foldNote(){let t=e.foldedBelowBp;return t===void 0?void 0:`variants under ${Tn(t)} folded into the reference`}})).views(e=>({get cutHaplotypes(){},get sourceAdapter(){let t=e.sourceTrack;return t?Yo(e,t):void 0},get sourceTrackId(){let t=e.sourceTrack;return t?V(t,"trackId"):void 0},get sessionTracks(){let t=U(e);return t.tracks.map(n=>({trackId:n.trackId,name:V(n,"name"),adapterType:V(n,"adapter").type,assemblies:Qt(t,n)}))}})).views(e=>({get assemblyTrackChoices(){let t=e.graphRegion,n=t&&Zt(U(e),t.assemblyName);return n?e.sessionTracks.filter(o=>o.assemblies.includes(n)):[]}})).views(e=>({get geneTrackChoices(){return e.assemblyTrackChoices.filter(t=>ct.has(t.adapterType))},get repeatTrackChoices(){return e.assemblyTrackChoices.filter(t=>_o.has(t.adapterType))},get repeatChoices(){return e.repeatArrays??[]}})).views(e=>({get repeatTrack(){return $o(e.repeatTrackChoices,e.repeatTrackId)},get geneTrack(){return dt(e.geneTrackChoices,e.geneTrackId)},get repeatOptions(){return[{value:"",label:"Whole window"},...e.repeatChoices.map(({key:t,name:n,unit:o})=>({value:t,label:`${n} \xB7 ${o.toLocaleString()} bp unit`}))]},get selectedRepeat(){return e.repeatChoices.find(t=>t.key===e.repeatKey)},get backbone(){return e.graph?St(e.graph):void 0},get cutWalkRows(){let t=e.walkCut?.walkRowRuns;return t?Nt(t):e.graph?ue(e.graph,e.graphRegion):void 0},assemblySpellings(t){let{assemblyManager:n}=U(e),o=n.has(t)?n.get(t):void 0,a=e.sourceAdapter?.assemblyNameToPanSN??{},r=[t,...o?[o.name,...o.aliases]:[]];return{name:t,aliases:[...r,...r.flatMap(s=>a[s]??[])]}},get drawsLoadedReference(){let t=e.graph;return t?.anchoredBy==="tags"||t?.referencePath!==void 0&&t.referencePath===e.loadedReferencePath}})).views(e=>({get geneAssembly(){let t=e.graphRegion;return t?e.assemblySpellings(t.assemblyName):void 0},get geneLaneFilter(){let t=e.containingView;if(!t)return;let n=Ho(t,e.geneTrack?.trackId);return n.length?new Nr({filters:n,jexl:wn(e).pluginManager.jexl}):void 0},get geneFeatures(){let t=e.geneTrackFeatures,n=this.geneLaneFilter;return t?Wo(n?t.filter(o=>n.passes(o)):t):void 0},get backboneGenes(){let{backbone:t}=e,{geneAssembly:n,geneFeatures:o}=this,a=e.drawsLoadedReference||n!==void 0&&Mt(t,[n])!==void 0;return t&&o&&a?Lt(o,t):void 0}})).views(e=>({get nodeNeighbors(){return e.drawnGraph?Z(e.drawnGraph):void 0},get nodeInk(){return ze(e.drawnGraph,e.nodeById,e.contigThickness,e.nodeWidth)},get allDeletions(){return e.graph&&this.drawsNodes?Re(e.graph):[]},get cohortWalkRows(){if(e.chosenLayoutMode!=="walkrows"||!e.graph)return;let t=e.selectedRepeat,n=e.walkCut,o=t?n?Ya(n,t,t.unit):ue(e.graph,t,t.unit):e.cutWalkRows;if(!o)return;let[a,...r]=Fo([o.reference,...o.rows],t?.calls);return{...o,reference:a,rows:r}},get walkRowSampleChoices(){let t=this.cohortWalkRows?.rows??[];return{samples:[...new Set(t.map(n=>n.sample))].sort(),disagreeing:[...new Set(t.filter(n=>n.call?.agrees===!1).map(n=>n.sample))]}},get walkRowSamplesTsv(){let t=e.sourceAdapter?.samplesTsvLocation;return t&&Sn(t)?t:void 0},get walkRowGroupFields(){return mo(e.walkRowSampleTable)},get tubeMapColoring(){let t=e.tubeMapColorBy,n=e.walkRowSampleTable;if(!t||!n||!this.walkRowGroupFields.includes(t))return;let o=yo(t,n),a=(e.graph?.paths??[]).map(r=>H(r.name).name).filter(r=>r!==e.graph?.referencePath);return{field:t,valueOf:o,palette:wo(a.map(o)),unvalued:a.some(r=>o(r)==="")}},get tableGroupBy(){let t=e.walkRowGroupBy,n=e.walkRowSampleTable;return t&&n&&this.walkRowGroupFields.includes(t.field)?{groupBy:t,table:n}:void 0},get tubeMapPanelSplit(){let{field:t,domain:n}=e.facetSetting,o=this.tableGroupBy;return t!==""?{by:t,domain:n}:o?{by:"column",...o.groupBy,table:o.table}:void 0},get keptCohortRows(){let t=this.cohortWalkRows;return t&&Me(t.rows,e.walkRowSamples)},get walkRowGroups(){let t=this.keptCohortRows,n=this.tableGroupBy;return t&&n?ho(t,n.table,n.groupBy):void 0},get walkRowBars(){let t=this.cohortWalkRows,n=this.keptCohortRows;return t&&n?{...t,rows:this.walkRowGroups?.rows??n}:void 0},get drawsNodes(){return Y(e.drawnLayoutMode??e.chosenLayoutMode).drawsNodes},get genePins(){Ge(e.positionsVersion);let t=e.layoutResult?.nodePositions;return e.showGenes&&this.drawsNodes&&e.graph&&e.backboneGenes&&t?Oe(e.graph,e.backboneGenes,t):[]},get bubbleHalos(){Ge(e.positionsVersion);let t=e.layoutResult?.nodePositions;return!e.showBubbles||!this.drawsNodes||!e.graph||!t?[]:on(e.graph,e.bubbles,t,e.repeatArrays)},get referenceRamp(){return e.effectiveColorScheme==="reference-position"?e.drawnReferenceRamp:void 0},get assemblyNames(){let t=e.graphRegion;return t?[t.assemblyName]:[]},get axisScale(){return ot(e.scale,e.pixelRows)},get scaleX(){return this.axisScale.scaleX},get scaleY(){return this.axisScale.scaleY}})).views(e=>({get screenTransform(){return{scaleX:e.scaleX,scaleY:e.scaleY,translateX:e.translateX,translateY:e.translateY}},toScreen(t){return{x:t.x*e.scaleX+e.translateX,y:t.y*e.scaleY+e.translateY}},get deletionDrawing(){return e.graph?Se(e.graph,e.allDeletions,e.showDeletionEdges):void 0},get deletions(){return this.deletionDrawing?.shown??[]},get deletionEdgeIndexes(){return this.deletionDrawing?.bypassed},get hiddenEdgeIndexes(){return this.deletionDrawing?.hidden},get referenceRampDomain(){let t=e.referenceRamp;return t?{start:t.start,end:t.start+t.span}:void 0},get paintsNodeColors(){return e.drawsNodes||!!e.layoutResult?.tubeMap},get referenceRampDrawsOffReference(){return!!e.referenceRamp&&this.paintsNodeColors&&!!e.drawnGraph?.nodes.some(t=>!I(t))},get tubeMapNodeColors(){let t=e.drawnGraph;return e.layoutResult?.tubeMap&&t?ln(t,e.effectiveColorScheme,e.referenceRamp):void 0},get tubeColorKind(){let t=e.layoutResult,n=e.drawnGraph?.paths??[],o=e.tubeMapReads;return t?.tubeMap?e.tubeMapColoring&&!o?"value":t.tubeMapPanels?"role":this.tubeMapNodeColors?"tinted":!o&&(!je(n.length)||n.some(a=>a.members))?"role":"path":void 0},tubeColorsOf(t,n){let o=t.paths??[],a=this.tubeColorKind,r=e.tubeMapColoring;return a==="value"&&r?bo(o,t.referencePath,r.valueOf,r.palette):a==="tinted"?Ft(o,t.referencePath,go):a==="role"?Ft(o,t.referencePath):n},fadeUnhovered(t,n,o){let a=new Set(e.hoveredRowWalks);return a.size>0?t.map((r,s)=>{let i=n[s]?.name??"";return a.has(i)||o!==void 0&&H(i).name===o?r:Ue}):t},get tubeMapTubeColors(){let t=e.layoutResult?.tubeMap,n=e.drawnGraph;return t&&n?this.fadeUnhovered(this.tubeColorsOf(n,t.pathColors),n.paths??[]):void 0},nodeSpan(t){return Br(t,e.nodeById,e.nodeNeighbors)},get hoverDrawing(){let t=e.hoveredPanel;return(t===null?void 0:e.layoutResult?.tubeMapPanels?.[t]?.result.tubeMap)??e.layoutResult?.tubeMap},get hoverGraph(){return this.hoverDrawing?.graph??e.drawnGraph},get hoverNodeById(){let t=this.hoverGraph;return t===e.drawnGraph?e.nodeById:t&&Cr(t)},get hoverNeighbors(){let t=this.hoverGraph;return t===e.drawnGraph?e.nodeNeighbors:t&&Z(t)}})).views(e=>({get pathLegend(){let t=e.drawnGraph?.paths;return(e.layoutResult?.tubeMap?e.tubeColorKind==="path":e.drawPaths)&&t&&je(t.length)&&!t.some(o=>o.members)?ve(t,e.tubeMapTubeColors):[]},get hoveredSpan(){let t=e.hoveredNode,n=e.hoveredBubble;return t!==null?Br(t,e.hoverNodeById,e.hoverNeighbors):n&&!n.offReference?{start:n.start,end:n.end}:void 0},get hoverHighlight(){let t=e.graphRegion,n=this.hoveredSpan;return t&&n&&e.chosenHover!=="off"?{refName:t.refName,assemblyName:t.assemblyName,...n}:void 0}}));var _r=Or.views(e=>({get host(){let t=e.containingView;return Xo(t)?t:void 0}})).views(e=>({get pairedViewId(){return e.host?.id??e.connectedViewId}})).views(e=>({get contributingAssemblies(){let t=e.graph,n=t?q(t):[];return t?cr(t,{maxGap:n.length>0?Rt(n):1/0}):[]}})).views(e=>({get assemblyResolver(){let{assemblyManager:t}=U(e),n=e.sourceAdapter?.assemblyNameToPanSN,o=new Map(Object.entries(n??{}).map(([r,s])=>[s,r])),a=r=>r!==void 0&&t.has(r)?t.get(r)?.name??r:void 0;return r=>a(o.get(r))??a(r)},get geneTracksByAssembly(){let t=new Map;for(let n of e.sessionTracks)if(ct.has(n.adapterType))for(let o of n.assemblies)t.set(o,[...t.get(o)??[],n]);return new Map([...t].flatMap(([n,o])=>{let a=dt(o,"");return a?[[n,a]]:[]}))}})).views(e=>({get launchableAssemblies(){return dr(mr(e.contributingAssemblies,e.graphRegion),e.assemblyResolver)},get canHighlightInLinearView(){let t=e.graphRegion;return t!==void 0&&Be({views:[...U(e).views],connectedViewId:e.pairedViewId,assemblyName:t.assemblyName})!==void 0},nodeLaunchTargets(t){let n=e.nodeById?.get(t),o=n?sr(n):void 0,a=o?Ce(e.assemblyResolver,o):void 0,r=e.graphRegion,s=r?e.nodeSpan(t):void 0,i=r&&s?{sample:r.assemblyName,haplotype:void 0,refName:r.refName,...s}:void 0;return{own:o&&a?{location:en(o),assembly:a}:void 0,reference:r&&i?{location:en(i),assembly:r.assemblyName}:void 0,highlight:r&&i?{location:i,assembly:r.assemblyName}:void 0}}}));var $r=_r.views(e=>({get walkStripShown(){return zt({walkStrip:e.walkStrip,mode:{drawsNodes:e.modeDrawsNodes},drawsPicture:!!e.layoutResult?.tubeMap||!!e.walkRowBars,walks:e.graph?.paths?.length??0,host:!!e.host})},get walkStripRows(){let t=this.walkStripShown?e.cutWalkRows:void 0;return t?{...t,rows:Me(t.rows,e.walkRowSamples)}:void 0},get walkStripFrame(){let t=this.walkStripRows;if(t)return Ie(t,{width:e.paneWidth})},get cutsWholeWalks(){return Ut(Y(e.chosenLayoutMode),{walkStrip:e.walkStrip,host:!!e.host})},get walkStripMarks(){let t=this.walkStripRows,n=e.hoveredNode??e.selectedNode,o=n===null?void 0:e.nodeById?.get(n);return t&&o&&e.graph?Kt(e.graph,[t.reference,...t.rows],o):[]},rowLocation(t,n){let o={sample:t.sample,haplotype:t.haplotype===void 0?void 0:`${t.sample}#${t.haplotype}`};return{...o,assembly:Ce(e.assemblyResolver,o),span:{refName:n.contig,...Je(n,t.bp)}}},get walkStripLocator(){let t=e.stripHover?e.hoveredNode:null;return t===null?void 0:it(e.nodePositions?.[t],e.toScreen)}})).views(e=>({get walkGeneReads(){let t=e.walkRowBars??e.walkStripRows;if(!t||!e.showGenes)return;let n=[],o=0,a=0;for(let r of t.rows){if(!r.axis){a++;continue}let{assembly:s,span:i}=e.rowLocation(r,r.axis),c=s?e.geneTracksByAssembly.get(s):void 0;if(!s||!c){o++;continue}n.push({row:r.name,trackId:c.trackId,region:{assemblyName:s,...i}})}return{reads:n.slice(0,Wt),gaps:{untracked:o,unplaced:a,unread:Math.max(0,n.length-Wt)}}},get walkRowGeneGaps(){return this.walkGeneReads?.gaps},walkRowLaunchTarget(t,n=e.walkRowBars){let o=n?[n.reference,...n.rows][t]:void 0;if(!o?.axis)return;let{sample:a,haplotype:r,assembly:s,span:i}=e.rowLocation(o,o.axis);return{label:o.label,assembly:t===0?e.graphRegion?.assemblyName:s,location:{sample:a,haplotype:r,...i}}},get walkRowGenes(){let t=e.walkRowBars??e.walkStripRows;if(!t||!e.showGenes)return;let n=new Map(e.walkGeneFeatures??[]);return e.geneFeatures&&n.set(t.reference.name,e.geneFeatures),n.size?Vn([t.reference,...t.rows],n):void 0}}));var Hr=$r.views(e=>({get xIsReferenceBp(){return e.layoutResult?.referenceAxis===!0&&Y(e.drawnLayoutMode??e.chosenLayoutMode).cutMargins}})).views(e=>({get hostPlacesX(){let{host:t,graphRegion:n}=e;return t!==void 0&&t.initialized&&n!==void 0&&e.xIsReferenceBp&&!t.dynamicBlocks.contentBlocks.some(o=>o.refName===n.refName&&o.reversed)}})).views(e=>({get hostBpFrame(){let{host:t,graphRegion:n}=e;return t?.initialized&&n?jo(t,n):void 0}})).views(e=>({get hostFrame(){return e.hostPlacesX?e.hostBpFrame:void 0},get tubeMapPicture(){let t=e.layoutResult?.tubeMap;return t?po(t):void 0},get tubeMapReference(){let t=e.layoutResult?.tubeMap;return t?io(t):void 0},get tubeMapDeviations(){let t=e.layoutResult?.tubeMap;return t?.coarse?co(t,t.coarse.deviations):[]},get tubeMapConnectedBoxes(){let t=this.tubeMapReference,{layoutResult:n}=e;return t&&!n?.referenceAxis&&!n?.tubeMapPanels?[...t.values()].flat():void 0}})).views(e=>({get tubeMapGenes(){let t=e.tubeMapReference;return e.showGenes&&!e.host&&t&&e.backboneGenes&&!e.layoutResult?.tubeMapPanels?To(t,e.backboneGenes):[]},get referenceStripApplies(){return!!e.host?.initialized&&!!e.layoutResult&&e.drawsNodes&&!e.hostPlacesX&&!e.facetPanels}})).views(e=>({get referenceStripBlocks(){let{graph:t}=e;if(!e.showReferenceStrip||!e.referenceStripApplies||!t)return[];let n=Co(t,{colorScheme:e.effectiveColorScheme,referenceRamp:e.referenceRamp,walks:e.walkLift?.walks}),o=e.walkLift?void 0:e.openBubbleFocus;return o?n.map(a=>o.nodeIds.has(a.node)?a:{...a,colors:[Ue],faded:!0}):n}})).views(e=>({get referenceStripShown(){return e.referenceStripBlocks.length>0&&e.hostBpFrame!==void 0},get referenceStripOverhangs(){let t=e.hostBpFrame;if(!t||e.referenceStripBlocks.length===0)return!1;let{left:n,right:o}=Bo(e.referenceStripBlocks,t,e.paneWidth);return n>0||o>0},get referenceStripFaded(){return e.referenceStripBlocks.some(t=>t.faded)}})).views(e=>({get referenceStripLit(){if(!e.referenceStripShown)return;let t=e.hoveredNode===null?e.hoveredBubble:null;if(t&&!t.offReference){let a=e.bubbleHalos.find(r=>at(r.bubble,t));return{start:t.start,end:t.end,anchor:a?e.toScreen(a.labelAt):void 0}}let n=e.hoveredNode??e.selectedNode,o=n===null?void 0:e.nodeSpan(n);return o&&n!==null?{...o,anchor:it(e.nodePositions?.[n],e.toScreen)}:void 0},referenceStripNodeAt(t,n){let o=e.hostBpFrame;return e.referenceStripShown&&o?Oo(e.referenceStripBlocks,o,t,n):void 0},get referenceStripZonePx(){return e.referenceStripShown?Io:0}}));var za=3e3,Ua=350,Ka=34;function Ja(e){let t=[0];for(let n=1;n<e.length;n++)t.push(t[n-1]+Math.hypot(e[n].x-e[n-1].x,e[n].y-e[n-1].y));return t}function qa(e,t){if(e.length===1||t===1)return Array.from({length:t},()=>({...e[0]}));let n=Ja(e),o=n.at(-1),a=[],r=1;for(let s=0;s<t;s++){let i=o*s/(t-1);for(;r<e.length-1&&n[r]<i;)r++;let c=n[r]-n[r-1],d=c>0?(i-n[r-1])/c:0,m=e[r-1],p=e[r];a.push({x:m.x+(p.x-m.x)*d,y:m.y+(p.y-m.y)*d})}return a}var Za=400,Wr=1.8,Qa=.1;function _g(e,t,n,o,a){let r=y=>({x:(y.x*t.scaleX+t.translateX-o.translateX)/o.scaleX,y:(y.y*t.scaleY+t.translateY-o.translateY)/o.scaleY}),s={};for(let[y,k]of Object.entries(n)){let b=e[y];b?.length&&k.length&&(s[y]=qa(b.map(r),k.length))}let i=new Map,c=(y,k)=>{let b=i.get(y);b?b.push(k):i.set(y,[k])};for(let y of a){let{from:k,to:b}=y;if(k!==b&&n[k]?.length&&n[b]?.length){let L=ke(y);c(k,{id:b,side:L.to}),c(b,{id:k,side:L.from})}}let d=new Map,m=y=>d.get(y.id)??(y.side==="start"?s[y.id][0]:s[y.id].at(-1)),p=Object.keys(s),l=[];for(let y of p)for(let k of i.get(y)??[]){if(s[k.id]||d.has(k.id))continue;let b=i.get(k.id).find(L=>L.id===y);d.set(k.id,{...m(b)}),p.push(k.id),l.push(k.id)}let u=new Map(l.map((y,k)=>[y,k])),h=new Float64Array(l.map(y=>d.get(y).x)),f=new Float64Array(l.map(y=>d.get(y).y)),g=new Float64Array(l.length),w=new Float64Array(l.length),x=l.map((y,k)=>i.get(y).flatMap(b=>{let L=u.get(b.id);if(L===void 0){let R=m(b);return g[k]+=R.x,w[k]+=R.y,[]}return[L]})),v=l.map(y=>i.get(y).length);for(let y=0;y<Za;y++){let k=0;for(let b=0;b<l.length;b++){let L=g[b],R=w[b];for(let N of x[b])L+=h[N],R+=f[N];let S=Wr*(L/v[b]-h[b]),M=Wr*(R/v[b]-f[b]);k=Math.max(k,Math.abs(S*o.scaleX)+Math.abs(M*o.scaleY)),h[b]+=S,f[b]+=M}if(k<Qa)break}l.forEach((y,k)=>{s[y]=n[y].map(()=>({x:h[k],y:f[k]}))});for(let[y,k]of Object.entries(n))s[y]??=k.map(b=>({...b}));return s}function es(e,t){let n=0,o=1/0;return e.forEach((a,r)=>{let s=(a.x-t.x)**2+(a.y-t.y)**2;s<o&&(o=s,n=r)}),n}function $g(e,t,n,o){let a=(r,s)=>{let i=n[r],c=o[r];if(!i||!c||c.length===0)return{x:0,y:0};let d=es(c,s);return{x:i[d].x-c[d].x,y:i[d].y-c[d].y}};return Object.fromEntries(Object.entries(e).map(([r,s])=>{let i=t[Number(r)],c=a(i?.from??"",s[0]),d=a(i?.to??"",s.at(-1));return[r,s.map((m,p)=>{let l=s.length>1?p/(s.length-1):0;return{x:m.x+c.x+(d.x-c.x)*l,y:m.y+c.y+(d.y-c.y)*l}})]}))}function Fr(e,t,{ids:n,alpha:o}){let a=(r,s)=>{for(let i=0;s&&i<s.count;i++){let c=r[s.start+i];c.color=$n(c.color,o)}};for(let r of n)a(e.nodeStrokes,e.nodeStrokeRuns.get(r));t.forEach(({from:r,to:s},i)=>{(n.has(r)||n.has(s))&&(a(e.edgeCurves,e.edgeCurveRuns.get(i)),a(e.arrows,e.arrowRuns.get(i)))})}function ts(e){return e<.5?4*e*e*e:1-(-2*e+2)**3/2}function Hg(e,t,n,o){return!(e.referenceAxis||t.referenceAxis||e.pixelRows||t.pixelRows||t.tubeMap||o||n>za)}function Wg(){return typeof requestAnimationFrame<"u"&&!("matchMedia"in window&&window.matchMedia("(prefers-reduced-motion: reduce)").matches)}function Fg(e,t,n){let o={frame:0,finish:()=>{e(1)}},a=0,r=performance.now(),s=()=>{if(!t()){n();return}let i=performance.now();a+=Math.min(i-r,Ka),r=i;let c=Math.min(1,a/Ua);e(ts(c)),c<1?o.frame=requestAnimationFrame(s):n()};return o.frame=requestAnimationFrame(s),o}function Dg(e,t,n,o){for(let[a,r]of Object.entries(e)){let s=t[a],i=n[a];!s||!i||r.forEach((c,d)=>{c.x=o===1?i[d].x:s[d].x+(i[d].x-s[d].x)*o,c.y=o===1?i[d].y:s[d].y+(i[d].y-s[d].y)*o})}}var ns=8,os=19,Dr=Pe+os,rs=48;function as(e,t,n){if(!(!e||!t))return qe(e.rowPx,e.barPx)?n:{untracked:0,unread:0,...n,crowded:!0}}var dw=Hr.views(e=>({get paneCeiling(){return Math.max(rt,e.paneHeight??Jn)},get fitRoom(){return e.host?this.canvasHeight:this.paneCeiling},get walkRowPitch(){let t=e.walkRowBars;if(!t)return;let n=this.fitRoom,o=(e.walkRowGroups?.sections.length??0)*lo;return Ze(t.rows.length+1,n-this.fitPadTopBase-B-o)},get walkRowPlacement(){let t=this.walkRowPitch;return t?fo(e.walkRowGroups?.sections??[],t.rowPx):void 0},get walkRowGeneKey(){return as(this.walkRowPitch,!!e.walkRowGenes?.size,e.walkRowGeneGaps)},get drawnRowLabels(){let t=this.walkRowPlacement,n=fe(e.walkRowBars,e.layoutResult,this.walkRowPitch);return e.walkRowBars&&t?n.map((o,a)=>({...o,y:t.rowY(a)})):n},get visibleRowLabels(){return this.drawnRowLabels.flatMap(({label:t,y:n})=>{let o=e.toScreen({x:0,y:n}).y;return o>=0&&o<=this.canvasHeight?[{label:t,y:n,top:o}]:[]})},get fitPadLeft(){return this.drawnRowLabels.reduce((t,n)=>Math.max(t,An(n.label,0).x1+6),B)},get layoutBounds(){let t=e.layoutResult,n=e.walkRowBars,o=n&&t?.extent?he(n,this.walkRowPitch):void 0;return t?Te(t,{region:e.graphRegion,extent:o&&{...o,maxY:o.maxY+(this.walkRowPlacement?.headersPx??0)}}):void 0},get hoveredWalkRowText(){let t=e.walkRowBars,n=e.hoveredWalkRow;if(!t||n===null||this.walkRowPitch?.readouts!==!1)return;let o=t.reference.name===n,a=o?t.reference:t.rows.find(r=>r.name===n);return a?{label:a.label,readout:Dn(a,o?void 0:t.reference,t.unit,a.call)}:void 0},walkRowAt(t,n){let o=e.walkRowBars,a=this.walkRowPitch,r=this.walkRowPlacement;if(!o||!a||!r)return;let s=r.rowAt((n-e.translateY)/e.scaleY,o.rows.length+1),i=[o.reference,...o.rows][s],c=r.rowY(s)*e.scaleY+e.translateY,d=(t-e.translateX)/e.scaleX-o.origin;return i&&Math.abs(n-c)<=a.barPx/2+2&&d>=0&&d<=i.bp?s:void 0},get fitPadTopBase(){let t=Eo(e.tubeMapGenes);return B+Math.max(0,t-1)*Go+e.referenceStripZonePx},get legendRoom(){let t=this.layoutBounds,{width:n,height:o}=e.legendSize;if(!t||t.w<=0||n===0||e.facetPanels||e.tubeMapReads)return;if(e.hostPlacesX)return"top";let a=this.fitPadTopBase,r=this.fitRoom,s=m=>(e.paneWidth-this.fitPadLeft-m)/t.w,i=m=>e.pixelRows?t.h+m+B<=r?1/0:0:(r-m-B)/t.h,c=Math.min(s(n+2*ee),i(a));return Math.min(s(B),i(a+o+ee))>=c?"top":"right"},get fitPadTop(){return this.fitPadTopBase+(this.legendRoom==="top"?e.legendSize.height+ee:0)},get fitPadRight(){return this.legendRoom==="right"?Math.max(B,e.legendSize.width+2*ee):B},get minFitScale(){let t=this.layoutBounds,n=e.layoutResult,o=n?.tubeMap?.layout.tracks[0]?.width;return t&&t.h>0&&o&&!n.referenceAxis?Math.min(Zn/o,(this.paneCeiling-this.fitPadTop-B)/t.h):0},get facetSpec(){let{field:t,domain:n,columns:o}=e.facetSetting;return t===""?void 0:n.length===0&&o===void 0?t:{field:t,domain:[...n],...o===void 0?{}:{columns:o}}},get facetPlacement(){let t=e.facetPanels,{field:n,domain:o}=e.facetSetting;return t?nt(t.map(a=>a.walks[0].name),e.hostPlacesX||n===""?"walk":n,o):void 0},facetGridIn(t){let n=this.facetPlacement,o=this.layoutBounds;return n&&o&&o.w>0?et({count:n.count,bounds:o,pixelRows:e.pixelRows,width:e.paneWidth,room:t,columns:e.hostPlacesX?1:n.columns??e.facetSetting.columns}):void 0},get facetGrid(){return this.facetGridIn(this.fitRoom-Dr)},get tooltipRightPx(){let{width:t,height:n}=e.legendSize,o=ee+e.referenceStripZonePx+n;return!e.facetPanels&&t>0&&o>this.canvasHeight-rs?t+2*ee:ns},get canvasHeight(){let t=this.layoutBounds,n=this.paneCeiling;if(!t)return n;let o=this.facetGrid;if(o)return Math.max(rt,o.total+Dr);let a=Math.max(rt,e.legendSize.height+2*ee+e.referenceStripZonePx),r=this.fitPads,s=r.top+r.bottom;if(e.pixelRows)return Math.min(n,Math.max(a,t.h+s));let i=e.paneWidth-r.left-r.right;return t.w>0&&i>0?Math.min(n,Math.max(a,t.h*Math.max(i/t.w,this.minFitScale)+s)):n},get viewBox(){let t=this.facetGrid;return t?{width:t.width,height:t.height}:{width:e.paneWidth,height:this.canvasHeight}},get fitPads(){return this.facetGrid?{left:K,top:K,right:K,bottom:K}:{left:this.fitPadLeft,top:this.fitPadTop,right:this.fitPadRight,bottom:B}},get usableHeight(){let{top:t,bottom:n}=this.fitPads;return this.viewBox.height-t-n},get fittedTransform(){let t=this.layoutBounds,{width:n,height:o}=this.viewBox,a=this.fitPads;return t?Ae(t,n,o,e.pixelRows,{minScale:this.facetGrid?0:this.minFitScale,padLeft:a.left,padTop:a.top,padRight:a.right,padBottom:a.bottom}):void 0}})).views(e=>({viewportToBuild(){return Yn(oo(e),to)},applySelection(t){let n=e.selectedNode;t.setNodeHighlights(n===null?new Map:new Map([[n,eo]]))},get hoverLayerNode(){let{litNode:t,selectedNode:n}=e;return t===n?null:t},get paintTransform(){let t=Do();return{scaleX:e.scaleX*t,scaleY:e.scaleY*t,translateX:e.translateX*t,translateY:e.translateY*t,dpr:t}}})).views(e=>({paint(t){t.updateTransform(e.paintTransform),t.render(e.referenceStripShown?[0,0,0,0]:qn)}})).views(e=>({buildDrawing(t,n){let{graph:o,nodeById:a,layoutResult:r,deletionDrawing:s}=e;if(!o||!a||!r||!s)return;Ge(e.viewportDirty,e.positionsVersion);let i=Pt(()=>e.viewportToBuild()),c=Ke({..._e(r,s,{drawsRows:!!e.walkRowBars}),graph:o,nodeById:a,colorScheme:e.effectiveColorScheme,contigThickness:e.contigThickness,connectorThickness:e.connectorThickness,drawPaths:n,nodeWidth:e.nodeWidth,highlight:t,axis:Pt(()=>e.axisScale),linearLayout:e.linearLayout,viewportBounds:i,referenceRamp:e.referenceRamp,version:e.positionsVersion}),d=e.morphEntering;return d?.layout===r&&Fr(c,o.edges,d),{batch:c,viewportBounds:i}},get overlayLabels(){return Lo(e)},hoveredOn(t){let n=e.hoveredNode,o=n?e.nodeById?.get(n):void 0;return o?Ao(t,o.id,o.length)??"not on this walk":void 0},get figureUnavailable(){return e.layoutResult?e.walkRowGroups?"The SVG export cannot group walk rows yet: set Group by... to None first":e.drawsNodes||e.walkRowBars?void 0:`${Y(e.chosenLayoutMode).label} draws a picture of its own, which the SVG export does not`:"Nothing is drawn yet"},figure(){let{graph:t,layoutResult:n}=e;return t&&n&&!this.figureUnavailable?nn(t,n,{width:e.paneWidth,height:e.paneCeiling,walks:e.walkLayers,facet:e.facetSpec,colorScheme:e.effectiveColorScheme,nodeWidth:e.nodeWidth,showDeletionEdges:e.showDeletionEdges,linearLayout:e.linearLayout,contigThickness:e.contigThickness,connectorThickness:e.connectorThickness,region:e.graphRegion,colorDomain:e.statedColorDomain,genes:e.showGenes?e.backboneGenes:void 0,walkRows:e.walkRowBars,walkRowPitch:e.walkRowPitch,rowGenes:e.walkRowGenes,rowGeneGaps:e.walkRowGeneGaps,walkStrip:e.walkStripRows&&{rows:e.walkStripRows,rowGenes:e.walkRowGenes,rowGeneGaps:e.walkRowGeneGaps}}):void 0}})).views(e=>({get followsHostView(){let t=e.layoutResult;return!!e.host&&!e.hostPlacesX&&!!t&&!t.referenceAxis&&!t.pixelRows&&!t.tubeMap&&!e.facetGrid}}));var fn=W(D("path",{d:"M3 16h5v-2H3zm6.5 0h5v-2h-5zm6.5 0h5v-2h-5zM3 20h2v-2H3zm4 0h2v-2H7zm4 0h2v-2h-2zm4 0h2v-2h-2zm4 0h2v-2h-2zM3 12h8v-2H3zm10 0h8v-2h-8zM3 4v4h18V4z"}),"LineStyle");var Xr=W(D("path",{d:"M9.01 14H2v2h7.01v3L13 15l-3.99-4zm5.98-1v-3H22V8h-7.01V5L11 9z"}),"CompareArrows");var Vr=W(D("path",{d:"M17 5h-2V3h2zm-2 16h2v-2.59L19.59 21 21 19.59 18.41 17H21v-2h-6zm4-12h2V7h-2zm0 4h2v-2h-2zm-8 8h2v-2h-2zM7 5h2V3H7zM3 17h2v-2H3zm2 4v-2H3c0 1.1.9 2 2 2M19 3v2h2c0-1.1-.9-2-2-2m-8 2h2V3h-2zM3 9h2V7H3zm4 12h2v-2H7zm-4-8h2v-2H3zm0-8h2V3c-1.1 0-2 .9-2 2"}),"HighlightAlt");var ss="Linear genome view",is="Linear synteny view",cs="No synteny track in this session aligns these assemblies";function jr({label:e,icon:t,entries:n,entryLabel:o,onSelect:a,disabledHelpText:r,nameTheOnlyEntry:s=!0}){let[i]=n,c=r?[{label:e,icon:t,disabled:!0,disabledHelpText:r,onClick:()=>{}}]:[];return n.length===0?c:n.length===1&&i?[{label:s?`${e} \u2014 ${o(i)}`:e,icon:t,onClick:a(i)}]:[{label:e,icon:t,type:"subMenu",subMenu:n.map(d=>({label:o(d),onClick:a(d)}))}]}function vw({contributors:e,linearContributors:t=e,syntenyTracks:n,onShowLinear:o,onShowSynteny:a}){let r=n[0]?.coverage??e.length;return[...jr({label:ss,icon:fn,entries:t,entryLabel:s=>`${s.sample} ${ne(s)}`,onSelect:s=>()=>{o({location:s,assembly:s.sample})}}),...e.length>=2?jr({label:`${is} (${r} assemblies)`,icon:Xr,entries:n,entryLabel:s=>s.coverage<r?`${s.name} (${s.coverage} of ${r})`:s.name,nameTheOnlyEntry:!1,disabledHelpText:cs,onSelect:s=>()=>{a(s.trackId)}}):[]]}function Mw({own:e,reference:t,highlight:n,onShowLinear:o,onHighlight:a}){let r=[e?{label:`Open in ${e.assembly} \u2014 ${ne(e.location)}`,target:e}:void 0,t&&t.assembly!==e?.assembly?{label:`Open in ${t.assembly} \u2014 around this node`,target:t}:void 0].filter(s=>s!==void 0);return[...a&&n?[{label:`Highlight in ${n.assembly}`,icon:Vr,onClick:()=>{a(n)}}]:[],...r.map(({label:s,target:i})=>({label:s,icon:fn,onClick:()=>{o(i)}}))]}var Aw=W(D("path",{d:"M19 15.18V7c0-2.21-1.79-4-4-4s-4 1.79-4 4v10c0 1.1-.9 2-2 2s-2-.9-2-2V8.82C8.16 8.4 9 7.3 9 6c0-1.66-1.34-3-3-3S3 4.34 3 6c0 1.3.84 2.4 2 2.82V17c0 2.21 1.79 4 4 4s4-1.79 4-4V7c0-1.1.9-2 2-2s2 .9 2 2v8.18c-1.16.41-2 1.51-2 2.82 0 1.66 1.34 3 3 3s3-1.34 3-3c0-1.3-.84-2.4-2-2.82"}),"Route");var Iw=W(D("path",{d:"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6"}),"Settings");var _w=W(D("path",{d:"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5M12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5m0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3"}),"Visibility");export{W as a,Qo as b,ut as c,pa as d,Y as e,Ut as f,fa as g,ga as h,wa as i,Jt as j,qt as k,ne as l,ba as m,sr as n,z as o,Ra as p,Zt as q,Lc as r,Qt as s,Nc as t,Pc as u,Ac as v,br as w,_w as x,_g as y,$g as z,Hg as A,Wg as B,Fg as C,Dg as D,ln as E,Xo as F,us as G,Jr as H,hs as I,ea as J,Yo as K,Dh as L,jh as M,Uh as N,ns as O,os as P,Dr as Q,dw as R,fn as S,vw as T,Mw as U,Aw as V,Iw as W};
3
- //# sourceMappingURL=chunk-GRTN25B6.js.map