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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"darkReader.js","sourceRoot":"","sources":["../src/darkReader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAA;AAE5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAIxC,8EAA8E;AAC9E,2EAA2E;AAC3E,8EAA8E;AAC9E,sCAAsC;AACtC,MAAM,qBAAqB,GAAG,wBAAwB,CAAA;AAEtD,SAAS,gBAAgB;IACvB,OAAO,CACL,OAAO,QAAQ,KAAK,WAAW;QAC/B,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,qBAAqB,CAAC,KAAK,MAAM,CACxE,CAAA;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAoB;IAC9C,IACE,OAAO,gBAAgB,KAAK,UAAU;QACtC,OAAO,QAAQ,KAAK,WAAW,EAC/B,CAAC;QACD,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;IACjB,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IAC/C,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,EAAE;QACzC,UAAU,EAAE,IAAI;QAChB,eAAe,EAAE,CAAC,qBAAqB,CAAC;KACzC,CAAC,CAAA;IACF,OAAO,GAAG,EAAE;QACV,QAAQ,CAAC,UAAU,EAAE,CAAA;IACvB,CAAC,CAAA;AACH,CAAC;AAED,IAAI,SAA4B,CAAA;AAEhC;;;;GAIG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,MAAM,UAAU,GAAG,oBAAoB,CACrC,kBAAkB,EAClB,gBAAgB,EAChB,GAAG,EAAE,CAAC,KAAK,CACZ,CAAA;IACD,IAAI,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAChD,SAAS,KAAK,kBAAkB,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAA;QAC/D,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
package/dist/element.js CHANGED
@@ -1,5 +1,15 @@
1
1
  import { when } from 'mobx';
2
2
  import { mount } from './mount.js';
3
+ const dataProperties = [
4
+ 'msa',
5
+ 'tree',
6
+ 'gff',
7
+ 'features',
8
+ 'colorScheme',
9
+ 'highlights',
10
+ 'columnTracks',
11
+ 'residueMappings',
12
+ ];
3
13
  const ownAttributes = [
4
14
  'msa-url',
5
15
  'tree-url',
@@ -13,9 +23,6 @@ const ownAttributes = [
13
23
  ];
14
24
  // the attributes a <nightingale-manager> writes on the elements it holds
15
25
  const nightingaleAttributes = ['display-start', 'display-end', 'highlight'];
16
- function location(uri) {
17
- return uri ? { uri, locationType: 'UriLocation' } : undefined;
18
- }
19
26
  function numberAttribute(value) {
20
27
  const n = value ? Number(value) : Number.NaN;
21
28
  return Number.isFinite(n) ? n : undefined;
@@ -75,53 +82,18 @@ export function defineMsaElement(tagName = 'jbrowse-msa') {
75
82
  #rangePending = false;
76
83
  #reported;
77
84
  #data = {};
78
- get msa() {
79
- return this.#data.msa;
80
- }
81
- set msa(value) {
82
- this.#setData({ msa: value });
83
- }
84
- get tree() {
85
- return this.#data.tree;
86
- }
87
- set tree(value) {
88
- this.#setData({ tree: value });
89
- }
90
- get gff() {
91
- return this.#data.gff;
92
- }
93
- set gff(value) {
94
- this.#setData({ gff: value });
95
- }
96
- get features() {
97
- return this.#data.features;
98
- }
99
- set features(value) {
100
- this.#setData({ features: value });
101
- }
102
- get colorScheme() {
103
- return this.#data.colorScheme;
104
- }
105
- set colorScheme(value) {
106
- this.#setData({ colorScheme: value });
107
- }
108
- get highlights() {
109
- return this.#data.highlights;
110
- }
111
- set highlights(value) {
112
- this.#setData({ highlights: value });
113
- }
114
- get columnTracks() {
115
- return this.#data.columnTracks;
116
- }
117
- set columnTracks(value) {
118
- this.#setData({ columnTracks: value });
119
- }
120
- get residueMappings() {
121
- return this.#data.residueMappings;
122
- }
123
- set residueMappings(value) {
124
- this.#setData({ residueMappings: value });
85
+ static {
86
+ for (const key of dataProperties) {
87
+ Object.defineProperty(MsaElement.prototype, key, {
88
+ configurable: true,
89
+ get() {
90
+ return this.#data[key];
91
+ },
92
+ set(value) {
93
+ this.#setData({ [key]: value });
94
+ },
95
+ });
96
+ }
125
97
  }
126
98
  // the viewer's selection, which the reader's drags change
127
99
  get selection() {
@@ -141,9 +113,9 @@ export function defineMsaElement(tagName = 'jbrowse-msa') {
141
113
  const theme = this.getAttribute('theme');
142
114
  return {
143
115
  ...this.#data,
144
- msaFilehandle: location(this.getAttribute('msa-url')),
145
- treeFilehandle: location(this.getAttribute('tree-url')),
146
- gffFilehandle: location(this.getAttribute('gff-url')),
116
+ msaUrl: this.getAttribute('msa-url') ?? undefined,
117
+ treeUrl: this.getAttribute('tree-url') ?? undefined,
118
+ gffUrl: this.getAttribute('gff-url') ?? undefined,
147
119
  colorScheme: this.#data.colorScheme ??
148
120
  this.getAttribute('color-scheme') ??
149
121
  undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"element.js","sourceRoot":"","sources":["../src/element.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"element.js","sourceRoot":"","sources":["../src/element.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { LegendRow } from './components/msa/legendRows.ts';
2
+ import type { MsaViewModel } from './model.ts';
3
+ import type { Theme } from '@mui/material';
4
+ export interface ExportSvgOptions {
5
+ theme: Theme;
6
+ includeMinimap?: boolean;
7
+ includeTracks?: boolean;
8
+ exportType: 'entire' | 'viewport';
9
+ }
10
+ export declare const LEGEND_PAD = 8;
11
+ export declare const LEGEND_ROW_H = 16;
12
+ export declare const LEGEND_SWATCH = 12;
13
+ export declare const LEGEND_FONT = 12;
14
+ export declare const LEGEND_CHAR_W = 7;
15
+ export declare const LEGEND_MAX_W = 360;
16
+ export declare const LEGEND_TEXT_X: number;
17
+ export declare function getLegendWidth(rows: LegendRow[]): number;
18
+ export declare function legendHeight(rows: LegendRow[]): number;
19
+ export interface Layout {
20
+ width: number;
21
+ msaAreaWidth: number;
22
+ height: number;
23
+ contentHeight: number;
24
+ trackHeight: number;
25
+ topHeight: number;
26
+ offsetX: number;
27
+ offsetY: number;
28
+ includeMinimap: boolean;
29
+ legendWidth: number;
30
+ }
31
+ export declare function getLayout(model: MsaViewModel, opts: ExportSvgOptions): Layout;
32
+ /**
33
+ * the exported page's size: the layout plus the legend column, and as tall as
34
+ * the legend where the key outgrows a short alignment
35
+ */
36
+ export declare function exportPageSize(model: MsaViewModel, layout: Layout): {
37
+ width: number;
38
+ height: number;
39
+ };
@@ -0,0 +1,78 @@
1
+ import { legendRows } from './components/msa/legendRows.js';
2
+ import { treeScaleBarHeight } from './constants.js';
3
+ // legend geometry, shared by the width calculation and the renderer so the
4
+ // reserved column on the right exactly fits the drawn legends
5
+ export const LEGEND_PAD = 8;
6
+ export const LEGEND_ROW_H = 16;
7
+ export const LEGEND_SWATCH = 12;
8
+ export const LEGEND_FONT = 12;
9
+ export const LEGEND_CHAR_W = 7;
10
+ export const LEGEND_MAX_W = 360;
11
+ export const LEGEND_TEXT_X = LEGEND_PAD + LEGEND_SWATCH + 6;
12
+ export function getLegendWidth(rows) {
13
+ const maxLen = rows.reduce((a, r) => Math.max(a, r.label.length), 0);
14
+ const w = LEGEND_TEXT_X + LEGEND_PAD + maxLen * LEGEND_CHAR_W;
15
+ return Math.min(LEGEND_MAX_W, Math.max(120, w));
16
+ }
17
+ export function legendHeight(rows) {
18
+ return LEGEND_PAD * 2 + rows.length * LEGEND_ROW_H;
19
+ }
20
+ export function getLayout(model, opts) {
21
+ const { scrollX, scrollY, totalWidth, totalHeight, effectiveTreeAreaWidth, rowPanelsWidth, rowPanelsHeaderHeight, totalTrackAreaHeight, minimapHeight, msaAreaHeight, msaCanvasWidth, showHorizontalScrollbar, treeOverviewHeight, treeScaleBar, } = model;
22
+ const trackHeight = opts.includeTracks ? totalTrackAreaHeight : 0;
23
+ // the minimap reflects the live viewport scroll position, so it's only
24
+ // meaningful for a viewport export, never for the entire alignment -- and
25
+ // only when the live view shows one at all, since a minimap over an alignment
26
+ // that already fits marks a viewport wider than the bar
27
+ const includeMinimap = opts.exportType === 'viewport' &&
28
+ !!opts.includeMinimap &&
29
+ showHorizontalScrollbar;
30
+ const rows = legendRows(model.legends);
31
+ const legendWidth = rows.length > 0 ? getLegendWidth(rows) : 0;
32
+ const topHeight = Math.max(includeMinimap ? minimapHeight : 0, rowPanelsHeaderHeight, treeOverviewHeight + (treeScaleBar ? treeScaleBarHeight : 0));
33
+ const gutterWidth = effectiveTreeAreaWidth + rowPanelsWidth;
34
+ // width stays content-only; the legend occupies an extra column added at the
35
+ // svg root in MsaSvg. The viewport export takes the alignment canvas's own
36
+ // size rather than the widget's -- the widget box also covers the header, the
37
+ // resize handle and the scrollbars, and rendering that box exports rows and
38
+ // columns the scrollbars hide on screen
39
+ return opts.exportType === 'entire'
40
+ ? {
41
+ width: totalWidth + gutterWidth,
42
+ msaAreaWidth: totalWidth,
43
+ height: totalHeight + trackHeight + topHeight,
44
+ contentHeight: totalHeight,
45
+ trackHeight,
46
+ topHeight,
47
+ offsetX: 0,
48
+ offsetY: 0,
49
+ includeMinimap,
50
+ legendWidth,
51
+ }
52
+ : {
53
+ width: msaCanvasWidth + gutterWidth,
54
+ msaAreaWidth: msaCanvasWidth,
55
+ height: msaAreaHeight + topHeight + trackHeight,
56
+ contentHeight: msaAreaHeight,
57
+ trackHeight,
58
+ topHeight,
59
+ offsetX: -scrollX,
60
+ offsetY: -scrollY,
61
+ includeMinimap,
62
+ legendWidth,
63
+ };
64
+ }
65
+ /**
66
+ * the exported page's size: the layout plus the legend column, and as tall as
67
+ * the legend where the key outgrows a short alignment
68
+ */
69
+ export function exportPageSize(model, layout) {
70
+ const { width, height, legendWidth, topHeight } = layout;
71
+ return {
72
+ width: width + legendWidth,
73
+ height: legendWidth > 0
74
+ ? Math.max(height, topHeight + legendHeight(legendRows(model.legends)))
75
+ : height,
76
+ };
77
+ }
78
+ //# sourceMappingURL=exportLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exportLayout.js","sourceRoot":"","sources":["../src/exportLayout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { ScaleSpec } from './scales.ts';
2
+ import type { Annotation, DomainBand, RowFeaturesSpec, RowPanelSpan, RowPanelSpec } from './types.ts';
3
+ export declare function rowPanelWidth(panel: RowPanelSpec, view: {
4
+ rowHeight: number;
5
+ }): number;
6
+ export declare function stringFields(row: unknown): Record<string, string> | undefined;
7
+ export declare function colorByRow(rowData: Record<string, Record<string, string> | undefined>, field: string, colorOf: (value: string) => string | undefined): Map<string, string>;
8
+ export declare function featureColorMap(annotations: Annotation[], encoding: {
9
+ field: string;
10
+ colorOf: (value: string) => string | undefined;
11
+ } | undefined, fillPalette: Record<string, string>): Map<Annotation, {
12
+ fill: string;
13
+ stroke: string;
14
+ }>;
15
+ export declare function featureLabelMap(annotations: Annotation[], field: string): Map<Annotation, string>;
16
+ /**
17
+ * The spans a `features` panel draws, keyed by row name and measured in the
18
+ * panel's own pixels. `column` takes the bands the overlay draws, at the
19
+ * alignment's column width. `position` packs each row's features in its own
20
+ * residue positions, shifted by an `align` transform, and maps the extent they
21
+ * cover across every row onto the panel width, so a row with no alignment
22
+ * still has an x.
23
+ */
24
+ export declare function featurePanelSpans({ panel, width, colWidth, domainBands, annotationsByRow, shifts, }: {
25
+ panel: RowFeaturesSpec;
26
+ width: number;
27
+ colWidth: number;
28
+ domainBands: Map<string, DomainBand[]>;
29
+ annotationsByRow: Record<string, Annotation[]>;
30
+ shifts: Map<string, number> | undefined;
31
+ }): Map<string, RowPanelSpan[]>;
32
+ export declare function resolveFeatureScale(field: string, scale: ScaleSpec | undefined, annotations: Annotation[], drawn: Annotation[]): {
33
+ kind: 'categorical';
34
+ colorOf: (value: string) => string | undefined;
35
+ field: string;
36
+ legend: import("./types.ts").LegendEntry[];
37
+ };
@@ -0,0 +1,187 @@
1
+ import { notEmpty } from '@jbrowse/core/util';
2
+ import { packDomainLanes } from './components/msa/packDomainLanes.js';
3
+ import { defaultFeaturePanelWidth } from './constants.js';
4
+ import { featureField } from './featureFields.js';
5
+ import { resolveScale } from './scales.js';
6
+ import { outlineColor } from './util.js';
7
+ // the fill of a span under a scale that gives its value no color, such as a
8
+ // gene a `map` over gene names leaves out
9
+ const UNSCALED_FEATURE = '#d9d9d9';
10
+ // the fraction of a span a following one may cover before it takes a lane of
11
+ // its own in a `features` panel
12
+ const laneOverlap = 0.1;
13
+ // a row panel's own width, or a default: the row height, which makes a strip
14
+ // cell square, and a gene neighborhood's width for a features panel. The row
15
+ // height is read only when used, so a panel with a width of its own does not
16
+ // recompute on a vertical zoom
17
+ export function rowPanelWidth(panel, view) {
18
+ return (panel.width ??
19
+ (panel.kind === 'features' ? defaultFeaturePanelWidth : view.rowHeight));
20
+ }
21
+ // one row of the row table as the channels read it. A number or a boolean
22
+ // reads as its string, the way a GFF value does, and null or an object drops
23
+ export function stringFields(row) {
24
+ if (typeof row !== 'object' || row === null) {
25
+ return undefined;
26
+ }
27
+ const fields = {};
28
+ for (const [field, value] of Object.entries(row)) {
29
+ if (typeof value === 'string') {
30
+ fields[field] = value;
31
+ }
32
+ else if (typeof value === 'number' || typeof value === 'boolean') {
33
+ fields[field] = String(value);
34
+ }
35
+ }
36
+ return fields;
37
+ }
38
+ // the color each row takes from a field of the row table under a scale
39
+ export function colorByRow(rowData, field, colorOf) {
40
+ const colors = new Map();
41
+ for (const [name, row] of Object.entries(rowData)) {
42
+ const value = row?.[field];
43
+ const color = value === undefined ? undefined : colorOf(value);
44
+ if (color) {
45
+ colors.set(name, color);
46
+ }
47
+ }
48
+ return colors;
49
+ }
50
+ // the fill and outline of every feature in a list: its own GFF `color=` first,
51
+ // then the scale an encoding resolves over one of its fields, then the
52
+ // accession palette
53
+ export function featureColorMap(annotations, encoding, fillPalette) {
54
+ const strokes = new Map();
55
+ const strokeOf = (fill) => {
56
+ const hit = strokes.get(fill);
57
+ if (hit !== undefined) {
58
+ return hit;
59
+ }
60
+ const stroke = outlineColor(fill);
61
+ strokes.set(fill, stroke);
62
+ return stroke;
63
+ };
64
+ return new Map(annotations.map(annotation => {
65
+ const value = encoding
66
+ ? featureField(annotation, encoding.field)
67
+ : undefined;
68
+ const fill = annotation.color ??
69
+ (value === undefined ? undefined : encoding.colorOf(value)) ??
70
+ (encoding ? UNSCALED_FEATURE : fillPalette[annotation.accession]);
71
+ return [annotation, { fill, stroke: strokeOf(fill) }];
72
+ }));
73
+ }
74
+ // the text a label channel draws inside each span, for the features carrying
75
+ // the field it names
76
+ export function featureLabelMap(annotations, field) {
77
+ const labels = new Map();
78
+ for (const annotation of annotations) {
79
+ const value = featureField(annotation, field);
80
+ if (value !== undefined) {
81
+ labels.set(annotation, value);
82
+ }
83
+ }
84
+ return labels;
85
+ }
86
+ /**
87
+ * Lanes for `position: "strandpile"`, gggenomes' `position_strandpile`: the
88
+ * forward features stack above the line and the reverse below it, each strand
89
+ * packing on its own. The deepest row on each side sets the grid every row lays
90
+ * out on, so the line between the strands sits at one height down the panel and
91
+ * a reader can scan it. A feature with no strand piles with the forward ones.
92
+ */
93
+ function strandpileLanes(rows) {
94
+ const piled = rows.map(([name, bands]) => {
95
+ const reverse = packDomainLanes(bands.filter(b => b.annotation.strand === -1));
96
+ const forward = packDomainLanes(bands.filter(b => b.annotation.strand !== -1));
97
+ return { name, forward, reverse };
98
+ });
99
+ const up = Math.max(0, ...piled.map(p => p.forward[0]?.laneCount ?? 0));
100
+ const down = Math.max(0, ...piled.map(p => p.reverse[0]?.laneCount ?? 0));
101
+ const laneCount = up + down;
102
+ return new Map(piled.map(({ name, forward, reverse }) => [
103
+ name,
104
+ [
105
+ // forward level 0 is the lane just above the line, stacking upward
106
+ ...forward.map(b => ({ ...b, lane: up - 1 - b.lane, laneCount })),
107
+ ...reverse.map(b => ({ ...b, lane: up + b.lane, laneCount })),
108
+ ],
109
+ ]));
110
+ }
111
+ /** one row's spans laid out by the panel's `position` */
112
+ function panelLanes(panel, rows) {
113
+ return panel.position === 'strandpile'
114
+ ? strandpileLanes(rows)
115
+ : new Map(rows.map(([name, bands]) => [name, packDomainLanes(bands)]));
116
+ }
117
+ /**
118
+ * The spans a `features` panel draws, keyed by row name and measured in the
119
+ * panel's own pixels. `column` takes the bands the overlay draws, at the
120
+ * alignment's column width. `position` packs each row's features in its own
121
+ * residue positions, shifted by an `align` transform, and maps the extent they
122
+ * cover across every row onto the panel width, so a row with no alignment
123
+ * still has an x.
124
+ */
125
+ export function featurePanelSpans({ panel, width, colWidth, domainBands, annotationsByRow, shifts, }) {
126
+ if (panel.x === 'column') {
127
+ return panelLanes(panel, [...domainBands].map(([name, bands]) => [
128
+ name,
129
+ bands.map(band => ({
130
+ ...band,
131
+ xStart: band.startCol * colWidth,
132
+ xEnd: band.endCol * colWidth,
133
+ })),
134
+ ]));
135
+ }
136
+ const shifted = Object.entries(annotationsByRow).map(([name, annotations]) => {
137
+ const shift = shifts?.get(name) ?? 0;
138
+ return [
139
+ name,
140
+ annotations.map(annotation => ({
141
+ annotation,
142
+ start: annotation.start - 1 + shift,
143
+ end: annotation.end + shift,
144
+ })),
145
+ ];
146
+ });
147
+ let min = Infinity;
148
+ let max = -Infinity;
149
+ for (const [, features] of shifted) {
150
+ for (const { start, end } of features) {
151
+ min = Math.min(min, start);
152
+ max = Math.max(max, end);
153
+ }
154
+ }
155
+ // a gene arrow ends where its feature does, so the extent maps onto the whole
156
+ // panel less the pixel the rightmost stroke needs
157
+ const drawable = Math.max(1, width - 1);
158
+ const scale = max > min ? drawable / (max - min) : 0;
159
+ // a lane opens where a span covers more than a tenth of the one before it,
160
+ // which keeps the genes of an operon on one lane: adjacent genes commonly
161
+ // share a few bases, and a stop codon overlapping the next start reads as a
162
+ // second lane over the whole row
163
+ return panelLanes(panel, shifted.map(([name, features]) => [
164
+ name,
165
+ features.map(({ annotation, start, end }) => ({
166
+ annotation,
167
+ xStart: (start - min) * scale,
168
+ xEnd: (end - min) * scale,
169
+ startCol: start,
170
+ endCol: end - (end - start) * laneOverlap,
171
+ })),
172
+ ]));
173
+ }
174
+ // a scale over the values a field takes across every feature loaded, so hiding
175
+ // a type in the filter dialog leaves the rest in their colors, and a legend of
176
+ // the values the features drawn carry
177
+ export function resolveFeatureScale(field, scale, annotations, drawn) {
178
+ const valuesOf = (list) => list.map(a => featureField(a, field)).filter(notEmpty);
179
+ const resolved = resolveScale(scale, valuesOf(annotations));
180
+ const shown = new Set(valuesOf(drawn));
181
+ return {
182
+ field,
183
+ ...resolved,
184
+ legend: resolved.legend.filter(entry => shown.has(entry.id)),
185
+ };
186
+ }
187
+ //# sourceMappingURL=featurePanels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"featurePanels.js","sourceRoot":"","sources":["../src/featurePanels.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { FetchStatus } from './fetchUtils.ts';
2
+ import type { FileLocation } from '@jbrowse/core/util/types';
3
+ import type { IStateTreeNode } from '@jbrowse/mobx-state-tree';
4
+ interface LoaderHost extends IStateTreeNode {
5
+ setStatus: (status?: FetchStatus) => void;
6
+ setError: (error?: unknown) => void;
7
+ addWarning: (warning: string) => void;
8
+ }
9
+ interface FilehandleLoader {
10
+ /** the layer's name in a failure message */
11
+ what: string;
12
+ getFilehandle: () => FileLocation | undefined;
13
+ onLoad: (text: string) => void;
14
+ setLoading?: (loading: boolean) => void;
15
+ /** runs after a local file loads, since a blob has no URL to refetch, and on cancel */
16
+ clearFilehandle?: () => void;
17
+ /** a failure adds a warning instead of an error */
18
+ optional?: boolean;
19
+ }
20
+ /**
21
+ * Latest-wins abort rotation, after `createAbortRotation` in
22
+ * jbrowse-components. Each `begin()` aborts the previous fetch and returns a
23
+ * signal with an `isCurrent()` guard; gate every write after an await on it so a
24
+ * superseded or torn-down fetch cannot overwrite fresher data. `end()` in the
25
+ * `finally` closes the guard of a fetch that completed.
26
+ */
27
+ export declare function createAbortRotation(self: IStateTreeNode): {
28
+ /** aborts the running fetch, and returns whether one was running */
29
+ cancel(): boolean;
30
+ begin(): {
31
+ controller: AbortController;
32
+ isCurrent: () => boolean;
33
+ end(): void;
34
+ };
35
+ };
36
+ /**
37
+ * Fetches the filehandle whenever it changes and hands the text to `onLoad`. A
38
+ * superseded or cleared request is aborted and clears its status line.
39
+ */
40
+ export declare function installFilehandleLoader(self: LoaderHost, { what, getFilehandle, onLoad, setLoading, clearFilehandle, optional, }: FilehandleLoader): void;
41
+ export {};
@@ -0,0 +1,99 @@
1
+ import { openLocation } from '@jbrowse/core/util/io';
2
+ import { addDisposer, isAlive } from '@jbrowse/mobx-state-tree';
3
+ import { autorun, transaction } from 'mobx';
4
+ import { fetchTextWithProgress, isAbortError } from './fetchUtils.js';
5
+ /**
6
+ * Latest-wins abort rotation, after `createAbortRotation` in
7
+ * jbrowse-components. Each `begin()` aborts the previous fetch and returns a
8
+ * signal with an `isCurrent()` guard; gate every write after an await on it so a
9
+ * superseded or torn-down fetch cannot overwrite fresher data. `end()` in the
10
+ * `finally` closes the guard of a fetch that completed.
11
+ */
12
+ export function createAbortRotation(self) {
13
+ let current;
14
+ return {
15
+ /** aborts the running fetch, and returns whether one was running */
16
+ cancel() {
17
+ const running = current !== undefined && !current.ended;
18
+ current?.controller.abort();
19
+ current = undefined;
20
+ return running;
21
+ },
22
+ begin() {
23
+ current?.controller.abort();
24
+ const mine = { controller: new AbortController(), ended: false };
25
+ current = mine;
26
+ return {
27
+ controller: mine.controller,
28
+ isCurrent: () => !mine.ended && mine === current && isAlive(self),
29
+ end() {
30
+ mine.ended = true;
31
+ },
32
+ };
33
+ },
34
+ };
35
+ }
36
+ /**
37
+ * Fetches the filehandle whenever it changes and hands the text to `onLoad`. A
38
+ * superseded or cleared request is aborted and clears its status line.
39
+ */
40
+ export function installFilehandleLoader(self, { what, getFilehandle, onLoad, setLoading, clearFilehandle, optional = false, }) {
41
+ const rotation = createAbortRotation(self);
42
+ const cancel = () => {
43
+ if (rotation.cancel() && isAlive(self)) {
44
+ self.setStatus(undefined);
45
+ }
46
+ };
47
+ addDisposer(self, cancel);
48
+ addDisposer(self, autorun(async () => {
49
+ const filehandle = getFilehandle();
50
+ cancel();
51
+ if (!filehandle) {
52
+ setLoading?.(false);
53
+ return;
54
+ }
55
+ const { controller, isCurrent, end } = rotation.begin();
56
+ try {
57
+ setLoading?.(true);
58
+ if (!optional) {
59
+ self.setError(undefined);
60
+ }
61
+ const text = await fetchTextWithProgress(openLocation(filehandle), status => {
62
+ if (isCurrent()) {
63
+ self.setStatus(status);
64
+ }
65
+ }, { controller });
66
+ if (isCurrent()) {
67
+ transaction(() => {
68
+ onLoad(text);
69
+ if (filehandle.locationType === 'BlobLocation') {
70
+ clearFilehandle?.();
71
+ }
72
+ });
73
+ }
74
+ }
75
+ catch (e) {
76
+ if (isCurrent()) {
77
+ if (isAbortError(e)) {
78
+ clearFilehandle?.();
79
+ }
80
+ else {
81
+ console.error(e);
82
+ if (optional) {
83
+ self.addWarning(`The ${what} did not load: ${e}`);
84
+ }
85
+ else {
86
+ self.setError(e);
87
+ }
88
+ }
89
+ }
90
+ }
91
+ finally {
92
+ if (isCurrent()) {
93
+ setLoading?.(false);
94
+ }
95
+ end();
96
+ }
97
+ }));
98
+ }
99
+ //# sourceMappingURL=filehandleLoader.js.map