jbrowse-plugin-msaview 5.2.0 → 5.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/dist/MsaViewPanel/model.d.ts +25 -29
  2. package/dist/chunks/AboutDialog-447TIFAW.js +2 -0
  3. package/dist/chunks/{AboutDialog-IRBPUPJK.js.map → AboutDialog-447TIFAW.js.map} +4 -4
  4. package/dist/chunks/AnnotationFileDialog-S3N5EHHE.js +2 -0
  5. package/dist/chunks/AnnotationFileDialog-S3N5EHHE.js.map +7 -0
  6. package/dist/chunks/ExportSVGDialog-7ZHKKQ7W.js +2 -0
  7. package/dist/chunks/ExportSVGDialog-7ZHKKQ7W.js.map +7 -0
  8. package/dist/chunks/{FeatureDialog-ZBX3XQZ5.js → FeatureDialog-EEOGSLOG.js} +1 -1
  9. package/dist/chunks/{FeatureDialog-ZBX3XQZ5.js.map → FeatureDialog-EEOGSLOG.js.map} +1 -1
  10. package/dist/chunks/HelpDialog-TCWNBZOV.js +2 -0
  11. package/dist/chunks/HelpDialog-TCWNBZOV.js.map +7 -0
  12. package/dist/chunks/{LaunchMsaViewDialog-GJAUPGFC.js → LaunchMsaViewDialog-R6CNRASN.js} +2 -2
  13. package/dist/chunks/{LaunchMsaViewDialog-GJAUPGFC.js.map → LaunchMsaViewDialog-R6CNRASN.js.map} +1 -1
  14. package/dist/chunks/MetadataDialog-MNSI6NEW.js +2 -0
  15. package/dist/chunks/{MetadataDialog-KZWQFRF7.js.map → MetadataDialog-MNSI6NEW.js.map} +2 -2
  16. package/dist/chunks/MsaViewPanel-R2WAER5O.js +2 -0
  17. package/dist/chunks/{MsaViewPanel-RUZAKFCB.js.map → MsaViewPanel-R2WAER5O.js.map} +1 -1
  18. package/dist/chunks/{TrackInfoDialog-IFIG77WO.js → TrackInfoDialog-W2F77IPG.js} +2 -2
  19. package/dist/chunks/{TrackInfoDialog-IFIG77WO.js.map → TrackInfoDialog-W2F77IPG.js.map} +1 -1
  20. package/dist/chunks/TreeNodeInfoDialog-T5XMPG3R.js +2 -0
  21. package/dist/chunks/{TreeNodeInfoDialog-VRCVIF26.js.map → TreeNodeInfoDialog-T5XMPG3R.js.map} +2 -2
  22. package/dist/chunks/chunk-6EOYBBT4.js +2 -0
  23. package/dist/chunks/chunk-6EOYBBT4.js.map +7 -0
  24. package/dist/chunks/chunk-A63PUWQZ.js +6 -0
  25. package/dist/chunks/chunk-A63PUWQZ.js.map +7 -0
  26. package/dist/chunks/{chunk-NI3VGKQP.js → chunk-BAM67QHH.js} +2 -2
  27. package/dist/chunks/chunk-CSCUNTGJ.js +18 -0
  28. package/dist/chunks/chunk-CSCUNTGJ.js.map +7 -0
  29. package/dist/chunks/chunk-DEFUNIWW.js +8 -0
  30. package/dist/chunks/chunk-DEFUNIWW.js.map +7 -0
  31. package/dist/chunks/{chunk-YOTSFJMU.js → chunk-ERCMNTEQ.js} +1 -1
  32. package/dist/chunks/{chunk-YOTSFJMU.js.map → chunk-ERCMNTEQ.js.map} +1 -1
  33. package/dist/chunks/{chunk-GDFVLZYX.js → chunk-FEUZKN5V.js} +2 -2
  34. package/dist/chunks/{chunk-GDFVLZYX.js.map → chunk-FEUZKN5V.js.map} +1 -1
  35. package/dist/chunks/{chunk-GIHMPOCO.js → chunk-JF6CW6MO.js} +1 -1
  36. package/dist/chunks/{chunk-GIHMPOCO.js.map → chunk-JF6CW6MO.js.map} +1 -1
  37. package/dist/chunks/chunk-K55ZVN73.js +5 -0
  38. package/dist/chunks/chunk-K55ZVN73.js.map +7 -0
  39. package/dist/chunks/chunk-L6CBIH6H.js +2 -0
  40. package/dist/chunks/chunk-L6CBIH6H.js.map +7 -0
  41. package/dist/chunks/{chunk-F3EC6OCO.js → chunk-NWHZOZMG.js} +1 -1
  42. package/dist/chunks/{chunk-F3EC6OCO.js.map → chunk-NWHZOZMG.js.map} +1 -1
  43. package/dist/chunks/chunk-OVAXNTPN.js +2 -0
  44. package/dist/chunks/chunk-OVAXNTPN.js.map +7 -0
  45. package/dist/chunks/chunk-TSHN6J7U.js +2 -0
  46. package/dist/chunks/chunk-TSHN6J7U.js.map +7 -0
  47. package/dist/chunks/{chunk-H6IQBAW7.js → chunk-WAPIOD25.js} +5 -5
  48. package/dist/chunks/{chunk-H6IQBAW7.js.map → chunk-WAPIOD25.js.map} +1 -1
  49. package/dist/chunks/chunk-XVNCZQMR.js +2 -0
  50. package/dist/chunks/{chunk-ZCT7RD24.js.map → chunk-XVNCZQMR.js.map} +1 -1
  51. package/dist/chunks/{dist-CMWKVHC7.js → dist-GXYZN4ZR.js} +2 -2
  52. package/dist/chunks/{dist-CMWKVHC7.js.map → dist-GXYZN4ZR.js.map} +3 -3
  53. package/dist/chunks/dist-N4ZJK63Q.js +2 -0
  54. package/dist/chunks/{model-VE7IYWNU.js → model-TCPB6WNJ.js} +2 -2
  55. package/dist/chunks/{model-VE7IYWNU.js.map → model-TCPB6WNJ.js.map} +1 -1
  56. package/dist/chunks/renderToSvg-53FEV6IJ.js +2 -0
  57. package/dist/jbrowse-plugin-msaview.esm.js +2 -2
  58. package/dist/jbrowse-plugin-msaview.esm.js.map +1 -1
  59. package/dist/version.d.ts +1 -1
  60. package/dist/version.js +1 -1
  61. package/package.json +2 -2
  62. package/src/version.ts +1 -1
  63. package/dist/chunks/AboutDialog-IRBPUPJK.js +0 -2
  64. package/dist/chunks/AnnotationFileDialog-FCYYZ4JN.js +0 -2
  65. package/dist/chunks/AnnotationFileDialog-FCYYZ4JN.js.map +0 -7
  66. package/dist/chunks/ExportSVGDialog-TYYPI6VB.js +0 -2
  67. package/dist/chunks/ExportSVGDialog-TYYPI6VB.js.map +0 -7
  68. package/dist/chunks/MetadataDialog-KZWQFRF7.js +0 -2
  69. package/dist/chunks/MsaViewPanel-RUZAKFCB.js +0 -2
  70. package/dist/chunks/TreeNodeInfoDialog-VRCVIF26.js +0 -2
  71. package/dist/chunks/chunk-F726IWCW.js +0 -2
  72. package/dist/chunks/chunk-F726IWCW.js.map +0 -7
  73. package/dist/chunks/chunk-NMYD2GWF.js +0 -18
  74. package/dist/chunks/chunk-NMYD2GWF.js.map +0 -7
  75. package/dist/chunks/chunk-QQ5LZUIO.js +0 -11
  76. package/dist/chunks/chunk-QQ5LZUIO.js.map +0 -7
  77. package/dist/chunks/chunk-QUWPHTZQ.js +0 -2
  78. package/dist/chunks/chunk-QUWPHTZQ.js.map +0 -7
  79. package/dist/chunks/chunk-ZCT7RD24.js +0 -2
  80. package/dist/chunks/dist-R73J3CC3.js +0 -2
  81. package/dist/chunks/renderToSvg-VDXAB7TT.js +0 -2
  82. /package/dist/chunks/{chunk-NI3VGKQP.js.map → chunk-BAM67QHH.js.map} +0 -0
  83. /package/dist/chunks/{dist-R73J3CC3.js.map → dist-N4ZJK63Q.js.map} +0 -0
  84. /package/dist/chunks/{renderToSvg-VDXAB7TT.js.map → renderToSvg-53FEV6IJ.js.map} +0 -0
@@ -128,7 +128,7 @@ export default function stateModelFactory(): import("@jbrowse/mobx-state-tree").
128
128
  colorSchemeName: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<string>, [undefined]>;
129
129
  customColorScheme: import("@jbrowse/mobx-state-tree").IType<Record<string, string> | undefined, Record<string, string> | undefined, Record<string, string> | undefined>;
130
130
  showColumnStats: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
131
- msaFormat: import("@jbrowse/mobx-state-tree").IMaybe<import("@jbrowse/mobx-state-tree").ISimpleType<import("msa-parsers").MSAFormat>>;
131
+ msaFormat: import("@jbrowse/mobx-state-tree").IMaybe<import("@jbrowse/mobx-state-tree").ISimpleType<import("react-msaview").MSAFormat>>;
132
132
  }, "id" | "type" | "allowedGappyness" | "clades" | "colWidth" | "collapsed" | "columnTracks" | "currentAlignment" | "data" | "drawMsaLetters" | "encodings" | "features" | "gffFilehandle" | "height" | "hideGaps" | "highlightColumns" | "highlights" | "msaFilehandle" | "region" | "relativeTo" | "residueMappings" | "rotated" | "rowHeight" | "rowPanels" | "scrollX" | "scrollY" | "scrollZoom" | "scrollZoomAxis" | "selection" | "showDomainLegend" | "showDomains" | "showOnly" | "subFeatureRows" | "trackHeights" | "treeFilehandle" | "treeMetadataFilehandle" | "treeRoot" | "turnedOffFeatures" | "turnedOffTracks"> & {
133
133
  id: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<string>, [undefined]>;
134
134
  showDomains: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
@@ -543,17 +543,17 @@ export default function stateModelFactory(): import("@jbrowse/mobx-state-tree").
543
543
  setDrawNodeBubbles(arg: boolean): void;
544
544
  setDrawNodeLabels(arg: boolean): void;
545
545
  setShowTreeOverview(arg: boolean): void;
546
- setOverviewHeight(n: number): void;
547
546
  setDrawLabels(arg: boolean): void;
548
547
  } & {
549
548
  setColorSchemeName(name: string): void;
550
549
  setCustomColorScheme(map?: Record<string, string>): void;
551
550
  setBgColor(arg: boolean): void;
552
551
  setShowColumnStats(arg: boolean): void;
553
- setMSAFormat(arg?: import("msa-parsers").MSAFormat): void;
552
+ setMSAFormat(arg?: import("react-msaview").MSAFormat): void;
554
553
  } & {
555
554
  headerHeight: number;
556
555
  hideHeader: boolean;
556
+ importForm: boolean;
557
557
  status: {
558
558
  msg: string;
559
559
  onCancel?: () => void;
@@ -581,7 +581,7 @@ export default function stateModelFactory(): import("@jbrowse/mobx-state-tree").
581
581
  dismissedWarnings: string[];
582
582
  resetCount: number;
583
583
  hostCarriesData: boolean;
584
- annotations: import("msa-parsers").Annotation[];
584
+ annotations: import("react-msaview").Annotation[];
585
585
  } & {
586
586
  drawRelativeTo(id: string | undefined): void;
587
587
  setHideGaps(arg: boolean): void;
@@ -632,8 +632,7 @@ export default function stateModelFactory(): import("@jbrowse/mobx-state-tree").
632
632
  setGFF(result?: string): void;
633
633
  } & {
634
634
  readonly hideGapsEffective: boolean;
635
- readonly realAllowedGappyness: number;
636
- readonly allAnnotations: import("msa-parsers").Annotation[];
635
+ readonly allAnnotations: import("react-msaview").Annotation[];
637
636
  readonly actuallyShowDomains: boolean;
638
637
  readonly hostRestoresData: boolean;
639
638
  readonly viewInitialized: boolean;
@@ -661,7 +660,7 @@ export default function stateModelFactory(): import("@jbrowse/mobx-state-tree").
661
660
  readonly rowData: Record<string, Record<string, string> | undefined>;
662
661
  rowDataOf(name: string): Record<string, string> | undefined;
663
662
  readonly rowFields: string[];
664
- readonly MSA: import("msa-parsers").MSAParserType | null;
663
+ readonly MSA: import("react-msaview").MSAParserType | null;
665
664
  readonly numColumns: number;
666
665
  readonly inputTree: import("react-msaview").NodeWithIds;
667
666
  readonly tree: import("react-msaview").NodeWithIds;
@@ -690,7 +689,7 @@ export default function stateModelFactory(): import("@jbrowse/mobx-state-tree").
690
689
  readonly treeNewick: string;
691
690
  readonly treeOverviewHeight: number;
692
691
  readonly treeOverviewLayout: {
693
- root: import("react-msaview").HierarchyNode<import("react-msaview").NodeWithIds>;
692
+ root: import("react-msaview").LaidOutNode<import("react-msaview").NodeWithIds>;
694
693
  numTips: number;
695
694
  maxDepthToLeaf: number;
696
695
  showBranchLen: boolean;
@@ -713,6 +712,7 @@ export default function stateModelFactory(): import("@jbrowse/mobx-state-tree").
713
712
  readonly rows: [string, string][];
714
713
  readonly numRows: number;
715
714
  seqPosIndex(rowName: string): Int32Array | undefined;
715
+ rowSequence(name: string): string | undefined;
716
716
  readonly rowMap: Map<string, string>;
717
717
  readonly columns: Map<string, string>;
718
718
  readonly columns2d: string[];
@@ -736,7 +736,6 @@ export default function stateModelFactory(): import("@jbrowse/mobx-state-tree").
736
736
  readonly totalHeight: number;
737
737
  readonly leaves: import("react-msaview").HierarchyNode<import("react-msaview").NodeWithIds>[];
738
738
  readonly rootToTipLength: number;
739
- readonly maxBranchLength: number;
740
739
  readonly pxPerBranchLength: number;
741
740
  readonly maxDepthToLeaf: number;
742
741
  readonly allBranchesLength0: boolean;
@@ -792,9 +791,9 @@ export default function stateModelFactory(): import("@jbrowse/mobx-state-tree").
792
791
  readonly topBandHeight: number;
793
792
  readonly msaAreaHeight: number;
794
793
  readonly totalTrackAreaHeight: number;
795
- readonly annotationTypes: Map<string, import("msa-parsers").Annotation>;
796
- readonly filteredAnnotations: import("msa-parsers").Annotation[];
797
- readonly annotationsByRow: Record<string, import("msa-parsers").Annotation[]>;
794
+ readonly annotationTypes: Map<string, import("react-msaview").Annotation>;
795
+ readonly filteredAnnotations: import("react-msaview").Annotation[];
796
+ readonly annotationsByRow: Record<string, import("react-msaview").Annotation[]>;
798
797
  } & {
799
798
  readonly showVerticalScrollbar: boolean;
800
799
  } & {
@@ -822,17 +821,12 @@ export default function stateModelFactory(): import("@jbrowse/mobx-state-tree").
822
821
  replaceTree(newick: string): void;
823
822
  resetZoom(): void;
824
823
  zoomAtCenter(scaleFactor: number, axis?: "both" | "horizontal" | "vertical"): void;
825
- zoomOutHorizontal(): void;
826
- zoomInHorizontal(): void;
827
- zoomInVertical(): void;
828
- zoomOutVertical(): void;
829
824
  zoomIn(): void;
830
825
  zoomOut(): void;
831
826
  zoomToPos(scaleFactor: number, offsetX: number, offsetY: number, axis?: "both" | "horizontal" | "vertical"): void;
832
827
  doScrollY(deltaY: number): void;
833
828
  setScrollY(n: number): void;
834
- setAnnotations(annotations: import("msa-parsers").Annotation[]): void;
835
- setDomains(data?: Record<string, import("msa-parsers").InterProScanResults>): void;
829
+ setAnnotations(annotations: import("react-msaview").Annotation[]): void;
836
830
  applyGFFText(gffText: string): void;
837
831
  doScrollX(deltaX: number): void;
838
832
  setScrollX(n: number): void;
@@ -851,24 +845,24 @@ export default function stateModelFactory(): import("@jbrowse/mobx-state-tree").
851
845
  readonly hoveredCell: import("react-msaview").Cell | undefined;
852
846
  readonly clickedCell: import("react-msaview").Cell | undefined;
853
847
  readonly viewport: import("react-msaview").Viewport | undefined;
854
- readonly segmentDomainTypes: import("msa-parsers").Annotation[];
855
- readonly categoricalDomainTypes: import("msa-parsers").Annotation[];
848
+ readonly segmentDomainTypes: import("react-msaview").Annotation[];
849
+ readonly categoricalDomainTypes: import("react-msaview").Annotation[];
856
850
  readonly fillPalette: {
857
851
  [x: string]: string;
858
852
  };
859
853
  readonly featureFillEncoding: import("react-msaview").ResolvedEncoding | undefined;
860
- readonly featureColors: Map<import("msa-parsers").Annotation, {
854
+ readonly featureColors: Map<import("react-msaview").Annotation, {
861
855
  fill: string;
862
856
  stroke: string;
863
857
  }>;
864
- readonly featureLabels: Map<import("msa-parsers").Annotation, string> | undefined;
858
+ readonly featureLabels: Map<import("react-msaview").Annotation, string> | undefined;
865
859
  readonly segmentLabels: Map<string, string>;
866
- readonly visibleDomainTypes: import("msa-parsers").Annotation[];
860
+ readonly visibleDomainTypes: import("react-msaview").Annotation[];
867
861
  readonly legends: import("react-msaview").Legend[];
868
862
  readonly domainUnderline: boolean;
869
863
  readonly domainBands: Map<string, import("react-msaview").DomainBand[]>;
870
864
  readonly domainBandsByStart: Map<string, import("react-msaview").DomainBand[]>;
871
- readonly mouseOverDomains: import("msa-parsers").Annotation[];
865
+ readonly mouseOverDomains: import("react-msaview").Annotation[];
872
866
  readonly referenceRowIndex: number | undefined;
873
867
  readonly hoveredRowIndices: number[];
874
868
  readonly highlightedColumnRuns: {
@@ -909,13 +903,13 @@ export default function stateModelFactory(): import("@jbrowse/mobx-state-tree").
909
903
  x: "column" | "position";
910
904
  kind: "features";
911
905
  field?: string | undefined;
912
- colors: Map<import("msa-parsers").Annotation, {
906
+ colors: Map<import("react-msaview").Annotation, {
913
907
  fill: string;
914
908
  stroke: string;
915
909
  }>;
916
910
  legend: import("react-msaview").LegendEntry[];
917
911
  legendTitle?: string | undefined;
918
- labels?: Map<import("msa-parsers").Annotation, string> | undefined;
912
+ labels?: Map<import("react-msaview").Annotation, string> | undefined;
919
913
  })[];
920
914
  readonly resolvedRowPanels: import("react-msaview").ResolvedRowPanel[];
921
915
  readonly featureAlignShifts: Map<string, Map<string, number>>;
@@ -925,6 +919,7 @@ export default function stateModelFactory(): import("@jbrowse/mobx-state-tree").
925
919
  } & {
926
920
  setHeaderHeight(arg: number): void;
927
921
  setHideHeader(arg: boolean): void;
922
+ setImportForm(arg: boolean): void;
928
923
  treeOverviewClick(y: number): void;
929
924
  setTrackHeight(heightKey: string, height: number): void;
930
925
  reset(): void;
@@ -934,6 +929,7 @@ export default function stateModelFactory(): import("@jbrowse/mobx-state-tree").
934
929
  fit(): void;
935
930
  fitVertically(): void;
936
931
  zoomToRegion(region: import("react-msaview").Region): void;
932
+ revealRegion(region: import("react-msaview").Region): void;
937
933
  zoomToSelection(): void;
938
934
  selectBlock(anchor: {
939
935
  col: number;
@@ -1144,7 +1140,7 @@ export default function stateModelFactory(): import("@jbrowse/mobx-state-tree").
1144
1140
  colorSchemeName: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<string>, [undefined]>;
1145
1141
  customColorScheme: import("@jbrowse/mobx-state-tree").IType<Record<string, string> | undefined, Record<string, string> | undefined, Record<string, string> | undefined>;
1146
1142
  showColumnStats: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
1147
- msaFormat: import("@jbrowse/mobx-state-tree").IMaybe<import("@jbrowse/mobx-state-tree").ISimpleType<import("msa-parsers").MSAFormat>>;
1143
+ msaFormat: import("@jbrowse/mobx-state-tree").IMaybe<import("@jbrowse/mobx-state-tree").ISimpleType<import("react-msaview").MSAFormat>>;
1148
1144
  }, "id" | "type" | "allowedGappyness" | "clades" | "colWidth" | "collapsed" | "columnTracks" | "currentAlignment" | "data" | "drawMsaLetters" | "encodings" | "features" | "gffFilehandle" | "height" | "hideGaps" | "highlightColumns" | "highlights" | "msaFilehandle" | "region" | "relativeTo" | "residueMappings" | "rotated" | "rowHeight" | "rowPanels" | "scrollX" | "scrollY" | "scrollZoom" | "scrollZoomAxis" | "selection" | "showDomainLegend" | "showDomains" | "showOnly" | "subFeatureRows" | "trackHeights" | "treeFilehandle" | "treeMetadataFilehandle" | "treeRoot" | "turnedOffFeatures" | "turnedOffTracks"> & {
1149
1145
  id: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<string>, [undefined]>;
1150
1146
  showDomains: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
@@ -1532,7 +1528,7 @@ export default function stateModelFactory(): import("@jbrowse/mobx-state-tree").
1532
1528
  colorSchemeName: string;
1533
1529
  customColorScheme: Record<string, string> | undefined;
1534
1530
  showColumnStats: boolean;
1535
- msaFormat: import("msa-parsers").MSAFormat | undefined;
1531
+ msaFormat: import("react-msaview").MSAFormat | undefined;
1536
1532
  drawLabels: boolean;
1537
1533
  labelsAlignRight: boolean;
1538
1534
  treeAreaWidth: number | undefined;
@@ -1669,7 +1665,7 @@ export default function stateModelFactory(): import("@jbrowse/mobx-state-tree").
1669
1665
  colorSchemeName: string;
1670
1666
  customColorScheme: Record<string, string> | undefined;
1671
1667
  showColumnStats: boolean;
1672
- msaFormat: import("msa-parsers").MSAFormat | undefined;
1668
+ msaFormat: import("react-msaview").MSAFormat | undefined;
1673
1669
  drawLabels: boolean;
1674
1670
  labelsAlignRight: boolean;
1675
1671
  treeAreaWidth: number | undefined;
@@ -0,0 +1,2 @@
1
+ import{a as l}from"./chunk-6EOYBBT4.js";import{a as i}from"./chunk-DNFD5II2.js";import{a as m}from"./chunk-BX4Z274Q.js";import{a}from"./chunk-J6KYLXRD.js";import{b as r}from"./chunk-FY3BTKY4.js";var e=r(a(),1),o=r(i(),1),t=r(m(),1);function c({onClose:n}){return e.default.createElement(o.Dialog,{open:!0,title:"About",onClose:()=>{n()}},e.default.createElement(t.DialogContent,null,e.default.createElement(t.Typography,null,"MSAView ",l," (",e.default.createElement(t.Link,{target:"_blank",rel:"noopener",href:"https://github.com/gmod/react-msaview"},"Github"),")"),e.default.createElement("ul",null,e.default.createElement("li",null,e.default.createElement(t.Typography,null,"We use some color schemes from the"," ",e.default.createElement(t.Link,{target:"_blank",rel:"noopener",href:"https://github.com/biotite-dev/biotite"},"biotite")," ","project, and their license is reproduced"," ",e.default.createElement(t.Link,{target:"_blank",rel:"noopener",href:"https://github.com/biotite-dev/biotite/blob/master/LICENSE.rst"},"here"))),e.default.createElement("li",null,e.default.createElement(t.Typography,null,"See this page for some information on jalview colorings"," ",e.default.createElement(t.Link,{target:"_blank",rel:"noopener",href:"https://www.jalview.org/help/html/colourSchemes/"},"here"))),e.default.createElement("li",null,e.default.createElement(t.Typography,null,"See this page for some info on the clustal, cinema, maeditor, and lesk color schemes"," ",e.default.createElement(t.Link,{target:"_blank",rel:"noopener",href:"http://www.bioinformatics.nl/~berndb/aacolour.html"},"here"))),e.default.createElement("li",null,e.default.createElement(t.Typography,null,"See this paper about the flower color scheme"," ",e.default.createElement(t.Link,{target:"_blank",rel:"noopener",href:"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7245768/"},"here"))))))}export{c as default};
2
+ //# sourceMappingURL=AboutDialog-447TIFAW.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../node_modules/.pnpm/react-msaview@9.0.0_3e54acfe76b6ad0d26e91cd532b7f775/node_modules/react-msaview/src/components/dialogs/AboutDialog.tsx", "../../node_modules/.pnpm/react-msaview@9.0.0_3e54acfe76b6ad0d26e91cd532b7f775/node_modules/react-msaview/src/version.ts"],
4
- "sourcesContent": ["import React from 'react'\n\nimport { Dialog } from '@jbrowse/core/ui'\nimport { DialogContent, Link, Typography } from '@mui/material'\n\nimport { version } from '../../version.ts'\n\nexport default function AboutDialog({ onClose }: { onClose: () => void }) {\n return (\n <Dialog\n open\n title=\"About\"\n onClose={() => {\n onClose()\n }}\n >\n <DialogContent>\n <Typography>\n MSAView {version} (\n <Link\n target=\"_blank\"\n rel=\"noopener\"\n href=\"https://github.com/gmod/react-msaview\"\n >\n Github\n </Link>\n )\n </Typography>\n\n <ul>\n <li>\n <Typography>\n We use some color schemes from the{' '}\n <Link\n target=\"_blank\"\n rel=\"noopener\"\n href=\"https://github.com/biotite-dev/biotite\"\n >\n biotite\n </Link>{' '}\n project, and their license is reproduced{' '}\n <Link\n target=\"_blank\"\n rel=\"noopener\"\n href=\"https://github.com/biotite-dev/biotite/blob/master/LICENSE.rst\"\n >\n here\n </Link>\n </Typography>\n </li>\n <li>\n <Typography>\n See this page for some information on jalview colorings{' '}\n <Link\n target=\"_blank\"\n rel=\"noopener\"\n href=\"https://www.jalview.org/help/html/colourSchemes/\"\n >\n here\n </Link>\n </Typography>\n </li>\n <li>\n <Typography>\n See this page for some info on the clustal, cinema, maeditor, and\n lesk color schemes{' '}\n <Link\n target=\"_blank\"\n rel=\"noopener\"\n href=\"http://www.bioinformatics.nl/~berndb/aacolour.html\"\n >\n here\n </Link>\n </Typography>\n </li>\n <li>\n <Typography>\n See this paper about the flower color scheme{' '}\n <Link\n target=\"_blank\"\n rel=\"noopener\"\n href=\"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7245768/\"\n >\n here\n </Link>\n </Typography>\n </li>\n </ul>\n </DialogContent>\n </Dialog>\n )\n}\n", "export const version = '9.0.0'\n"],
5
- "mappings": "2JAAA,IAAAA,EAAkB,SAElBC,EAAuB,SACvBC,EAAgD,SCHzC,IAAMC,EAAU,QDOT,SAAPC,EAA6B,CAAE,QAAAC,CAAO,EAA2B,CACtE,OACE,EAAAC,QAAA,cAAC,SAAM,CACL,KAAI,GACJ,MAAM,QACN,QAAS,IAAK,CACZD,EAAO,CACT,CAAC,EAED,EAAAC,QAAA,cAAC,gBAAa,KACZ,EAAAA,QAAA,cAAC,aAAU,gBACAC,OACT,EAAAD,QAAA,cAAC,OAAI,CACH,OAAO,SACP,IAAI,WACJ,KAAK,uCAAuC,EAAA,QAAA,OAOhD,EAAAA,QAAA,cAAA,KAAA,KACE,EAAAA,QAAA,cAAA,KAAA,KACE,EAAAA,QAAA,cAAC,aAAU,0CAC0B,IACnC,EAAAA,QAAA,cAAC,OAAI,CACH,OAAO,SACP,IAAI,WACJ,KAAK,wCAAwC,EAAA,SAAA,EAGvC,+CACiC,IACzC,EAAAA,QAAA,cAAC,OAAI,CACH,OAAO,SACP,IAAI,WACJ,KAAK,gEAAgE,EAAA,MAAA,CAGhE,CACI,EAEf,EAAAA,QAAA,cAAA,KAAA,KACE,EAAAA,QAAA,cAAC,aAAU,+DAC+C,IACxD,EAAAA,QAAA,cAAC,OAAI,CACH,OAAO,SACP,IAAI,WACJ,KAAK,kDAAkD,EAAA,MAAA,CAGlD,CACI,EAEf,EAAAA,QAAA,cAAA,KAAA,KACE,EAAAA,QAAA,cAAC,aAAU,4FAEU,IACnB,EAAAA,QAAA,cAAC,OAAI,CACH,OAAO,SACP,IAAI,WACJ,KAAK,oDAAoD,EAAA,MAAA,CAGpD,CACI,EAEf,EAAAA,QAAA,cAAA,KAAA,KACE,EAAAA,QAAA,cAAC,aAAU,oDACoC,IAC7C,EAAAA,QAAA,cAAC,OAAI,CACH,OAAO,SACP,IAAI,WACJ,KAAK,uDAAuD,EAAA,MAAA,CAGvD,CACI,CACV,CACF,CACS,CAGtB",
6
- "names": ["import_react", "import_ui", "import_material", "version", "AboutDialog", "onClose", "React", "version"]
3
+ "sources": ["../../node_modules/.pnpm/react-msaview@9.1.0_3e54acfe76b6ad0d26e91cd532b7f775/node_modules/react-msaview/src/components/dialogs/AboutDialog.tsx"],
4
+ "sourcesContent": ["import React from 'react'\n\nimport { Dialog } from '@jbrowse/core/ui'\nimport { DialogContent, Link, Typography } from '@mui/material'\n\nimport { version } from '../../version.ts'\n\nexport default function AboutDialog({ onClose }: { onClose: () => void }) {\n return (\n <Dialog\n open\n title=\"About\"\n onClose={() => {\n onClose()\n }}\n >\n <DialogContent>\n <Typography>\n MSAView {version} (\n <Link\n target=\"_blank\"\n rel=\"noopener\"\n href=\"https://github.com/gmod/react-msaview\"\n >\n Github\n </Link>\n )\n </Typography>\n\n <ul>\n <li>\n <Typography>\n We use some color schemes from the{' '}\n <Link\n target=\"_blank\"\n rel=\"noopener\"\n href=\"https://github.com/biotite-dev/biotite\"\n >\n biotite\n </Link>{' '}\n project, and their license is reproduced{' '}\n <Link\n target=\"_blank\"\n rel=\"noopener\"\n href=\"https://github.com/biotite-dev/biotite/blob/master/LICENSE.rst\"\n >\n here\n </Link>\n </Typography>\n </li>\n <li>\n <Typography>\n See this page for some information on jalview colorings{' '}\n <Link\n target=\"_blank\"\n rel=\"noopener\"\n href=\"https://www.jalview.org/help/html/colourSchemes/\"\n >\n here\n </Link>\n </Typography>\n </li>\n <li>\n <Typography>\n See this page for some info on the clustal, cinema, maeditor, and\n lesk color schemes{' '}\n <Link\n target=\"_blank\"\n rel=\"noopener\"\n href=\"http://www.bioinformatics.nl/~berndb/aacolour.html\"\n >\n here\n </Link>\n </Typography>\n </li>\n <li>\n <Typography>\n See this paper about the flower color scheme{' '}\n <Link\n target=\"_blank\"\n rel=\"noopener\"\n href=\"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7245768/\"\n >\n here\n </Link>\n </Typography>\n </li>\n </ul>\n </DialogContent>\n </Dialog>\n )\n}\n"],
5
+ "mappings": "mMAAA,IAAAA,EAAkB,SAElBC,EAAuB,SACvBC,EAAgD,SAIlC,SAAPC,EAA6B,CAAE,QAAAC,CAAO,EAA2B,CACtE,OACE,EAAAC,QAAA,cAAC,SAAM,CACL,KAAI,GACJ,MAAM,QACN,QAAS,IAAK,CACZD,EAAO,CACT,CAAC,EAED,EAAAC,QAAA,cAAC,gBAAa,KACZ,EAAAA,QAAA,cAAC,aAAU,gBACAC,OACT,EAAAD,QAAA,cAAC,OAAI,CACH,OAAO,SACP,IAAI,WACJ,KAAK,uCAAuC,EAAA,QAAA,OAOhD,EAAAA,QAAA,cAAA,KAAA,KACE,EAAAA,QAAA,cAAA,KAAA,KACE,EAAAA,QAAA,cAAC,aAAU,0CAC0B,IACnC,EAAAA,QAAA,cAAC,OAAI,CACH,OAAO,SACP,IAAI,WACJ,KAAK,wCAAwC,EAAA,SAAA,EAGvC,+CACiC,IACzC,EAAAA,QAAA,cAAC,OAAI,CACH,OAAO,SACP,IAAI,WACJ,KAAK,gEAAgE,EAAA,MAAA,CAGhE,CACI,EAEf,EAAAA,QAAA,cAAA,KAAA,KACE,EAAAA,QAAA,cAAC,aAAU,+DAC+C,IACxD,EAAAA,QAAA,cAAC,OAAI,CACH,OAAO,SACP,IAAI,WACJ,KAAK,kDAAkD,EAAA,MAAA,CAGlD,CACI,EAEf,EAAAA,QAAA,cAAA,KAAA,KACE,EAAAA,QAAA,cAAC,aAAU,4FAEU,IACnB,EAAAA,QAAA,cAAC,OAAI,CACH,OAAO,SACP,IAAI,WACJ,KAAK,oDAAoD,EAAA,MAAA,CAGpD,CACI,EAEf,EAAAA,QAAA,cAAA,KAAA,KACE,EAAAA,QAAA,cAAC,aAAU,oDACoC,IAC7C,EAAAA,QAAA,cAAC,OAAI,CACH,OAAO,SACP,IAAI,WACJ,KAAK,uDAAuD,EAAA,MAAA,CAGvD,CACI,CACV,CACF,CACS,CAGtB",
6
+ "names": ["import_react", "import_ui", "import_material", "AboutDialog", "onClose", "React", "version"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ import{g as E}from"./chunk-DEFUNIWW.js";import"./chunk-K55ZVN73.js";import"./chunk-73KAPCJ2.js";import{a as x}from"./chunk-CVLB4VFP.js";import{a as C}from"./chunk-DNFD5II2.js";import{a as w}from"./chunk-BX4Z274Q.js";import{a as y}from"./chunk-J6KYLXRD.js";import{b as i}from"./chunk-FY3BTKY4.js";var e=i(y(),1),c=i(C(),1),t=i(w(),1),d=i(x(),1);async function T(o){let l=await fetch(o);if(!l.ok)throw new Error(`HTTP ${l.status} fetching ${o} ${await l.text()}`);return l.text()}var b=(0,d.observer)(function({handleClose:o,model:l}){let[a,h]=(0,e.useState)(),[r,g]=(0,e.useState)("file"),[s,F]=(0,e.useState)(""),[m,u]=(0,e.useState)(),[v,f]=(0,e.useState)(!1);return e.default.createElement(c.Dialog,{maxWidth:"xl",title:"Open annotation file",onClose:()=>{o()},open:!0},e.default.createElement(t.DialogContent,null,m?e.default.createElement(c.ErrorMessage,{error:m}):null,e.default.createElement(t.Typography,null,"Open a GFF3 file of annotations, such as the one `react-msaview-cli interpro` writes, or the JSON an InterProScan run returns."),e.default.createElement("div",{style:{display:"flex",margin:30}},e.default.createElement(t.FormControl,{component:"fieldset"},e.default.createElement(t.RadioGroup,{value:r,onChange:n=>{g(n.target.value)}},e.default.createElement(t.FormControlLabel,{value:"url",control:e.default.createElement(t.Radio,null),label:"URL"}),e.default.createElement(t.FormControlLabel,{value:"file",control:e.default.createElement(t.Radio,null),label:"File"}))),r==="url"?e.default.createElement("div",null,e.default.createElement(t.Typography,null,"Open an annotation file from a URL"),e.default.createElement(t.TextField,{label:"URL",value:s,onChange:n=>{F(n.target.value)}})):e.default.createElement("div",{style:{paddingTop:20}},e.default.createElement(t.Typography,null,"Open an annotation file from your local drive"),e.default.createElement(t.Button,{variant:"outlined",component:"label"},"Choose File",e.default.createElement("input",{type:"file",hidden:!0,onChange:({target:n})=>{let p=n.files?.[0];p&&h(p)}})),a?e.default.createElement(t.Typography,null,a.name):null))),e.default.createElement(t.DialogActions,null,e.default.createElement(t.Button,{variant:"contained",color:"primary",disabled:v||(r==="file"?!a:!s.trim()),onClick:()=>{(async()=>{f(!0),u(void 0);try{let n=await(r==="file"&&a?a.text():T(s));l.setGFFFilehandle(void 0),l.setGFF(E(n)),l.setShowDomains(!0),o()}catch(n){console.error(n),u(n)}finally{f(!1)}})()}},"Open annotations"),e.default.createElement(t.Button,{variant:"contained",color:"secondary",onClick:()=>{o()}},"Cancel")))}),R=b;export{R as default};
2
+ //# sourceMappingURL=AnnotationFileDialog-S3N5EHHE.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../node_modules/.pnpm/react-msaview@9.1.0_3e54acfe76b6ad0d26e91cd532b7f775/node_modules/react-msaview/src/components/dialogs/AnnotationFileDialog.tsx"],
4
+ "sourcesContent": ["import React, { useState } from 'react'\n\nimport { Dialog, ErrorMessage } from '@jbrowse/core/ui'\nimport {\n Button,\n DialogActions,\n DialogContent,\n FormControl,\n FormControlLabel,\n Radio,\n RadioGroup,\n TextField,\n Typography,\n} from '@mui/material'\nimport { observer } from 'mobx-react'\nimport { annotationTextToGFF } from 'msa-parsers'\n\nimport type { MsaViewModel } from '../../model.ts'\n\nasync function fetchText(url: string) {\n const response = await fetch(url)\n if (!response.ok) {\n throw new Error(\n `HTTP ${response.status} fetching ${url} ${await response.text()}`,\n )\n }\n return response.text()\n}\n\nconst AnnotationFileDialog = observer(function ({\n handleClose,\n model,\n}: {\n handleClose: () => void\n model: MsaViewModel\n}) {\n const [file, setFile] = useState<File>()\n const [choice, setChoice] = useState('file')\n const [url, setUrl] = useState('')\n const [error, setError] = useState<unknown>()\n const [loading, setLoading] = useState(false)\n\n // the error is shown here rather than notified: the standalone app and the\n // MSAViewer component have no jbrowse session to notify, and asking one for\n // its notify() threw out of the success path into the catch, which threw\n // again on the same missing session\n return (\n <Dialog\n maxWidth=\"xl\"\n title=\"Open annotation file\"\n onClose={() => {\n handleClose()\n }}\n open\n >\n <DialogContent>\n {error ? <ErrorMessage error={error} /> : null}\n <Typography>\n Open a GFF3 file of annotations, such as the one `react-msaview-cli\n interpro` writes, or the JSON an InterProScan run returns.\n </Typography>\n\n <div style={{ display: 'flex', margin: 30 }}>\n <FormControl component=\"fieldset\">\n <RadioGroup\n value={choice}\n onChange={event => {\n setChoice(event.target.value)\n }}\n >\n <FormControlLabel value=\"url\" control={<Radio />} label=\"URL\" />\n <FormControlLabel value=\"file\" control={<Radio />} label=\"File\" />\n </RadioGroup>\n </FormControl>\n {choice === 'url' ? (\n <div>\n <Typography>Open an annotation file from a URL</Typography>\n <TextField\n label=\"URL\"\n value={url}\n onChange={event => {\n setUrl(event.target.value)\n }}\n />\n </div>\n ) : (\n <div style={{ paddingTop: 20 }}>\n <Typography>\n Open an annotation file from your local drive\n </Typography>\n <Button variant=\"outlined\" component=\"label\">\n Choose File\n <input\n type=\"file\"\n hidden\n onChange={({ target }) => {\n const chosen = target.files?.[0]\n if (chosen) {\n setFile(chosen)\n }\n }}\n />\n </Button>\n {file ? <Typography>{file.name}</Typography> : null}\n </div>\n )}\n </div>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n color=\"primary\"\n disabled={loading || (choice === 'file' ? !file : !url.trim())}\n onClick={() => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n ;(async () => {\n setLoading(true)\n setError(undefined)\n try {\n const text = await (choice === 'file' && file\n ? file.text()\n : fetchText(url))\n // through the model's own GFF text, so the annotations travel\n // in the snapshot and the shared URL like every other layer. A\n // filehandle left set would make the snapshot drop that text\n model.setGFFFilehandle(undefined)\n model.setGFF(annotationTextToGFF(text))\n model.setShowDomains(true)\n handleClose()\n } catch (e) {\n console.error(e)\n setError(e)\n } finally {\n setLoading(false)\n }\n })()\n }}\n >\n Open annotations\n </Button>\n <Button\n variant=\"contained\"\n color=\"secondary\"\n onClick={() => {\n handleClose()\n }}\n >\n Cancel\n </Button>\n </DialogActions>\n </Dialog>\n )\n})\n\nexport default AnnotationFileDialog\n"],
5
+ "mappings": "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",
6
+ "names": ["import_react", "import_ui", "import_material", "import_mobx_react", "fetchText", "url", "response", "AnnotationFileDialog", "handleClose", "model", "file", "setFile", "choice", "setChoice", "setUrl", "error", "setError", "loading", "setLoading", "React", "event", "target", "chosen", "text", "annotationTextToGFF", "e", "AnnotationFileDialog_default"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as p}from"./chunk-ERCMNTEQ.js";import{X as v,Y as y}from"./chunk-OVAXNTPN.js";import{a as L}from"./chunk-CVLB4VFP.js";import{a as D}from"./chunk-DNFD5II2.js";import{a as V}from"./chunk-BX4Z274Q.js";import{a as I}from"./chunk-J6KYLXRD.js";import{b as l}from"./chunk-FY3BTKY4.js";var t=l(I(),1),i=l(D(),1),e=l(V(),1),k=l(L(),1);function z(r){requestAnimationFrame(()=>{requestAnimationFrame(r)})}var P=(0,k.observer)(function({model:r,onClose:c}){let[s,C]=(0,t.useState)(!0),[n,T]=(0,t.useState)(!0),[o,b]=(0,t.useState)("viewport"),[E,w]=(0,t.useState)(),[m,h]=(0,t.useState)(!1),d=(0,e.useTheme)(),{turnedOnTracks:M,numColumns:S,leaves:A,showMsaLetters:F}=r,g=M.length>0,x=y(r,v(r,{theme:d,exportType:"entire",includeTracks:n})),f=F&&o==="entire"?S*A.length:0,G=f>1e5;return t.default.createElement(i.Dialog,{onClose:()=>{c()},open:!0,title:"Export SVG"},t.default.createElement(e.DialogContent,null,E?t.default.createElement(i.ErrorMessage,{error:E}):null,t.default.createElement(e.Typography,null,"Settings:"),t.default.createElement(p,{label:"Include minimap?",disabled:o==="entire",checked:s,onChange:()=>{C(!s)}}),g?t.default.createElement(p,{label:"Include tracks?",checked:n,onChange:()=>{T(!n)}}):null,t.default.createElement("div",null,t.default.createElement(e.FormControl,null,t.default.createElement(e.FormLabel,null,"Export type"),t.default.createElement(e.RadioGroup,{value:o,onChange:a=>{let{value:u}=a.target;(u==="entire"||u==="viewport")&&b(u)}},t.default.createElement(e.FormControlLabel,{value:"entire",control:t.default.createElement(e.Radio,null),label:"Entire MSA"}),t.default.createElement(e.FormControlLabel,{value:"viewport",control:t.default.createElement(e.Radio,null),label:"Current viewport only"})))),G?t.default.createElement(e.Alert,{severity:"warning",style:{marginTop:8}},"The entire MSA is ",Math.round(x.width),"x",Math.round(x.height)," pixels and draws"," ",Math.round(f/1e3),"k residue letters, each its own SVG element. Export may be slow or fail \u2014 zooming out far enough to hide the letters exports the same alignment as an image instead."):null),t.default.createElement(e.DialogActions,null,t.default.createElement(e.Button,{variant:"contained",color:"primary",disabled:m,startIcon:m?t.default.createElement(e.CircularProgress,{size:16,color:"inherit"}):null,onClick:()=>{h(!0),z(()=>{r.exportSVG({theme:d,includeMinimap:s,includeTracks:g&&n,exportType:o}).then(()=>{c()}).catch(a=>{console.error(a),w(a)}).finally(()=>{h(!1)})})}},m?"Exporting\u2026":"Export"),t.default.createElement(e.Button,{variant:"contained",color:"secondary",onClick:()=>{c()}},"Cancel")))}),B=P;export{B as default};
2
+ //# sourceMappingURL=ExportSVGDialog-7ZHKKQ7W.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../node_modules/.pnpm/react-msaview@9.1.0_3e54acfe76b6ad0d26e91cd532b7f775/node_modules/react-msaview/src/components/dialogs/ExportSVGDialog.tsx"],
4
+ "sourcesContent": ["import React, { useState } from 'react'\n\nimport { Dialog, ErrorMessage } from '@jbrowse/core/ui'\nimport {\n Alert,\n Button,\n CircularProgress,\n DialogActions,\n DialogContent,\n FormControl,\n FormControlLabel,\n FormLabel,\n Radio,\n RadioGroup,\n Typography,\n useTheme,\n} from '@mui/material'\nimport { observer } from 'mobx-react'\n\nimport { exportPageSize, getLayout } from '../../exportLayout.ts'\nimport Checkbox2 from '../Checkbox2.tsx'\n\nimport type { MsaViewModel } from '../../model.ts'\n\n// Run after the browser has painted. A requestAnimationFrame callback still\n// runs *before* the frame it was queued for, so one alone hands the main thread\n// to the render with the spinner not yet on screen; the second fires once that\n// frame is out.\nfunction afterPaint(fn: () => void) {\n requestAnimationFrame(() => {\n requestAnimationFrame(fn)\n })\n}\n\nconst ExportSVGDialog = observer(function ({\n model,\n onClose,\n}: {\n model: MsaViewModel\n onClose: () => void\n}) {\n const [includeMinimap, setIncludeMinimap] = useState(true)\n const [includeTracks, setIncludeTracks] = useState(true)\n const [exportType, setExportType] = useState<'entire' | 'viewport'>(\n 'viewport',\n )\n const [error, setError] = useState<unknown>()\n const [exporting, setExporting] = useState(false)\n const theme = useTheme()\n const { turnedOnTracks, numColumns, leaves, showMsaLetters } = model\n const hasTracks = turnedOnTracks.length > 0\n const entire = exportPageSize(\n model,\n getLayout(model, { theme, exportType: 'entire', includeTracks }),\n )\n // the background is one raster image whatever its size, so what the figure\n // actually costs is its residue letters: each is an svg element of its own.\n // Past roughly this many the export runs to tens of seconds and can exhaust\n // the tab's memory outright\n const glyphs =\n showMsaLetters && exportType === 'entire' ? numColumns * leaves.length : 0\n const isLargeExport = glyphs > 100_000\n return (\n <Dialog\n onClose={() => {\n onClose()\n }}\n open\n title=\"Export SVG\"\n >\n <DialogContent>\n {error ? <ErrorMessage error={error} /> : null}\n <Typography>Settings:</Typography>\n <Checkbox2\n label=\"Include minimap?\"\n disabled={exportType === 'entire'}\n checked={includeMinimap}\n onChange={() => {\n setIncludeMinimap(!includeMinimap)\n }}\n />\n {hasTracks ? (\n <Checkbox2\n label=\"Include tracks?\"\n checked={includeTracks}\n onChange={() => {\n setIncludeTracks(!includeTracks)\n }}\n />\n ) : null}\n <div>\n <FormControl>\n <FormLabel>Export type</FormLabel>\n <RadioGroup\n value={exportType}\n onChange={event => {\n const { value } = event.target\n if (value === 'entire' || value === 'viewport') {\n setExportType(value)\n }\n }}\n >\n <FormControlLabel\n value=\"entire\"\n control={<Radio />}\n label=\"Entire MSA\"\n />\n <FormControlLabel\n value=\"viewport\"\n control={<Radio />}\n label=\"Current viewport only\"\n />\n </RadioGroup>\n </FormControl>\n </div>\n {isLargeExport ? (\n <Alert severity=\"warning\" style={{ marginTop: 8 }}>\n The entire MSA is {Math.round(entire.width)}x\n {Math.round(entire.height)} pixels and draws{' '}\n {Math.round(glyphs / 1000)}k residue letters, each its own SVG\n element. Export may be slow or fail \u2014 zooming out far enough to hide\n the letters exports the same alignment as an image instead.\n </Alert>\n ) : null}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n color=\"primary\"\n // rendering runs on the main thread and a large figure holds it for\n // seconds; without this the button stays live through the freeze and\n // a second click starts a second export\n disabled={exporting}\n startIcon={\n exporting ? <CircularProgress size={16} color=\"inherit\" /> : null\n }\n onClick={() => {\n setExporting(true)\n afterPaint(() => {\n void model\n .exportSVG({\n theme,\n includeMinimap,\n includeTracks: hasTracks && includeTracks,\n exportType,\n })\n .then(() => {\n onClose()\n })\n .catch((e: unknown) => {\n console.error(e)\n setError(e)\n })\n .finally(() => {\n setExporting(false)\n })\n })\n }}\n >\n {exporting ? 'Exporting\u2026' : 'Export'}\n </Button>\n <Button\n variant=\"contained\"\n color=\"secondary\"\n onClick={() => {\n onClose()\n }}\n >\n Cancel\n </Button>\n </DialogActions>\n </Dialog>\n )\n})\n\nexport default ExportSVGDialog\n"],
5
+ "mappings": "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",
6
+ "names": ["import_react", "import_ui", "import_material", "import_mobx_react", "afterPaint", "fn", "ExportSVGDialog", "model", "onClose", "includeMinimap", "setIncludeMinimap", "includeTracks", "setIncludeTracks", "exportType", "setExportType", "error", "setError", "exporting", "setExporting", "theme", "turnedOnTracks", "numColumns", "leaves", "showMsaLetters", "hasTracks", "entire", "exportPageSize", "getLayout", "glyphs", "isLargeExport", "React", "Checkbox2", "event", "value", "e", "ExportSVGDialog_default"]
7
+ }
@@ -1,2 +1,2 @@
1
1
  import{a as C}from"./chunk-CVLB4VFP.js";import{a as F}from"./chunk-DNFD5II2.js";import{a as k}from"./chunk-BX4Z274Q.js";import{a as T}from"./chunk-J6KYLXRD.js";import{b as c}from"./chunk-FY3BTKY4.js";var e=c(T(),1),p=c(F(),1),t=c(k(),1),s=c(C(),1);function w(n,a){return[n.accession,n.name,n.description].some(o=>o?.toLowerCase().includes(a))}var x=(0,s.observer)(function({model:n,accessions:a}){let o=u=>{for(let m of a)n.setFilter(m,u)};return e.default.createElement("div",null,e.default.createElement(t.Button,{onClick:()=>{o(!0)}},"Toggle all on"),e.default.createElement(t.Button,{onClick:()=>{o(!1)}},"Toggle all off"))}),v=(0,s.observer)(function({model:n}){let{annotationTypes:a,annotations:o,featureColors:u,fillPalette:m}=n,[f,h]=(0,e.useState)(""),g=f.trim().toLowerCase(),d=[...a.values()].filter(l=>!g||w(l,g)),i=new Map,E=new Map;for(let l of o){let{accession:r}=l;i.set(r,(i.get(r)??0)+1),E.has(r)||E.set(r,u.get(l)?.fill??m[r])}return e.default.createElement(e.default.Fragment,null,e.default.createElement(t.TextField,{label:"Filter",size:"small",value:f,onChange:l=>{h(l.target.value)}}),e.default.createElement(x,{model:n,accessions:d.map(l=>l.accession)}),e.default.createElement(t.Table,{size:"small"},e.default.createElement(t.TableHead,null,e.default.createElement(t.TableRow,null,e.default.createElement(t.TableCell,{padding:"checkbox"}),e.default.createElement(t.TableCell,null,"color"),e.default.createElement(t.TableCell,null,"accession"),e.default.createElement(t.TableCell,null,"name"),e.default.createElement(t.TableCell,null,"count"),e.default.createElement(t.TableCell,null,"description"))),e.default.createElement(t.TableBody,null,d.map(({accession:l,name:r,description:b})=>e.default.createElement(t.TableRow,{key:l},e.default.createElement(t.TableCell,{padding:"checkbox"},e.default.createElement(t.Checkbox,{checked:!n.turnedOffFeatures.get(l),onChange:()=>{n.setFilter(l,!!n.turnedOffFeatures.get(l))}})),e.default.createElement(t.TableCell,null,e.default.createElement("div",{style:{width:20,height:20,background:E.get(l)}})),e.default.createElement(t.TableCell,null,l),e.default.createElement(t.TableCell,null,r),e.default.createElement(t.TableCell,null,i.get(l)),e.default.createElement(t.TableCell,null,b))))))}),y=(0,s.observer)(function({onClose:n,model:a}){return e.default.createElement(p.Dialog,{onClose:()=>{n()},open:!0,title:"Feature filters",maxWidth:"xl"},e.default.createElement(t.DialogContent,null,e.default.createElement(v,{model:a})))}),D=y;export{D as default};
2
- //# sourceMappingURL=FeatureDialog-ZBX3XQZ5.js.map
2
+ //# sourceMappingURL=FeatureDialog-EEOGSLOG.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../node_modules/.pnpm/react-msaview@9.0.0_3e54acfe76b6ad0d26e91cd532b7f775/node_modules/react-msaview/src/components/dialogs/FeatureDialog.tsx"],
3
+ "sources": ["../../node_modules/.pnpm/react-msaview@9.1.0_3e54acfe76b6ad0d26e91cd532b7f775/node_modules/react-msaview/src/components/dialogs/FeatureDialog.tsx"],
4
4
  "sourcesContent": ["import React, { useState } from 'react'\n\nimport { Dialog } from '@jbrowse/core/ui'\nimport {\n Button,\n Checkbox,\n DialogContent,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n TextField,\n} from '@mui/material'\nimport { observer } from 'mobx-react'\n\nimport type { MsaViewModel } from '../../model.ts'\nimport type { Annotation } from '../../types.ts'\n\nfunction matches(type: Annotation, query: string) {\n return [type.accession, type.name, type.description].some(field =>\n field?.toLowerCase().includes(query),\n )\n}\n\nconst Toggles = observer(function ({\n model,\n accessions,\n}: {\n model: MsaViewModel\n accessions: string[]\n}) {\n const setAll = (shown: boolean) => {\n for (const accession of accessions) {\n model.setFilter(accession, shown)\n }\n }\n return (\n <div>\n <Button\n onClick={() => {\n setAll(true)\n }}\n >\n Toggle all on\n </Button>\n\n <Button\n onClick={() => {\n setAll(false)\n }}\n >\n Toggle all off\n </Button>\n </div>\n )\n})\n\nconst FeatureTable = observer(function ({ model }: { model: MsaViewModel }) {\n const { annotationTypes, annotations, featureColors, fillPalette } = model\n const [query, setQuery] = useState('')\n const needle = query.trim().toLowerCase()\n const types = [...annotationTypes.values()].filter(\n type => !needle || matches(type, needle),\n )\n const counts = new Map<string, number>()\n const swatches = new Map<string, string>()\n for (const annot of annotations) {\n const { accession } = annot\n counts.set(accession, (counts.get(accession) ?? 0) + 1)\n if (!swatches.has(accession)) {\n swatches.set(\n accession,\n featureColors.get(annot)?.fill ?? fillPalette[accession]!,\n )\n }\n }\n return (\n <>\n <TextField\n label=\"Filter\"\n size=\"small\"\n value={query}\n onChange={event => {\n setQuery(event.target.value)\n }}\n />\n <Toggles model={model} accessions={types.map(t => t.accession)} />\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell padding=\"checkbox\" />\n <TableCell>color</TableCell>\n <TableCell>accession</TableCell>\n <TableCell>name</TableCell>\n <TableCell>count</TableCell>\n <TableCell>description</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {types.map(({ accession, name, description }) => (\n <TableRow key={accession}>\n <TableCell padding=\"checkbox\">\n <Checkbox\n checked={!model.turnedOffFeatures.get(accession)}\n onChange={() => {\n model.setFilter(\n accession,\n !!model.turnedOffFeatures.get(accession),\n )\n }}\n />\n </TableCell>\n <TableCell>\n <div\n style={{\n width: 20,\n height: 20,\n background: swatches.get(accession),\n }}\n />\n </TableCell>\n <TableCell>{accession}</TableCell>\n <TableCell>{name}</TableCell>\n <TableCell>{counts.get(accession)}</TableCell>\n <TableCell>{description}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </>\n )\n})\n\nconst FeatureTypeDialog = observer(function ({\n onClose,\n model,\n}: {\n onClose: () => void\n model: MsaViewModel\n}) {\n return (\n <Dialog\n onClose={() => {\n onClose()\n }}\n open\n title=\"Feature filters\"\n maxWidth=\"xl\"\n >\n <DialogContent>\n <FeatureTable model={model} />\n </DialogContent>\n </Dialog>\n )\n})\n\nexport default FeatureTypeDialog\n"],
5
5
  "mappings": "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",
6
6
  "names": ["import_react", "import_ui", "import_material", "import_mobx_react", "matches", "type", "query", "field", "Toggles", "model", "accessions", "setAll", "shown", "accession", "React", "FeatureTable", "annotationTypes", "annotations", "featureColors", "fillPalette", "setQuery", "needle", "types", "counts", "swatches", "annot", "event", "t", "name", "description", "FeatureTypeDialog", "onClose", "FeatureDialog_default"]
@@ -0,0 +1,2 @@
1
+ import{a as n}from"./chunk-6EOYBBT4.js";import{a as i,b as m}from"./chunk-TSHN6J7U.js";import{a as E}from"./chunk-DNFD5II2.js";import{a as b}from"./chunk-BX4Z274Q.js";import{a as p}from"./chunk-J6KYLXRD.js";import{b as a}from"./chunk-FY3BTKY4.js";var e=a(p(),1),u=a(E(),1),t=a(b(),1);var f=(0,e.lazy)(()=>import("./AboutDialog-447TIFAW.js"));function c({title:o,rows:l}){return e.default.createElement(e.default.Fragment,null,e.default.createElement(t.Typography,{variant:"subtitle2",sx:{mt:1}},o),e.default.createElement(t.Table,{size:"small","aria-label":o},e.default.createElement(t.TableBody,null,l.map(({label:r,action:s})=>e.default.createElement(t.TableRow,{key:r},e.default.createElement(t.TableCell,{sx:{whiteSpace:"nowrap",fontWeight:500}},r),e.default.createElement(t.TableCell,null,s))))))}function g({model:o,onClose:l}){return e.default.createElement(u.Dialog,{open:!0,title:"Mouse & keyboard",onClose:l},e.default.createElement(t.DialogContent,null,e.default.createElement(c,{title:"Mouse",rows:m}),e.default.createElement(c,{title:"Keyboard (click the alignment first)",rows:i})),e.default.createElement(t.DialogActions,null,e.default.createElement(t.Typography,{variant:"caption",sx:{mr:"auto",pl:1}},"MSAView ",n),e.default.createElement(t.Button,{onClick:()=>{o.queueDialog(r=>[f,{onClose:r}]),l()}},"About & credits"),e.default.createElement(t.Button,{variant:"contained",onClick:l},"Close")))}export{g as default};
2
+ //# sourceMappingURL=HelpDialog-TCWNBZOV.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../node_modules/.pnpm/react-msaview@9.1.0_3e54acfe76b6ad0d26e91cd532b7f775/node_modules/react-msaview/src/components/dialogs/HelpDialog.tsx"],
4
+ "sourcesContent": ["import React, { lazy } from 'react'\n\nimport { Dialog } from '@jbrowse/core/ui'\nimport {\n Button,\n DialogActions,\n DialogContent,\n Table,\n TableBody,\n TableCell,\n TableRow,\n Typography,\n} from '@mui/material'\n\nimport { version } from '../../version.ts'\nimport { keyboardControls, mouseControls } from '../controls.ts'\n\nimport type { MsaViewModel } from '../../model.ts'\nimport type { Control } from '../controls.ts'\n\nconst AboutDialog = lazy(() => import('./AboutDialog.tsx'))\n\nfunction ControlTable({ title, rows }: { title: string; rows: Control[] }) {\n return (\n <>\n <Typography variant=\"subtitle2\" sx={{ mt: 1 }}>\n {title}\n </Typography>\n <Table size=\"small\" aria-label={title}>\n <TableBody>\n {rows.map(({ label, action }) => (\n <TableRow key={label}>\n <TableCell sx={{ whiteSpace: 'nowrap', fontWeight: 500 }}>\n {label}\n </TableCell>\n <TableCell>{action}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </>\n )\n}\n\nexport default function HelpDialog({\n model,\n onClose,\n}: {\n model: MsaViewModel\n onClose: () => void\n}) {\n return (\n <Dialog open title=\"Mouse & keyboard\" onClose={onClose}>\n <DialogContent>\n <ControlTable title=\"Mouse\" rows={mouseControls} />\n <ControlTable\n title=\"Keyboard (click the alignment first)\"\n rows={keyboardControls}\n />\n </DialogContent>\n <DialogActions>\n <Typography variant=\"caption\" sx={{ mr: 'auto', pl: 1 }}>\n MSAView {version}\n </Typography>\n <Button\n onClick={() => {\n model.queueDialog(done => [AboutDialog, { onClose: done }])\n onClose()\n }}\n >\n About & credits\n </Button>\n <Button variant=\"contained\" onClick={onClose}>\n Close\n </Button>\n </DialogActions>\n </Dialog>\n )\n}\n"],
5
+ "mappings": "uPAAA,IAAAA,EAA4B,SAE5BC,EAAuB,SACvBC,EASO,SAQP,IAAMC,KAAc,QAAK,IAAM,OAAO,2BAAmB,CAAC,EAE1D,SAASC,EAAa,CAAE,MAAAC,EAAO,KAAAC,CAAI,EAAsC,CACvE,OACE,EAAAC,QAAA,cAAA,EAAAA,QAAA,SAAA,KACE,EAAAA,QAAA,cAAC,aAAU,CAAC,QAAQ,YAAY,GAAI,CAAE,GAAI,CAAC,CAAE,EAC1CF,CAAK,EAER,EAAAE,QAAA,cAAC,QAAK,CAAC,KAAK,QAAO,aAAaF,CAAK,EACnC,EAAAE,QAAA,cAAC,YAAS,KACPD,EAAK,IAAI,CAAC,CAAE,MAAAE,EAAO,OAAAC,CAAM,IACxB,EAAAF,QAAA,cAAC,WAAQ,CAAC,IAAKC,CAAK,EAClB,EAAAD,QAAA,cAAC,YAAS,CAAC,GAAI,CAAE,WAAY,SAAU,WAAY,GAAG,CAAE,EACrDC,CAAK,EAER,EAAAD,QAAA,cAAC,YAAS,KAAEE,CAAM,CAAa,CAElC,CAAC,CACQ,CACN,CAGd,CAEc,SAAPC,EAA4B,CACjC,MAAAC,EACA,QAAAC,CAAO,EAIR,CACC,OACE,EAAAL,QAAA,cAAC,SAAM,CAAC,KAAI,GAAC,MAAM,mBAAmB,QAASK,CAAO,EACpD,EAAAL,QAAA,cAAC,gBAAa,KACZ,EAAAA,QAAA,cAACH,EAAY,CAAC,MAAM,QAAQ,KAAMS,CAAa,CAAA,EAC/C,EAAAN,QAAA,cAACH,EAAY,CACX,MAAM,uCACN,KAAMU,CAAgB,CAAA,CACtB,EAEJ,EAAAP,QAAA,cAAC,gBAAa,KACZ,EAAAA,QAAA,cAAC,aAAU,CAAC,QAAQ,UAAU,GAAI,CAAE,GAAI,OAAQ,GAAI,CAAC,CAAE,aAC5CQ,CAAO,EAElB,EAAAR,QAAA,cAAC,SAAM,CACL,QAAS,IAAK,CACZI,EAAM,YAAYK,GAAQ,CAACb,EAAa,CAAE,QAASa,CAAI,CAAE,CAAC,EAC1DJ,EAAO,CACT,CAAC,EAAA,iBAAA,EAIH,EAAAL,QAAA,cAAC,SAAM,CAAC,QAAQ,YAAY,QAASK,CAAO,EAAA,OAAA,CAEnC,CACK,CAGtB",
6
+ "names": ["import_react", "import_ui", "import_material", "AboutDialog", "ControlTable", "title", "rows", "React", "label", "action", "HelpDialog", "model", "onClose", "mouseControls", "keyboardControls", "version", "done"]
7
+ }
@@ -1,5 +1,5 @@
1
- import{a as Ft}from"./chunk-6YFCSBEE.js";import{D as Et,a as G,c as bt,d as pe,e as se,f as fe,g as te,h as vt,i as Be,j as qe,k as Ee,l as rr,m as Mt,q as kt,r as ot,s as _e,v as Ve,x as qt}from"./chunk-NI3VGKQP.js";import{g as de,h as St,i as Ne,k as tt,l as De,m as At,n as Oe,o as Ct,p as Lt,r as je,s as $e,t as Nt}from"./chunk-F726IWCW.js";import{a as yt,b as Bt,c as nr}from"./chunk-YUKJI2AH.js";import{e as Pt,f as It}from"./chunk-QQ5LZUIO.js";import{a as wt,b as ke,c as xt,d as Tt}from"./chunk-DECSTFAT.js";import{a as V}from"./chunk-NSASZ5FM.js";import{a as be,c as Ie,d as gt}from"./chunk-IBBQUV2I.js";import{a as or}from"./chunk-2IWD4OO4.js";import"./chunk-73KAPCJ2.js";import{a as ve}from"./chunk-CVLB4VFP.js";import{a as we}from"./chunk-DNFD5II2.js";import{a as L}from"./chunk-BX4Z274Q.js";import{a as f}from"./chunk-J6KYLXRD.js";import{a as tr,b as s}from"./chunk-FY3BTKY4.js";var Qo=tr((us,Go)=>{Go.exports=JBrowseExports["@jbrowse/core/data_adapters/dataAdapterCache"]});var A=s(f()),Zo=s(we()),Ro=s(be()),ye=s(L());var K=s(f());var Dt=s(gt(),1),Ot=(0,Ie.createSvgIcon)((0,Dt.jsx)("path",{d:"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6"}),"Settings");var Ke=s(L()),Lo=s(V());var w=s(f());var U=s(L()),ho=s(ve()),go=s(V());var rt=s(f()),jt=s(L());function ar({children:e,...t}){return rt.default.createElement("div",null,rt.default.createElement(jt.TextField,{...t},e))}var g=ar;var nt=s(f()),$t=s(we()),_t=s(L()),Vt=s(V()),sr=(0,Vt.makeStyles)()({dialogContent:{width:"80em"}});function Y({error:e,children:t}){let{classes:o}=sr();return nt.default.createElement(_t.DialogContent,{className:o.dialogContent},e?nt.default.createElement($t.ErrorMessage,{error:e}):null,t)}var at=s(f()),Gt=s(we()),Qt=s(L());function ie({status:e}){return e==="loading"?at.default.createElement(Gt.LoadingEllipses,{message:"Translating transcript"}):e==="missing"?at.default.createElement(Qt.Typography,{color:"textSecondary",variant:"body2"},"no coding sequence to align"):null}var ce=s(f()),Ut=s(be()),me=s(L());var le=s(f());var Ht=(0,le.createContext)(void 0);function Wt({children:e}){let t=(0,le.useState)(()=>ke()==="splitRight");return le.default.createElement(Ht.Provider,{value:t},e)}function Ge(){let e=(0,le.useContext)(Ht),t=(0,le.useState)(()=>ke()==="splitRight");return e??t}function ir({checked:e,onChange:t}){return ce.default.createElement(me.FormControlLabel,{label:"Open beside the genome view",control:ce.default.createElement(me.Checkbox,{checked:e,onChange:o=>{t(o.target.checked)}})})}function X({onSubmit:e,onCancel:t,submitDisabled:o,hint:r,submitLabel:n="Submit",model:a}){let[i,u]=Ge(),c=!!a&&wt((0,Ut.getSession)(a));return ce.default.createElement(me.DialogActions,{sx:{flexWrap:"wrap",rowGap:1}},c?ce.default.createElement(ir,{checked:i,onChange:u}):null,ce.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:8,marginLeft:"auto"}},r,ce.default.createElement(me.Button,{sx:{flexShrink:0},color:"primary",variant:"contained",disabled:o,onClick:()=>{if(c){let l=i?"splitRight":"stack";xt(l),e(l)}else e(ke())}},n),ce.default.createElement(me.Button,{sx:{flexShrink:0},color:"secondary",variant:"contained",onClick:()=>{t()}},"Cancel")))}var Z=s(f()),xe=s(L()),Jt=s(V());var zt=s(f()),Kt=s(V());var lr=(0,Kt.makeStyles)()({textAreaFont:{fontFamily:"Courier New"}});function st({value:e}){let{classes:t}=lr();return zt.default.createElement(g,{variant:"outlined",multiline:!0,minRows:5,maxRows:10,fullWidth:!0,value:e,slotProps:{input:{readOnly:!0,classes:{input:t.textAreaFont}}}})}var mr=(0,Jt.makeStyles)()({flex:{display:"flex"},minWidth:{minWidth:300},centered:{alignContent:"center",marginLeft:20}});function R({feature:e,options:t,selectedId:o,selectedTranscript:r,setSelectedId:n,proteinSequence:a,sequenceStatus:i="ready",validIds:u}){let{classes:c}=mr(),[l,p]=(0,Z.useState)(!1);return Z.default.createElement(Z.default.Fragment,null,Z.default.createElement("div",{className:c.flex},Z.default.createElement(xe.TextField,{variant:"outlined",label:`Choose isoform of ${te(e)}`,helperText:"the query row, so the alignment stays linked to the genome view",select:!0,className:c.minWidth,value:o,onChange:d=>{n(d.target.value)}},t.map(d=>{let m=u?u.some(v=>se(d,v)):!0,{len:b,mod:S}=bt(d);return Z.default.createElement(xe.MenuItem,{value:pe(d),key:d.id(),disabled:!m},fe(d)," (",b," aa)"," ",S?" (possible fragment)":"",u?m?" (has data)":" (no data)":"")})),Z.default.createElement("div",{className:c.centered},Z.default.createElement(xe.Button,{variant:"contained",color:"primary",onClick:()=>{p(!l)}},l?"Hide sequence":"Show sequence"))),l?Z.default.createElement(st,{value:a?`>${fe(r)}
1
+ import{D as Et,a as G,c as bt,d as pe,e as se,f as fe,g as te,h as vt,i as Be,j as qe,k as Ee,l as rr,m as Mt,q as kt,r as ot,s as _e,v as Ve,x as qt}from"./chunk-BAM67QHH.js";import{a as Ft}from"./chunk-6YFCSBEE.js";import{g as de,h as St,i as Ne,k as tt,l as De,m as At,n as Oe,o as Ct,p as Lt,r as je,s as $e,t as Nt,v as Pt,w as It}from"./chunk-A63PUWQZ.js";import{a as yt,b as Bt,c as nr}from"./chunk-YUKJI2AH.js";import"./chunk-K55ZVN73.js";import{a as wt,b as ke,c as xt,d as Tt}from"./chunk-DECSTFAT.js";import{a as V}from"./chunk-NSASZ5FM.js";import{a as be,c as Ie,d as gt}from"./chunk-IBBQUV2I.js";import{a as or}from"./chunk-2IWD4OO4.js";import"./chunk-73KAPCJ2.js";import{a as ve}from"./chunk-CVLB4VFP.js";import{a as we}from"./chunk-DNFD5II2.js";import{a as L}from"./chunk-BX4Z274Q.js";import{a as f}from"./chunk-J6KYLXRD.js";import{a as tr,b as s}from"./chunk-FY3BTKY4.js";var Qo=tr((us,Go)=>{Go.exports=JBrowseExports["@jbrowse/core/data_adapters/dataAdapterCache"]});var A=s(f()),Zo=s(we()),Ro=s(be()),ye=s(L());var K=s(f());var Dt=s(gt(),1),Ot=(0,Ie.createSvgIcon)((0,Dt.jsx)("path",{d:"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6"}),"Settings");var Ke=s(L()),Lo=s(V());var w=s(f());var U=s(L()),ho=s(ve()),go=s(V());var rt=s(f()),jt=s(L());function ar({children:e,...t}){return rt.default.createElement("div",null,rt.default.createElement(jt.TextField,{...t},e))}var g=ar;var nt=s(f()),$t=s(we()),_t=s(L()),Vt=s(V()),sr=(0,Vt.makeStyles)()({dialogContent:{width:"80em"}});function Y({error:e,children:t}){let{classes:o}=sr();return nt.default.createElement(_t.DialogContent,{className:o.dialogContent},e?nt.default.createElement($t.ErrorMessage,{error:e}):null,t)}var at=s(f()),Gt=s(we()),Qt=s(L());function ie({status:e}){return e==="loading"?at.default.createElement(Gt.LoadingEllipses,{message:"Translating transcript"}):e==="missing"?at.default.createElement(Qt.Typography,{color:"textSecondary",variant:"body2"},"no coding sequence to align"):null}var ce=s(f()),Ut=s(be()),me=s(L());var le=s(f());var Ht=(0,le.createContext)(void 0);function Wt({children:e}){let t=(0,le.useState)(()=>ke()==="splitRight");return le.default.createElement(Ht.Provider,{value:t},e)}function Ge(){let e=(0,le.useContext)(Ht),t=(0,le.useState)(()=>ke()==="splitRight");return e??t}function ir({checked:e,onChange:t}){return ce.default.createElement(me.FormControlLabel,{label:"Open beside the genome view",control:ce.default.createElement(me.Checkbox,{checked:e,onChange:o=>{t(o.target.checked)}})})}function X({onSubmit:e,onCancel:t,submitDisabled:o,hint:r,submitLabel:n="Submit",model:a}){let[i,u]=Ge(),c=!!a&&wt((0,Ut.getSession)(a));return ce.default.createElement(me.DialogActions,{sx:{flexWrap:"wrap",rowGap:1}},c?ce.default.createElement(ir,{checked:i,onChange:u}):null,ce.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:8,marginLeft:"auto"}},r,ce.default.createElement(me.Button,{sx:{flexShrink:0},color:"primary",variant:"contained",disabled:o,onClick:()=>{if(c){let l=i?"splitRight":"stack";xt(l),e(l)}else e(ke())}},n),ce.default.createElement(me.Button,{sx:{flexShrink:0},color:"secondary",variant:"contained",onClick:()=>{t()}},"Cancel")))}var Z=s(f()),xe=s(L()),Jt=s(V());var zt=s(f()),Kt=s(V());var lr=(0,Kt.makeStyles)()({textAreaFont:{fontFamily:"Courier New"}});function st({value:e}){let{classes:t}=lr();return zt.default.createElement(g,{variant:"outlined",multiline:!0,minRows:5,maxRows:10,fullWidth:!0,value:e,slotProps:{input:{readOnly:!0,classes:{input:t.textAreaFont}}}})}var mr=(0,Jt.makeStyles)()({flex:{display:"flex"},minWidth:{minWidth:300},centered:{alignContent:"center",marginLeft:20}});function R({feature:e,options:t,selectedId:o,selectedTranscript:r,setSelectedId:n,proteinSequence:a,sequenceStatus:i="ready",validIds:u}){let{classes:c}=mr(),[l,p]=(0,Z.useState)(!1);return Z.default.createElement(Z.default.Fragment,null,Z.default.createElement("div",{className:c.flex},Z.default.createElement(xe.TextField,{variant:"outlined",label:`Choose isoform of ${te(e)}`,helperText:"the query row, so the alignment stays linked to the genome view",select:!0,className:c.minWidth,value:o,onChange:d=>{n(d.target.value)}},t.map(d=>{let m=u?u.some(v=>se(d,v)):!0,{len:b,mod:S}=bt(d);return Z.default.createElement(xe.MenuItem,{value:pe(d),key:d.id(),disabled:!m},fe(d)," (",b," aa)"," ",S?" (possible fragment)":"",u?m?" (has data)":" (no data)":"")})),Z.default.createElement("div",{className:c.centered},Z.default.createElement(xe.Button,{variant:"contained",color:"primary",onClick:()=>{p(!l)}},l?"Hide sequence":"Show sequence"))),l?Z.default.createElement(st,{value:a?`>${fe(r)}
2
2
  ${a}`:i==="missing"?"This transcript has no coding sequence, so there is nothing to translate.":i==="error"?"The sequence could not be fetched.":"Loading..."}):null)}var Qe=s(f()),Yt=s(be());var Te={drawNodeBubbles:!0,colWidth:10,rowHeight:12};function Q({view:e,feature:t,placement:o,...r}){return Tt((0,Yt.getSession)(e),{placement:o,connectedViewId:e.id,connectedFeature:t?.toJSON(),...r})}function oe(e){let[t,o]=(0,Qe.useState)(),r=(0,Qe.useRef)(!1);return{launchError:t,submit:n=>{r.current||(r.current=!0,o(void 0),n().then(e,a=>{r.current=!1,console.error(a),o(a)}))}}}var We=s(f());var Zt=s(f()),Rt=s(be()),eo=s(rr());var H=s(f()),Xt=e=>e==null||e===!1;function ur(e){return Xt(e)||Array.isArray(e)&&e.some(Xt)?null:JSON.stringify(e)}function W(e,t,{onSuccess:o}={}){let r=ur(e),[n,a]=(0,H.useState)(0),[i,u]=(0,H.useState)(),c=r===null?null:`${n}\0${r}`,l=i?.attempt===c,p=i?.question===r,d=(0,H.useRef)({fetcher:t,onSuccess:o});return(0,H.useEffect)(()=>{d.current={fetcher:t,onSuccess:o}}),(0,H.useEffect)(()=>{if(c===null||r===null)return;let m=new AbortController;return d.current.fetcher(m.signal).then(b=>{m.signal.aborted||(u({attempt:c,question:r,data:b}),d.current.onSuccess?.(b))}).catch(b=>{m.signal.aborted||u({attempt:c,question:r,error:b})}),()=>{m.abort()}},[c,r]),{data:p?i.data:void 0,error:l?i.error:void 0,isLoading:c!==null&&!l,mutate:(0,H.useCallback)(()=>{a(m=>m+1)},[])}}function He(e,t){let[o,r]=(0,H.useState)(e);return(0,H.useEffect)(()=>{let n=setTimeout(()=>{r(e)},t);return()=>{clearTimeout(n)}},[e,t]),o}function to({view:e,feature:t}){let o=e?.assemblyNames?.[0],{data:r,error:n,isLoading:a}=W(t&&o?[t.id(),o,"feature-sequence"]:null,async()=>{let{start:u,end:c,refName:l}=t.toJSON();return Mt({start:u,end:c,refName:l,assemblyName:o,session:(0,Rt.getSession)(e)})});return{proteinSequence:(0,Zt.useMemo)(()=>r&&t?(0,eo.translateTranscript)({transcript:t,...r})?.protein??"":"",[r,t]),sequence:r,error:n,isLoading:a}}function cr(e,t,o){if(!o?.length)return e;let r=i=>o.some(u=>se(i,u)),n=t.find(i=>pe(i)===e);if(n&&r(n))return e;let a=t.find(r);return a?pe(a):e}function dr({error:e,isLoading:t,proteinSequence:o}){return e?"error":t?"loading":o?"ready":"missing"}function re({feature:e,view:t,validIds:o,preferredTranscriptId:r}){let n=(0,We.useMemo)(()=>Be(e),[e]),[a,i]=(0,We.useState)(()=>pe(n.find(m=>se(m,r??""))??n[0])),u=cr(a,n,o),c=n.find(m=>pe(m)===u),{proteinSequence:l,error:p,isLoading:d}=to({view:t,feature:c});return{options:n,selectedId:u,setSelectedId:i,selectedTranscript:c,proteinSequence:l,error:p,isLoading:d,sequenceStatus:dr({error:p,isLoading:d,proteinSequence:l}),validIds:o}}var q=s(f()),ao=s(we());var oo=s(gt(),1),ro=(0,Ie.createSvgIcon)((0,oo.jsx)("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6zM19 4h-3.5l-1-1h-5l-1 1H5v2h14z"}),"Delete");var E=s(L()),so=s(ve()),io=s(V());var pr=(0,io.makeStyles)()({header:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:8},resultList:{maxHeight:300,overflow:"auto"}});function no(e){let t=[e.geneName,e.transcriptName!==e.geneName?e.transcriptName:void 0].filter(o=>!!o);return t.length>0?t.join(" - "):e.geneId??e.transcriptId??"Unknown"}function fr(e){return[e.blastDatabase,e.searchProgram??e.blastProgram??"blastp",e.msaAlgorithm].filter(Boolean).join(" / ")}var hr=(0,so.observer)(function({model:e,handleClose:t,feature:o,cached:{results:r,handleDelete:n,handleClearAll:a}}){let{classes:i}=pr(),u=G(e),[c,l]=(0,q.useState)(),[p]=Ge(),d=m=>{let{transcriptId:b,msa:S,tree:v,treeMetadata:j}=m;Q({view:u,feature:b?Be(o).find(M=>se(M,b)):void 0,placement:p?"splitRight":"stack",displayName:`BLAST - ${no(m)}`,...Te,data:{msa:S,tree:v,treeMetadata:j}}).then(t,M=>{console.error(M),l(M)})};return q.default.createElement("div",null,c?q.default.createElement(ao.ErrorMessage,{error:c}):null,q.default.createElement("div",{className:i.header},q.default.createElement(E.Typography,{variant:"subtitle1"},"Cached BLAST Results (",r.length,")"),q.default.createElement(E.Button,{size:"small",color:"error",onClick:async()=>{try{l(void 0),await a()}catch(m){l(m)}}},"Clear results for this gene")),q.default.createElement(E.List,{dense:!0,className:i.resultList},r.map(m=>q.default.createElement(E.ListItem,{key:m.id,disablePadding:!0,secondaryAction:q.default.createElement(E.IconButton,{edge:"end",size:"small",onClick:async b=>{b.stopPropagation();try{l(void 0),await n(m.id)}catch(S){l(S)}}},q.default.createElement(ro,{fontSize:"small"}))},q.default.createElement(E.ListItemButton,{onClick:()=>{d(m)}},q.default.createElement(E.ListItemText,{primary:`${no(m)} - ${fr(m)}`,secondary:`${new Date(m.timestamp).toLocaleString()} - Seq: ${m.proteinSequence.slice(0,30)}...`}))))))}),lo=hr;var it=s(f()),mo=s(L());function Fe({value:e,onChange:t,className:o}){return it.default.createElement(g,{variant:"outlined",label:"MSA Algorithm",className:o,select:!0,value:e,helperText:e==="browser"?"no EBI job; rows aligned to the query":void 0,onChange:r=>{t(r.target.value)}},De.map(r=>it.default.createElement(mo.MenuItem,{value:r,key:r},At[r])))}var gr="msaView-blastSearch",Sr="msaView-msaAlgorithm",uo=je("blastp"),co="clustalo";function yr(e){let{program:t,database:o}=e??{},r=Oe.find(n=>n===t);return r&&$e(r).some(n=>n===o)?{program:r,database:o}:uo}function br(e){return De.find(t=>t===e)??co}function po(){let[e,t]=de(gr,uo);return[yr(e),o=>{t(o)}]}function Ue(){let[e,t]=de(Sr,co);return[br(e),o=>{t(o)}]}function fo(e){let{data:t,error:o,isLoading:r,mutate:n}=W(`cached-blast-${e.join(",")}`,async()=>(await kt()).filter(i=>i.geneId&&e.includes(i.geneId)));return{results:t??[],error:o,isLoading:r,handleDelete:async a=>{await ot(a),n()},handleClearAll:async()=>{await Promise.all((t??[]).map(a=>ot(a.id))),n()}}}var vr=(0,go.makeStyles)()({selectField:{width:150},databaseField:{width:260},cachedResultsAccordion:{marginTop:20},infoText:{marginTop:20}}),wr=(0,ho.observer)(function({handleClose:e,feature:t,model:o,children:r,preferredTranscriptId:n}){let{classes:a}=vr(),i=G(o),{launchError:u,submit:c}=oe(e),[l,p]=po(),[d,m]=Ue(),[b,S]=(0,w.useState)(String(Lt)),v=Number(b),j=Number.isInteger(v)&&v>=1,M=l.program==="phmmer",P=(0,w.useMemo)(()=>Ee(t),[t]),C=fo(P),I=re({feature:t,view:i,preferredTranscriptId:n}),{selectedTranscript:k,proteinSequence:F,sequenceStatus:$}=I,_=I.error??u??C.error;return w.default.createElement(w.default.Fragment,null,w.default.createElement(Y,{error:_},r,w.default.createElement(g,{variant:"outlined",label:"Search program",className:a.selectField,select:!0,value:l.program,onChange:x=>{p(je(x.target.value))}},Oe.map(x=>w.default.createElement(U.MenuItem,{value:x,key:x},Ct[x]))),w.default.createElement(g,{variant:"outlined",label:"Database",className:a.databaseField,select:!0,value:l.database,onChange:x=>{p({program:l.program,database:x.target.value})}},$e(l.program).map(x=>w.default.createElement(U.MenuItem,{value:x,key:x},Nt(x)))),M?null:w.default.createElement(Fe,{className:a.selectField,value:d,onChange:m}),w.default.createElement(g,{variant:"outlined",label:"Hits",className:a.selectField,type:"number",value:b,onChange:x=>{S(x.target.value)},error:!j,helperText:"best-scoring sequences to keep"}),w.default.createElement(R,{feature:t,...I}),w.default.createElement(U.Typography,{variant:"body2",className:a.infoText},M?"phmmer aligns the hits as it finds them, so nothing is realigned afterwards.":"The hits come back from EBI and are then run through the chosen aligner."," ","The EBI queue is the wait, and it runs from seconds to many minutes."),C.results.length>0?w.default.createElement(U.Accordion,{className:a.cachedResultsAccordion},w.default.createElement(U.AccordionSummary,{expandIcon:w.default.createElement(yt,null)},w.default.createElement(U.Typography,null,"Previous BLAST Results")),w.default.createElement(U.AccordionDetails,null,w.default.createElement(lo,{model:o,handleClose:e,feature:t,cached:C}))):null),w.default.createElement(X,{model:o,hint:w.default.createElement(ie,{status:$}),submitDisabled:!F||!j,onSubmit:x=>{if(k){let ue=l.program==="phmmer"?{searchProgram:"phmmer",blastDatabase:l.database,maxHits:v,selectedTranscript:k.toJSON(),proteinSequence:F}:{searchProgram:"blastp",blastDatabase:l.database,msaAlgorithm:d,maxHits:v,selectedTranscript:k.toJSON(),proteinSequence:F};c(()=>Q({view:i,feature:k,placement:x,displayName:vt(t,k),...Te,blastParams:ue}))}},onCancel:e}))}),So=wr;var y=s(f()),xo=s(be()),ge=s(L()),To=s(ve()),Mo=s(V());var ze=s(f());function yo(e){return qe(e).toUpperCase()}function xr(e,t){let o=Math.min(e.length,t.length);if(o===0)return 0;let r=0;for(let n=0;n<o;n++)e[n]===t[n]&&r++;return r/o}var Tr=.9,Mr=.5;function bo(e,t){if(!e.trim())return{names:[]};let o;try{o=Pt(e)}catch{return{names:[]}}let r=o.getNames(),n=yo(t);return{names:r,match:n?Ar(o,r,n):void 0}}function Ar(e,t,o){let r=[];for(let a of t){let i=yo(It(e.getRow(a)));if(!i)continue;if(i===o)return{name:a,quality:"exact",identity:1,offset:0};let u=o.indexOf(i),c=i.indexOf(o);if(u!==-1||c!==-1){let p=Math.min(i.length,o.length)/Math.max(i.length,o.length);p>=Mr&&r.push({name:a,quality:"partial",identity:p,offset:u===-1?-c:u});continue}let l=xr(i,o);l>=Tr&&r.push({name:a,quality:"similar",identity:l,offset:0})}let n=["partial","similar"];return r.sort((a,i)=>n.indexOf(a.quality)-n.indexOf(i.quality)||i.identity-a.identity)[0]}function vo(e,t){return e.querySeqName||(e.names.includes(t)?t:"")}function Me(e,t){let[o,r]=(0,ze.useState)(),{names:n,match:a}=(0,ze.useMemo)(()=>bo(e,t),[e,t]),i=o!==void 0&&(n.length===0||n.includes(o))?o:void 0,u=i??a?.name??"";return{detected:a,names:n,querySeqName:u,querySeqOffset:u===a?.name?a.offset:0,setQuerySeqName:r,isAutoDetected:i===void 0&&!!a}}var ee=s(f()),Ae=s(L()),wo=s(V());var Cr=(0,wo.makeStyles)()({field:{marginTop:20},alert:{marginTop:10}});function Lr({identity:e,offset:t}){let o=`, covering ${Math.round(e*100)}% of it`;return t>0?`${o} from residue ${t+1}`:t<0?`${o} and running ${-t} residues past its start`:o}function he({names:e,detected:t,querySeqName:o,setQuerySeqName:r,isAutoDetected:n}){let{classes:a}=Cr();return ee.default.createElement(ee.default.Fragment,null,e.length>0?ee.default.createElement(g,{variant:"outlined",label:"MSA row matching the selected transcript",select:!0,fullWidth:!0,className:a.field,value:e.includes(o)?o:"",onChange:i=>{r(i.target.value)}},e.map(i=>ee.default.createElement(Ae.MenuItem,{value:i,key:i},i,t?.name===i?" \u2014 matches your protein":""))):ee.default.createElement(g,{variant:"outlined",label:"MSA row matching the selected transcript",fullWidth:!0,className:a.field,helperText:"Paste an alignment above and this fills in on its own",value:o,onChange:i=>{r(i.target.value)}}),n&&t?t.quality==="similar"?ee.default.createElement(Ae.Alert,{severity:"warning",className:a.alert},ee.default.createElement("strong",null,t.name)," is"," ",Math.round(t.identity*100),"% identical to your protein but is not the same sequence. Clicking the alignment navigates the genome view, approximately: wherever the two differ by an insertion or a deletion, every residue after it lands one codon off."):ee.default.createElement(Ae.Alert,{severity:"success",className:a.alert},"Matched ",ee.default.createElement("strong",null,t.name)," to your protein sequence",t.quality==="exact"?"":Lr(t),". Clicking the alignment will navigate the genome view."):e.length>0&&!o?ee.default.createElement(Ae.Alert,{severity:"warning",className:a.alert},"No row matched your protein sequence \u2014 pick the one for your gene above. Without it the alignment still renders, but clicking it will not navigate the genome view."):null)}var Nr=(0,Mo.makeStyles)()({ncbiLink:{wordBreak:"break-all"},textAreaFont:{fontFamily:"Courier New"},msaInput:{marginBottom:20},step:{marginTop:20},stepBody:{marginLeft:20,marginTop:8}}),kr=(0,To.observer)(function({handleClose:e,feature:t,model:o,children:r,preferredTranscriptId:n}){let{classes:a}=Nr(),i=G(o),{launchError:u,submit:c}=oe(e),[l,p]=(0,y.useState)(""),[d,m]=(0,y.useState)(""),b=re({feature:t,view:i,preferredTranscriptId:n}),{proteinSequence:S,selectedTranscript:v,error:j}=b,M=Me(l,S),P=qe(S),C=`${tt}?PAGE_TYPE=BlastSearch&PAGE=Proteins&PROGRAM=blastp&QUERY=${P}`,I=`${tt}?PAGE_TYPE=BlastSearch&PAGE=Proteins&PROGRAM=blastp&QUERY=${(0,xo.shorten2)(P,10)}`;return y.default.createElement(y.default.Fragment,null,y.default.createElement(Y,{error:u??j},r,y.default.createElement(R,{feature:t,...b}),y.default.createElement("div",{className:a.step},y.default.createElement(ge.Typography,{variant:"subtitle2"},"1. Run the search at NCBI"),y.default.createElement("div",{className:a.stepBody},S?y.default.createElement("div",{className:a.ncbiLink},y.default.createElement(Ft,{href:C},I)):y.default.createElement(ge.Alert,{severity:"info"},"Pick a transcript above to get a link carrying its protein sequence."))),y.default.createElement("div",{className:a.step},y.default.createElement(ge.Typography,{variant:"subtitle2"},"2. Align the hits"),y.default.createElement("div",{className:a.stepBody},y.default.createElement(ge.Typography,null,`On the results page click "Multiple Alignment" to run COBALT, NCBI's aligner. Download the alignment (.aln) and, if you want the tree drawn, the Newick tree (.nh).`))),y.default.createElement("div",{className:a.step},y.default.createElement(ge.Typography,{variant:"subtitle2"},"3. Paste the results back here"),y.default.createElement("div",{className:a.stepBody},y.default.createElement(g,{variant:"outlined",label:"Alignment",multiline:!0,minRows:5,maxRows:10,fullWidth:!0,className:a.msaInput,slotProps:{input:{className:a.textAreaFont}},placeholder:"Paste the .aln contents here",value:l,onChange:k=>{p(k.target.value)}}),y.default.createElement(g,{variant:"outlined",label:"Tree (optional)",multiline:!0,minRows:3,maxRows:10,fullWidth:!0,slotProps:{input:{className:a.textAreaFont}},placeholder:"Paste the .nh Newick tree here",value:d,onChange:k=>{m(k.target.value)}}),y.default.createElement(he,{...M})))),y.default.createElement(X,{model:o,submitDisabled:!v||!l.trim(),onSubmit:k=>{v&&c(()=>Q({view:i,feature:v,placement:k,displayName:te(v),querySeqName:M.querySeqName,querySeqOffset:M.querySeqOffset,data:{msa:l,tree:d}}))},onCancel:e}))}),Ao=kr;var Se=s(f()),ne=s(L());function lt({lookupMethod:e,setLookupMethod:t}){return Se.default.createElement(ne.FormControl,{component:"fieldset"},Se.default.createElement(ne.RadioGroup,{row:!0,value:e,onChange:o=>{t(o.target.value)}},Se.default.createElement(ne.FormControlLabel,{value:"automatic",control:Se.default.createElement(ne.Radio,null),label:"Automatic"}),Se.default.createElement(ne.FormControlLabel,{value:"manual",control:Se.default.createElement(ne.Radio,null),label:"Manual"})))}var z=s(f()),D=s(L()),Co=s(V());var Fr=(0,Co.makeStyles)()({field:{minWidth:300},help:{marginBottom:8}});function mt({handleClose:e,ebiEmail:t}){let{classes:o}=Fr(),[r,n]=(0,z.useState)(t);return z.default.createElement(D.Dialog,{open:!0,maxWidth:"lg",onClose:()=>{e()}},z.default.createElement(D.DialogTitle,null,"EBI settings"),z.default.createElement(D.DialogContent,null,z.default.createElement(D.Typography,{variant:"subtitle2",className:o.help},"Every search this tab runs is submitted to EBI with this address, which is how they reach whoever is generating the load. If your site sends real volume, use your own."),z.default.createElement(g,{autoFocus:!0,margin:"dense",label:"EBI contact email",fullWidth:!0,variant:"outlined",value:r,className:o.field,onChange:a=>{n(a.target.value)}}),z.default.createElement(D.Button,{variant:"contained",onClick:()=>{n(Ne)}},"Reset")),z.default.createElement(D.DialogActions,null,z.default.createElement(D.Button,{variant:"contained",color:"secondary",onClick:()=>{e()}},"Cancel"),z.default.createElement(D.Button,{color:"primary",variant:"contained",onClick:()=>{e({ebiEmail:r})}},"Save")))}var Pr=(0,Lo.makeStyles)()({settingsButton:{float:"right"}}),Ir={automatic:So,manual:Ao};function ut({handleClose:e,model:t,feature:o,preferredTranscriptId:r}){let[n,a]=(0,K.useState)("automatic"),[i,u]=de(St,Ne),[c,l]=(0,K.useState)(!1),{classes:p}=Pr(),d=Ir[n];return K.default.createElement(K.default.Fragment,null,K.default.createElement(Ke.Tooltip,{title:`EBI settings \u2014 jobs are submitted with ${i.trim()||Ne}`},K.default.createElement(Ke.IconButton,{className:p.settingsButton,"aria-label":"EBI settings",size:"small",onClick:()=>{l(!0)}},K.default.createElement(Ot,null))),K.default.createElement(d,{model:t,feature:o,handleClose:e,preferredTranscriptId:r},K.default.createElement(lt,{lookupMethod:n,setLookupMethod:a})),c?K.default.createElement(mt,{ebiEmail:i,handleClose:m=>{m&&u(m.ebiEmail),l(!1)}}):null)}var O=s(f());var Je=s(L()),Br=(0,O.lazy)(()=>import("./HelpDialog-DF4Y536X.js"));function ct(){let[e,t]=(0,O.useState)(!1);return O.default.createElement(O.default.Fragment,null,O.default.createElement(Je.Tooltip,{title:"What each tab does"},O.default.createElement(Je.IconButton,{"aria-label":"Help",onClick:()=>{t(!0)}},O.default.createElement(Bt,null))),e?O.default.createElement(O.Suspense,{fallback:null},O.default.createElement(Br,{handleClose:()=>{t(!1)}})):null)}var h=s(f()),dt=s(we()),No=s(nr()),ae=s(L()),ko=s(ve()),Fo=s(V());function qr(e){let t=He(e,500),{data:o,error:r,isLoading:n}=W(t?[JSON.stringify(t),"msa-file-text"]:null,()=>(0,No.openLocation)(t).readFile("utf8"));return{text:o??"",error:r,isLoading:n||t!==e}}var Er=(0,Fo.makeStyles)()({inputContainer:{marginBottom:30},fileContainer:{maxWidth:500},msaInput:{marginBottom:20}}),Dr=(0,ko.observer)(function({model:t,feature:o,handleClose:r,preferredTranscriptId:n}){let a=G(t),{classes:i}=Er(),{launchError:u,submit:c}=oe(r),[l,p]=(0,h.useState)("file"),[d,m]=(0,h.useState)(""),[b,S]=(0,h.useState)(""),[v,j]=(0,h.useState)(),[M,P]=(0,h.useState)(),C=re({feature:o,view:a,preferredTranscriptId:n}),{selectedTranscript:I,proteinSequence:k,error:F,sequenceStatus:$}=C,_=qr(l==="file"?v:void 0),x=Me(l==="file"?_.text:d,k),ue=u??F??_.error;return h.default.createElement(h.default.Fragment,null,h.default.createElement(Y,{error:ue},h.default.createElement(ae.FormControl,{component:"fieldset"},h.default.createElement(ae.RadioGroup,{row:!0,value:l,onChange:J=>{p(J.target.value)}},h.default.createElement(ae.FormControlLabel,{value:"file",control:h.default.createElement(ae.Radio,null),label:"Open files"}),h.default.createElement(ae.FormControlLabel,{value:"text",control:h.default.createElement(ae.Radio,null),label:"Paste text"}))),h.default.createElement("div",{className:i.inputContainer},l==="file"?h.default.createElement("div",{className:i.fileContainer},h.default.createElement(dt.FileSelector,{name:"MSA File .aln (Clustal), .fa/.mfa (aligned FASTA), .stock (Stockholm), etc)",inline:!0,location:v,setLocation:j}),h.default.createElement(dt.FileSelector,{name:"Tree file .nh (Newick) or .asn (NCBI COBALT ASN.1)",inline:!0,location:M,setLocation:P})):h.default.createElement(h.default.Fragment,null,h.default.createElement(g,{variant:"outlined",name:"MSA",multiline:!0,minRows:5,className:i.msaInput,maxRows:10,fullWidth:!0,placeholder:"Paste MSA here",value:d,onChange:J=>{m(J.target.value)}}),h.default.createElement(g,{variant:"outlined",name:"Tree",multiline:!0,minRows:5,maxRows:10,fullWidth:!0,placeholder:"Paste newick tree (optional)",value:b,onChange:J=>{S(J.target.value)}}))),h.default.createElement(R,{feature:o,...C}),h.default.createElement(he,{...x})),h.default.createElement(X,{model:t,hint:h.default.createElement(ie,{status:$}),submitDisabled:!I||l==="file"&&(!v||_.isLoading)||l==="text"&&!d.trim(),onSubmit:J=>{I&&c(()=>Q({view:a,feature:I,placement:J,displayName:te(I),querySeqName:x.querySeqName,querySeqOffset:x.querySeqOffset,...l==="file"?{msaFilehandle:v,treeFilehandle:M}:{data:{msa:d,tree:b}}}))},onCancel:r}))}),Po=Dr;var N=s(f()),jo=s(L()),$o=s(ve()),_o=s(V());var pt=s(f()),Io=s(L());var Or="msaview-ortholog-source",Bo={ncbi:"NCBI orthologs",panther:"PANTHER",uniref:"UniRef cluster"},qo=Object.keys(Bo);function jr(e){return qo.find(t=>t===e)??"ncbi"}function Eo(){let[e,t]=de(Or,"ncbi");return[jr(e),o=>{t(o)}]}var $r={ncbi:"vertebrates and insects",panther:"also yeast, worm, fly and plants",uniref:"all of UniProtKB within 50% identity"};function ft({value:e,onChange:t,className:o}){return pt.default.createElement(g,{variant:"outlined",label:"Source",className:o,select:!0,value:e,helperText:$r[e],onChange:r=>{t(r.target.value)}},qo.map(r=>pt.default.createElement(Io.MenuItem,{value:r,key:r},Bo[r])))}var Ye=s(f());async function Do(e,t){let o=e.trim();if(!o)return;if(/^\d+$/.test(o))return Number(o);let n=(await Ve(_e("esearch",{db:"taxonomy",term:o,retmax:"1",retmode:"json"}),{signal:t})).esearchresult?.idlist?.[0];return n?Number(n):void 0}async function Oo(e,t){let o=e.trim();if(!o)return;let n=(await Ve(_e("esearch",{db:"assembly",term:o,retmax:"1",retmode:"json"}),{signal:t})).esearchresult?.idlist?.[0];if(!n)return;let i=(await Ve(_e("esummary",{db:"assembly",id:n,retmode:"json"}),{signal:t})).result?.[n],u=Number(i?.speciestaxid);return i?.speciesname&&u?{taxId:u,speciesName:i.speciesname}:void 0}async function _r(e,t){let o=await Do(e,t);if(!o)throw new Error(`No NCBI taxon matches "${e}"`);let r=[],n=(await Et([o],t,i=>{r.push(i)})).get(o);if(!n&&r.length>0)throw new Error(`NCBI did not answer for the name of taxon ${o}`,{cause:r[0]});let a=[n?.sciname,n?.commonName&&`(${n.commonName})`].filter(Boolean).join(" ");return{taxId:o,label:a||`taxon ${o}`}}function ht({value:e,assemblyName:t,onChange:o,className:r}){let[n,a]=(0,Ye.useState)(),i=He(n,400),{data:u}=W(t&&n===void 0?[t,"assembly-species"]:null,m=>Oo(t,m),{onSuccess:m=>{m&&o(m.taxId)}}),{data:c,error:l}=W(i?.trim()?[i.trim(),"taxon"]:null,m=>_r(i,m),{onSuccess:({taxId:m})=>{o(m)}}),p=n??u?.speciesName??"human",d=n===void 0?u?.speciesName:c?.label;return Ye.default.createElement(g,{variant:"outlined",label:"Query species",className:r,value:p,onChange:m=>{a(m.target.value)},error:!!l,helperText:l?`${l}`:d??`the species this gene is from (taxon ${e})`})}var Vr=(0,_o.makeStyles)()({selectField:{width:180}}),Gr={ncbi:e=>`the ${e} closest species NCBI has`,panther:e=>`the ${e} closest species PANTHER has`,uniref:e=>`${e} rows, one per species, reviewed entries first`},Qr=(0,$o.observer)(function({handleClose:e,feature:t,model:o,preferredTranscriptId:r}){let{classes:n}=Vr(),a=G(o),{launchError:i,submit:u}=oe(e),[c,l]=(0,N.useState)(9606),[p,d]=Eo(),[m,b]=Ue(),[S,v]=(0,N.useState)(String(qt)),j=(0,N.useMemo)(()=>Ee(t),[t]),M=re({feature:t,view:a,preferredTranscriptId:r}),{selectedTranscript:P,proteinSequence:C,sequenceStatus:I}=M,k=M.error??i,F=Number(S),$=Number.isInteger(F)&&F>=2;return N.default.createElement(N.default.Fragment,null,N.default.createElement(Y,{error:k},N.default.createElement(jo.Typography,{variant:"body2"},"Precomputed orthologs, one gene per species, looked up rather than searched for. No BLAST job to queue, and with the in-browser aligner no job at all."),N.default.createElement("div",null,N.default.createElement(ft,{className:n.selectField,value:p,onChange:d}),N.default.createElement(ht,{className:n.selectField,value:c,assemblyName:a.assemblyNames[0],onChange:l}),N.default.createElement(Fe,{className:n.selectField,value:m,onChange:b}),N.default.createElement(g,{variant:"outlined",label:"Rows to align",className:n.selectField,type:"number",value:S,onChange:_=>{v(_.target.value)},error:!$,helperText:$?Gr[p](F):"a whole number, 2 or more"})),N.default.createElement(R,{feature:t,...M})),N.default.createElement(X,{model:o,hint:N.default.createElement(ie,{status:I}),submitDisabled:!C||!$,onSubmit:_=>{P&&u(()=>Q({view:a,feature:P,placement:_,displayName:`Orthologs - ${te(t)} - ${fe(P)}`,...Te,orthologParams:{taxId:c,source:p,maxSpecies:F,geneCandidates:j,msaAlgorithm:m,selectedTranscript:P.toJSON(),proteinSequence:C}}))},onCancel:e}))}),Vo=Qr;var T=s(f()),Ce=s(we()),Ze=s(be()),Re=s(L()),Jo=s(ve()),Yo=s(V());var Ho=s(Qo());async function Wo(e,t){return(await(0,Ho.getAdapter)(e,"msa",t)).dataAdapter}async function Uo({config:e,pluginManager:t}){return(await Wo(t,e)).getMSAList()}async function zo({config:e,pluginManager:t,msaId:o}){return(await Wo(t,e)).getMSA(o)}var Ko=s(or());function Xe(e){return(0,Ko.readConfObject)(e,["msa","datasets"])}var Hr=(0,Yo.makeStyles)()({selectedContainer:{marginTop:50}}),Wr=(0,Jo.observer)(function({model:e,feature:t,handleClose:o,preferredTranscriptId:r}){let n=(0,Ze.getSession)(e),a=G(e),{classes:i}=Hr(),{pluginManager:u}=(0,Ze.getEnv)(e),{assemblyNames:c}=a,{launchError:l,submit:p}=oe(o),d=Xe(n.jbrowse),[m,b]=(0,T.useState)(d?.[0]?.datasetId),S=d?.find(B=>B.datasetId===m),{data:v,isLoading:j,error:M}=W(S?`${S.datasetId}-msa-list`:null,()=>Uo({config:S.adapter,pluginManager:u})),P=re({feature:t,view:a,validIds:v,preferredTranscriptId:r}),{selectedTranscript:C,proteinSequence:I,sequenceStatus:k}=P,F=C?v?.find(B=>se(C,B)):void 0,{data:$,isLoading:_,error:x}=W(F&&S?`${S.datasetId}-${F}-msa`:null,()=>zo({msaId:F,config:S.adapter,pluginManager:u})),ue=(0,T.useMemo)(()=>$?.map(B=>`>${B.get("refName")}
3
3
  ${B.get("seq")}`).join(`
4
4
  `)??"",[$]),J=Me(ue,I),Pe=vo(J,`${F??""}_${c[0]??""}`),er=M??x??P.error??l;return T.default.createElement(T.default.Fragment,null,T.default.createElement(Y,{error:er},T.default.createElement(g,{select:!0,label:"Select MSA dataset",value:m,onChange:B=>{b(B.target.value)}},d?.map(B=>T.default.createElement(Re.MenuItem,{key:B.datasetId,value:B.datasetId},B.name))),S?T.default.createElement("div",{className:i.selectedContainer},!j&&_?T.default.createElement(Ce.LoadingEllipses,{variant:"h6",message:`Loading MSA for ${fe(C)||F}`}):null,j?T.default.createElement(Ce.LoadingEllipses,{variant:"h6",message:`Loading available MSAs for (${S.name})`}):null,v?T.default.createElement("div",null,T.default.createElement(Ce.SanitizedHTML,{html:S.description}),T.default.createElement(R,{feature:t,...P}),ue?T.default.createElement(he,{...J,querySeqName:Pe}):null):null):null),T.default.createElement(X,{model:e,hint:_?T.default.createElement(Ce.LoadingEllipses,{message:"Loading alignment"}):$?.length&&!Pe?T.default.createElement(Re.Typography,{color:"textSecondary",variant:"body2"},"no row matches this transcript"):T.default.createElement(ie,{status:k}),submitDisabled:!C||!$?.length||!Pe,onSubmit:B=>{C&&ue&&p(()=>Q({view:a,feature:C,placement:B,displayName:te(C),drawNodeBubbles:!1,labelsAlignRight:!0,showBranchLen:!1,colWidth:10,rowHeight:12,colorSchemeName:"percent_identity_dynamic",querySeqName:Pe,querySeqOffset:J.querySeqOffset,data:{msa:ue}}))},onCancel:o}))}),Xo=Wr;var et=s(f());function Le({children:e,value:t,index:o}){let r=t===o,[n,a]=(0,et.useState)(r);return r&&!n&&a(!0),et.default.createElement("div",{role:"tabpanel",hidden:!r},n||r?e:null)}function Ur({handleClose:e,feature:t,model:o,preferredTranscriptId:r}){let n=(0,Ro.getSession)(o),i=!!Xe(n.jbrowse)?.length,[u,c]=(0,A.useState)("orthologs");return A.default.createElement(Zo.Dialog,{maxWidth:"xl",title:"Launch MSA view",open:!0,onClose:e},A.default.createElement(Wt,null,A.default.createElement("div",{style:{display:"flex",alignItems:"center"}},A.default.createElement(ye.Tabs,{value:u,onChange:(l,p)=>{c(p)}},A.default.createElement(ye.Tab,{label:"Orthologs",value:"orthologs"}),A.default.createElement(ye.Tab,{label:"BLAST query",value:"ncbi_blast"}),i?A.default.createElement(ye.Tab,{label:"Pre-loaded MSA datasets",value:"preloaded_msa"}):null,A.default.createElement(ye.Tab,{label:"Manual upload",value:"manual_msa"})),A.default.createElement(ct,null)),A.default.createElement(Le,{value:u,index:"orthologs"},A.default.createElement(Vo,{handleClose:e,feature:t,model:o,preferredTranscriptId:r})),A.default.createElement(Le,{value:u,index:"ncbi_blast"},A.default.createElement(ut,{handleClose:e,feature:t,model:o,preferredTranscriptId:r})),i?A.default.createElement(Le,{value:u,index:"preloaded_msa"},A.default.createElement(Xo,{model:o,feature:t,handleClose:e,preferredTranscriptId:r})):null,A.default.createElement(Le,{value:u,index:"manual_msa"},A.default.createElement(Po,{model:o,feature:t,handleClose:e,preferredTranscriptId:r}))))}export{Ur as default};
5
- //# sourceMappingURL=LaunchMsaViewDialog-GJAUPGFC.js.map
5
+ //# sourceMappingURL=LaunchMsaViewDialog-R6CNRASN.js.map