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
@@ -1,105 +0,0 @@
1
- import React, { useState } from 'react'
2
-
3
- import { Dialog } from '@jbrowse/core/ui'
4
- import { Button, DialogActions, DialogContent, TextField } from '@mui/material'
5
- import { observer } from 'mobx-react'
6
- import { makeStyles } from 'tss-react/mui'
7
-
8
- const useStyles = makeStyles()({
9
- dialogContent: {
10
- width: '60em',
11
- },
12
- textAreaInput: {
13
- fontFamily: 'monospace',
14
- whiteSpace: 'pre',
15
- overflowX: 'auto',
16
- },
17
- })
18
-
19
- const InsertionSequenceDialog = observer(function ({
20
- onClose,
21
- model,
22
- insertionData,
23
- }: {
24
- onClose: () => void
25
- model: {
26
- showAsUpperCase: boolean
27
- }
28
- insertionData: {
29
- sequence: string
30
- sampleLabel: string
31
- chr: string
32
- pos: number
33
- }
34
- }) {
35
- const { classes } = useStyles()
36
- const [copied, setCopied] = useState(false)
37
- const { sequence, sampleLabel, chr, pos } = insertionData
38
- const { showAsUpperCase } = model
39
- const displaySequence = showAsUpperCase
40
- ? sequence.toUpperCase()
41
- : sequence.toLowerCase()
42
-
43
- return (
44
- <Dialog
45
- open
46
- onClose={onClose}
47
- title={`Insertion Sequence (${sequence.length}bp)`}
48
- maxWidth="lg"
49
- >
50
- <DialogContent>
51
- <div style={{ marginBottom: 16 }}>
52
- <strong>Sample:</strong> {sampleLabel}
53
- <br />
54
- <strong>Position:</strong> {chr}:{pos.toLocaleString('en-US')}
55
- <br />
56
- <strong>Length:</strong> {sequence.length}bp
57
- </div>
58
- <TextField
59
- variant="outlined"
60
- multiline
61
- minRows={3}
62
- maxRows={10}
63
- className={classes.dialogContent}
64
- fullWidth
65
- value={displaySequence}
66
- slotProps={{
67
- input: {
68
- readOnly: true,
69
- classes: {
70
- input: classes.textAreaInput,
71
- },
72
- },
73
- }}
74
- />
75
- </DialogContent>
76
- <DialogActions>
77
- <Button
78
- variant="contained"
79
- color="primary"
80
- onClick={() => {
81
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
82
- ;(async () => {
83
- try {
84
- await navigator.clipboard.writeText(displaySequence)
85
- setCopied(true)
86
- setTimeout(() => {
87
- setCopied(false)
88
- }, 1000)
89
- } catch (e) {
90
- console.error(e)
91
- }
92
- })()
93
- }}
94
- >
95
- {copied ? 'Copied!' : 'Copy to Clipboard'}
96
- </Button>
97
- <Button color="secondary" variant="contained" onClick={onClose}>
98
- Close
99
- </Button>
100
- </DialogActions>
101
- </Dialog>
102
- )
103
- })
104
-
105
- export default InsertionSequenceDialog
@@ -1,7 +0,0 @@
1
- export function max(arr: number[], init = Number.NEGATIVE_INFINITY) {
2
- let max = init
3
- for (const entry of arr) {
4
- max = Math.max(entry, max)
5
- }
6
- return max
7
- }
@@ -1,57 +0,0 @@
1
- import { getContainingView, getSession } from '@jbrowse/core/util'
2
- import { getRpcSessionId } from '@jbrowse/core/util/tracks'
3
-
4
- import type { LinearMafDisplayModel } from '../LinearMafDisplay/stateModel'
5
- import type { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view'
6
-
7
- interface SelectionCoords {
8
- dragStartX: number
9
- dragEndX: number
10
- }
11
-
12
- /**
13
- * Fetch sequences for the given selection coordinates
14
- * @param model - The LinearMafDisplayModel
15
- * @param selectionCoords - The selection coordinates (dragStartX and dragEndX)
16
- * @param showAllLetters - Whether to show all letters or just the differences
17
- * @returns Promise that resolves to the FASTA sequence
18
- */
19
- export async function fetchSequences({
20
- model,
21
- selectionCoords,
22
- showAllLetters,
23
- }: {
24
- model: LinearMafDisplayModel
25
- selectionCoords: SelectionCoords
26
- showAllLetters: boolean
27
- }) {
28
- const { samples, adapterConfig } = model
29
- const { rpcManager } = getSession(model)
30
- const sessionId = getRpcSessionId(model)
31
- const view = getContainingView(model) as LinearGenomeViewModel
32
- const { refName, assemblyName } = view.displayedRegions[0]!
33
- const { dragStartX, dragEndX } = selectionCoords
34
- const [s, e] = [
35
- Math.min(dragStartX, dragEndX),
36
- Math.max(dragStartX, dragEndX),
37
- ]
38
-
39
- const fastaSequence = (await rpcManager.call(sessionId, 'MafGetSequences', {
40
- sessionId,
41
- adapterConfig,
42
- samples,
43
- showAllLetters,
44
- regions: [
45
- {
46
- refName,
47
- start: view.pxToBp(s).coord - 1,
48
- end: view.pxToBp(e).coord,
49
- assemblyName,
50
- },
51
- ],
52
- })) as string[]
53
-
54
- return fastaSequence
55
- .map((r, idx) => `>${samples![idx]!.label}\n${r}`)
56
- .join('\n')
57
- }
@@ -1,90 +0,0 @@
1
- import { useEffect, useState } from 'react'
2
-
3
- import { getContainingView, getSession } from '@jbrowse/core/util'
4
- import { getRpcSessionId } from '@jbrowse/core/util/tracks'
5
-
6
- import type { LinearMafDisplayModel } from '../LinearMafDisplay/stateModel'
7
- import type { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view'
8
-
9
- interface SelectionCoords {
10
- dragStartX: number
11
- dragEndX: number
12
- }
13
-
14
- interface UseSequencesOptions {
15
- model: LinearMafDisplayModel
16
- selectionCoords?: SelectionCoords
17
- showAllLetters: boolean
18
- }
19
-
20
- /**
21
- * React hook to fetch sequences for the given selection coordinates
22
- * @param options - The options for fetching sequences
23
- * @returns An object containing the sequence, loading state, and error
24
- */
25
- export function useSequences({
26
- model,
27
- selectionCoords,
28
- showAllLetters,
29
- }: UseSequencesOptions) {
30
- const [sequence, setSequence] = useState<string>('')
31
- const [loading, setLoading] = useState(true)
32
- const [error, setError] = useState<unknown>()
33
-
34
- useEffect(() => {
35
- // If no selection coordinates, no need to fetch
36
- if (!selectionCoords) {
37
- return
38
- }
39
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
40
- ;(async () => {
41
- try {
42
- setLoading(true)
43
- setError(undefined)
44
-
45
- const { samples, adapterConfig } = model
46
- const { rpcManager } = getSession(model)
47
- const sessionId = getRpcSessionId(model)
48
- const view = getContainingView(model) as LinearGenomeViewModel
49
- const { refName, assemblyName } = view.displayedRegions[0]!
50
- const { dragStartX, dragEndX } = selectionCoords
51
- const [s, e] = [
52
- Math.min(dragStartX, dragEndX),
53
- Math.max(dragStartX, dragEndX),
54
- ]
55
-
56
- const fastaSequence = (await rpcManager.call(
57
- sessionId,
58
- 'MafGetSequences',
59
- {
60
- sessionId,
61
- adapterConfig,
62
- samples,
63
- showAllLetters,
64
- regions: [
65
- {
66
- refName,
67
- start: view.pxToBp(s).coord - 1,
68
- end: view.pxToBp(e).coord,
69
- assemblyName,
70
- },
71
- ],
72
- },
73
- )) as string[]
74
-
75
- const formattedSequence = fastaSequence
76
- .map((r, idx) => `>${samples![idx]!.label}\n${r}`)
77
- .join('\n')
78
-
79
- setSequence(formattedSequence)
80
- } catch (e) {
81
- console.error(e)
82
- setError(e)
83
- } finally {
84
- setLoading(false)
85
- }
86
- })()
87
- }, [model, selectionCoords, showAllLetters])
88
-
89
- return { sequence, loading, error }
90
- }