jbrowse-plugin-graphgenomeviewer 6.2.0 → 6.3.1

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 (78) hide show
  1. package/README.md +4 -3
  2. package/dist/chunks/ChooseWalksDialog-L6QKOT7M.js +2 -0
  3. package/dist/chunks/ChooseWalksDialog-L6QKOT7M.js.map +7 -0
  4. package/dist/chunks/{GbzBaseSyntenyAdapter-TLI5IUU7.js → GbzBaseSyntenyAdapter-KVJKGGQ4.js} +2 -2
  5. package/dist/chunks/{GbzBaseSyntenyAdapter-TLI5IUU7.js.map → GbzBaseSyntenyAdapter-KVJKGGQ4.js.map} +1 -1
  6. package/dist/chunks/{GraphGenomeView-5OPCROMQ.js → GraphGenomeView-VIKLXNQD.js} +2 -2
  7. package/dist/chunks/{GraphGenomeView-5OPCROMQ.js.map → GraphGenomeView-VIKLXNQD.js.map} +1 -1
  8. package/dist/chunks/GraphTrackSettingsDialog-MRMSH2FO.js +4 -0
  9. package/dist/chunks/{GraphTrackSettingsDialog-FGLLUIEE.js.map → GraphTrackSettingsDialog-MRMSH2FO.js.map} +1 -1
  10. package/dist/chunks/HighlightColorDialog-SABW5OMB.js +2 -0
  11. package/dist/chunks/HighlightColorDialog-SABW5OMB.js.map +7 -0
  12. package/dist/chunks/LinearGraphDisplay-AHCKWNFJ.js +2 -0
  13. package/dist/chunks/{LinearGraphDisplay-NBJHGOYX.js.map → LinearGraphDisplay-AHCKWNFJ.js.map} +1 -1
  14. package/dist/chunks/{MinigraphBubbleAdapter-LQUIL3MD.js → MinigraphBubbleAdapter-CAXB5FGR.js} +2 -2
  15. package/dist/chunks/{RgfaTabixAdapter-3BFNY4SB.js → RgfaTabixAdapter-GYRNCGT2.js} +2 -2
  16. package/dist/chunks/{bandage-layout-3AR6BCUD-I6CCWYSR.js → bandage-layout-3AR6BCUD-PYYNJEGI.js} +1 -1
  17. package/dist/chunks/{bandage-layout-3AR6BCUD-I6CCWYSR.js.map → bandage-layout-3AR6BCUD-PYYNJEGI.js.map} +1 -1
  18. package/dist/chunks/{chunk-O5EHYU3Y.js → chunk-2SIR336R.js} +2 -2
  19. package/dist/chunks/chunk-2SL675KP.js +3 -0
  20. package/dist/chunks/{chunk-NGQRKSHY.js.map → chunk-2SL675KP.js.map} +3 -3
  21. package/dist/chunks/chunk-A6GKF63C.js +2 -0
  22. package/dist/chunks/{chunk-ZKLOV6MW.js.map → chunk-A6GKF63C.js.map} +2 -2
  23. package/dist/chunks/chunk-B7GF3TC3.js +2 -0
  24. package/dist/chunks/chunk-B7GF3TC3.js.map +7 -0
  25. package/dist/chunks/chunk-B7KMMGFB.js +2 -0
  26. package/dist/chunks/chunk-B7KMMGFB.js.map +7 -0
  27. package/dist/chunks/{chunk-X24J6VF4.js → chunk-DILFGQIL.js} +1 -1
  28. package/dist/chunks/{chunk-X24J6VF4.js.map → chunk-DILFGQIL.js.map} +1 -1
  29. package/dist/chunks/{chunk-7MWOPEIC.js → chunk-EHV7EUMI.js} +1 -1
  30. package/dist/chunks/{chunk-7MWOPEIC.js.map → chunk-EHV7EUMI.js.map} +1 -1
  31. package/dist/chunks/chunk-GMSOU6VO.js +2 -0
  32. package/dist/chunks/chunk-GMSOU6VO.js.map +7 -0
  33. package/dist/chunks/{chunk-EKMGHBWM.js → chunk-KRXALLQG.js} +1 -1
  34. package/dist/chunks/{chunk-EKMGHBWM.js.map → chunk-KRXALLQG.js.map} +1 -1
  35. package/dist/chunks/{chunk-F7V6ZPKD.js → chunk-MYJYGSOH.js} +1 -1
  36. package/dist/chunks/{chunk-F7V6ZPKD.js.map → chunk-MYJYGSOH.js.map} +1 -1
  37. package/dist/chunks/chunk-WTOQRUK2.js +2 -0
  38. package/dist/chunks/chunk-WTOQRUK2.js.map +7 -0
  39. package/dist/chunks/{chunk-JYZAMHIP.js → chunk-WUGRVNUJ.js} +2 -2
  40. package/dist/chunks/{chunk-JYZAMHIP.js.map → chunk-WUGRVNUJ.js.map} +1 -1
  41. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +6 -6
  42. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +4 -4
  43. package/package.json +2 -3
  44. package/src/GbzBaseSyntenyAdapter/configSchema.ts +1 -1
  45. package/src/GraphGenomeView/components/ChooseWalksDialog.tsx +6 -7
  46. package/src/GraphGenomeView/components/HighlightColorDialog.tsx +117 -0
  47. package/src/GraphGenomeView/components/TubeMapOverlay.tsx +1 -1
  48. package/src/GraphGenomeView/model.test.ts +107 -31
  49. package/src/GraphGenomeView/pane/fitViews.ts +8 -5
  50. package/src/GraphGenomeView/pane/graphViews.ts +11 -1
  51. package/src/GraphGenomeView/pane/hostViews.ts +1 -1
  52. package/src/GraphGenomeView/pane/keepInView.ts +62 -0
  53. package/src/GraphGenomeView/pane/launchActions.ts +159 -184
  54. package/src/GraphGenomeView/pane/loadActions.ts +3 -0
  55. package/src/GraphGenomeView/pane/paneBase.ts +9 -3
  56. package/src/GraphGenomeView/pane/renderingActions.ts +11 -1
  57. package/src/GraphGenomeView/pane/settingActions.ts +38 -0
  58. package/src/GraphGenomeView/renderPipeline.test.ts +4 -1
  59. package/src/GraphGenomeView/renderer/GraphRenderer.ts +2 -2
  60. package/src/GraphGenomeView/viewModel.ts +1 -1
  61. package/src/LinearGraphDisplay/LinearGraphDisplay.test.ts +12 -5
  62. package/src/LinearGraphDisplay/configSchema.ts +8 -0
  63. package/src/LinearGraphDisplay/model.ts +39 -33
  64. package/src/hoverSync/GraphNodeHighlight.tsx +3 -3
  65. package/src/version.ts +1 -1
  66. package/dist/chunks/ChooseWalksDialog-GVQLSGHX.js +0 -2
  67. package/dist/chunks/ChooseWalksDialog-GVQLSGHX.js.map +0 -7
  68. package/dist/chunks/GraphTrackSettingsDialog-FGLLUIEE.js +0 -4
  69. package/dist/chunks/LinearGraphDisplay-NBJHGOYX.js +0 -2
  70. package/dist/chunks/chunk-LZUNK4MQ.js +0 -2
  71. package/dist/chunks/chunk-LZUNK4MQ.js.map +0 -7
  72. package/dist/chunks/chunk-NGQRKSHY.js +0 -3
  73. package/dist/chunks/chunk-XWGKHQYO.js +0 -2
  74. package/dist/chunks/chunk-XWGKHQYO.js.map +0 -7
  75. package/dist/chunks/chunk-ZKLOV6MW.js +0 -2
  76. /package/dist/chunks/{MinigraphBubbleAdapter-LQUIL3MD.js.map → MinigraphBubbleAdapter-CAXB5FGR.js.map} +0 -0
  77. /package/dist/chunks/{RgfaTabixAdapter-3BFNY4SB.js.map → RgfaTabixAdapter-GYRNCGT2.js.map} +0 -0
  78. /package/dist/chunks/{chunk-O5EHYU3Y.js.map → chunk-2SIR336R.js.map} +0 -0
@@ -0,0 +1,2 @@
1
+ import{a as w,g as S,j as D}from"./chunk-GMSOU6VO.js";import{N as u,T as k}from"./chunk-B7GF3TC3.js";import{a as y,b as A,c as N,d as R}from"./chunk-TYJTJGPO.js";import{b as c}from"./chunk-FY3BTKY4.js";var m=[{value:0,label:"Fastest"},{value:1,label:"Fast"},{value:2,label:"Default"},{value:3,label:"Fine"},{value:4,label:"Best"}];var L=c(A(),1),o=c(R(),1),b=c(N(),1),G=c(D(),1),e=c(y(),1),C=(0,G.makeStyles)()({section:{marginBottom:24},formControl:{minWidth:200}});function s({warn:l=!1,children:n}){return(0,e.jsx)(o.Typography,{variant:"caption",color:l?"warning.main":"text.secondary",children:n})}var T=(0,b.observer)(function({model:n}){return n.hasGraph&&!n.usesLayoutEngine?(0,e.jsx)(s,{warn:!0,children:"No effect on this layout: only the force-directed layout is drawn by the engine that reads this."}):null});function g({label:l,checked:n,onChange:t,children:p}){let{classes:i}=C();return(0,e.jsxs)("div",{className:i.section,children:[(0,e.jsx)(o.FormControlLabel,{control:(0,e.jsx)(o.Switch,{checked:n,onChange:d=>{t(d.target.checked)}}),label:l}),p]})}function h({label:l,value:n,options:t,testId:p,sx:i,onChange:d}){let{classes:r}=C();return(0,e.jsxs)(o.FormControl,{className:r.formControl,sx:i,children:[(0,e.jsx)(o.InputLabel,{children:l}),(0,e.jsx)(o.Select,{value:n,label:l,"data-testid":p,onChange:a=>{d(a.target.value)},children:t.map(({value:a,label:v,description:f})=>(0,e.jsx)(o.MenuItem,{value:a,children:f?(0,e.jsx)(o.Tooltip,{title:f,placement:"right",children:(0,e.jsx)("span",{children:v})}):v},a))})]})}var I=l=>l.map(({trackId:n,name:t})=>({value:n,label:t})),P=(0,b.observer)(function(n){let{model:t,open:p,onClose:i,children:d}=n,{classes:r}=C();return(0,e.jsxs)(L.Dialog,{open:p,onClose:i,title:"Graph settings",children:[(0,e.jsxs)(o.DialogContent,{children:[(0,e.jsx)("div",{className:r.section,children:(0,e.jsxs)(o.FormControl,{fullWidth:!0,children:[(0,e.jsx)(o.FormLabel,{component:"legend",children:"Layout quality"}),(0,e.jsx)(o.RadioGroup,{value:t.layoutQuality,onChange:a=>{t.setLayoutQuality(parseInt(a.target.value)),t.recomputeLayout()},children:m.map(a=>(0,e.jsx)(o.FormControlLabel,{value:a.value,control:(0,e.jsx)(o.Radio,{}),label:a.label},a.value))}),(0,e.jsx)(s,{children:"FMMM's iteration budget, the same scale Bandage exposes. Higher is slower: on a thousand-node cut the top setting is seconds rather than tenths."}),(0,e.jsx)(T,{model:t})]})}),(0,e.jsxs)(g,{label:"Draw paths",checked:t.drawPaths,onChange:a=>{t.setDrawPaths(a)},children:[(0,e.jsx)(s,{children:"Color each node and connector by the paths through it, one lane per path in legend order, so a path that skips a node leaves its lane empty"}),t.drawPaths&&!t.effectiveDrawPaths?(0,e.jsx)(s,{warn:!0,children:t.pathCount>u?`Off: ${t.pathCount.toLocaleString()} paths is past the ${u} this can tell apart`:"Off: this graph states no paths"}):null]}),(0,e.jsx)(g,{label:"Mark bubbles",checked:t.showBubbles,onChange:a=>{t.setShowBubbles(a)},children:(0,e.jsx)(s,{children:"A halo along the nodes of each bubble, labelled by what it is, with the label opening the bubble on its own"})}),(0,e.jsxs)(g,{label:"Genes on the backbone",checked:t.showGenes,onChange:a=>{t.setShowGenes(a)},children:[(0,e.jsx)(s,{children:"Exons along the reference nodes that carry them and each gene's name at its midpoint, from the assembly's annotation track"}),t.geneTrackChoices.length>1?(0,e.jsx)(h,{label:"Gene track",value:t.geneTrack?.trackId??"",options:I(t.geneTrackChoices),testId:"graph-gene-track-select",sx:{mt:1},onChange:a=>{t.setGeneTrackId(a),t.reloadGenes()}}):null,t.repeatTrackChoices.length>1?(0,e.jsx)(h,{label:"Repeat track",value:t.repeatTrack?.trackId??"",options:I(t.repeatTrackChoices),testId:"graph-repeat-track-select",sx:{mt:1},onChange:a=>{t.setRepeatTrackId(a),t.reloadRepeats()}}):null]}),t.anchorPaths.length>1?(0,e.jsxs)("div",{className:r.section,children:[(0,e.jsx)(h,{label:"Reference path",value:t.activeReferencePath??"",options:t.anchorPaths.map(({name:a})=>({value:a,label:a})),testId:"graph-reference-path-select",onChange:a=>{t.setReferencePath(a),t.recomputeLayout()}}),(0,e.jsx)(s,{children:"Which path the anchored layouts draw x against. A GFA with no rGFA tags states its coordinates only in its paths, and marks none of them as the reference."})]}):null,(0,e.jsxs)("div",{className:r.section,children:[(0,e.jsx)(h,{label:"Bubble spread",value:t.bubbleSpread,options:S,testId:"graph-bubble-spread-select",onChange:a=>{t.setBubbleSpread(a),t.recomputeLayout()}}),(0,e.jsx)(s,{children:"How far the force layout opens a bubble. A pangenome allele is a few bp, so at Bandage's own scale both arms land inside one node thickness and the graph draws as a rope."}),(0,e.jsx)(T,{model:t})]}),(0,e.jsxs)("div",{className:r.section,children:[(0,e.jsx)(h,{label:"Node width",value:t.nodeWidth,options:k,testId:"graph-node-width-select",onChange:a=>{t.setNodeWidth(a)}}),(0,e.jsx)(s,{children:"Bandage's depth as width. In a cut with walks, depth is how many haplotypes carry the node."})]}),d,(0,e.jsxs)("div",{className:r.section,children:[(0,e.jsx)(h,{label:"Color scheme",value:t.chosenColorScheme,options:w,onChange:a=>{t.setColorScheme(a)}}),t.colorSchemeLock?(0,e.jsxs)(s,{warn:!0,children:["No effect now. ",t.colorSchemeLock.why]}):null]})]}),(0,e.jsx)(o.DialogActions,{children:(0,e.jsx)(o.Button,{variant:"contained",color:"primary",onClick:i,children:"Close"})})]})}),W=P;export{W as a};
2
+ //# sourceMappingURL=chunk-A6GKF63C.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@7.5.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-K5SIJGAE.js", "../../src/GraphGenomeView/components/GraphSettingsDialog.tsx"],
3
+ "sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-K5SIJGAE.js", "../../src/GraphGenomeView/components/GraphSettingsDialog.tsx"],
4
4
  "sourcesContent": ["// src/layoutQualities.ts\nvar LAYOUT_QUALITIES = [\n { value: 0, label: \"Fastest\" },\n { value: 1, label: \"Fast\" },\n { value: 2, label: \"Default\" },\n { value: 3, label: \"Fine\" },\n { value: 4, label: \"Best\" }\n];\n\nexport {\n LAYOUT_QUALITIES\n};\n", "import type { ReactNode } from 'react'\n\nimport { BUBBLE_SPREADS } from '@jbrowse/bandage-core/bubbleSpreads'\nimport { COLOR_SCHEMES } from '@jbrowse/bandage-core/colorSchemes'\nimport { LAYOUT_QUALITIES } from '@jbrowse/bandage-core/layoutQualities'\nimport { NODE_WIDTHS } from '@jbrowse/bandage-core/nodeWidths'\nimport { MAX_PATH_COLORS } from '@jbrowse/bandage-core/pathColors'\nimport { Dialog } from '@jbrowse/core/ui'\nimport {\n Button,\n DialogActions,\n DialogContent,\n FormControl,\n FormControlLabel,\n FormLabel,\n InputLabel,\n MenuItem,\n Radio,\n RadioGroup,\n Select,\n Switch,\n Tooltip,\n Typography,\n} from '@mui/material'\nimport { observer } from 'mobx-react'\nimport { makeStyles } from 'tss-react/mui'\n\nimport type { GraphPaneModel } from '../model'\nimport type { SxProps } from '@mui/material'\n\nconst useStyles = makeStyles()({\n section: {\n marginBottom: 24,\n },\n formControl: {\n minWidth: 200,\n },\n})\n\nfunction Caption({\n warn = false,\n children,\n}: {\n warn?: boolean\n children: ReactNode\n}) {\n return (\n <Typography\n variant=\"caption\"\n color={warn ? 'warning.main' : 'text.secondary'}\n >\n {children}\n </Typography>\n )\n}\n\n// Layout quality and bubble spread are the engine's inputs, and an anchored\n// layout places a node from its coordinates without reaching it. Left enabled\n// so the force layout can be set up before switching to it.\nconst EngineOnly = observer(function EngineOnly({\n model,\n}: {\n model: GraphPaneModel\n}) {\n return model.hasGraph && !model.usesLayoutEngine ? (\n <Caption warn>\n No effect on this layout: only the force-directed layout is drawn by the\n engine that reads this.\n </Caption>\n ) : null\n})\n\nfunction SettingSwitch({\n label,\n checked,\n onChange,\n children,\n}: {\n label: string\n checked: boolean\n onChange: (checked: boolean) => void\n children?: ReactNode\n}) {\n const { classes } = useStyles()\n return (\n <div className={classes.section}>\n <FormControlLabel\n control={\n <Switch\n checked={checked}\n onChange={e => {\n onChange(e.target.checked)\n }}\n />\n }\n label={label}\n />\n {children}\n </div>\n )\n}\n\n// One dropdown setting; an option's description is its tooltip\nfunction SettingSelect<T extends string>({\n label,\n value,\n options,\n testId,\n sx,\n onChange,\n}: {\n label: string\n value: T\n options: readonly { value: T; label: string; description?: string }[]\n testId?: string\n sx?: SxProps\n onChange: (value: T) => void\n}) {\n const { classes } = useStyles()\n return (\n <FormControl className={classes.formControl} sx={sx}>\n <InputLabel>{label}</InputLabel>\n <Select\n value={value}\n label={label}\n data-testid={testId}\n onChange={e => {\n onChange(e.target.value as T)\n }}\n >\n {options.map(({ value, label, description }) => (\n <MenuItem key={value} value={value}>\n {description ? (\n <Tooltip title={description} placement=\"right\">\n <span>{label}</span>\n </Tooltip>\n ) : (\n label\n )}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n )\n}\n\nconst trackOptions = (tracks: { trackId: string; name: string }[]) =>\n tracks.map(({ trackId, name }) => ({ value: trackId, label: name }))\n\n// `children` is the host's own section, between node width and colour\nconst GraphSettingsDialog = observer(function GraphSettingsDialog(props: {\n model: GraphPaneModel\n open: boolean\n onClose: () => void\n children?: ReactNode\n}) {\n const { model, open, onClose, children } = props\n const { classes } = useStyles()\n\n return (\n <Dialog open={open} onClose={onClose} title=\"Graph settings\">\n <DialogContent>\n <div className={classes.section}>\n <FormControl fullWidth>\n <FormLabel component=\"legend\">Layout quality</FormLabel>\n <RadioGroup\n value={model.layoutQuality}\n onChange={e => {\n model.setLayoutQuality(parseInt(e.target.value))\n void model.recomputeLayout()\n }}\n >\n {LAYOUT_QUALITIES.map(q => (\n <FormControlLabel\n key={q.value}\n value={q.value}\n control={<Radio />}\n label={q.label}\n />\n ))}\n </RadioGroup>\n <Caption>\n FMMM&apos;s iteration budget, the same scale Bandage exposes.\n Higher is slower: on a thousand-node cut the top setting is\n seconds rather than tenths.\n </Caption>\n <EngineOnly model={model} />\n </FormControl>\n </div>\n\n <SettingSwitch\n label=\"Draw paths\"\n checked={model.drawPaths}\n onChange={draw => {\n model.setDrawPaths(draw)\n }}\n >\n <Caption>\n Color each node and connector by the paths through it, one lane per\n path in legend order, so a path that skips a node leaves its lane\n empty\n </Caption>\n {model.drawPaths && !model.effectiveDrawPaths ? (\n <Caption warn>\n {model.pathCount > MAX_PATH_COLORS\n ? `Off: ${model.pathCount.toLocaleString()} paths is past the ${MAX_PATH_COLORS} this can tell apart`\n : 'Off: this graph states no paths'}\n </Caption>\n ) : null}\n </SettingSwitch>\n\n <SettingSwitch\n label=\"Mark bubbles\"\n checked={model.showBubbles}\n onChange={show => {\n model.setShowBubbles(show)\n }}\n >\n <Caption>\n A halo along the nodes of each bubble, labelled by what it is, with\n the label opening the bubble on its own\n </Caption>\n </SettingSwitch>\n\n <SettingSwitch\n label=\"Genes on the backbone\"\n checked={model.showGenes}\n onChange={show => {\n model.setShowGenes(show)\n }}\n >\n <Caption>\n Exons along the reference nodes that carry them and each gene's name\n at its midpoint, from the assembly's annotation track\n </Caption>\n {model.geneTrackChoices.length > 1 ? (\n <SettingSelect\n label=\"Gene track\"\n value={model.geneTrack?.trackId ?? ''}\n options={trackOptions(model.geneTrackChoices)}\n testId=\"graph-gene-track-select\"\n sx={{ mt: 1 }}\n onChange={trackId => {\n model.setGeneTrackId(trackId)\n void model.reloadGenes()\n }}\n />\n ) : null}\n {model.repeatTrackChoices.length > 1 ? (\n <SettingSelect\n label=\"Repeat track\"\n value={model.repeatTrack?.trackId ?? ''}\n options={trackOptions(model.repeatTrackChoices)}\n testId=\"graph-repeat-track-select\"\n sx={{ mt: 1 }}\n onChange={trackId => {\n model.setRepeatTrackId(trackId)\n void model.reloadRepeats()\n }}\n />\n ) : null}\n </SettingSwitch>\n\n {model.anchorPaths.length > 1 ? (\n <div className={classes.section}>\n <SettingSelect\n label=\"Reference path\"\n value={model.activeReferencePath ?? ''}\n options={model.anchorPaths.map(({ name }) => ({\n value: name,\n label: name,\n }))}\n testId=\"graph-reference-path-select\"\n onChange={name => {\n model.setReferencePath(name)\n void model.recomputeLayout()\n }}\n />\n <Caption>\n Which path the anchored layouts draw x against. A GFA with no rGFA\n tags states its coordinates only in its paths, and marks none of\n them as the reference.\n </Caption>\n </div>\n ) : null}\n\n <div className={classes.section}>\n <SettingSelect\n label=\"Bubble spread\"\n value={model.bubbleSpread}\n options={BUBBLE_SPREADS}\n testId=\"graph-bubble-spread-select\"\n onChange={spread => {\n model.setBubbleSpread(spread)\n void model.recomputeLayout()\n }}\n />\n <Caption>\n How far the force layout opens a bubble. A pangenome allele is a few\n bp, so at Bandage&apos;s own scale both arms land inside one node\n thickness and the graph draws as a rope.\n </Caption>\n <EngineOnly model={model} />\n </div>\n\n <div className={classes.section}>\n <SettingSelect\n label=\"Node width\"\n value={model.nodeWidth}\n options={NODE_WIDTHS}\n testId=\"graph-node-width-select\"\n onChange={width => {\n model.setNodeWidth(width)\n }}\n />\n <Caption>\n Bandage&apos;s depth as width. In a cut with walks, depth is how\n many haplotypes carry the node.\n </Caption>\n </div>\n\n {children}\n\n <div className={classes.section}>\n <SettingSelect\n label=\"Color scheme\"\n value={model.chosenColorScheme}\n options={COLOR_SCHEMES}\n onChange={scheme => {\n model.setColorScheme(scheme)\n }}\n />\n {model.colorSchemeLock ? (\n <Caption warn>No effect now. {model.colorSchemeLock.why}</Caption>\n ) : null}\n </div>\n </DialogContent>\n\n <DialogActions>\n <Button variant=\"contained\" color=\"primary\" onClick={onClose}>\n Close\n </Button>\n </DialogActions>\n </Dialog>\n )\n})\n\nexport default GraphSettingsDialog\n"],
5
- "mappings": "2KACA,IAAIA,EAAmB,CACrB,CAAE,MAAO,EAAG,MAAO,SAAU,EAC7B,CAAE,MAAO,EAAG,MAAO,MAAO,EAC1B,CAAE,MAAO,EAAG,MAAO,SAAU,EAC7B,CAAE,MAAO,EAAG,MAAO,MAAO,EAC1B,CAAE,MAAO,EAAG,MAAO,MAAO,CAC5B,ECAA,IAAAC,EAAuB,SACvBC,EAeO,SACPC,EAAyB,SACzBC,EAA2B,SAsBvBC,EAAA,SAjBEC,KAAY,cAAW,EAAE,CAC7B,QAAS,CACP,aAAc,EAChB,EACA,YAAa,CACX,SAAU,GACZ,CACF,CAAC,EAED,SAASC,EAAQ,CACf,KAAAC,EAAO,GACP,SAAAC,CACF,EAGG,CACD,SACE,OAAC,cACC,QAAQ,UACR,MAAOD,EAAO,eAAiB,iBAE9B,SAAAC,EACH,CAEJ,CAKA,IAAMC,KAAa,YAAS,SAAoB,CAC9C,MAAAC,CACF,EAEG,CACD,OAAOA,EAAM,UAAY,CAACA,EAAM,oBAC9B,OAACJ,EAAA,CAAQ,KAAI,GAAC,4GAGd,EACE,IACN,CAAC,EAED,SAASK,EAAc,CACrB,MAAAC,EACA,QAAAC,EACA,SAAAC,EACA,SAAAN,CACF,EAKG,CACD,GAAM,CAAE,QAAAO,CAAQ,EAAIV,EAAU,EAC9B,SACE,QAAC,OAAI,UAAWU,EAAQ,QACtB,oBAAC,oBACC,WACE,OAAC,UACC,QAASF,EACT,SAAUG,GAAK,CACbF,EAASE,EAAE,OAAO,OAAO,CAC3B,EACF,EAEF,MAAOJ,EACT,EACCJ,GACH,CAEJ,CAGA,SAASS,EAAgC,CACvC,MAAAL,EACA,MAAAM,EACA,QAAAC,EACA,OAAAC,EACA,GAAAC,EACA,SAAAP,CACF,EAOG,CACD,GAAM,CAAE,QAAAC,CAAQ,EAAIV,EAAU,EAC9B,SACE,QAAC,eAAY,UAAWU,EAAQ,YAAa,GAAIM,EAC/C,oBAAC,cAAY,SAAAT,EAAM,KACnB,OAAC,UACC,MAAOM,EACP,MAAON,EACP,cAAaQ,EACb,SAAUJ,GAAK,CACbF,EAASE,EAAE,OAAO,KAAU,CAC9B,EAEC,SAAAG,EAAQ,IAAI,CAAC,CAAE,MAAAD,EAAO,MAAAN,EAAO,YAAAU,CAAY,OACxC,OAAC,YAAqB,MAAOJ,EAC1B,SAAAI,KACC,OAAC,WAAQ,MAAOA,EAAa,UAAU,QACrC,mBAAC,QAAM,SAAAV,EAAM,EACf,EAEAA,GANWM,CAQf,CACD,EACH,GACF,CAEJ,CAEA,IAAMK,EAAgBC,GACpBA,EAAO,IAAI,CAAC,CAAE,QAAAC,EAAS,KAAAC,CAAK,KAAO,CAAE,MAAOD,EAAS,MAAOC,CAAK,EAAE,EAG/DC,KAAsB,YAAS,SAA6BC,EAK/D,CACD,GAAM,CAAE,MAAAlB,EAAO,KAAAmB,EAAM,QAAAC,EAAS,SAAAtB,CAAS,EAAIoB,EACrC,CAAE,QAAAb,CAAQ,EAAIV,EAAU,EAE9B,SACE,QAAC,UAAO,KAAMwB,EAAM,QAASC,EAAS,MAAM,iBAC1C,qBAAC,iBACC,oBAAC,OAAI,UAAWf,EAAQ,QACtB,oBAAC,eAAY,UAAS,GACpB,oBAAC,aAAU,UAAU,SAAS,0BAAc,KAC5C,OAAC,cACC,MAAOL,EAAM,cACb,SAAUM,GAAK,CACbN,EAAM,iBAAiB,SAASM,EAAE,OAAO,KAAK,CAAC,EAC1CN,EAAM,gBAAgB,CAC7B,EAEC,SAAAqB,EAAiB,IAAIC,MACpB,OAAC,oBAEC,MAAOA,EAAE,MACT,WAAS,OAAC,UAAM,EAChB,MAAOA,EAAE,OAHJA,EAAE,KAIT,CACD,EACH,KACA,OAAC1B,EAAA,CAAQ,4JAIT,KACA,OAACG,EAAA,CAAW,MAAOC,EAAO,GAC5B,EACF,KAEA,QAACC,EAAA,CACC,MAAM,aACN,QAASD,EAAM,UACf,SAAUuB,GAAQ,CAChBvB,EAAM,aAAauB,CAAI,CACzB,EAEA,oBAAC3B,EAAA,CAAQ,uJAIT,EACCI,EAAM,WAAa,CAACA,EAAM,sBACzB,OAACJ,EAAA,CAAQ,KAAI,GACV,SAAAI,EAAM,UAAYwB,EACf,QAAQxB,EAAM,UAAU,eAAe,CAAC,sBAAsBwB,CAAe,uBAC7E,kCACN,EACE,MACN,KAEA,OAACvB,EAAA,CACC,MAAM,eACN,QAASD,EAAM,YACf,SAAUyB,GAAQ,CAChBzB,EAAM,eAAeyB,CAAI,CAC3B,EAEA,mBAAC7B,EAAA,CAAQ,uHAGT,EACF,KAEA,QAACK,EAAA,CACC,MAAM,wBACN,QAASD,EAAM,UACf,SAAUyB,GAAQ,CAChBzB,EAAM,aAAayB,CAAI,CACzB,EAEA,oBAAC7B,EAAA,CAAQ,sIAGT,EACCI,EAAM,iBAAiB,OAAS,KAC/B,OAACO,EAAA,CACC,MAAM,aACN,MAAOP,EAAM,WAAW,SAAW,GACnC,QAASa,EAAab,EAAM,gBAAgB,EAC5C,OAAO,0BACP,GAAI,CAAE,GAAI,CAAE,EACZ,SAAUe,GAAW,CACnBf,EAAM,eAAee,CAAO,EACvBf,EAAM,YAAY,CACzB,EACF,EACE,KACHA,EAAM,mBAAmB,OAAS,KACjC,OAACO,EAAA,CACC,MAAM,eACN,MAAOP,EAAM,aAAa,SAAW,GACrC,QAASa,EAAab,EAAM,kBAAkB,EAC9C,OAAO,4BACP,GAAI,CAAE,GAAI,CAAE,EACZ,SAAUe,GAAW,CACnBf,EAAM,iBAAiBe,CAAO,EACzBf,EAAM,cAAc,CAC3B,EACF,EACE,MACN,EAECA,EAAM,YAAY,OAAS,KAC1B,QAAC,OAAI,UAAWK,EAAQ,QACtB,oBAACE,EAAA,CACC,MAAM,iBACN,MAAOP,EAAM,qBAAuB,GACpC,QAASA,EAAM,YAAY,IAAI,CAAC,CAAE,KAAAgB,CAAK,KAAO,CAC5C,MAAOA,EACP,MAAOA,CACT,EAAE,EACF,OAAO,8BACP,SAAUA,GAAQ,CAChBhB,EAAM,iBAAiBgB,CAAI,EACtBhB,EAAM,gBAAgB,CAC7B,EACF,KACA,OAACJ,EAAA,CAAQ,sKAIT,GACF,EACE,QAEJ,QAAC,OAAI,UAAWS,EAAQ,QACtB,oBAACE,EAAA,CACC,MAAM,gBACN,MAAOP,EAAM,aACb,QAAS0B,EACT,OAAO,6BACP,SAAUC,GAAU,CAClB3B,EAAM,gBAAgB2B,CAAM,EACvB3B,EAAM,gBAAgB,CAC7B,EACF,KACA,OAACJ,EAAA,CAAQ,sLAIT,KACA,OAACG,EAAA,CAAW,MAAOC,EAAO,GAC5B,KAEA,QAAC,OAAI,UAAWK,EAAQ,QACtB,oBAACE,EAAA,CACC,MAAM,aACN,MAAOP,EAAM,UACb,QAAS4B,EACT,OAAO,0BACP,SAAUC,GAAS,CACjB7B,EAAM,aAAa6B,CAAK,CAC1B,EACF,KACA,OAACjC,EAAA,CAAQ,uGAGT,GACF,EAECE,KAED,QAAC,OAAI,UAAWO,EAAQ,QACtB,oBAACE,EAAA,CACC,MAAM,eACN,MAAOP,EAAM,kBACb,QAAS8B,EACT,SAAUC,GAAU,CAClB/B,EAAM,eAAe+B,CAAM,CAC7B,EACF,EACC/B,EAAM,mBACL,QAACJ,EAAA,CAAQ,KAAI,GAAC,4BAAgBI,EAAM,gBAAgB,KAAI,EACtD,MACN,GACF,KAEA,OAAC,iBACC,mBAAC,UAAO,QAAQ,YAAY,MAAM,UAAU,QAASoB,EAAS,iBAE9D,EACF,GACF,CAEJ,CAAC,EAEMY,EAAQf",
5
+ "mappings": "0MACA,IAAIA,EAAmB,CACrB,CAAE,MAAO,EAAG,MAAO,SAAU,EAC7B,CAAE,MAAO,EAAG,MAAO,MAAO,EAC1B,CAAE,MAAO,EAAG,MAAO,SAAU,EAC7B,CAAE,MAAO,EAAG,MAAO,MAAO,EAC1B,CAAE,MAAO,EAAG,MAAO,MAAO,CAC5B,ECAA,IAAAC,EAAuB,SACvBC,EAeO,SACPC,EAAyB,SACzBC,EAA2B,SAsBvBC,EAAA,SAjBEC,KAAY,cAAW,EAAE,CAC7B,QAAS,CACP,aAAc,EAChB,EACA,YAAa,CACX,SAAU,GACZ,CACF,CAAC,EAED,SAASC,EAAQ,CACf,KAAAC,EAAO,GACP,SAAAC,CACF,EAGG,CACD,SACE,OAAC,cACC,QAAQ,UACR,MAAOD,EAAO,eAAiB,iBAE9B,SAAAC,EACH,CAEJ,CAKA,IAAMC,KAAa,YAAS,SAAoB,CAC9C,MAAAC,CACF,EAEG,CACD,OAAOA,EAAM,UAAY,CAACA,EAAM,oBAC9B,OAACJ,EAAA,CAAQ,KAAI,GAAC,4GAGd,EACE,IACN,CAAC,EAED,SAASK,EAAc,CACrB,MAAAC,EACA,QAAAC,EACA,SAAAC,EACA,SAAAN,CACF,EAKG,CACD,GAAM,CAAE,QAAAO,CAAQ,EAAIV,EAAU,EAC9B,SACE,QAAC,OAAI,UAAWU,EAAQ,QACtB,oBAAC,oBACC,WACE,OAAC,UACC,QAASF,EACT,SAAUG,GAAK,CACbF,EAASE,EAAE,OAAO,OAAO,CAC3B,EACF,EAEF,MAAOJ,EACT,EACCJ,GACH,CAEJ,CAGA,SAASS,EAAgC,CACvC,MAAAL,EACA,MAAAM,EACA,QAAAC,EACA,OAAAC,EACA,GAAAC,EACA,SAAAP,CACF,EAOG,CACD,GAAM,CAAE,QAAAC,CAAQ,EAAIV,EAAU,EAC9B,SACE,QAAC,eAAY,UAAWU,EAAQ,YAAa,GAAIM,EAC/C,oBAAC,cAAY,SAAAT,EAAM,KACnB,OAAC,UACC,MAAOM,EACP,MAAON,EACP,cAAaQ,EACb,SAAUJ,GAAK,CACbF,EAASE,EAAE,OAAO,KAAU,CAC9B,EAEC,SAAAG,EAAQ,IAAI,CAAC,CAAE,MAAAD,EAAO,MAAAN,EAAO,YAAAU,CAAY,OACxC,OAAC,YAAqB,MAAOJ,EAC1B,SAAAI,KACC,OAAC,WAAQ,MAAOA,EAAa,UAAU,QACrC,mBAAC,QAAM,SAAAV,EAAM,EACf,EAEAA,GANWM,CAQf,CACD,EACH,GACF,CAEJ,CAEA,IAAMK,EAAgBC,GACpBA,EAAO,IAAI,CAAC,CAAE,QAAAC,EAAS,KAAAC,CAAK,KAAO,CAAE,MAAOD,EAAS,MAAOC,CAAK,EAAE,EAG/DC,KAAsB,YAAS,SAA6BC,EAK/D,CACD,GAAM,CAAE,MAAAlB,EAAO,KAAAmB,EAAM,QAAAC,EAAS,SAAAtB,CAAS,EAAIoB,EACrC,CAAE,QAAAb,CAAQ,EAAIV,EAAU,EAE9B,SACE,QAAC,UAAO,KAAMwB,EAAM,QAASC,EAAS,MAAM,iBAC1C,qBAAC,iBACC,oBAAC,OAAI,UAAWf,EAAQ,QACtB,oBAAC,eAAY,UAAS,GACpB,oBAAC,aAAU,UAAU,SAAS,0BAAc,KAC5C,OAAC,cACC,MAAOL,EAAM,cACb,SAAUM,GAAK,CACbN,EAAM,iBAAiB,SAASM,EAAE,OAAO,KAAK,CAAC,EAC1CN,EAAM,gBAAgB,CAC7B,EAEC,SAAAqB,EAAiB,IAAIC,MACpB,OAAC,oBAEC,MAAOA,EAAE,MACT,WAAS,OAAC,UAAM,EAChB,MAAOA,EAAE,OAHJA,EAAE,KAIT,CACD,EACH,KACA,OAAC1B,EAAA,CAAQ,4JAIT,KACA,OAACG,EAAA,CAAW,MAAOC,EAAO,GAC5B,EACF,KAEA,QAACC,EAAA,CACC,MAAM,aACN,QAASD,EAAM,UACf,SAAUuB,GAAQ,CAChBvB,EAAM,aAAauB,CAAI,CACzB,EAEA,oBAAC3B,EAAA,CAAQ,uJAIT,EACCI,EAAM,WAAa,CAACA,EAAM,sBACzB,OAACJ,EAAA,CAAQ,KAAI,GACV,SAAAI,EAAM,UAAYwB,EACf,QAAQxB,EAAM,UAAU,eAAe,CAAC,sBAAsBwB,CAAe,uBAC7E,kCACN,EACE,MACN,KAEA,OAACvB,EAAA,CACC,MAAM,eACN,QAASD,EAAM,YACf,SAAUyB,GAAQ,CAChBzB,EAAM,eAAeyB,CAAI,CAC3B,EAEA,mBAAC7B,EAAA,CAAQ,uHAGT,EACF,KAEA,QAACK,EAAA,CACC,MAAM,wBACN,QAASD,EAAM,UACf,SAAUyB,GAAQ,CAChBzB,EAAM,aAAayB,CAAI,CACzB,EAEA,oBAAC7B,EAAA,CAAQ,sIAGT,EACCI,EAAM,iBAAiB,OAAS,KAC/B,OAACO,EAAA,CACC,MAAM,aACN,MAAOP,EAAM,WAAW,SAAW,GACnC,QAASa,EAAab,EAAM,gBAAgB,EAC5C,OAAO,0BACP,GAAI,CAAE,GAAI,CAAE,EACZ,SAAUe,GAAW,CACnBf,EAAM,eAAee,CAAO,EACvBf,EAAM,YAAY,CACzB,EACF,EACE,KACHA,EAAM,mBAAmB,OAAS,KACjC,OAACO,EAAA,CACC,MAAM,eACN,MAAOP,EAAM,aAAa,SAAW,GACrC,QAASa,EAAab,EAAM,kBAAkB,EAC9C,OAAO,4BACP,GAAI,CAAE,GAAI,CAAE,EACZ,SAAUe,GAAW,CACnBf,EAAM,iBAAiBe,CAAO,EACzBf,EAAM,cAAc,CAC3B,EACF,EACE,MACN,EAECA,EAAM,YAAY,OAAS,KAC1B,QAAC,OAAI,UAAWK,EAAQ,QACtB,oBAACE,EAAA,CACC,MAAM,iBACN,MAAOP,EAAM,qBAAuB,GACpC,QAASA,EAAM,YAAY,IAAI,CAAC,CAAE,KAAAgB,CAAK,KAAO,CAC5C,MAAOA,EACP,MAAOA,CACT,EAAE,EACF,OAAO,8BACP,SAAUA,GAAQ,CAChBhB,EAAM,iBAAiBgB,CAAI,EACtBhB,EAAM,gBAAgB,CAC7B,EACF,KACA,OAACJ,EAAA,CAAQ,sKAIT,GACF,EACE,QAEJ,QAAC,OAAI,UAAWS,EAAQ,QACtB,oBAACE,EAAA,CACC,MAAM,gBACN,MAAOP,EAAM,aACb,QAAS0B,EACT,OAAO,6BACP,SAAUC,GAAU,CAClB3B,EAAM,gBAAgB2B,CAAM,EACvB3B,EAAM,gBAAgB,CAC7B,EACF,KACA,OAACJ,EAAA,CAAQ,sLAIT,KACA,OAACG,EAAA,CAAW,MAAOC,EAAO,GAC5B,KAEA,QAAC,OAAI,UAAWK,EAAQ,QACtB,oBAACE,EAAA,CACC,MAAM,aACN,MAAOP,EAAM,UACb,QAAS4B,EACT,OAAO,0BACP,SAAUC,GAAS,CACjB7B,EAAM,aAAa6B,CAAK,CAC1B,EACF,KACA,OAACjC,EAAA,CAAQ,uGAGT,GACF,EAECE,KAED,QAAC,OAAI,UAAWO,EAAQ,QACtB,oBAACE,EAAA,CACC,MAAM,eACN,MAAOP,EAAM,kBACb,QAAS8B,EACT,SAAUC,GAAU,CAClB/B,EAAM,eAAe+B,CAAM,CAC7B,EACF,EACC/B,EAAM,mBACL,QAACJ,EAAA,CAAQ,KAAI,GAAC,4BAAgBI,EAAM,gBAAgB,KAAI,EACtD,MACN,GACF,KAEA,OAAC,iBACC,mBAAC,UAAO,QAAQ,YAAY,MAAM,UAAU,QAASoB,EAAS,iBAE9D,EACF,GACF,CAEJ,CAAC,EAEMY,EAAQf",
6
6
  "names": ["LAYOUT_QUALITIES", "import_ui", "import_material", "import_mobx_react", "import_mui", "import_jsx_runtime", "useStyles", "Caption", "warn", "children", "EngineOnly", "model", "SettingSwitch", "label", "checked", "onChange", "classes", "e", "SettingSelect", "value", "options", "testId", "sx", "description", "trackOptions", "tracks", "trackId", "name", "GraphSettingsDialog", "props", "open", "onClose", "LAYOUT_QUALITIES", "q", "draw", "MAX_PATH_COLORS", "show", "BUBBLE_SPREADS", "spread", "NODE_WIDTHS", "width", "COLOR_SCHEMES", "scheme", "GraphSettingsDialog_default"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ import{a as ut,c as T,h as dt}from"./chunk-MYJYGSOH.js";import{a as it,b as ft}from"./chunk-DILFGQIL.js";var lt=20;var ht=11,Dt=6.2,D=4;function Gt(t){return t.length*Dt+D*2}function Yt(t,n){return t.x0<n.x1&&t.x1>n.x0&&t.y0<n.y1&&t.y1>n.y0}function yt(t,n){return t.x1<=0||t.x0>=n.width||t.y1<=0||t.y0>=n.height}function Vt(t,n){return t.x0>=0&&t.x1<=n.width&&t.y0>=0&&t.y1<=n.height}function jt(t,n=[]){let o=[...n];return e=>yt(e,t)||o.some(s=>Yt(s,e))?!1:(o.push(e),!0)}function Jn(t,n,o){let e=[],s=ht+D*2,r=(c,a)=>{let i=Gt(a),u=c.y>n.height/2?-1:1;for(let d=0;d<=(c.stack??0);d++){let p=c.y+u*d*s,y={x0:c.x-i/2,x1:c.x+i/2,y0:p-ht-D,y1:p+D};if(yt(y,n))return;if(Vt(y,n)&&(c.fits?.(y)??!0)&&o(y))return{...c,text:a,y:p,w:i}}};for(let c of t){let a=r(c,c.text)??(c.fallback===void 0?void 0:r(c,c.fallback));a&&e.push(a)}return e}function Zn(t){let n=o=>Math.round(o*100)/100;return t.map((o,e)=>`${e?"L":"M"}${n(o.x)},${n(o.y)}`).join("")}function xt(t,n,o,e,s){let r=Math.hypot(e-n,o-t);if(r===0)return[o,e];let c=(o-t)/r,a=(e-n)/r;return[o+s*c,e+s*a]}function J(t,n){let o=1-n,e=o*o*o,s=3*o*o*n,r=3*o*n*n,c=n*n*n;return{x:e*t.x0+s*t.cx0+r*t.cx1+c*t.x1,y:e*t.y0+s*t.cy0+r*t.cy1+c*t.y1}}function At(t){let n=t[Math.floor(t.length/2)];return n?J(n,.5):void 0}function _t(t){let n=1/0,o=1/0,e=-1/0,s=-1/0;for(let r of t)n=Math.min(n,r.x0,r.cx0,r.cx1,r.x1),e=Math.max(e,r.x0,r.cx0,r.cx1,r.x1),o=Math.min(o,r.y0,r.cy0,r.cy1,r.y1),s=Math.max(s,r.y0,r.cy0,r.cy1,r.y1);return{minX:n,minY:o,maxX:e,maxY:s}}function zt(t,n,o){let e=J(t,n),s=J(t,o),r=(o-n)/3,c=pt(t,n),a=pt(t,o);return{x0:e.x,y0:e.y,cx0:e.x+c.x*r,cy0:e.y+c.y*r,cx1:s.x-a.x*r,cy1:s.y-a.y*r,x1:s.x,y1:s.y}}function pt(t,n){let o=1-n,e=3*o*o,s=6*o*n,r=3*n*n;return{x:e*(t.cx0-t.x0)+s*(t.cx1-t.cx0)+r*(t.x1-t.cx1),y:e*(t.cy0-t.y0)+s*(t.cy1-t.cy0)+r*(t.y1-t.cy1)}}function to(t,n){let o=t.map(c=>Math.hypot(c.cx0-c.x0,c.cy0-c.y0)+Math.hypot(c.cx1-c.cx0,c.cy1-c.cy0)+Math.hypot(c.x1-c.cx1,c.y1-c.cy1)),e=o.reduce((c,a)=>c+a,0),s=Math.max(3,Math.round(e/n)|1),r=[];for(let c=0;c<s;c+=2){let a=c/s*e,i=(c+1)/s*e,u=[],d=0;t.forEach((p,y)=>{let f=o[y],x=d+f;f>0&&x>a&&d<i&&u.push(zt(p,Math.max(0,(a-d)/f),Math.min(1,(i-d)/f))),d=x}),u.length&&r.push(u)}return r}function no(t,n,o){let e=new Array(t.length);for(let s=0;s<t.length;s++){let r=t[s];e[s]={x0:r.x0+n,y0:r.y0+o,cx0:r.cx0+n,cy0:r.cy0+o,cx1:r.cx1+n,cy1:r.cy1+o,x1:r.x1+n,y1:r.y1+o}}return e}function $(t,n){let o=t.length-1;return n==="end"?{at:t[o],inward:t[o-1]}:{at:t[0],inward:t[1]}}var Ut=.5,qt=80;function H(t){return t.endsWith("-")?"-":"+"}function W(t){let n=(o,e)=>(e??H(o))===H(o);return{from:n(t.from,t.fromStrand)?"end":"start",to:n(t.to,t.toStrand)?"start":"end"}}function mt(t){let n=1/0,o=-1/0;for(let e of t)n=Math.min(n,e.x),o=Math.max(o,e.x);return{min:n,max:o}}function Mt(t,n){return Math.max(0,n.min-t,t-n.max)}function bt(t,n,o){let e=Mt(t[0].x,n),s=Mt(t[t.length-1].x,n);return e===s?o:e<s?"start":"end"}function Jt(t,n){return{from:bt(t,mt(n),"end"),to:bt(n,mt(t),"start")}}var gt=new WeakMap;function Kt(t,n){let o=gt.get(t);o||(o=new WeakMap,gt.set(t,o));let e=o.get(n);return e||(e=Jt(t,n),o.set(n,e)),e}var Qt=.75,Zt=1.15,tn=.35,nn=3*lt;function on(t,n,o,e,s,r){let c=Math.hypot(o-t,e-n),a=c===0?1:(o-t)/c,i=c===0?0:(e-n)/c,u=0,d=1/0,p=-1/0;for(let l of s){let h=l.x-t,M=l.y-n,m=h*-i+M*a;Math.abs(m)>Math.abs(u)&&(u=m);let b=h*a+M*i;d=Math.min(d,b),p=Math.max(p,b)}let y=s.length?p-d:0,f=Math.max(Math.abs(u)*Zt/Qt,y*tn),x=r===void 0?f:Math.min(f,r);return u<0?-x:x}function Et({scaleX:t,scaleY:n}){return n/t}var en=3;function U(t,n,o){let e=n.x-t.x,s=(n.y-t.y)*o,r=Math.hypot(e,s);return r===0?void 0:{x:e/r,y:s/r}}function oo(t,n,o,e,s=en){let r=Et(e),c=U(t[t.length-1],n[0],r)??U(t[0],t.at(-1),r)??U(n[0],n.at(-1),r)??{x:1,y:0},a=[];for(let i=0;i<o;i++){let u=(i-(o-1)/2)*s;a.push({x:-c.y*u,y:c.x*u/r})}return a}function q(t,n){return t.map(o=>({x:o.x,y:o.y*n}))}function rn(t,n){for(let o of t)o.y0/=n,o.cy0/=n,o.cy1/=n,o.y1/=n;return t}var sn=12,cn=40;function vt(t,n){let o=0;for(let r=1;r<t.length;r++)o+=Math.hypot(t[r].x-t[r-1].x,t[r].y-t[r-1].y);let e=o*n;return Math.min(cn,Math.max(sn,e/2))/Math.max(n,Number.EPSILON)}function an(t){return t.from!==t.to?!1:t.fromStrand&&t.toStrand&&t.fromStrand!==t.toStrand?t.fromStrand==="+"?"end":"start":!0}function It(t,n=!1){let o=an(t);if(!n)return o;let e=W(t);return o===!1?e:e.from===e.to?e.from:!0}function fn(t,n,o,e){let{at:s,inward:r}=t,c=r?s.x-r.x:1,a=r?s.y-r.y:0,i=Math.hypot(c,a)||1,u=c/i,d=a/i,p=s.x+o,y=s.y+e,f=p+u*n/3,x=y+d*n/3,l=p+u*n,h=y+d*n,M=-d*n/2,m=u*n/2;return[{x0:p,y0:y,cx0:f,cy0:x,cx1:l+M,cy1:h+m,x1:l,y1:h},{x0:l,y0:h,cx0:l-M,cy0:h-m,cx1:f,cy1:x,x1:p,y1:y}]}function K(t,n,o,e,s,r,c=[],a){let i=r.scaleX,u=Et(r),d=a??(r.pixelRows?nn:void 0);if(o===!1&&(o=Kt(t,n)),u!==1)return rn(K(q(t,u),q(n,u),o,e,s*u,{scaleX:i,scaleY:i},q(c,u),d===void 0?void 0:d*u),u);if(typeof o=="string")return fn($(t,o),vt(t,i),e,s);let p=o===!0,y=o===!0?{from:"end",to:"start"}:o,f=$(t,y.from),x=$(n,y.to),l=f.at,h=x.at,M=l.x+e,m=l.y+s,b=h.x+e,E=h.y+s;if(p){let _=1,v=0;if(f.inward){let C=l.x-f.inward.x,B=l.y-f.inward.y,S=Math.hypot(C,B);S>0&&(_=C/S,v=B/S)}let g=vt(t,i),I=-v,A=_,w=(l.x+h.x)/2+e+I*g,N=(l.y+h.y)/2+s+A*g,O=M+_*g,X=m+v*g,P=b-_*g,L=E-v*g;return[{x0:M,y0:m,cx0:O,cy0:X,cx1:O+I*g,cy1:X+A*g,x1:w,y1:N},{x0:w,y0:N,cx0:P+I*g,cy0:L+A*g,cx1:P,cy1:L,x1:b,y1:E}]}else{let _=f.inward??{x:l.x-(h.x-l.x),y:l.y-(h.y-l.y)},v=x.inward??{x:h.x-(l.x-h.x),y:h.y-(l.y-h.y)},g=Math.hypot(b-M,E-m),I=(et,rt,Ht,Wt)=>{let st=rt.x-et.x,ct=rt.y-et.y,at=Math.hypot(st,ct),Ft=at===0?0:(Ht*st+Wt*ct)/at;return Math.max(0,Math.min(g*Ut,qt,Ft*.5))},A=h.x-l.x,w=h.y-l.y,[N,O]=xt(_.x,_.y,l.x,l.y,I(_,l,A,w)),[X,P]=xt(v.x,v.y,h.x,h.y,I(v,h,-A,-w)),L=c.length?on(M,m,b,E,c,d):0,C=g===0?1:g,B=(b-M)/C,S=(E-m)/C,k=-S*L,tt=B*L,nt=B*Math.abs(L),ot=S*Math.abs(L);return[{x0:M,y0:m,cx0:N+e+k-nt,cy0:O+s+tt-ot,cx1:X+e+k+nt,cy1:P+s+tt+ot,x1:b,y1:E}]}}function wt(t,n){let o=t[0],e=t.at(-1);return Math.hypot(o.x-n.x,o.y-n.y)<Math.hypot(e.x-n.x,e.y-n.y)?"start":"end"}function Lt(t,n,o,e){let s=$(t,e?.from??wt(t,o[0])),r=$(n,e?.to??wt(n,o.at(-1))),c=[s.at,...o,r.at],a=u=>{let d=c[u],p=f=>Math.hypot(f.x-d.x,f.y-d.y),y=(f,x)=>{let l=f?p(f):0,h=p(x);return l===0?{x:x.x-d.x,y:x.y-d.y}:{x:(d.x-f.x)/l*h,y:(d.y-f.y)/l*h}};if(u===0)return y(s.inward,c[1]);if(u===c.length-1){let f=y(r.inward,c[u-1]);return{x:-f.x,y:-f.y}}return{x:(c[u+1].x-c[u-1].x)/2,y:(c[u+1].y-c[u-1].y)/2}},i=[];for(let u=0;u<c.length-1;u++){let d=c[u],p=c[u+1],y=a(u),f=a(u+1);i.push({x0:d.x,y0:d.y,cx0:d.x+y.x/3,cy0:d.y+y.y/3,cx1:p.x-f.x/3,cy1:p.y-f.y/3,x1:p.x,y1:p.y})}return i}function Ot(t){return t==="+"?"-":"+"}function co(t,n=new Set){let o=t.edges.map(W),e=new Map,s=(f,x,l)=>{let h=`${f}|${x}`,M=e.get(h);M?M.push(l):e.set(h,[l])};t.edges.forEach((f,x)=>{s(f.from,o[x].from,x),s(f.to,o[x].to,x)});let r=f=>{let x=e.get(`${f}|end`);if(x?.length!==1)return;let l=x[0],h=t.edges[l];return h.from===f&&h.to!==f&&!n.has(f)&&!n.has(h.to)&&o[l].from==="end"&&o[l].to==="start"&&e.get(`${h.to}|start`)?.length===1?l:void 0},c=new Set,a=new Map,i=new Map;for(let f of t.nodes){let x=e.get(`${f.id}|start`),l=x?.length===1?t.edges[x[0]].from:void 0;if(a.has(f.id)||l!==void 0&&r(l)===x[0])continue;let h=[f.id];for(;;){let M=r(h.at(-1)),m=M===void 0?void 0:t.edges[M].to;if(m===void 0||a.has(m))break;c.add(M),h.push(m)}for(let M of h)a.set(M,f.id);h.length>1&&i.set(f.id,h)}for(let f of t.nodes)a.has(f.id)||a.set(f.id,f.id);let u=new Map(t.nodes.map(f=>[f.id,f])),d=[];for(let f of t.nodes){if(a.get(f.id)!==f.id)continue;let x=i.get(f.id);if(!x){d.push(f);continue}let l=x.map(m=>u.get(m)),h=l.filter(T),M=h.length?h.reduce((m,b)=>m.stable.start<=b.stable.start?m:b):l[0];d.push({id:f.id,name:f.name,length:l.reduce((m,b)=>m+b.length,0),depth:f.depth,stable:M.stable})}let p=new Set,y=[];return t.edges.forEach((f,x)=>{let l=a.get(f.from),h=a.get(f.to),M=o[x],m=`${l}|${M.from}>${h}|${M.to}`;c.has(x)||p.has(m)||(p.add(m),y.push({from:l,to:h,...M.from==="start"?{fromStrand:Ot(H(l))}:{},...M.to==="end"?{toStrand:Ot(H(h))}:{}}))}),{graph:{...t,nodes:d,edges:y,paths:void 0,pathVisits:void 0},runs:i}}function ao(t,n,o){let e={...t};for(let[s,r]of n){let c=t[s];if(!c?.length)continue;delete e[s];let a=Z(c),i=a.at(-1),u=r.map(y=>Math.max(o(y),0)),d=u.reduce((y,f)=>y+f,0)||r.length,p=0;r.forEach((y,f)=>{let x=d?u[f]/d*i:i/r.length,l=f===r.length-1?i:p+x;e[y]=Pt(c,a,p,l),p=l})}return e}function io(t,n,o){if(t.length===0)return[];let e=Z(t),s=e.at(-1);return Pt(t,e,n*s,o*s)}function Nt(t){let n=Z(t);return Q(t,n,n.at(-1)/2)}function Z(t){let n=[0];for(let o=1;o<t.length;o++)n.push(n[o-1]+Math.hypot(t[o].x-t[o-1].x,t[o].y-t[o-1].y));return n}function Q(t,n,o){if(o<=0)return{...t[0]};let e=1;for(;e<n.length&&n[e]<o;)e++;if(e>=n.length)return{...t.at(-1)};let s=n[e]-n[e-1],r=s>0?(o-n[e-1])/s:0,c=t[e-1],a=t[e];return{x:c.x+(a.x-c.x)*r,y:c.y+(a.y-c.y)*r}}function Pt(t,n,o,e){let s=[Q(t,n,o)];for(let r=0;r<t.length;r++)n[r]>o&&n[r]<e&&s.push({...t[r]});return s.push(Q(t,n,e)),s}var un=1;function dn(t,n){return n.flatMap(o=>t[o]??[])}function Xt(t,n,o,e,s=!1){let r=t[n.from],c=t[n.to];if(!(!r?.length||!c?.length))return e?Lt(r,c,e,s?W(n):void 0):K(r,c,It(n,s),0,0,o,dn(t,n.bypassed))}function ln(t){let n=new Map;for(let o of t.nodes)if(T(o)){let e=n.get(o.stable.refName);e?e.push(o):n.set(o.stable.refName,[o])}for(let o of n.values())o.sort((e,s)=>e.stable.start-s.stable.start);return n}function hn(t,n,o){let e=[];if(t)for(let s=dt(t,n);s<t.length;s++){let r=t[s];if(r.stable.start>=o)break;r.stable.start+r.length<=o&&e.push(r.id)}return e}function yn(t,n,o,e){let{fromStrand:s,toStrand:r}=t;if(s===void 0||r===void 0)return!0;let c=s===(n.stable.strand??"+"),a=r===(o.stable.strand??"+");return e?c&&a:!c&&!a}function ho(t){let n=new Map(t.nodes.map(s=>[s.id,s])),o=ln(t),e=[];for(let s=0;s<t.edges.length;s++){let r=t.edges[s],c=n.get(r.from),a=n.get(r.to);if(c!==void 0&&a!==void 0&&T(c)&&T(a)&&c.stable.refName===a.stable.refName){let i=c.stable.start<=a.stable.start,[u,d]=i?[c,a]:[a,c],p=u.stable.start+u.length,y=d.stable.start,f=y-p;if(f>=un&&yn(r,c,a,i)){let x=u.stable.refName;e.push({edgeIndex:s,from:r.from,to:r.to,...r.fromStrand?{fromStrand:r.fromStrand}:{},...r.toStrand?{toStrand:r.toStrand}:{},refName:x,start:p,end:y,bp:f,bypassed:hn(o.get(x),p,y)})}}}return e}function xn(t,n){let o=new Map,e=c=>{let a=c;for(;o.has(a);)a=o.get(a);return a!==c&&o.set(c,a),a},s=(c,a)=>{let[i,u]=[e(c),e(a)];return i!==u&&o.set(i,u),i!==u},r=new Set(n.map(c=>c.edgeIndex));return t.edges.forEach((c,a)=>{r.has(a)||s(c.from,c.to)}),new Set(n.filter(c=>!s(c.from,c.to)).map(c=>c.edgeIndex))}var St=new WeakMap;function yo(t,n,o=!0){let e=St.get(n);e||(e=new Map,St.set(n,e));let s=e.get(o);if(!s){let r=o?new Set:xn(t,n);s={shown:n.filter(c=>!r.has(c.edgeIndex)),bypassed:new Map(n.map(c=>[c.edgeIndex,c.bypassed])),hidden:r},e.set(o,s)}return s}var pn=26,mn=4e4,Mn=8,bn=8,gn=5.7,vn=6,wn=13,F=3,G=2;function j(t){return(t.length*gn+vn+F)/2}var R=(wn+F)/2,An=j("1 bp");function Y(t,n,o){return{x0:n-t,x1:n+t,y0:o-R,y1:o+R}}function go(t,n){return{x0:6,x1:6+t.length*6.2+8+F,y0:n-8-F/2,y1:n+8+F/2}}function V(t,n,o){return o<n?t:Math.min(Math.max(t,n),o)}function Tt(t){return String(t).replace(/\B(?=(\d{3})+$)/g,",")}function kt(t){return t>=1e6?`${+(t/1e6).toFixed(1)} Mb`:t>=1e3?`${+(t/1e3).toFixed(1)} kb`:`${t} bp`}function Ct(t){return`${kt(t)} del`}function _n(t,n,o,e){let s=t[0],r=t[t.length-1],c=(n.x-(s.x0+r.x1)/2)*o,a=(n.y-(s.y0+r.y1)/2)*e,i=Math.hypot(c,a);return i===0?{x:0,y:-1}:{x:c/i,y:a/i}}function En(t,n){return Math.abs(n.x)*(t.x1-t.x0)/2+Math.abs(n.y)*(t.y1-t.y0)/2}function In(t,n){let o=(t.x1-t.x0)/2,e=(t.y1-t.y0)/2;return Math.min(n.x===0?1/0:o/Math.abs(n.x),n.y===0?1/0:e/Math.abs(n.y))}function Ln(t,n,o){let e=0;for(let s=1;s<t.length;s++){let r=t[s-1],c=t[s];e+=Math.hypot((c.x-r.x)*n,(c.y-r.y)*o)}return e}function On(t,n){let o=1/0,e=1/0,s=-1/0,r=-1/0;for(let c of t)for(let a of n[c]??[])o=Math.min(o,a.x),s=Math.max(s,a.x),e=Math.min(e,a.y),r=Math.max(r,a.y);return o===1/0?void 0:{minX:o,minY:e,maxX:s,maxY:r}}var Bt=new WeakMap;function Nn(t,n){let o=Bt.get(t);if(o?.nodeLengths===n)return o.order;let e=Object.entries(t).filter(([s,r])=>r.length>0&&n.has(s)).sort(([s],[r])=>n.get(r)-n.get(s));return Bt.set(t,{nodeLengths:n,order:e}),e}var Rt=new WeakMap;function Pn(t,n,o,e,s,r){let{scaleX:c,scaleY:a}=o,i=Rt.get(t);if(i?.deletions===n&&i.routes===s&&i.stranded===r&&i.scaleX===c&&i.scaleY===a&&i.version===e)return i.arcs;let u=[];for(let d of[...n].sort((p,y)=>y.bp-p.bp)){let p=Xt(t,d,o,s?.[d.edgeIndex],r),y=p?At(p):void 0;if(p&&y){let{minX:f,minY:x,maxX:l,maxY:h}=_t(p);u.push({deletion:d,curves:p,apex:y,extent:Math.max((l-f)*c,(h-x)*a)})}}return Rt.set(t,{deletions:n,routes:s,stranded:r,scaleX:c,scaleY:a,version:e,arcs:u}),u}function vo({nodePositions:t,nodeLengths:n,deletions:o,deletionRoutes:e,stranded:s=!1,alleleDeletions:r,axis:c,translateX:a,translateY:i,width:u,height:d,version:p=0}){let{scaleX:y,scaleY:f}=c,x=[],l=[];for(let{deletion:m,curves:b,apex:E,extent:_}of Pn(t,o,c,p,e,s))if(_>=pn){let v=Ct(m.bp),g=j(v),I=Y(g,0,0),A=E.x*y+a,w=E.y*f+i,N=_>=g*2/G,O=_n(b,E,y,f),X=En(I,O)+bn,P=N?A:V(A+O.x*X,g,u-g),L=N?w:V(w+O.y*X,R,d-R),C=Math.hypot(P-A,L-w),B;if(C>0){let S={x:(P-A)/C,y:(L-w)/C},k=In(I,S);B={arcX:A,arcY:w,labelX:P-S.x*k,labelY:L-S.y*k}}x.push({label:{key:`del:${m.edgeIndex}`,text:v,x:P,y:L,kind:"deletion",leader:B},box:Y(g,P,L)})}let h=new Set,M=[...r??[]].sort((m,b)=>b.bp-m.bp);for(let m of M){let b=On(m.nodeIds,t);if(!b)continue;let E=Math.max(b.minX*y+a,0),_=Math.min(b.maxX*y+a,u),v=Math.max(b.minY*f+i,0),g=Math.min(b.maxY*f+i,d);if(_<E||g<v)continue;let I=Math.max(_-E,g-v),A=Ct(m.bp),w=j(A);if(I>=w*2/G){for(let X of m.nodeIds)h.add(X);let N=V((E+_)/2,w,u-w),O=V((v+g)/2,R,d-R);x.push({label:{key:`alleledel:${m.nodeIds.join(",")}`,text:A,x:N,y:O,kind:"deletion"},box:Y(w,N,O)})}}for(let[m,b]of Nn(t,n)){if(h.has(m))continue;let{x:E,y:_}=Nt(b),v=_*f+i;if(v+R<=0||v-R>=d)continue;let g=Ln(b,y,f);if(g<An*2/G)continue;let I=kt(n.get(m)),A=j(I);if(g>=A*2/G){let w=E*y+a;l.push({label:{key:`node:${m}`,text:I,x:w,y:v,kind:"node"},box:Y(A,w,v)})}}return{deletions:x,nodes:l}}function wo(t,n){return Math.max(Mn,Math.floor(t*n/mn))}function Ao(t,n,o=1/0){let e=[];for(let{label:s,box:r}of t){if(e.length>=o)break;n(r)&&e.push(s)}return e}var Sn=/:(\d+)-\d+$/;function z(t){let n=Sn.exec(t);return n?{name:t.slice(0,n.index),start:+n[1]}:{name:t,start:0}}function Lo(t,n){let o=[],e=new Map;for(let s of t){let r=it(s.name),c=s.start;for(let a of s.steps){let i={path:s.name,sample:r,start:c,strand:a.strand},u=e.get(a.id);u?u.push(i):e.set(a.id,[i]),c+=n(a.id)}o.push({name:s.name,sample:r,start:s.start,length:c-s.start})}return{anchorPaths:o,pathVisits:e}}function Xn(t,n){return t.find(e=>e.sample===n||e.name===n)??t[0]}var Cn=1;function Bn(t,n,o){let e=t;if(n&&n.length>0){let s=n.find(r=>r.path===o)??n[0];e={...t,stable:{refName:s.path,start:s.start,rank:s.path===o?ut:Cn,strand:s.strand},samples:[...new Set(n.map(r=>r.sample))].sort()}}return e}function Rn(t,n){let{anchorPaths:o,pathVisits:e}=t,s=o&&e?Xn(o,n):void 0;return s&&e?{...t,nodes:t.nodes.map(r=>Bn(r,e.get(r.name),s.name)),anchoredBy:"paths",referencePath:s.name}:t}function Oo(t,n){return t.anchoredBy==="tags"?t:Rn(t,n)}function No(t,n){if(!t.anchorPaths)return;let o=new Map(t.nodes.map(r=>[r.id,r.length])),e=(r,c=r.length)=>{let a=0;for(let i=0;i<c;i++)a+=o.get(r[i])??0;return a},s=new Map;for(let r of t.paths??[]){let c=z(r.name).name;s.set(c,[...s.get(c)??[],r])}return t.anchorPaths.map(r=>{let c=s.get(r.name),a=c?.length===1?c[0]:void 0,i=a&&n.get(a.name);return a&&i?{...r,start:r.start+e(a.nodeIds,i.first),length:e(i.nodeIds)}:r})}function Bo(t){let n=0;for(let o=0;o<t.length;o++)n=t.charCodeAt(o)+((n<<5)-n);return Math.abs(n%360)}function Tn(t,n){return t*360/n}var kn=.7,$n=.5,Hn=16;function Ro(t){return t>0&&t<=Hn}function Wn(t,n){return`hsl(${Tn(t,n)}, ${kn*100}%, ${$n*100}%)`}function To(t,n){return`hsl(0, 0%, ${n>1?25+45*t/(n-1):45}%)`}function Fn(t){let n=z(t).name.split("#"),o=n.join("#");if(n.length>=3&&ft(n[0])){let e=n.slice(2).join("#");return[e,e,o]}return[n[0],n.slice(0,2).join("#"),o]}function Dn(t,n){let{start:o}=z(t);return n.map(e=>`${e} @${Tt(o)}`)}function ko(t,n){let o=new Map;t.forEach((i,u)=>{o.has(i.name)||o.set(i.name,u)});let e=[...o].map(([i,u])=>({name:i,i:u})),s=e.map(i=>Fn(i.name)),r=[0,1,2].flatMap(i=>[e.map((u,d)=>s[d][i]),e.map((u,d)=>Dn(u.name,s[d])[i])]),a=r.find(i=>new Set(i).size===e.length)??r.at(-1);return e.map(({name:i,i:u},d)=>({name:i,label:a[d],color:n?.[u]??Wn(u,t.length)}))}function $o(t){let n=new Map;return new Map([...t].sort((o,e)=>o.label.localeCompare(e.label)).map(o=>{let e=(n.get(o.label)??0)+1;return n.set(o.label,e),[o.name,e>1?`${o.label} (${e})`:o.label]}))}var Gn=[{value:"depth",label:"By depth",description:"Thicker the more paths carry a node, on the square root of its depth against the mean. A graph with one depth everywhere draws uniform."},{value:"uniform",label:"Uniform",description:"Every node the same thickness."}],Wo=Gn.map(t=>t.value),Yn=.3,$t=3;function Vn(t){let n=0,o=0;for(let e of t.nodes)n+=e.depth*e.length,o+=e.length;return o>0?n/o:0}function jn(t,n){return!(n>0)||!(t.depth>0)?1:Math.min($t,Math.max(Yn,Math.sqrt(t.depth/n)))}function zn(t,n,o,e){return n*(o==="depth"?jn(t,e):1)}function Un(t,n){return t*(n==="depth"?$t:1)}function Fo(t,n,o,e){let s=t?Vn(t):0;return{maxHalfWidthPx:Un(o,e)/2,halfWidthPx:r=>{let c=n?.get(r);return c?zn(c,o,e,s)/2:o/2}}}export{lt as a,ht as b,Dt as c,D as d,jt as e,Jn as f,Zn as g,_t as h,to as i,no as j,W as k,Et as l,oo as m,It as n,K as o,Lt as p,co as q,ao as r,io as s,dn as t,ho as u,xn as v,yo as w,go as x,Tt as y,kt as z,vo as A,wo as B,Ao as C,z as D,Lo as E,Xn as F,Rn as G,Oo as H,No as I,Bo as J,Tn as K,kn as L,$n as M,Hn as N,Ro as O,Wn as P,To as Q,ko as R,$o as S,Gn as T,Wo as U,Vn as V,zn as W,Fo as X};
2
+ //# sourceMappingURL=chunk-B7GF3TC3.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-CPMHA4W5.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-AB35TJST.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-2CVHXFK7.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-TAMCZHLW.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-N6FECAXP.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-3ZZSX5HN.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-ST2IBUAN.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-7GBL7SJY.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@8.0.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-PBENCR5L.js"],
4
+ "sourcesContent": ["// src/layout/rowSpacing.ts\nvar ROW_HEIGHT_PX = 20;\n\nexport {\n ROW_HEIGHT_PX\n};\n", "// src/overlayLabels.ts\nvar LABEL_PX = 11;\nvar LABEL_CHAR_PX = 6.2;\nvar LABEL_PAD = 4;\nfunction labelWidth(text) {\n return text.length * LABEL_CHAR_PX + LABEL_PAD * 2;\n}\nfunction overlaps(a, b) {\n return a.x0 < b.x1 && a.x1 > b.x0 && a.y0 < b.y1 && a.y1 > b.y0;\n}\nfunction offFrame(box, frame) {\n return box.x1 <= 0 || box.x0 >= frame.width || box.y1 <= 0 || box.y0 >= frame.height;\n}\nfunction insideFrame(box, frame) {\n return box.x0 >= 0 && box.x1 <= frame.width && box.y0 >= 0 && box.y1 <= frame.height;\n}\nfunction occupancy(frame, reserved = []) {\n const placed = [...reserved];\n return (box) => {\n if (offFrame(box, frame) || placed.some((p) => overlaps(p, box))) {\n return false;\n }\n placed.push(box);\n return true;\n };\n}\nfunction placeLabels(candidates, frame, take) {\n const out = [];\n const row = LABEL_PX + LABEL_PAD * 2;\n const place = (c, text) => {\n const w = labelWidth(text);\n const direction = c.y > frame.height / 2 ? -1 : 1;\n for (let tries = 0; tries <= (c.stack ?? 0); tries++) {\n const y = c.y + direction * tries * row;\n const box = {\n x0: c.x - w / 2,\n x1: c.x + w / 2,\n y0: y - LABEL_PX - LABEL_PAD,\n y1: y + LABEL_PAD\n };\n if (offFrame(box, frame)) {\n return void 0;\n }\n if (insideFrame(box, frame) && (c.fits?.(box) ?? true) && take(box)) {\n return { ...c, text, y, w };\n }\n }\n return void 0;\n };\n for (const c of candidates) {\n const placed = place(c, c.text) ?? (c.fallback === void 0 ? void 0 : place(c, c.fallback));\n if (placed) {\n out.push(placed);\n }\n }\n return out;\n}\n\nexport {\n LABEL_PX,\n LABEL_CHAR_PX,\n LABEL_PAD,\n labelWidth,\n overlaps,\n occupancy,\n placeLabels\n};\n", "import {\n ROW_HEIGHT_PX\n} from \"./chunk-CPMHA4W5.js\";\n\n// src/util/geometry.ts\nfunction svgPath(points) {\n const round = (v) => Math.round(v * 100) / 100;\n return points.map((p, i) => `${i ? \"L\" : \"M\"}${round(p.x)},${round(p.y)}`).join(\"\");\n}\nfunction projectLine(x1, y1, x2, y2, distance) {\n const d = Math.hypot(y2 - y1, x2 - x1);\n if (d === 0) {\n return [x2, y2];\n }\n const vx = (x2 - x1) / d;\n const vy = (y2 - y1) / d;\n return [x2 + distance * vx, y2 + distance * vy];\n}\nfunction curvePointAt(c, t) {\n const u = 1 - t;\n const a = u * u * u;\n const b = 3 * u * u * t;\n const d = 3 * u * t * t;\n const e = t * t * t;\n return {\n x: a * c.x0 + b * c.cx0 + d * c.cx1 + e * c.x1,\n y: a * c.y0 + b * c.cy0 + d * c.cy1 + e * c.y1\n };\n}\nfunction curveMidpoint(curves) {\n const mid = curves[Math.floor(curves.length / 2)];\n return mid ? curvePointAt(mid, 0.5) : void 0;\n}\nfunction curveBounds(curves) {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const c of curves) {\n minX = Math.min(minX, c.x0, c.cx0, c.cx1, c.x1);\n maxX = Math.max(maxX, c.x0, c.cx0, c.cx1, c.x1);\n minY = Math.min(minY, c.y0, c.cy0, c.cy1, c.y1);\n maxY = Math.max(maxY, c.y0, c.cy0, c.cy1, c.y1);\n }\n return { minX, minY, maxX, maxY };\n}\nfunction subCurve(c, t0, t1) {\n const p0 = curvePointAt(c, t0);\n const p1 = curvePointAt(c, t1);\n const dt = (t1 - t0) / 3;\n const d0 = curveTangentAt(c, t0);\n const d1 = curveTangentAt(c, t1);\n return {\n x0: p0.x,\n y0: p0.y,\n cx0: p0.x + d0.x * dt,\n cy0: p0.y + d0.y * dt,\n cx1: p1.x - d1.x * dt,\n cy1: p1.y - d1.y * dt,\n x1: p1.x,\n y1: p1.y\n };\n}\nfunction curveTangentAt(c, t) {\n const u = 1 - t;\n const a = 3 * u * u;\n const b = 6 * u * t;\n const d = 3 * t * t;\n return {\n x: a * (c.cx0 - c.x0) + b * (c.cx1 - c.cx0) + d * (c.x1 - c.cx1),\n y: a * (c.cy0 - c.y0) + b * (c.cy1 - c.cy0) + d * (c.y1 - c.cy1)\n };\n}\nfunction dashCurves(curves, dashWorld) {\n const lengths = curves.map(\n (c) => Math.hypot(c.cx0 - c.x0, c.cy0 - c.y0) + Math.hypot(c.cx1 - c.cx0, c.cy1 - c.cy0) + Math.hypot(c.x1 - c.cx1, c.y1 - c.cy1)\n );\n const total = lengths.reduce((a, b) => a + b, 0);\n const spans = Math.max(3, Math.round(total / dashWorld) | 1);\n const out = [];\n for (let i = 0; i < spans; i += 2) {\n const from = i / spans * total;\n const to = (i + 1) / spans * total;\n const dash = [];\n let start = 0;\n curves.forEach((c, k) => {\n const length = lengths[k];\n const end = start + length;\n if (length > 0 && end > from && start < to) {\n dash.push(\n subCurve(\n c,\n Math.max(0, (from - start) / length),\n Math.min(1, (to - start) / length)\n )\n );\n }\n start = end;\n });\n if (dash.length) {\n out.push(dash);\n }\n }\n return out;\n}\nfunction translateCurves(curves, dx, dy) {\n const out = new Array(curves.length);\n for (let i = 0; i < curves.length; i++) {\n const c = curves[i];\n out[i] = {\n x0: c.x0 + dx,\n y0: c.y0 + dy,\n cx0: c.cx0 + dx,\n cy0: c.cy0 + dy,\n cx1: c.cx1 + dx,\n cy1: c.cy1 + dy,\n x1: c.x1 + dx,\n y1: c.y1 + dy\n };\n }\n return out;\n}\nfunction attachment(segments, side) {\n const last = segments.length - 1;\n return side === \"end\" ? { at: segments[last], inward: segments[last - 1] } : { at: segments[0], inward: segments[1] };\n}\nvar TANGENT_SPAN_FACTOR = 0.5;\nvar MAX_TANGENT = 80;\nfunction ownStrand(id) {\n return id.endsWith(\"-\") ? \"-\" : \"+\";\n}\nfunction strandSides(edge) {\n const own = (id, strand) => (strand ?? ownStrand(id)) === ownStrand(id);\n return {\n from: own(edge.from, edge.fromStrand) ? \"end\" : \"start\",\n to: own(edge.to, edge.toStrand) ? \"start\" : \"end\"\n };\n}\nfunction spanOf(segments) {\n let min = Infinity;\n let max = -Infinity;\n for (const s of segments) {\n min = Math.min(min, s.x);\n max = Math.max(max, s.x);\n }\n return { min, max };\n}\nfunction distanceToSpan(x, span) {\n return Math.max(0, span.min - x, x - span.max);\n}\nfunction facingSide(segments, other, tieBreak) {\n const startGap = distanceToSpan(segments[0].x, other);\n const endGap = distanceToSpan(segments[segments.length - 1].x, other);\n return startGap === endGap ? tieBreak : startGap < endGap ? \"start\" : \"end\";\n}\nfunction facingSides(fromSegments, toSegments) {\n return {\n from: facingSide(fromSegments, spanOf(toSegments), \"end\"),\n to: facingSide(toSegments, spanOf(fromSegments), \"start\")\n };\n}\nvar laidSides = /* @__PURE__ */ new WeakMap();\nfunction heldFacingSides(fromSegments, toSegments) {\n let byTo = laidSides.get(fromSegments);\n if (!byTo) {\n byTo = /* @__PURE__ */ new WeakMap();\n laidSides.set(fromSegments, byTo);\n }\n let sides = byTo.get(toSegments);\n if (!sides) {\n sides = facingSides(fromSegments, toSegments);\n byTo.set(toSegments, sides);\n }\n return sides;\n}\nvar APEX_FRACTION = 0.75;\nvar BOW_CLEARANCE = 1.15;\nvar ALONG_FRACTION = 0.35;\nvar MAX_ROW_BOW_PX = 3 * ROW_HEIGHT_PX;\nfunction bowAround(p1x, p1y, p2x, p2y, toward, maxBow) {\n const chord = Math.hypot(p2x - p1x, p2y - p1y);\n const ux = chord === 0 ? 1 : (p2x - p1x) / chord;\n const uy = chord === 0 ? 0 : (p2y - p1y) / chord;\n let reach = 0;\n let minAlong = Infinity;\n let maxAlong = -Infinity;\n for (const p of toward) {\n const dx = p.x - p1x;\n const dy = p.y - p1y;\n const perp = dx * -uy + dy * ux;\n if (Math.abs(perp) > Math.abs(reach)) {\n reach = perp;\n }\n const along = dx * ux + dy * uy;\n minAlong = Math.min(minAlong, along);\n maxAlong = Math.max(maxAlong, along);\n }\n const span = toward.length ? maxAlong - minAlong : 0;\n const uncapped = Math.max(\n Math.abs(reach) * BOW_CLEARANCE / APEX_FRACTION,\n span * ALONG_FRACTION\n );\n const size = maxBow === void 0 ? uncapped : Math.min(uncapped, maxBow);\n return reach < 0 ? -size : size;\n}\nfunction yToXOf({ scaleX, scaleY }) {\n return scaleY / scaleX;\n}\nvar PATH_RIBBON_SPACING = 3;\nfunction drawnDirection(a, b, yToX) {\n const dx = b.x - a.x;\n const dy = (b.y - a.y) * yToX;\n const len = Math.hypot(dx, dy);\n return len === 0 ? void 0 : { x: dx / len, y: dy / len };\n}\nfunction pathRibbonOffsets(fromSegments, toSegments, count, axis, spacing = PATH_RIBBON_SPACING) {\n const yToX = yToXOf(axis);\n const dir = drawnDirection(\n fromSegments[fromSegments.length - 1],\n toSegments[0],\n yToX\n ) ?? drawnDirection(fromSegments[0], fromSegments.at(-1), yToX) ?? drawnDirection(toSegments[0], toSegments.at(-1), yToX) ?? { x: 1, y: 0 };\n const offsets = [];\n for (let i = 0; i < count; i++) {\n const distance = (i - (count - 1) / 2) * spacing;\n offsets.push({ x: -dir.y * distance, y: dir.x * distance / yToX });\n }\n return offsets;\n}\nfunction scaleYOf(points, yToX) {\n return points.map((p) => ({ x: p.x, y: p.y * yToX }));\n}\nfunction unscaleYOf(curves, yToX) {\n for (const c of curves) {\n c.y0 /= yToX;\n c.cy0 /= yToX;\n c.cy1 /= yToX;\n c.y1 /= yToX;\n }\n return curves;\n}\nvar SELF_LOOP_MIN_PX = 12;\nvar SELF_LOOP_MAX_PX = 40;\nfunction selfLoopReach(segments, scale) {\n let length = 0;\n for (let i = 1; i < segments.length; i++) {\n length += Math.hypot(\n segments[i].x - segments[i - 1].x,\n segments[i].y - segments[i - 1].y\n );\n }\n const nodePx = length * scale;\n const reachPx = Math.min(\n SELF_LOOP_MAX_PX,\n Math.max(SELF_LOOP_MIN_PX, nodePx / 2)\n );\n return reachPx / Math.max(scale, Number.EPSILON);\n}\nfunction selfLinkOf(edge) {\n if (edge.from !== edge.to) {\n return false;\n }\n return edge.fromStrand && edge.toStrand && edge.fromStrand !== edge.toStrand ? edge.fromStrand === \"+\" ? \"end\" : \"start\" : true;\n}\nfunction edgeJoinOf(edge, stranded = false) {\n const self = selfLinkOf(edge);\n if (!stranded) {\n return self;\n }\n const sides = strandSides(edge);\n return self === false ? sides : sides.from === sides.to ? sides.from : true;\n}\nfunction hairpinCurves(attach, reach, offsetX, offsetY) {\n const { at, inward } = attach;\n const dx = inward ? at.x - inward.x : 1;\n const dy = inward ? at.y - inward.y : 0;\n const len = Math.hypot(dx, dy) || 1;\n const ux = dx / len;\n const uy = dy / len;\n const px = at.x + offsetX;\n const py = at.y + offsetY;\n const nearX = px + ux * reach / 3;\n const nearY = py + uy * reach / 3;\n const apexX = px + ux * reach;\n const apexY = py + uy * reach;\n const sideX = -uy * reach / 2;\n const sideY = ux * reach / 2;\n return [\n {\n x0: px,\n y0: py,\n cx0: nearX,\n cy0: nearY,\n cx1: apexX + sideX,\n cy1: apexY + sideY,\n x1: apexX,\n y1: apexY\n },\n {\n x0: apexX,\n y0: apexY,\n cx0: apexX - sideX,\n cy0: apexY - sideY,\n cx1: nearX,\n cy1: nearY,\n x1: px,\n y1: py\n }\n ];\n}\nfunction computeEdgeCurves(fromSegments, toSegments, join, offsetX, offsetY, axis, bypassed = [], maxBowIn) {\n const scale = axis.scaleX;\n const yToX = yToXOf(axis);\n const maxBow = maxBowIn ?? (axis.pixelRows ? MAX_ROW_BOW_PX : void 0);\n if (join === false) {\n join = heldFacingSides(fromSegments, toSegments);\n }\n if (yToX !== 1) {\n return unscaleYOf(\n computeEdgeCurves(\n scaleYOf(fromSegments, yToX),\n scaleYOf(toSegments, yToX),\n join,\n offsetX,\n offsetY * yToX,\n { scaleX: scale, scaleY: scale },\n scaleYOf(bypassed, yToX),\n // the cap is a y measure and the body works in x units, so it converts\n // with everything else that crosses this boundary\n maxBow === void 0 ? void 0 : maxBow * yToX\n ),\n yToX\n );\n }\n if (typeof join === \"string\") {\n return hairpinCurves(\n attachment(fromSegments, join),\n selfLoopReach(fromSegments, scale),\n offsetX,\n offsetY\n );\n }\n const loop = join === true;\n const sides = join === true ? { from: \"end\", to: \"start\" } : join;\n const fromAttach = attachment(fromSegments, sides.from);\n const toAttach = attachment(toSegments, sides.to);\n const fromEnd = fromAttach.at;\n const toStart = toAttach.at;\n const p1x = fromEnd.x + offsetX;\n const p1y = fromEnd.y + offsetY;\n const p2x = toStart.x + offsetX;\n const p2y = toStart.y + offsetY;\n if (loop) {\n let segDirX = 1;\n let segDirY = 0;\n if (fromAttach.inward) {\n const dx = fromEnd.x - fromAttach.inward.x;\n const dy = fromEnd.y - fromAttach.inward.y;\n const len = Math.hypot(dx, dy);\n if (len > 0) {\n segDirX = dx / len;\n segDirY = dy / len;\n }\n }\n const ext = selfLoopReach(fromSegments, scale);\n const perpX = -segDirY;\n const perpY = segDirX;\n const midX = (fromEnd.x + toStart.x) / 2 + offsetX + perpX * ext;\n const midY = (fromEnd.y + toStart.y) / 2 + offsetY + perpY * ext;\n const cp1x = p1x + segDirX * ext;\n const cp1y = p1y + segDirY * ext;\n const cp2x = p2x - segDirX * ext;\n const cp2y = p2y - segDirY * ext;\n return [\n {\n x0: p1x,\n y0: p1y,\n cx0: cp1x,\n cy0: cp1y,\n cx1: cp1x + perpX * ext,\n cy1: cp1y + perpY * ext,\n x1: midX,\n y1: midY\n },\n {\n x0: midX,\n y0: midY,\n cx0: cp2x + perpX * ext,\n cy0: cp2y + perpY * ext,\n cx1: cp2x,\n cy1: cp2y,\n x1: p2x,\n y1: p2y\n }\n ];\n } else {\n const fromPrev = fromAttach.inward ?? {\n x: fromEnd.x - (toStart.x - fromEnd.x),\n y: fromEnd.y - (toStart.y - fromEnd.y)\n };\n const toNext = toAttach.inward ?? {\n x: toStart.x - (fromEnd.x - toStart.x),\n y: toStart.y - (fromEnd.y - toStart.y)\n };\n const dist = Math.hypot(p2x - p1x, p2y - p1y);\n const tangentProj = (prev, at, towardX, towardY) => {\n const dx = at.x - prev.x;\n const dy = at.y - prev.y;\n const len = Math.hypot(dx, dy);\n const along = len === 0 ? 0 : (towardX * dx + towardY * dy) / len;\n return Math.max(\n 0,\n Math.min(dist * TANGENT_SPAN_FACTOR, MAX_TANGENT, along * 0.5)\n );\n };\n const towardToX = toStart.x - fromEnd.x;\n const towardToY = toStart.y - fromEnd.y;\n const [cx1, cy1] = projectLine(\n fromPrev.x,\n fromPrev.y,\n fromEnd.x,\n fromEnd.y,\n tangentProj(fromPrev, fromEnd, towardToX, towardToY)\n );\n const [cx2, cy2] = projectLine(\n toNext.x,\n toNext.y,\n toStart.x,\n toStart.y,\n tangentProj(toNext, toStart, -towardToX, -towardToY)\n );\n const bulge = bypassed.length ? bowAround(p1x, p1y, p2x, p2y, bypassed, maxBow) : 0;\n const chordLen = dist === 0 ? 1 : dist;\n const ux = (p2x - p1x) / chordLen;\n const uy = (p2y - p1y) / chordLen;\n const bulgeX = -uy * bulge;\n const bulgeY = ux * bulge;\n const spreadX = ux * Math.abs(bulge);\n const spreadY = uy * Math.abs(bulge);\n return [\n {\n x0: p1x,\n y0: p1y,\n cx0: cx1 + offsetX + bulgeX - spreadX,\n cy0: cy1 + offsetY + bulgeY - spreadY,\n cx1: cx2 + offsetX + bulgeX + spreadX,\n cy1: cy2 + offsetY + bulgeY + spreadY,\n x1: p2x,\n y1: p2y\n }\n ];\n }\n}\nfunction nearerEnd(segments, to) {\n const start = segments[0];\n const end = segments.at(-1);\n return Math.hypot(start.x - to.x, start.y - to.y) < Math.hypot(end.x - to.x, end.y - to.y) ? \"start\" : \"end\";\n}\nfunction routedEdgeCurves(fromSegments, toSegments, route, sides) {\n const fromAttach = attachment(\n fromSegments,\n sides?.from ?? nearerEnd(fromSegments, route[0])\n );\n const toAttach = attachment(\n toSegments,\n sides?.to ?? nearerEnd(toSegments, route.at(-1))\n );\n const points = [fromAttach.at, ...route, toAttach.at];\n const tangent = (i) => {\n const p = points[i];\n const span = (q) => Math.hypot(q.x - p.x, q.y - p.y);\n const along = (inward, next) => {\n const len = inward ? span(inward) : 0;\n const reach = span(next);\n return len === 0 ? { x: next.x - p.x, y: next.y - p.y } : {\n x: (p.x - inward.x) / len * reach,\n y: (p.y - inward.y) / len * reach\n };\n };\n if (i === 0) {\n return along(fromAttach.inward, points[1]);\n }\n if (i === points.length - 1) {\n const out = along(toAttach.inward, points[i - 1]);\n return { x: -out.x, y: -out.y };\n }\n return {\n x: (points[i + 1].x - points[i - 1].x) / 2,\n y: (points[i + 1].y - points[i - 1].y) / 2\n };\n };\n const curves = [];\n for (let i = 0; i < points.length - 1; i++) {\n const a = points[i];\n const b = points[i + 1];\n const ta = tangent(i);\n const tb = tangent(i + 1);\n curves.push({\n x0: a.x,\n y0: a.y,\n cx0: a.x + ta.x / 3,\n cy0: a.y + ta.y / 3,\n cx1: b.x - tb.x / 3,\n cy1: b.y - tb.y / 3,\n x1: b.x,\n y1: b.y\n });\n }\n return curves;\n}\n\nexport {\n svgPath,\n projectLine,\n curvePointAt,\n curveMidpoint,\n curveBounds,\n dashCurves,\n translateCurves,\n ownStrand,\n strandSides,\n bowAround,\n yToXOf,\n PATH_RIBBON_SPACING,\n pathRibbonOffsets,\n selfLinkOf,\n edgeJoinOf,\n computeEdgeCurves,\n routedEdgeCurves\n};\n", "import {\n ownStrand,\n strandSides\n} from \"./chunk-2CVHXFK7.js\";\nimport {\n isBackbone\n} from \"./chunk-FYQWPEEY.js\";\n\n// src/layout/mergeRuns.ts\nfunction flip(strand) {\n return strand === \"+\" ? \"-\" : \"+\";\n}\nfunction mergeRuns(graph, alone = /* @__PURE__ */ new Set()) {\n const sides = graph.edges.map(strandSides);\n const at = /* @__PURE__ */ new Map();\n const attach = (id, side, ei) => {\n const key = `${id}|${side}`;\n const list = at.get(key);\n if (list) {\n list.push(ei);\n } else {\n at.set(key, [ei]);\n }\n };\n graph.edges.forEach((edge, ei) => {\n attach(edge.from, sides[ei].from, ei);\n attach(edge.to, sides[ei].to, ei);\n });\n const joinAfter = (a) => {\n const out = at.get(`${a}|end`);\n if (out?.length !== 1) {\n return void 0;\n }\n const ei = out[0];\n const edge = graph.edges[ei];\n return edge.from === a && edge.to !== a && !alone.has(a) && !alone.has(edge.to) && sides[ei].from === \"end\" && sides[ei].to === \"start\" && at.get(`${edge.to}|start`)?.length === 1 ? ei : void 0;\n };\n const joined = /* @__PURE__ */ new Set();\n const runOf = /* @__PURE__ */ new Map();\n const runs = /* @__PURE__ */ new Map();\n for (const node of graph.nodes) {\n const into = at.get(`${node.id}|start`);\n const pred = into?.length === 1 ? graph.edges[into[0]].from : void 0;\n if (runOf.has(node.id) || pred !== void 0 && joinAfter(pred) === into[0]) {\n continue;\n }\n const run = [node.id];\n for (; ; ) {\n const ei = joinAfter(run.at(-1));\n const next = ei === void 0 ? void 0 : graph.edges[ei].to;\n if (next === void 0 || runOf.has(next)) {\n break;\n }\n joined.add(ei);\n run.push(next);\n }\n for (const id of run) {\n runOf.set(id, node.id);\n }\n if (run.length > 1) {\n runs.set(node.id, run);\n }\n }\n for (const node of graph.nodes) {\n if (!runOf.has(node.id)) {\n runOf.set(node.id, node.id);\n }\n }\n const byId = new Map(graph.nodes.map((n) => [n.id, n]));\n const nodes = [];\n for (const node of graph.nodes) {\n if (runOf.get(node.id) !== node.id) {\n continue;\n }\n const run = runs.get(node.id);\n if (!run) {\n nodes.push(node);\n continue;\n }\n const members = run.map((id) => byId.get(id));\n const backbone = members.filter(isBackbone);\n const first = backbone.length ? backbone.reduce((a, b) => a.stable.start <= b.stable.start ? a : b) : members[0];\n nodes.push({\n id: node.id,\n name: node.name,\n length: members.reduce((sum, n) => sum + n.length, 0),\n depth: node.depth,\n stable: first.stable\n });\n }\n const seen = /* @__PURE__ */ new Set();\n const edges = [];\n graph.edges.forEach((edge, ei) => {\n const from = runOf.get(edge.from);\n const to = runOf.get(edge.to);\n const side = sides[ei];\n const key = `${from}|${side.from}>${to}|${side.to}`;\n if (joined.has(ei) || seen.has(key)) {\n return;\n }\n seen.add(key);\n edges.push({\n from,\n to,\n ...side.from === \"start\" ? { fromStrand: flip(ownStrand(from)) } : {},\n ...side.to === \"end\" ? { toStrand: flip(ownStrand(to)) } : {}\n });\n });\n return {\n graph: { ...graph, nodes, edges, paths: void 0, pathVisits: void 0 },\n runs\n };\n}\nfunction splitRuns(positions, runs, weightOf) {\n const out = { ...positions };\n for (const [id, members] of runs) {\n const line = positions[id];\n if (!line?.length) {\n continue;\n }\n delete out[id];\n const arc = arcPrefix(line);\n const total = arc.at(-1);\n const weights = members.map((m) => Math.max(weightOf(m), 0));\n const weightSum = weights.reduce((a, b) => a + b, 0) || members.length;\n let from = 0;\n members.forEach((member, k) => {\n const share = weightSum ? weights[k] / weightSum * total : total / members.length;\n const to = k === members.length - 1 ? total : from + share;\n out[member] = slice(line, arc, from, to);\n from = to;\n });\n }\n return out;\n}\nfunction polylineSlice(line, from, to) {\n if (line.length === 0) {\n return [];\n }\n const arc = arcPrefix(line);\n const total = arc.at(-1);\n return slice(line, arc, from * total, to * total);\n}\nfunction polylineMidpoint(line) {\n const arc = arcPrefix(line);\n return pointAt(line, arc, arc.at(-1) / 2);\n}\nfunction arcPrefix(line) {\n const arc = [0];\n for (let i = 1; i < line.length; i++) {\n arc.push(\n arc[i - 1] + Math.hypot(line[i].x - line[i - 1].x, line[i].y - line[i - 1].y)\n );\n }\n return arc;\n}\nfunction pointAt(line, arc, s) {\n if (s <= 0) {\n return { ...line[0] };\n }\n let i = 1;\n while (i < arc.length && arc[i] < s) {\n i++;\n }\n if (i >= arc.length) {\n return { ...line.at(-1) };\n }\n const span = arc[i] - arc[i - 1];\n const t = span > 0 ? (s - arc[i - 1]) / span : 0;\n const a = line[i - 1];\n const b = line[i];\n return { x: a.x + (b.x - a.x) * t, y: a.y + (b.y - a.y) * t };\n}\nfunction slice(line, arc, from, to) {\n const points = [pointAt(line, arc, from)];\n for (let i = 0; i < line.length; i++) {\n if (arc[i] > from && arc[i] < to) {\n points.push({ ...line[i] });\n }\n }\n points.push(pointAt(line, arc, to));\n return points;\n}\n\nexport {\n mergeRuns,\n splitRuns,\n polylineSlice,\n polylineMidpoint\n};\n", "import {\n computeEdgeCurves,\n edgeJoinOf,\n routedEdgeCurves,\n strandSides\n} from \"./chunk-2CVHXFK7.js\";\nimport {\n firstNodeAtOrAfter,\n isBackbone\n} from \"./chunk-FYQWPEEY.js\";\n\n// src/deletionEdges.ts\nvar MIN_DELETION_BP = 1;\nfunction bypassedPoints(nodePositions, bypassed) {\n return bypassed.flatMap((id) => nodePositions[id] ?? []);\n}\nfunction deletionArcCurves(nodePositions, deletion, axis, route, stranded = false) {\n const from = nodePositions[deletion.from];\n const to = nodePositions[deletion.to];\n if (!from?.length || !to?.length) {\n return void 0;\n }\n return route ? routedEdgeCurves(\n from,\n to,\n route,\n stranded ? strandSides(deletion) : void 0\n ) : computeEdgeCurves(\n from,\n to,\n edgeJoinOf(deletion, stranded),\n 0,\n 0,\n axis,\n bypassedPoints(nodePositions, deletion.bypassed)\n );\n}\nfunction backboneBySequence(graph) {\n const bySequence = /* @__PURE__ */ new Map();\n for (const node of graph.nodes) {\n if (isBackbone(node)) {\n const list = bySequence.get(node.stable.refName);\n if (list) {\n list.push(node);\n } else {\n bySequence.set(node.stable.refName, [node]);\n }\n }\n }\n for (const list of bySequence.values()) {\n list.sort((a, b) => a.stable.start - b.stable.start);\n }\n return bySequence;\n}\nfunction bypassedNodes(nodes, start, end) {\n const bypassed = [];\n if (nodes) {\n for (let i = firstNodeAtOrAfter(nodes, start); i < nodes.length; i++) {\n const node = nodes[i];\n if (node.stable.start >= end) {\n break;\n }\n if (node.stable.start + node.length <= end) {\n bypassed.push(node.id);\n }\n }\n }\n return bypassed;\n}\nfunction skipsBetween(edge, from, to, forwards) {\n const { fromStrand, toStrand } = edge;\n if (fromStrand === void 0 || toStrand === void 0) {\n return true;\n }\n const leavesRight = fromStrand === (from.stable.strand ?? \"+\");\n const arrivesLeft = toStrand === (to.stable.strand ?? \"+\");\n return forwards ? leavesRight && arrivesLeft : !leavesRight && !arrivesLeft;\n}\nfunction deletionEdges(graph) {\n const byId = new Map(graph.nodes.map((n) => [n.id, n]));\n const backbone = backboneBySequence(graph);\n const found = [];\n for (let edgeIndex = 0; edgeIndex < graph.edges.length; edgeIndex++) {\n const edge = graph.edges[edgeIndex];\n const from = byId.get(edge.from);\n const to = byId.get(edge.to);\n if (from !== void 0 && to !== void 0 && isBackbone(from) && isBackbone(to) && from.stable.refName === to.stable.refName) {\n const forwards = from.stable.start <= to.stable.start;\n const [left, right] = forwards ? [from, to] : [to, from];\n const start = left.stable.start + left.length;\n const end = right.stable.start;\n const bp = end - start;\n if (bp >= MIN_DELETION_BP && skipsBetween(edge, from, to, forwards)) {\n const refName = left.stable.refName;\n found.push({\n edgeIndex,\n from: edge.from,\n to: edge.to,\n ...edge.fromStrand ? { fromStrand: edge.fromStrand } : {},\n ...edge.toStrand ? { toStrand: edge.toStrand } : {},\n refName,\n start,\n end,\n bp,\n bypassed: bypassedNodes(backbone.get(refName), start, end)\n });\n }\n }\n }\n return found;\n}\nfunction closableDeletions(graph, deletions) {\n const parent = /* @__PURE__ */ new Map();\n const root = (id) => {\n let r = id;\n while (parent.has(r)) {\n r = parent.get(r);\n }\n if (r !== id) {\n parent.set(id, r);\n }\n return r;\n };\n const join = (a, b) => {\n const [ra, rb] = [root(a), root(b)];\n if (ra !== rb) {\n parent.set(ra, rb);\n }\n return ra !== rb;\n };\n const candidates = new Set(deletions.map((d) => d.edgeIndex));\n graph.edges.forEach((e, ei) => {\n if (!candidates.has(ei)) {\n join(e.from, e.to);\n }\n });\n return new Set(\n deletions.filter((d) => !join(d.from, d.to)).map((d) => d.edgeIndex)\n );\n}\nvar drawings = /* @__PURE__ */ new WeakMap();\nfunction deletionDrawing(graph, deletions, show = true) {\n let byShow = drawings.get(deletions);\n if (!byShow) {\n byShow = /* @__PURE__ */ new Map();\n drawings.set(deletions, byShow);\n }\n let drawing = byShow.get(show);\n if (!drawing) {\n const hidden = show ? /* @__PURE__ */ new Set() : closableDeletions(graph, deletions);\n drawing = {\n shown: deletions.filter((d) => !hidden.has(d.edgeIndex)),\n bypassed: new Map(deletions.map((d) => [d.edgeIndex, d.bypassed])),\n hidden\n };\n byShow.set(show, drawing);\n }\n return drawing;\n}\n\nexport {\n bypassedPoints,\n deletionArcCurves,\n deletionEdges,\n closableDeletions,\n deletionDrawing\n};\n", "import {\n occupancy\n} from \"./chunk-AB35TJST.js\";\nimport {\n polylineMidpoint\n} from \"./chunk-TAMCZHLW.js\";\nimport {\n deletionArcCurves\n} from \"./chunk-N6FECAXP.js\";\nimport {\n curveBounds,\n curveMidpoint\n} from \"./chunk-2CVHXFK7.js\";\n\n// src/graphLabels.ts\nvar MIN_DELETION_LABEL_PX = 26;\nvar PX_PER_NODE_LABEL = 4e4;\nvar MIN_NODE_LABELS = 8;\nvar LEADER_GAP_PX = 8;\nvar LABEL_CHAR_PX = 5.7;\nvar LABEL_PAD_PX = 6;\nvar LABEL_HEIGHT_PX = 13;\nvar LABEL_GAP_PX = 3;\nvar MAX_LABEL_OVERHANG = 2;\nfunction labelHalfWidth(text) {\n return (text.length * LABEL_CHAR_PX + LABEL_PAD_PX + LABEL_GAP_PX) / 2;\n}\nvar LABEL_HALF_HEIGHT = (LABEL_HEIGHT_PX + LABEL_GAP_PX) / 2;\nvar MIN_LABEL_HALF_WIDTH = labelHalfWidth(\"1 bp\");\nfunction boxAt(halfW, x, y) {\n return {\n x0: x - halfW,\n x1: x + halfW,\n y0: y - LABEL_HALF_HEIGHT,\n y1: y + LABEL_HALF_HEIGHT\n };\n}\nfunction rowLabelBox(text, screenY) {\n return {\n x0: 6,\n x1: 6 + text.length * 6.2 + 8 + LABEL_GAP_PX,\n y0: screenY - 8 - LABEL_GAP_PX / 2,\n y1: screenY + 8 + LABEL_GAP_PX / 2\n };\n}\nfunction clamp(v, lo, hi) {\n return hi < lo ? v : Math.min(Math.max(v, lo), hi);\n}\nfunction groupDigits(n) {\n return String(n).replace(/\\B(?=(\\d{3})+$)/g, \",\");\n}\nfunction formatBp(bp) {\n if (bp >= 1e6) {\n return `${+(bp / 1e6).toFixed(1)} Mb`;\n }\n return bp >= 1e3 ? `${+(bp / 1e3).toFixed(1)} kb` : `${bp} bp`;\n}\nfunction deletionText(bp) {\n return `${formatBp(bp)} del`;\n}\nfunction arcOutward(curves, apex, scaleX, scaleY) {\n const first = curves[0];\n const last = curves[curves.length - 1];\n const dx = (apex.x - (first.x0 + last.x1) / 2) * scaleX;\n const dy = (apex.y - (first.y0 + last.y1) / 2) * scaleY;\n const len = Math.hypot(dx, dy);\n return len === 0 ? { x: 0, y: -1 } : { x: dx / len, y: dy / len };\n}\nfunction boxSupport(box, dir) {\n return Math.abs(dir.x) * (box.x1 - box.x0) / 2 + Math.abs(dir.y) * (box.y1 - box.y0) / 2;\n}\nfunction boxRayCrossing(box, dir) {\n const halfW = (box.x1 - box.x0) / 2;\n const halfH = (box.y1 - box.y0) / 2;\n return Math.min(\n dir.x === 0 ? Infinity : halfW / Math.abs(dir.x),\n dir.y === 0 ? Infinity : halfH / Math.abs(dir.y)\n );\n}\nfunction drawnLength(segments, scaleX, scaleY) {\n let total = 0;\n for (let i = 1; i < segments.length; i++) {\n const a = segments[i - 1];\n const b = segments[i];\n total += Math.hypot((b.x - a.x) * scaleX, (b.y - a.y) * scaleY);\n }\n return total;\n}\nfunction runBounds(nodeIds, nodePositions) {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const id of nodeIds) {\n for (const p of nodePositions[id] ?? []) {\n minX = Math.min(minX, p.x);\n maxX = Math.max(maxX, p.x);\n minY = Math.min(minY, p.y);\n maxY = Math.max(maxY, p.y);\n }\n }\n return minX === Infinity ? void 0 : { minX, minY, maxX, maxY };\n}\nvar nodeOrderCache = /* @__PURE__ */ new WeakMap();\nfunction labelOrder(nodePositions, nodeLengths) {\n const cached = nodeOrderCache.get(nodePositions);\n if (cached?.nodeLengths === nodeLengths) {\n return cached.order;\n }\n const order = Object.entries(nodePositions).filter(([id, segments]) => segments.length > 0 && nodeLengths.has(id)).sort(([a], [b]) => nodeLengths.get(b) - nodeLengths.get(a));\n nodeOrderCache.set(nodePositions, { nodeLengths, order });\n return order;\n}\nvar arcCache = /* @__PURE__ */ new WeakMap();\nfunction arcPlacements(nodePositions, deletions, axis, version, routes, stranded) {\n const { scaleX, scaleY } = axis;\n const cached = arcCache.get(nodePositions);\n if (cached?.deletions === deletions && cached.routes === routes && cached.stranded === stranded && cached.scaleX === scaleX && cached.scaleY === scaleY && cached.version === version) {\n return cached.arcs;\n }\n const arcs = [];\n for (const deletion of [...deletions].sort((a, b) => b.bp - a.bp)) {\n const curves = deletionArcCurves(\n nodePositions,\n deletion,\n axis,\n routes?.[deletion.edgeIndex],\n stranded\n );\n const apex = curves ? curveMidpoint(curves) : void 0;\n if (curves && apex) {\n const { minX, minY, maxX, maxY } = curveBounds(curves);\n arcs.push({\n deletion,\n curves,\n apex,\n // in screen px, so the two axes' units cannot be added by accident\n extent: Math.max((maxX - minX) * scaleX, (maxY - minY) * scaleY)\n });\n }\n }\n arcCache.set(nodePositions, {\n deletions,\n routes,\n stranded,\n scaleX,\n scaleY,\n version,\n arcs\n });\n return arcs;\n}\nfunction sizeLabelCandidates({\n nodePositions,\n nodeLengths,\n deletions,\n deletionRoutes,\n stranded = false,\n alleleDeletions,\n axis,\n translateX,\n translateY,\n width,\n height,\n version = 0\n}) {\n const { scaleX, scaleY } = axis;\n const deletionCandidates = [];\n const nodeCandidates = [];\n for (const { deletion, curves, apex, extent } of arcPlacements(\n nodePositions,\n deletions,\n axis,\n version,\n deletionRoutes,\n stranded\n )) {\n if (extent >= MIN_DELETION_LABEL_PX) {\n const text = deletionText(deletion.bp);\n const halfW = labelHalfWidth(text);\n const box = boxAt(halfW, 0, 0);\n const arcX = apex.x * scaleX + translateX;\n const arcY = apex.y * scaleY + translateY;\n const fits = extent >= halfW * 2 / MAX_LABEL_OVERHANG;\n const bow = arcOutward(curves, apex, scaleX, scaleY);\n const offset = boxSupport(box, bow) + LEADER_GAP_PX;\n const x = fits ? arcX : clamp(arcX + bow.x * offset, halfW, width - halfW);\n const y = fits ? arcY : clamp(\n arcY + bow.y * offset,\n LABEL_HALF_HEIGHT,\n height - LABEL_HALF_HEIGHT\n );\n const away = Math.hypot(x - arcX, y - arcY);\n let leader;\n if (away > 0) {\n const dir = { x: (x - arcX) / away, y: (y - arcY) / away };\n const crossing = boxRayCrossing(box, dir);\n leader = {\n arcX,\n arcY,\n labelX: x - dir.x * crossing,\n labelY: y - dir.y * crossing\n };\n }\n deletionCandidates.push({\n label: {\n key: `del:${deletion.edgeIndex}`,\n text,\n x,\n y,\n kind: \"deletion\",\n leader\n },\n box: boxAt(halfW, x, y)\n });\n }\n }\n const labelledByDeletion = /* @__PURE__ */ new Set();\n const alleleRuns = [...alleleDeletions ?? []].sort((a, b) => b.bp - a.bp);\n for (const run of alleleRuns) {\n const drawn = runBounds(run.nodeIds, nodePositions);\n if (!drawn) {\n continue;\n }\n const shownLeft = Math.max(drawn.minX * scaleX + translateX, 0);\n const shownRight = Math.min(drawn.maxX * scaleX + translateX, width);\n const shownTop = Math.max(drawn.minY * scaleY + translateY, 0);\n const shownBottom = Math.min(drawn.maxY * scaleY + translateY, height);\n if (shownRight < shownLeft || shownBottom < shownTop) {\n continue;\n }\n const extent = Math.max(shownRight - shownLeft, shownBottom - shownTop);\n const text = deletionText(run.bp);\n const halfW = labelHalfWidth(text);\n if (extent >= halfW * 2 / MAX_LABEL_OVERHANG) {\n for (const id of run.nodeIds) {\n labelledByDeletion.add(id);\n }\n const x = clamp((shownLeft + shownRight) / 2, halfW, width - halfW);\n const y = clamp(\n (shownTop + shownBottom) / 2,\n LABEL_HALF_HEIGHT,\n height - LABEL_HALF_HEIGHT\n );\n deletionCandidates.push({\n label: {\n key: `alleledel:${run.nodeIds.join(\",\")}`,\n text,\n x,\n y,\n kind: \"deletion\"\n },\n box: boxAt(halfW, x, y)\n });\n }\n }\n for (const [id, segments] of labelOrder(nodePositions, nodeLengths)) {\n if (labelledByDeletion.has(id)) {\n continue;\n }\n const { x, y } = polylineMidpoint(segments);\n const screenY = y * scaleY + translateY;\n if (screenY + LABEL_HALF_HEIGHT <= 0 || screenY - LABEL_HALF_HEIGHT >= height) {\n continue;\n }\n const drawn = drawnLength(segments, scaleX, scaleY);\n if (drawn < MIN_LABEL_HALF_WIDTH * 2 / MAX_LABEL_OVERHANG) {\n continue;\n }\n const text = formatBp(nodeLengths.get(id));\n const halfW = labelHalfWidth(text);\n if (drawn >= halfW * 2 / MAX_LABEL_OVERHANG) {\n const screenX = x * scaleX + translateX;\n nodeCandidates.push({\n label: {\n key: `node:${id}`,\n text,\n x: screenX,\n y: screenY,\n kind: \"node\"\n },\n box: boxAt(halfW, screenX, screenY)\n });\n }\n }\n return { deletions: deletionCandidates, nodes: nodeCandidates };\n}\nfunction nodeLabelBudget(width, height) {\n return Math.max(\n MIN_NODE_LABELS,\n Math.floor(width * height / PX_PER_NODE_LABEL)\n );\n}\nfunction placeSizeLabels(candidates, take, budget = Infinity) {\n const labels = [];\n for (const { label, box } of candidates) {\n if (labels.length >= budget) {\n break;\n }\n if (take(box)) {\n labels.push(label);\n }\n }\n return labels;\n}\nfunction graphLabels({\n reserved,\n ...args\n}) {\n const take = occupancy(args, reserved);\n const { deletions, nodes } = sizeLabelCandidates(args);\n return [\n ...placeSizeLabels(deletions, take),\n ...placeSizeLabels(nodes, take, nodeLabelBudget(args.width, args.height))\n ];\n}\n\nexport {\n rowLabelBox,\n groupDigits,\n formatBp,\n sizeLabelCandidates,\n nodeLabelBudget,\n placeSizeLabels,\n graphLabels\n};\n", "import {\n panSNSample\n} from \"./chunk-BPLIXMH7.js\";\nimport {\n REFERENCE_RANK\n} from \"./chunk-FYQWPEEY.js\";\n\n// src/pathAnchoring.ts\nvar RANGE_SUFFIX = /:(\\d+)-\\d+$/;\nfunction pathOrigin(pathName) {\n const match = RANGE_SUFFIX.exec(pathName);\n return match ? { name: pathName.slice(0, match.index), start: +match[1] } : { name: pathName, start: 0 };\n}\nfunction surveyPaths(paths, lengthOf) {\n const anchorPaths = [];\n const pathVisits = /* @__PURE__ */ new Map();\n for (const path of paths) {\n const sample = panSNSample(path.name);\n let pos = path.start;\n for (const step of path.steps) {\n const visit = {\n path: path.name,\n sample,\n start: pos,\n strand: step.strand\n };\n const existing = pathVisits.get(step.id);\n if (existing) {\n existing.push(visit);\n } else {\n pathVisits.set(step.id, [visit]);\n }\n pos += lengthOf(step.id);\n }\n anchorPaths.push({\n name: path.name,\n sample,\n start: path.start,\n length: pos - path.start\n });\n }\n return { anchorPaths, pathVisits };\n}\nfunction chooseReferencePath(anchorPaths, preferred) {\n const named = anchorPaths.find(\n (p) => p.sample === preferred || p.name === preferred\n );\n return named ?? anchorPaths[0];\n}\nvar OFF_REFERENCE_RANK = 1;\nfunction anchorNode(node, visits, reference) {\n let anchored = node;\n if (visits && visits.length > 0) {\n const anchor = visits.find((v) => v.path === reference) ?? visits[0];\n anchored = {\n ...node,\n stable: {\n refName: anchor.path,\n start: anchor.start,\n rank: anchor.path === reference ? REFERENCE_RANK : OFF_REFERENCE_RANK,\n strand: anchor.strand\n },\n samples: [...new Set(visits.map((v) => v.sample))].sort()\n };\n }\n return anchored;\n}\nfunction anchorFromPaths(graph, preferred) {\n const { anchorPaths, pathVisits } = graph;\n const reference = anchorPaths && pathVisits ? chooseReferencePath(anchorPaths, preferred) : void 0;\n return reference && pathVisits ? {\n ...graph,\n nodes: graph.nodes.map(\n (node) => anchorNode(node, pathVisits.get(node.name), reference.name)\n ),\n anchoredBy: \"paths\",\n referencePath: reference.name\n } : graph;\n}\nfunction anchorGraph(graph, preferred) {\n return graph.anchoredBy === \"tags\" ? graph : anchorFromPaths(graph, preferred);\n}\nfunction trimOrigins(graph, kept) {\n if (!graph.anchorPaths) {\n return void 0;\n }\n const lengthOf = new Map(graph.nodes.map((n) => [n.id, n.length]));\n const bp = (ids, end = ids.length) => {\n let sum = 0;\n for (let i = 0; i < end; i++) {\n sum += lengthOf.get(ids[i]) ?? 0;\n }\n return sum;\n };\n const byOrigin = /* @__PURE__ */ new Map();\n for (const path of graph.paths ?? []) {\n const origin = pathOrigin(path.name).name;\n byOrigin.set(origin, [...byOrigin.get(origin) ?? [], path]);\n }\n return graph.anchorPaths.map((o) => {\n const pieces = byOrigin.get(o.name);\n const path = pieces?.length === 1 ? pieces[0] : void 0;\n const stretch = path && kept.get(path.name);\n return path && stretch ? {\n ...o,\n start: o.start + bp(path.nodeIds, stretch.first),\n length: bp(stretch.nodeIds)\n } : o;\n });\n}\n\nexport {\n pathOrigin,\n surveyPaths,\n chooseReferencePath,\n anchorFromPaths,\n anchorGraph,\n trimOrigins\n};\n", "import {\n groupDigits\n} from \"./chunk-3ZZSX5HN.js\";\nimport {\n pathOrigin\n} from \"./chunk-ST2IBUAN.js\";\nimport {\n isGenericSample\n} from \"./chunk-BPLIXMH7.js\";\n\n// src/pathColors.ts\nfunction nameHue(name) {\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\n }\n return Math.abs(hash % 360);\n}\nfunction pathHueAt(index, count) {\n return index * 360 / count;\n}\nvar PATH_SATURATION = 0.7;\nvar PATH_LIGHTNESS = 0.5;\nvar MAX_PATH_COLORS = 16;\nfunction pathColorsLegible(pathCount) {\n return pathCount > 0 && pathCount <= MAX_PATH_COLORS;\n}\nfunction pathCssColor(index, count) {\n return `hsl(${pathHueAt(index, count)}, ${PATH_SATURATION * 100}%, ${PATH_LIGHTNESS * 100}%)`;\n}\nfunction pathGreyCssColor(index, count) {\n const lightness = count > 1 ? 25 + 45 * index / (count - 1) : 45;\n return `hsl(0, 0%, ${lightness}%)`;\n}\nfunction labelTiers(name) {\n const parts = pathOrigin(name).name.split(\"#\");\n const full = parts.join(\"#\");\n if (parts.length >= 3 && isGenericSample(parts[0])) {\n const contig = parts.slice(2).join(\"#\");\n return [contig, contig, full];\n }\n return [parts[0], parts.slice(0, 2).join(\"#\"), full];\n}\nfunction offsetTiers(name, tiers) {\n const { start } = pathOrigin(name);\n return tiers.map((t) => `${t} @${groupDigits(start)}`);\n}\nfunction pathLegend(paths, colors) {\n const firstOf = /* @__PURE__ */ new Map();\n paths.forEach((path, i) => {\n if (!firstOf.has(path.name)) {\n firstOf.set(path.name, i);\n }\n });\n const entries = [...firstOf].map(([name, i]) => ({ name, i }));\n const named = entries.map((e) => labelTiers(e.name));\n const candidates = [0, 1, 2].flatMap((t) => [\n entries.map((_, k) => named[k][t]),\n entries.map((e, k) => offsetTiers(e.name, named[k])[t])\n ]);\n const distinct = candidates.find(\n (labels2) => new Set(labels2).size === entries.length\n );\n const labels = distinct ?? candidates.at(-1);\n return entries.map(({ name, i }, k) => ({\n name,\n label: labels[k],\n color: colors?.[i] ?? pathCssColor(i, paths.length)\n }));\n}\nfunction walkLabelsOf(entries) {\n const seen = /* @__PURE__ */ new Map();\n return new Map(\n [...entries].sort((a, b) => a.label.localeCompare(b.label)).map((e) => {\n const n = (seen.get(e.label) ?? 0) + 1;\n seen.set(e.label, n);\n return [e.name, n > 1 ? `${e.label} (${n})` : e.label];\n })\n );\n}\n\nexport {\n nameHue,\n pathHueAt,\n PATH_SATURATION,\n PATH_LIGHTNESS,\n MAX_PATH_COLORS,\n pathColorsLegible,\n pathCssColor,\n pathGreyCssColor,\n pathLegend,\n walkLabelsOf\n};\n", "// src/nodeWidths.ts\nvar NODE_WIDTHS = [\n {\n value: \"depth\",\n label: \"By depth\",\n description: \"Thicker the more paths carry a node, on the square root of its depth against the mean. A graph with one depth everywhere draws uniform.\"\n },\n {\n value: \"uniform\",\n label: \"Uniform\",\n description: \"Every node the same thickness.\"\n }\n];\nvar NODE_WIDTH_VALUES = NODE_WIDTHS.map((w) => w.value);\nvar MIN_FACTOR = 0.3;\nvar MAX_FACTOR = 3;\nfunction meanDepth(graph) {\n let weighted = 0;\n let length = 0;\n for (const node of graph.nodes) {\n weighted += node.depth * node.length;\n length += node.length;\n }\n return length > 0 ? weighted / length : 0;\n}\nfunction depthWidthFactor(node, mean) {\n if (!(mean > 0) || !(node.depth > 0)) {\n return 1;\n }\n return Math.min(\n MAX_FACTOR,\n Math.max(MIN_FACTOR, Math.sqrt(node.depth / mean))\n );\n}\nfunction nodeWidthPx(node, contigThickness, nodeWidth, mean) {\n return contigThickness * (nodeWidth === \"depth\" ? depthWidthFactor(node, mean) : 1);\n}\nfunction maxNodeWidthPx(contigThickness, nodeWidth) {\n return contigThickness * (nodeWidth === \"depth\" ? MAX_FACTOR : 1);\n}\nfunction nodeInk(graph, nodeById, contigThickness, nodeWidth) {\n const mean = graph ? meanDepth(graph) : 0;\n return {\n maxHalfWidthPx: maxNodeWidthPx(contigThickness, nodeWidth) / 2,\n halfWidthPx: (id) => {\n const node = nodeById?.get(id);\n return node ? nodeWidthPx(node, contigThickness, nodeWidth, mean) / 2 : contigThickness / 2;\n }\n };\n}\n\nexport {\n NODE_WIDTHS,\n NODE_WIDTH_VALUES,\n meanDepth,\n depthWidthFactor,\n nodeWidthPx,\n maxNodeWidthPx,\n nodeInk\n};\n"],
5
+ "mappings": "yGACA,IAAIA,GAAgB,GCApB,IAAIC,GAAW,GACXC,GAAgB,IAChBC,EAAY,EAChB,SAASC,GAAWC,EAAM,CACxB,OAAOA,EAAK,OAASH,GAAgBC,EAAY,CACnD,CACA,SAASG,GAASC,EAAGC,EAAG,CACtB,OAAOD,EAAE,GAAKC,EAAE,IAAMD,EAAE,GAAKC,EAAE,IAAMD,EAAE,GAAKC,EAAE,IAAMD,EAAE,GAAKC,EAAE,EAC/D,CACA,SAASC,GAASC,EAAKC,EAAO,CAC5B,OAAOD,EAAI,IAAM,GAAKA,EAAI,IAAMC,EAAM,OAASD,EAAI,IAAM,GAAKA,EAAI,IAAMC,EAAM,MAChF,CACA,SAASC,GAAYF,EAAKC,EAAO,CAC/B,OAAOD,EAAI,IAAM,GAAKA,EAAI,IAAMC,EAAM,OAASD,EAAI,IAAM,GAAKA,EAAI,IAAMC,EAAM,MAChF,CACA,SAASE,GAAUF,EAAOG,EAAW,CAAC,EAAG,CACvC,IAAMC,EAAS,CAAC,GAAGD,CAAQ,EAC3B,OAAQJ,GACFD,GAASC,EAAKC,CAAK,GAAKI,EAAO,KAAMC,GAAMV,GAASU,EAAGN,CAAG,CAAC,EACtD,IAETK,EAAO,KAAKL,CAAG,EACR,GAEX,CACA,SAASO,GAAYC,EAAYP,EAAOQ,EAAM,CAC5C,IAAMC,EAAM,CAAC,EACPC,EAAMpB,GAAWE,EAAY,EAC7BmB,EAAQ,CAAC,EAAGjB,IAAS,CACzB,IAAMkB,EAAInB,GAAWC,CAAI,EACnBmB,EAAY,EAAE,EAAIb,EAAM,OAAS,EAAI,GAAK,EAChD,QAASc,EAAQ,EAAGA,IAAU,EAAE,OAAS,GAAIA,IAAS,CACpD,IAAMC,EAAI,EAAE,EAAIF,EAAYC,EAAQJ,EAC9BX,EAAM,CACV,GAAI,EAAE,EAAIa,EAAI,EACd,GAAI,EAAE,EAAIA,EAAI,EACd,GAAIG,EAAIzB,GAAWE,EACnB,GAAIuB,EAAIvB,CACV,EACA,GAAIM,GAASC,EAAKC,CAAK,EACrB,OAEF,GAAIC,GAAYF,EAAKC,CAAK,IAAM,EAAE,OAAOD,CAAG,GAAK,KAASS,EAAKT,CAAG,EAChE,MAAO,CAAE,GAAG,EAAG,KAAAL,EAAM,EAAAqB,EAAG,EAAAH,CAAE,CAE9B,CAEF,EACA,QAAW,KAAKL,EAAY,CAC1B,IAAMH,EAASO,EAAM,EAAG,EAAE,IAAI,IAAM,EAAE,WAAa,OAAS,OAASA,EAAM,EAAG,EAAE,QAAQ,GACpFP,GACFK,EAAI,KAAKL,CAAM,CAEnB,CACA,OAAOK,CACT,CCnDA,SAASO,GAAQC,EAAQ,CACvB,IAAMC,EAASC,GAAM,KAAK,MAAMA,EAAI,GAAG,EAAI,IAC3C,OAAOF,EAAO,IAAI,CAACG,EAAGC,IAAM,GAAGA,EAAI,IAAM,GAAG,GAAGH,EAAME,EAAE,CAAC,CAAC,IAAIF,EAAME,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CACpF,CACA,SAASE,GAAYC,EAAIC,EAAIC,EAAIC,EAAIC,EAAU,CAC7C,IAAMC,EAAI,KAAK,MAAMF,EAAKF,EAAIC,EAAKF,CAAE,EACrC,GAAIK,IAAM,EACR,MAAO,CAACH,EAAIC,CAAE,EAEhB,IAAMG,GAAMJ,EAAKF,GAAMK,EACjBE,GAAMJ,EAAKF,GAAMI,EACvB,MAAO,CAACH,EAAKE,EAAWE,EAAIH,EAAKC,EAAWG,CAAE,CAChD,CACA,SAASC,EAAaC,EAAGC,EAAG,CAC1B,IAAMC,EAAI,EAAID,EACRE,EAAID,EAAIA,EAAIA,EACZE,EAAI,EAAIF,EAAIA,EAAID,EAChBL,EAAI,EAAIM,EAAID,EAAIA,EAChBI,EAAIJ,EAAIA,EAAIA,EAClB,MAAO,CACL,EAAGE,EAAIH,EAAE,GAAKI,EAAIJ,EAAE,IAAMJ,EAAII,EAAE,IAAMK,EAAIL,EAAE,GAC5C,EAAGG,EAAIH,EAAE,GAAKI,EAAIJ,EAAE,IAAMJ,EAAII,EAAE,IAAMK,EAAIL,EAAE,EAC9C,CACF,CACA,SAASM,GAAcC,EAAQ,CAC7B,IAAMC,EAAMD,EAAO,KAAK,MAAMA,EAAO,OAAS,CAAC,CAAC,EAChD,OAAOC,EAAMT,EAAaS,EAAK,EAAG,EAAI,MACxC,CACA,SAASC,GAAYF,EAAQ,CAC3B,IAAIG,EAAO,IACPC,EAAO,IACPC,EAAO,KACPC,EAAO,KACX,QAAWb,KAAKO,EACdG,EAAO,KAAK,IAAIA,EAAMV,EAAE,GAAIA,EAAE,IAAKA,EAAE,IAAKA,EAAE,EAAE,EAC9CY,EAAO,KAAK,IAAIA,EAAMZ,EAAE,GAAIA,EAAE,IAAKA,EAAE,IAAKA,EAAE,EAAE,EAC9CW,EAAO,KAAK,IAAIA,EAAMX,EAAE,GAAIA,EAAE,IAAKA,EAAE,IAAKA,EAAE,EAAE,EAC9Ca,EAAO,KAAK,IAAIA,EAAMb,EAAE,GAAIA,EAAE,IAAKA,EAAE,IAAKA,EAAE,EAAE,EAEhD,MAAO,CAAE,KAAAU,EAAM,KAAAC,EAAM,KAAAC,EAAM,KAAAC,CAAK,CAClC,CACA,SAASC,GAASd,EAAGe,EAAIC,EAAI,CAC3B,IAAMC,EAAKlB,EAAaC,EAAGe,CAAE,EACvBG,EAAKnB,EAAaC,EAAGgB,CAAE,EACvBG,GAAMH,EAAKD,GAAM,EACjBK,EAAKC,GAAerB,EAAGe,CAAE,EACzBO,EAAKD,GAAerB,EAAGgB,CAAE,EAC/B,MAAO,CACL,GAAIC,EAAG,EACP,GAAIA,EAAG,EACP,IAAKA,EAAG,EAAIG,EAAG,EAAID,EACnB,IAAKF,EAAG,EAAIG,EAAG,EAAID,EACnB,IAAKD,EAAG,EAAII,EAAG,EAAIH,EACnB,IAAKD,EAAG,EAAII,EAAG,EAAIH,EACnB,GAAID,EAAG,EACP,GAAIA,EAAG,CACT,CACF,CACA,SAASG,GAAerB,EAAGC,EAAG,CAC5B,IAAMC,EAAI,EAAID,EACRE,EAAI,EAAID,EAAIA,EACZE,EAAI,EAAIF,EAAID,EACZL,EAAI,EAAIK,EAAIA,EAClB,MAAO,CACL,EAAGE,GAAKH,EAAE,IAAMA,EAAE,IAAMI,GAAKJ,EAAE,IAAMA,EAAE,KAAOJ,GAAKI,EAAE,GAAKA,EAAE,KAC5D,EAAGG,GAAKH,EAAE,IAAMA,EAAE,IAAMI,GAAKJ,EAAE,IAAMA,EAAE,KAAOJ,GAAKI,EAAE,GAAKA,EAAE,IAC9D,CACF,CACA,SAASuB,GAAWhB,EAAQiB,EAAW,CACrC,IAAMC,EAAUlB,EAAO,IACpB,GAAM,KAAK,MAAM,EAAE,IAAM,EAAE,GAAI,EAAE,IAAM,EAAE,EAAE,EAAI,KAAK,MAAM,EAAE,IAAM,EAAE,IAAK,EAAE,IAAM,EAAE,GAAG,EAAI,KAAK,MAAM,EAAE,GAAK,EAAE,IAAK,EAAE,GAAK,EAAE,GAAG,CAClI,EACMmB,EAAQD,EAAQ,OAAO,CAACtB,EAAGC,IAAMD,EAAIC,EAAG,CAAC,EACzCuB,EAAQ,KAAK,IAAI,EAAG,KAAK,MAAMD,EAAQF,CAAS,EAAI,CAAC,EACrDI,EAAM,CAAC,EACb,QAASvC,EAAI,EAAGA,EAAIsC,EAAOtC,GAAK,EAAG,CACjC,IAAMwC,EAAOxC,EAAIsC,EAAQD,EACnBI,GAAMzC,EAAI,GAAKsC,EAAQD,EACvBK,EAAO,CAAC,EACVC,EAAQ,EACZzB,EAAO,QAAQ,CAACP,EAAGiC,IAAM,CACvB,IAAMC,EAAST,EAAQQ,CAAC,EAClBE,EAAMH,EAAQE,EAChBA,EAAS,GAAKC,EAAMN,GAAQG,EAAQF,GACtCC,EAAK,KACHjB,GACEd,EACA,KAAK,IAAI,GAAI6B,EAAOG,GAASE,CAAM,EACnC,KAAK,IAAI,GAAIJ,EAAKE,GAASE,CAAM,CACnC,CACF,EAEFF,EAAQG,CACV,CAAC,EACGJ,EAAK,QACPH,EAAI,KAAKG,CAAI,CAEjB,CACA,OAAOH,CACT,CACA,SAASQ,GAAgB7B,EAAQ8B,EAAIC,EAAI,CACvC,IAAMV,EAAM,IAAI,MAAMrB,EAAO,MAAM,EACnC,QAASlB,EAAI,EAAGA,EAAIkB,EAAO,OAAQlB,IAAK,CACtC,IAAMW,EAAIO,EAAOlB,CAAC,EAClBuC,EAAIvC,CAAC,EAAI,CACP,GAAIW,EAAE,GAAKqC,EACX,GAAIrC,EAAE,GAAKsC,EACX,IAAKtC,EAAE,IAAMqC,EACb,IAAKrC,EAAE,IAAMsC,EACb,IAAKtC,EAAE,IAAMqC,EACb,IAAKrC,EAAE,IAAMsC,EACb,GAAItC,EAAE,GAAKqC,EACX,GAAIrC,EAAE,GAAKsC,CACb,CACF,CACA,OAAOV,CACT,CACA,SAASW,EAAWC,EAAUC,EAAM,CAClC,IAAMC,EAAOF,EAAS,OAAS,EAC/B,OAAOC,IAAS,MAAQ,CAAE,GAAID,EAASE,CAAI,EAAG,OAAQF,EAASE,EAAO,CAAC,CAAE,EAAI,CAAE,GAAIF,EAAS,CAAC,EAAG,OAAQA,EAAS,CAAC,CAAE,CACtH,CACA,IAAIG,GAAsB,GACtBC,GAAc,GAClB,SAASC,EAAUC,EAAI,CACrB,OAAOA,EAAG,SAAS,GAAG,EAAI,IAAM,GAClC,CACA,SAASC,EAAYC,EAAM,CACzB,IAAMC,EAAM,CAACH,EAAII,KAAYA,GAAUL,EAAUC,CAAE,KAAOD,EAAUC,CAAE,EACtE,MAAO,CACL,KAAMG,EAAID,EAAK,KAAMA,EAAK,UAAU,EAAI,MAAQ,QAChD,GAAIC,EAAID,EAAK,GAAIA,EAAK,QAAQ,EAAI,QAAU,KAC9C,CACF,CACA,SAASG,GAAOX,EAAU,CACxB,IAAIY,EAAM,IACNC,EAAM,KACV,QAAWC,KAAKd,EACdY,EAAM,KAAK,IAAIA,EAAKE,EAAE,CAAC,EACvBD,EAAM,KAAK,IAAIA,EAAKC,EAAE,CAAC,EAEzB,MAAO,CAAE,IAAAF,EAAK,IAAAC,CAAI,CACpB,CACA,SAASE,GAAeC,EAAGC,EAAM,CAC/B,OAAO,KAAK,IAAI,EAAGA,EAAK,IAAMD,EAAGA,EAAIC,EAAK,GAAG,CAC/C,CACA,SAASC,GAAWlB,EAAUmB,EAAOC,EAAU,CAC7C,IAAMC,EAAWN,GAAef,EAAS,CAAC,EAAE,EAAGmB,CAAK,EAC9CG,EAASP,GAAef,EAASA,EAAS,OAAS,CAAC,EAAE,EAAGmB,CAAK,EACpE,OAAOE,IAAaC,EAASF,EAAWC,EAAWC,EAAS,QAAU,KACxE,CACA,SAASC,GAAYC,EAAcC,EAAY,CAC7C,MAAO,CACL,KAAMP,GAAWM,EAAcb,GAAOc,CAAU,EAAG,KAAK,EACxD,GAAIP,GAAWO,EAAYd,GAAOa,CAAY,EAAG,OAAO,CAC1D,CACF,CACA,IAAIE,GAA4B,IAAI,QACpC,SAASC,GAAgBH,EAAcC,EAAY,CACjD,IAAIG,EAAOF,GAAU,IAAIF,CAAY,EAChCI,IACHA,EAAuB,IAAI,QAC3BF,GAAU,IAAIF,EAAcI,CAAI,GAElC,IAAIC,EAAQD,EAAK,IAAIH,CAAU,EAC/B,OAAKI,IACHA,EAAQN,GAAYC,EAAcC,CAAU,EAC5CG,EAAK,IAAIH,EAAYI,CAAK,GAErBA,CACT,CACA,IAAIC,GAAgB,IAChBC,GAAgB,KAChBC,GAAiB,IACjBC,GAAiB,EAAIC,GACzB,SAASC,GAAUC,EAAKC,EAAKC,EAAKC,EAAKC,EAAQC,EAAQ,CACrD,IAAMC,EAAQ,KAAK,MAAMJ,EAAMF,EAAKG,EAAMF,CAAG,EACvCM,EAAKD,IAAU,EAAI,GAAKJ,EAAMF,GAAOM,EACrCE,EAAKF,IAAU,EAAI,GAAKH,EAAMF,GAAOK,EACvCG,EAAQ,EACRC,EAAW,IACXC,EAAW,KACf,QAAWnG,KAAK4F,EAAQ,CACtB,IAAM3C,EAAKjD,EAAE,EAAIwF,EACXtC,EAAKlD,EAAE,EAAIyF,EACXW,EAAOnD,EAAK,CAAC+C,EAAK9C,EAAK6C,EACzB,KAAK,IAAIK,CAAI,EAAI,KAAK,IAAIH,CAAK,IACjCA,EAAQG,GAEV,IAAMC,EAAQpD,EAAK8C,EAAK7C,EAAK8C,EAC7BE,EAAW,KAAK,IAAIA,EAAUG,CAAK,EACnCF,EAAW,KAAK,IAAIA,EAAUE,CAAK,CACrC,CACA,IAAMhC,EAAOuB,EAAO,OAASO,EAAWD,EAAW,EAC7CI,EAAW,KAAK,IACpB,KAAK,IAAIL,CAAK,EAAId,GAAgBD,GAClCb,EAAOe,EACT,EACMmB,EAAOV,IAAW,OAASS,EAAW,KAAK,IAAIA,EAAUT,CAAM,EACrE,OAAOI,EAAQ,EAAI,CAACM,EAAOA,CAC7B,CACA,SAASC,GAAO,CAAE,OAAAC,EAAQ,OAAAC,CAAO,EAAG,CAClC,OAAOA,EAASD,CAClB,CACA,IAAIE,GAAsB,EAC1B,SAASC,EAAe7F,EAAGC,EAAG6F,EAAM,CAClC,IAAM5D,EAAKjC,EAAE,EAAID,EAAE,EACbmC,GAAMlC,EAAE,EAAID,EAAE,GAAK8F,EACnBC,EAAM,KAAK,MAAM7D,EAAIC,CAAE,EAC7B,OAAO4D,IAAQ,EAAI,OAAS,CAAE,EAAG7D,EAAK6D,EAAK,EAAG5D,EAAK4D,CAAI,CACzD,CACA,SAASC,GAAkBnC,EAAcC,EAAYmC,EAAOC,EAAMC,EAAUP,GAAqB,CAC/F,IAAME,EAAOL,GAAOS,CAAI,EAClBE,EAAMP,EACVhC,EAAaA,EAAa,OAAS,CAAC,EACpCC,EAAW,CAAC,EACZgC,CACF,GAAKD,EAAehC,EAAa,CAAC,EAAGA,EAAa,GAAG,EAAE,EAAGiC,CAAI,GAAKD,EAAe/B,EAAW,CAAC,EAAGA,EAAW,GAAG,EAAE,EAAGgC,CAAI,GAAK,CAAE,EAAG,EAAG,EAAG,CAAE,EACpIO,EAAU,CAAC,EACjB,QAAS,EAAI,EAAG,EAAIJ,EAAO,IAAK,CAC9B,IAAMzG,GAAY,GAAKyG,EAAQ,GAAK,GAAKE,EACzCE,EAAQ,KAAK,CAAE,EAAG,CAACD,EAAI,EAAI5G,EAAU,EAAG4G,EAAI,EAAI5G,EAAWsG,CAAK,CAAC,CACnE,CACA,OAAOO,CACT,CACA,SAASC,EAASxH,EAAQgH,EAAM,CAC9B,OAAOhH,EAAO,IAAKG,IAAO,CAAE,EAAGA,EAAE,EAAG,EAAGA,EAAE,EAAI6G,CAAK,EAAE,CACtD,CACA,SAASS,GAAWnG,EAAQ0F,EAAM,CAChC,QAAWjG,KAAKO,EACdP,EAAE,IAAMiG,EACRjG,EAAE,KAAOiG,EACTjG,EAAE,KAAOiG,EACTjG,EAAE,IAAMiG,EAEV,OAAO1F,CACT,CACA,IAAIoG,GAAmB,GACnBC,GAAmB,GACvB,SAASC,GAAcrE,EAAUsE,EAAO,CACtC,IAAI5E,EAAS,EACb,QAAS7C,EAAI,EAAGA,EAAImD,EAAS,OAAQnD,IACnC6C,GAAU,KAAK,MACbM,EAASnD,CAAC,EAAE,EAAImD,EAASnD,EAAI,CAAC,EAAE,EAChCmD,EAASnD,CAAC,EAAE,EAAImD,EAASnD,EAAI,CAAC,EAAE,CAClC,EAEF,IAAM0H,EAAS7E,EAAS4E,EAKxB,OAJgB,KAAK,IACnBF,GACA,KAAK,IAAID,GAAkBI,EAAS,CAAC,CACvC,EACiB,KAAK,IAAID,EAAO,OAAO,OAAO,CACjD,CACA,SAASE,GAAWhE,EAAM,CACxB,OAAIA,EAAK,OAASA,EAAK,GACd,GAEFA,EAAK,YAAcA,EAAK,UAAYA,EAAK,aAAeA,EAAK,SAAWA,EAAK,aAAe,IAAM,MAAQ,QAAU,EAC7H,CACA,SAASiE,GAAWjE,EAAMkE,EAAW,GAAO,CAC1C,IAAMC,EAAOH,GAAWhE,CAAI,EAC5B,GAAI,CAACkE,EACH,OAAOC,EAET,IAAM9C,EAAQtB,EAAYC,CAAI,EAC9B,OAAOmE,IAAS,GAAQ9C,EAAQA,EAAM,OAASA,EAAM,GAAKA,EAAM,KAAO,EACzE,CACA,SAAS+C,GAAcC,EAAQhC,EAAOiC,EAASC,EAAS,CACtD,GAAM,CAAE,GAAAC,EAAI,OAAAC,CAAO,EAAIJ,EACjBhF,EAAKoF,EAASD,EAAG,EAAIC,EAAO,EAAI,EAChCnF,EAAKmF,EAASD,EAAG,EAAIC,EAAO,EAAI,EAChCvB,EAAM,KAAK,MAAM7D,EAAIC,CAAE,GAAK,EAC5B6C,EAAK9C,EAAK6D,EACVd,EAAK9C,EAAK4D,EACVwB,EAAKF,EAAG,EAAIF,EACZK,EAAKH,EAAG,EAAID,EACZK,EAAQF,EAAKvC,EAAKE,EAAQ,EAC1BwC,EAAQF,EAAKvC,EAAKC,EAAQ,EAC1ByC,EAAQJ,EAAKvC,EAAKE,EAClB0C,EAAQJ,EAAKvC,EAAKC,EAClB2C,EAAQ,CAAC5C,EAAKC,EAAQ,EACtB4C,EAAQ9C,EAAKE,EAAQ,EAC3B,MAAO,CACL,CACE,GAAIqC,EACJ,GAAIC,EACJ,IAAKC,EACL,IAAKC,EACL,IAAKC,EAAQE,EACb,IAAKD,EAAQE,EACb,GAAIH,EACJ,GAAIC,CACN,EACA,CACE,GAAID,EACJ,GAAIC,EACJ,IAAKD,EAAQE,EACb,IAAKD,EAAQE,EACb,IAAKL,EACL,IAAKC,EACL,GAAIH,EACJ,GAAIC,CACN,CACF,CACF,CACA,SAASO,EAAkBlE,EAAcC,EAAYkE,EAAMb,EAASC,EAASlB,EAAM+B,EAAW,CAAC,EAAGC,EAAU,CAC1G,IAAMvB,EAAQT,EAAK,OACbJ,EAAOL,GAAOS,CAAI,EAClBpB,EAASoD,IAAahC,EAAK,UAAY5B,GAAiB,QAI9D,GAHI0D,IAAS,KACXA,EAAOhE,GAAgBH,EAAcC,CAAU,GAE7CgC,IAAS,EACX,OAAOS,GACLwB,EACEzB,EAASzC,EAAciC,CAAI,EAC3BQ,EAASxC,EAAYgC,CAAI,EACzBkC,EACAb,EACAC,EAAUtB,EACV,CAAE,OAAQa,EAAO,OAAQA,CAAM,EAC/BL,EAAS2B,EAAUnC,CAAI,EAGvBhB,IAAW,OAAS,OAASA,EAASgB,CACxC,EACAA,CACF,EAEF,GAAI,OAAOkC,GAAS,SAClB,OAAOf,GACL7E,EAAWyB,EAAcmE,CAAI,EAC7BtB,GAAc7C,EAAc8C,CAAK,EACjCQ,EACAC,CACF,EAEF,IAAMe,EAAOH,IAAS,GAChB9D,EAAQ8D,IAAS,GAAO,CAAE,KAAM,MAAO,GAAI,OAAQ,EAAIA,EACvDI,EAAahG,EAAWyB,EAAcK,EAAM,IAAI,EAChDmE,EAAWjG,EAAW0B,EAAYI,EAAM,EAAE,EAC1CoE,EAAUF,EAAW,GACrBG,EAAUF,EAAS,GACnB5D,EAAM6D,EAAQ,EAAInB,EAClBzC,EAAM4D,EAAQ,EAAIlB,EAClBzC,EAAM4D,EAAQ,EAAIpB,EAClBvC,EAAM2D,EAAQ,EAAInB,EACxB,GAAIe,EAAM,CACR,IAAIK,EAAU,EACVC,EAAU,EACd,GAAIL,EAAW,OAAQ,CACrB,IAAMlG,EAAKoG,EAAQ,EAAIF,EAAW,OAAO,EACnCjG,EAAKmG,EAAQ,EAAIF,EAAW,OAAO,EACnCrC,EAAM,KAAK,MAAM7D,EAAIC,CAAE,EACzB4D,EAAM,IACRyC,EAAUtG,EAAK6D,EACf0C,EAAUtG,EAAK4D,EAEnB,CACA,IAAM2C,EAAMhC,GAAc7C,EAAc8C,CAAK,EACvCgC,EAAQ,CAACF,EACTG,EAAQJ,EACRK,GAAQP,EAAQ,EAAIC,EAAQ,GAAK,EAAIpB,EAAUwB,EAAQD,EACvDI,GAAQR,EAAQ,EAAIC,EAAQ,GAAK,EAAInB,EAAUwB,EAAQF,EACvDK,EAAOtE,EAAM+D,EAAUE,EACvBM,EAAOtE,EAAM+D,EAAUC,EACvBO,EAAOtE,EAAM6D,EAAUE,EACvBQ,EAAOtE,EAAM6D,EAAUC,EAC7B,MAAO,CACL,CACE,GAAIjE,EACJ,GAAIC,EACJ,IAAKqE,EACL,IAAKC,EACL,IAAKD,EAAOJ,EAAQD,EACpB,IAAKM,EAAOJ,EAAQF,EACpB,GAAIG,EACJ,GAAIC,CACN,EACA,CACE,GAAID,EACJ,GAAIC,EACJ,IAAKG,EAAON,EAAQD,EACpB,IAAKQ,EAAON,EAAQF,EACpB,IAAKO,EACL,IAAKC,EACL,GAAIvE,EACJ,GAAIC,CACN,CACF,CACF,KAAO,CACL,IAAMuE,EAAWf,EAAW,QAAU,CACpC,EAAGE,EAAQ,GAAKC,EAAQ,EAAID,EAAQ,GACpC,EAAGA,EAAQ,GAAKC,EAAQ,EAAID,EAAQ,EACtC,EACMc,EAASf,EAAS,QAAU,CAChC,EAAGE,EAAQ,GAAKD,EAAQ,EAAIC,EAAQ,GACpC,EAAGA,EAAQ,GAAKD,EAAQ,EAAIC,EAAQ,EACtC,EACMc,EAAO,KAAK,MAAM1E,EAAMF,EAAKG,EAAMF,CAAG,EACtC4E,EAAc,CAACC,GAAMlC,GAAImC,GAASC,KAAY,CAClD,IAAMvH,GAAKmF,GAAG,EAAIkC,GAAK,EACjBpH,GAAKkF,GAAG,EAAIkC,GAAK,EACjBxD,GAAM,KAAK,MAAM7D,GAAIC,EAAE,EACvBmD,GAAQS,KAAQ,EAAI,GAAKyD,GAAUtH,GAAKuH,GAAUtH,IAAM4D,GAC9D,OAAO,KAAK,IACV,EACA,KAAK,IAAIsD,EAAO7G,GAAqBC,GAAa6C,GAAQ,EAAG,CAC/D,CACF,EACMoE,EAAYnB,EAAQ,EAAID,EAAQ,EAChCqB,EAAYpB,EAAQ,EAAID,EAAQ,EAChC,CAACsB,EAAKC,CAAG,EAAI1K,GACjBgK,EAAS,EACTA,EAAS,EACTb,EAAQ,EACRA,EAAQ,EACRgB,EAAYH,EAAUb,EAASoB,EAAWC,CAAS,CACrD,EACM,CAACG,EAAKC,CAAG,EAAI5K,GACjBiK,EAAO,EACPA,EAAO,EACPb,EAAQ,EACRA,EAAQ,EACRe,EAAYF,EAAQb,EAAS,CAACmB,EAAW,CAACC,CAAS,CACrD,EACMK,EAAQ/B,EAAS,OAASzD,GAAUC,EAAKC,EAAKC,EAAKC,EAAKqD,EAAUnD,CAAM,EAAI,EAC5EmF,EAAWZ,IAAS,EAAI,EAAIA,EAC5BrE,GAAML,EAAMF,GAAOwF,EACnBhF,GAAML,EAAMF,GAAOuF,EACnBC,EAAS,CAACjF,EAAK+E,EACfG,GAASnF,EAAKgF,EACdI,GAAUpF,EAAK,KAAK,IAAIgF,CAAK,EAC7BK,GAAUpF,EAAK,KAAK,IAAI+E,CAAK,EACnC,MAAO,CACL,CACE,GAAIvF,EACJ,GAAIC,EACJ,IAAKkF,EAAMzC,EAAU+C,EAASE,GAC9B,IAAKP,EAAMzC,EAAU+C,GAASE,GAC9B,IAAKP,EAAM3C,EAAU+C,EAASE,GAC9B,IAAKL,EAAM3C,EAAU+C,GAASE,GAC9B,GAAI1F,EACJ,GAAIC,CACN,CACF,CACF,CACF,CACA,SAAS0F,GAAUjI,EAAUV,EAAI,CAC/B,IAAME,EAAQQ,EAAS,CAAC,EAClBL,EAAMK,EAAS,GAAG,EAAE,EAC1B,OAAO,KAAK,MAAMR,EAAM,EAAIF,EAAG,EAAGE,EAAM,EAAIF,EAAG,CAAC,EAAI,KAAK,MAAMK,EAAI,EAAIL,EAAG,EAAGK,EAAI,EAAIL,EAAG,CAAC,EAAI,QAAU,KACzG,CACA,SAAS4I,GAAiB1G,EAAcC,EAAY0G,EAAOtG,EAAO,CAChE,IAAMkE,EAAahG,EACjByB,EACAK,GAAO,MAAQoG,GAAUzG,EAAc2G,EAAM,CAAC,CAAC,CACjD,EACMnC,EAAWjG,EACf0B,EACAI,GAAO,IAAMoG,GAAUxG,EAAY0G,EAAM,GAAG,EAAE,CAAC,CACjD,EACM1L,EAAS,CAACsJ,EAAW,GAAI,GAAGoC,EAAOnC,EAAS,EAAE,EAC9CoC,EAAWvL,GAAM,CACrB,IAAMD,EAAIH,EAAOI,CAAC,EACZoE,EAAQoH,GAAM,KAAK,MAAMA,EAAE,EAAIzL,EAAE,EAAGyL,EAAE,EAAIzL,EAAE,CAAC,EAC7CqG,EAAQ,CAACgC,EAAQqD,IAAS,CAC9B,IAAM5E,EAAMuB,EAAShE,EAAKgE,CAAM,EAAI,EAC9BpC,EAAQ5B,EAAKqH,CAAI,EACvB,OAAO5E,IAAQ,EAAI,CAAE,EAAG4E,EAAK,EAAI1L,EAAE,EAAG,EAAG0L,EAAK,EAAI1L,EAAE,CAAE,EAAI,CACxD,GAAIA,EAAE,EAAIqI,EAAO,GAAKvB,EAAMb,EAC5B,GAAIjG,EAAE,EAAIqI,EAAO,GAAKvB,EAAMb,CAC9B,CACF,EACA,GAAIhG,IAAM,EACR,OAAOoG,EAAM8C,EAAW,OAAQtJ,EAAO,CAAC,CAAC,EAE3C,GAAII,IAAMJ,EAAO,OAAS,EAAG,CAC3B,IAAM2C,EAAM6D,EAAM+C,EAAS,OAAQvJ,EAAOI,EAAI,CAAC,CAAC,EAChD,MAAO,CAAE,EAAG,CAACuC,EAAI,EAAG,EAAG,CAACA,EAAI,CAAE,CAChC,CACA,MAAO,CACL,GAAI3C,EAAOI,EAAI,CAAC,EAAE,EAAIJ,EAAOI,EAAI,CAAC,EAAE,GAAK,EACzC,GAAIJ,EAAOI,EAAI,CAAC,EAAE,EAAIJ,EAAOI,EAAI,CAAC,EAAE,GAAK,CAC3C,CACF,EACMkB,EAAS,CAAC,EAChB,QAASlB,EAAI,EAAGA,EAAIJ,EAAO,OAAS,EAAGI,IAAK,CAC1C,IAAMc,EAAIlB,EAAOI,CAAC,EACZe,EAAInB,EAAOI,EAAI,CAAC,EAChB0L,EAAKH,EAAQvL,CAAC,EACd2L,EAAKJ,EAAQvL,EAAI,CAAC,EACxBkB,EAAO,KAAK,CACV,GAAIJ,EAAE,EACN,GAAIA,EAAE,EACN,IAAKA,EAAE,EAAI4K,EAAG,EAAI,EAClB,IAAK5K,EAAE,EAAI4K,EAAG,EAAI,EAClB,IAAK3K,EAAE,EAAI4K,EAAG,EAAI,EAClB,IAAK5K,EAAE,EAAI4K,EAAG,EAAI,EAClB,GAAI5K,EAAE,EACN,GAAIA,EAAE,CACR,CAAC,CACH,CACA,OAAOG,CACT,CCpfA,SAAS0K,GAAKC,EAAQ,CACpB,OAAOA,IAAW,IAAM,IAAM,GAChC,CACA,SAASC,GAAUC,EAAOC,EAAwB,IAAI,IAAO,CAC3D,IAAMC,EAAQF,EAAM,MAAM,IAAIG,CAAW,EACnCC,EAAqB,IAAI,IACzBC,EAAS,CAACC,EAAIC,EAAMC,IAAO,CAC/B,IAAMC,EAAM,GAAGH,CAAE,IAAIC,CAAI,GACnBG,EAAON,EAAG,IAAIK,CAAG,EACnBC,EACFA,EAAK,KAAKF,CAAE,EAEZJ,EAAG,IAAIK,EAAK,CAACD,CAAE,CAAC,CAEpB,EACAR,EAAM,MAAM,QAAQ,CAACW,EAAMH,IAAO,CAChCH,EAAOM,EAAK,KAAMT,EAAMM,CAAE,EAAE,KAAMA,CAAE,EACpCH,EAAOM,EAAK,GAAIT,EAAMM,CAAE,EAAE,GAAIA,CAAE,CAClC,CAAC,EACD,IAAMI,EAAaC,GAAM,CACvB,IAAMC,EAAMV,EAAG,IAAI,GAAGS,CAAC,MAAM,EAC7B,GAAIC,GAAK,SAAW,EAClB,OAEF,IAAMN,EAAKM,EAAI,CAAC,EACVH,EAAOX,EAAM,MAAMQ,CAAE,EAC3B,OAAOG,EAAK,OAASE,GAAKF,EAAK,KAAOE,GAAK,CAACZ,EAAM,IAAIY,CAAC,GAAK,CAACZ,EAAM,IAAIU,EAAK,EAAE,GAAKT,EAAMM,CAAE,EAAE,OAAS,OAASN,EAAMM,CAAE,EAAE,KAAO,SAAWJ,EAAG,IAAI,GAAGO,EAAK,EAAE,QAAQ,GAAG,SAAW,EAAIH,EAAK,MAC7L,EACMO,EAAyB,IAAI,IAC7BC,EAAwB,IAAI,IAC5BC,EAAuB,IAAI,IACjC,QAAWC,KAAQlB,EAAM,MAAO,CAC9B,IAAMmB,EAAOf,EAAG,IAAI,GAAGc,EAAK,EAAE,QAAQ,EAChCE,EAAOD,GAAM,SAAW,EAAInB,EAAM,MAAMmB,EAAK,CAAC,CAAC,EAAE,KAAO,OAC9D,GAAIH,EAAM,IAAIE,EAAK,EAAE,GAAKE,IAAS,QAAUR,EAAUQ,CAAI,IAAMD,EAAK,CAAC,EACrE,SAEF,IAAME,EAAM,CAACH,EAAK,EAAE,EACpB,OAAW,CACT,IAAMV,EAAKI,EAAUS,EAAI,GAAG,EAAE,CAAC,EACzBC,EAAOd,IAAO,OAAS,OAASR,EAAM,MAAMQ,CAAE,EAAE,GACtD,GAAIc,IAAS,QAAUN,EAAM,IAAIM,CAAI,EACnC,MAEFP,EAAO,IAAIP,CAAE,EACba,EAAI,KAAKC,CAAI,CACf,CACA,QAAWhB,KAAMe,EACfL,EAAM,IAAIV,EAAIY,EAAK,EAAE,EAEnBG,EAAI,OAAS,GACfJ,EAAK,IAAIC,EAAK,GAAIG,CAAG,CAEzB,CACA,QAAWH,KAAQlB,EAAM,MAClBgB,EAAM,IAAIE,EAAK,EAAE,GACpBF,EAAM,IAAIE,EAAK,GAAIA,EAAK,EAAE,EAG9B,IAAMK,EAAO,IAAI,IAAIvB,EAAM,MAAM,IAAKwB,GAAM,CAACA,EAAE,GAAIA,CAAC,CAAC,CAAC,EAChDC,EAAQ,CAAC,EACf,QAAWP,KAAQlB,EAAM,MAAO,CAC9B,GAAIgB,EAAM,IAAIE,EAAK,EAAE,IAAMA,EAAK,GAC9B,SAEF,IAAMG,EAAMJ,EAAK,IAAIC,EAAK,EAAE,EAC5B,GAAI,CAACG,EAAK,CACRI,EAAM,KAAKP,CAAI,EACf,QACF,CACA,IAAMQ,EAAUL,EAAI,IAAKf,GAAOiB,EAAK,IAAIjB,CAAE,CAAC,EACtCqB,EAAWD,EAAQ,OAAOE,CAAU,EACpCC,EAAQF,EAAS,OAASA,EAAS,OAAO,CAACd,EAAG,IAAMA,EAAE,OAAO,OAAS,EAAE,OAAO,MAAQA,EAAI,CAAC,EAAIa,EAAQ,CAAC,EAC/GD,EAAM,KAAK,CACT,GAAIP,EAAK,GACT,KAAMA,EAAK,KACX,OAAQQ,EAAQ,OAAO,CAACI,EAAKN,IAAMM,EAAMN,EAAE,OAAQ,CAAC,EACpD,MAAON,EAAK,MACZ,OAAQW,EAAM,MAChB,CAAC,CACH,CACA,IAAME,EAAuB,IAAI,IAC3BC,EAAQ,CAAC,EACf,OAAAhC,EAAM,MAAM,QAAQ,CAACW,EAAMH,IAAO,CAChC,IAAMyB,EAAOjB,EAAM,IAAIL,EAAK,IAAI,EAC1BuB,EAAKlB,EAAM,IAAIL,EAAK,EAAE,EACtBJ,EAAOL,EAAMM,CAAE,EACfC,EAAM,GAAGwB,CAAI,IAAI1B,EAAK,IAAI,IAAI2B,CAAE,IAAI3B,EAAK,EAAE,GAC7CQ,EAAO,IAAIP,CAAE,GAAKuB,EAAK,IAAItB,CAAG,IAGlCsB,EAAK,IAAItB,CAAG,EACZuB,EAAM,KAAK,CACT,KAAAC,EACA,GAAAC,EACA,GAAG3B,EAAK,OAAS,QAAU,CAAE,WAAYV,GAAKsC,EAAUF,CAAI,CAAC,CAAE,EAAI,CAAC,EACpE,GAAG1B,EAAK,KAAO,MAAQ,CAAE,SAAUV,GAAKsC,EAAUD,CAAE,CAAC,CAAE,EAAI,CAAC,CAC9D,CAAC,EACH,CAAC,EACM,CACL,MAAO,CAAE,GAAGlC,EAAO,MAAAyB,EAAO,MAAAO,EAAO,MAAO,OAAQ,WAAY,MAAO,EACnE,KAAAf,CACF,CACF,CACA,SAASmB,GAAUC,EAAWpB,EAAMqB,EAAU,CAC5C,IAAMxB,EAAM,CAAE,GAAGuB,CAAU,EAC3B,OAAW,CAAC/B,EAAIoB,CAAO,IAAKT,EAAM,CAChC,IAAMsB,EAAOF,EAAU/B,CAAE,EACzB,GAAI,CAACiC,GAAM,OACT,SAEF,OAAOzB,EAAIR,CAAE,EACb,IAAMkC,EAAMC,EAAUF,CAAI,EACpBG,EAAQF,EAAI,GAAG,EAAE,EACjBG,EAAUjB,EAAQ,IAAKkB,GAAM,KAAK,IAAIN,EAASM,CAAC,EAAG,CAAC,CAAC,EACrDC,EAAYF,EAAQ,OAAO,CAAC9B,EAAGiC,IAAMjC,EAAIiC,EAAG,CAAC,GAAKpB,EAAQ,OAC5DO,EAAO,EACXP,EAAQ,QAAQ,CAACqB,EAAQC,IAAM,CAC7B,IAAMC,EAAQJ,EAAYF,EAAQK,CAAC,EAAIH,EAAYH,EAAQA,EAAQhB,EAAQ,OACrEQ,EAAKc,IAAMtB,EAAQ,OAAS,EAAIgB,EAAQT,EAAOgB,EACrDnC,EAAIiC,CAAM,EAAIG,GAAMX,EAAMC,EAAKP,EAAMC,CAAE,EACvCD,EAAOC,CACT,CAAC,CACH,CACA,OAAOpB,CACT,CACA,SAASqC,GAAcZ,EAAMN,EAAMC,EAAI,CACrC,GAAIK,EAAK,SAAW,EAClB,MAAO,CAAC,EAEV,IAAMC,EAAMC,EAAUF,CAAI,EACpBG,EAAQF,EAAI,GAAG,EAAE,EACvB,OAAOU,GAAMX,EAAMC,EAAKP,EAAOS,EAAOR,EAAKQ,CAAK,CAClD,CACA,SAASU,GAAiBb,EAAM,CAC9B,IAAMC,EAAMC,EAAUF,CAAI,EAC1B,OAAOc,EAAQd,EAAMC,EAAKA,EAAI,GAAG,EAAE,EAAI,CAAC,CAC1C,CACA,SAASC,EAAUF,EAAM,CACvB,IAAMC,EAAM,CAAC,CAAC,EACd,QAASc,EAAI,EAAGA,EAAIf,EAAK,OAAQe,IAC/Bd,EAAI,KACFA,EAAIc,EAAI,CAAC,EAAI,KAAK,MAAMf,EAAKe,CAAC,EAAE,EAAIf,EAAKe,EAAI,CAAC,EAAE,EAAGf,EAAKe,CAAC,EAAE,EAAIf,EAAKe,EAAI,CAAC,EAAE,CAAC,CAC9E,EAEF,OAAOd,CACT,CACA,SAASa,EAAQd,EAAMC,EAAKe,EAAG,CAC7B,GAAIA,GAAK,EACP,MAAO,CAAE,GAAGhB,EAAK,CAAC,CAAE,EAEtB,IAAIe,EAAI,EACR,KAAOA,EAAId,EAAI,QAAUA,EAAIc,CAAC,EAAIC,GAChCD,IAEF,GAAIA,GAAKd,EAAI,OACX,MAAO,CAAE,GAAGD,EAAK,GAAG,EAAE,CAAE,EAE1B,IAAMiB,EAAOhB,EAAIc,CAAC,EAAId,EAAIc,EAAI,CAAC,EACzBG,EAAID,EAAO,GAAKD,EAAIf,EAAIc,EAAI,CAAC,GAAKE,EAAO,EACzC3C,EAAI0B,EAAKe,EAAI,CAAC,EACdR,EAAIP,EAAKe,CAAC,EAChB,MAAO,CAAE,EAAGzC,EAAE,GAAKiC,EAAE,EAAIjC,EAAE,GAAK4C,EAAG,EAAG5C,EAAE,GAAKiC,EAAE,EAAIjC,EAAE,GAAK4C,CAAE,CAC9D,CACA,SAASP,GAAMX,EAAMC,EAAKP,EAAMC,EAAI,CAClC,IAAMwB,EAAS,CAACL,EAAQd,EAAMC,EAAKP,CAAI,CAAC,EACxC,QAASqB,EAAI,EAAGA,EAAIf,EAAK,OAAQe,IAC3Bd,EAAIc,CAAC,EAAIrB,GAAQO,EAAIc,CAAC,EAAIpB,GAC5BwB,EAAO,KAAK,CAAE,GAAGnB,EAAKe,CAAC,CAAE,CAAC,EAG9B,OAAAI,EAAO,KAAKL,EAAQd,EAAMC,EAAKN,CAAE,CAAC,EAC3BwB,CACT,CC1KA,IAAIC,GAAkB,EACtB,SAASC,GAAeC,EAAeC,EAAU,CAC/C,OAAOA,EAAS,QAASC,GAAOF,EAAcE,CAAE,GAAK,CAAC,CAAC,CACzD,CACA,SAASC,GAAkBH,EAAeI,EAAUC,EAAMC,EAAOC,EAAW,GAAO,CACjF,IAAMC,EAAOR,EAAcI,EAAS,IAAI,EAClCK,EAAKT,EAAcI,EAAS,EAAE,EACpC,GAAI,GAACI,GAAM,QAAU,CAACC,GAAI,QAG1B,OAAOH,EAAQI,GACbF,EACAC,EACAH,EACAC,EAAWI,EAAYP,CAAQ,EAAI,MACrC,EAAIQ,EACFJ,EACAC,EACAI,GAAWT,EAAUG,CAAQ,EAC7B,EACA,EACAF,EACAN,GAAeC,EAAeI,EAAS,QAAQ,CACjD,CACF,CACA,SAASU,GAAmBC,EAAO,CACjC,IAAMC,EAA6B,IAAI,IACvC,QAAWC,KAAQF,EAAM,MACvB,GAAIG,EAAWD,CAAI,EAAG,CACpB,IAAME,EAAOH,EAAW,IAAIC,EAAK,OAAO,OAAO,EAC3CE,EACFA,EAAK,KAAKF,CAAI,EAEdD,EAAW,IAAIC,EAAK,OAAO,QAAS,CAACA,CAAI,CAAC,CAE9C,CAEF,QAAWE,KAAQH,EAAW,OAAO,EACnCG,EAAK,KAAK,CAACC,EAAGC,IAAMD,EAAE,OAAO,MAAQC,EAAE,OAAO,KAAK,EAErD,OAAOL,CACT,CACA,SAASM,GAAcC,EAAOC,EAAOC,EAAK,CACxC,IAAMxB,EAAW,CAAC,EAClB,GAAIsB,EACF,QAASG,EAAIC,GAAmBJ,EAAOC,CAAK,EAAGE,EAAIH,EAAM,OAAQG,IAAK,CACpE,IAAMT,EAAOM,EAAMG,CAAC,EACpB,GAAIT,EAAK,OAAO,OAASQ,EACvB,MAEER,EAAK,OAAO,MAAQA,EAAK,QAAUQ,GACrCxB,EAAS,KAAKgB,EAAK,EAAE,CAEzB,CAEF,OAAOhB,CACT,CACA,SAAS2B,GAAaC,EAAMrB,EAAMC,EAAIqB,EAAU,CAC9C,GAAM,CAAE,WAAAC,EAAY,SAAAC,CAAS,EAAIH,EACjC,GAAIE,IAAe,QAAUC,IAAa,OACxC,MAAO,GAET,IAAMC,EAAcF,KAAgBvB,EAAK,OAAO,QAAU,KACpD0B,EAAcF,KAAcvB,EAAG,OAAO,QAAU,KACtD,OAAOqB,EAAWG,GAAeC,EAAc,CAACD,GAAe,CAACC,CAClE,CACA,SAASC,GAAcpB,EAAO,CAC5B,IAAMqB,EAAO,IAAI,IAAIrB,EAAM,MAAM,IAAKsB,GAAM,CAACA,EAAE,GAAIA,CAAC,CAAC,CAAC,EAChDC,EAAWxB,GAAmBC,CAAK,EACnCwB,EAAQ,CAAC,EACf,QAASC,EAAY,EAAGA,EAAYzB,EAAM,MAAM,OAAQyB,IAAa,CACnE,IAAMX,EAAOd,EAAM,MAAMyB,CAAS,EAC5BhC,EAAO4B,EAAK,IAAIP,EAAK,IAAI,EACzBpB,EAAK2B,EAAK,IAAIP,EAAK,EAAE,EAC3B,GAAIrB,IAAS,QAAUC,IAAO,QAAUS,EAAWV,CAAI,GAAKU,EAAWT,CAAE,GAAKD,EAAK,OAAO,UAAYC,EAAG,OAAO,QAAS,CACvH,IAAMqB,EAAWtB,EAAK,OAAO,OAASC,EAAG,OAAO,MAC1C,CAACgC,EAAMC,CAAK,EAAIZ,EAAW,CAACtB,EAAMC,CAAE,EAAI,CAACA,EAAID,CAAI,EACjDgB,EAAQiB,EAAK,OAAO,MAAQA,EAAK,OACjChB,EAAMiB,EAAM,OAAO,MACnBC,EAAKlB,EAAMD,EACjB,GAAImB,GAAM7C,IAAmB8B,GAAaC,EAAMrB,EAAMC,EAAIqB,CAAQ,EAAG,CACnE,IAAMc,EAAUH,EAAK,OAAO,QAC5BF,EAAM,KAAK,CACT,UAAAC,EACA,KAAMX,EAAK,KACX,GAAIA,EAAK,GACT,GAAGA,EAAK,WAAa,CAAE,WAAYA,EAAK,UAAW,EAAI,CAAC,EACxD,GAAGA,EAAK,SAAW,CAAE,SAAUA,EAAK,QAAS,EAAI,CAAC,EAClD,QAAAe,EACA,MAAApB,EACA,IAAAC,EACA,GAAAkB,EACA,SAAUrB,GAAcgB,EAAS,IAAIM,CAAO,EAAGpB,EAAOC,CAAG,CAC3D,CAAC,CACH,CACF,CACF,CACA,OAAOc,CACT,CACA,SAASM,GAAkB9B,EAAO+B,EAAW,CAC3C,IAAMC,EAAyB,IAAI,IAC7BC,EAAQ9C,GAAO,CACnB,IAAI+C,EAAI/C,EACR,KAAO6C,EAAO,IAAIE,CAAC,GACjBA,EAAIF,EAAO,IAAIE,CAAC,EAElB,OAAIA,IAAM/C,GACR6C,EAAO,IAAI7C,EAAI+C,CAAC,EAEXA,CACT,EACMC,EAAO,CAAC9B,EAAGC,IAAM,CACrB,GAAM,CAAC8B,EAAIC,CAAE,EAAI,CAACJ,EAAK5B,CAAC,EAAG4B,EAAK3B,CAAC,CAAC,EAClC,OAAI8B,IAAOC,GACTL,EAAO,IAAII,EAAIC,CAAE,EAEZD,IAAOC,CAChB,EACMC,EAAa,IAAI,IAAIP,EAAU,IAAKQ,GAAMA,EAAE,SAAS,CAAC,EAC5D,OAAAvC,EAAM,MAAM,QAAQ,CAACwC,EAAGC,IAAO,CACxBH,EAAW,IAAIG,CAAE,GACpBN,EAAKK,EAAE,KAAMA,EAAE,EAAE,CAErB,CAAC,EACM,IAAI,IACTT,EAAU,OAAQQ,GAAM,CAACJ,EAAKI,EAAE,KAAMA,EAAE,EAAE,CAAC,EAAE,IAAKA,GAAMA,EAAE,SAAS,CACrE,CACF,CACA,IAAIG,GAA2B,IAAI,QACnC,SAASC,GAAgB3C,EAAO+B,EAAWa,EAAO,GAAM,CACtD,IAAIC,EAASH,GAAS,IAAIX,CAAS,EAC9Bc,IACHA,EAAyB,IAAI,IAC7BH,GAAS,IAAIX,EAAWc,CAAM,GAEhC,IAAIC,EAAUD,EAAO,IAAID,CAAI,EAC7B,GAAI,CAACE,EAAS,CACZ,IAAMC,EAASH,EAAuB,IAAI,IAAQd,GAAkB9B,EAAO+B,CAAS,EACpFe,EAAU,CACR,MAAOf,EAAU,OAAQQ,GAAM,CAACQ,EAAO,IAAIR,EAAE,SAAS,CAAC,EACvD,SAAU,IAAI,IAAIR,EAAU,IAAKQ,GAAM,CAACA,EAAE,UAAWA,EAAE,QAAQ,CAAC,CAAC,EACjE,OAAAQ,CACF,EACAF,EAAO,IAAID,EAAME,CAAO,CAC1B,CACA,OAAOA,CACT,CC/IA,IAAIE,GAAwB,GACxBC,GAAoB,IACpBC,GAAkB,EAClBC,GAAgB,EAChBC,GAAgB,IAChBC,GAAe,EACfC,GAAkB,GAClBC,EAAe,EACfC,EAAqB,EACzB,SAASC,EAAeC,EAAM,CAC5B,OAAQA,EAAK,OAASN,GAAgBC,GAAeE,GAAgB,CACvE,CACA,IAAII,GAAqBL,GAAkBC,GAAgB,EACvDK,GAAuBH,EAAe,MAAM,EAChD,SAASI,EAAMC,EAAOC,EAAGC,EAAG,CAC1B,MAAO,CACL,GAAID,EAAID,EACR,GAAIC,EAAID,EACR,GAAIE,EAAIL,EACR,GAAIK,EAAIL,CACV,CACF,CACA,SAASM,GAAYP,EAAMQ,EAAS,CAClC,MAAO,CACL,GAAI,EACJ,GAAI,EAAIR,EAAK,OAAS,IAAM,EAAIH,EAChC,GAAIW,EAAU,EAAIX,EAAe,EACjC,GAAIW,EAAU,EAAIX,EAAe,CACnC,CACF,CACA,SAASY,EAAMC,EAAGC,EAAIC,EAAI,CACxB,OAAOA,EAAKD,EAAKD,EAAI,KAAK,IAAI,KAAK,IAAIA,EAAGC,CAAE,EAAGC,CAAE,CACnD,CACA,SAASC,GAAYC,EAAG,CACtB,OAAO,OAAOA,CAAC,EAAE,QAAQ,mBAAoB,GAAG,CAClD,CACA,SAASC,GAASC,EAAI,CACpB,OAAIA,GAAM,IACD,GAAG,EAAEA,EAAK,KAAK,QAAQ,CAAC,CAAC,MAE3BA,GAAM,IAAM,GAAG,EAAEA,EAAK,KAAK,QAAQ,CAAC,CAAC,MAAQ,GAAGA,CAAE,KAC3D,CACA,SAASC,GAAaD,EAAI,CACxB,MAAO,GAAGD,GAASC,CAAE,CAAC,MACxB,CACA,SAASE,GAAWC,EAAQC,EAAMC,EAAQC,EAAQ,CAChD,IAAMC,EAAQJ,EAAO,CAAC,EAChBK,EAAOL,EAAOA,EAAO,OAAS,CAAC,EAC/BM,GAAML,EAAK,GAAKG,EAAM,GAAKC,EAAK,IAAM,GAAKH,EAC3CK,GAAMN,EAAK,GAAKG,EAAM,GAAKC,EAAK,IAAM,GAAKF,EAC3CK,EAAM,KAAK,MAAMF,EAAIC,CAAE,EAC7B,OAAOC,IAAQ,EAAI,CAAE,EAAG,EAAG,EAAG,EAAG,EAAI,CAAE,EAAGF,EAAKE,EAAK,EAAGD,EAAKC,CAAI,CAClE,CACA,SAASC,GAAWC,EAAKC,EAAK,CAC5B,OAAO,KAAK,IAAIA,EAAI,CAAC,GAAKD,EAAI,GAAKA,EAAI,IAAM,EAAI,KAAK,IAAIC,EAAI,CAAC,GAAKD,EAAI,GAAKA,EAAI,IAAM,CACzF,CACA,SAASE,GAAeF,EAAKC,EAAK,CAChC,IAAM1B,GAASyB,EAAI,GAAKA,EAAI,IAAM,EAC5BG,GAASH,EAAI,GAAKA,EAAI,IAAM,EAClC,OAAO,KAAK,IACVC,EAAI,IAAM,EAAI,IAAW1B,EAAQ,KAAK,IAAI0B,EAAI,CAAC,EAC/CA,EAAI,IAAM,EAAI,IAAWE,EAAQ,KAAK,IAAIF,EAAI,CAAC,CACjD,CACF,CACA,SAASG,GAAYC,EAAUb,EAAQC,EAAQ,CAC7C,IAAIa,EAAQ,EACZ,QAASC,EAAI,EAAGA,EAAIF,EAAS,OAAQE,IAAK,CACxC,IAAMC,EAAIH,EAASE,EAAI,CAAC,EAClBE,EAAIJ,EAASE,CAAC,EACpBD,GAAS,KAAK,OAAOG,EAAE,EAAID,EAAE,GAAKhB,GAASiB,EAAE,EAAID,EAAE,GAAKf,CAAM,CAChE,CACA,OAAOa,CACT,CACA,SAASI,GAAUC,EAASC,EAAe,CACzC,IAAIC,EAAO,IACPC,EAAO,IACPC,EAAO,KACPC,EAAO,KACX,QAAWC,KAAMN,EACf,QAAWO,KAAKN,EAAcK,CAAE,GAAK,CAAC,EACpCJ,EAAO,KAAK,IAAIA,EAAMK,EAAE,CAAC,EACzBH,EAAO,KAAK,IAAIA,EAAMG,EAAE,CAAC,EACzBJ,EAAO,KAAK,IAAIA,EAAMI,EAAE,CAAC,EACzBF,EAAO,KAAK,IAAIA,EAAME,EAAE,CAAC,EAG7B,OAAOL,IAAS,IAAW,OAAS,CAAE,KAAAA,EAAM,KAAAC,EAAM,KAAAC,EAAM,KAAAC,CAAK,CAC/D,CACA,IAAIG,GAAiC,IAAI,QACzC,SAASC,GAAWR,EAAeS,EAAa,CAC9C,IAAMC,EAASH,GAAe,IAAIP,CAAa,EAC/C,GAAIU,GAAQ,cAAgBD,EAC1B,OAAOC,EAAO,MAEhB,IAAMC,EAAQ,OAAO,QAAQX,CAAa,EAAE,OAAO,CAAC,CAACK,EAAIZ,CAAQ,IAAMA,EAAS,OAAS,GAAKgB,EAAY,IAAIJ,CAAE,CAAC,EAAE,KAAK,CAAC,CAACT,CAAC,EAAG,CAACC,CAAC,IAAMY,EAAY,IAAIZ,CAAC,EAAIY,EAAY,IAAIb,CAAC,CAAC,EAC7K,OAAAW,GAAe,IAAIP,EAAe,CAAE,YAAAS,EAAa,MAAAE,CAAM,CAAC,EACjDA,CACT,CACA,IAAIC,GAA2B,IAAI,QACnC,SAASC,GAAcb,EAAec,EAAWC,EAAMC,EAASC,EAAQC,EAAU,CAChF,GAAM,CAAE,OAAAtC,EAAQ,OAAAC,CAAO,EAAIkC,EACrBL,EAASE,GAAS,IAAIZ,CAAa,EACzC,GAAIU,GAAQ,YAAcI,GAAaJ,EAAO,SAAWO,GAAUP,EAAO,WAAaQ,GAAYR,EAAO,SAAW9B,GAAU8B,EAAO,SAAW7B,GAAU6B,EAAO,UAAYM,EAC5K,OAAON,EAAO,KAEhB,IAAMS,EAAO,CAAC,EACd,QAAWC,IAAY,CAAC,GAAGN,CAAS,EAAE,KAAK,CAAClB,EAAGC,IAAMA,EAAE,GAAKD,EAAE,EAAE,EAAG,CACjE,IAAMlB,EAAS2C,GACbrB,EACAoB,EACAL,EACAE,IAASG,EAAS,SAAS,EAC3BF,CACF,EACMvC,EAAOD,EAAS4C,GAAc5C,CAAM,EAAI,OAC9C,GAAIA,GAAUC,EAAM,CAClB,GAAM,CAAE,KAAAsB,EAAM,KAAAC,EAAM,KAAAC,EAAM,KAAAC,CAAK,EAAImB,GAAY7C,CAAM,EACrDyC,EAAK,KAAK,CACR,SAAAC,EACA,OAAA1C,EACA,KAAAC,EAEA,OAAQ,KAAK,KAAKwB,EAAOF,GAAQrB,GAASwB,EAAOF,GAAQrB,CAAM,CACjE,CAAC,CACH,CACF,CACA,OAAA+B,GAAS,IAAIZ,EAAe,CAC1B,UAAAc,EACA,OAAAG,EACA,SAAAC,EACA,OAAAtC,EACA,OAAAC,EACA,QAAAmC,EACA,KAAAG,CACF,CAAC,EACMA,CACT,CACA,SAASK,GAAoB,CAC3B,cAAAxB,EACA,YAAAS,EACA,UAAAK,EACA,eAAAW,EACA,SAAAP,EAAW,GACX,gBAAAQ,EACA,KAAAX,EACA,WAAAY,EACA,WAAAC,EACA,MAAAC,EACA,OAAAC,EACA,QAAAd,EAAU,CACZ,EAAG,CACD,GAAM,CAAE,OAAApC,EAAQ,OAAAC,CAAO,EAAIkC,EACrBgB,EAAqB,CAAC,EACtBC,EAAiB,CAAC,EACxB,OAAW,CAAE,SAAAZ,EAAU,OAAA1C,EAAQ,KAAAC,EAAM,OAAAsD,CAAO,IAAKpB,GAC/Cb,EACAc,EACAC,EACAC,EACAS,EACAP,CACF,EACE,GAAIe,GAAUpF,GAAuB,CACnC,IAAMU,EAAOiB,GAAa4C,EAAS,EAAE,EAC/BzD,EAAQL,EAAeC,CAAI,EAC3B6B,EAAM1B,EAAMC,EAAO,EAAG,CAAC,EACvBuE,EAAOvD,EAAK,EAAIC,EAAS+C,EACzBQ,EAAOxD,EAAK,EAAIE,EAAS+C,EACzBQ,EAAOH,GAAUtE,EAAQ,EAAIN,EAC7BgF,EAAM5D,GAAWC,EAAQC,EAAMC,EAAQC,CAAM,EAC7CyD,EAASnD,GAAWC,EAAKiD,CAAG,EAAIrF,GAChCY,EAAIwE,EAAOF,EAAOlE,EAAMkE,EAAOG,EAAI,EAAIC,EAAQ3E,EAAOkE,EAAQlE,CAAK,EACnEE,EAAIuE,EAAOD,EAAOnE,EACtBmE,EAAOE,EAAI,EAAIC,EACf9E,EACAsE,EAAStE,CACX,EACM+E,EAAO,KAAK,MAAM3E,EAAIsE,EAAMrE,EAAIsE,CAAI,EACtCK,EACJ,GAAID,EAAO,EAAG,CACZ,IAAMlD,EAAM,CAAE,GAAIzB,EAAIsE,GAAQK,EAAM,GAAI1E,EAAIsE,GAAQI,CAAK,EACnDE,EAAWnD,GAAeF,EAAKC,CAAG,EACxCmD,EAAS,CACP,KAAAN,EACA,KAAAC,EACA,OAAQvE,EAAIyB,EAAI,EAAIoD,EACpB,OAAQ5E,EAAIwB,EAAI,EAAIoD,CACtB,CACF,CACAV,EAAmB,KAAK,CACtB,MAAO,CACL,IAAK,OAAOX,EAAS,SAAS,GAC9B,KAAA7D,EACA,EAAAK,EACA,EAAAC,EACA,KAAM,WACN,OAAA2E,CACF,EACA,IAAK9E,EAAMC,EAAOC,EAAGC,CAAC,CACxB,CAAC,CACH,CAEF,IAAM6E,EAAqC,IAAI,IACzCC,EAAa,CAAC,GAAGjB,GAAmB,CAAC,CAAC,EAAE,KAAK,CAAC9B,EAAG,IAAM,EAAE,GAAKA,EAAE,EAAE,EACxE,QAAWgD,KAAOD,EAAY,CAC5B,IAAME,EAAQ/C,GAAU8C,EAAI,QAAS5C,CAAa,EAClD,GAAI,CAAC6C,EACH,SAEF,IAAMC,EAAY,KAAK,IAAID,EAAM,KAAOjE,EAAS+C,EAAY,CAAC,EACxDoB,EAAa,KAAK,IAAIF,EAAM,KAAOjE,EAAS+C,EAAYE,CAAK,EAC7DmB,EAAW,KAAK,IAAIH,EAAM,KAAOhE,EAAS+C,EAAY,CAAC,EACvDqB,EAAc,KAAK,IAAIJ,EAAM,KAAOhE,EAAS+C,EAAYE,CAAM,EACrE,GAAIiB,EAAaD,GAAaG,EAAcD,EAC1C,SAEF,IAAMf,EAAS,KAAK,IAAIc,EAAaD,EAAWG,EAAcD,CAAQ,EAChEzF,EAAOiB,GAAaoE,EAAI,EAAE,EAC1BjF,EAAQL,EAAeC,CAAI,EACjC,GAAI0E,GAAUtE,EAAQ,EAAIN,EAAoB,CAC5C,QAAWgD,KAAMuC,EAAI,QACnBF,EAAmB,IAAIrC,CAAE,EAE3B,IAAMzC,EAAII,GAAO8E,EAAYC,GAAc,EAAGpF,EAAOkE,EAAQlE,CAAK,EAC5DE,EAAIG,GACPgF,EAAWC,GAAe,EAC3BzF,EACAsE,EAAStE,CACX,EACAuE,EAAmB,KAAK,CACtB,MAAO,CACL,IAAK,aAAaa,EAAI,QAAQ,KAAK,GAAG,CAAC,GACvC,KAAArF,EACA,EAAAK,EACA,EAAAC,EACA,KAAM,UACR,EACA,IAAKH,EAAMC,EAAOC,EAAGC,CAAC,CACxB,CAAC,CACH,CACF,CACA,OAAW,CAACwC,EAAIZ,CAAQ,IAAKe,GAAWR,EAAeS,CAAW,EAAG,CACnE,GAAIiC,EAAmB,IAAIrC,CAAE,EAC3B,SAEF,GAAM,CAAE,EAAAzC,EAAG,EAAAC,CAAE,EAAIqF,GAAiBzD,CAAQ,EACpC1B,EAAUF,EAAIgB,EAAS+C,EAC7B,GAAI7D,EAAUP,GAAqB,GAAKO,EAAUP,GAAqBsE,EACrE,SAEF,IAAMe,EAAQrD,GAAYC,EAAUb,EAAQC,CAAM,EAClD,GAAIgE,EAAQpF,GAAuB,EAAIJ,EACrC,SAEF,IAAME,EAAOe,GAASmC,EAAY,IAAIJ,CAAE,CAAC,EACnC1C,EAAQL,EAAeC,CAAI,EACjC,GAAIsF,GAASlF,EAAQ,EAAIN,EAAoB,CAC3C,IAAM8F,EAAUvF,EAAIgB,EAAS+C,EAC7BK,EAAe,KAAK,CAClB,MAAO,CACL,IAAK,QAAQ3B,CAAE,GACf,KAAA9C,EACA,EAAG4F,EACH,EAAGpF,EACH,KAAM,MACR,EACA,IAAKL,EAAMC,EAAOwF,EAASpF,CAAO,CACpC,CAAC,CACH,CACF,CACA,MAAO,CAAE,UAAWgE,EAAoB,MAAOC,CAAe,CAChE,CACA,SAASoB,GAAgBvB,EAAOC,EAAQ,CACtC,OAAO,KAAK,IACV/E,GACA,KAAK,MAAM8E,EAAQC,EAAShF,EAAiB,CAC/C,CACF,CACA,SAASuG,GAAgBC,EAAYC,EAAMC,EAAS,IAAU,CAC5D,IAAMC,EAAS,CAAC,EAChB,OAAW,CAAE,MAAAC,EAAO,IAAAtE,CAAI,IAAKkE,EAAY,CACvC,GAAIG,EAAO,QAAUD,EACnB,MAEED,EAAKnE,CAAG,GACVqE,EAAO,KAAKC,CAAK,CAErB,CACA,OAAOD,CACT,CCxSA,IAAIE,GAAe,cACnB,SAASC,EAAWC,EAAU,CAC5B,IAAMC,EAAQH,GAAa,KAAKE,CAAQ,EACxC,OAAOC,EAAQ,CAAE,KAAMD,EAAS,MAAM,EAAGC,EAAM,KAAK,EAAG,MAAO,CAACA,EAAM,CAAC,CAAE,EAAI,CAAE,KAAMD,EAAU,MAAO,CAAE,CACzG,CACA,SAASE,GAAYC,EAAOC,EAAU,CACpC,IAAMC,EAAc,CAAC,EACfC,EAA6B,IAAI,IACvC,QAAWC,KAAQJ,EAAO,CACxB,IAAMK,EAASC,GAAYF,EAAK,IAAI,EAChCG,EAAMH,EAAK,MACf,QAAWI,KAAQJ,EAAK,MAAO,CAC7B,IAAMK,EAAQ,CACZ,KAAML,EAAK,KACX,OAAAC,EACA,MAAOE,EACP,OAAQC,EAAK,MACf,EACME,EAAWP,EAAW,IAAIK,EAAK,EAAE,EACnCE,EACFA,EAAS,KAAKD,CAAK,EAEnBN,EAAW,IAAIK,EAAK,GAAI,CAACC,CAAK,CAAC,EAEjCF,GAAON,EAASO,EAAK,EAAE,CACzB,CACAN,EAAY,KAAK,CACf,KAAME,EAAK,KACX,OAAAC,EACA,MAAOD,EAAK,MACZ,OAAQG,EAAMH,EAAK,KACrB,CAAC,CACH,CACA,MAAO,CAAE,YAAAF,EAAa,WAAAC,CAAW,CACnC,CACA,SAASQ,GAAoBT,EAAaU,EAAW,CAInD,OAHcV,EAAY,KACvBW,GAAMA,EAAE,SAAWD,GAAaC,EAAE,OAASD,CAC9C,GACgBV,EAAY,CAAC,CAC/B,CACA,IAAIY,GAAqB,EACzB,SAASC,GAAWC,EAAMC,EAAQC,EAAW,CAC3C,IAAIC,EAAWH,EACf,GAAIC,GAAUA,EAAO,OAAS,EAAG,CAC/B,IAAMG,EAASH,EAAO,KAAMI,GAAMA,EAAE,OAASH,CAAS,GAAKD,EAAO,CAAC,EACnEE,EAAW,CACT,GAAGH,EACH,OAAQ,CACN,QAASI,EAAO,KAChB,MAAOA,EAAO,MACd,KAAMA,EAAO,OAASF,EAAYI,GAAiBR,GACnD,OAAQM,EAAO,MACjB,EACA,QAAS,CAAC,GAAG,IAAI,IAAIH,EAAO,IAAKI,GAAMA,EAAE,MAAM,CAAC,CAAC,EAAE,KAAK,CAC1D,CACF,CACA,OAAOF,CACT,CACA,SAASI,GAAgBC,EAAOZ,EAAW,CACzC,GAAM,CAAE,YAAAV,EAAa,WAAAC,CAAW,EAAIqB,EAC9BN,EAAYhB,GAAeC,EAAaQ,GAAoBT,EAAaU,CAAS,EAAI,OAC5F,OAAOM,GAAaf,EAAa,CAC/B,GAAGqB,EACH,MAAOA,EAAM,MAAM,IAChBR,GAASD,GAAWC,EAAMb,EAAW,IAAIa,EAAK,IAAI,EAAGE,EAAU,IAAI,CACtE,EACA,WAAY,QACZ,cAAeA,EAAU,IAC3B,EAAIM,CACN,CACA,SAASC,GAAYD,EAAOZ,EAAW,CACrC,OAAOY,EAAM,aAAe,OAASA,EAAQD,GAAgBC,EAAOZ,CAAS,CAC/E,CACA,SAASc,GAAYF,EAAOG,EAAM,CAChC,GAAI,CAACH,EAAM,YACT,OAEF,IAAMvB,EAAW,IAAI,IAAIuB,EAAM,MAAM,IAAKI,GAAM,CAACA,EAAE,GAAIA,EAAE,MAAM,CAAC,CAAC,EAC3DC,EAAK,CAACC,EAAKC,EAAMD,EAAI,SAAW,CACpC,IAAIE,EAAM,EACV,QAAS,EAAI,EAAG,EAAID,EAAK,IACvBC,GAAO/B,EAAS,IAAI6B,EAAI,CAAC,CAAC,GAAK,EAEjC,OAAOE,CACT,EACMC,EAA2B,IAAI,IACrC,QAAW7B,KAAQoB,EAAM,OAAS,CAAC,EAAG,CACpC,IAAMU,EAAStC,EAAWQ,EAAK,IAAI,EAAE,KACrC6B,EAAS,IAAIC,EAAQ,CAAC,GAAGD,EAAS,IAAIC,CAAM,GAAK,CAAC,EAAG9B,CAAI,CAAC,CAC5D,CACA,OAAOoB,EAAM,YAAY,IAAKW,GAAM,CAClC,IAAMC,EAASH,EAAS,IAAIE,EAAE,IAAI,EAC5B/B,EAAOgC,GAAQ,SAAW,EAAIA,EAAO,CAAC,EAAI,OAC1CC,EAAUjC,GAAQuB,EAAK,IAAIvB,EAAK,IAAI,EAC1C,OAAOA,GAAQiC,EAAU,CACvB,GAAGF,EACH,MAAOA,EAAE,MAAQN,EAAGzB,EAAK,QAASiC,EAAQ,KAAK,EAC/C,OAAQR,EAAGQ,EAAQ,OAAO,CAC5B,EAAIF,CACN,CAAC,CACH,CClGA,SAASG,GAAQC,EAAM,CACrB,IAAIC,EAAO,EACX,QAASC,EAAI,EAAGA,EAAIF,EAAK,OAAQE,IAC/BD,EAAOD,EAAK,WAAWE,CAAC,IAAMD,GAAQ,GAAKA,GAE7C,OAAO,KAAK,IAAIA,EAAO,GAAG,CAC5B,CACA,SAASE,GAAUC,EAAOC,EAAO,CAC/B,OAAOD,EAAQ,IAAMC,CACvB,CACA,IAAIC,GAAkB,GAClBC,GAAiB,GACjBC,GAAkB,GACtB,SAASC,GAAkBC,EAAW,CACpC,OAAOA,EAAY,GAAKA,GAAaF,EACvC,CACA,SAASG,GAAaP,EAAOC,EAAO,CAClC,MAAO,OAAOF,GAAUC,EAAOC,CAAK,CAAC,KAAKC,GAAkB,GAAG,MAAMC,GAAiB,GAAG,IAC3F,CACA,SAASK,GAAiBR,EAAOC,EAAO,CAEtC,MAAO,cADWA,EAAQ,EAAI,GAAK,GAAKD,GAASC,EAAQ,GAAK,EAChC,IAChC,CACA,SAASQ,GAAWb,EAAM,CACxB,IAAMc,EAAQC,EAAWf,CAAI,EAAE,KAAK,MAAM,GAAG,EACvCgB,EAAOF,EAAM,KAAK,GAAG,EAC3B,GAAIA,EAAM,QAAU,GAAKG,GAAgBH,EAAM,CAAC,CAAC,EAAG,CAClD,IAAMI,EAASJ,EAAM,MAAM,CAAC,EAAE,KAAK,GAAG,EACtC,MAAO,CAACI,EAAQA,EAAQF,CAAI,CAC9B,CACA,MAAO,CAACF,EAAM,CAAC,EAAGA,EAAM,MAAM,EAAG,CAAC,EAAE,KAAK,GAAG,EAAGE,CAAI,CACrD,CACA,SAASG,GAAYnB,EAAMoB,EAAO,CAChC,GAAM,CAAE,MAAAC,CAAM,EAAIN,EAAWf,CAAI,EACjC,OAAOoB,EAAM,IAAKE,GAAM,GAAGA,CAAC,KAAKC,GAAYF,CAAK,CAAC,EAAE,CACvD,CACA,SAASG,GAAWC,EAAOC,EAAQ,CACjC,IAAMC,EAA0B,IAAI,IACpCF,EAAM,QAAQ,CAACG,EAAM1B,IAAM,CACpByB,EAAQ,IAAIC,EAAK,IAAI,GACxBD,EAAQ,IAAIC,EAAK,KAAM1B,CAAC,CAE5B,CAAC,EACD,IAAM2B,EAAU,CAAC,GAAGF,CAAO,EAAE,IAAI,CAAC,CAAC3B,EAAME,CAAC,KAAO,CAAE,KAAAF,EAAM,EAAAE,CAAE,EAAE,EACvD4B,EAAQD,EAAQ,IAAKE,GAAMlB,GAAWkB,EAAE,IAAI,CAAC,EAC7CC,EAAa,CAAC,EAAG,EAAG,CAAC,EAAE,QAASV,GAAM,CAC1CO,EAAQ,IAAI,CAACI,EAAGC,IAAMJ,EAAMI,CAAC,EAAEZ,CAAC,CAAC,EACjCO,EAAQ,IAAI,CAACE,EAAGG,IAAMf,GAAYY,EAAE,KAAMD,EAAMI,CAAC,CAAC,EAAEZ,CAAC,CAAC,CACxD,CAAC,EAIKa,EAHWH,EAAW,KACzBI,GAAY,IAAI,IAAIA,CAAO,EAAE,OAASP,EAAQ,MACjD,GAC2BG,EAAW,GAAG,EAAE,EAC3C,OAAOH,EAAQ,IAAI,CAAC,CAAE,KAAA7B,EAAM,EAAAE,CAAE,EAAGgC,KAAO,CACtC,KAAAlC,EACA,MAAOmC,EAAOD,CAAC,EACf,MAAOR,IAASxB,CAAC,GAAKS,GAAaT,EAAGuB,EAAM,MAAM,CACpD,EAAE,CACJ,CACA,SAASY,GAAaR,EAAS,CAC7B,IAAMS,EAAuB,IAAI,IACjC,OAAO,IAAI,IACT,CAAC,GAAGT,CAAO,EAAE,KAAK,CAACU,EAAGC,IAAMD,EAAE,MAAM,cAAcC,EAAE,KAAK,CAAC,EAAE,IAAKT,GAAM,CACrE,IAAMU,GAAKH,EAAK,IAAIP,EAAE,KAAK,GAAK,GAAK,EACrC,OAAAO,EAAK,IAAIP,EAAE,MAAOU,CAAC,EACZ,CAACV,EAAE,KAAMU,EAAI,EAAI,GAAGV,EAAE,KAAK,KAAKU,CAAC,IAAMV,EAAE,KAAK,CACvD,CAAC,CACH,CACF,CC9EA,IAAIW,GAAc,CAChB,CACE,MAAO,QACP,MAAO,WACP,YAAa,yIACf,EACA,CACE,MAAO,UACP,MAAO,UACP,YAAa,gCACf,CACF,EACIC,GAAoBD,GAAY,IAAKE,GAAMA,EAAE,KAAK,EAClDC,GAAa,GACbC,GAAa,EACjB,SAASC,GAAUC,EAAO,CACxB,IAAIC,EAAW,EACXC,EAAS,EACb,QAAWC,KAAQH,EAAM,MACvBC,GAAYE,EAAK,MAAQA,EAAK,OAC9BD,GAAUC,EAAK,OAEjB,OAAOD,EAAS,EAAID,EAAWC,EAAS,CAC1C,CACA,SAASE,GAAiBD,EAAME,EAAM,CACpC,MAAI,EAAEA,EAAO,IAAM,EAAEF,EAAK,MAAQ,GACzB,EAEF,KAAK,IACVL,GACA,KAAK,IAAID,GAAY,KAAK,KAAKM,EAAK,MAAQE,CAAI,CAAC,CACnD,CACF,CACA,SAASC,GAAYH,EAAMI,EAAiBC,EAAWH,EAAM,CAC3D,OAAOE,GAAmBC,IAAc,QAAUJ,GAAiBD,EAAME,CAAI,EAAI,EACnF,CACA,SAASI,GAAeF,EAAiBC,EAAW,CAClD,OAAOD,GAAmBC,IAAc,QAAUV,GAAa,EACjE,CACA,SAASY,GAAQV,EAAOW,EAAUJ,EAAiBC,EAAW,CAC5D,IAAMH,EAAOL,EAAQD,GAAUC,CAAK,EAAI,EACxC,MAAO,CACL,eAAgBS,GAAeF,EAAiBC,CAAS,EAAI,EAC7D,YAAcI,GAAO,CACnB,IAAMT,EAAOQ,GAAU,IAAIC,CAAE,EAC7B,OAAOT,EAAOG,GAAYH,EAAMI,EAAiBC,EAAWH,CAAI,EAAI,EAAIE,EAAkB,CAC5F,CACF,CACF",
6
+ "names": ["ROW_HEIGHT_PX", "LABEL_PX", "LABEL_CHAR_PX", "LABEL_PAD", "labelWidth", "text", "overlaps", "a", "b", "offFrame", "box", "frame", "insideFrame", "occupancy", "reserved", "placed", "p", "placeLabels", "candidates", "take", "out", "row", "place", "w", "direction", "tries", "y", "svgPath", "points", "round", "v", "p", "i", "projectLine", "x1", "y1", "x2", "y2", "distance", "d", "vx", "vy", "curvePointAt", "c", "t", "u", "a", "b", "e", "curveMidpoint", "curves", "mid", "curveBounds", "minX", "minY", "maxX", "maxY", "subCurve", "t0", "t1", "p0", "p1", "dt", "d0", "curveTangentAt", "d1", "dashCurves", "dashWorld", "lengths", "total", "spans", "out", "from", "to", "dash", "start", "k", "length", "end", "translateCurves", "dx", "dy", "attachment", "segments", "side", "last", "TANGENT_SPAN_FACTOR", "MAX_TANGENT", "ownStrand", "id", "strandSides", "edge", "own", "strand", "spanOf", "min", "max", "s", "distanceToSpan", "x", "span", "facingSide", "other", "tieBreak", "startGap", "endGap", "facingSides", "fromSegments", "toSegments", "laidSides", "heldFacingSides", "byTo", "sides", "APEX_FRACTION", "BOW_CLEARANCE", "ALONG_FRACTION", "MAX_ROW_BOW_PX", "ROW_HEIGHT_PX", "bowAround", "p1x", "p1y", "p2x", "p2y", "toward", "maxBow", "chord", "ux", "uy", "reach", "minAlong", "maxAlong", "perp", "along", "uncapped", "size", "yToXOf", "scaleX", "scaleY", "PATH_RIBBON_SPACING", "drawnDirection", "yToX", "len", "pathRibbonOffsets", "count", "axis", "spacing", "dir", "offsets", "scaleYOf", "unscaleYOf", "SELF_LOOP_MIN_PX", "SELF_LOOP_MAX_PX", "selfLoopReach", "scale", "nodePx", "selfLinkOf", "edgeJoinOf", "stranded", "self", "hairpinCurves", "attach", "offsetX", "offsetY", "at", "inward", "px", "py", "nearX", "nearY", "apexX", "apexY", "sideX", "sideY", "computeEdgeCurves", "join", "bypassed", "maxBowIn", "loop", "fromAttach", "toAttach", "fromEnd", "toStart", "segDirX", "segDirY", "ext", "perpX", "perpY", "midX", "midY", "cp1x", "cp1y", "cp2x", "cp2y", "fromPrev", "toNext", "dist", "tangentProj", "prev", "towardX", "towardY", "towardToX", "towardToY", "cx1", "cy1", "cx2", "cy2", "bulge", "chordLen", "bulgeX", "bulgeY", "spreadX", "spreadY", "nearerEnd", "routedEdgeCurves", "route", "tangent", "q", "next", "ta", "tb", "flip", "strand", "mergeRuns", "graph", "alone", "sides", "strandSides", "at", "attach", "id", "side", "ei", "key", "list", "edge", "joinAfter", "a", "out", "joined", "runOf", "runs", "node", "into", "pred", "run", "next", "byId", "n", "nodes", "members", "backbone", "isBackbone", "first", "sum", "seen", "edges", "from", "to", "ownStrand", "splitRuns", "positions", "weightOf", "line", "arc", "arcPrefix", "total", "weights", "m", "weightSum", "b", "member", "k", "share", "slice", "polylineSlice", "polylineMidpoint", "pointAt", "i", "s", "span", "t", "points", "MIN_DELETION_BP", "bypassedPoints", "nodePositions", "bypassed", "id", "deletionArcCurves", "deletion", "axis", "route", "stranded", "from", "to", "routedEdgeCurves", "strandSides", "computeEdgeCurves", "edgeJoinOf", "backboneBySequence", "graph", "bySequence", "node", "isBackbone", "list", "a", "b", "bypassedNodes", "nodes", "start", "end", "i", "firstNodeAtOrAfter", "skipsBetween", "edge", "forwards", "fromStrand", "toStrand", "leavesRight", "arrivesLeft", "deletionEdges", "byId", "n", "backbone", "found", "edgeIndex", "left", "right", "bp", "refName", "closableDeletions", "deletions", "parent", "root", "r", "join", "ra", "rb", "candidates", "d", "e", "ei", "drawings", "deletionDrawing", "show", "byShow", "drawing", "hidden", "MIN_DELETION_LABEL_PX", "PX_PER_NODE_LABEL", "MIN_NODE_LABELS", "LEADER_GAP_PX", "LABEL_CHAR_PX", "LABEL_PAD_PX", "LABEL_HEIGHT_PX", "LABEL_GAP_PX", "MAX_LABEL_OVERHANG", "labelHalfWidth", "text", "LABEL_HALF_HEIGHT", "MIN_LABEL_HALF_WIDTH", "boxAt", "halfW", "x", "y", "rowLabelBox", "screenY", "clamp", "v", "lo", "hi", "groupDigits", "n", "formatBp", "bp", "deletionText", "arcOutward", "curves", "apex", "scaleX", "scaleY", "first", "last", "dx", "dy", "len", "boxSupport", "box", "dir", "boxRayCrossing", "halfH", "drawnLength", "segments", "total", "i", "a", "b", "runBounds", "nodeIds", "nodePositions", "minX", "minY", "maxX", "maxY", "id", "p", "nodeOrderCache", "labelOrder", "nodeLengths", "cached", "order", "arcCache", "arcPlacements", "deletions", "axis", "version", "routes", "stranded", "arcs", "deletion", "deletionArcCurves", "curveMidpoint", "curveBounds", "sizeLabelCandidates", "deletionRoutes", "alleleDeletions", "translateX", "translateY", "width", "height", "deletionCandidates", "nodeCandidates", "extent", "arcX", "arcY", "fits", "bow", "offset", "away", "leader", "crossing", "labelledByDeletion", "alleleRuns", "run", "drawn", "shownLeft", "shownRight", "shownTop", "shownBottom", "polylineMidpoint", "screenX", "nodeLabelBudget", "placeSizeLabels", "candidates", "take", "budget", "labels", "label", "RANGE_SUFFIX", "pathOrigin", "pathName", "match", "surveyPaths", "paths", "lengthOf", "anchorPaths", "pathVisits", "path", "sample", "panSNSample", "pos", "step", "visit", "existing", "chooseReferencePath", "preferred", "p", "OFF_REFERENCE_RANK", "anchorNode", "node", "visits", "reference", "anchored", "anchor", "v", "REFERENCE_RANK", "anchorFromPaths", "graph", "anchorGraph", "trimOrigins", "kept", "n", "bp", "ids", "end", "sum", "byOrigin", "origin", "o", "pieces", "stretch", "nameHue", "name", "hash", "i", "pathHueAt", "index", "count", "PATH_SATURATION", "PATH_LIGHTNESS", "MAX_PATH_COLORS", "pathColorsLegible", "pathCount", "pathCssColor", "pathGreyCssColor", "labelTiers", "parts", "pathOrigin", "full", "isGenericSample", "contig", "offsetTiers", "tiers", "start", "t", "groupDigits", "pathLegend", "paths", "colors", "firstOf", "path", "entries", "named", "e", "candidates", "_", "k", "labels", "labels2", "walkLabelsOf", "seen", "a", "b", "n", "NODE_WIDTHS", "NODE_WIDTH_VALUES", "w", "MIN_FACTOR", "MAX_FACTOR", "meanDepth", "graph", "weighted", "length", "node", "depthWidthFactor", "mean", "nodeWidthPx", "contigThickness", "nodeWidth", "maxNodeWidthPx", "nodeInk", "nodeById", "id"]
7
+ }