@jbrowse/core 5.0.0-beta.13 → 5.0.0-beta.14

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 (391) hide show
  1. package/README.md +365 -69
  2. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +3 -2
  3. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +4 -2
  4. package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +3 -2
  5. package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +4 -2
  6. package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseAttributes.d.ts +2 -1
  7. package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseAttributes.js +4 -2
  8. package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCard.d.ts +2 -1
  9. package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCard.js +4 -2
  10. package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCoreDetails.d.ts +2 -1
  11. package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCoreDetails.js +4 -2
  12. package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.d.ts +5 -4
  13. package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.js +6 -4
  14. package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.d.ts +2 -1
  15. package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.js +4 -2
  16. package/esm/BaseFeatureWidget/BaseFeatureDetail/DataGridDetails.d.ts +3 -2
  17. package/esm/BaseFeatureWidget/BaseFeatureDetail/DataGridDetails.js +4 -2
  18. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.js +2 -2
  19. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureWash.d.ts +3 -2
  20. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureWash.js +4 -2
  21. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.d.ts +3 -2
  22. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.js +4 -2
  23. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldName.d.ts +3 -2
  24. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldName.js +4 -2
  25. package/esm/BaseFeatureWidget/BaseFeatureDetail/Formatter.d.ts +3 -2
  26. package/esm/BaseFeatureWidget/BaseFeatureDetail/Formatter.js +4 -2
  27. package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.d.ts +3 -2
  28. package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.js +4 -2
  29. package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.d.ts +3 -2
  30. package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +4 -2
  31. package/esm/BaseFeatureWidget/BaseFeatureDetail/UriField.d.ts +3 -2
  32. package/esm/BaseFeatureWidget/BaseFeatureDetail/UriField.js +4 -2
  33. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceBody.d.ts +3 -2
  34. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceBody.js +4 -2
  35. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.d.ts +1 -1
  36. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.js +10 -19
  37. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceLegend.d.ts +3 -2
  38. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceLegend.js +4 -2
  39. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequencePanel.js +4 -4
  40. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/HelpDialog.d.ts +3 -2
  41. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/HelpDialog.js +4 -2
  42. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceDialog.d.ts +1 -2
  43. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceDialog.js +2 -2
  44. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceTypeSelector.d.ts +1 -2
  45. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceTypeSelector.js +15 -36
  46. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.d.ts +3 -2
  47. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.js +4 -2
  48. package/esm/BaseFeatureWidget/SequenceFeatureDetails/featureTypeUtil.d.ts +2 -1
  49. package/esm/BaseFeatureWidget/SequenceFeatureDetails/featureTypeUtil.js +22 -6
  50. package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.d.ts +13 -1
  51. package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.js +28 -1
  52. package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/SequenceDisplay.js +2 -2
  53. package/esm/BaseFeatureWidget/stateModelFactory.d.ts +2 -0
  54. package/esm/PluginManager.d.ts +1 -0
  55. package/esm/PluginManager.js +6 -0
  56. package/esm/ReExports/coreModules.generated.js +538 -524
  57. package/esm/ReExports/coreWorkerModules.generated.js +454 -441
  58. package/esm/ReExports/lazify.js +3 -2
  59. package/esm/ReExports/list.js +15 -6
  60. package/esm/ReExports/names.d.ts +1 -0
  61. package/esm/ReExports/names.generated.d.ts +2 -0
  62. package/esm/ReExports/names.generated.js +566 -0
  63. package/esm/ReExports/names.js +3 -0
  64. package/esm/assemblyManager/assembly.d.ts +9 -0
  65. package/esm/assemblyManager/assembly.js +13 -0
  66. package/esm/assemblyManager/assemblyConfigSchema.d.ts +6 -1
  67. package/esm/assemblyManager/assemblyConfigSchema.js +23 -22
  68. package/esm/assemblyManager/assemblyManager.d.ts +11 -0
  69. package/esm/assemblyManager/assemblyManager.js +2 -0
  70. package/esm/assemblyManager/expandAssemblyConfigShorthand.d.ts +9 -0
  71. package/esm/assemblyManager/expandAssemblyConfigShorthand.js +23 -0
  72. package/esm/checkPlugins.js +10 -4
  73. package/esm/configuration/configurationSchema.d.ts +18 -5
  74. package/esm/configuration/configurationSchema.js +9 -7
  75. package/esm/configuration/configurationSchemaUnion.d.ts +2 -1
  76. package/esm/configuration/configurationSchemaUnion.js +2 -1
  77. package/esm/configuration/configurationSlot.js +4 -4
  78. package/esm/configuration/fillLocations.d.ts +4 -2
  79. package/esm/configuration/fillLocations.js +9 -3
  80. package/esm/configuration/formatAboutConfigSchema.d.ts +2 -2
  81. package/esm/configuration/formatAboutConfigSchema.js +2 -2
  82. package/esm/configuration/formatDetailsConfigSchema.d.ts +2 -2
  83. package/esm/configuration/formatDetailsConfigSchema.js +5 -5
  84. package/esm/configuration/getConf.js +13 -4
  85. package/esm/configuration/index.d.ts +1 -1
  86. package/esm/configuration/index.js +1 -1
  87. package/esm/configuration/plot.d.ts +2 -2
  88. package/esm/configuration/plot.js +32 -18
  89. package/esm/configuration/schemaRegistry.d.ts +0 -2
  90. package/esm/configuration/slotFacade.js +2 -2
  91. package/esm/configuration/snapshotPreprocess.d.ts +42 -18
  92. package/esm/configuration/snapshotPreprocess.js +94 -34
  93. package/esm/configuration/tabixShorthand.js +1 -3
  94. package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +7 -0
  95. package/esm/data_adapters/BaseAdapter/BaseAdapter.js +7 -0
  96. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +0 -22
  97. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +0 -55
  98. package/esm/data_adapters/BaseAdapter/index.d.ts +0 -1
  99. package/esm/data_adapters/BaseAdapter/index.js +0 -1
  100. package/esm/data_adapters/BaseAdapter/rowSources.d.ts +2 -2
  101. package/esm/data_adapters/BaseAdapter/types.d.ts +1 -0
  102. package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +2 -0
  103. package/esm/data_adapters/CytobandAdapter/configSchema.js +5 -0
  104. package/esm/data_adapters/dataAdapterCache.d.ts +25 -13
  105. package/esm/data_adapters/dataAdapterCache.js +68 -24
  106. package/esm/data_adapters/getFeatureAdapter.d.ts +9 -0
  107. package/esm/data_adapters/getFeatureAdapter.js +17 -0
  108. package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +2 -0
  109. package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.js +2 -0
  110. package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +40 -6
  111. package/esm/pluggableElementTypes/models/BaseDisplayModel.js +56 -8
  112. package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +3 -3
  113. package/esm/pluggableElementTypes/models/BaseTrackModel.js +7 -6
  114. package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +2 -0
  115. package/esm/pluggableElementTypes/models/BaseViewModel.js +2 -0
  116. package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +3 -0
  117. package/esm/pluggableElementTypes/models/InternetAccountModel.js +3 -0
  118. package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +3 -0
  119. package/esm/pluggableElementTypes/models/baseConnectionConfig.js +3 -0
  120. package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +3 -1
  121. package/esm/pluggableElementTypes/models/baseInternetAccountConfig.js +3 -1
  122. package/esm/pluggableElementTypes/models/baseTrackConfig.js +9 -1
  123. package/esm/pluggableElementTypes/models/components/SaveTrackData.js +2 -2
  124. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +1 -1
  125. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +1 -1
  126. package/esm/pluginDefinitions.d.ts +7 -0
  127. package/esm/pluginDefinitions.js +20 -0
  128. package/esm/rpc/RpcRegistry.d.ts +0 -10
  129. package/esm/rpc/byteBudget.d.ts +8 -0
  130. package/esm/rpc/byteBudget.js +13 -0
  131. package/esm/rpc/configSchema.d.ts +2 -0
  132. package/esm/rpc/configSchema.js +3 -1
  133. package/esm/rpc/coreRpcMethods.d.ts +0 -1
  134. package/esm/rpc/coreRpcMethods.js +0 -1
  135. package/esm/rpc/methods/CoreGetEncodedLayers.d.ts +2 -2
  136. package/esm/rpc/methods/CoreGetEncodedLayers.js +7 -5
  137. package/esm/rpc/methods/layerFeatures.d.ts +9 -6
  138. package/esm/rpc/methods/layerFeatures.js +21 -5
  139. package/esm/ui/ActionLink.d.ts +3 -2
  140. package/esm/ui/ActionLink.js +4 -2
  141. package/esm/ui/AddCustomPluginDialog.d.ts +3 -2
  142. package/esm/ui/AddCustomPluginDialog.js +6 -4
  143. package/esm/ui/BaseTooltip.d.ts +3 -2
  144. package/esm/ui/BaseTooltip.js +4 -2
  145. package/esm/ui/CascadingMenu.js +14 -12
  146. package/esm/ui/CascadingMenuButton.d.ts +2 -2
  147. package/esm/ui/CascadingMenuButton.js +5 -4
  148. package/esm/ui/CascadingMenuHelpDialog.d.ts +3 -2
  149. package/esm/ui/CascadingMenuHelpDialog.js +4 -2
  150. package/esm/ui/CascadingMenuHelpIconButton.d.ts +4 -3
  151. package/esm/ui/CascadingMenuHelpIconButton.js +9 -5
  152. package/esm/ui/ColorPicker.d.ts +5 -4
  153. package/esm/ui/ColorPicker.js +6 -4
  154. package/esm/ui/ContextMenu.d.ts +1 -1
  155. package/esm/ui/ContextMenu.js +1 -1
  156. package/esm/ui/CopyToClipboardButton.d.ts +3 -2
  157. package/esm/ui/CopyToClipboardButton.js +4 -2
  158. package/esm/ui/Crosshairs.js +13 -10
  159. package/esm/ui/DOMPurifySanitizedHTML.d.ts +3 -2
  160. package/esm/ui/DOMPurifySanitizedHTML.js +4 -2
  161. package/esm/ui/DataGridFlexContainer.d.ts +3 -2
  162. package/esm/ui/DataGridFlexContainer.js +4 -2
  163. package/esm/ui/Dialog.d.ts +1 -1
  164. package/esm/ui/Dialog.js +5 -4
  165. package/esm/ui/DropDownMenu.js +2 -2
  166. package/esm/ui/EditableTypography.d.ts +1 -1
  167. package/esm/ui/EditableTypography.js +3 -2
  168. package/esm/ui/ErrorActions.d.ts +3 -2
  169. package/esm/ui/ErrorActions.js +4 -2
  170. package/esm/ui/ErrorBanner.d.ts +2 -2
  171. package/esm/ui/ErrorBanner.js +3 -2
  172. package/esm/ui/ErrorBar.d.ts +3 -2
  173. package/esm/ui/ErrorBar.js +4 -2
  174. package/esm/ui/ErrorMessage.d.ts +3 -2
  175. package/esm/ui/ErrorMessage.js +4 -2
  176. package/esm/ui/ErrorMessageStackTraceContents.d.ts +3 -2
  177. package/esm/ui/ErrorMessageStackTraceContents.js +4 -2
  178. package/esm/ui/ErrorMessageStackTraceDialog.d.ts +3 -2
  179. package/esm/ui/ErrorMessageStackTraceDialog.js +4 -2
  180. package/esm/ui/ErrorOverlay.d.ts +3 -2
  181. package/esm/ui/ErrorOverlay.js +4 -2
  182. package/esm/ui/ExportSvgDialog.d.ts +3 -2
  183. package/esm/ui/ExportSvgDialog.js +4 -2
  184. package/esm/ui/ExternalLink.d.ts +2 -1
  185. package/esm/ui/ExternalLink.js +4 -2
  186. package/esm/ui/FactoryResetDialog.d.ts +3 -2
  187. package/esm/ui/FactoryResetDialog.js +4 -2
  188. package/esm/ui/FatalErrorDialog.d.ts +3 -2
  189. package/esm/ui/FatalErrorDialog.js +6 -4
  190. package/esm/ui/FileDropZone.d.ts +3 -2
  191. package/esm/ui/FileDropZone.js +4 -2
  192. package/esm/ui/FileSelector/LocalFileChooser.js +4 -4
  193. package/esm/ui/FileSelector/LocationInput.d.ts +3 -2
  194. package/esm/ui/FileSelector/LocationInput.js +4 -2
  195. package/esm/ui/FileSelector/SourceTypeSelector.d.ts +3 -2
  196. package/esm/ui/FileSelector/SourceTypeSelector.js +8 -6
  197. package/esm/ui/GpuFallbackButton.d.ts +3 -2
  198. package/esm/ui/GpuFallbackButton.js +4 -2
  199. package/esm/ui/HoverMenu.d.ts +2 -2
  200. package/esm/ui/HoverMenu.js +7 -3
  201. package/esm/ui/HoverTooltip.d.ts +3 -2
  202. package/esm/ui/HoverTooltip.js +4 -2
  203. package/esm/ui/Icons.d.ts +5 -5
  204. package/esm/ui/Icons.js +11 -10
  205. package/esm/ui/InlineMenuControls.d.ts +2 -2
  206. package/esm/ui/InlineMenuControls.js +4 -3
  207. package/esm/ui/JexlFilterRowEditors.d.ts +4 -4
  208. package/esm/ui/JexlFilterRowEditors.js +9 -8
  209. package/esm/ui/LabeledCheckbox.d.ts +3 -2
  210. package/esm/ui/LabeledCheckbox.js +4 -2
  211. package/esm/ui/LazyBaseTooltip.d.ts +12 -3
  212. package/esm/ui/LazyBaseTooltip.js +4 -2
  213. package/esm/ui/LegendSwatchGlyph.js +1 -0
  214. package/esm/ui/LoadingDots.d.ts +2 -1
  215. package/esm/ui/LoadingDots.js +4 -2
  216. package/esm/ui/LoadingEllipses.d.ts +5 -2
  217. package/esm/ui/LoadingEllipses.js +5 -3
  218. package/esm/ui/LoadingOverlay.d.ts +3 -2
  219. package/esm/ui/LoadingOverlay.js +4 -2
  220. package/esm/ui/LoadingProgress.d.ts +3 -2
  221. package/esm/ui/LoadingProgress.js +4 -2
  222. package/esm/ui/Logo.d.ts +2 -2
  223. package/esm/ui/Logo.js +9 -8
  224. package/esm/ui/MenuItemChevron.d.ts +2 -2
  225. package/esm/ui/MenuItemChevron.js +3 -2
  226. package/esm/ui/MenuItemEndDecoration.d.ts +2 -2
  227. package/esm/ui/MenuItemEndDecoration.js +3 -2
  228. package/esm/ui/MenuItemTrailing.d.ts +2 -2
  229. package/esm/ui/MenuItemTrailing.js +7 -6
  230. package/esm/ui/MenuTypes.d.ts +21 -1
  231. package/esm/ui/MenuTypes.js +20 -0
  232. package/esm/ui/MonospaceTextField.d.ts +3 -2
  233. package/esm/ui/MonospaceTextField.js +4 -2
  234. package/esm/ui/NumberTextField.d.ts +2 -2
  235. package/esm/ui/NumberTextField.js +4 -2
  236. package/esm/ui/PaletteContext.d.ts +11 -9
  237. package/esm/ui/PaletteContext.js +33 -18
  238. package/esm/ui/PluginStoreCard.d.ts +3 -2
  239. package/esm/ui/PluginStoreCard.js +4 -2
  240. package/esm/ui/PopoverPicker.d.ts +3 -2
  241. package/esm/ui/PopoverPicker.js +4 -2
  242. package/esm/ui/PrerenderedCanvas.d.ts +2 -2
  243. package/esm/ui/PrerenderedCanvas.js +3 -2
  244. package/esm/ui/RedErrorMessageBox.d.ts +3 -2
  245. package/esm/ui/RedErrorMessageBox.js +4 -2
  246. package/esm/ui/RefNameAutocomplete/EndAdornment.d.ts +3 -2
  247. package/esm/ui/RefNameAutocomplete/EndAdornment.js +4 -2
  248. package/esm/ui/RefNameAutocomplete/HelpDialog.d.ts +3 -2
  249. package/esm/ui/RefNameAutocomplete/HelpDialog.js +4 -2
  250. package/esm/ui/ReplaceCurrentViewButton.d.ts +3 -2
  251. package/esm/ui/ReplaceCurrentViewButton.js +4 -2
  252. package/esm/ui/ResizeHandle.d.ts +2 -2
  253. package/esm/ui/ResizeHandle.js +3 -2
  254. package/esm/ui/SanitizedHTML.d.ts +3 -2
  255. package/esm/ui/SanitizedHTML.js +6 -4
  256. package/esm/ui/ScrollChrome.d.ts +3 -2
  257. package/esm/ui/ScrollChrome.js +4 -2
  258. package/esm/ui/ScrollEdgeShadow.d.ts +2 -2
  259. package/esm/ui/ScrollEdgeShadow.js +2 -2
  260. package/esm/ui/SessionJsonPanel.d.ts +3 -2
  261. package/esm/ui/SessionJsonPanel.js +4 -2
  262. package/esm/ui/ShareLinkField.d.ts +3 -2
  263. package/esm/ui/ShareLinkField.js +4 -2
  264. package/esm/ui/SingleSlider.d.ts +2 -2
  265. package/esm/ui/SingleSlider.js +4 -2
  266. package/esm/ui/SliderTooltip.d.ts +2 -1
  267. package/esm/ui/SliderTooltip.js +4 -2
  268. package/esm/ui/SnackbarContents.d.ts +3 -2
  269. package/esm/ui/SnackbarContents.js +4 -2
  270. package/esm/ui/SnackbarModel.d.ts +2 -0
  271. package/esm/ui/SnackbarModel.js +2 -0
  272. package/esm/ui/StackTraceButton.d.ts +3 -2
  273. package/esm/ui/StackTraceButton.js +4 -2
  274. package/esm/ui/StatusProgressBar.d.ts +3 -2
  275. package/esm/ui/StatusProgressBar.js +4 -2
  276. package/esm/ui/SubmitForm.d.ts +2 -1
  277. package/esm/ui/SubmitForm.js +4 -2
  278. package/esm/ui/SvgColorLegend.d.ts +3 -4
  279. package/esm/ui/SvgColorLegend.js +27 -18
  280. package/esm/ui/TagTextField.d.ts +2 -2
  281. package/esm/ui/TagTextField.js +4 -2
  282. package/esm/ui/ViewLoadingScreen.d.ts +3 -2
  283. package/esm/ui/ViewLoadingScreen.js +4 -2
  284. package/esm/ui/colorScale.d.ts +5 -1
  285. package/esm/ui/colorScale.js +12 -10
  286. package/esm/ui/colors.d.ts +3 -3
  287. package/esm/ui/colors.js +7 -7
  288. package/esm/ui/filterMenuItems.d.ts +10 -31
  289. package/esm/ui/filterMenuItems.js +13 -14
  290. package/esm/ui/index.d.ts +1 -1
  291. package/esm/ui/index.js +1 -1
  292. package/esm/ui/launchTargetsMenuItem.js +9 -13
  293. package/esm/ui/legendMenuItem.d.ts +4 -4
  294. package/esm/ui/legendMenuItem.js +4 -4
  295. package/esm/ui/menuItemAdornment.d.ts +1 -1
  296. package/esm/ui/menuItemAdornment.js +1 -1
  297. package/esm/ui/menuItems.d.ts +1 -1
  298. package/esm/ui/menuItems.js +1 -1
  299. package/esm/ui/menuLabels.d.ts +2 -2
  300. package/esm/ui/menuLabels.js +2 -2
  301. package/esm/ui/palette.d.ts +2 -2
  302. package/esm/ui/palette.js +10 -10
  303. package/esm/ui/radioSubMenu.d.ts +5 -3
  304. package/esm/ui/radioSubMenu.js +2 -2
  305. package/esm/ui/rampKey.d.ts +15 -0
  306. package/esm/ui/rampKey.js +17 -0
  307. package/esm/ui/showSubMenu.d.ts +0 -5
  308. package/esm/ui/showSubMenu.js +6 -15
  309. package/esm/ui/theme.d.ts +2 -2
  310. package/esm/ui/theme.js +1 -1
  311. package/esm/ui/useAssemblySelection.d.ts +2 -0
  312. package/esm/ui/useMouseTracking.d.ts +8 -20
  313. package/esm/ui/useMouseTracking.js +23 -62
  314. package/esm/ui/usePlacedMenuFocus.d.ts +19 -0
  315. package/esm/ui/usePlacedMenuFocus.js +28 -0
  316. package/esm/util/Base1DViewModel.d.ts +5 -3
  317. package/esm/util/Base1DViewModel.js +5 -3
  318. package/esm/util/SvgCanvas.js +1 -1
  319. package/esm/util/aggregateFieldName.d.ts +1 -10
  320. package/esm/util/aggregateFieldName.js +1 -8
  321. package/esm/util/analytics.d.ts +4 -6
  322. package/esm/util/analytics.js +143 -12
  323. package/esm/util/bezierConnector.d.ts +20 -0
  324. package/esm/util/bezierConnector.js +34 -100
  325. package/esm/util/cacheBudgets.d.ts +3 -0
  326. package/esm/util/cacheBudgets.js +3 -0
  327. package/esm/util/categoricalField.d.ts +2 -2
  328. package/esm/util/categoricalField.js +3 -3
  329. package/esm/util/color/index.d.ts +1 -1
  330. package/esm/util/color/index.js +2 -2
  331. package/esm/util/color-bits/bit.js +1 -1
  332. package/esm/util/color-bits/parse.js +6 -6
  333. package/esm/util/colorBits.d.ts +15 -4
  334. package/esm/util/colorBits.js +38 -15
  335. package/esm/util/colorRamp.d.ts +3 -3
  336. package/esm/util/colorRamp.js +14 -2
  337. package/esm/util/colorScale.d.ts +114 -20
  338. package/esm/util/colorScale.js +124 -26
  339. package/esm/util/colorSchemes.d.ts +6 -4
  340. package/esm/util/colorSchemes.js +6 -3
  341. package/esm/util/createSvgRasterCanvas.d.ts +14 -1
  342. package/esm/util/createSvgRasterCanvas.js +36 -12
  343. package/esm/util/diagonalizeRegions.js +18 -9
  344. package/esm/util/featureTransforms.d.ts +2 -2
  345. package/esm/util/featureTransforms.js +85 -135
  346. package/esm/util/fileHandleStore.js +5 -0
  347. package/esm/util/groupKeys.d.ts +5 -4
  348. package/esm/util/groupKeys.js +15 -9
  349. package/esm/util/index.js +1 -1
  350. package/esm/util/installFetch.d.ts +2 -2
  351. package/esm/util/installPrerequisiteFetch.d.ts +8 -3
  352. package/esm/util/installPrerequisiteFetch.js +9 -7
  353. package/esm/util/io/RemoteFileWithRangeCache.d.ts +1 -1
  354. package/esm/util/io/RemoteFileWithRangeCache.js +1 -1
  355. package/esm/util/jexl.js +1 -1
  356. package/esm/util/layouts/GranularRectLayout.d.ts +19 -3
  357. package/esm/util/layouts/GranularRectLayout.js +57 -34
  358. package/esm/util/leadingEdgeAutorun.d.ts +9 -1
  359. package/esm/util/leadingEdgeAutorun.js +5 -2
  360. package/esm/util/markEncoding.d.ts +10 -8
  361. package/esm/util/markEncoding.js +50 -12
  362. package/esm/util/markEncodingTypes.d.ts +74 -20
  363. package/esm/util/originCut.d.ts +14 -0
  364. package/esm/util/originCut.js +19 -0
  365. package/esm/util/paintLayer.d.ts +1 -1
  366. package/esm/util/paintLayer.js +4 -3
  367. package/esm/util/pathSeries.d.ts +18 -0
  368. package/esm/util/pathSeries.js +143 -0
  369. package/esm/util/pressOwner.d.ts +20 -0
  370. package/esm/util/pressOwner.js +26 -0
  371. package/esm/util/quantileExtent.d.ts +3 -3
  372. package/esm/util/quantileExtent.js +3 -3
  373. package/esm/util/rowStackGeometry.d.ts +1 -1
  374. package/esm/util/rowStackGeometry.js +1 -1
  375. package/esm/util/sessionActivity.d.ts +36 -0
  376. package/esm/util/sessionActivity.js +88 -0
  377. package/esm/util/stepOutputs.d.ts +165 -0
  378. package/esm/util/stepOutputs.js +201 -0
  379. package/esm/util/stepTables.d.ts +7 -3
  380. package/esm/util/stepTables.js +86 -3
  381. package/esm/util/thresholdScale.d.ts +1 -1
  382. package/esm/util/thresholdScale.js +1 -1
  383. package/esm/util/tracks.js +1 -1
  384. package/esm/util/usePanZoom.js +4 -10
  385. package/esm/util/windowStep.d.ts +6 -0
  386. package/esm/util/windowStep.js +153 -0
  387. package/package.json +23 -15
  388. package/esm/data_adapters/BaseAdapter/featureDensity.d.ts +0 -40
  389. package/esm/data_adapters/BaseAdapter/featureDensity.js +0 -31
  390. package/esm/rpc/methods/CoreGetFeatureDensity.d.ts +0 -11
  391. package/esm/rpc/methods/CoreGetFeatureDensity.js +0 -22
@@ -1,8 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { observer } from 'mobx-react';
2
3
  // A small inline legend tying a swatch color to its meaning. Rendered alongside
3
4
  // the sequence so e.g. transl_except highlights are self-explanatory. Styles are
4
5
  // inline (not classes) so the legend survives copy-paste to an external document.
5
- export default function SequenceLegend({ items, }) {
6
+ const SequenceLegend = observer(function SequenceLegend({ items, }) {
6
7
  return (_jsx("div", { "data-no-fasta": true, style: {
7
8
  display: 'flex',
8
9
  flexWrap: 'wrap',
@@ -16,4 +17,5 @@ export default function SequenceLegend({ items, }) {
16
17
  background: color,
17
18
  border: '1px solid #999',
18
19
  } }), label] }, label))) }));
19
- }
20
+ });
21
+ export default SequenceLegend;
@@ -12,17 +12,17 @@ const baseSeqStyle = {
12
12
  background: 'white',
13
13
  fontSize: 11,
14
14
  };
15
- function WordWrap({ children }) {
15
+ const WordWrap = observer(function WordWrap({ children, }) {
16
16
  return _jsx("pre", { style: baseSeqStyle, children: children });
17
- }
18
- function NoWordWrap({ children }) {
17
+ });
18
+ const NoWordWrap = observer(function NoWordWrap({ children, }) {
19
19
  return (_jsx("div", { style: {
20
20
  ...baseSeqStyle,
21
21
  maxWidth: 600,
22
22
  whiteSpace: 'normal',
23
23
  wordBreak: 'break-all',
24
24
  }, children: children }));
25
- }
25
+ });
26
26
  const SequencePanel = observer(function SequencePanel({ sequence, model, feature, mode, revcomp = false, assemblyGeneticCodeId, assemblyName, hoverTarget, ref, }) {
27
27
  const { showCoordinates } = model;
28
28
  const Container = showCoordinates ? WordWrap : NoWordWrap;
@@ -1,3 +1,4 @@
1
- export default function HelpDialog({ handleClose, }: {
1
+ declare const HelpDialog: ({ handleClose, }: {
2
2
  handleClose: () => void;
3
- }): import("react").JSX.Element;
3
+ }) => import("react").JSX.Element;
4
+ export default HelpDialog;
@@ -1,9 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import SettingsIcon from '@mui/icons-material/Settings';
3
3
  import { Typography } from '@mui/material';
4
+ import { observer } from 'mobx-react';
4
5
  import { InfoDialog } from '../../../ui/index.js';
5
- export default function HelpDialog({ handleClose, }) {
6
+ const HelpDialog = observer(function HelpDialog({ handleClose, }) {
6
7
  return (_jsxs(InfoDialog, { maxWidth: "xl", open: true, onClose: () => {
7
8
  handleClose();
8
9
  }, title: "Feature sequence panel help", children: [_jsx(Typography, { children: "The \"Feature sequence\" panel shows the underlying genomic sequence for a given feature, fetched from the reference genome." }), _jsx(Typography, { children: "For gene features, this panel does special calculations to e.g. stitch together the coding sequence, the options are:" }), _jsxs("ul", { children: [_jsx("li", { children: "CDS - shows the stitched together CDS sequences" }), _jsx("li", { children: "Protein - the translated coding sequence, with the \"standard\" genetic code" }), _jsx("li", { children: "cDNA - shows the 'copy DNA' of transcript, formed from exon sequences" }), _jsx("li", { children: "Genomic w/ introns +/- Nbp up+down stream - the sequence underlying the entire gene including introns, with UTR and CDS highlighted" })] }), _jsx(Typography, { children: "For other feature types, the options are:" }), _jsx("ul", { children: _jsx("li", { children: "Genomic +/- Nbp up+down stream - the reference genome sequence underlying the feature, with the up and downstream sequence" }) }), _jsxs(Typography, { children: ["Note 1: you can use the \"gear icon\" ", _jsx(SettingsIcon, {}), " to edit the number of bp displayed up/downstream and in the intron region"] }), _jsx(Typography, { children: "Note 2: The 'Copy HTML' function retains the colors from the sequence panel but cannot be pasted into some programs like notepad that only expect plain text." })] }));
9
- }
10
+ });
11
+ export default HelpDialog;
@@ -1,14 +1,13 @@
1
1
  import type { AbstractSessionModel, RpcStatus, SimpleFeatureSerialized } from '../../../util/index.ts';
2
2
  import type { ErrorState, SeqState } from '../../util.tsx';
3
3
  import type { SequenceDisplayMode, SequenceFeatureDetailsModel, SequenceHoverTarget } from '../model.ts';
4
- declare const SequenceDialog: ({ handleClose, sequenceFeatureDetails, session, transcriptSelector, feature, mode, setMode, revcomp, setRevcomp, sequence, error, status, assemblyGeneticCodeId, assemblyName, hoverTarget, onForceLoad, }: {
4
+ declare const SequenceDialog: ({ handleClose, sequenceFeatureDetails, session, transcriptSelector, feature, mode, revcomp, setRevcomp, sequence, error, status, assemblyGeneticCodeId, assemblyName, hoverTarget, onForceLoad, }: {
5
5
  handleClose: () => void;
6
6
  feature: SimpleFeatureSerialized;
7
7
  sequenceFeatureDetails: SequenceFeatureDetailsModel;
8
8
  session: Pick<AbstractSessionModel, 'notify' | 'notifyError'>;
9
9
  transcriptSelector?: React.ReactNode;
10
10
  mode: SequenceDisplayMode;
11
- setMode: (mode: SequenceDisplayMode) => void;
12
11
  revcomp: boolean;
13
12
  setRevcomp: (arg: boolean) => void;
14
13
  sequence: SeqState | ErrorState | undefined;
@@ -11,11 +11,11 @@ const useStyles = makeStyles()({
11
11
  width: '80em',
12
12
  },
13
13
  });
14
- const SequenceDialog = observer(function SequenceDialog({ handleClose, sequenceFeatureDetails, session, transcriptSelector, feature, mode, setMode, revcomp, setRevcomp, sequence, error, status, assemblyGeneticCodeId, assemblyName, hoverTarget, onForceLoad, }) {
14
+ const SequenceDialog = observer(function SequenceDialog({ handleClose, sequenceFeatureDetails, session, transcriptSelector, feature, mode, revcomp, setRevcomp, sequence, error, status, assemblyGeneticCodeId, assemblyName, hoverTarget, onForceLoad, }) {
15
15
  const { classes } = useStyles();
16
16
  const seqPanelRef = useRef(null);
17
17
  return (_jsx(InfoDialog, { maxWidth: "xl", open: true, title: "Sequence view", onClose: () => {
18
18
  handleClose();
19
- }, children: _jsxs("div", { className: classes.content, children: [_jsxs("div", { children: [transcriptSelector, _jsx(SequenceTypeSelector, { model: sequenceFeatureDetails, feature: feature, mode: mode, setMode: setMode }), _jsx(SequenceFeatureMenu, { ref: seqPanelRef, model: sequenceFeatureDetails, session: session, mode: mode, revcomp: revcomp, setRevcomp: setRevcomp })] }), _jsx(SequenceBody, { error: error, sequence: sequence, status: status, feature: feature, seqPanelRef: seqPanelRef, model: sequenceFeatureDetails, mode: mode, revcomp: revcomp, assemblyGeneticCodeId: assemblyGeneticCodeId, assemblyName: assemblyName, hoverTarget: hoverTarget, onForceLoad: onForceLoad })] }) }));
19
+ }, children: _jsxs("div", { className: classes.content, children: [_jsxs("div", { children: [transcriptSelector, _jsx(SequenceTypeSelector, { model: sequenceFeatureDetails, feature: feature, mode: mode }), _jsx(SequenceFeatureMenu, { ref: seqPanelRef, model: sequenceFeatureDetails, session: session, mode: mode, revcomp: revcomp, setRevcomp: setRevcomp })] }), _jsx(SequenceBody, { error: error, sequence: sequence, status: status, feature: feature, seqPanelRef: seqPanelRef, model: sequenceFeatureDetails, mode: mode, revcomp: revcomp, assemblyGeneticCodeId: assemblyGeneticCodeId, assemblyName: assemblyName, hoverTarget: hoverTarget, onForceLoad: onForceLoad })] }) }));
20
20
  });
21
21
  export default SequenceDialog;
@@ -1,9 +1,8 @@
1
1
  import type { SimpleFeatureSerialized } from '../../../util/index.ts';
2
2
  import type { SequenceDisplayMode, SequenceFeatureDetailsModel } from '../model.ts';
3
- declare const SequenceTypeSelector: ({ model, feature, mode, setMode, }: {
3
+ declare const SequenceTypeSelector: ({ model, feature, mode, }: {
4
4
  model: SequenceFeatureDetailsModel;
5
5
  feature: SimpleFeatureSerialized;
6
6
  mode: SequenceDisplayMode;
7
- setMode: (mode: SequenceDisplayMode) => void;
8
7
  }) => import("react").JSX.Element;
9
8
  export default SequenceTypeSelector;
@@ -2,50 +2,29 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { FormControl, MenuItem, Select } from '@mui/material';
3
3
  import { observer } from 'mobx-react';
4
4
  import { makeStyles } from '../../../util/tss-react/index.js';
5
- import { featureHasCDS, featureHasExonOrCDS } from '../featureTypeUtil.js';
5
+ import { getAvailableModes } from '../featureTypeUtil.js';
6
6
  const useStyles = makeStyles()({
7
7
  formControl: {
8
8
  margin: 0,
9
9
  marginLeft: 4,
10
10
  },
11
11
  });
12
- const SequenceTypeSelector = observer(function SequenceTypeSelector({ model, feature, mode, setMode, }) {
12
+ const SequenceTypeSelector = observer(function SequenceTypeSelector({ model, feature, mode, }) {
13
13
  const { classes } = useStyles();
14
14
  const { intronBp, upDownBp } = model;
15
- const hasCDS = featureHasCDS(feature);
16
- const hasExonOrCDS = featureHasExonOrCDS(feature);
17
- // each group is annotated, so a mode name that isn't a SequenceDisplayMode is
18
- // a compile error rather than a Select whose value silently matches no option
19
- const codingOptions = [
20
- ['cds', 'CDS'],
21
- ['protein', 'Protein'],
22
- ];
23
- const splicedOptions = [
24
- ['cdna', 'cDNA'],
25
- ['gene', 'Genomic w/ full introns'],
26
- [
27
- 'gene_updownstream',
28
- `Genomic w/ full introns +/- ${upDownBp}bp up+down stream`,
29
- ],
30
- ['gene_collapsed_intron', `Genomic w/ ${intronBp}bp intron`],
31
- [
32
- 'gene_updownstream_collapsed_intron',
33
- `Genomic w/ ${intronBp}bp intron +/- ${upDownBp}bp up+down stream`,
34
- ],
35
- ];
36
- const plainGenomicOptions = [
37
- ['genomic', 'Genomic'],
38
- [
39
- 'genomic_sequence_updownstream',
40
- `Genomic +/- ${upDownBp}bp up+down stream`,
41
- ],
42
- ];
43
- const options = [
44
- ...(hasCDS ? codingOptions : []),
45
- ...(hasExonOrCDS ? splicedOptions : plainGenomicOptions),
46
- ];
15
+ const labels = {
16
+ cds: 'CDS',
17
+ protein: 'Protein',
18
+ cdna: 'cDNA',
19
+ gene: 'Genomic w/ full introns',
20
+ gene_updownstream: `Genomic w/ full introns +/- ${upDownBp}bp up+down stream`,
21
+ gene_collapsed_intron: `Genomic w/ ${intronBp}bp intron`,
22
+ gene_updownstream_collapsed_intron: `Genomic w/ ${intronBp}bp intron +/- ${upDownBp}bp up+down stream`,
23
+ genomic: 'Genomic',
24
+ genomic_sequence_updownstream: `Genomic +/- ${upDownBp}bp up+down stream`,
25
+ };
47
26
  return (_jsx(FormControl, { className: classes.formControl, children: _jsx(Select, { size: "small", value: mode, onChange: event => {
48
- setMode(event.target.value);
49
- }, "aria-label": "Sequence type", children: options.map(([key, val]) => (_jsx(MenuItem, { value: key, "data-testid": `sequence_type_${key}`, children: val }, key))) }) }));
27
+ model.setMode(event.target.value);
28
+ }, "aria-label": "Sequence type", children: getAvailableModes(feature).map(key => (_jsx(MenuItem, { value: key, "data-testid": `sequence_type_${key}`, children: labels[key] }, key))) }) }));
50
29
  });
51
30
  export default SequenceTypeSelector;
@@ -1,6 +1,7 @@
1
1
  import type { SimpleFeatureSerialized } from '../../../util/index.ts';
2
- export default function TranscriptSelector({ transcripts, transcriptIndex, setTranscriptIndex, }: {
2
+ declare const TranscriptSelector: ({ transcripts, transcriptIndex, setTranscriptIndex, }: {
3
3
  transcripts: SimpleFeatureSerialized[];
4
4
  transcriptIndex: number;
5
5
  setTranscriptIndex: (index: number) => void;
6
- }): import("react").JSX.Element;
6
+ }) => import("react").JSX.Element;
7
+ export default TranscriptSelector;
@@ -1,5 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { FormControl, MenuItem, Select } from '@mui/material';
3
+ import { observer } from 'mobx-react';
3
4
  import { coarseStripHTML } from '../../../util/index.js';
4
5
  import { makeStyles } from '../../../util/tss-react/index.js';
5
6
  const useStyles = makeStyles()({
@@ -11,10 +12,11 @@ const useStyles = makeStyles()({
11
12
  // Only rendered when a container feature (a gene) has more than one
12
13
  // transcript child — picks which transcript's exon/CDS structure the
13
14
  // sequence-type selector and body compute from.
14
- export default function TranscriptSelector({ transcripts, transcriptIndex, setTranscriptIndex, }) {
15
+ const TranscriptSelector = observer(function TranscriptSelector({ transcripts, transcriptIndex, setTranscriptIndex, }) {
15
16
  const { classes } = useStyles();
16
17
  return (_jsx(FormControl, { className: classes.formControl, children: _jsx(Select, { size: "small", value: transcriptIndex, onChange: event => {
17
18
  setTranscriptIndex(Number(event.target.value));
18
19
  }, "aria-label": "Transcript", children: transcripts.map((transcript, idx) => (_jsx(MenuItem, { value: idx, "data-testid": `transcript_${idx}`, children: coarseStripHTML(`${transcript.name || transcript.id || ''}`) ||
19
20
  `Transcript ${idx + 1}` }, transcript.uniqueId))) }) }));
20
- }
21
+ });
22
+ export default TranscriptSelector;
@@ -6,7 +6,8 @@ export declare function featureHasExon(feature: SimpleFeatureSerializedNoId): bo
6
6
  export declare function featureHasExonOrCDS(feature: SimpleFeatureSerializedNoId): boolean;
7
7
  export declare function getTranscripts(feature: SimpleFeatureSerialized): SimpleFeatureSerialized[];
8
8
  export declare function pickDefaultTranscriptIndex(transcripts: SimpleFeatureSerialized[], canonical?: CanonicalTranscripts): number;
9
- export declare function getDefaultMode(feature: SimpleFeatureSerializedNoId): SequenceDisplayMode;
9
+ export declare function getAvailableModes(feature: SimpleFeatureSerializedNoId): SequenceDisplayMode[];
10
+ export declare function resolveMode(recentModes: readonly SequenceDisplayMode[], feature: SimpleFeatureSerializedNoId): "cdna" | "cds" | "gene" | "gene_collapsed_intron" | "gene_updownstream" | "gene_updownstream_collapsed_intron" | "genomic" | "genomic_sequence_updownstream" | "protein";
10
11
  export declare function modeHasUpDownstream(mode: SequenceDisplayMode): boolean;
11
12
  export declare function modeSupportsRevcomp(mode: SequenceDisplayMode): boolean;
12
13
  export declare function showGenomicCoordsOption(mode: SequenceDisplayMode): boolean;
@@ -38,12 +38,28 @@ export function pickDefaultTranscriptIndex(transcripts, canonical = DEFAULT_CANO
38
38
  const [best] = rankIsoforms(transcripts, isoformScorer(serializedIsoformReader, canonical));
39
39
  return best ? transcripts.indexOf(best) : 0;
40
40
  }
41
- export function getDefaultMode(feature) {
42
- return featureHasCDS(feature)
43
- ? 'cds'
44
- : featureHasExon(feature)
45
- ? 'cdna'
46
- : 'genomic';
41
+ // the sequence types the selector offers, the first being the default
42
+ export function getAvailableModes(feature) {
43
+ const coding = featureHasCDS(feature)
44
+ ? ['cds', 'protein']
45
+ : [];
46
+ const rest = featureHasExonOrCDS(feature)
47
+ ? [
48
+ 'cdna',
49
+ 'gene',
50
+ 'gene_updownstream',
51
+ 'gene_collapsed_intron',
52
+ 'gene_updownstream_collapsed_intron',
53
+ ]
54
+ : ['genomic', 'genomic_sequence_updownstream'];
55
+ return [...coding, ...rest];
56
+ }
57
+ // The most recent pick this feature offers, so clicking from one gene to the
58
+ // next keeps e.g. the protein readout, and picking Genomic on a plain feature
59
+ // in between does not cost a gene its Protein.
60
+ export function resolveMode(recentModes, feature) {
61
+ const modes = getAvailableModes(feature);
62
+ return recentModes.find(m => modes.includes(m)) ?? modes[0];
47
63
  }
48
64
  // whether the mode renders up/downstream flanks. shared by the sequence body
49
65
  // (which fetches+renders the flanks) and the FASTA header (which annotates
@@ -9,7 +9,8 @@ export interface SequenceHoverPosition {
9
9
  export interface SequenceHoverTarget {
10
10
  setSequenceHoverPosition: (pos: SequenceHoverPosition | undefined) => void;
11
11
  }
12
- export type SequenceDisplayMode = 'gene' | 'gene_collapsed_intron' | 'gene_updownstream' | 'gene_updownstream_collapsed_intron' | 'cdna' | 'cds' | 'genomic' | 'genomic_sequence_updownstream' | 'protein';
12
+ declare const sequenceDisplayModes: readonly ['gene', 'gene_collapsed_intron', 'gene_updownstream', 'gene_updownstream_collapsed_intron', 'cdna', 'cds', 'genomic', 'genomic_sequence_updownstream', 'protein'];
13
+ export type SequenceDisplayMode = (typeof sequenceDisplayModes)[number];
13
14
  /**
14
15
  * #stateModel SequenceFeatureDetails
15
16
  * #category Widget
@@ -47,6 +48,12 @@ export declare function SequenceFeatureDetailsF(): import("@jbrowse/mobx-state-t
47
48
  * state.
48
49
  */
49
50
  charactersPerRow: number;
51
+ /**
52
+ * #volatile
53
+ * the sequence types picked in any panel, most recent first;
54
+ * `resolveMode` shows the first one a feature offers
55
+ */
56
+ recentModes: ("cdna" | "cds" | "gene" | "gene_collapsed_intron" | "gene_updownstream" | "gene_updownstream_collapsed_intron" | "genomic" | "genomic_sequence_updownstream" | "protein")[];
50
57
  } & {
51
58
  /**
52
59
  * #action
@@ -68,6 +75,10 @@ export declare function SequenceFeatureDetailsF(): import("@jbrowse/mobx-state-t
68
75
  * #action
69
76
  */
70
77
  setShowCoordinates(f: ShowCoordinatesMode): void;
78
+ /**
79
+ * #action
80
+ */
81
+ setMode(f: SequenceDisplayMode): void;
71
82
  } & {
72
83
  /**
73
84
  * #getter
@@ -76,3 +87,4 @@ export declare function SequenceFeatureDetailsF(): import("@jbrowse/mobx-state-t
76
87
  }, import("@jbrowse/mobx-state-tree")._NotCustomized, import("@jbrowse/mobx-state-tree")._NotCustomized>;
77
88
  export type SequenceFeatureDetailsStateModel = ReturnType<typeof SequenceFeatureDetailsF>;
78
89
  export type SequenceFeatureDetailsModel = Instance<SequenceFeatureDetailsStateModel>;
90
+ export {};
@@ -1,8 +1,22 @@
1
1
  import { types } from '@jbrowse/mobx-state-tree';
2
- import { localStorageGetBoolean, localStorageGetItem, localStorageGetNumber, localStorageSetBoolean, localStorageSetItem, localStorageSetNumber, } from '../../util/index.js';
2
+ import { localStorageGetBoolean, localStorageGetItem, localStorageGetNumber, localStorageGetStringArray, localStorageSetBoolean, localStorageSetItem, localStorageSetJSON, localStorageSetNumber, } from '../../util/index.js';
3
3
  function parseShowCoordinatesMode(val) {
4
4
  return val === 'relative' || val === 'genomic' ? val : 'none';
5
5
  }
6
+ const sequenceDisplayModes = [
7
+ 'gene',
8
+ 'gene_collapsed_intron',
9
+ 'gene_updownstream',
10
+ 'gene_updownstream_collapsed_intron',
11
+ 'cdna',
12
+ 'cds',
13
+ 'genomic',
14
+ 'genomic_sequence_updownstream',
15
+ 'protein',
16
+ ];
17
+ function isSequenceDisplayMode(val) {
18
+ return sequenceDisplayModes.includes(val);
19
+ }
6
20
  const p = 'sequenceFeatureDetails';
7
21
  // A row has to hold at least one base: `splitString` advances the string by
8
22
  // this, so a width of zero never finishes it.
@@ -49,6 +63,12 @@ export function SequenceFeatureDetailsF() {
49
63
  * state.
50
64
  */
51
65
  charactersPerRow: clampCharactersPerRow(localStorageGetNumber(`${p}-charactersPerRow`, 100)),
66
+ /**
67
+ * #volatile
68
+ * the sequence types picked in any panel, most recent first;
69
+ * `resolveMode` shows the first one a feature offers
70
+ */
71
+ recentModes: localStorageGetStringArray(`${p}-recentModes`).filter(isSequenceDisplayMode),
52
72
  }))
53
73
  .actions(self => ({
54
74
  /**
@@ -87,6 +107,13 @@ export function SequenceFeatureDetailsF() {
87
107
  self.showCoordinatesSetting = f;
88
108
  localStorageSetItem(`${p}-showCoordinatesSetting`, f);
89
109
  },
110
+ /**
111
+ * #action
112
+ */
113
+ setMode(f) {
114
+ self.recentModes = [f, ...self.recentModes.filter(m => m !== f)];
115
+ localStorageSetJSON(`${p}-recentModes`, self.recentModes);
116
+ },
90
117
  }))
91
118
  .views(self => ({
92
119
  /**
@@ -65,7 +65,7 @@ function nonSpaceCharsBeforeCursor(event, chunk) {
65
65
  // Renders a chunk one character per span, applying `highlight` to each
66
66
  // non-space character. Spaces keep the base `color` so the row background stays
67
67
  // contiguous.
68
- function HighlightedChunk({ chunk, sequenceOffset, color, highlight, }) {
68
+ const HighlightedChunk = observer(function HighlightedChunk({ chunk, sequenceOffset, color, highlight, }) {
69
69
  let seqIndex = sequenceOffset;
70
70
  const spans = [];
71
71
  for (let i = 0; i < chunk.length; i++) {
@@ -74,5 +74,5 @@ function HighlightedChunk({ chunk, sequenceOffset, color, highlight, }) {
74
74
  spans.push(_jsx("span", { style: { background }, children: ch }, i));
75
75
  }
76
76
  return _jsx(_Fragment, { children: spans });
77
- }
77
+ });
78
78
  export default SequenceDisplay;
@@ -53,12 +53,14 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
53
53
  upDownBp: number;
54
54
  upperCaseCDS: boolean;
55
55
  charactersPerRow: number;
56
+ recentModes: ("cdna" | "cds" | "gene" | "gene_collapsed_intron" | "gene_updownstream" | "gene_updownstream_collapsed_intron" | "genomic" | "genomic_sequence_updownstream" | "protein")[];
56
57
  } & {
57
58
  setUpDownBp(f: number): void;
58
59
  setIntronBp(f: number): void;
59
60
  setUpperCaseCDS(f: boolean): void;
60
61
  setCharactersPerRow(f: number): void;
61
62
  setShowCoordinates(f: import("./index.ts").ShowCoordinatesMode): void;
63
+ setMode(f: import("./SequenceFeatureDetails/model.ts").SequenceDisplayMode): void;
62
64
  } & {
63
65
  readonly showCoordinates: boolean;
64
66
  }, import("@jbrowse/mobx-state-tree")._NotCustomized, import("@jbrowse/mobx-state-tree")._NotCustomized>, [undefined]>;
@@ -477,6 +477,7 @@ export default class PluginManager {
477
477
  addTrackType(cb: (pm: PluginManager) => TrackType): this;
478
478
  addDisplayType(cb: (pluginManager: PluginManager) => DisplayType): this;
479
479
  addViewType(cb: (pluginManager: PluginManager) => ViewType): this;
480
+ addRendererType(_cb?: unknown): never;
480
481
  addWidgetType(cb: (pm: PluginManager) => WidgetType): this;
481
482
  addConnectionType(cb: (pm: PluginManager) => ConnectionType): this;
482
483
  addRpcMethod(cb: (pm: PluginManager) => RpcMethodType): this;
@@ -631,6 +631,12 @@ export default class PluginManager {
631
631
  };
632
632
  return this.addElementType('view', callback);
633
633
  }
634
+ // v5 has no renderer registry. A v4 plugin still calls this from `install`,
635
+ // and without the method what it throws is "addRendererType is not a
636
+ // function", which names neither the cause nor the fix.
637
+ addRendererType(_cb) {
638
+ throw new Error('addRendererType was removed in JBrowse 5 along with server-side renderers: this plugin was built for JBrowse 4 or earlier and has to draw from a display instead, as the "Upgrading to v5" guide describes');
639
+ }
634
640
  addWidgetType(cb) {
635
641
  return this.addElementType('widget', cb);
636
642
  }