jbrowse-plugin-mafviewer 1.4.5 → 1.4.6

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 (169) hide show
  1. package/dist/BigMafAdapter/BigMafAdapter.js +4 -5
  2. package/dist/BigMafAdapter/BigMafAdapter.js.map +1 -1
  3. package/dist/BigMafAdapter/configSchema.d.ts +2 -2
  4. package/dist/LinearMafDisplay/components/LinearMafDisplayComponent.js +38 -108
  5. package/dist/LinearMafDisplay/components/LinearMafDisplayComponent.js.map +1 -1
  6. package/dist/LinearMafDisplay/components/MAFTooltip.d.ts +0 -3
  7. package/dist/LinearMafDisplay/components/MAFTooltip.js.map +1 -1
  8. package/dist/LinearMafDisplay/components/MsaHighlightOverlay.d.ts +9 -0
  9. package/dist/LinearMafDisplay/components/MsaHighlightOverlay.js +34 -0
  10. package/dist/LinearMafDisplay/components/MsaHighlightOverlay.js.map +1 -0
  11. package/dist/LinearMafDisplay/components/Sidebar/SvgWrapper.js +1 -1
  12. package/dist/LinearMafDisplay/components/Sidebar/SvgWrapper.js.map +1 -1
  13. package/dist/LinearMafDisplay/components/useDragSelection.d.ts +25 -0
  14. package/dist/LinearMafDisplay/components/useDragSelection.js +103 -0
  15. package/dist/LinearMafDisplay/components/useDragSelection.js.map +1 -0
  16. package/dist/LinearMafDisplay/configSchema.d.ts +3 -30
  17. package/dist/LinearMafDisplay/stateModel.d.ts +1043 -121
  18. package/dist/LinearMafDisplay/stateModel.js +85 -41
  19. package/dist/LinearMafDisplay/stateModel.js.map +1 -1
  20. package/dist/LinearMafDisplay/types.d.ts +2 -2
  21. package/dist/LinearMafDisplay/util.d.ts +5 -0
  22. package/dist/LinearMafDisplay/util.js +25 -4
  23. package/dist/LinearMafDisplay/util.js.map +1 -1
  24. package/dist/LinearMafRenderer/LinearMafRenderer.d.ts +41 -5
  25. package/dist/LinearMafRenderer/LinearMafRenderer.js +1 -1
  26. package/dist/LinearMafRenderer/LinearMafRenderer.js.map +1 -1
  27. package/dist/LinearMafRenderer/components/LinearMafRendering.d.ts +14 -5
  28. package/dist/LinearMafRenderer/components/LinearMafRendering.js +21 -19
  29. package/dist/LinearMafRenderer/components/LinearMafRendering.js.map +1 -1
  30. package/dist/LinearMafRenderer/configSchema.d.ts +1 -6
  31. package/dist/LinearMafRenderer/configSchema.js +1 -6
  32. package/dist/LinearMafRenderer/configSchema.js.map +1 -1
  33. package/dist/LinearMafRenderer/rendering/insertions.d.ts +1 -1
  34. package/dist/LinearMafRenderer/rendering/insertions.js +2 -2
  35. package/dist/LinearMafRenderer/rendering/mismatches.d.ts +1 -1
  36. package/dist/LinearMafRenderer/rendering/mismatches.js +3 -3
  37. package/dist/LinearMafRenderer/rendering/types.d.ts +1 -1
  38. package/dist/MafAddTrackWorkflow/AddTrackWorkflow.js +1 -1
  39. package/dist/MafAddTrackWorkflow/AddTrackWorkflow.js.map +1 -1
  40. package/dist/MafAddTrackWorkflow/index.js +1 -1
  41. package/dist/MafAddTrackWorkflow/index.js.map +1 -1
  42. package/dist/MafGetSequences/MafGetSequences.d.ts +1 -0
  43. package/dist/MafGetSequences/MafGetSequences.js +2 -1
  44. package/dist/MafGetSequences/MafGetSequences.js.map +1 -1
  45. package/dist/MafSequenceWidget/LabelsCanvas.d.ts +8 -0
  46. package/dist/MafSequenceWidget/LabelsCanvas.js +37 -0
  47. package/dist/MafSequenceWidget/LabelsCanvas.js.map +1 -0
  48. package/dist/MafSequenceWidget/MafSequenceHoverHighlight.d.ts +6 -0
  49. package/dist/MafSequenceWidget/MafSequenceHoverHighlight.js +52 -0
  50. package/dist/MafSequenceWidget/MafSequenceHoverHighlight.js.map +1 -0
  51. package/dist/MafSequenceWidget/MafSequenceHoverHighlightExtension.d.ts +2 -0
  52. package/dist/MafSequenceWidget/MafSequenceHoverHighlightExtension.js +12 -0
  53. package/dist/MafSequenceWidget/MafSequenceHoverHighlightExtension.js.map +1 -0
  54. package/dist/MafSequenceWidget/MafSequenceWidget.d.ts +6 -0
  55. package/dist/MafSequenceWidget/MafSequenceWidget.js +189 -0
  56. package/dist/MafSequenceWidget/MafSequenceWidget.js.map +1 -0
  57. package/dist/MafSequenceWidget/SequenceCanvas.d.ts +12 -0
  58. package/dist/MafSequenceWidget/SequenceCanvas.js +86 -0
  59. package/dist/MafSequenceWidget/SequenceCanvas.js.map +1 -0
  60. package/dist/MafSequenceWidget/SequenceDisplay.d.ts +12 -0
  61. package/dist/MafSequenceWidget/SequenceDisplay.js +117 -0
  62. package/dist/MafSequenceWidget/SequenceDisplay.js.map +1 -0
  63. package/dist/MafSequenceWidget/SequenceTooltip.d.ts +11 -0
  64. package/dist/MafSequenceWidget/SequenceTooltip.js +39 -0
  65. package/dist/MafSequenceWidget/SequenceTooltip.js.map +1 -0
  66. package/dist/MafSequenceWidget/baseColors.d.ts +3 -0
  67. package/dist/MafSequenceWidget/baseColors.js +64 -0
  68. package/dist/MafSequenceWidget/baseColors.js.map +1 -0
  69. package/dist/MafSequenceWidget/colToGenomePos.d.ts +13 -0
  70. package/dist/MafSequenceWidget/colToGenomePos.js +32 -0
  71. package/dist/MafSequenceWidget/colToGenomePos.js.map +1 -0
  72. package/dist/MafSequenceWidget/colToGenomePos.test.d.ts +1 -0
  73. package/dist/MafSequenceWidget/colToGenomePos.test.js +136 -0
  74. package/dist/MafSequenceWidget/colToGenomePos.test.js.map +1 -0
  75. package/dist/MafSequenceWidget/configSchema.d.ts +1 -0
  76. package/dist/MafSequenceWidget/configSchema.js +3 -0
  77. package/dist/MafSequenceWidget/configSchema.js.map +1 -0
  78. package/dist/MafSequenceWidget/constants.d.ts +4 -0
  79. package/dist/MafSequenceWidget/constants.js +5 -0
  80. package/dist/MafSequenceWidget/constants.js.map +1 -0
  81. package/dist/MafSequenceWidget/index.d.ts +2 -0
  82. package/dist/MafSequenceWidget/index.js +16 -0
  83. package/dist/MafSequenceWidget/index.js.map +1 -0
  84. package/dist/MafSequenceWidget/stateModelFactory.d.ts +67 -0
  85. package/dist/MafSequenceWidget/stateModelFactory.js +21 -0
  86. package/dist/MafSequenceWidget/stateModelFactory.js.map +1 -0
  87. package/dist/MafTabixAdapter/MafTabixAdapter.js +4 -35
  88. package/dist/MafTabixAdapter/MafTabixAdapter.js.map +1 -1
  89. package/dist/MafTabixAdapter/configSchema.d.ts +4 -4
  90. package/dist/MafTrack/configSchema.d.ts +16 -11
  91. package/dist/index.js +2 -0
  92. package/dist/index.js.map +1 -1
  93. package/dist/jbrowse-plugin-mafviewer.umd.production.min.js +12 -24
  94. package/dist/jbrowse-plugin-mafviewer.umd.production.min.js.map +4 -4
  95. package/dist/util/clipboard.d.ts +2 -0
  96. package/dist/util/clipboard.js +28 -0
  97. package/dist/util/clipboard.js.map +1 -0
  98. package/dist/util/fastaUtils.d.ts +2 -1
  99. package/dist/util/fastaUtils.js +72 -2
  100. package/dist/util/fastaUtils.js.map +1 -1
  101. package/dist/util/fastaUtils.test.js +190 -0
  102. package/dist/util/fastaUtils.test.js.map +1 -1
  103. package/dist/util/parseAssemblyName.d.ts +32 -0
  104. package/dist/util/parseAssemblyName.js +87 -0
  105. package/dist/util/parseAssemblyName.js.map +1 -0
  106. package/dist/util/parseAssemblyName.test.d.ts +1 -0
  107. package/dist/util/parseAssemblyName.test.js +269 -0
  108. package/dist/util/parseAssemblyName.test.js.map +1 -0
  109. package/package.json +7 -7
  110. package/src/BigMafAdapter/BigMafAdapter.ts +5 -5
  111. package/src/LinearMafDisplay/components/LinearMafDisplayComponent.tsx +62 -144
  112. package/src/LinearMafDisplay/components/MAFTooltip.tsx +0 -3
  113. package/src/LinearMafDisplay/components/MsaHighlightOverlay.tsx +62 -0
  114. package/src/LinearMafDisplay/components/Sidebar/SvgWrapper.tsx +1 -1
  115. package/src/LinearMafDisplay/components/useDragSelection.ts +159 -0
  116. package/src/LinearMafDisplay/stateModel.ts +135 -48
  117. package/src/LinearMafDisplay/types.ts +2 -2
  118. package/src/LinearMafDisplay/util.ts +31 -5
  119. package/src/LinearMafRenderer/LinearMafRenderer.ts +1 -1
  120. package/src/LinearMafRenderer/components/LinearMafRendering.tsx +38 -24
  121. package/src/LinearMafRenderer/configSchema.ts +1 -6
  122. package/src/LinearMafRenderer/rendering/insertions.ts +2 -2
  123. package/src/LinearMafRenderer/rendering/mismatches.ts +3 -3
  124. package/src/LinearMafRenderer/rendering/types.ts +1 -1
  125. package/src/MafAddTrackWorkflow/AddTrackWorkflow.tsx +1 -1
  126. package/src/MafAddTrackWorkflow/index.ts +1 -1
  127. package/src/MafGetSequences/MafGetSequences.ts +10 -2
  128. package/src/MafSequenceWidget/LabelsCanvas.tsx +58 -0
  129. package/src/MafSequenceWidget/MafSequenceHoverHighlight.tsx +83 -0
  130. package/src/MafSequenceWidget/MafSequenceHoverHighlightExtension.tsx +24 -0
  131. package/src/MafSequenceWidget/MafSequenceWidget.tsx +294 -0
  132. package/src/MafSequenceWidget/SequenceCanvas.tsx +136 -0
  133. package/src/MafSequenceWidget/SequenceDisplay.tsx +188 -0
  134. package/src/MafSequenceWidget/SequenceTooltip.tsx +70 -0
  135. package/src/MafSequenceWidget/baseColors.ts +76 -0
  136. package/src/MafSequenceWidget/colToGenomePos.test.ts +166 -0
  137. package/src/MafSequenceWidget/colToGenomePos.ts +40 -0
  138. package/src/MafSequenceWidget/configSchema.ts +3 -0
  139. package/src/MafSequenceWidget/constants.ts +4 -0
  140. package/src/MafSequenceWidget/index.ts +24 -0
  141. package/src/MafSequenceWidget/stateModelFactory.ts +43 -0
  142. package/src/MafTabixAdapter/MafTabixAdapter.ts +12 -51
  143. package/src/index.ts +2 -0
  144. package/src/util/__snapshots__/fastaUtils.test.ts.snap +35 -0
  145. package/src/util/clipboard.ts +35 -0
  146. package/src/util/fastaUtils.test.ts +199 -0
  147. package/src/util/fastaUtils.ts +94 -1
  148. package/src/util/parseAssemblyName.test.ts +350 -0
  149. package/src/util/parseAssemblyName.ts +106 -0
  150. package/dist/LinearMafDisplay/components/GetSequenceDialog/GetSequenceDialog.d.ts +0 -11
  151. package/dist/LinearMafDisplay/components/GetSequenceDialog/GetSequenceDialog.js +0 -97
  152. package/dist/LinearMafDisplay/components/GetSequenceDialog/GetSequenceDialog.js.map +0 -1
  153. package/dist/LinearMafDisplay/components/InsertionSequenceDialog/InsertionSequenceDialog.d.ts +0 -14
  154. package/dist/LinearMafDisplay/components/InsertionSequenceDialog/InsertionSequenceDialog.js +0 -69
  155. package/dist/LinearMafDisplay/components/InsertionSequenceDialog/InsertionSequenceDialog.js.map +0 -1
  156. package/dist/LinearMafDisplay/components/util.d.ts +0 -1
  157. package/dist/LinearMafDisplay/components/util.js +0 -8
  158. package/dist/LinearMafDisplay/components/util.js.map +0 -1
  159. package/dist/util/fetchSequences.d.ts +0 -18
  160. package/dist/util/fetchSequences.js +0 -39
  161. package/dist/util/fetchSequences.js.map +0 -1
  162. package/dist/util/useSequences.d.ts +0 -21
  163. package/dist/util/useSequences.js +0 -64
  164. package/dist/util/useSequences.js.map +0 -1
  165. package/src/LinearMafDisplay/components/GetSequenceDialog/GetSequenceDialog.tsx +0 -175
  166. package/src/LinearMafDisplay/components/InsertionSequenceDialog/InsertionSequenceDialog.tsx +0 -105
  167. package/src/LinearMafDisplay/components/util.ts +0 -7
  168. package/src/util/fetchSequences.ts +0 -57
  169. package/src/util/useSequences.ts +0 -90
@@ -0,0 +1,117 @@
1
+ import React, { useCallback, useEffect, useMemo, useRef } from 'react';
2
+ import { observer } from 'mobx-react';
3
+ import { makeStyles } from 'tss-react/mui';
4
+ import LabelsCanvas from './LabelsCanvas';
5
+ import SequenceCanvas from './SequenceCanvas';
6
+ import SequenceTooltip from './SequenceTooltip';
7
+ import { buildColToGenomePos, findRefSampleIndex } from './colToGenomePos';
8
+ const useStyles = makeStyles()(theme => ({
9
+ container: {
10
+ border: `1px solid ${theme.palette.divider}`,
11
+ borderRadius: theme.shape.borderRadius,
12
+ maxHeight: 400,
13
+ backgroundColor: theme.palette.background.paper,
14
+ display: 'flex',
15
+ overflow: 'hidden',
16
+ position: 'relative',
17
+ },
18
+ labelsContainer: {
19
+ flexShrink: 0,
20
+ borderRight: `1px solid ${theme.palette.divider}`,
21
+ backgroundColor: theme.palette.background.paper,
22
+ overflowY: 'auto',
23
+ scrollbarWidth: 'none',
24
+ '&::-webkit-scrollbar': {
25
+ display: 'none',
26
+ },
27
+ },
28
+ sequenceContainer: {
29
+ flex: 1,
30
+ overflow: 'auto',
31
+ },
32
+ }));
33
+ const SequenceDisplay = observer(function SequenceDisplay({ model, sequences, colorBackground, showSampleNames, }) {
34
+ const { classes } = useStyles();
35
+ const labelsContainerRef = useRef(null);
36
+ const seqContainerRef = useRef(null);
37
+ const { samples, regions } = model;
38
+ const [hoveredCol, setHoveredCol] = React.useState();
39
+ const [hoveredRow, setHoveredRow] = React.useState();
40
+ const [tooltipPos, setTooltipPos] = React.useState();
41
+ const maxLabelLength = useMemo(() => samples ? Math.max(...samples.map(s => (s.label ?? s.id).length)) : 0, [samples]);
42
+ const colToGenomePos = useMemo(() => {
43
+ if (!regions) {
44
+ return [];
45
+ }
46
+ const region = regions[0];
47
+ if (!region) {
48
+ return [];
49
+ }
50
+ const refIdx = findRefSampleIndex(samples, region.assemblyName);
51
+ const refSequence = sequences[refIdx] || '';
52
+ return buildColToGenomePos(refSequence, region.start);
53
+ }, [sequences, regions, samples]);
54
+ // Sync vertical scroll between labels and sequences
55
+ useEffect(() => {
56
+ const labelsContainer = labelsContainerRef.current;
57
+ const seqContainer = seqContainerRef.current;
58
+ if (!labelsContainer || !seqContainer) {
59
+ return;
60
+ }
61
+ const handleSeqScroll = () => {
62
+ labelsContainer.scrollTop = seqContainer.scrollTop;
63
+ };
64
+ seqContainer.addEventListener('scroll', handleSeqScroll);
65
+ return () => {
66
+ seqContainer.removeEventListener('scroll', handleSeqScroll);
67
+ };
68
+ }, []);
69
+ const handleHover = useCallback((col, row, clientX, clientY) => {
70
+ if (!regions) {
71
+ return;
72
+ }
73
+ setHoveredCol(col);
74
+ setHoveredRow(row);
75
+ setTooltipPos({ x: clientX, y: clientY });
76
+ if (col !== undefined) {
77
+ const genomicPos = colToGenomePos[col];
78
+ const region = regions[0];
79
+ if (genomicPos !== undefined && region) {
80
+ model.setHoverHighlight({
81
+ refName: region.refName,
82
+ start: genomicPos,
83
+ end: genomicPos + 1,
84
+ assemblyName: region.assemblyName,
85
+ });
86
+ }
87
+ else {
88
+ model.setHoverHighlight(undefined);
89
+ }
90
+ }
91
+ else {
92
+ model.setHoverHighlight(undefined);
93
+ }
94
+ }, [colToGenomePos, model, regions]);
95
+ const handleLeave = useCallback(() => {
96
+ setHoveredCol(undefined);
97
+ setHoveredRow(undefined);
98
+ setTooltipPos(undefined);
99
+ model.setHoverHighlight(undefined);
100
+ }, [model]);
101
+ if (!samples || !regions || sequences.length === 0) {
102
+ return React.createElement("div", null, "No sequence data");
103
+ }
104
+ const hoveredSample = hoveredRow !== undefined ? samples[hoveredRow] : undefined;
105
+ const hoveredChar = hoveredRow !== undefined && hoveredCol !== undefined
106
+ ? sequences[hoveredRow]?.[hoveredCol]
107
+ : undefined;
108
+ const genomicPos = hoveredCol !== undefined ? colToGenomePos[hoveredCol] : undefined;
109
+ return (React.createElement("div", { className: classes.container },
110
+ showSampleNames && (React.createElement("div", { ref: labelsContainerRef, className: classes.labelsContainer },
111
+ React.createElement(LabelsCanvas, { samples: samples, maxLabelLength: maxLabelLength }))),
112
+ React.createElement("div", { ref: seqContainerRef, className: classes.sequenceContainer },
113
+ React.createElement(SequenceCanvas, { samples: samples, sequences: sequences, colorBackground: colorBackground, hoveredCol: hoveredCol, onHover: handleHover, onLeave: handleLeave })),
114
+ tooltipPos && hoveredSample && (React.createElement(SequenceTooltip, { x: tooltipPos.x, y: tooltipPos.y, sample: hoveredSample, base: hoveredChar, genomicPos: genomicPos }))));
115
+ });
116
+ export default SequenceDisplay;
117
+ //# sourceMappingURL=SequenceDisplay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SequenceDisplay.js","sourceRoot":"","sources":["../../src/MafSequenceWidget/SequenceDisplay.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import type { Sample } from '../LinearMafDisplay/types';
3
+ interface SequenceTooltipProps {
4
+ x: number;
5
+ y: number;
6
+ sample: Sample;
7
+ base?: string;
8
+ genomicPos?: number;
9
+ }
10
+ export default function SequenceTooltip({ x, y, sample, base, genomicPos, }: SequenceTooltipProps): React.JSX.Element;
11
+ export {};
@@ -0,0 +1,39 @@
1
+ import React from 'react';
2
+ import { makeStyles } from 'tss-react/mui';
3
+ const useStyles = makeStyles()(theme => ({
4
+ tooltip: {
5
+ position: 'fixed',
6
+ pointerEvents: 'none',
7
+ zIndex: 1000,
8
+ backgroundColor: theme.palette.grey[800],
9
+ color: theme.palette.common.white,
10
+ padding: '4px 8px',
11
+ borderRadius: 4,
12
+ fontSize: 12,
13
+ whiteSpace: 'nowrap',
14
+ },
15
+ insertion: {
16
+ color: theme.palette.warning.light,
17
+ fontStyle: 'italic',
18
+ },
19
+ }));
20
+ export default function SequenceTooltip({ x, y, sample, base, genomicPos, }) {
21
+ const { classes } = useStyles();
22
+ // An insertion is when we have a base but no genomic position
23
+ // (the reference has a gap at this column)
24
+ const isInsertion = base !== undefined && genomicPos === undefined;
25
+ return (React.createElement("div", { className: classes.tooltip, style: {
26
+ left: x + 12,
27
+ top: y + 12,
28
+ } },
29
+ React.createElement("div", null,
30
+ React.createElement("strong", null, sample.label)),
31
+ base && (React.createElement("div", null,
32
+ "Base: ",
33
+ base,
34
+ genomicPos !== undefined
35
+ ? ` | Pos: ${(genomicPos + 1).toLocaleString('en-US')}`
36
+ : null)),
37
+ isInsertion && (React.createElement("div", { className: classes.insertion }, "Insertion (not in reference)"))));
38
+ }
39
+ //# sourceMappingURL=SequenceTooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SequenceTooltip.js","sourceRoot":"","sources":["../../src/MafSequenceWidget/SequenceTooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAI1C,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvC,OAAO,EAAE;QACP,QAAQ,EAAE,OAAO;QACjB,aAAa,EAAE,MAAM;QACrB,MAAM,EAAE,IAAI;QACZ,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QACxC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QACjC,OAAO,EAAE,SAAS;QAClB,YAAY,EAAE,CAAC;QACf,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,QAAQ;KACrB;IACD,SAAS,EAAE;QACT,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK;QAClC,SAAS,EAAE,QAAQ;KACpB;CACF,CAAC,CAAC,CAAA;AAUH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EACtC,CAAC,EACD,CAAC,EACD,MAAM,EACN,IAAI,EACJ,UAAU,GACW;IACrB,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAE/B,8DAA8D;IAC9D,2CAA2C;IAC3C,MAAM,WAAW,GAAG,IAAI,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,CAAA;IAElE,OAAO,CACL,6BACE,SAAS,EAAE,OAAO,CAAC,OAAO,EAC1B,KAAK,EAAE;YACL,IAAI,EAAE,CAAC,GAAG,EAAE;YACZ,GAAG,EAAE,CAAC,GAAG,EAAE;SACZ;QAED;YACE,oCAAS,MAAM,CAAC,KAAK,CAAU,CAC3B;QACL,IAAI,IAAI,CACP;;YACS,IAAI;YACV,UAAU,KAAK,SAAS;gBACvB,CAAC,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;gBACvD,CAAC,CAAC,IAAI,CACJ,CACP;QACA,WAAW,IAAI,CACd,6BAAK,SAAS,EAAE,OAAO,CAAC,SAAS,mCAAoC,CACtE,CACG,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Theme } from '@mui/material';
2
+ export declare function getBaseColor(base: string, theme: Theme): string;
3
+ export declare function getContrastText(base: string, theme: Theme): string;
@@ -0,0 +1,64 @@
1
+ function getBases(theme) {
2
+ return theme.palette.bases;
3
+ }
4
+ export function getBaseColor(base, theme) {
5
+ const bases = getBases(theme);
6
+ if (!bases) {
7
+ switch (base.toUpperCase()) {
8
+ case 'A':
9
+ return '#6dbf6d';
10
+ case 'C':
11
+ return '#6c6cff';
12
+ case 'G':
13
+ return '#ffb347';
14
+ case 'T':
15
+ case 'U':
16
+ return '#ff6b6b';
17
+ default:
18
+ return theme.palette.grey[500];
19
+ }
20
+ }
21
+ switch (base.toUpperCase()) {
22
+ case 'A':
23
+ return bases.A.main;
24
+ case 'C':
25
+ return bases.C.main;
26
+ case 'G':
27
+ return bases.G.main;
28
+ case 'T':
29
+ case 'U':
30
+ return bases.T.main;
31
+ default:
32
+ return theme.palette.grey[500];
33
+ }
34
+ }
35
+ export function getContrastText(base, theme) {
36
+ const bases = getBases(theme);
37
+ if (!bases) {
38
+ switch (base.toUpperCase()) {
39
+ case 'A':
40
+ case 'C':
41
+ case 'T':
42
+ case 'U':
43
+ return '#fff';
44
+ case 'G':
45
+ return '#000';
46
+ default:
47
+ return theme.palette.common.white;
48
+ }
49
+ }
50
+ switch (base.toUpperCase()) {
51
+ case 'A':
52
+ return bases.A.contrastText;
53
+ case 'C':
54
+ return bases.C.contrastText;
55
+ case 'G':
56
+ return bases.G.contrastText;
57
+ case 'T':
58
+ case 'U':
59
+ return bases.T.contrastText;
60
+ default:
61
+ return theme.palette.common.white;
62
+ }
63
+ }
64
+ //# sourceMappingURL=baseColors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseColors.js","sourceRoot":"","sources":["../../src/MafSequenceWidget/baseColors.ts"],"names":[],"mappings":"AASA,SAAS,QAAQ,CAAC,KAAY;IAC5B,OAAQ,KAAK,CAAC,OAAe,CAAC,KAAgC,CAAA;AAChE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,KAAY;IACrD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,QAAQ,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YAC3B,KAAK,GAAG;gBACN,OAAO,SAAS,CAAA;YAClB,KAAK,GAAG;gBACN,OAAO,SAAS,CAAA;YAClB,KAAK,GAAG;gBACN,OAAO,SAAS,CAAA;YAClB,KAAK,GAAG,CAAC;YACT,KAAK,GAAG;gBACN,OAAO,SAAS,CAAA;YAClB;gBACE,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAClC,CAAC;IACH,CAAC;IAED,QAAQ,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QAC3B,KAAK,GAAG;YACN,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;QACrB,KAAK,GAAG;YACN,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;QACrB,KAAK,GAAG;YACN,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;QACrB,KAAK,GAAG,CAAC;QACT,KAAK,GAAG;YACN,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;QACrB;YACE,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAClC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAY;IACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,QAAQ,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YAC3B,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC;YACT,KAAK,GAAG;gBACN,OAAO,MAAM,CAAA;YACf,KAAK,GAAG;gBACN,OAAO,MAAM,CAAA;YACf;gBACE,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAA;QACrC,CAAC;IACH,CAAC;IAED,QAAQ,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QAC3B,KAAK,GAAG;YACN,OAAO,KAAK,CAAC,CAAC,CAAC,YAAY,CAAA;QAC7B,KAAK,GAAG;YACN,OAAO,KAAK,CAAC,CAAC,CAAC,YAAY,CAAA;QAC7B,KAAK,GAAG;YACN,OAAO,KAAK,CAAC,CAAC,CAAC,YAAY,CAAA;QAC7B,KAAK,GAAG,CAAC;QACT,KAAK,GAAG;YACN,OAAO,KAAK,CAAC,CAAC,CAAC,YAAY,CAAA;QAC7B;YACE,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAA;IACrC,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { Sample } from '../LinearMafDisplay/types';
2
+ /**
3
+ * Find the index of the reference sample (matching the assembly name from the region)
4
+ * Falls back to 0 if no match is found
5
+ */
6
+ export declare function findRefSampleIndex(samples: Sample[] | undefined, assemblyName: string | undefined): number;
7
+ /**
8
+ * Build a mapping from display column index to genomic position.
9
+ * Only the reference sequence determines genomic positions - gaps in the
10
+ * reference map to undefined (no genomic position), while gaps in other
11
+ * samples don't affect the mapping.
12
+ */
13
+ export declare function buildColToGenomePos(refSequence: string, regionStart: number): (number | undefined)[];
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Find the index of the reference sample (matching the assembly name from the region)
3
+ * Falls back to 0 if no match is found
4
+ */
5
+ export function findRefSampleIndex(samples, assemblyName) {
6
+ if (!samples || !assemblyName) {
7
+ return 0;
8
+ }
9
+ const idx = samples.findIndex(s => s.id === assemblyName);
10
+ return idx === -1 ? 0 : idx;
11
+ }
12
+ /**
13
+ * Build a mapping from display column index to genomic position.
14
+ * Only the reference sequence determines genomic positions - gaps in the
15
+ * reference map to undefined (no genomic position), while gaps in other
16
+ * samples don't affect the mapping.
17
+ */
18
+ export function buildColToGenomePos(refSequence, regionStart) {
19
+ const mapping = [];
20
+ let genomePos = regionStart;
21
+ for (const char of refSequence) {
22
+ if (char === '-') {
23
+ mapping.push(undefined);
24
+ }
25
+ else {
26
+ mapping.push(genomePos);
27
+ genomePos++;
28
+ }
29
+ }
30
+ return mapping;
31
+ }
32
+ //# sourceMappingURL=colToGenomePos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colToGenomePos.js","sourceRoot":"","sources":["../../src/MafSequenceWidget/colToGenomePos.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAA6B,EAC7B,YAAgC;IAEhC,IAAI,CAAC,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;QAC9B,OAAO,CAAC,CAAA;IACV,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,CAAA;IACzD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;AAC7B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,WAAmB,EACnB,WAAmB;IAEnB,MAAM,OAAO,GAA2B,EAAE,CAAA;IAC1C,IAAI,SAAS,GAAG,WAAW,CAAA;IAE3B,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACzB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACvB,SAAS,EAAE,CAAA;QACb,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,136 @@
1
+ import { describe, expect, test } from 'vitest';
2
+ import { buildColToGenomePos, findRefSampleIndex } from './colToGenomePos';
3
+ describe('findRefSampleIndex', () => {
4
+ const samples = [
5
+ { id: 'mm10', label: 'Mouse' },
6
+ { id: 'hg38', label: 'Human' },
7
+ { id: 'panTro6', label: 'Chimp' },
8
+ ];
9
+ test('returns index of sample matching assemblyName', () => {
10
+ expect(findRefSampleIndex(samples, 'hg38')).toBe(1);
11
+ expect(findRefSampleIndex(samples, 'mm10')).toBe(0);
12
+ expect(findRefSampleIndex(samples, 'panTro6')).toBe(2);
13
+ });
14
+ test('returns 0 when no match found', () => {
15
+ expect(findRefSampleIndex(samples, 'galGal6')).toBe(0);
16
+ });
17
+ test('returns 0 when samples is undefined', () => {
18
+ expect(findRefSampleIndex(undefined, 'hg38')).toBe(0);
19
+ });
20
+ test('returns 0 when assemblyName is undefined', () => {
21
+ expect(findRefSampleIndex(samples, undefined)).toBe(0);
22
+ });
23
+ test('returns 0 when both are undefined', () => {
24
+ expect(findRefSampleIndex(undefined, undefined)).toBe(0);
25
+ });
26
+ test('returns 0 for empty samples array', () => {
27
+ expect(findRefSampleIndex([], 'hg38')).toBe(0);
28
+ });
29
+ });
30
+ describe('buildColToGenomePos', () => {
31
+ test('maps non-gap characters to sequential genomic positions', () => {
32
+ const result = buildColToGenomePos('ACGT', 100);
33
+ expect(result).toEqual([100, 101, 102, 103]);
34
+ });
35
+ test('maps gaps to undefined', () => {
36
+ const result = buildColToGenomePos('AC-GT', 100);
37
+ expect(result).toEqual([100, 101, undefined, 102, 103]);
38
+ });
39
+ test('handles multiple consecutive gaps', () => {
40
+ const result = buildColToGenomePos('A--G', 100);
41
+ expect(result).toEqual([100, undefined, undefined, 101]);
42
+ });
43
+ test('handles gaps at start', () => {
44
+ const result = buildColToGenomePos('--ACG', 100);
45
+ expect(result).toEqual([undefined, undefined, 100, 101, 102]);
46
+ });
47
+ test('handles gaps at end', () => {
48
+ const result = buildColToGenomePos('ACG--', 100);
49
+ expect(result).toEqual([100, 101, 102, undefined, undefined]);
50
+ });
51
+ test('handles all gaps', () => {
52
+ const result = buildColToGenomePos('----', 100);
53
+ expect(result).toEqual([undefined, undefined, undefined, undefined]);
54
+ });
55
+ test('handles empty sequence', () => {
56
+ const result = buildColToGenomePos('', 100);
57
+ expect(result).toEqual([]);
58
+ });
59
+ test('works with different start positions', () => {
60
+ const result = buildColToGenomePos('AC-T', 50000);
61
+ expect(result).toEqual([50000, 50001, undefined, 50002]);
62
+ });
63
+ });
64
+ describe('integration: hover highlight with gaps', () => {
65
+ const samples = [
66
+ { id: 'mm10', label: 'Mouse' },
67
+ { id: 'hg38', label: 'Human' },
68
+ { id: 'panTro6', label: 'Chimp' },
69
+ ];
70
+ test('gap in non-reference sample does not affect mapping', () => {
71
+ // Reference is hg38 (index 1)
72
+ // mm10 (index 0) has a gap, but hg38 does not
73
+ const sequences = [
74
+ 'A-GT', // mm10 - has gap at position 1
75
+ 'ACGT', // hg38 - no gap (this is the reference)
76
+ 'ACGT', // panTro6
77
+ ];
78
+ const refIdx = findRefSampleIndex(samples, 'hg38');
79
+ expect(refIdx).toBe(1);
80
+ const mapping = buildColToGenomePos(sequences[refIdx], 100);
81
+ // All positions should map to genomic coordinates since reference has no gaps
82
+ expect(mapping).toEqual([100, 101, 102, 103]);
83
+ });
84
+ test('gap in reference sample maps to undefined', () => {
85
+ // Reference is hg38 (index 1)
86
+ // hg38 has a gap (insertion in other species)
87
+ const sequences = [
88
+ 'ACGT', // mm10
89
+ 'A-GT', // hg38 - has gap (this is the reference)
90
+ 'ATGT', // panTro6 - has T where hg38 has gap
91
+ ];
92
+ const refIdx = findRefSampleIndex(samples, 'hg38');
93
+ const mapping = buildColToGenomePos(sequences[refIdx], 100);
94
+ // Position 1 should be undefined because reference has gap there
95
+ expect(mapping).toEqual([100, undefined, 101, 102]);
96
+ });
97
+ test('correctly handles reference as first sample', () => {
98
+ // Reference is mm10 (index 0)
99
+ const sequences = [
100
+ 'ACGT', // mm10 - reference
101
+ 'A-GT', // hg38 - has gap
102
+ 'ACGT', // panTro6
103
+ ];
104
+ const refIdx = findRefSampleIndex(samples, 'mm10');
105
+ expect(refIdx).toBe(0);
106
+ const mapping = buildColToGenomePos(sequences[refIdx], 100);
107
+ // All positions map because reference (mm10) has no gaps
108
+ expect(mapping).toEqual([100, 101, 102, 103]);
109
+ });
110
+ test('correctly handles reference as last sample', () => {
111
+ // Reference is panTro6 (index 2)
112
+ const sequences = [
113
+ 'A-GT', // mm10 - has gap
114
+ 'A-GT', // hg38 - has gap
115
+ 'ACGT', // panTro6 - no gap (this is the reference)
116
+ ];
117
+ const refIdx = findRefSampleIndex(samples, 'panTro6');
118
+ expect(refIdx).toBe(2);
119
+ const mapping = buildColToGenomePos(sequences[refIdx], 100);
120
+ // All positions map because reference (panTro6) has no gaps
121
+ expect(mapping).toEqual([100, 101, 102, 103]);
122
+ });
123
+ test('falls back to first sample when assembly not found', () => {
124
+ // Reference is galGal6 which doesn't exist in samples
125
+ const sequences = [
126
+ 'ACGT', // mm10
127
+ 'A-GT', // hg38
128
+ 'ACGT', // panTro6
129
+ ];
130
+ const refIdx = findRefSampleIndex(samples, 'galGal6');
131
+ expect(refIdx).toBe(0); // Falls back to first sample
132
+ const mapping = buildColToGenomePos(sequences[refIdx], 100);
133
+ expect(mapping).toEqual([100, 101, 102, 103]);
134
+ });
135
+ });
136
+ //# sourceMappingURL=colToGenomePos.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colToGenomePos.test.js","sourceRoot":"","sources":["../../src/MafSequenceWidget/colToGenomePos.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const configSchema: import("@jbrowse/core/esm/configuration/configurationSchema").ConfigurationSchemaType<{}, import("@jbrowse/core/esm/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined>>;
@@ -0,0 +1,3 @@
1
+ import { ConfigurationSchema } from '@jbrowse/core/configuration';
2
+ export const configSchema = ConfigurationSchema('MafSequenceWidget', {});
3
+ //# sourceMappingURL=configSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configSchema.js","sourceRoot":"","sources":["../../src/MafSequenceWidget/configSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEjE,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ export declare const CHAR_WIDTH = 12;
2
+ export declare const ROW_HEIGHT = 16;
3
+ export declare const FONT = "bold 12px monospace";
4
+ export declare const LABEL_PADDING = 10;
@@ -0,0 +1,5 @@
1
+ export const CHAR_WIDTH = 12;
2
+ export const ROW_HEIGHT = 16;
3
+ export const FONT = 'bold 12px monospace';
4
+ export const LABEL_PADDING = 10;
5
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/MafSequenceWidget/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAA;AAC5B,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAA;AAC5B,MAAM,CAAC,MAAM,IAAI,GAAG,qBAAqB,CAAA;AACzC,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAA"}
@@ -0,0 +1,2 @@
1
+ import type PluginManager from '@jbrowse/core/PluginManager';
2
+ export default function MafSequenceWidgetF(pluginManager: PluginManager): void;
@@ -0,0 +1,16 @@
1
+ import { lazy } from 'react';
2
+ import WidgetType from '@jbrowse/core/pluggableElementTypes/WidgetType';
3
+ import MafSequenceHoverHighlightExtensionF from './MafSequenceHoverHighlightExtension';
4
+ import { configSchema } from './configSchema';
5
+ import { stateModelFactory } from './stateModelFactory';
6
+ export default function MafSequenceWidgetF(pluginManager) {
7
+ pluginManager.addWidgetType(() => new WidgetType({
8
+ name: 'MafSequenceWidget',
9
+ heading: 'MAF Sequence',
10
+ configSchema: configSchema,
11
+ stateModel: stateModelFactory(),
12
+ ReactComponent: lazy(() => import('./MafSequenceWidget')),
13
+ }));
14
+ MafSequenceHoverHighlightExtensionF(pluginManager);
15
+ }
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/MafSequenceWidget/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAE5B,OAAO,UAAU,MAAM,gDAAgD,CAAA;AAEvE,OAAO,mCAAmC,MAAM,sCAAsC,CAAA;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAIvD,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,aAA4B;IACrE,aAAa,CAAC,aAAa,CACzB,GAAG,EAAE,CACH,IAAI,UAAU,CAAC;QACb,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,cAAc;QACvB,YAAY,EAAE,YAAY;QAC1B,UAAU,EAAE,iBAAiB,EAAE;QAC/B,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;KAC1D,CAAC,CACL,CAAA;IAED,mCAAmC,CAAC,aAAa,CAAC,CAAA;AACpD,CAAC"}
@@ -0,0 +1,67 @@
1
+ import type { Sample } from '../LinearMafDisplay/types';
2
+ import type { Instance } from '@jbrowse/mobx-state-tree';
3
+ export interface HoverHighlight {
4
+ refName: string;
5
+ start: number;
6
+ end: number;
7
+ assemblyName: string;
8
+ }
9
+ export declare function stateModelFactory(): import("@jbrowse/mobx-state-tree").IModelType<{
10
+ id: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
11
+ type: import("@jbrowse/mobx-state-tree").ISimpleType<"MafSequenceWidget">;
12
+ adapterConfig: import("@jbrowse/mobx-state-tree").IType<({
13
+ [x: string]: any;
14
+ } & import("@jbrowse/mobx-state-tree/dist/internal").NonEmptyObject & {
15
+ setSubschema(slotName: string, data: Record<string, unknown>): Record<string, unknown> | ({
16
+ [x: string]: any;
17
+ } & import("@jbrowse/mobx-state-tree/dist/internal").NonEmptyObject & {
18
+ setSubschema(slotName: string, data: Record<string, unknown>): Record<string, unknown> | ({
19
+ [x: string]: any;
20
+ } & import("@jbrowse/mobx-state-tree/dist/internal").NonEmptyObject & any & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>);
21
+ } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>);
22
+ } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>) | null | undefined, ({
23
+ [x: string]: any;
24
+ } & import("@jbrowse/mobx-state-tree/dist/internal").NonEmptyObject & {
25
+ setSubschema(slotName: string, data: Record<string, unknown>): Record<string, unknown> | ({
26
+ [x: string]: any;
27
+ } & import("@jbrowse/mobx-state-tree/dist/internal").NonEmptyObject & {
28
+ setSubschema(slotName: string, data: Record<string, unknown>): Record<string, unknown> | ({
29
+ [x: string]: any;
30
+ } & import("@jbrowse/mobx-state-tree/dist/internal").NonEmptyObject & any & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>);
31
+ } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>);
32
+ } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>) | undefined, ({
33
+ [x: string]: any;
34
+ } & import("@jbrowse/mobx-state-tree/dist/internal").NonEmptyObject & {
35
+ setSubschema(slotName: string, data: Record<string, unknown>): Record<string, unknown> | ({
36
+ [x: string]: any;
37
+ } & import("@jbrowse/mobx-state-tree/dist/internal").NonEmptyObject & {
38
+ setSubschema(slotName: string, data: Record<string, unknown>): Record<string, unknown> | ({
39
+ [x: string]: any;
40
+ } & import("@jbrowse/mobx-state-tree/dist/internal").NonEmptyObject & any & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>);
41
+ } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>);
42
+ } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>) | undefined>;
43
+ samples: import("@jbrowse/mobx-state-tree").IType<Sample[] | null | undefined, Sample[] | undefined, Sample[] | undefined>;
44
+ regions: import("@jbrowse/mobx-state-tree").IType<{
45
+ refName: string;
46
+ start: number;
47
+ end: number;
48
+ assemblyName: string;
49
+ }[] | null | undefined, {
50
+ refName: string;
51
+ start: number;
52
+ end: number;
53
+ assemblyName: string;
54
+ }[] | undefined, {
55
+ refName: string;
56
+ start: number;
57
+ end: number;
58
+ assemblyName: string;
59
+ }[] | undefined>;
60
+ connectedViewId: import("@jbrowse/mobx-state-tree").IMaybe<import("@jbrowse/mobx-state-tree").ISimpleType<string>>;
61
+ }, {
62
+ hoverHighlight: HoverHighlight | undefined;
63
+ } & {
64
+ setHoverHighlight(highlight: HoverHighlight | undefined): void;
65
+ }, import("@jbrowse/mobx-state-tree")._NotCustomized, import("@jbrowse/mobx-state-tree")._NotCustomized>;
66
+ export type MafSequenceWidgetStateModel = ReturnType<typeof stateModelFactory>;
67
+ export type MafSequenceWidgetModel = Instance<MafSequenceWidgetStateModel>;
@@ -0,0 +1,21 @@
1
+ import { types } from '@jbrowse/mobx-state-tree';
2
+ export function stateModelFactory() {
3
+ return types
4
+ .model('MafSequenceWidget', {
5
+ id: types.identifier,
6
+ type: types.literal('MafSequenceWidget'),
7
+ adapterConfig: types.frozen(undefined),
8
+ samples: types.frozen(undefined),
9
+ regions: types.frozen(undefined),
10
+ connectedViewId: types.maybe(types.string),
11
+ })
12
+ .volatile(() => ({
13
+ hoverHighlight: undefined,
14
+ }))
15
+ .actions(self => ({
16
+ setHoverHighlight(highlight) {
17
+ self.hoverHighlight = highlight;
18
+ },
19
+ }));
20
+ }
21
+ //# sourceMappingURL=stateModelFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stateModelFactory.js","sourceRoot":"","sources":["../../src/MafSequenceWidget/stateModelFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAahD,MAAM,UAAU,iBAAiB;IAC/B,OAAO,KAAK;SACT,KAAK,CAAC,mBAAmB,EAAE;QAC1B,EAAE,EAAE,KAAK,CAAC,UAAU;QACpB,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC;QACxC,aAAa,EAAE,KAAK,CAAC,MAAM,CAAoC,SAAS,CAAC;QACzE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAuB,SAAS,CAAC;QACtD,OAAO,EAAE,KAAK,CAAC,MAAM,CAQnB,SAAS,CAAC;QACZ,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;KAC3C,CAAC;SACD,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QACf,cAAc,EAAE,SAAuC;KACxD,CAAC,CAAC;SACF,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,iBAAiB,CAAC,SAAqC;YACrD,IAAI,CAAC,cAAc,GAAG,SAAS,CAAA;QACjC,CAAC;KACF,CAAC,CAAC,CAAA;AACP,CAAC"}