@jbrowse/plugin-linear-genome-view 2.3.4 → 2.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (271) hide show
  1. package/dist/BaseLinearDisplay/components/BaseLinearDisplay.d.ts +2 -3
  2. package/dist/BaseLinearDisplay/components/BaseLinearDisplay.js +4 -4
  3. package/dist/BaseLinearDisplay/components/BaseLinearDisplay.js.map +1 -1
  4. package/dist/BaseLinearDisplay/components/Block.js +1 -1
  5. package/dist/BaseLinearDisplay/components/Block.js.map +1 -1
  6. package/dist/BaseLinearDisplay/components/ServerSideRenderedBlockContent.js +11 -11
  7. package/dist/BaseLinearDisplay/components/ServerSideRenderedBlockContent.js.map +1 -1
  8. package/dist/BaseLinearDisplay/models/BaseLinearDisplayModel.d.ts +82 -7
  9. package/dist/BaseLinearDisplay/models/BaseLinearDisplayModel.js +43 -28
  10. package/dist/BaseLinearDisplay/models/BaseLinearDisplayModel.js.map +1 -1
  11. package/dist/BaseLinearDisplay/models/configSchema.js +8 -0
  12. package/dist/BaseLinearDisplay/models/configSchema.js.map +1 -1
  13. package/dist/BaseLinearDisplay/models/serverSideRenderedBlock.d.ts +1 -1
  14. package/dist/BaseLinearDisplay/models/serverSideRenderedBlock.js +9 -5
  15. package/dist/BaseLinearDisplay/models/serverSideRenderedBlock.js.map +1 -1
  16. package/dist/BaseLinearDisplay/models/util.js +2 -2
  17. package/dist/BaseLinearDisplay/models/util.js.map +1 -1
  18. package/dist/LaunchLinearGenomeView/index.js +1 -1
  19. package/dist/LaunchLinearGenomeView/index.js.map +1 -1
  20. package/dist/LinearBareDisplay/index.d.ts +2 -3
  21. package/dist/LinearBareDisplay/index.js +4 -2
  22. package/dist/LinearBareDisplay/index.js.map +1 -1
  23. package/dist/LinearBareDisplay/model.d.ts +61 -3
  24. package/dist/LinearBasicDisplay/index.d.ts +2 -3
  25. package/dist/LinearBasicDisplay/index.js +4 -2
  26. package/dist/LinearBasicDisplay/index.js.map +1 -1
  27. package/dist/LinearBasicDisplay/model.d.ts +82 -14
  28. package/dist/LinearGenomeView/components/CenterLine.js +2 -2
  29. package/dist/LinearGenomeView/components/CenterLine.js.map +1 -1
  30. package/dist/LinearGenomeView/components/Cytobands.d.ts +118 -0
  31. package/dist/LinearGenomeView/components/Cytobands.js +92 -0
  32. package/dist/LinearGenomeView/components/Cytobands.js.map +1 -0
  33. package/dist/LinearGenomeView/components/ExportSvgDialog.d.ts +1 -1
  34. package/dist/LinearGenomeView/components/ExportSvgDialog.js +24 -3
  35. package/dist/LinearGenomeView/components/ExportSvgDialog.js.map +1 -1
  36. package/dist/LinearGenomeView/components/Gridlines.js +1 -1
  37. package/dist/LinearGenomeView/components/Gridlines.js.map +1 -1
  38. package/dist/LinearGenomeView/components/Header.js +3 -4
  39. package/dist/LinearGenomeView/components/Header.js.map +1 -1
  40. package/dist/LinearGenomeView/components/ImportForm.d.ts +2 -2
  41. package/dist/LinearGenomeView/components/ImportForm.js +15 -19
  42. package/dist/LinearGenomeView/components/ImportForm.js.map +1 -1
  43. package/dist/LinearGenomeView/components/LinearGenomeView.js +1 -1
  44. package/dist/LinearGenomeView/components/MiniControls.js +5 -4
  45. package/dist/LinearGenomeView/components/MiniControls.js.map +1 -1
  46. package/dist/LinearGenomeView/components/OverviewRubberband.d.ts +3 -4
  47. package/dist/LinearGenomeView/components/OverviewRubberband.js +8 -11
  48. package/dist/LinearGenomeView/components/OverviewRubberband.js.map +1 -1
  49. package/dist/LinearGenomeView/components/OverviewScalebar.d.ts +4 -119
  50. package/dist/LinearGenomeView/components/OverviewScalebar.js +19 -103
  51. package/dist/LinearGenomeView/components/OverviewScalebar.js.map +1 -1
  52. package/dist/LinearGenomeView/components/RefNameAutocomplete.d.ts +2 -1
  53. package/dist/LinearGenomeView/components/RefNameAutocomplete.js +35 -31
  54. package/dist/LinearGenomeView/components/RefNameAutocomplete.js.map +1 -1
  55. package/dist/LinearGenomeView/components/RubberbandSpan.d.ts +2 -2
  56. package/dist/LinearGenomeView/components/RubberbandSpan.js +4 -18
  57. package/dist/LinearGenomeView/components/RubberbandSpan.js.map +1 -1
  58. package/dist/LinearGenomeView/components/SearchBox.js +3 -3
  59. package/dist/LinearGenomeView/components/SearchBox.js.map +1 -1
  60. package/dist/LinearGenomeView/components/TrackLabel.js +6 -7
  61. package/dist/LinearGenomeView/components/TrackLabel.js.map +1 -1
  62. package/dist/LinearGenomeView/components/TracksContainer.d.ts +2 -3
  63. package/dist/LinearGenomeView/components/TracksContainer.js +9 -8
  64. package/dist/LinearGenomeView/components/TracksContainer.js.map +1 -1
  65. package/dist/LinearGenomeView/components/ZoomControls.js +5 -4
  66. package/dist/LinearGenomeView/components/ZoomControls.js.map +1 -1
  67. package/dist/LinearGenomeView/components/hooks.d.ts +6 -1
  68. package/dist/LinearGenomeView/components/hooks.js +1 -1
  69. package/dist/LinearGenomeView/components/hooks.js.map +1 -1
  70. package/dist/LinearGenomeView/components/util.d.ts +6 -0
  71. package/dist/LinearGenomeView/components/util.js +11 -1
  72. package/dist/LinearGenomeView/components/util.js.map +1 -1
  73. package/dist/LinearGenomeView/index.js +8 -6
  74. package/dist/LinearGenomeView/index.js.map +1 -1
  75. package/dist/LinearGenomeView/model.d.ts +18 -12
  76. package/dist/LinearGenomeView/model.js +31 -34
  77. package/dist/LinearGenomeView/model.js.map +1 -1
  78. package/dist/LinearGenomeView/svgcomponents/SVGBackground.d.ts +6 -0
  79. package/dist/LinearGenomeView/svgcomponents/SVGBackground.js +13 -0
  80. package/dist/LinearGenomeView/svgcomponents/SVGBackground.js.map +1 -0
  81. package/dist/LinearGenomeView/svgcomponents/SVGHeader.d.ts +10 -0
  82. package/dist/LinearGenomeView/svgcomponents/SVGHeader.js +55 -0
  83. package/dist/LinearGenomeView/svgcomponents/SVGHeader.js.map +1 -0
  84. package/dist/LinearGenomeView/svgcomponents/SVGLinearGenomeView.d.ts +12 -0
  85. package/dist/LinearGenomeView/svgcomponents/SVGLinearGenomeView.js +57 -0
  86. package/dist/LinearGenomeView/svgcomponents/SVGLinearGenomeView.js.map +1 -0
  87. package/dist/LinearGenomeView/svgcomponents/SVGRegionSeparators.d.ts +8 -0
  88. package/dist/LinearGenomeView/svgcomponents/SVGRegionSeparators.js +13 -0
  89. package/dist/LinearGenomeView/svgcomponents/SVGRegionSeparators.js.map +1 -0
  90. package/dist/LinearGenomeView/svgcomponents/SVGRuler.d.ts +8 -0
  91. package/dist/LinearGenomeView/svgcomponents/SVGRuler.js +51 -0
  92. package/dist/LinearGenomeView/svgcomponents/SVGRuler.js.map +1 -0
  93. package/dist/LinearGenomeView/svgcomponents/SVGScalebar.d.ts +8 -0
  94. package/dist/LinearGenomeView/svgcomponents/SVGScalebar.js +22 -0
  95. package/dist/LinearGenomeView/svgcomponents/SVGScalebar.js.map +1 -0
  96. package/dist/LinearGenomeView/svgcomponents/SVGTrackLabel.d.ts +8 -0
  97. package/dist/LinearGenomeView/svgcomponents/SVGTrackLabel.js +16 -0
  98. package/dist/LinearGenomeView/svgcomponents/SVGTrackLabel.js.map +1 -0
  99. package/dist/LinearGenomeView/svgcomponents/SVGTracks.d.ts +23 -0
  100. package/dist/LinearGenomeView/svgcomponents/SVGTracks.js +30 -0
  101. package/dist/LinearGenomeView/svgcomponents/SVGTracks.js.map +1 -0
  102. package/dist/LinearGenomeView/util.js +2 -2
  103. package/dist/LinearGenomeView/util.js.map +1 -1
  104. package/dist/index.d.ts +157 -44
  105. package/dist/index.js +21 -13
  106. package/dist/index.js.map +1 -1
  107. package/esm/BaseLinearDisplay/components/BaseLinearDisplay.d.ts +2 -3
  108. package/esm/BaseLinearDisplay/components/BaseLinearDisplay.js +2 -3
  109. package/esm/BaseLinearDisplay/components/BaseLinearDisplay.js.map +1 -1
  110. package/esm/BaseLinearDisplay/components/Block.js +1 -1
  111. package/esm/BaseLinearDisplay/components/Block.js.map +1 -1
  112. package/esm/BaseLinearDisplay/components/ServerSideRenderedBlockContent.js +11 -11
  113. package/esm/BaseLinearDisplay/components/ServerSideRenderedBlockContent.js.map +1 -1
  114. package/esm/BaseLinearDisplay/models/BaseLinearDisplayModel.d.ts +82 -7
  115. package/esm/BaseLinearDisplay/models/BaseLinearDisplayModel.js +44 -29
  116. package/esm/BaseLinearDisplay/models/BaseLinearDisplayModel.js.map +1 -1
  117. package/esm/BaseLinearDisplay/models/configSchema.js +8 -0
  118. package/esm/BaseLinearDisplay/models/configSchema.js.map +1 -1
  119. package/esm/BaseLinearDisplay/models/serverSideRenderedBlock.d.ts +1 -1
  120. package/esm/BaseLinearDisplay/models/serverSideRenderedBlock.js +9 -5
  121. package/esm/BaseLinearDisplay/models/serverSideRenderedBlock.js.map +1 -1
  122. package/esm/BaseLinearDisplay/models/util.js +2 -2
  123. package/esm/BaseLinearDisplay/models/util.js.map +1 -1
  124. package/esm/LaunchLinearGenomeView/index.js +1 -1
  125. package/esm/LaunchLinearGenomeView/index.js.map +1 -1
  126. package/esm/LinearBareDisplay/index.d.ts +2 -3
  127. package/esm/LinearBareDisplay/index.js +2 -1
  128. package/esm/LinearBareDisplay/index.js.map +1 -1
  129. package/esm/LinearBareDisplay/model.d.ts +61 -3
  130. package/esm/LinearBasicDisplay/index.d.ts +2 -3
  131. package/esm/LinearBasicDisplay/index.js +2 -1
  132. package/esm/LinearBasicDisplay/index.js.map +1 -1
  133. package/esm/LinearBasicDisplay/model.d.ts +82 -14
  134. package/esm/LinearGenomeView/components/CenterLine.js +2 -2
  135. package/esm/LinearGenomeView/components/CenterLine.js.map +1 -1
  136. package/esm/LinearGenomeView/components/Cytobands.d.ts +118 -0
  137. package/esm/LinearGenomeView/components/Cytobands.js +87 -0
  138. package/esm/LinearGenomeView/components/Cytobands.js.map +1 -0
  139. package/esm/LinearGenomeView/components/ExportSvgDialog.d.ts +1 -1
  140. package/esm/LinearGenomeView/components/ExportSvgDialog.js +25 -4
  141. package/esm/LinearGenomeView/components/ExportSvgDialog.js.map +1 -1
  142. package/esm/LinearGenomeView/components/Gridlines.js +1 -1
  143. package/esm/LinearGenomeView/components/Gridlines.js.map +1 -1
  144. package/esm/LinearGenomeView/components/Header.js +5 -6
  145. package/esm/LinearGenomeView/components/Header.js.map +1 -1
  146. package/esm/LinearGenomeView/components/ImportForm.d.ts +2 -2
  147. package/esm/LinearGenomeView/components/ImportForm.js +16 -20
  148. package/esm/LinearGenomeView/components/ImportForm.js.map +1 -1
  149. package/esm/LinearGenomeView/components/LinearGenomeView.js +1 -1
  150. package/esm/LinearGenomeView/components/MiniControls.js +5 -4
  151. package/esm/LinearGenomeView/components/MiniControls.js.map +1 -1
  152. package/esm/LinearGenomeView/components/OverviewRubberband.d.ts +3 -4
  153. package/esm/LinearGenomeView/components/OverviewRubberband.js +8 -11
  154. package/esm/LinearGenomeView/components/OverviewRubberband.js.map +1 -1
  155. package/esm/LinearGenomeView/components/OverviewScalebar.d.ts +4 -119
  156. package/esm/LinearGenomeView/components/OverviewScalebar.js +16 -100
  157. package/esm/LinearGenomeView/components/OverviewScalebar.js.map +1 -1
  158. package/esm/LinearGenomeView/components/RefNameAutocomplete.d.ts +2 -1
  159. package/esm/LinearGenomeView/components/RefNameAutocomplete.js +36 -32
  160. package/esm/LinearGenomeView/components/RefNameAutocomplete.js.map +1 -1
  161. package/esm/LinearGenomeView/components/RubberbandSpan.d.ts +2 -2
  162. package/esm/LinearGenomeView/components/RubberbandSpan.js +5 -20
  163. package/esm/LinearGenomeView/components/RubberbandSpan.js.map +1 -1
  164. package/esm/LinearGenomeView/components/SearchBox.js +3 -3
  165. package/esm/LinearGenomeView/components/SearchBox.js.map +1 -1
  166. package/esm/LinearGenomeView/components/TrackLabel.js +6 -7
  167. package/esm/LinearGenomeView/components/TrackLabel.js.map +1 -1
  168. package/esm/LinearGenomeView/components/TracksContainer.d.ts +2 -3
  169. package/esm/LinearGenomeView/components/TracksContainer.js +9 -8
  170. package/esm/LinearGenomeView/components/TracksContainer.js.map +1 -1
  171. package/esm/LinearGenomeView/components/ZoomControls.js +5 -4
  172. package/esm/LinearGenomeView/components/ZoomControls.js.map +1 -1
  173. package/esm/LinearGenomeView/components/hooks.d.ts +6 -1
  174. package/esm/LinearGenomeView/components/hooks.js +1 -1
  175. package/esm/LinearGenomeView/components/hooks.js.map +1 -1
  176. package/esm/LinearGenomeView/components/util.d.ts +6 -0
  177. package/esm/LinearGenomeView/components/util.js +9 -0
  178. package/esm/LinearGenomeView/components/util.js.map +1 -1
  179. package/esm/LinearGenomeView/index.js +8 -6
  180. package/esm/LinearGenomeView/index.js.map +1 -1
  181. package/esm/LinearGenomeView/model.d.ts +18 -12
  182. package/esm/LinearGenomeView/model.js +24 -28
  183. package/esm/LinearGenomeView/model.js.map +1 -1
  184. package/esm/LinearGenomeView/svgcomponents/SVGBackground.d.ts +6 -0
  185. package/esm/LinearGenomeView/svgcomponents/SVGBackground.js +7 -0
  186. package/esm/LinearGenomeView/svgcomponents/SVGBackground.js.map +1 -0
  187. package/esm/LinearGenomeView/svgcomponents/SVGHeader.d.ts +10 -0
  188. package/esm/LinearGenomeView/svgcomponents/SVGHeader.js +49 -0
  189. package/esm/LinearGenomeView/svgcomponents/SVGHeader.js.map +1 -0
  190. package/esm/LinearGenomeView/svgcomponents/SVGLinearGenomeView.d.ts +12 -0
  191. package/esm/LinearGenomeView/svgcomponents/SVGLinearGenomeView.js +47 -0
  192. package/esm/LinearGenomeView/svgcomponents/SVGLinearGenomeView.js.map +1 -0
  193. package/esm/LinearGenomeView/svgcomponents/SVGRegionSeparators.d.ts +8 -0
  194. package/esm/LinearGenomeView/svgcomponents/SVGRegionSeparators.js +7 -0
  195. package/esm/LinearGenomeView/svgcomponents/SVGRegionSeparators.js.map +1 -0
  196. package/esm/LinearGenomeView/svgcomponents/SVGRuler.d.ts +8 -0
  197. package/esm/LinearGenomeView/svgcomponents/SVGRuler.js +45 -0
  198. package/esm/LinearGenomeView/svgcomponents/SVGRuler.js.map +1 -0
  199. package/esm/LinearGenomeView/svgcomponents/SVGScalebar.d.ts +8 -0
  200. package/esm/LinearGenomeView/svgcomponents/SVGScalebar.js +16 -0
  201. package/esm/LinearGenomeView/svgcomponents/SVGScalebar.js.map +1 -0
  202. package/esm/LinearGenomeView/svgcomponents/SVGTrackLabel.d.ts +8 -0
  203. package/esm/LinearGenomeView/svgcomponents/SVGTrackLabel.js +10 -0
  204. package/esm/LinearGenomeView/svgcomponents/SVGTrackLabel.js.map +1 -0
  205. package/esm/LinearGenomeView/svgcomponents/SVGTracks.d.ts +23 -0
  206. package/esm/LinearGenomeView/svgcomponents/SVGTracks.js +24 -0
  207. package/esm/LinearGenomeView/svgcomponents/SVGTracks.js.map +1 -0
  208. package/esm/LinearGenomeView/util.js +2 -2
  209. package/esm/LinearGenomeView/util.js.map +1 -1
  210. package/esm/index.d.ts +157 -44
  211. package/esm/index.js +9 -5
  212. package/esm/index.js.map +1 -1
  213. package/package.json +3 -3
  214. package/src/BaseLinearDisplay/components/BaseLinearDisplay.tsx +4 -3
  215. package/src/BaseLinearDisplay/components/Block.tsx +1 -1
  216. package/src/BaseLinearDisplay/components/ServerSideRenderedBlockContent.tsx +11 -12
  217. package/src/BaseLinearDisplay/models/BaseLinearDisplayModel.tsx +55 -40
  218. package/src/BaseLinearDisplay/models/configSchema.ts +8 -0
  219. package/src/BaseLinearDisplay/models/serverSideRenderedBlock.ts +15 -22
  220. package/src/BaseLinearDisplay/models/util.ts +2 -2
  221. package/src/LaunchLinearGenomeView/index.ts +1 -1
  222. package/src/LinearBareDisplay/index.ts +2 -1
  223. package/src/LinearBasicDisplay/index.ts +2 -1
  224. package/src/LinearGenomeView/components/CenterLine.tsx +2 -2
  225. package/src/LinearGenomeView/components/Cytobands.tsx +154 -0
  226. package/src/LinearGenomeView/components/ExportSvgDialog.tsx +56 -4
  227. package/src/LinearGenomeView/components/Gridlines.tsx +1 -1
  228. package/src/LinearGenomeView/components/Header.tsx +6 -13
  229. package/src/LinearGenomeView/components/ImportForm.tsx +17 -26
  230. package/src/LinearGenomeView/components/LinearGenomeView.test.tsx +8 -11
  231. package/src/LinearGenomeView/components/LinearGenomeView.tsx +1 -1
  232. package/src/LinearGenomeView/components/MiniControls.tsx +6 -7
  233. package/src/LinearGenomeView/components/OverviewRubberband.tsx +40 -49
  234. package/src/LinearGenomeView/components/OverviewScalebar.tsx +222 -385
  235. package/src/LinearGenomeView/components/RefNameAutocomplete.tsx +50 -48
  236. package/src/LinearGenomeView/components/RubberbandSpan.tsx +8 -25
  237. package/src/LinearGenomeView/components/SearchBox.tsx +3 -2
  238. package/src/LinearGenomeView/components/TrackLabel.tsx +76 -76
  239. package/src/LinearGenomeView/components/TracksContainer.tsx +8 -8
  240. package/src/LinearGenomeView/components/ZoomControls.tsx +3 -4
  241. package/src/LinearGenomeView/components/__snapshots__/LinearGenomeView.test.tsx.snap +1230 -1200
  242. package/src/LinearGenomeView/components/hooks.ts +7 -1
  243. package/src/LinearGenomeView/components/util.ts +13 -0
  244. package/src/LinearGenomeView/index.test.ts +12 -13
  245. package/src/LinearGenomeView/index.ts +8 -9
  246. package/src/LinearGenomeView/model.ts +41 -36
  247. package/src/LinearGenomeView/svgcomponents/SVGBackground.tsx +21 -0
  248. package/src/LinearGenomeView/svgcomponents/SVGHeader.tsx +93 -0
  249. package/src/LinearGenomeView/svgcomponents/SVGLinearGenomeView.tsx +114 -0
  250. package/src/LinearGenomeView/svgcomponents/SVGRegionSeparators.tsx +31 -0
  251. package/src/LinearGenomeView/svgcomponents/SVGRuler.tsx +125 -0
  252. package/src/LinearGenomeView/svgcomponents/SVGScalebar.tsx +57 -0
  253. package/src/LinearGenomeView/svgcomponents/SVGTrackLabel.tsx +47 -0
  254. package/src/LinearGenomeView/svgcomponents/SVGTracks.tsx +67 -0
  255. package/src/LinearGenomeView/util.test.ts +7 -4
  256. package/src/LinearGenomeView/util.ts +3 -3
  257. package/src/index.ts +22 -23
  258. package/dist/LinearGenomeView/components/LinearGenomeViewSvg.d.ts +0 -4
  259. package/dist/LinearGenomeView/components/LinearGenomeViewSvg.js +0 -141
  260. package/dist/LinearGenomeView/components/LinearGenomeViewSvg.js.map +0 -1
  261. package/dist/LinearGenomeView/components/Ruler.d.ts +0 -11
  262. package/dist/LinearGenomeView/components/Ruler.js +0 -39
  263. package/dist/LinearGenomeView/components/Ruler.js.map +0 -1
  264. package/esm/LinearGenomeView/components/LinearGenomeViewSvg.d.ts +0 -4
  265. package/esm/LinearGenomeView/components/LinearGenomeViewSvg.js +0 -134
  266. package/esm/LinearGenomeView/components/LinearGenomeViewSvg.js.map +0 -1
  267. package/esm/LinearGenomeView/components/Ruler.d.ts +0 -11
  268. package/esm/LinearGenomeView/components/Ruler.js +0 -34
  269. package/esm/LinearGenomeView/components/Ruler.js.map +0 -1
  270. package/src/LinearGenomeView/components/LinearGenomeViewSvg.tsx +0 -307
  271. package/src/LinearGenomeView/components/Ruler.tsx +0 -78
@@ -6,7 +6,6 @@ import BaseResult, {
6
6
  } from '@jbrowse/core/TextSearch/BaseResults'
7
7
  import {
8
8
  Autocomplete,
9
- CircularProgress,
10
9
  IconButton,
11
10
  InputAdornment,
12
11
  TextField,
@@ -28,6 +27,38 @@ export interface Option {
28
27
  result: BaseResult
29
28
  }
30
29
 
30
+ function aggregateResults(results: BaseResult[]) {
31
+ const m: { [key: string]: BaseResult[] } = {}
32
+
33
+ for (let i = 0; i < results.length; i++) {
34
+ const r = results[i]
35
+ const d = r.getDisplayString()
36
+ if (!m[d]) {
37
+ m[d] = []
38
+ }
39
+ m[d].push(r)
40
+ }
41
+ return m
42
+ }
43
+
44
+ function getDeduplicatedResult(results: BaseResult[]) {
45
+ return Object.entries(aggregateResults(results)).map(
46
+ ([displayString, results]) =>
47
+ results.length === 1
48
+ ? {
49
+ result: results[0],
50
+ }
51
+ : {
52
+ // deduplicate a "multi-result"
53
+ result: new BaseResult({
54
+ displayString,
55
+ results,
56
+ label: displayString,
57
+ }),
58
+ },
59
+ )
60
+ }
61
+
31
62
  // the logic of this method is to only apply a filter to RefSequenceResults
32
63
  // because they do not have a matchedObject. the trix search results already
33
64
  // filter so don't need re-filtering
@@ -51,6 +82,7 @@ function RefNameAutocomplete({
51
82
  value,
52
83
  showHelp = true,
53
84
  minWidth = 200,
85
+ maxWidth = 550,
54
86
  TextFieldProps = {},
55
87
  }: {
56
88
  model: LinearGenomeViewModel
@@ -61,6 +93,7 @@ function RefNameAutocomplete({
61
93
  fetchResults: (query: string) => Promise<BaseResult[]>
62
94
  style?: React.CSSProperties
63
95
  minWidth?: number
96
+ maxWidth?: number
64
97
  showHelp?: boolean
65
98
  TextFieldProps?: TFP
66
99
  }) {
@@ -104,32 +137,8 @@ function RefNameAutocomplete({
104
137
  setLoaded(false)
105
138
  const results = await fetchResults(debouncedSearch)
106
139
  if (active) {
107
- const m: { [key: string]: BaseResult[] } = {}
108
-
109
- for (let i = 0; i < results.length; i++) {
110
- const r = results[i]
111
- const d = r.getDisplayString()
112
- if (!m[d]) {
113
- m[d] = []
114
- }
115
- m[d].push(r)
116
- }
117
- const display = Object.entries(m).map(([displayString, results]) => {
118
- if (results.length === 1) {
119
- return { result: results[0] }
120
- } else {
121
- return {
122
- result: new BaseResult({
123
- displayString,
124
- results,
125
- label: displayString,
126
- }),
127
- }
128
- }
129
- })
130
-
131
- setSearchOptions(display)
132
140
  setLoaded(true)
141
+ setSearchOptions(getDeduplicatedResult(results))
133
142
  }
134
143
  } catch (e) {
135
144
  console.error(e)
@@ -146,19 +155,16 @@ function RefNameAutocomplete({
146
155
 
147
156
  const inputBoxVal = coarseVisibleLocStrings || value || ''
148
157
 
149
- // heuristic, text width + icon width
150
- // + 45 accommodates help icon and search icon
151
- const width = Math.min(
152
- Math.max(measureText(inputBoxVal, 16) + 50, minWidth),
153
- 550,
154
- )
158
+ // heuristic, text width + icon width + 50 accommodates help icon and search
159
+ // icon
160
+ const w = measureText(inputBoxVal, 16) + 50
161
+ const width = Math.min(Math.max(w, minWidth), maxWidth)
155
162
 
156
163
  // notes on implementation:
157
164
  // The selectOnFocus setting helps highlight the field when clicked
158
165
  return (
159
166
  <>
160
167
  <Autocomplete
161
- id={`refNameAutocomplete-${model.id}`}
162
168
  data-testid="autocomplete"
163
169
  disableListWrap
164
170
  disableClearable
@@ -237,21 +243,17 @@ function RefNameAutocomplete({
237
243
 
238
244
  endAdornment: (
239
245
  <>
240
- {regions.length === 0 ? (
241
- <CircularProgress color="inherit" size={20} />
242
- ) : (
243
- <InputAdornment position="end" style={{ marginRight: 7 }}>
244
- <SearchIcon fontSize="small" />
245
- {showHelp ? (
246
- <IconButton
247
- onClick={() => setHelpDialogDisplayed(true)}
248
- size="small"
249
- >
250
- <HelpIcon fontSize="small" />
251
- </IconButton>
252
- ) : null}
253
- </InputAdornment>
254
- )}
246
+ <InputAdornment position="end" style={{ marginRight: 7 }}>
247
+ <SearchIcon fontSize="small" />
248
+ {showHelp ? (
249
+ <IconButton
250
+ onClick={() => setHelpDialogDisplayed(true)}
251
+ size="small"
252
+ >
253
+ <HelpIcon fontSize="small" />
254
+ </IconButton>
255
+ ) : null}
256
+ </InputAdornment>
255
257
  {params.InputProps.endAdornment}
256
258
  </>
257
259
  ),
@@ -1,14 +1,13 @@
1
1
  import React, { useRef } from 'react'
2
2
  import { makeStyles } from 'tss-react/mui'
3
-
4
3
  import { Popover, Typography, alpha } from '@mui/material'
5
4
  import { stringify, toLocale } from '@jbrowse/core/util'
6
5
 
7
6
  const useStyles = makeStyles()(theme => {
8
7
  const { primary, tertiary } = theme.palette
9
8
  const background = tertiary
10
- ? alpha(tertiary.main, 0.7)
11
- : alpha(primary.main, 0.7)
9
+ ? alpha(tertiary.light, 0.7)
10
+ : alpha(primary.light, 0.7)
12
11
  return {
13
12
  rubberband: {
14
13
  height: '100%',
@@ -43,7 +42,7 @@ interface Offset {
43
42
  oob?: boolean
44
43
  }
45
44
 
46
- function RubberbandSpan({
45
+ export default function RubberbandSpan({
47
46
  leftBpOffset,
48
47
  rightBpOffset,
49
48
  numOfBpSelected,
@@ -67,14 +66,8 @@ function RubberbandSpan({
67
66
  classes={{ paper: classes.paper }}
68
67
  open
69
68
  anchorEl={ref.current}
70
- anchorOrigin={{
71
- vertical: 'top',
72
- horizontal: 'left',
73
- }}
74
- transformOrigin={{
75
- vertical: 'bottom',
76
- horizontal: 'right',
77
- }}
69
+ anchorOrigin={{ vertical: 'top', horizontal: 'left' }}
70
+ transformOrigin={{ vertical: 'bottom', horizontal: 'right' }}
78
71
  keepMounted
79
72
  disableRestoreFocus
80
73
  >
@@ -82,19 +75,11 @@ function RubberbandSpan({
82
75
  </Popover>
83
76
  <Popover
84
77
  className={classes.popover}
85
- classes={{
86
- paper: classes.paper,
87
- }}
78
+ classes={{ paper: classes.paper }}
88
79
  open
89
80
  anchorEl={ref.current}
90
- anchorOrigin={{
91
- vertical: 'top',
92
- horizontal: 'right',
93
- }}
94
- transformOrigin={{
95
- vertical: 'bottom',
96
- horizontal: 'left',
97
- }}
81
+ anchorOrigin={{ vertical: 'top', horizontal: 'right' }}
82
+ transformOrigin={{ vertical: 'bottom', horizontal: 'left' }}
98
83
  keepMounted
99
84
  disableRestoreFocus
100
85
  >
@@ -112,5 +97,3 @@ function RubberbandSpan({
112
97
  </>
113
98
  )
114
99
  }
115
-
116
- export default RubberbandSpan
@@ -61,7 +61,7 @@ function SearchBox({
61
61
  const allRefs = assembly?.allRefNamesWithLowerCase || []
62
62
  if (
63
63
  allRefs.includes(input) ||
64
- (allRefs.includes(ref) && !Number.isNaN(parseInt(rest, 10)))
64
+ (allRefs.includes(ref) && !Number.isNaN(Number.parseInt(rest, 10)))
65
65
  ) {
66
66
  await model.navToLocString(input, assemblyName)
67
67
  } else {
@@ -103,10 +103,11 @@ function SearchBox({
103
103
  })
104
104
  }
105
105
  model={model}
106
+ minWidth={175}
106
107
  TextFieldProps={{
107
108
  variant: 'outlined',
108
109
  className: classes.headerRefName,
109
- style: { margin: SPACING, minWidth: '175px' },
110
+ style: { margin: SPACING },
110
111
  InputProps: {
111
112
  style: {
112
113
  padding: 0,
@@ -3,10 +3,11 @@ import { IconButton, Paper, Typography, alpha } from '@mui/material'
3
3
  import { makeStyles } from 'tss-react/mui'
4
4
  import { observer } from 'mobx-react'
5
5
  import { getConf } from '@jbrowse/core/configuration'
6
- import CascadingMenu from '@jbrowse/core/ui/CascadingMenu'
7
6
  import { getSession, getContainingView } from '@jbrowse/core/util'
8
7
  import { getTrackName } from '@jbrowse/core/util/tracks'
9
8
  import { BaseTrackModel } from '@jbrowse/core/pluggableElementTypes/models'
9
+ import { SanitizedHTML } from '@jbrowse/core/ui'
10
+ import CascadingMenu from '@jbrowse/core/ui/CascadingMenu'
10
11
 
11
12
  import {
12
13
  bindTrigger,
@@ -22,7 +23,6 @@ import MinimizeIcon from '@mui/icons-material/Minimize'
22
23
  import AddIcon from '@mui/icons-material/Add'
23
24
 
24
25
  import { LinearGenomeViewModel } from '..'
25
- import { SanitizedHTML } from '@jbrowse/core/ui'
26
26
 
27
27
  const useStyles = makeStyles()(theme => ({
28
28
  root: {
@@ -42,7 +42,6 @@ const useStyles = makeStyles()(theme => ({
42
42
  },
43
43
  dragHandle: {
44
44
  cursor: 'grab',
45
- color: '#135560',
46
45
  },
47
46
  dragHandleIcon: {
48
47
  display: 'inline-block',
@@ -61,83 +60,84 @@ interface Props {
61
60
  className?: string
62
61
  }
63
62
 
64
- const TrackLabel = React.forwardRef<HTMLDivElement, Props>(
65
- ({ track, className }, ref) => {
66
- const { classes, cx } = useStyles()
67
- const view = getContainingView(track) as LGV
68
- const session = getSession(track)
69
- const trackConf = track.configuration
70
- const minimized = track.minimized
71
- const trackId = getConf(track, 'trackId')
72
- const trackName = getTrackName(trackConf, session)
63
+ const TrackLabel = React.forwardRef<HTMLDivElement, Props>(function (
64
+ { track, className },
65
+ ref,
66
+ ) {
67
+ const { classes, cx } = useStyles()
68
+ const view = getContainingView(track) as LGV
69
+ const session = getSession(track)
70
+ const trackConf = track.configuration
71
+ const minimized = track.minimized
72
+ const trackId = getConf(track, 'trackId')
73
+ const trackName = getTrackName(trackConf, session)
73
74
 
74
- const popupState = usePopupState({
75
- popupId: 'trackLabelMenu',
76
- variant: 'popover',
77
- })
75
+ const popupState = usePopupState({
76
+ popupId: 'trackLabelMenu',
77
+ variant: 'popover',
78
+ })
78
79
 
79
- const items = [
80
- {
81
- label: minimized ? 'Restore track' : 'Minimize track',
82
- icon: minimized ? AddIcon : MinimizeIcon,
83
- onClick: () => track.setMinimized(!minimized),
84
- },
85
- ...(session.getTrackActionMenuItems?.(trackConf) || []),
86
- ...track.trackMenuItems(),
87
- ].sort((a, b) => (b.priority || 0) - (a.priority || 0))
80
+ const items = [
81
+ {
82
+ label: minimized ? 'Restore track' : 'Minimize track',
83
+ icon: minimized ? AddIcon : MinimizeIcon,
84
+ onClick: () => track.setMinimized(!minimized),
85
+ },
86
+ ...(session.getTrackActionMenuItems?.(trackConf) || []),
87
+ ...track.trackMenuItems(),
88
+ ].sort((a, b) => (b.priority || 0) - (a.priority || 0))
88
89
 
89
- return (
90
- <Paper ref={ref} className={cx(className, classes.root)}>
91
- <span
92
- draggable
93
- className={classes.dragHandle}
94
- onDragStart={event => {
95
- const target = event.currentTarget
96
- if (target.parentNode) {
97
- const parent = target.parentNode as HTMLElement
98
- event.dataTransfer.setDragImage(parent, 20, 20)
99
- view.setDraggingTrackId(track.id)
100
- }
101
- }}
102
- onDragEnd={() => view.setDraggingTrackId(undefined)}
103
- data-testid={`dragHandle-${view.id}-${trackId}`}
104
- >
105
- <DragIcon className={classes.dragHandleIcon} fontSize="small" />
106
- </span>
107
- <IconButton
108
- onClick={() => view.hideTrack(trackId)}
109
- className={classes.iconButton}
110
- title="close this track"
111
- color="secondary"
112
- >
113
- <CloseIcon fontSize="small" />
114
- </IconButton>
90
+ return (
91
+ <Paper ref={ref} className={cx(className, classes.root)}>
92
+ <span
93
+ draggable
94
+ className={classes.dragHandle}
95
+ onDragStart={event => {
96
+ const target = event.currentTarget
97
+ if (target.parentNode) {
98
+ const parent = target.parentNode as HTMLElement
99
+ event.dataTransfer.setDragImage(parent, 20, 20)
100
+ view.setDraggingTrackId(track.id)
101
+ }
102
+ }}
103
+ onDragEnd={() => view.setDraggingTrackId(undefined)}
104
+ data-testid={`dragHandle-${view.id}-${trackId}`}
105
+ >
106
+ <DragIcon className={classes.dragHandleIcon} fontSize="small" />
107
+ </span>
108
+ <IconButton
109
+ onClick={() => view.hideTrack(trackId)}
110
+ className={classes.iconButton}
111
+ title="close this track"
112
+ >
113
+ <CloseIcon fontSize="small" />
114
+ </IconButton>
115
115
 
116
- <Typography
117
- variant="body1"
118
- component="span"
119
- className={classes.trackName}
120
- >
121
- <SanitizedHTML html={trackName + (minimized ? ' (minimized)' : '')} />
122
- </Typography>
123
- <IconButton
124
- {...bindTrigger(popupState)}
125
- className={classes.iconButton}
126
- color="secondary"
127
- data-testid="track_menu_icon"
128
- disabled={!items.length}
129
- >
130
- <MoreVertIcon fontSize="small" />
131
- </IconButton>
132
- <CascadingMenu
133
- {...bindPopover(popupState)}
134
- onMenuItemClick={(_: unknown, callback: Function) => callback()}
135
- menuItems={items}
136
- popupState={popupState}
116
+ <Typography
117
+ variant="body1"
118
+ component="span"
119
+ className={classes.trackName}
120
+ >
121
+ <SanitizedHTML
122
+ html={`${trackName}${minimized ? ' (minimized)' : ''}`}
137
123
  />
138
- </Paper>
139
- )
140
- },
141
- )
124
+ </Typography>
125
+ <IconButton
126
+ {...bindTrigger(popupState)}
127
+ className={classes.iconButton}
128
+ data-testid="track_menu_icon"
129
+ disabled={items.length === 0}
130
+ >
131
+ <MoreVertIcon fontSize="small" />
132
+ </IconButton>
133
+ <CascadingMenu
134
+ {...bindPopover(popupState)}
135
+ onMenuItemClick={(_: unknown, callback: Function) => callback()}
136
+ menuItems={items}
137
+ popupState={popupState}
138
+ />
139
+ </Paper>
140
+ )
141
+ })
142
142
 
143
143
  export default observer(TrackLabel)
@@ -20,15 +20,11 @@ const useStyles = makeStyles()({
20
20
  position: 'relative',
21
21
  overflow: 'hidden',
22
22
  },
23
- spacer: {
24
- position: 'relative',
25
- height: 3,
26
- },
27
23
  })
28
24
 
29
25
  type LGV = LinearGenomeViewModel
30
26
 
31
- function TracksContainer({
27
+ export default observer(function TracksContainer({
32
28
  children,
33
29
  model,
34
30
  }: {
@@ -60,6 +56,12 @@ function TracksContainer({
60
56
  ref={ref}
61
57
  data-testid="trackContainer"
62
58
  className={classes.tracksContainer}
59
+ onClick={event => {
60
+ if (event.detail === 2) {
61
+ const left = ref.current?.getBoundingClientRect().left || 0
62
+ model.zoomTo(model.bpPerPx / 2, event.clientX - left, true)
63
+ }
64
+ }}
63
65
  onMouseDown={event => {
64
66
  mouseDown1(event)
65
67
  mouseDown2(event)
@@ -106,6 +108,4 @@ function TracksContainer({
106
108
  {children}
107
109
  </div>
108
110
  )
109
- }
110
-
111
- export default observer(TracksContainer)
111
+ })
@@ -6,7 +6,7 @@ import ZoomIn from '@mui/icons-material/ZoomIn'
6
6
  import ZoomOut from '@mui/icons-material/ZoomOut'
7
7
  import { LinearGenomeViewModel } from '..'
8
8
 
9
- const useStyles = makeStyles()({
9
+ const useStyles = makeStyles()(theme => ({
10
10
  container: {
11
11
  display: 'flex',
12
12
  flexDirection: 'row',
@@ -14,8 +14,9 @@ const useStyles = makeStyles()({
14
14
  },
15
15
  slider: {
16
16
  width: 70,
17
+ color: theme.palette.text.secondary,
17
18
  },
18
- })
19
+ }))
19
20
 
20
21
  function ZoomControls({ model }: { model: LinearGenomeViewModel }) {
21
22
  const { classes } = useStyles()
@@ -31,7 +32,6 @@ function ZoomControls({ model }: { model: LinearGenomeViewModel }) {
31
32
  data-testid="zoom_out"
32
33
  onClick={() => model.zoom(bpPerPx * 2)}
33
34
  disabled={bpPerPx >= maxBpPerPx - 0.0001 || scaleFactor !== 1}
34
- color="secondary"
35
35
  size="large"
36
36
  >
37
37
  <ZoomOut />
@@ -51,7 +51,6 @@ function ZoomControls({ model }: { model: LinearGenomeViewModel }) {
51
51
  data-testid="zoom_in"
52
52
  onClick={() => model.zoom(model.bpPerPx / 2)}
53
53
  disabled={bpPerPx <= minBpPerPx + 0.0001 || scaleFactor !== 1}
54
- color="secondary"
55
54
  size="large"
56
55
  >
57
56
  <ZoomIn />