@jbrowse/plugin-sequence 2.5.0 → 2.6.2

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 (142) hide show
  1. package/dist/BgzipFastaAdapter/BgzipFastaAdapter.js +0 -1
  2. package/dist/BgzipFastaAdapter/configSchema.js +0 -1
  3. package/dist/BgzipFastaAdapter/index.js +0 -1
  4. package/dist/ChromSizesAdapter/ChromSizesAdapter.js +0 -1
  5. package/dist/ChromSizesAdapter/configSchema.js +0 -1
  6. package/dist/ChromSizesAdapter/index.js +0 -1
  7. package/dist/DivSequenceRenderer/components/DivSequenceRendering.d.ts +2 -1
  8. package/dist/DivSequenceRenderer/components/DivSequenceRendering.js +0 -1
  9. package/dist/DivSequenceRenderer/configSchema.js +0 -1
  10. package/dist/DivSequenceRenderer/index.js +0 -1
  11. package/dist/IndexedFastaAdapter/IndexedFastaAdapter.js +0 -1
  12. package/dist/IndexedFastaAdapter/configSchema.js +0 -1
  13. package/dist/IndexedFastaAdapter/index.js +0 -1
  14. package/dist/LinearReferenceSequenceDisplay/configSchema.js +0 -1
  15. package/dist/LinearReferenceSequenceDisplay/index.js +0 -1
  16. package/dist/LinearReferenceSequenceDisplay/model.d.ts +60 -53
  17. package/dist/LinearReferenceSequenceDisplay/model.js +0 -1
  18. package/dist/ReferenceSequenceTrack/configSchema.js +0 -1
  19. package/dist/ReferenceSequenceTrack/index.js +0 -1
  20. package/dist/SequenceSearchAdapter/SequenceSearchAdapter.js +0 -1
  21. package/dist/SequenceSearchAdapter/configSchema.js +0 -1
  22. package/dist/SequenceSearchAdapter/index.js +0 -1
  23. package/dist/TwoBitAdapter/TwoBitAdapter.js +2 -2
  24. package/dist/TwoBitAdapter/configSchema.js +0 -1
  25. package/dist/TwoBitAdapter/index.js +0 -1
  26. package/dist/createExtensionPoints.js +0 -1
  27. package/dist/index.js +0 -1
  28. package/esm/BgzipFastaAdapter/BgzipFastaAdapter.js +0 -1
  29. package/esm/BgzipFastaAdapter/configSchema.js +0 -1
  30. package/esm/BgzipFastaAdapter/index.js +0 -1
  31. package/esm/ChromSizesAdapter/ChromSizesAdapter.js +0 -1
  32. package/esm/ChromSizesAdapter/configSchema.js +0 -1
  33. package/esm/ChromSizesAdapter/index.js +0 -1
  34. package/esm/DivSequenceRenderer/components/DivSequenceRendering.d.ts +2 -1
  35. package/esm/DivSequenceRenderer/components/DivSequenceRendering.js +0 -1
  36. package/esm/DivSequenceRenderer/configSchema.js +0 -1
  37. package/esm/DivSequenceRenderer/index.js +0 -1
  38. package/esm/IndexedFastaAdapter/IndexedFastaAdapter.js +0 -1
  39. package/esm/IndexedFastaAdapter/configSchema.js +0 -1
  40. package/esm/IndexedFastaAdapter/index.js +0 -1
  41. package/esm/LinearReferenceSequenceDisplay/configSchema.js +0 -1
  42. package/esm/LinearReferenceSequenceDisplay/index.js +0 -1
  43. package/esm/LinearReferenceSequenceDisplay/model.d.ts +60 -53
  44. package/esm/LinearReferenceSequenceDisplay/model.js +0 -1
  45. package/esm/ReferenceSequenceTrack/configSchema.js +0 -1
  46. package/esm/ReferenceSequenceTrack/index.js +0 -1
  47. package/esm/SequenceSearchAdapter/SequenceSearchAdapter.js +0 -1
  48. package/esm/SequenceSearchAdapter/configSchema.js +0 -1
  49. package/esm/SequenceSearchAdapter/index.js +0 -1
  50. package/esm/TwoBitAdapter/TwoBitAdapter.js +2 -2
  51. package/esm/TwoBitAdapter/configSchema.js +0 -1
  52. package/esm/TwoBitAdapter/index.js +0 -1
  53. package/esm/createExtensionPoints.js +0 -1
  54. package/esm/index.js +0 -1
  55. package/package.json +3 -4
  56. package/dist/BgzipFastaAdapter/BgzipFastaAdapter.js.map +0 -1
  57. package/dist/BgzipFastaAdapter/configSchema.js.map +0 -1
  58. package/dist/BgzipFastaAdapter/index.js.map +0 -1
  59. package/dist/ChromSizesAdapter/ChromSizesAdapter.js.map +0 -1
  60. package/dist/ChromSizesAdapter/configSchema.js.map +0 -1
  61. package/dist/ChromSizesAdapter/index.js.map +0 -1
  62. package/dist/DivSequenceRenderer/components/DivSequenceRendering.js.map +0 -1
  63. package/dist/DivSequenceRenderer/configSchema.js.map +0 -1
  64. package/dist/DivSequenceRenderer/index.js.map +0 -1
  65. package/dist/IndexedFastaAdapter/IndexedFastaAdapter.js.map +0 -1
  66. package/dist/IndexedFastaAdapter/configSchema.js.map +0 -1
  67. package/dist/IndexedFastaAdapter/index.js.map +0 -1
  68. package/dist/LinearReferenceSequenceDisplay/configSchema.js.map +0 -1
  69. package/dist/LinearReferenceSequenceDisplay/index.js.map +0 -1
  70. package/dist/LinearReferenceSequenceDisplay/model.js.map +0 -1
  71. package/dist/ReferenceSequenceTrack/configSchema.js.map +0 -1
  72. package/dist/ReferenceSequenceTrack/index.js.map +0 -1
  73. package/dist/SequenceSearchAdapter/SequenceSearchAdapter.js.map +0 -1
  74. package/dist/SequenceSearchAdapter/configSchema.js.map +0 -1
  75. package/dist/SequenceSearchAdapter/index.js.map +0 -1
  76. package/dist/TwoBitAdapter/TwoBitAdapter.js.map +0 -1
  77. package/dist/TwoBitAdapter/configSchema.js.map +0 -1
  78. package/dist/TwoBitAdapter/index.js.map +0 -1
  79. package/dist/createExtensionPoints.js.map +0 -1
  80. package/dist/index.js.map +0 -1
  81. package/esm/BgzipFastaAdapter/BgzipFastaAdapter.js.map +0 -1
  82. package/esm/BgzipFastaAdapter/configSchema.js.map +0 -1
  83. package/esm/BgzipFastaAdapter/index.js.map +0 -1
  84. package/esm/ChromSizesAdapter/ChromSizesAdapter.js.map +0 -1
  85. package/esm/ChromSizesAdapter/configSchema.js.map +0 -1
  86. package/esm/ChromSizesAdapter/index.js.map +0 -1
  87. package/esm/DivSequenceRenderer/components/DivSequenceRendering.js.map +0 -1
  88. package/esm/DivSequenceRenderer/configSchema.js.map +0 -1
  89. package/esm/DivSequenceRenderer/index.js.map +0 -1
  90. package/esm/IndexedFastaAdapter/IndexedFastaAdapter.js.map +0 -1
  91. package/esm/IndexedFastaAdapter/configSchema.js.map +0 -1
  92. package/esm/IndexedFastaAdapter/index.js.map +0 -1
  93. package/esm/LinearReferenceSequenceDisplay/configSchema.js.map +0 -1
  94. package/esm/LinearReferenceSequenceDisplay/index.js.map +0 -1
  95. package/esm/LinearReferenceSequenceDisplay/model.js.map +0 -1
  96. package/esm/ReferenceSequenceTrack/configSchema.js.map +0 -1
  97. package/esm/ReferenceSequenceTrack/index.js.map +0 -1
  98. package/esm/SequenceSearchAdapter/SequenceSearchAdapter.js.map +0 -1
  99. package/esm/SequenceSearchAdapter/configSchema.js.map +0 -1
  100. package/esm/SequenceSearchAdapter/index.js.map +0 -1
  101. package/esm/TwoBitAdapter/TwoBitAdapter.js.map +0 -1
  102. package/esm/TwoBitAdapter/configSchema.js.map +0 -1
  103. package/esm/TwoBitAdapter/index.js.map +0 -1
  104. package/esm/createExtensionPoints.js.map +0 -1
  105. package/esm/index.js.map +0 -1
  106. package/src/BgzipFastaAdapter/BgzipFastaAdapter.test.ts +0 -40
  107. package/src/BgzipFastaAdapter/BgzipFastaAdapter.ts +0 -19
  108. package/src/BgzipFastaAdapter/__snapshots__/BgzipFastaAdapter.test.ts.snap +0 -15
  109. package/src/BgzipFastaAdapter/configSchema.ts +0 -51
  110. package/src/BgzipFastaAdapter/index.ts +0 -20
  111. package/src/ChromSizesAdapter/ChromSizesAdapter.test.ts +0 -27
  112. package/src/ChromSizesAdapter/ChromSizesAdapter.ts +0 -51
  113. package/src/ChromSizesAdapter/configSchema.ts +0 -25
  114. package/src/ChromSizesAdapter/index.ts +0 -20
  115. package/src/ChromSizesAdapter/test_data/volvox.chrom.sizes +0 -2
  116. package/src/DivSequenceRenderer/components/DivSequenceRendering.test.tsx +0 -161
  117. package/src/DivSequenceRenderer/components/DivSequenceRendering.tsx +0 -308
  118. package/src/DivSequenceRenderer/components/__snapshots__/DivSequenceRendering.test.tsx.snap +0 -1426
  119. package/src/DivSequenceRenderer/configSchema.ts +0 -23
  120. package/src/DivSequenceRenderer/index.ts +0 -31
  121. package/src/IndexedFastaAdapter/IndexedFastaAdapter.test.ts +0 -53
  122. package/src/IndexedFastaAdapter/IndexedFastaAdapter.ts +0 -113
  123. package/src/IndexedFastaAdapter/__snapshots__/IndexedFastaAdapter.test.ts.snap +0 -15
  124. package/src/IndexedFastaAdapter/configSchema.ts +0 -39
  125. package/src/IndexedFastaAdapter/index.ts +0 -20
  126. package/src/LinearReferenceSequenceDisplay/configSchema.ts +0 -18
  127. package/src/LinearReferenceSequenceDisplay/index.ts +0 -21
  128. package/src/LinearReferenceSequenceDisplay/model.ts +0 -148
  129. package/src/ReferenceSequenceTrack/configSchema.ts +0 -117
  130. package/src/ReferenceSequenceTrack/index.ts +0 -22
  131. package/src/SequenceSearchAdapter/SequenceSearchAdapter.ts +0 -104
  132. package/src/SequenceSearchAdapter/configSchema.ts +0 -51
  133. package/src/SequenceSearchAdapter/index.ts +0 -20
  134. package/src/TwoBitAdapter/TwoBitAdapter.test.ts +0 -55
  135. package/src/TwoBitAdapter/TwoBitAdapter.ts +0 -108
  136. package/src/TwoBitAdapter/__snapshots__/TwoBitAdapter.test.ts.snap +0 -30
  137. package/src/TwoBitAdapter/configSchema.ts +0 -34
  138. package/src/TwoBitAdapter/index.ts +0 -19
  139. package/src/__snapshots__/index.test.ts.snap +0 -5
  140. package/src/createExtensionPoints.ts +0 -122
  141. package/src/index.test.ts +0 -20
  142. package/src/index.ts +0 -28
@@ -1,308 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import React from 'react'
3
- import { AnyConfigurationModel } from '@jbrowse/core/configuration'
4
- import { createJBrowseTheme } from '@jbrowse/core/ui'
5
- import { observer } from 'mobx-react'
6
- import {
7
- Feature,
8
- Region,
9
- bpSpanPx,
10
- revcom,
11
- complement,
12
- defaultStarts,
13
- defaultStops,
14
- defaultCodonTable,
15
- generateCodonTable,
16
- } from '@jbrowse/core/util'
17
- import { Theme } from '@mui/material'
18
-
19
- function Translation(props: {
20
- codonTable: Record<string, string>
21
- seq: string
22
- frame: number
23
- bpPerPx: number
24
- region: Region
25
- reverse?: boolean
26
- height: number
27
- y: number
28
- theme?: Theme
29
- }) {
30
- const {
31
- codonTable,
32
- seq,
33
- frame,
34
- bpPerPx,
35
- region,
36
- height,
37
- y,
38
- reverse = false,
39
- theme,
40
- } = props
41
- const scale = bpPerPx
42
-
43
- // the tilt variable normalizes the frame to where we are starting from,
44
- // which increases consistency across blocks
45
- const tilt = 3 - (region.start % 3)
46
-
47
- // the effectiveFrame incorporates tilt and the frame to say what the
48
- // effective frame that is plotted. The +3 is for when frame is -2 and this
49
- // can otherwise result in effectiveFrame -1
50
- const effectiveFrame = (frame + tilt + 3) % 3
51
-
52
- const seqSliced = seq.slice(effectiveFrame)
53
-
54
- const translated: { letter: string; codon: string }[] = []
55
- for (let i = 0; i < seqSliced.length; i += 3) {
56
- const codon = seqSliced.slice(i, i + 3)
57
- const normalizedCodon = reverse ? revcom(codon) : codon
58
- const aminoAcid = codonTable[normalizedCodon] || ''
59
- translated.push({ letter: aminoAcid, codon: normalizedCodon.toUpperCase() })
60
- }
61
-
62
- const w = (1 / scale) * 3
63
- const drop = region.start === 0 ? 0 : w
64
- const render = 1 / bpPerPx >= 12
65
- const width = (region.end - region.start) / bpPerPx
66
-
67
- const map = ['#d8d8d8', '#adadad', '#8f8f8f'].reverse()
68
- return (
69
- <>
70
- {translated.map((element, index) => {
71
- const x = region.reversed
72
- ? width - (w * (index + 1) + effectiveFrame / scale - drop)
73
- : w * index + effectiveFrame / scale - drop
74
- const { letter, codon } = element
75
- return (
76
- <React.Fragment key={`${index}-${letter}`}>
77
- <rect
78
- x={x}
79
- y={y}
80
- width={
81
- render ? w : w + 0.7 /* small fudge factor when zoomed out*/
82
- }
83
- height={height}
84
- stroke={render ? '#555' : 'none'}
85
- fill={
86
- defaultStarts.includes(codon)
87
- ? theme?.palette.startCodon
88
- : defaultStops.includes(codon)
89
- ? theme?.palette.stopCodon
90
- : map[Math.abs(frame)]
91
- }
92
- />
93
- {render ? (
94
- <text
95
- x={x + w / 2}
96
- y={y + height / 2}
97
- dominantBaseline="middle"
98
- textAnchor="middle"
99
- >
100
- {letter}
101
- </text>
102
- ) : null}
103
- </React.Fragment>
104
- )
105
- })}
106
- </>
107
- )
108
- }
109
-
110
- function DNA(props: {
111
- seq: string
112
- theme: any
113
- bpPerPx: number
114
- height: number
115
- region: Region
116
- feature: Feature
117
- y: number
118
- }) {
119
- const { bpPerPx, region, feature, theme, height, seq, y } = props
120
- const render = 1 / bpPerPx >= 12
121
-
122
- const [leftPx, rightPx] = bpSpanPx(
123
- feature.get('start'),
124
- feature.get('end'),
125
- region,
126
- bpPerPx,
127
- )
128
- const reverse = region.reversed
129
- const len = feature.get('end') - feature.get('start')
130
- const w = Math.max((rightPx - leftPx) / len, 0.8)
131
-
132
- return (
133
- <>
134
- {seq.split('').map((letter, index) => {
135
- const color = theme.palette.bases[letter.toUpperCase()]
136
- const x = reverse ? rightPx - (index + 1) * w : leftPx + index * w
137
- return (
138
- <React.Fragment key={index}>
139
- <rect
140
- x={x}
141
- y={y}
142
- width={w}
143
- height={height}
144
- fill={color ? color.main : '#aaa'}
145
- stroke={render ? '#555' : 'none'}
146
- />
147
- {render ? (
148
- <text
149
- x={x + w / 2}
150
- y={y + height / 2}
151
- dominantBaseline="middle"
152
- textAnchor="middle"
153
- fill={
154
- color ? theme.palette.getContrastText(color.main) : 'black'
155
- }
156
- >
157
- {letter}
158
- </text>
159
- ) : null}
160
- </React.Fragment>
161
- )
162
- })}
163
- </>
164
- )
165
- }
166
-
167
- const SequenceSVG = ({
168
- regions,
169
- theme: configTheme,
170
- features = new Map(),
171
- showReverse = true,
172
- showForward = true,
173
- showTranslation = true,
174
- bpPerPx,
175
- }: any) => {
176
- const [region] = regions
177
- const theme = createJBrowseTheme(configTheme)
178
- const codonTable = generateCodonTable(defaultCodonTable)
179
- const height = 20
180
- const [feature] = [...features.values()]
181
- if (!feature) {
182
- return null
183
- }
184
- const seq: string = feature.get('seq')
185
- if (!seq) {
186
- return null
187
- }
188
-
189
- // incrementer for the y-position of the current sequence being rendered
190
- // (applies to both translation rows and dna rows)
191
- let currY = -20
192
-
193
- return (
194
- <>
195
- {/* the upper translation row. if the view is reversed, the reverse
196
- translation is on the top */}
197
- {showTranslation && (region.reversed ? showReverse : showForward)
198
- ? [2, 1, 0].map(index => (
199
- <Translation
200
- key={`translation-${index}`}
201
- seq={seq}
202
- y={(currY += 20)}
203
- codonTable={codonTable}
204
- frame={index}
205
- bpPerPx={bpPerPx}
206
- region={region}
207
- theme={theme}
208
- height={height}
209
- reverse={region.reversed}
210
- />
211
- ))
212
- : null}
213
-
214
- {showForward ? (
215
- <DNA
216
- height={height}
217
- y={(currY += 20)}
218
- feature={feature}
219
- region={region}
220
- seq={region.reversed ? complement(seq) : seq}
221
- bpPerPx={bpPerPx}
222
- theme={theme}
223
- />
224
- ) : null}
225
-
226
- {showReverse ? (
227
- <DNA
228
- height={height}
229
- y={(currY += 20)}
230
- feature={feature}
231
- region={region}
232
- seq={region.reversed ? seq : complement(seq)}
233
- bpPerPx={bpPerPx}
234
- theme={theme}
235
- />
236
- ) : null}
237
-
238
- {/* the lower translation row. if the view is reversed, the forward
239
- translation is on the bottom */}
240
- {showTranslation && (region.reversed ? showForward : showReverse)
241
- ? [0, -1, -2].map(index => (
242
- <Translation
243
- key={`rev-translation-${index}`}
244
- seq={seq}
245
- y={(currY += 20)}
246
- codonTable={codonTable}
247
- frame={index}
248
- bpPerPx={bpPerPx}
249
- region={region}
250
- theme={theme}
251
- height={height}
252
- reverse={!region.reversed}
253
- />
254
- ))
255
- : null}
256
- </>
257
- )
258
- }
259
-
260
- const Wrapper = ({
261
- exportSVG,
262
- width,
263
- totalHeight,
264
- children,
265
- }: {
266
- exportSVG?: { rasterizeLayers: boolean }
267
- width: number
268
- totalHeight: number
269
- children: React.ReactNode
270
- }) => {
271
- return exportSVG ? (
272
- <>{children}</>
273
- ) : (
274
- <svg
275
- data-testid="sequence_track"
276
- width={width}
277
- height={totalHeight}
278
- style={{ width, height: totalHeight }}
279
- >
280
- {children}
281
- </svg>
282
- )
283
- }
284
-
285
- function Sequence(props: {
286
- exportSVG?: { rasterizeLayers: boolean }
287
- features: Map<string, Feature>
288
- regions: Region[]
289
- bpPerPx: number
290
- config: AnyConfigurationModel
291
- theme?: any
292
- showForward?: boolean
293
- showReverse?: boolean
294
- showTranslation?: boolean
295
- }) {
296
- const { regions, bpPerPx } = props
297
- const [region] = regions
298
- const width = (region.end - region.start) / bpPerPx
299
- const totalHeight = 200
300
-
301
- return (
302
- <Wrapper {...props} totalHeight={totalHeight} width={width}>
303
- <SequenceSVG {...props} />
304
- </Wrapper>
305
- )
306
- }
307
-
308
- export default observer(Sequence)