react-msaview 9.0.0 → 9.1.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 (352) hide show
  1. package/README.md +19 -10
  2. package/bundle/index.js +111 -115
  3. package/bundle/index.js.map +4 -4
  4. package/dist/blosum62.d.ts +3 -0
  5. package/dist/blosum62.js +43 -0
  6. package/dist/blosum62.js.map +1 -0
  7. package/dist/colorSchemes.js +2 -3
  8. package/dist/colorSchemes.js.map +1 -1
  9. package/dist/columnCounts.d.ts +0 -1
  10. package/dist/columnCounts.js +1 -1
  11. package/dist/columnCounts.js.map +1 -1
  12. package/dist/components/Loading.d.ts +3 -2
  13. package/dist/components/Loading.js +7 -7
  14. package/dist/components/Loading.js.map +1 -1
  15. package/dist/components/MSAView.d.ts +3 -2
  16. package/dist/components/MSAView.js +7 -4
  17. package/dist/components/MSAView.js.map +1 -1
  18. package/dist/components/MSAViewer.d.ts +1941 -4
  19. package/dist/components/MSAViewer.js +144 -201
  20. package/dist/components/MSAViewer.js.map +1 -1
  21. package/dist/components/MetadataTable.d.ts +4 -1
  22. package/dist/components/MetadataTable.js +55 -16
  23. package/dist/components/MetadataTable.js.map +1 -1
  24. package/dist/components/ResizeHandles.js +3 -2
  25. package/dist/components/ResizeHandles.js.map +1 -1
  26. package/dist/components/Track.js +8 -1
  27. package/dist/components/Track.js.map +1 -1
  28. package/dist/components/controls.d.ts +11 -0
  29. package/dist/components/controls.js +49 -0
  30. package/dist/components/controls.js.map +1 -0
  31. package/dist/components/dialogs/AnnotationFileDialog.js +12 -18
  32. package/dist/components/dialogs/AnnotationFileDialog.js.map +1 -1
  33. package/dist/components/dialogs/ExportSVGDialog.js +5 -7
  34. package/dist/components/dialogs/ExportSVGDialog.js.map +1 -1
  35. package/dist/components/dialogs/FeatureDialog.js +2 -2
  36. package/dist/components/dialogs/FeatureDialog.js.map +1 -1
  37. package/dist/components/{header/TreeSettingsMenu.d.ts → dialogs/GapThresholdDialog.d.ts} +3 -2
  38. package/dist/components/dialogs/GapThresholdDialog.js +15 -0
  39. package/dist/components/dialogs/GapThresholdDialog.js.map +1 -0
  40. package/dist/components/{header → dialogs}/GappynessSlider.d.ts +1 -1
  41. package/dist/components/{header → dialogs}/GappynessSlider.js +3 -10
  42. package/dist/components/dialogs/GappynessSlider.js.map +1 -0
  43. package/dist/components/{header → dialogs}/GoToBox.d.ts +4 -2
  44. package/dist/components/dialogs/GoToBox.js +48 -0
  45. package/dist/components/dialogs/GoToBox.js.map +1 -0
  46. package/dist/components/dialogs/GoToDialog.d.ts +6 -0
  47. package/dist/components/dialogs/GoToDialog.js +10 -0
  48. package/dist/components/dialogs/GoToDialog.js.map +1 -0
  49. package/dist/components/dialogs/HelpDialog.d.ts +6 -0
  50. package/dist/components/dialogs/HelpDialog.js +30 -0
  51. package/dist/components/dialogs/HelpDialog.js.map +1 -0
  52. package/dist/components/dialogs/MetadataDialog.js +11 -3
  53. package/dist/components/dialogs/MetadataDialog.js.map +1 -1
  54. package/dist/components/dialogs/goTo.d.ts +5 -0
  55. package/dist/components/{header → dialogs}/goTo.js +1 -1
  56. package/dist/components/dialogs/goTo.js.map +1 -0
  57. package/dist/components/dialogs/metadataLabels.d.ts +4 -0
  58. package/dist/components/dialogs/metadataLabels.js +52 -0
  59. package/dist/components/dialogs/metadataLabels.js.map +1 -0
  60. package/dist/components/dialogs/metadataRecord.d.ts +1 -0
  61. package/dist/components/dialogs/metadataRecord.js +38 -0
  62. package/dist/components/dialogs/metadataRecord.js.map +1 -0
  63. package/dist/components/header/Header.d.ts +6 -2
  64. package/dist/components/header/Header.js +30 -34
  65. package/dist/components/header/Header.js.map +1 -1
  66. package/dist/components/header/HiddenColumnsChip.d.ts +6 -0
  67. package/dist/components/header/HiddenColumnsChip.js +15 -0
  68. package/dist/components/header/HiddenColumnsChip.js.map +1 -0
  69. package/dist/components/header/{FileMenu.d.ts → MenuBar.d.ts} +3 -3
  70. package/dist/components/header/MenuBar.js +33 -0
  71. package/dist/components/header/MenuBar.js.map +1 -0
  72. package/dist/components/header/ScrollZoomCheckbox.d.ts +7 -0
  73. package/dist/components/header/ScrollZoomCheckbox.js +19 -0
  74. package/dist/components/header/ScrollZoomCheckbox.js.map +1 -0
  75. package/dist/components/header/ZoomControls.js +12 -48
  76. package/dist/components/header/ZoomControls.js.map +1 -1
  77. package/dist/components/header/colorSchemeMenuItems.d.ts +4 -0
  78. package/dist/components/header/colorSchemeMenuItems.js +106 -0
  79. package/dist/components/header/colorSchemeMenuItems.js.map +1 -0
  80. package/dist/components/header/getAnnotationsMenu.d.ts +3 -30
  81. package/dist/components/header/getAnnotationsMenu.js +48 -54
  82. package/dist/components/header/getAnnotationsMenu.js.map +1 -1
  83. package/dist/components/header/menuBarItems.d.ts +11 -0
  84. package/dist/components/header/menuBarItems.js +277 -0
  85. package/dist/components/header/menuBarItems.js.map +1 -0
  86. package/dist/components/import/ImportForm.js +12 -6
  87. package/dist/components/import/ImportForm.js.map +1 -1
  88. package/dist/components/import/data/seq2.d.ts +0 -1
  89. package/dist/components/import/data/seq2.js +0 -17
  90. package/dist/components/import/data/seq2.js.map +1 -1
  91. package/dist/components/minimap/Minimap.js +7 -3
  92. package/dist/components/minimap/Minimap.js.map +1 -1
  93. package/dist/components/minimap/MinimapSVG.js +2 -1
  94. package/dist/components/minimap/MinimapSVG.js.map +1 -1
  95. package/dist/components/minimap/minimapLayout.d.ts +12 -0
  96. package/dist/components/minimap/minimapLayout.js +20 -0
  97. package/dist/components/minimap/minimapLayout.js.map +1 -1
  98. package/dist/components/msa/MSACanvas.js +28 -10
  99. package/dist/components/msa/MSACanvas.js.map +1 -1
  100. package/dist/components/msa/MSACanvasBlock.js +17 -16
  101. package/dist/components/msa/MSACanvasBlock.js.map +1 -1
  102. package/dist/components/msa/MSAMouseoverCanvas.js +2 -2
  103. package/dist/components/msa/MSAMouseoverCanvas.js.map +1 -1
  104. package/dist/components/msa/WheelZoomHint.d.ts +7 -0
  105. package/dist/components/msa/WheelZoomHint.js +38 -0
  106. package/dist/components/msa/WheelZoomHint.js.map +1 -0
  107. package/dist/components/msa/drawFeatureSpans.d.ts +50 -11
  108. package/dist/components/msa/drawFeatureSpans.js +99 -56
  109. package/dist/components/msa/drawFeatureSpans.js.map +1 -1
  110. package/dist/components/msa/msaKeys.js +3 -0
  111. package/dist/components/msa/msaKeys.js.map +1 -1
  112. package/dist/components/msa/msaRaster.d.ts +14 -2
  113. package/dist/components/msa/msaRaster.js +20 -10
  114. package/dist/components/msa/msaRaster.js.map +1 -1
  115. package/dist/components/msa/renderBoxFeatureCanvasBlock.d.ts +9 -0
  116. package/dist/components/msa/renderBoxFeatureCanvasBlock.js +39 -8
  117. package/dist/components/msa/renderBoxFeatureCanvasBlock.js.map +1 -1
  118. package/dist/components/msa/renderHighlights.d.ts +2 -5
  119. package/dist/components/msa/renderHighlights.js +5 -6
  120. package/dist/components/msa/renderHighlights.js.map +1 -1
  121. package/dist/components/msa/renderMSABlock.d.ts +6 -1
  122. package/dist/components/msa/renderMSABlock.js +44 -17
  123. package/dist/components/msa/renderMSABlock.js.map +1 -1
  124. package/dist/components/msa/renderMSAMouseover.js +2 -1
  125. package/dist/components/msa/renderMSAMouseover.js.map +1 -1
  126. package/dist/components/msa/tileColor.js +7 -0
  127. package/dist/components/msa/tileColor.js.map +1 -1
  128. package/dist/components/renderCtx.d.ts +1 -1
  129. package/dist/components/rowpanels/RowPanelBlock.js +2 -2
  130. package/dist/components/rowpanels/RowPanelBlock.js.map +1 -1
  131. package/dist/components/rowpanels/renderFeaturePanel.d.ts +5 -1
  132. package/dist/components/rowpanels/renderFeaturePanel.js +12 -5
  133. package/dist/components/rowpanels/renderFeaturePanel.js.map +1 -1
  134. package/dist/components/settings/MenuItemsForm.d.ts +10 -0
  135. package/dist/components/settings/MenuItemsForm.js +80 -0
  136. package/dist/components/settings/MenuItemsForm.js.map +1 -0
  137. package/dist/components/settings/SettingsPanel.d.ts +12 -0
  138. package/dist/components/settings/SettingsPanel.js +92 -0
  139. package/dist/components/settings/SettingsPanel.js.map +1 -0
  140. package/dist/components/{header/ZoomMenu.d.ts → settings/TrackList.d.ts} +2 -2
  141. package/dist/components/settings/TrackList.js +55 -0
  142. package/dist/components/settings/TrackList.js.map +1 -0
  143. package/dist/components/tracks/TrackBlocks.js +2 -2
  144. package/dist/components/tracks/TrackBlocks.js.map +1 -1
  145. package/dist/components/tracks/drawTracks.d.ts +1 -53
  146. package/dist/components/tracks/drawTracks.js +5 -5
  147. package/dist/components/tracks/drawTracks.js.map +1 -1
  148. package/dist/components/tree/CladeLabels.d.ts +1 -1
  149. package/dist/components/tree/CladeLabels.js +22 -34
  150. package/dist/components/tree/CladeLabels.js.map +1 -1
  151. package/dist/components/tree/TreeCanvasBlock.js +2 -2
  152. package/dist/components/tree/TreeCanvasBlock.js.map +1 -1
  153. package/dist/components/tree/TreeMenu.js +4 -6
  154. package/dist/components/tree/TreeMenu.js.map +1 -1
  155. package/dist/components/tree/TreeOverview.js +2 -2
  156. package/dist/components/tree/TreeOverview.js.map +1 -1
  157. package/dist/components/tree/cladeBrackets.d.ts +17 -10
  158. package/dist/components/tree/cladeBrackets.js +33 -3
  159. package/dist/components/tree/cladeBrackets.js.map +1 -1
  160. package/dist/components/tree/renderTreeCanvas.js +2 -8
  161. package/dist/components/tree/renderTreeCanvas.js.map +1 -1
  162. package/dist/components/tree/renderTreeOverview.js +4 -11
  163. package/dist/components/tree/renderTreeOverview.js.map +1 -1
  164. package/dist/constants.d.ts +4 -1
  165. package/dist/constants.js +7 -1
  166. package/dist/constants.js.map +1 -1
  167. package/dist/darkReader.d.ts +7 -0
  168. package/dist/darkReader.js +42 -0
  169. package/dist/darkReader.js.map +1 -0
  170. package/dist/element.js +25 -53
  171. package/dist/element.js.map +1 -1
  172. package/dist/exportLayout.d.ts +39 -0
  173. package/dist/exportLayout.js +78 -0
  174. package/dist/exportLayout.js.map +1 -0
  175. package/dist/featurePanels.d.ts +37 -0
  176. package/dist/featurePanels.js +187 -0
  177. package/dist/featurePanels.js.map +1 -0
  178. package/dist/filehandleLoader.d.ts +41 -0
  179. package/dist/filehandleLoader.js +99 -0
  180. package/dist/filehandleLoader.js.map +1 -0
  181. package/dist/headlessRenderEnv.d.ts +12 -39
  182. package/dist/headlessRenderEnv.js +18 -12
  183. package/dist/headlessRenderEnv.js.map +1 -1
  184. package/dist/hierarchy.d.ts +5 -8
  185. package/dist/hierarchy.js +5 -79
  186. package/dist/hierarchy.js.map +1 -1
  187. package/dist/index.d.ts +6 -1
  188. package/dist/index.js +6 -1
  189. package/dist/index.js.map +1 -1
  190. package/dist/measureTextCanvas.d.ts +7 -0
  191. package/dist/measureTextCanvas.js +8 -6
  192. package/dist/measureTextCanvas.js.map +1 -1
  193. package/dist/model/treeModel.d.ts +6 -2
  194. package/dist/model/treeModel.js +8 -4
  195. package/dist/model/treeModel.js.map +1 -1
  196. package/dist/model.d.ts +180 -76
  197. package/dist/model.js +358 -618
  198. package/dist/model.js.map +1 -1
  199. package/dist/neighborJoining.js +1 -40
  200. package/dist/neighborJoining.js.map +1 -1
  201. package/dist/renderToSvg.d.ts +2 -7
  202. package/dist/renderToSvg.js +33 -133
  203. package/dist/renderToSvg.js.map +1 -1
  204. package/dist/rerootTree.d.ts +1 -0
  205. package/dist/rerootTree.js +7 -6
  206. package/dist/rerootTree.js.map +1 -1
  207. package/dist/schemeResidueColor.d.ts +12 -0
  208. package/dist/schemeResidueColor.js +33 -0
  209. package/dist/schemeResidueColor.js.map +1 -0
  210. package/dist/similarityColors.d.ts +11 -0
  211. package/dist/similarityColors.js +90 -0
  212. package/dist/similarityColors.js.map +1 -0
  213. package/dist/svgTestUtil.d.ts +74 -32
  214. package/dist/treeDisplay.d.ts +37 -0
  215. package/dist/treeDisplay.js +209 -0
  216. package/dist/treeDisplay.js.map +1 -0
  217. package/dist/types.d.ts +6 -3
  218. package/dist/useWheelScroll.d.ts +3 -1
  219. package/dist/useWheelScroll.js +36 -17
  220. package/dist/useWheelScroll.js.map +1 -1
  221. package/dist/util.d.ts +2 -0
  222. package/dist/util.js +2 -0
  223. package/dist/util.js.map +1 -1
  224. package/dist/version.d.ts +1 -1
  225. package/dist/version.js +1 -1
  226. package/dist/viewerSnapshot.d.ts +169 -0
  227. package/dist/viewerSnapshot.js +100 -0
  228. package/dist/viewerSnapshot.js.map +1 -0
  229. package/dist/wheelZoom.d.ts +8 -3
  230. package/dist/wheelZoom.js +44 -32
  231. package/dist/wheelZoom.js.map +1 -1
  232. package/dist/zoomSnapshot.d.ts +29 -0
  233. package/dist/zoomSnapshot.js +47 -0
  234. package/dist/zoomSnapshot.js.map +1 -0
  235. package/package.json +11 -11
  236. package/src/blosum62.ts +45 -0
  237. package/src/colorSchemes.ts +2 -4
  238. package/src/columnCounts.ts +1 -1
  239. package/src/components/Loading.tsx +25 -14
  240. package/src/components/MSAView.tsx +22 -5
  241. package/src/components/MSAViewer.tsx +275 -251
  242. package/src/components/MetadataTable.tsx +83 -26
  243. package/src/components/ResizeHandles.tsx +9 -2
  244. package/src/components/Track.tsx +15 -1
  245. package/src/components/controls.ts +62 -0
  246. package/src/components/dialogs/AnnotationFileDialog.tsx +16 -21
  247. package/src/components/dialogs/ExportSVGDialog.tsx +8 -19
  248. package/src/components/dialogs/FeatureDialog.tsx +2 -5
  249. package/src/components/dialogs/GapThresholdDialog.tsx +36 -0
  250. package/src/components/{header → dialogs}/GappynessSlider.tsx +3 -10
  251. package/src/components/{header → dialogs}/GoToBox.tsx +36 -10
  252. package/src/components/dialogs/GoToDialog.tsx +30 -0
  253. package/src/components/dialogs/HelpDialog.tsx +79 -0
  254. package/src/components/dialogs/MetadataDialog.tsx +32 -4
  255. package/src/components/{header → dialogs}/goTo.ts +1 -1
  256. package/src/components/dialogs/metadataLabels.ts +54 -0
  257. package/src/components/dialogs/metadataRecord.tsx +61 -0
  258. package/src/components/header/Header.tsx +75 -44
  259. package/src/components/header/HiddenColumnsChip.tsx +39 -0
  260. package/src/components/header/MenuBar.tsx +64 -0
  261. package/src/components/header/ScrollZoomCheckbox.tsx +46 -0
  262. package/src/components/header/ZoomControls.tsx +23 -74
  263. package/src/components/header/colorSchemeMenuItems.ts +121 -0
  264. package/src/components/header/getAnnotationsMenu.ts +52 -56
  265. package/src/components/header/menuBarItems.ts +357 -0
  266. package/src/components/import/ImportForm.tsx +19 -7
  267. package/src/components/import/data/seq2.ts +0 -18
  268. package/src/components/minimap/Minimap.tsx +11 -3
  269. package/src/components/minimap/MinimapSVG.tsx +17 -1
  270. package/src/components/minimap/minimapLayout.ts +27 -0
  271. package/src/components/msa/MSACanvas.tsx +24 -4
  272. package/src/components/msa/MSACanvasBlock.tsx +20 -17
  273. package/src/components/msa/MSAMouseoverCanvas.tsx +2 -2
  274. package/src/components/msa/WheelZoomHint.tsx +56 -0
  275. package/src/components/msa/drawFeatureSpans.ts +160 -79
  276. package/src/components/msa/msaKeys.ts +3 -0
  277. package/src/components/msa/msaRaster.ts +26 -10
  278. package/src/components/msa/renderBoxFeatureCanvasBlock.ts +62 -24
  279. package/src/components/msa/renderHighlights.ts +5 -6
  280. package/src/components/msa/renderMSABlock.ts +51 -15
  281. package/src/components/msa/renderMSAMouseover.ts +5 -1
  282. package/src/components/msa/tileColor.ts +7 -0
  283. package/src/components/renderCtx.ts +0 -1
  284. package/src/components/rowpanels/RowPanelBlock.tsx +2 -2
  285. package/src/components/rowpanels/renderFeaturePanel.ts +26 -7
  286. package/src/components/settings/MenuItemsForm.tsx +225 -0
  287. package/src/components/settings/SettingsPanel.tsx +156 -0
  288. package/src/components/settings/TrackList.tsx +119 -0
  289. package/src/components/tracks/TrackBlocks.tsx +2 -2
  290. package/src/components/tracks/drawTracks.ts +5 -5
  291. package/src/components/tree/CladeLabels.tsx +30 -54
  292. package/src/components/tree/TreeCanvasBlock.tsx +2 -2
  293. package/src/components/tree/TreeMenu.tsx +4 -6
  294. package/src/components/tree/TreeOverview.tsx +2 -2
  295. package/src/components/tree/cladeBrackets.ts +50 -3
  296. package/src/components/tree/renderTreeCanvas.ts +2 -13
  297. package/src/components/tree/renderTreeOverview.ts +7 -14
  298. package/src/constants.ts +9 -1
  299. package/src/darkReader.ts +57 -0
  300. package/src/element.ts +37 -64
  301. package/src/exportLayout.ts +134 -0
  302. package/src/featurePanels.ts +269 -0
  303. package/src/filehandleLoader.ts +136 -0
  304. package/src/headlessRenderEnv.ts +24 -11
  305. package/src/hierarchy.ts +5 -88
  306. package/src/index.ts +9 -5
  307. package/src/measureTextCanvas.ts +8 -6
  308. package/src/model/treeModel.ts +9 -3
  309. package/src/model.ts +452 -807
  310. package/src/neighborJoining.ts +1 -42
  311. package/src/renderToSvg.tsx +56 -207
  312. package/src/rerootTree.ts +7 -6
  313. package/src/schemeResidueColor.ts +37 -0
  314. package/src/similarityColors.ts +112 -0
  315. package/src/treeDisplay.ts +278 -0
  316. package/src/types.ts +6 -4
  317. package/src/useWheelScroll.ts +43 -22
  318. package/src/util.ts +3 -0
  319. package/src/version.ts +1 -1
  320. package/src/viewerSnapshot.ts +147 -0
  321. package/src/wheelZoom.ts +55 -33
  322. package/src/zoomSnapshot.ts +80 -0
  323. package/dist/components/header/ColorSchemeMenu.d.ts +0 -12
  324. package/dist/components/header/ColorSchemeMenu.js +0 -37
  325. package/dist/components/header/ColorSchemeMenu.js.map +0 -1
  326. package/dist/components/header/FileMenu.js +0 -66
  327. package/dist/components/header/FileMenu.js.map +0 -1
  328. package/dist/components/header/GappynessSlider.js.map +0 -1
  329. package/dist/components/header/GoToBox.js +0 -31
  330. package/dist/components/header/GoToBox.js.map +0 -1
  331. package/dist/components/header/MSASettingsMenu.d.ts +0 -6
  332. package/dist/components/header/MSASettingsMenu.js +0 -11
  333. package/dist/components/header/MSASettingsMenu.js.map +0 -1
  334. package/dist/components/header/ScrollZoomIcons.d.ts +0 -6
  335. package/dist/components/header/ScrollZoomIcons.js +0 -35
  336. package/dist/components/header/ScrollZoomIcons.js.map +0 -1
  337. package/dist/components/header/TreeSettingsMenu.js +0 -42
  338. package/dist/components/header/TreeSettingsMenu.js.map +0 -1
  339. package/dist/components/header/ZoomMenu.js +0 -37
  340. package/dist/components/header/ZoomMenu.js.map +0 -1
  341. package/dist/components/header/goTo.d.ts +0 -20
  342. package/dist/components/header/goTo.js.map +0 -1
  343. package/dist/components/header/settingsMenuItems.d.ts +0 -4
  344. package/dist/components/header/settingsMenuItems.js +0 -127
  345. package/dist/components/header/settingsMenuItems.js.map +0 -1
  346. package/src/components/header/ColorSchemeMenu.tsx +0 -56
  347. package/src/components/header/FileMenu.tsx +0 -81
  348. package/src/components/header/MSASettingsMenu.tsx +0 -26
  349. package/src/components/header/ScrollZoomIcons.tsx +0 -52
  350. package/src/components/header/TreeSettingsMenu.tsx +0 -60
  351. package/src/components/header/ZoomMenu.tsx +0 -48
  352. package/src/components/header/settingsMenuItems.ts +0 -157
@@ -1,25 +1,11 @@
1
- import React, { useEffect, useRef, useState } from 'react';
2
- import { createJBrowseTheme } from '@jbrowse/core/ui/theme';
1
+ import React, { forwardRef, useEffect, useImperativeHandle, useRef, useState, } from 'react';
3
2
  import useMeasure from '@jbrowse/core/util/useMeasure';
4
3
  import { destroy, isAlive } from '@jbrowse/mobx-state-tree';
5
4
  import { ThemeProvider } from '@mui/material/styles';
6
5
  import { compareStructural, reaction, when } from 'mobx';
7
6
  import MSAModelF from '../model.js';
7
+ import { fileLocations, resolveTheme, viewerHighlights, viewerSnapshot, } from '../viewerSnapshot.js';
8
8
  import Loading from './Loading.js';
9
- function resolveTheme(theme) {
10
- return createJBrowseTheme(theme === 'dark'
11
- ? { palette: { mode: 'dark' } }
12
- : typeof theme === 'object'
13
- ? theme
14
- : undefined);
15
- }
16
- function colorSchemeSnapshot(scheme) {
17
- return typeof scheme === 'string'
18
- ? { colorSchemeName: scheme }
19
- : scheme
20
- ? { customColorScheme: scheme.map }
21
- : {};
22
- }
23
9
  function sameSource(a, b) {
24
10
  return (a.msa === b.msa &&
25
11
  a.tree === b.tree &&
@@ -29,17 +15,19 @@ function sameSource(a, b) {
29
15
  /**
30
16
  * A new alignment or tree needs a new model, so the viewer remounts when one
31
17
  * of those props changes and keeps its model across every other change,
32
- * including a new annotation file.
18
+ * including a new annotation file. A `ref` holds the current model.
33
19
  */
34
- export default function MSAViewer(props) {
35
- const { msa, tree, msaFilehandle, treeFilehandle } = props;
20
+ const MSAViewer = forwardRef(function MSAViewer(props, ref) {
21
+ const resolved = { ...props, ...fileLocations(props) };
22
+ const { msa, tree, msaFilehandle, treeFilehandle } = resolved;
36
23
  const source = { msa, tree, msaFilehandle, treeFilehandle };
37
24
  const [shown, setShown] = useState({ source, generation: 0 });
38
25
  if (!sameSource(shown.source, source)) {
39
26
  setShown({ source, generation: shown.generation + 1 });
40
27
  }
41
- return React.createElement(Viewer, { key: shown.generation, ...props });
42
- }
28
+ return React.createElement(Viewer, { key: shown.generation, modelRef: ref, ...resolved });
29
+ });
30
+ export default MSAViewer;
43
31
  function useModelReaction(model, key, handler) {
44
32
  const latest = useRef(handler);
45
33
  useEffect(() => {
@@ -52,48 +40,139 @@ function useModelReaction(model, key, handler) {
52
40
  }, { equals: compareStructural })
53
41
  : undefined, [model, key, listening]);
54
42
  }
55
- function Viewer({ msa, tree, gff, msaFilehandle, treeFilehandle, gffFilehandle, colorScheme, height, colWidth, rowHeight, allowedGappyness, highlightColumns, highlights, features, clades, relativeTo, columnTracks, residueMappings, rowData, encodings, rowPanels, drawTree, residueEncoding, treeAreaWidth, showBranchLen, treeOrder, treeRoot, region, selection, hideHeader, theme, onCellHover, onCellClick, onViewportChange, onSelectionChange, onModel, }) {
56
- const [model] = useState(() => MSAModelF().create({
57
- type: 'MsaView',
58
- ...(msa || tree || gff || rowData
59
- ? {
60
- data: {
61
- msa: msa ?? '',
62
- tree: tree ?? '',
63
- gff,
64
- // the row table is stored as this JSON string, which is what a
65
- // shared URL and the size limit already cover
66
- ...(rowData ? { treeMetadata: JSON.stringify(rowData) } : {}),
67
- },
43
+ function synced(read, apply, { inSnapshot = false } = {}) {
44
+ return {
45
+ read,
46
+ apply: apply,
47
+ inSnapshot,
48
+ };
49
+ }
50
+ function ifSet(set) {
51
+ return (model, value) => {
52
+ if (value !== undefined) {
53
+ set(model, value);
54
+ }
55
+ };
56
+ }
57
+ /**
58
+ * How each prop reaches the mounted model. `inSnapshot` marks a prop the
59
+ * snapshot already applied, so only a later change reaches its setter.
60
+ */
61
+ const syncedProps = [
62
+ synced(p => p.height, ifSet((m, v) => {
63
+ m.setHeight(v);
64
+ })),
65
+ synced(p => p.colWidth, ifSet((m, v) => {
66
+ m.setColWidth(v);
67
+ })),
68
+ synced(p => p.rowHeight, ifSet((m, v) => {
69
+ m.setRowHeight(v);
70
+ })),
71
+ synced(p => p.allowedGappyness, ifSet((m, v) => {
72
+ m.setAllowedGappyness(v);
73
+ })),
74
+ synced(p => p.drawTree, ifSet((m, v) => {
75
+ m.setDrawTree(v);
76
+ })),
77
+ synced(p => p.treeAreaWidth, ifSet((m, v) => {
78
+ m.setTreeAreaWidth(v);
79
+ })),
80
+ synced(p => p.showBranchLen, ifSet((m, v) => {
81
+ m.setShowBranchLen(v);
82
+ })),
83
+ synced(p => p.treeOrder, ifSet((m, v) => {
84
+ m.setTreeOrder(v);
85
+ })),
86
+ synced(p => p.residueEncoding, ifSet((m, v) => {
87
+ m.setBgColor(v === 'fill');
88
+ })),
89
+ synced(p => !!p.hideHeader, (m, v) => {
90
+ m.setHideHeader(v);
91
+ }),
92
+ synced(p => p.relativeTo, (m, v) => {
93
+ m.drawRelativeTo(v);
94
+ }),
95
+ synced(p => p.gffFilehandle, (m, location, { gff }) => {
96
+ if (location) {
97
+ m.setGFFFilehandle(location);
98
+ }
99
+ else {
100
+ m.setGFF(gff);
101
+ }
102
+ }, { inSnapshot: true }),
103
+ synced(p => p.gff, (m, v) => {
104
+ m.setGFF(v);
105
+ }, { inSnapshot: true }),
106
+ synced(p => p.colorScheme, (m, scheme) => {
107
+ if (typeof scheme === 'string') {
108
+ m.setColorSchemeName(scheme);
109
+ }
110
+ else if (scheme) {
111
+ m.setCustomColorScheme(scheme.map);
112
+ }
113
+ }),
114
+ synced(viewerHighlights, (m, v) => {
115
+ m.setHighlights(v);
116
+ }),
117
+ synced(p => p.features ?? [], (m, v) => {
118
+ m.setFeatures(v);
119
+ }),
120
+ synced(p => p.selection, (m, v) => {
121
+ m.setSelection(v);
122
+ }),
123
+ synced(p => p.treeRoot, (m, v) => {
124
+ m.setTreeRoot(v);
125
+ }),
126
+ synced(p => p.clades ?? [], (m, v) => {
127
+ m.setClades(v);
128
+ }),
129
+ synced(p => p.columnTracks ?? [], (m, v) => {
130
+ m.setColumnTracks(v);
131
+ }),
132
+ synced(p => p.residueMappings ?? [], (m, v) => {
133
+ m.setResidueMappings(v);
134
+ }),
135
+ synced(p => p.rowData, (m, table) => {
136
+ if (table && Object.keys(table).length) {
137
+ m.setRowData(table);
138
+ }
139
+ }),
140
+ synced(p => p.encodings ?? [], (m, v) => {
141
+ m.setEncodings(v);
142
+ }),
143
+ synced(p => p.rowPanels ?? [], (m, v) => {
144
+ m.setRowPanels(v);
145
+ }),
146
+ ];
147
+ /**
148
+ * Applies each prop whose content changed since the last render. Comparing
149
+ * JSON keys lets a host pass a freshly computed array every render, and
150
+ * applying only a changed prop keeps a change made inside the viewer across
151
+ * the host's next render. The model receives a parsed copy, never the host's
152
+ * own object.
153
+ */
154
+ function useSyncedProps(model, props) {
155
+ const applied = useRef(undefined);
156
+ useEffect(() => {
157
+ const keys = syncedProps.map(({ read }) => JSON.stringify(read(props) ?? null));
158
+ applied.current ??= syncedProps.map(({ inSnapshot }, i) => inSnapshot ? keys[i] : '');
159
+ const last = applied.current;
160
+ syncedProps.forEach(({ apply }, i) => {
161
+ const key = keys[i];
162
+ if (last[i] !== key) {
163
+ last[i] = key;
164
+ apply(model, JSON.parse(key) ?? undefined, props);
68
165
  }
69
- : {}),
70
- ...(msaFilehandle ? { msaFilehandle } : {}),
71
- ...(treeFilehandle ? { treeFilehandle } : {}),
72
- ...(gffFilehandle ? { gffFilehandle } : {}),
73
- ...colorSchemeSnapshot(colorScheme),
74
- ...(height ? { height } : {}),
75
- ...(colWidth ? { colWidth } : {}),
76
- ...(rowHeight ? { rowHeight } : {}),
77
- ...(allowedGappyness !== undefined ? { allowedGappyness } : {}),
78
- ...(highlightColumns ? { highlightColumns } : {}),
79
- ...(highlights ? { highlights } : {}),
80
- ...(features ? { features } : {}),
81
- ...(selection ? { selection } : {}),
82
- ...(clades ? { clades } : {}),
83
- ...(relativeTo ? { relativeTo } : {}),
84
- ...(columnTracks ? { columnTracks } : {}),
85
- ...(residueMappings ? { residueMappings } : {}),
86
- ...(encodings ? { encodings } : {}),
87
- ...(rowPanels ? { rowPanels } : {}),
88
- ...(drawTree !== undefined ? { drawTree } : {}),
89
- ...(treeAreaWidth ? { treeAreaWidth } : {}),
90
- ...(showBranchLen !== undefined ? { showBranchLen } : {}),
91
- ...(treeOrder ? { treeOrder } : {}),
92
- ...(treeRoot ? { treeRoot } : {}),
93
- ...(residueEncoding !== undefined
94
- ? { bgColor: residueEncoding === 'fill' }
95
- : {}),
96
- }));
166
+ });
167
+ });
168
+ }
169
+ function Viewer({ modelRef, ...props }) {
170
+ const { region, theme, onCellHover, onCellClick, onViewportChange, onSelectionChange, onModel, } = props;
171
+ const [model] = useState(() => {
172
+ const model = MSAModelF().create(viewerSnapshot(props));
173
+ model.setImportForm(false);
174
+ return model;
175
+ });
97
176
  const destroyTimer = useRef(undefined);
98
177
  const [ref, { width }] = useMeasure();
99
178
  useEffect(() => {
@@ -101,150 +180,13 @@ function Viewer({ msa, tree, gff, msaFilehandle, treeFilehandle, gffFilehandle,
101
180
  model.setWidth(width);
102
181
  }
103
182
  }, [model, width]);
104
- // Each effect depends only on its own prop, so a change made inside the
105
- // viewer survives the host's next render.
106
- useEffect(() => {
107
- if (height !== undefined) {
108
- model.setHeight(height);
109
- }
110
- }, [model, height]);
111
- useEffect(() => {
112
- if (colWidth !== undefined) {
113
- model.setColWidth(colWidth);
114
- }
115
- }, [model, colWidth]);
116
- useEffect(() => {
117
- if (rowHeight !== undefined) {
118
- model.setRowHeight(rowHeight);
119
- }
120
- }, [model, rowHeight]);
121
- useEffect(() => {
122
- if (allowedGappyness !== undefined) {
123
- model.setAllowedGappyness(allowedGappyness);
124
- }
125
- }, [model, allowedGappyness]);
126
- useEffect(() => {
127
- if (drawTree !== undefined) {
128
- model.setDrawTree(drawTree);
129
- }
130
- }, [model, drawTree]);
131
- useEffect(() => {
132
- if (treeAreaWidth !== undefined) {
133
- model.setTreeAreaWidth(treeAreaWidth);
134
- }
135
- }, [model, treeAreaWidth]);
136
- useEffect(() => {
137
- if (showBranchLen !== undefined) {
138
- model.setShowBranchLen(showBranchLen);
139
- }
140
- }, [model, showBranchLen]);
141
- useEffect(() => {
142
- if (treeOrder !== undefined) {
143
- model.setTreeOrder(treeOrder);
144
- }
145
- }, [model, treeOrder]);
146
- useEffect(() => {
147
- if (residueEncoding !== undefined) {
148
- model.setBgColor(residueEncoding === 'fill');
149
- }
150
- }, [model, residueEncoding]);
151
- useEffect(() => {
152
- model.setHideHeader(!!hideHeader);
153
- }, [model, hideHeader]);
154
- // unguarded, so removing the prop turns the reference diff off
155
- useEffect(() => {
156
- model.drawRelativeTo(relativeTo);
157
- }, [model, relativeTo]);
158
- // The snapshot already holds the first gff and gffFilehandle, so these
159
- // effects apply only a later change. Removing either one sets the text back
160
- // to the gff prop, which clears the annotations when that is absent too.
161
- const appliedGff = useRef(gff);
162
- const gffFilehandleKey = JSON.stringify(gffFilehandle ?? null);
163
- const appliedGffFilehandle = useRef(gffFilehandleKey);
164
- useEffect(() => {
165
- if (appliedGffFilehandle.current !== gffFilehandleKey) {
166
- appliedGffFilehandle.current = gffFilehandleKey;
167
- const location = JSON.parse(gffFilehandleKey);
168
- if (location) {
169
- model.setGFFFilehandle(location);
170
- }
171
- else {
172
- model.setGFF(appliedGff.current);
173
- }
174
- }
175
- }, [model, gffFilehandleKey]);
176
- useEffect(() => {
177
- if (appliedGff.current !== gff) {
178
- appliedGff.current = gff;
179
- model.setGFF(gff);
180
- }
181
- }, [model, gff]);
182
- // keyed by content, since a host computing a layer inline passes a new array
183
- // on every render
184
- const colorSchemeKey = JSON.stringify(colorScheme ?? null);
185
- useEffect(() => {
186
- const scheme = JSON.parse(colorSchemeKey);
187
- if (typeof scheme === 'string') {
188
- model.setColorSchemeName(scheme);
189
- }
190
- else if (scheme) {
191
- model.setCustomColorScheme(scheme.map);
192
- }
193
- }, [model, colorSchemeKey]);
194
- const highlightsKey = JSON.stringify(highlights ?? []);
195
- useEffect(() => {
196
- model.setHighlights(JSON.parse(highlightsKey));
197
- }, [model, highlightsKey]);
198
- const featuresKey = JSON.stringify(features ?? []);
199
- useEffect(() => {
200
- model.setFeatures(JSON.parse(featuresKey));
201
- }, [model, featuresKey]);
202
- const selectionKey = JSON.stringify(selection ?? null);
203
- useEffect(() => {
204
- model.setSelection(JSON.parse(selectionKey) ?? undefined);
205
- }, [model, selectionKey]);
206
- const treeRootKey = JSON.stringify(treeRoot ?? null);
207
- useEffect(() => {
208
- model.setTreeRoot(JSON.parse(treeRootKey) ?? undefined);
209
- }, [model, treeRootKey]);
210
- const cladesKey = JSON.stringify(clades ?? []);
211
- useEffect(() => {
212
- model.setClades(JSON.parse(cladesKey));
213
- }, [model, cladesKey]);
214
- const columnTracksKey = JSON.stringify(columnTracks ?? []);
215
- useEffect(() => {
216
- model.setColumnTracks(JSON.parse(columnTracksKey));
217
- }, [model, columnTracksKey]);
218
- const residueMappingsKey = JSON.stringify(residueMappings ?? []);
219
- useEffect(() => {
220
- model.setResidueMappings(JSON.parse(residueMappingsKey));
221
- }, [model, residueMappingsKey]);
222
- const rowDataKey = JSON.stringify(rowData ?? {});
223
- useEffect(() => {
224
- const table = JSON.parse(rowDataKey);
225
- // an empty table leaves whatever the snapshot or a filehandle loaded
226
- if (Object.keys(table).length) {
227
- model.setRowData(table);
228
- }
229
- }, [model, rowDataKey]);
230
- const encodingsKey = JSON.stringify(encodings ?? []);
231
- useEffect(() => {
232
- model.setEncodings(JSON.parse(encodingsKey));
233
- }, [model, encodingsKey]);
234
- const rowPanelsKey = JSON.stringify(rowPanels ?? []);
235
- useEffect(() => {
236
- model.setRowPanels(JSON.parse(rowPanelsKey));
237
- }, [model, rowPanelsKey]);
238
- const highlightColumnsKey = JSON.stringify(highlightColumns ?? null);
239
- useEffect(() => {
240
- model.setHighlightedColumns(JSON.parse(highlightColumnsKey) ?? undefined);
241
- }, [model, highlightColumnsKey]);
183
+ useSyncedProps(model, props);
242
184
  const regionKey = JSON.stringify(region ?? null);
243
185
  useEffect(() => {
244
186
  const target = JSON.parse(regionKey);
245
187
  return target
246
188
  ? when(() => model.viewInitialized && model.numColumns > 0, () => {
247
- model.zoomToRegion(target);
189
+ model.revealRegion(target);
248
190
  })
249
191
  : undefined;
250
192
  }, [model, regionKey]);
@@ -252,6 +194,7 @@ function Viewer({ msa, tree, gff, msaFilehandle, treeFilehandle, gffFilehandle,
252
194
  useModelReaction(model, 'clickedCell', onCellClick);
253
195
  useModelReaction(model, 'viewport', onViewportChange);
254
196
  useModelReaction(model, 'selection', onSelectionChange);
197
+ useImperativeHandle(modelRef, () => model, [model]);
255
198
  const latestOnModel = useRef(onModel);
256
199
  useEffect(() => {
257
200
  latestOnModel.current = onModel;
@@ -1 +1 @@
1
- {"version":3,"file":"MSAViewer.js","sourceRoot":"","sources":["../../src/components/MSAViewer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MSAViewer.js","sourceRoot":"","sources":["../../src/components/MSAViewer.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,8 @@
1
1
  import React from 'react';
2
+ export declare function isRecord(value: unknown): value is Record<string, unknown>;
2
3
  export declare function isEmpty(value: unknown): boolean;
3
- export default function MetadataTable({ record, }: {
4
+ export default function MetadataTable({ record, labels, monospaceKeys, }: {
4
5
  record: Record<string, unknown>;
6
+ labels?: Record<string, string>;
7
+ monospaceKeys?: Set<string>;
5
8
  }): React.JSX.Element;
@@ -1,29 +1,68 @@
1
1
  import React from 'react';
2
2
  import { makeStyles } from '@jbrowse/core/util/tss-react';
3
- import { Table, TableBody, TableCell, TableRow } from '@mui/material';
4
- const useStyles = makeStyles()({
3
+ const useStyles = makeStyles()(theme => ({
4
+ list: {
5
+ display: 'grid',
6
+ gridTemplateColumns: 'minmax(8em, max-content) minmax(0, 1fr)',
7
+ columnGap: theme.spacing(3),
8
+ margin: 0,
9
+ },
10
+ row: {
11
+ display: 'contents',
12
+ },
5
13
  key: {
6
- fontWeight: 'bold',
7
- verticalAlign: 'top',
14
+ fontWeight: 600,
15
+ padding: theme.spacing(0.75, 0),
16
+ borderTop: `1px solid ${theme.palette.divider}`,
17
+ },
18
+ code: {
19
+ marginLeft: theme.spacing(1),
20
+ fontWeight: 400,
21
+ fontSize: '0.75em',
22
+ fontFamily: 'monospace',
23
+ color: theme.palette.text.secondary,
8
24
  },
9
25
  value: {
26
+ margin: 0,
27
+ padding: theme.spacing(0.75, 0),
28
+ borderTop: `1px solid ${theme.palette.divider}`,
10
29
  whiteSpace: 'pre-wrap',
11
- wordBreak: 'break-word',
30
+ overflowWrap: 'anywhere',
31
+ },
32
+ mono: {
33
+ fontFamily: 'monospace',
34
+ fontSize: '0.85em',
35
+ maxHeight: '8em',
36
+ overflow: 'auto',
37
+ },
38
+ nested: {
39
+ '& > dl': {
40
+ paddingLeft: theme.spacing(2),
41
+ borderLeft: `2px solid ${theme.palette.divider}`,
42
+ },
12
43
  },
13
- });
14
- function isRecord(value) {
15
- return typeof value === 'object' && value !== null && !Array.isArray(value);
44
+ }));
45
+ export function isRecord(value) {
46
+ return (typeof value === 'object' &&
47
+ value !== null &&
48
+ !Array.isArray(value) &&
49
+ !React.isValidElement(value));
16
50
  }
17
51
  export function isEmpty(value) {
18
52
  return isRecord(value) && Object.keys(value).length === 0;
19
53
  }
20
- export default function MetadataTable({ record, }) {
21
- const { classes } = useStyles();
22
- return (React.createElement(Table, { size: "small" },
23
- React.createElement(TableBody, null, Object.entries(record)
24
- .filter(([, value]) => value != null && !isEmpty(value))
25
- .map(([key, value]) => (React.createElement(TableRow, { key: key },
26
- React.createElement(TableCell, { component: "th", className: classes.key }, key),
27
- React.createElement(TableCell, { className: classes.value }, isRecord(value) ? (React.createElement(MetadataTable, { record: value })) : Array.isArray(value) ? (value.join('\n')) : (String(value)))))))));
54
+ export default function MetadataTable({ record, labels = {}, monospaceKeys, }) {
55
+ const { classes, cx } = useStyles();
56
+ return (React.createElement("dl", { className: classes.list }, Object.entries(record)
57
+ .filter(([, value]) => value != null && !isEmpty(value))
58
+ .map(([key, value]) => {
59
+ const label = labels[key];
60
+ const nested = isRecord(value);
61
+ return (React.createElement("div", { key: key, className: classes.row },
62
+ React.createElement("dt", { className: classes.key },
63
+ label ?? key,
64
+ label && label !== key ? (React.createElement("span", { className: classes.code }, key)) : null),
65
+ React.createElement("dd", { className: cx(classes.value, nested && classes.nested, monospaceKeys?.has(key) && classes.mono) }, nested ? (React.createElement(MetadataTable, { record: value, labels: labels, monospaceKeys: monospaceKeys })) : Array.isArray(value) ? (value.join('\n')) : React.isValidElement(value) ? (value) : (String(value)))));
66
+ })));
28
67
  }
29
68
  //# sourceMappingURL=MetadataTable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataTable.js","sourceRoot":"","sources":["../../src/components/MetadataTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AACzD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAErE,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;IAC7B,GAAG,EAAE;QACH,UAAU,EAAE,MAAM;QAClB,aAAa,EAAE,KAAK;KACrB;IACD,KAAK,EAAE;QACL,UAAU,EAAE,UAAU;QACtB,SAAS,EAAE,YAAY;KACxB;CACF,CAAC,CAAA;AAEF,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAc;IACpC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAA;AAC3D,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,MAAM,GAGP;IACC,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,OAAO,CACL,oBAAC,KAAK,IAAC,IAAI,EAAC,OAAO;QACjB,oBAAC,SAAS,QACP,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;aACvD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CACrB,oBAAC,QAAQ,IAAC,GAAG,EAAE,GAAG;YAChB,oBAAC,SAAS,IAAC,SAAS,EAAC,IAAI,EAAC,SAAS,EAAE,OAAO,CAAC,GAAG,IAC7C,GAAG,CACM;YACZ,oBAAC,SAAS,IAAC,SAAS,EAAE,OAAO,CAAC,KAAK,IAChC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACjB,oBAAC,aAAa,IAAC,MAAM,EAAE,KAAK,GAAI,CACjC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACzB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CACjB,CAAC,CAAC,CAAC,CACF,MAAM,CAAC,KAAK,CAAC,CACd,CACS,CACH,CACZ,CAAC,CACM,CACN,CACT,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"MetadataTable.js","sourceRoot":"","sources":["../../src/components/MetadataTable.tsx"],"names":[],"mappings":"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"}
@@ -1,15 +1,16 @@
1
1
  import React, { useCallback } from 'react';
2
2
  import { observer } from 'mobx-react';
3
3
  import DragHandle from './DragHandle.js';
4
+ const minViewHeight = 50;
4
5
  export const VerticalResizeHandle = observer(function ({ model, }) {
5
6
  const onDrag = useCallback((delta, startWidth) => {
6
- model.setTreeAreaWidth(startWidth + delta);
7
+ model.setTreeAreaWidth(Math.min(Math.max(0, startWidth + delta), model.width - model.resizeHandleWidth));
7
8
  }, [model]);
8
9
  return (React.createElement(DragHandle, { axis: "x", variant: "resizer", getStart: () => model.effectiveTreeAreaWidth, onDrag: onDrag, style: { width: model.resizeHandleWidth } }));
9
10
  });
10
11
  export const HorizontalResizeHandle = observer(function ({ model, }) {
11
12
  const onDrag = useCallback((delta, startHeight) => {
12
- model.setHeight(startHeight + delta);
13
+ model.setHeight(Math.max(minViewHeight, startHeight + delta));
13
14
  }, [model]);
14
15
  return (React.createElement(DragHandle, { axis: "y", variant: "resizer", getStart: () => model.height, onDrag: onDrag, style: { width: '100%', height: model.resizeHandleWidth } }));
15
16
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ResizeHandles.js","sourceRoot":"","sources":["../../src/components/ResizeHandles.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ResizeHandles.js","sourceRoot":"","sources":["../../src/components/ResizeHandles.tsx"],"names":[],"mappings":"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"}
@@ -2,10 +2,12 @@ import React, { lazy, useCallback, useRef, useState } from 'react';
2
2
  import BaseTooltip from '@jbrowse/core/ui/BaseTooltip';
3
3
  import { makeStyles } from '@jbrowse/core/util/tss-react';
4
4
  import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';
5
+ import CloseIcon from '@mui/icons-material/Close';
5
6
  import { IconButton, Menu, MenuItem } from '@mui/material';
6
7
  import { observer } from 'mobx-react';
7
8
  import { useWheelScroll } from '../useWheelScroll.js';
8
9
  import { onMsaKey } from './msa/msaKeys.js';
10
+ import TrackBlocks from './tracks/TrackBlocks.js';
9
11
  import TrackTooltipContent from './tracks/TrackTooltipContent.js';
10
12
  import { useTrackHover } from './tracks/useTrackHover.js';
11
13
  const TrackInfoDialog = lazy(() => import('./dialogs/TrackInfoDialog.js'));
@@ -34,6 +36,7 @@ const TrackLabel = observer(function TrackLabel({ model, track, }) {
34
36
  const { model: { name, height }, } = track;
35
37
  const { classes } = useStyles();
36
38
  const trackLabelHeight = Math.min(height, fontSize);
39
+ const closeSize = Math.min(height, Math.max(fontSize, 16));
37
40
  return (React.createElement("div", { style: {
38
41
  width,
39
42
  height,
@@ -49,6 +52,10 @@ const TrackLabel = observer(function TrackLabel({ model, track, }) {
49
52
  textOverflow: 'ellipsis',
50
53
  whiteSpace: 'nowrap',
51
54
  } }, drawLabels ? name : ''),
55
+ React.createElement(IconButton, { className: classes.button, "aria-label": `Hide ${name} track`, title: "Hide track", style: { width: closeSize, height: closeSize, flexShrink: 0 }, onClick: () => {
56
+ model.toggleTrack(track.model.id);
57
+ } },
58
+ React.createElement(CloseIcon, { style: { fontSize: closeSize * 0.8 } })),
52
59
  React.createElement(IconButton, { className: classes.button, "aria-label": `${name} track menu`, style: {
53
60
  width: trackLabelHeight,
54
61
  height: trackLabelHeight,
@@ -103,7 +110,7 @@ const Track = observer(function ({ model, track, }) {
103
110
  }, onMouseLeave: () => {
104
111
  onMouseLeave();
105
112
  } },
106
- React.createElement(track.ReactComponent, { model: model, track: track }),
113
+ React.createElement(TrackBlocks, { model: model, track: track }),
107
114
  anchor ? (React.createElement(BaseTooltip, { clientPoint: anchor.clientPoint },
108
115
  React.createElement(TrackTooltipContent, { model: model, track: track, col: anchor.value }))) : null)));
109
116
  });