@jbrowse/core 5.0.0-beta.1 → 5.0.0-beta.11

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 (637) hide show
  1. package/README.md +1709 -390
  2. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +3 -2
  3. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +5 -5
  4. package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +3 -5
  5. package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +34 -29
  6. package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCard.js +1 -4
  7. package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.d.ts +11 -0
  8. package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.js +37 -14
  9. package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.d.ts +1 -1
  10. package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.js +15 -31
  11. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.d.ts +4 -3
  12. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.js +12 -25
  13. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.d.ts +11 -0
  14. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.js +11 -0
  15. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.d.ts +8 -0
  16. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.js +24 -0
  17. package/esm/BaseFeatureWidget/BaseFeatureDetail/Formatter.js +6 -4
  18. package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.d.ts +4 -0
  19. package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.js +17 -0
  20. package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.d.ts +3 -2
  21. package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +5 -3
  22. package/esm/BaseFeatureWidget/BaseFeatureDetail/index.d.ts +6 -2
  23. package/esm/BaseFeatureWidget/BaseFeatureDetail/index.js +7 -18
  24. package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.d.ts +16 -0
  25. package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.js +49 -0
  26. package/esm/BaseFeatureWidget/BaseFeatureDetail/util.d.ts +0 -8
  27. package/esm/BaseFeatureWidget/BaseFeatureDetail/util.js +6 -29
  28. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceContents.js +7 -34
  29. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeaturePanel.d.ts +2 -2
  30. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceName.js +2 -2
  31. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.js +3 -1
  32. package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.d.ts +12 -0
  33. package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.js +12 -5
  34. package/esm/BaseFeatureWidget/SequenceFeatureDetails/useSequenceData.js +8 -5
  35. package/esm/BaseFeatureWidget/configSchema.d.ts +1 -1
  36. package/esm/BaseFeatureWidget/formatDetails.d.ts +13 -29
  37. package/esm/BaseFeatureWidget/formatDetails.js +62 -83
  38. package/esm/BaseFeatureWidget/index.d.ts +2 -1
  39. package/esm/BaseFeatureWidget/stateModelFactory.d.ts +42 -29
  40. package/esm/BaseFeatureWidget/stateModelFactory.js +98 -98
  41. package/esm/BaseFeatureWidget/types.d.ts +12 -6
  42. package/esm/BaseFeatureWidget/util.d.ts +0 -10
  43. package/esm/BaseFeatureWidget/util.js +0 -17
  44. package/esm/CorePlugin.js +34 -3
  45. package/esm/PluginLoader.d.ts +24 -13
  46. package/esm/PluginLoader.js +167 -51
  47. package/esm/PluginManager.d.ts +130 -24
  48. package/esm/PluginManager.js +180 -32
  49. package/esm/ReExports/MuiDataGridReExports.d.ts +1 -0
  50. package/esm/ReExports/MuiDataGridReExports.js +2 -2
  51. package/esm/ReExports/coreModules.generated.d.ts +2 -0
  52. package/esm/ReExports/coreModules.generated.js +530 -0
  53. package/esm/ReExports/coreWorkerModules.generated.d.ts +2 -0
  54. package/esm/ReExports/coreWorkerModules.generated.js +490 -0
  55. package/esm/ReExports/frameworkModules.d.ts +2 -0
  56. package/esm/ReExports/frameworkModules.js +68 -0
  57. package/esm/ReExports/frameworkShared.d.ts +12 -0
  58. package/esm/ReExports/frameworkShared.js +16 -0
  59. package/esm/ReExports/frameworkWorkerModules.generated.d.ts +2 -0
  60. package/esm/ReExports/frameworkWorkerModules.generated.js +130 -0
  61. package/esm/ReExports/list.js +528 -79
  62. package/esm/ReExports/modules.d.ts +1 -1
  63. package/esm/ReExports/modules.js +10 -165
  64. package/esm/ReExports/registry.d.ts +1 -0
  65. package/esm/ReExports/registry.js +23 -5
  66. package/esm/ReExports/uiStub.d.ts +3 -0
  67. package/esm/ReExports/uiStub.js +33 -0
  68. package/esm/ReExports/workerModules.d.ts +2 -0
  69. package/esm/ReExports/workerModules.js +11 -0
  70. package/esm/TextSearch/TextSearchManager.d.ts +27 -13
  71. package/esm/TextSearch/TextSearchManager.js +77 -36
  72. package/esm/TextSearch/places.d.ts +12 -0
  73. package/esm/TextSearch/places.js +94 -0
  74. package/esm/assemblyManager/assembly.d.ts +21 -19
  75. package/esm/assemblyManager/assembly.js +28 -26
  76. package/esm/assemblyManager/assemblyAdapters.d.ts +1 -1
  77. package/esm/assemblyManager/assemblyAdapters.js +8 -2
  78. package/esm/assemblyManager/assemblyConfigSchema.d.ts +31 -90
  79. package/esm/assemblyManager/assemblyConfigSchema.js +35 -47
  80. package/esm/assemblyManager/assemblyManager.d.ts +35 -180
  81. package/esm/assemblyManager/assemblyManager.js +47 -51
  82. package/esm/assemblyManager/expandAssemblyConfigShorthand.d.ts +25 -18
  83. package/esm/assemblyManager/expandAssemblyConfigShorthand.js +78 -49
  84. package/esm/assemblyManager/geneticCodes.js +2 -5
  85. package/esm/assemblyManager/getSequenceAdapterConfig.d.ts +10 -0
  86. package/esm/assemblyManager/getSequenceAdapterConfig.js +10 -0
  87. package/esm/assemblyManager/indexAssemblyNames.d.ts +9 -0
  88. package/esm/assemblyManager/indexAssemblyNames.js +22 -0
  89. package/esm/assemblyManager/loadRefNameMap.d.ts +1 -1
  90. package/esm/assemblyManager/loadRefNameMap.js +4 -9
  91. package/esm/assemblyManager/refNameMapKey.d.ts +7 -0
  92. package/esm/assemblyManager/refNameMapKey.js +12 -0
  93. package/esm/checkPlugins.d.ts +2 -0
  94. package/esm/checkPlugins.js +38 -17
  95. package/esm/configuration/bamIndexFields.d.ts +49 -0
  96. package/esm/configuration/bamIndexFields.js +41 -0
  97. package/esm/configuration/configurationSchema.d.ts +101 -71
  98. package/esm/configuration/configurationSchema.js +207 -134
  99. package/esm/configuration/configurationSchemaUnion.d.ts +39 -0
  100. package/esm/configuration/configurationSchemaUnion.js +56 -0
  101. package/esm/configuration/configurationSlot.d.ts +150 -60
  102. package/esm/configuration/configurationSlot.js +103 -75
  103. package/esm/configuration/fillLocations.d.ts +14 -0
  104. package/esm/configuration/fillLocations.js +14 -0
  105. package/esm/configuration/formatAboutConfigSchema.d.ts +7 -21
  106. package/esm/configuration/formatDetailsConfigSchema.d.ts +11 -37
  107. package/esm/configuration/formatDetailsConfigSchema.js +10 -13
  108. package/esm/configuration/fullConfSnapshot.d.ts +4 -19
  109. package/esm/configuration/fullConfSnapshot.js +30 -52
  110. package/esm/configuration/getConf.d.ts +45 -41
  111. package/esm/configuration/getConf.js +111 -44
  112. package/esm/configuration/index.d.ts +26 -11
  113. package/esm/configuration/index.js +16 -7
  114. package/esm/configuration/indexType.d.ts +26 -0
  115. package/esm/configuration/indexType.js +38 -0
  116. package/esm/configuration/mergeFormatCallbacks.d.ts +6 -7
  117. package/esm/configuration/mergeFormatCallbacks.js +13 -10
  118. package/esm/configuration/plot.d.ts +61 -0
  119. package/esm/configuration/plot.js +142 -0
  120. package/esm/configuration/readConfObject.d.ts +2 -24
  121. package/esm/configuration/readConfObject.js +20 -63
  122. package/esm/configuration/requirements.d.ts +37 -0
  123. package/esm/configuration/requirements.js +88 -0
  124. package/esm/configuration/schemaRegistry.d.ts +32 -15
  125. package/esm/configuration/schemaRegistry.js +33 -35
  126. package/esm/configuration/schemaTypes.d.ts +21 -5
  127. package/esm/configuration/schemaTypes.js +66 -55
  128. package/esm/configuration/slotFacade.d.ts +12 -29
  129. package/esm/configuration/slotFacade.js +44 -23
  130. package/esm/configuration/snapshotPreprocess.d.ts +43 -0
  131. package/esm/configuration/snapshotPreprocess.js +161 -0
  132. package/esm/configuration/tabixIndexFields.d.ts +30 -4
  133. package/esm/configuration/tabixIndexFields.js +21 -4
  134. package/esm/configuration/tabixShorthand.d.ts +34 -17
  135. package/esm/configuration/tabixShorthand.js +49 -22
  136. package/esm/configuration/types.d.ts +182 -43
  137. package/esm/configuration/uriShorthand.d.ts +9 -0
  138. package/esm/configuration/uriShorthand.js +16 -0
  139. package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +13 -19
  140. package/esm/data_adapters/BaseAdapter/BaseAdapter.js +12 -19
  141. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +40 -2
  142. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +68 -5
  143. package/esm/data_adapters/BaseAdapter/featureDensity.d.ts +40 -0
  144. package/esm/data_adapters/BaseAdapter/featureDensity.js +31 -0
  145. package/esm/data_adapters/BaseAdapter/index.d.ts +23 -3
  146. package/esm/data_adapters/BaseAdapter/index.js +1 -0
  147. package/esm/data_adapters/BaseAdapter/rowSources.d.ts +37 -0
  148. package/esm/data_adapters/BaseAdapter/rowSources.js +7 -0
  149. package/esm/data_adapters/BaseAdapter/stats.d.ts +33 -1
  150. package/esm/data_adapters/BaseAdapter/stats.js +52 -13
  151. package/esm/data_adapters/BaseAdapter/types.d.ts +8 -12
  152. package/esm/data_adapters/BaseAdapter/zoomRange.d.ts +10 -0
  153. package/esm/data_adapters/CytobandAdapter/CytobandAdapter.js +1 -1
  154. package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +7 -11
  155. package/esm/data_adapters/CytobandAdapter/configSchema.js +3 -17
  156. package/esm/data_adapters/dataAdapterCache.d.ts +19 -2
  157. package/esm/data_adapters/dataAdapterCache.js +44 -10
  158. package/esm/data_adapters/getFeatureAdapter.d.ts +6 -4
  159. package/esm/data_adapters/getFeatureAdapter.js +8 -8
  160. package/esm/data_adapters/getSequenceSubAdapter.d.ts +7 -9
  161. package/esm/data_adapters/getSequenceSubAdapter.js +8 -10
  162. package/esm/pluggableElementTypes/AdapterType.d.ts +8 -8
  163. package/esm/pluggableElementTypes/AdapterType.js +1 -1
  164. package/esm/pluggableElementTypes/DisplayType.d.ts +53 -16
  165. package/esm/pluggableElementTypes/DisplayType.js +28 -12
  166. package/esm/pluggableElementTypes/LazyStateModelElement.d.ts +32 -0
  167. package/esm/pluggableElementTypes/LazyStateModelElement.js +77 -0
  168. package/esm/pluggableElementTypes/PluggableElementBase.d.ts +3 -5
  169. package/esm/pluggableElementTypes/PluggableElementBase.js +3 -5
  170. package/esm/pluggableElementTypes/RpcMethodType.d.ts +11 -1
  171. package/esm/pluggableElementTypes/RpcMethodType.js +25 -9
  172. package/esm/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.d.ts +1 -2
  173. package/esm/pluggableElementTypes/TextSearchAdapterType.d.ts +7 -7
  174. package/esm/pluggableElementTypes/ViewType.d.ts +20 -4
  175. package/esm/pluggableElementTypes/ViewType.js +32 -4
  176. package/esm/pluggableElementTypes/WidgetType.d.ts +6 -0
  177. package/esm/pluggableElementTypes/WidgetType.js +6 -0
  178. package/esm/pluggableElementTypes/addMenuItems.d.ts +3 -2
  179. package/esm/pluggableElementTypes/extendElementType.d.ts +1 -2
  180. package/esm/pluggableElementTypes/extendElementType.js +9 -5
  181. package/esm/pluggableElementTypes/index.d.ts +2 -1
  182. package/esm/pluggableElementTypes/index.js +2 -9
  183. package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +19 -9
  184. package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +122 -28
  185. package/esm/pluggableElementTypes/models/BaseDisplayModel.js +155 -11
  186. package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +65 -16
  187. package/esm/pluggableElementTypes/models/BaseTrackModel.js +179 -117
  188. package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +87 -18
  189. package/esm/pluggableElementTypes/models/BaseViewModel.js +54 -11
  190. package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +26 -16
  191. package/esm/pluggableElementTypes/models/assertDisplayContract.d.ts +15 -11
  192. package/esm/pluggableElementTypes/models/assertDisplayContract.js +25 -32
  193. package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +22 -18
  194. package/esm/pluggableElementTypes/models/baseConnectionConfig.js +5 -5
  195. package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +26 -31
  196. package/esm/pluggableElementTypes/models/baseTrackConfig.d.ts +108 -147
  197. package/esm/pluggableElementTypes/models/baseTrackConfig.js +96 -73
  198. package/esm/pluggableElementTypes/models/components/SaveTrackData.js +4 -6
  199. package/esm/pluggableElementTypes/models/components/fetchTrackData.d.ts +3 -4
  200. package/esm/pluggableElementTypes/models/components/fetchTrackData.js +3 -3
  201. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +23 -13
  202. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +80 -48
  203. package/esm/pluggableElementTypes/models/index.d.ts +2 -3
  204. package/esm/pluggableElementTypes/models/index.js +2 -3
  205. package/esm/pluggableElementTypes/models/migrateTrackConfig.d.ts +15 -1
  206. package/esm/pluggableElementTypes/models/migrateTrackConfig.js +85 -25
  207. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.d.ts +4 -3
  208. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.js +141 -19
  209. package/esm/pluggableElementTypes/models/saveTrackFileTypes/types.d.ts +3 -3
  210. package/esm/pluginDefinitions.d.ts +34 -7
  211. package/esm/pluginDefinitions.js +54 -20
  212. package/esm/rpc/BaseRpcDriver.d.ts +2 -2
  213. package/esm/rpc/BaseRpcDriver.js +25 -30
  214. package/esm/rpc/MainThreadRpcDriver.d.ts +2 -2
  215. package/esm/rpc/MainThreadRpcDriver.js +13 -8
  216. package/esm/rpc/RpcClient.d.ts +18 -6
  217. package/esm/rpc/RpcClient.js +51 -16
  218. package/esm/rpc/RpcManager.d.ts +14 -10
  219. package/esm/rpc/RpcManager.js +11 -1
  220. package/esm/rpc/RpcRegistry.d.ts +40 -7
  221. package/esm/rpc/RpcServer.d.ts +3 -1
  222. package/esm/rpc/RpcServer.js +19 -12
  223. package/esm/rpc/WebWorkerRpcDriver.d.ts +11 -4
  224. package/esm/rpc/WebWorkerRpcDriver.js +64 -68
  225. package/esm/rpc/byteBudget.d.ts +20 -5
  226. package/esm/rpc/byteBudget.js +16 -5
  227. package/esm/rpc/configSchema.d.ts +7 -21
  228. package/esm/rpc/coreRpcMethods.d.ts +4 -0
  229. package/esm/rpc/coreRpcMethods.js +4 -0
  230. package/esm/rpc/methods/CoreGetEncodedFeature.d.ts +13 -0
  231. package/esm/rpc/methods/CoreGetEncodedFeature.js +32 -0
  232. package/esm/rpc/methods/CoreGetEncodedLayers.d.ts +16 -0
  233. package/esm/rpc/methods/CoreGetEncodedLayers.js +59 -0
  234. package/esm/rpc/methods/CoreGetExportData.js +3 -4
  235. package/esm/rpc/methods/CoreGetFeatureDensity.d.ts +11 -0
  236. package/esm/rpc/methods/CoreGetFeatureDensity.js +22 -0
  237. package/esm/rpc/methods/CoreGetFeatures.js +3 -5
  238. package/esm/rpc/methods/CoreGetRefNames.js +2 -12
  239. package/esm/rpc/methods/CoreGetRegionByteEstimate.js +1 -1
  240. package/esm/rpc/methods/CoreGetSequence.js +2 -2
  241. package/esm/rpc/methods/CoreLoadAdapterCode.d.ts +13 -0
  242. package/esm/rpc/methods/CoreLoadAdapterCode.js +16 -0
  243. package/esm/rpc/methods/layerFeatures.d.ts +33 -0
  244. package/esm/rpc/methods/layerFeatures.js +29 -0
  245. package/esm/svg/SvgExport.js +6 -7
  246. package/esm/svg/SvgThemeProviders.d.ts +12 -0
  247. package/esm/svg/SvgThemeProviders.js +15 -0
  248. package/esm/svg/exportViewSvg.d.ts +28 -0
  249. package/esm/svg/exportViewSvg.js +13 -0
  250. package/esm/svg/normalizeSvgMarkup.d.ts +7 -0
  251. package/esm/svg/normalizeSvgMarkup.js +99 -0
  252. package/esm/svg/serializeSvg.d.ts +7 -0
  253. package/esm/svg/serializeSvg.js +11 -0
  254. package/esm/svg/svgId.d.ts +1 -1
  255. package/esm/svg/svgId.js +1 -1
  256. package/esm/svg/svgReady.d.ts +9 -7
  257. package/esm/svg/svgReady.js +8 -7
  258. package/esm/svg/trackNames.d.ts +7 -5
  259. package/esm/svg/trackNames.js +12 -9
  260. package/esm/svg/wrapSvgExport.js +6 -74
  261. package/esm/ui/AddCustomPluginDialog.js +3 -8
  262. package/esm/ui/AppReadyMarker.d.ts +45 -0
  263. package/esm/ui/AppReadyMarker.js +89 -0
  264. package/esm/ui/BaseExportSvgDialog.d.ts +1 -1
  265. package/esm/ui/CascadingMenu.js +181 -104
  266. package/esm/ui/DropDownMenu.js +2 -1
  267. package/esm/ui/ErrorBanner.js +1 -1
  268. package/esm/ui/ErrorBoundary.d.ts +2 -2
  269. package/esm/ui/ErrorMessageStackTraceContents.js +2 -1
  270. package/esm/ui/ErrorMessageStackTraceDialog.js +5 -11
  271. package/esm/ui/ExportSvgDialog.d.ts +1 -1
  272. package/esm/ui/FileDropZone.js +2 -1
  273. package/esm/ui/FileSelector/useInternetAccounts.d.ts +156 -96
  274. package/esm/ui/HoverMenu.d.ts +1 -2
  275. package/esm/ui/HoverMenu.js +6 -3
  276. package/esm/ui/JexlFilterDialog.d.ts +13 -10
  277. package/esm/ui/JexlFilterDialog.js +122 -50
  278. package/esm/ui/JexlFilterRowEditors.d.ts +15 -0
  279. package/esm/ui/JexlFilterRowEditors.js +90 -0
  280. package/esm/ui/LazyBaseTooltip.d.ts +4 -0
  281. package/esm/ui/LazyBaseTooltip.js +9 -0
  282. package/esm/ui/LegendSwatchGlyph.js +26 -21
  283. package/esm/ui/LoadingOverlay.d.ts +14 -0
  284. package/esm/ui/LoadingOverlay.js +4 -2
  285. package/esm/ui/MenuTypes.d.ts +23 -53
  286. package/esm/ui/MenuTypes.js +3 -0
  287. package/esm/ui/MonospaceTextField.d.ts +2 -1
  288. package/esm/ui/MonospaceTextField.js +23 -20
  289. package/esm/ui/PaletteContext.d.ts +10 -5
  290. package/esm/ui/PaletteContext.js +44 -6
  291. package/esm/ui/RefNameAutocomplete/SearchOption.d.ts +13 -0
  292. package/esm/ui/RefNameAutocomplete/SearchOption.js +45 -0
  293. package/esm/ui/RefNameAutocomplete/index.d.ts +1 -2
  294. package/esm/ui/RefNameAutocomplete/index.js +8 -2
  295. package/esm/ui/RefNameAutocomplete/util.d.ts +13 -0
  296. package/esm/ui/RefNameAutocomplete/util.js +42 -1
  297. package/esm/ui/ResizeHandle.d.ts +3 -1
  298. package/esm/ui/ResizeHandle.js +44 -11
  299. package/esm/ui/ScrollChrome.d.ts +13 -0
  300. package/esm/ui/ScrollChrome.js +11 -0
  301. package/esm/ui/ScrollEdgeShadow.d.ts +6 -9
  302. package/esm/ui/ScrollEdgeShadow.js +14 -35
  303. package/esm/ui/ScrollZoomToggle.d.ts +4 -27
  304. package/esm/ui/ScrollZoomToggle.js +34 -51
  305. package/esm/ui/SessionJsonPanel.d.ts +3 -0
  306. package/esm/ui/SessionJsonPanel.js +14 -0
  307. package/esm/ui/SettingsChangesTable.d.ts +1 -0
  308. package/esm/ui/SettingsChangesTable.js +49 -11
  309. package/esm/ui/ShareLinkField.d.ts +1 -3
  310. package/esm/ui/ShareLinkField.js +13 -40
  311. package/esm/ui/SizeSliderRow.d.ts +1 -3
  312. package/esm/ui/SizeSliderRow.js +4 -6
  313. package/esm/ui/SnackbarModel.js +79 -67
  314. package/esm/ui/StatusProgressBar.js +2 -2
  315. package/esm/ui/SvgColorLegend.d.ts +9 -4
  316. package/esm/ui/SvgColorLegend.js +82 -41
  317. package/esm/ui/VerticalScrollbar.d.ts +13 -34
  318. package/esm/ui/VerticalScrollbar.js +29 -83
  319. package/esm/ui/ViewLoadingScreen.d.ts +5 -4
  320. package/esm/ui/ViewLoadingScreen.js +8 -32
  321. package/esm/ui/colorScale.d.ts +92 -0
  322. package/esm/ui/colorScale.js +72 -0
  323. package/esm/ui/colors.d.ts +64 -0
  324. package/esm/ui/colors.js +230 -1
  325. package/esm/ui/hoverBoxStyle.d.ts +14 -2
  326. package/esm/ui/hoverBoxStyle.js +17 -2
  327. package/esm/ui/index.d.ts +12 -12
  328. package/esm/ui/index.js +14 -22
  329. package/esm/ui/launchViewMenu.js +15 -5
  330. package/esm/ui/legendMenuItem.d.ts +10 -32
  331. package/esm/ui/legendMenuItem.js +9 -36
  332. package/esm/ui/legendSpec.d.ts +15 -8
  333. package/esm/ui/legendSpec.js +14 -23
  334. package/esm/ui/makeSizeMenu.d.ts +0 -6
  335. package/esm/ui/makeSizeMenu.js +6 -30
  336. package/esm/ui/measureLegendText.js +1 -1
  337. package/esm/ui/menuItemAdornment.d.ts +9 -20
  338. package/esm/ui/menuItemAdornment.js +10 -32
  339. package/esm/ui/menuItems.d.ts +2 -7
  340. package/esm/ui/menuItems.js +1 -6
  341. package/esm/ui/multiTrackMenuItems.d.ts +6 -0
  342. package/esm/ui/palette.d.ts +118 -116
  343. package/esm/ui/palette.js +114 -75
  344. package/esm/ui/replaceViewAction.d.ts +1 -1
  345. package/esm/ui/replaceViewAction.js +1 -1
  346. package/esm/ui/theme.d.ts +43 -119
  347. package/esm/ui/theme.js +62 -78
  348. package/esm/ui/toggleMenuItems.d.ts +1 -3
  349. package/esm/ui/toggleMenuItems.js +6 -5
  350. package/esm/ui/useAssemblySelection.d.ts +4 -4
  351. package/esm/ui/viewHeaderHeight.d.ts +1 -0
  352. package/esm/ui/viewHeaderHeight.js +1 -0
  353. package/esm/util/Base1DUtils.d.ts +5 -3
  354. package/esm/util/Base1DUtils.js +14 -6
  355. package/esm/util/Base1DViewModel.d.ts +2 -1
  356. package/esm/util/Base1DViewModel.js +3 -2
  357. package/esm/util/SvgCanvas.d.ts +15 -13
  358. package/esm/util/SvgCanvas.js +76 -56
  359. package/esm/util/TimeTraveller.d.ts +3 -0
  360. package/esm/util/TimeTraveller.js +34 -2
  361. package/esm/util/aborting.d.ts +39 -0
  362. package/esm/util/aborting.js +88 -6
  363. package/esm/util/adapterMetadata.d.ts +1 -1
  364. package/esm/util/adapterMetadata.js +6 -5
  365. package/esm/util/addAndShowTrack.d.ts +2 -5
  366. package/esm/util/addAndShowTrack.js +5 -1
  367. package/esm/util/addRelativeUris.d.ts +17 -5
  368. package/esm/util/addRelativeUris.js +46 -10
  369. package/esm/util/addTrackFromWidget.d.ts +2 -5
  370. package/esm/util/addTrackFromWidget.js +5 -4
  371. package/esm/util/aggregateFieldName.d.ts +10 -0
  372. package/esm/util/aggregateFieldName.js +8 -0
  373. package/esm/util/analytics.js +46 -13
  374. package/esm/util/animationAllowed.d.ts +9 -0
  375. package/esm/util/animationAllowed.js +13 -0
  376. package/esm/util/applyRowResizeWheel.d.ts +10 -5
  377. package/esm/util/applyRowResizeWheel.js +10 -21
  378. package/esm/util/bandHeight.d.ts +10 -0
  379. package/esm/util/bandHeight.js +29 -0
  380. package/esm/util/bandLayout.d.ts +4 -4
  381. package/esm/util/bandLayout.js +4 -4
  382. package/esm/util/baseDisplayConfig.d.ts +8 -0
  383. package/esm/util/baseDisplayConfig.js +27 -0
  384. package/esm/util/bezierConnector.d.ts +4 -3
  385. package/esm/util/bezierConnector.js +38 -45
  386. package/esm/util/bgzfWorkerPool.d.ts +20 -74
  387. package/esm/util/bgzfWorkerPool.js +20 -74
  388. package/esm/util/binnedAggregate.d.ts +17 -0
  389. package/esm/util/binnedAggregate.js +275 -0
  390. package/esm/util/cacheBudgets.d.ts +22 -19
  391. package/esm/util/cacheBudgets.js +22 -19
  392. package/esm/util/cachedSetup.d.ts +16 -6
  393. package/esm/util/cachedSetup.js +108 -38
  394. package/esm/util/categoricalField.d.ts +56 -0
  395. package/esm/util/categoricalField.js +73 -0
  396. package/esm/util/cellMatches.d.ts +23 -0
  397. package/esm/util/cellMatches.js +264 -0
  398. package/esm/util/cellsStep.d.ts +29 -0
  399. package/esm/util/cellsStep.js +437 -0
  400. package/esm/util/clampToContig.d.ts +17 -0
  401. package/esm/util/clampToContig.js +19 -0
  402. package/esm/util/coarseStripHTML.js +1 -2
  403. package/esm/util/color/cssColorsLevel4.d.ts +1 -0
  404. package/esm/util/color/cssColorsLevel4.js +1 -0
  405. package/esm/util/color/index.d.ts +5 -3
  406. package/esm/util/color/index.js +7 -4
  407. package/esm/util/colorBits.d.ts +3 -3
  408. package/esm/util/colorBits.js +19 -44
  409. package/esm/util/colorRamp.d.ts +49 -5
  410. package/esm/util/colorRamp.js +169 -18
  411. package/esm/util/colorScale.d.ts +156 -0
  412. package/esm/util/colorScale.js +243 -0
  413. package/esm/util/colorSchemes.d.ts +21 -0
  414. package/esm/util/colorSchemes.js +30 -0
  415. package/esm/util/copyToClipboard.js +8 -1
  416. package/esm/util/{createStopTokenRotation.d.ts → createAbortRotation.d.ts} +21 -23
  417. package/esm/util/{createStopTokenRotation.js → createAbortRotation.js} +21 -52
  418. package/esm/util/createSvgRasterCanvas.d.ts +10 -0
  419. package/esm/util/cssColorParse.d.ts +15 -0
  420. package/esm/util/cssColorParse.js +53 -0
  421. package/esm/util/diagonalizeRegions.d.ts +2 -3
  422. package/esm/util/diagonalizeRegions.js +8 -13
  423. package/esm/util/expandLooseSearchIndex.d.ts +19 -0
  424. package/esm/util/expandLooseSearchIndex.js +29 -0
  425. package/esm/util/featureTable.d.ts +224 -0
  426. package/esm/util/featureTable.js +366 -0
  427. package/esm/util/featureTransforms.d.ts +81 -0
  428. package/esm/util/featureTransforms.js +1231 -0
  429. package/esm/util/featureTypes.d.ts +24 -0
  430. package/esm/util/featureTypes.js +35 -0
  431. package/esm/util/fetchAndMaybeUnzip.js +16 -9
  432. package/esm/util/fetchContext.d.ts +7 -8
  433. package/esm/util/fetchContext.js +3 -3
  434. package/esm/util/fetchHub.d.ts +4 -2
  435. package/esm/util/fetchHub.js +2 -2
  436. package/esm/util/fetchPhases.d.ts +10 -10
  437. package/esm/util/fetchSeq.d.ts +2 -3
  438. package/esm/util/fetchSeq.js +2 -2
  439. package/esm/util/fieldReader.d.ts +17 -0
  440. package/esm/util/fieldReader.js +62 -0
  441. package/esm/util/formatBytes.js +1 -1
  442. package/esm/util/formatGuessers.d.ts +25 -14
  443. package/esm/util/formatGuessers.js +42 -27
  444. package/esm/util/formatRelativeTime.js +1 -1
  445. package/esm/util/freezeDeep.d.ts +8 -10
  446. package/esm/util/freezeDeep.js +8 -10
  447. package/esm/util/getLocationUri.d.ts +2 -1
  448. package/esm/util/getLocationUri.js +8 -2
  449. package/esm/util/groupKeys.d.ts +76 -0
  450. package/esm/util/groupKeys.js +156 -0
  451. package/esm/util/highlights.d.ts +10 -6
  452. package/esm/util/highlights.js +12 -25
  453. package/esm/util/hooks.d.ts +31 -2
  454. package/esm/util/hooks.js +72 -3
  455. package/esm/util/index.d.ts +11 -11
  456. package/esm/util/index.js +11 -10
  457. package/esm/util/indexCandidates.d.ts +1 -31
  458. package/esm/util/indexCandidates.js +5 -63
  459. package/esm/util/installFetch.d.ts +77 -37
  460. package/esm/util/installFetch.js +65 -38
  461. package/esm/util/installInitAutorun.d.ts +14 -13
  462. package/esm/util/installInitAutorun.js +17 -17
  463. package/esm/util/installPrerequisiteFetch.d.ts +115 -0
  464. package/esm/util/installPrerequisiteFetch.js +111 -0
  465. package/esm/util/intervals.js +9 -4
  466. package/esm/util/io/index.js +22 -15
  467. package/esm/util/isDataCurrent.d.ts +7 -5
  468. package/esm/util/isDataCurrent.js +9 -6
  469. package/esm/util/isTextEntryFocused.d.ts +7 -0
  470. package/esm/util/isTextEntryFocused.js +16 -0
  471. package/esm/util/jexl.js +24 -21
  472. package/esm/util/jexlFilterRows.d.ts +89 -0
  473. package/esm/util/jexlFilterRows.js +252 -0
  474. package/esm/util/jexlFilters.d.ts +32 -57
  475. package/esm/util/jexlFilters.js +31 -29
  476. package/esm/util/jexlStrings.d.ts +3 -4
  477. package/esm/util/jexlStrings.js +2 -3
  478. package/esm/util/layouts/GranularRectLayout.d.ts +8 -1
  479. package/esm/util/layouts/GranularRectLayout.js +25 -8
  480. package/esm/util/lazyAfterAttach.d.ts +13 -0
  481. package/esm/util/lazyAfterAttach.js +31 -0
  482. package/esm/util/lazyWithPreload.d.ts +19 -0
  483. package/esm/util/lazyWithPreload.js +27 -0
  484. package/esm/util/legendCandidates.d.ts +72 -0
  485. package/esm/util/legendCandidates.js +138 -0
  486. package/esm/util/locString.js +5 -2
  487. package/esm/util/localStorage.js +4 -4
  488. package/esm/util/markEncoding.d.ts +150 -0
  489. package/esm/util/markEncoding.js +885 -0
  490. package/esm/util/markEncodingTypes.d.ts +595 -0
  491. package/esm/util/markEncodingTypes.js +8 -0
  492. package/esm/util/mst-reflection.d.ts +2 -20
  493. package/esm/util/mst-reflection.js +3 -53
  494. package/esm/util/mstUtils.d.ts +31 -23
  495. package/esm/util/mstUtils.js +39 -24
  496. package/esm/util/numericUtils.d.ts +7 -0
  497. package/esm/util/numericUtils.js +16 -0
  498. package/esm/util/numericValue.d.ts +14 -0
  499. package/esm/util/numericValue.js +34 -0
  500. package/esm/util/openFeatureWidget.d.ts +5 -0
  501. package/esm/util/openFeatureWidget.js +2 -2
  502. package/esm/util/openViews.d.ts +17 -0
  503. package/esm/util/openViews.js +22 -0
  504. package/esm/util/parentWalk.d.ts +1 -1
  505. package/esm/util/parentWalk.js +1 -1
  506. package/esm/util/parseLineByLine.d.ts +4 -5
  507. package/esm/util/parseLineByLine.js +8 -14
  508. package/esm/util/pluginStore.d.ts +6 -8
  509. package/esm/util/pluginStore.js +17 -16
  510. package/esm/util/preloadComponent.d.ts +5 -0
  511. package/esm/util/preloadComponent.js +11 -0
  512. package/esm/util/progress.d.ts +22 -22
  513. package/esm/util/progress.js +27 -26
  514. package/esm/util/quantileExtent.d.ts +49 -0
  515. package/esm/util/quantileExtent.js +162 -0
  516. package/esm/util/range.d.ts +13 -9
  517. package/esm/util/range.js +17 -8
  518. package/esm/util/renameRegions.d.ts +26 -6
  519. package/esm/util/renameRegions.js +68 -54
  520. package/esm/util/renderToStaticMarkup.js +24 -14
  521. package/esm/util/rxjs.d.ts +23 -8
  522. package/esm/util/rxjs.js +61 -15
  523. package/esm/util/samplesTsv.d.ts +49 -0
  524. package/esm/util/samplesTsv.js +86 -0
  525. package/esm/util/scheduleDetachedDestroy.d.ts +18 -0
  526. package/esm/util/scheduleDetachedDestroy.js +24 -0
  527. package/esm/util/scrollLatch.d.ts +1 -0
  528. package/esm/util/scrollLatch.js +8 -0
  529. package/esm/util/selectEncodedFeature.d.ts +16 -0
  530. package/esm/util/selectEncodedFeature.js +34 -0
  531. package/esm/util/sessionSharing.d.ts +7 -5
  532. package/esm/util/sessionSharing.js +23 -23
  533. package/esm/util/shapeNameList.d.ts +2 -0
  534. package/esm/util/shapeNameList.js +6 -0
  535. package/esm/util/shapeNames.d.ts +7 -0
  536. package/esm/util/shapeNames.js +11 -0
  537. package/esm/util/simpleFeature.d.ts +0 -1
  538. package/esm/util/springAnimate.js +1 -1
  539. package/esm/util/starFusion.d.ts +26 -0
  540. package/esm/util/starFusion.js +37 -0
  541. package/esm/util/stepTables.d.ts +96 -0
  542. package/esm/util/stepTables.js +277 -0
  543. package/esm/util/svAlt.d.ts +145 -0
  544. package/esm/util/svAlt.js +364 -0
  545. package/esm/util/svgColorProps.d.ts +11 -0
  546. package/esm/util/svgColorProps.js +28 -1
  547. package/esm/util/systemColorScheme.d.ts +12 -0
  548. package/esm/util/systemColorScheme.js +27 -0
  549. package/esm/util/tabix.d.ts +19 -10
  550. package/esm/util/tabix.js +19 -14
  551. package/esm/util/thresholdScale.d.ts +91 -0
  552. package/esm/util/thresholdScale.js +166 -0
  553. package/esm/util/timeGate.d.ts +4 -5
  554. package/esm/util/timeGate.js +4 -5
  555. package/esm/util/trackConfigDelta.d.ts +26 -26
  556. package/esm/util/trackConfigDelta.js +63 -47
  557. package/esm/util/tracks.d.ts +120 -66
  558. package/esm/util/tracks.js +501 -151
  559. package/esm/util/translateTranscript.d.ts +44 -0
  560. package/esm/util/translateTranscript.js +102 -0
  561. package/esm/util/types/data.d.ts +0 -2
  562. package/esm/util/types/index.d.ts +121 -22
  563. package/esm/util/types/index.js +9 -0
  564. package/esm/util/types/mst.d.ts +3 -0
  565. package/esm/util/types/mst.js +4 -0
  566. package/esm/util/types/renameIds.d.ts +1 -0
  567. package/esm/util/types/renameIds.js +29 -0
  568. package/esm/util/types/services.d.ts +1 -1
  569. package/esm/util/unknownSnapshotKeys.d.ts +53 -0
  570. package/esm/util/unknownSnapshotKeys.js +76 -0
  571. package/esm/util/useFeatureSequence.js +5 -5
  572. package/esm/util/useFetch.d.ts +3 -4
  573. package/esm/util/useFetch.js +19 -10
  574. package/esm/util/useFetchPlugins.d.ts +6 -2
  575. package/esm/util/useFetchPlugins.js +7 -3
  576. package/esm/util/usePanZoom.js +10 -3
  577. package/esm/util/usePanelVirtualScroll.d.ts +7 -35
  578. package/esm/util/usePanelVirtualScroll.js +9 -36
  579. package/esm/util/useRafCommit.js +1 -0
  580. package/esm/util/useRowVirtualScroll.d.ts +6 -29
  581. package/esm/util/useRowVirtualScroll.js +8 -49
  582. package/esm/util/useVirtualScrollWheel.d.ts +20 -4
  583. package/esm/util/useVirtualScrollWheel.js +40 -74
  584. package/esm/util/viewHighlights.d.ts +3 -0
  585. package/esm/util/viewHighlights.js +5 -0
  586. package/esm/util/viewStatus.d.ts +47 -15
  587. package/esm/util/viewStatus.js +34 -0
  588. package/esm/util/wheelZoom.d.ts +7 -1
  589. package/esm/util/wheelZoom.js +85 -19
  590. package/esm/util/whenViewSettled.d.ts +55 -8
  591. package/esm/util/whenViewSettled.js +56 -7
  592. package/esm/util/withFeatureDetails.js +4 -0
  593. package/esm/util/withLaunchInput.d.ts +174 -0
  594. package/esm/util/withLaunchInput.js +274 -0
  595. package/package.json +75 -24
  596. package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.d.ts +0 -2
  597. package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.js +0 -8
  598. package/esm/BaseFeatureWidget/BaseFeatureDetail/types.d.ts +0 -8
  599. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.d.ts +0 -80
  600. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.js +0 -583
  601. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.d.ts +0 -141
  602. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.js +0 -1116
  603. package/esm/ReExports/BaseFeatureDetails.d.ts +0 -1
  604. package/esm/ReExports/BaseFeatureDetails.js +0 -10
  605. package/esm/ReExports/index.d.ts +0 -1
  606. package/esm/ReExports/index.js +0 -1
  607. package/esm/ReExports/publicUtil.d.ts +0 -1
  608. package/esm/ReExports/publicUtil.js +0 -28
  609. package/esm/configuration/promotableDefaults.d.ts +0 -199
  610. package/esm/configuration/promotableDefaults.js +0 -326
  611. package/esm/configuration/promotablePin.d.ts +0 -55
  612. package/esm/configuration/promotablePin.js +0 -1
  613. package/esm/configuration/promotableResolve.d.ts +0 -108
  614. package/esm/configuration/promotableResolve.js +0 -117
  615. package/esm/configuration/promotableSlots.d.ts +0 -12
  616. package/esm/configuration/promotableSlots.js +0 -45
  617. package/esm/configuration/slotShape.d.ts +0 -12
  618. package/esm/configuration/slotShape.js +0 -84
  619. package/esm/pluggableElementTypes/models/HighlightsMixin.d.ts +0 -51
  620. package/esm/pluggableElementTypes/models/HighlightsMixin.js +0 -78
  621. package/esm/ui/PinAdornment.d.ts +0 -5
  622. package/esm/ui/PinAdornment.js +0 -79
  623. package/esm/ui/SvgGradientLegend.d.ts +0 -26
  624. package/esm/ui/SvgGradientLegend.js +0 -26
  625. package/esm/ui/highlightChipReveal.d.ts +0 -32
  626. package/esm/ui/highlightChipReveal.js +0 -39
  627. package/esm/ui/promotableMenuItems.d.ts +0 -19
  628. package/esm/ui/promotableMenuItems.js +0 -89
  629. package/esm/ui/promotablePinCoverage.d.ts +0 -44
  630. package/esm/ui/promotablePinCoverage.js +0 -87
  631. package/esm/util/applyInitSettings.d.ts +0 -79
  632. package/esm/util/applyInitSettings.js +0 -91
  633. package/esm/util/openDisplays.d.ts +0 -23
  634. package/esm/util/openDisplays.js +0 -79
  635. package/esm/util/stopToken.d.ts +0 -211
  636. package/esm/util/stopToken.js +0 -438
  637. /package/esm/{BaseFeatureWidget/BaseFeatureDetail/types.js → data_adapters/BaseAdapter/zoomRange.js} +0 -0
@@ -1,6 +1,6 @@
1
1
  import type PluginManager from '../../PluginManager.ts';
2
2
  import type { RefNameMismatch } from '../../assemblyManager/refNameMismatch.ts';
3
- import type { AnyConfigurationSchemaType } from '../../configuration/index.ts';
3
+ import type { AnyConfigurationModel, AnyConfigurationSchemaType } from '../../configuration/index.ts';
4
4
  import type { MenuItem } from '../../ui/index.ts';
5
5
  import type { DisplayModel } from './BaseDisplayModel.tsx';
6
6
  import type { FileTypeExporter } from './saveTrackFileTypes/types.ts';
@@ -97,8 +97,17 @@ export declare function createBaseTrackModel(pm: PluginManager, trackType: strin
97
97
  readonly activeDisplay: DisplayModel & import("@jbrowse/mobx-state-tree").IStateTreeNode<IType<unknown, unknown, DisplayModel>>;
98
98
  /**
99
99
  * #getter
100
+ * the configured displays the CONTAINING VIEW can draw and the track's
101
+ * adapter feeds, which is the set `replaceDisplay` will accept
102
+ *
103
+ * `configuration.displays` is not that set: baseTrackConfig injects one
104
+ * entry per display type registered for the track TYPE, across every
105
+ * view type, so a VariantTrack carries a ChordVariantDisplay a linear
106
+ * view cannot draw. The track menu's own "Display types" submenu has
107
+ * always filtered them; this exposes the same list to code, because the
108
+ * alternative is every caller re-deriving it from the plugin manager.
100
109
  */
101
- readonly canConfigure: boolean;
110
+ readonly compatibleDisplays: AnyConfigurationModel[];
102
111
  } & {
103
112
  /**
104
113
  * #getter
@@ -130,8 +139,14 @@ export declare function createBaseTrackModel(pm: PluginManager, trackType: strin
130
139
  /**
131
140
  * #getter
132
141
  */
133
- readonly adapterType: import("../AdapterType.ts").default;
142
+ readonly adapterType: import("../AdapterType.ts").default<any>;
134
143
  } & {
144
+ /**
145
+ * #action
146
+ * Write the config to the session now rather than after the 400 ms
147
+ * wait, for an edit that has to be undoable the moment it lands.
148
+ */
149
+ persistConfigurationNow(): void;
135
150
  /**
136
151
  * #action
137
152
  */
@@ -144,6 +159,27 @@ export declare function createBaseTrackModel(pm: PluginManager, trackType: strin
144
159
  * #action
145
160
  */
146
161
  setResizing(flag: boolean): void;
162
+ /**
163
+ * #action
164
+ * `applyDisplaySettings` on the display being drawn (`activeDisplay`,
165
+ * which a shown track always has — this is not meaningful on a bare
166
+ * config node) — the track-level entry for "restyle this track in
167
+ * place" (a session spec's inline keys, an agent's settings bag). Only
168
+ * that one display: settings vocabularies are per display type, so
169
+ * broadcasting one bag across a track's other displays would mis-route
170
+ * keys; address a non-active display directly if that is what you mean.
171
+ * See BaseDisplayModel for the routing and the `allowSetters` opt-in.
172
+ */
173
+ applyDisplaySettings(settings: Record<string, unknown>, options?: {
174
+ allowSetters?: boolean;
175
+ }): {
176
+ applied: string[];
177
+ unapplied: import("../../util/unknownSnapshotKeys.ts").UnappliedSetting[];
178
+ failed: {
179
+ key: string;
180
+ error: string;
181
+ }[];
182
+ };
147
183
  /**
148
184
  * #action
149
185
  */
@@ -165,15 +201,28 @@ export declare function createBaseTrackModel(pm: PluginManager, trackType: strin
165
201
  *
166
202
  * `equals: compareStructural` is load-bearing, not an optimization:
167
203
  * `self.configuration` is a re-resolving reference, and persisting a save
168
- * swaps the resolved node identity (admin `updateTrackConf` replaces the
169
- * frozen `jbrowse.tracks` entry, rehydrating a brand-new MST node; the
170
- * non-admin path reconciles in place but still churns once). Referential
171
- * comparison would treat every such swap as a fresh change and re-fire the
172
- * save, which for the admin/desktop path (new node every write) is an
173
- * unbounded debounced loop. Structural comparison settles once the content
174
- * stops changing.
204
+ * can swap the resolved node identity (the delta path reconciles in place
205
+ * but still churns once, and a session without deltas replaces the frozen
206
+ * `jbrowse.tracks` entry, rehydrating a brand-new MST node every write).
207
+ * Referential comparison would treat every such swap as a fresh change
208
+ * and re-fire the save, an unbounded debounced loop. Structural
209
+ * comparison settles once the content stops changing.
175
210
  */
176
211
  afterAttach(): void;
212
+ } & {
213
+ /**
214
+ * #action
215
+ * The awaitable sibling of `replaceDisplay`: loads the target display's
216
+ * state model, then swaps to it carrying whatever settings the outgoing
217
+ * display can hand over.
218
+ *
219
+ * `replaceDisplay` stays a plain sync action and ASSERTS the model is
220
+ * loaded, and every display state model in this tree is a dynamic import
221
+ * until something shows one — so a caller that has not already shown the
222
+ * target needs this. Named like `launchTrack`, which is the same problem
223
+ * one level up.
224
+ */
225
+ launchDisplay(displayId: string): Promise<void>;
177
226
  } & {
178
227
  /**
179
228
  * #getter
@@ -185,12 +234,12 @@ export declare function createBaseTrackModel(pm: PluginManager, trackType: strin
185
234
  readonly exportsDataViaAdapter: boolean;
186
235
  /**
187
236
  * #getter
188
- * What "Save track data" may pull before it asks. The adapter's own
189
- * `fetchSizeLimit` where it declares one, so a save does not quietly
190
- * disagree with the size this track's display already refuses to render;
191
- * otherwise a default. Deliberately generous — unlike the display's gate
192
- * this is a confirmation rather than a refusal, and the user asked for
193
- * these bytes by name.
237
+ * The size in bytes above which "Save track data" asks for confirmation
238
+ * before fetching. Uses the adapter's `fetchSizeLimit` where it declares
239
+ * one, so a save asks at the same size at which the track's display
240
+ * refuses to render; otherwise a default. The default is generous
241
+ * because exceeding it only prompts for confirmation, and the user
242
+ * explicitly requested the data.
194
243
  */
195
244
  readonly exportByteLimit: number;
196
245
  /**
@@ -1,5 +1,5 @@
1
1
  import { lazy } from 'react';
2
- import { addDisposer, getSnapshot, types } from '@jbrowse/mobx-state-tree';
2
+ import { addDisposer, getSnapshot, isAlive, types, } from '@jbrowse/mobx-state-tree';
3
3
  import Save from '@mui/icons-material/Save';
4
4
  import { compareStructural, reaction } from 'mobx';
5
5
  import { ConfigurationReference, getConf } from '../../configuration/index.js';
@@ -10,6 +10,7 @@ import { getContainingView, getDialogHost, getEnv, getSession, } from '../../uti
10
10
  import { getConfAssemblyNamesOrNone, viewDisplayNames, } from '../../util/tracks.js';
11
11
  import { isSessionModelWithConfigEditing } from '../../util/types/index.js';
12
12
  import { ElementId } from '../../util/types/mst.js';
13
+ import { displayTypesFedBy } from './baseTrackConfig.js';
13
14
  import { stringifyBED } from './saveTrackFileTypes/bed.js';
14
15
  import { stringifyGBK } from './saveTrackFileTypes/genbank.js';
15
16
  import { stringifyGFF3 } from './saveTrackFileTypes/gff3.js';
@@ -18,12 +19,11 @@ const DEFAULT_EXPORT_BYTE_LIMIT = 5_000_000;
18
19
  function getCompatibleDisplays(self) {
19
20
  const { pluginManager } = getEnv(self);
20
21
  const view = getContainingView(self);
21
- // which of THIS track's configured displays the view draws — a different
22
- // question from viewCanDisplayTrack's "can it open the track at all", over
23
- // the same set of names
24
- const compatTypes = viewDisplayNames(pluginManager, view.type);
25
- const displays = self.configuration.displays;
26
- return displays.filter(d => compatTypes.has(d.type));
22
+ const { configuration } = self;
23
+ const viewDisplays = viewDisplayNames(pluginManager, view.type);
24
+ const fed = new Set(displayTypesFedBy(pluginManager, configuration.type, configuration.adapter));
25
+ const displays = configuration.displays;
26
+ return displays.filter(d => viewDisplays.has(d.type) && fed.has(d.type));
27
27
  }
28
28
  function getDisplayConf(displays, displayId) {
29
29
  const displayConf = displays.find(d => d.displayId === displayId);
@@ -158,14 +158,18 @@ export function createBaseTrackModel(pm, trackType, baseTrackConfig) {
158
158
  },
159
159
  /**
160
160
  * #getter
161
+ * the configured displays the CONTAINING VIEW can draw and the track's
162
+ * adapter feeds, which is the set `replaceDisplay` will accept
163
+ *
164
+ * `configuration.displays` is not that set: baseTrackConfig injects one
165
+ * entry per display type registered for the track TYPE, across every
166
+ * view type, so a VariantTrack carries a ChordVariantDisplay a linear
167
+ * view cannot draw. The track menu's own "Display types" submenu has
168
+ * always filtered them; this exposes the same list to code, because the
169
+ * alternative is every caller re-deriving it from the plugin manager.
161
170
  */
162
- get canConfigure() {
163
- const session = getSession(self);
164
- const { sessionTracks, trackConfigDeltas, adminMode } = session;
165
- return (isSessionModelWithConfigEditing(session) &&
166
- (adminMode ||
167
- !!sessionTracks?.find(t => t.trackId === this.trackId) ||
168
- this.trackId in (trackConfigDeltas ?? {})));
171
+ get compatibleDisplays() {
172
+ return getCompatibleDisplays(self);
169
173
  },
170
174
  }))
171
175
  .views(self => ({
@@ -232,106 +236,158 @@ export function createBaseTrackModel(pm, trackType, baseTrackConfig) {
232
236
  return pm.getAdapterType(type);
233
237
  },
234
238
  }))
235
- .actions(self => ({
236
- /**
237
- * #action
238
- */
239
- setPinned(flag) {
240
- self.pinned = flag;
241
- },
242
- /**
243
- * #action
244
- */
245
- setMinimized(flag) {
246
- self.minimized = flag;
247
- },
248
- /**
249
- * #action
250
- */
251
- setResizing(flag) {
252
- self.resizing = flag;
253
- },
254
- /**
255
- * #action
256
- */
257
- replaceDisplay(oldDisplayId, newDisplayId, initialSnapshot = {}) {
258
- const idx = self.displays.findIndex(d => d.configuration.displayId === oldDisplayId);
259
- if (idx === -1) {
260
- throw new Error(`could not find display id ${oldDisplayId} to replace`);
239
+ .actions(self => {
240
+ let persistTimeout;
241
+ // Reads the config when it fires rather than when it was scheduled, so
242
+ // what reaches the session is the config as it stands, whatever swapped
243
+ // the resolved node inside the wait.
244
+ function persistConfiguration() {
245
+ persistTimeout = undefined;
246
+ const session = getSession(self);
247
+ if (isSessionModelWithConfigEditing(session)) {
248
+ session.updateTrackConfiguration(getSnapshot(self.configuration));
261
249
  }
262
- const displays = self.configuration.displays;
263
- const displayConf = getDisplayConf(displays, newDisplayId);
264
- self.displays[idx] = {
265
- ...initialSnapshot,
266
- type: displayConf.type,
267
- configuration: newDisplayId,
268
- };
269
- },
250
+ }
251
+ return {
252
+ /**
253
+ * #action
254
+ * Write the config to the session now rather than after the 400 ms
255
+ * wait, for an edit that has to be undoable the moment it lands.
256
+ */
257
+ persistConfigurationNow() {
258
+ clearTimeout(persistTimeout);
259
+ persistConfiguration();
260
+ },
261
+ /**
262
+ * #action
263
+ */
264
+ setPinned(flag) {
265
+ self.pinned = flag;
266
+ },
267
+ /**
268
+ * #action
269
+ */
270
+ setMinimized(flag) {
271
+ self.minimized = flag;
272
+ },
273
+ /**
274
+ * #action
275
+ */
276
+ setResizing(flag) {
277
+ self.resizing = flag;
278
+ },
279
+ /**
280
+ * #action
281
+ * `applyDisplaySettings` on the display being drawn (`activeDisplay`,
282
+ * which a shown track always has — this is not meaningful on a bare
283
+ * config node) — the track-level entry for "restyle this track in
284
+ * place" (a session spec's inline keys, an agent's settings bag). Only
285
+ * that one display: settings vocabularies are per display type, so
286
+ * broadcasting one bag across a track's other displays would mis-route
287
+ * keys; address a non-active display directly if that is what you mean.
288
+ * See BaseDisplayModel for the routing and the `allowSetters` opt-in.
289
+ */
290
+ applyDisplaySettings(settings, options) {
291
+ return self.activeDisplay.applyDisplaySettings(settings, options);
292
+ },
293
+ /**
294
+ * #action
295
+ */
296
+ replaceDisplay(oldDisplayId, newDisplayId, initialSnapshot = {}) {
297
+ const idx = self.displays.findIndex(d => d.configuration.displayId === oldDisplayId);
298
+ if (idx === -1) {
299
+ throw new Error(`could not find display id ${oldDisplayId} to replace`);
300
+ }
301
+ const displayConf = getDisplayConf(self.configuration.displays, newDisplayId);
302
+ // same interception showTrackGeneric makes: a registered-but-unloaded
303
+ // display would otherwise fail as an opaque union mismatch below
304
+ pm.resolveDisplayTypeRecord(displayConf.type)?.assertStateModelLoaded();
305
+ self.displays[idx] = {
306
+ ...initialSnapshot,
307
+ type: displayConf.type,
308
+ configuration: newDisplayId,
309
+ };
310
+ },
311
+ /**
312
+ * #action
313
+ * Persist any config-schema mutation (quick track-menu edits calling
314
+ * `setSlot` directly, or the full Settings dialog) back to the session,
315
+ * debounced, mirroring ConfigurationEditorWidget's own save. Both savers
316
+ * intentionally coexist — this one covers direct setSlot edits on a shown
317
+ * track, the widget covers an unshown track edited from the selector (no
318
+ * BaseTrackModel). When both fire they compute an identical delta, deduped
319
+ * in updateTrackConfiguration; don't drop one to "simplify". `reaction`
320
+ * (not `autorun`) on purpose: `self.configuration` is defined
321
+ * immediately on attach, unlike ConfigurationEditorWidget's `target`
322
+ * (which starts undefined), so an autorun's guaranteed first run would
323
+ * otherwise schedule a spurious flush for every track ever shown, even
324
+ * completely untouched ones — `reaction` only fires on an actual change.
325
+ *
326
+ * `equals: compareStructural` is load-bearing, not an optimization:
327
+ * `self.configuration` is a re-resolving reference, and persisting a save
328
+ * can swap the resolved node identity (the delta path reconciles in place
329
+ * but still churns once, and a session without deltas replaces the frozen
330
+ * `jbrowse.tracks` entry, rehydrating a brand-new MST node every write).
331
+ * Referential comparison would treat every such swap as a fresh change
332
+ * and re-fire the save, an unbounded debounced loop. Structural
333
+ * comparison settles once the content stops changing.
334
+ */
335
+ afterAttach() {
336
+ addDisposer(self, reaction(() => getSnapshot(self.configuration), () => {
337
+ clearTimeout(persistTimeout);
338
+ persistTimeout = setTimeout(persistConfiguration, 400);
339
+ }, { equals: compareStructural }));
340
+ addDisposer(self, () => {
341
+ clearTimeout(persistTimeout);
342
+ });
343
+ // Hold a claim on this track's rpcSessionId for as long as the track is
344
+ // open, so closing the last track using an adapter config evicts that
345
+ // adapter from the worker's dataAdapterCache. Without this nothing in
346
+ // the app ever reaches CoreFreeResources, and an adapter — with its
347
+ // parsed chunks, or in the unindexed case its whole parsed file — is
348
+ // reachable from module scope for as long as the worker lives, which no
349
+ // amount of garbage collection can help with.
350
+ //
351
+ // The id is tracked by reaction rather than captured once: rpcSessionId
352
+ // is derived from the adapter config, which a settings edit can change
353
+ // under a live track, and releasing an id we never retained would free
354
+ // an adapter another track is still using.
355
+ const { rpcManager } = getSession(self);
356
+ let retained = self.rpcSessionId;
357
+ retainAdapterSession(rpcManager, retained);
358
+ addDisposer(self, reaction(() => self.rpcSessionId, next => {
359
+ if (next !== retained) {
360
+ const previous = retained;
361
+ retained = next;
362
+ retainAdapterSession(rpcManager, next);
363
+ void releaseAdapterSession(rpcManager, previous);
364
+ }
365
+ }));
366
+ addDisposer(self, () => {
367
+ void releaseAdapterSession(rpcManager, retained);
368
+ });
369
+ },
370
+ };
371
+ })
372
+ .actions(self => ({
270
373
  /**
271
374
  * #action
272
- * Persist any config-schema mutation (quick track-menu edits calling
273
- * `setSlot` directly, or the full Settings dialog) back to the session,
274
- * debounced, mirroring ConfigurationEditorWidget's own save. Both savers
275
- * intentionally coexist — this one covers direct setSlot edits on a shown
276
- * track, the widget covers an unshown track edited from the selector (no
277
- * BaseTrackModel). When both fire they compute an identical delta, deduped
278
- * in updateTrackConfiguration; don't drop one to "simplify". `reaction`
279
- * (not `autorun`) on purpose: `self.configuration` is defined
280
- * immediately on attach, unlike ConfigurationEditorWidget's `target`
281
- * (which starts undefined), so an autorun's guaranteed first run would
282
- * otherwise schedule a spurious flush for every track ever shown, even
283
- * completely untouched ones — `reaction` only fires on an actual change.
375
+ * The awaitable sibling of `replaceDisplay`: loads the target display's
376
+ * state model, then swaps to it carrying whatever settings the outgoing
377
+ * display can hand over.
284
378
  *
285
- * `equals: compareStructural` is load-bearing, not an optimization:
286
- * `self.configuration` is a re-resolving reference, and persisting a save
287
- * swaps the resolved node identity (admin `updateTrackConf` replaces the
288
- * frozen `jbrowse.tracks` entry, rehydrating a brand-new MST node; the
289
- * non-admin path reconciles in place but still churns once). Referential
290
- * comparison would treat every such swap as a fresh change and re-fire the
291
- * save, which for the admin/desktop path (new node every write) is an
292
- * unbounded debounced loop. Structural comparison settles once the content
293
- * stops changing.
379
+ * `replaceDisplay` stays a plain sync action and ASSERTS the model is
380
+ * loaded, and every display state model in this tree is a dynamic import
381
+ * until something shows one — so a caller that has not already shown the
382
+ * target needs this. Named like `launchTrack`, which is the same problem
383
+ * one level up.
294
384
  */
295
- afterAttach() {
296
- let timeout;
297
- addDisposer(self, reaction(() => getSnapshot(self.configuration), snapshot => {
298
- clearTimeout(timeout);
299
- timeout = setTimeout(() => {
300
- const session = getSession(self);
301
- if (isSessionModelWithConfigEditing(session)) {
302
- session.updateTrackConfiguration(snapshot);
303
- }
304
- }, 400);
305
- }, { equals: compareStructural }));
306
- addDisposer(self, () => {
307
- clearTimeout(timeout);
308
- });
309
- // Hold a claim on this track's rpcSessionId for as long as the track is
310
- // open, so closing the last track using an adapter config evicts that
311
- // adapter from the worker's dataAdapterCache. Without this nothing in
312
- // the app ever reaches CoreFreeResources, and an adapter — with its
313
- // parsed chunks, or in the unindexed case its whole parsed file — is
314
- // reachable from module scope for as long as the worker lives, which no
315
- // amount of garbage collection can help with.
316
- //
317
- // The id is tracked by reaction rather than captured once: rpcSessionId
318
- // is derived from the adapter config, which a settings edit can change
319
- // under a live track, and releasing an id we never retained would free
320
- // an adapter another track is still using.
321
- const { rpcManager } = getSession(self);
322
- let retained = self.rpcSessionId;
323
- retainAdapterSession(rpcManager, retained);
324
- addDisposer(self, reaction(() => self.rpcSessionId, next => {
325
- if (next !== retained) {
326
- const previous = retained;
327
- retained = next;
328
- retainAdapterSession(rpcManager, next);
329
- void releaseAdapterSession(rpcManager, previous);
330
- }
331
- }));
332
- addDisposer(self, () => {
333
- void releaseAdapterSession(rpcManager, retained);
334
- });
385
+ async launchDisplay(displayId) {
386
+ const { type } = getDisplayConf(self.configuration.displays, displayId);
387
+ await pm.resolveDisplayTypeRecord(type)?.loadStateModel();
388
+ if (isAlive(self)) {
389
+ self.replaceDisplay(self.activeDisplay.configuration.displayId, displayId, self.activeDisplay.getPortableSettings?.(displayId) ?? {});
390
+ }
335
391
  },
336
392
  }))
337
393
  .views(self => ({
@@ -349,12 +405,12 @@ export function createBaseTrackModel(pm, trackType, baseTrackConfig) {
349
405
  },
350
406
  /**
351
407
  * #getter
352
- * What "Save track data" may pull before it asks. The adapter's own
353
- * `fetchSizeLimit` where it declares one, so a save does not quietly
354
- * disagree with the size this track's display already refuses to render;
355
- * otherwise a default. Deliberately generous — unlike the display's gate
356
- * this is a confirmation rather than a refusal, and the user asked for
357
- * these bytes by name.
408
+ * The size in bytes above which "Save track data" asks for confirmation
409
+ * before fetching. Uses the adapter's `fetchSizeLimit` where it declares
410
+ * one, so a save asks at the same size at which the track's display
411
+ * refuses to render; otherwise a default. The default is generous
412
+ * because exceeding it only prompts for confirmation, and the user
413
+ * explicitly requested the data.
358
414
  */
359
415
  get exportByteLimit() {
360
416
  return adapterByteLimit(getConf(self, ['adapter', 'fetchSizeLimit']), DEFAULT_EXPORT_BYTE_LIMIT);
@@ -413,7 +469,7 @@ export function createBaseTrackModel(pm, trackType, baseTrackConfig) {
413
469
  trackMenuItems() {
414
470
  const menuItems = self.displays.flatMap(d => d.trackMenuItems());
415
471
  const shownId = self.activeDisplay.configuration.displayId;
416
- const compatDisp = getCompatibleDisplays(self);
472
+ const compatDisp = self.compatibleDisplays;
417
473
  return [
418
474
  ...menuItems,
419
475
  ...(compatDisp.length > 1 && shownId
@@ -434,9 +490,15 @@ export function createBaseTrackModel(pm, trackType, baseTrackConfig) {
434
490
  // being replaced, so leaving the menu up would keep a
435
491
  // list of items built against a destroyed MST node
436
492
  keepMenuOpen: false,
493
+ // launchDisplay, because the chosen display's state
494
+ // model may still be a dynamic import away
437
495
  onClick: () => {
438
496
  if (d.displayId !== shownId) {
439
- self.replaceDisplay(shownId, d.displayId, self.activeDisplay.getPortableSettings?.(d.displayId) ?? {});
497
+ void self
498
+ .launchDisplay(d.displayId)
499
+ .catch((e) => {
500
+ getSession(self).notifyError(`${e}`, e);
501
+ });
440
502
  }
441
503
  },
442
504
  };
@@ -1,4 +1,5 @@
1
1
  import type { MenuItem } from '../../ui/index.ts';
2
+ import type { AbstractTrackModel, AbstractViewModel } from '../../util/types/index.ts';
2
3
  import type { Instance } from '@jbrowse/mobx-state-tree';
3
4
  /**
4
5
  * #stateModel BaseViewModel
@@ -28,7 +29,7 @@ declare const BaseViewModel: import("@jbrowse/mobx-state-tree").IModelType<{
28
29
  *
29
30
  * `ViewContainer` mounts a view's body only while an IntersectionObserver
30
31
  * says it is on screen, to hold the app under the WebGL2 context ceiling
31
- * (`reference/GPU_CONTEXT_BUDGET.md`). A view below the fold therefore has
32
+ * (`reference/GPU_PORTABILITY.md`). A view below the fold therefore has
32
33
  * no canvas, so nothing ever calls `markCanvasDrawn` and the pre-first-paint
33
34
  * term of `displayPhase` pins every display in it at `loading` with nothing
34
35
  * left to resolve it — which parks `[data-app-phase="ready"]` for the whole
@@ -46,15 +47,25 @@ declare const BaseViewModel: import("@jbrowse/mobx-state-tree").IModelType<{
46
47
  } & {
47
48
  /**
48
49
  * #getter
49
- * Whether this view's body is in the DOM, counting the views it is nested
50
- * inside — which is the question a display's phase actually asks.
50
+ * Overridable hook (default true): whether this view's mounted body
51
+ * renders its own displays. A linear genome view collapsed to its ruler
52
+ * mounts the scalebar and none of its tracks, so a display in it can no
53
+ * more paint than one in a view scrolled off screen. Views nested in this
54
+ * one are unaffected: they paint wherever their own body is.
55
+ */
56
+ readonly rendersDisplays: boolean;
57
+ /**
58
+ * #getter
59
+ * Whether this view's displays have a canvas to paint into: its body is in
60
+ * the DOM, counting the views it is nested inside, and the body renders
61
+ * them (`rendersDisplays`). This is the question a display's phase asks.
51
62
  *
52
- * `bodyMounted` alone answers it only for a view a container renders
53
- * directly. A view nested in another view (a synteny row, a breakpoint
54
- * panel) has no container writing its flag, so it reads `true` forever
55
- * while its whole subtree is out of the DOM, and every display in it waits
56
- * for a first paint that nothing will make — the hang this flag exists to
57
- * prevent, one level down.
63
+ * `bodyMounted` alone answers the DOM half only for a view a container
64
+ * renders directly. A view nested in another view (a synteny row, a
65
+ * breakpoint panel) has no container writing its flag, so it reads `true`
66
+ * forever while its whole subtree is out of the DOM, and every display in
67
+ * it waits for a first paint that nothing will make — the hang this flag
68
+ * exists to prevent, one level down.
58
69
  *
59
70
  * An ancestor that does not carry the flag at all leaves the answer alone
60
71
  * rather than excusing the paint: only an explicit `false` unmounts, so a
@@ -66,6 +77,30 @@ declare const BaseViewModel: import("@jbrowse/mobx-state-tree").IModelType<{
66
77
  * #method
67
78
  */
68
79
  menuItems(): MenuItem[];
80
+ /**
81
+ * #getter
82
+ * The tracks this view puts in the census — its own, not a nested view's.
83
+ *
84
+ * Empty here, and overridden by the views that have any: the base cannot
85
+ * read `self.tracks` for them, because what a view keeps under that name
86
+ * is the view's business. react-msaview's holds its MSA annotation rows —
87
+ * `{ReactComponent, model}` objects with no configuration and no displays
88
+ * — and a base that helped itself to them handed them to the readiness
89
+ * marker as tracks, which error-paged every session holding an MSA view.
90
+ */
91
+ readonly ownTracks: AbstractTrackModel[];
92
+ /**
93
+ * #getter
94
+ * The views nested directly inside this one, which the census counts as
95
+ * views in their own right — a synteny stack's genome rows, a breakpoint
96
+ * split view's panels.
97
+ *
98
+ * Empty here for the same reason, and the dotplot is why it has to be a
99
+ * declaration rather than a walk of `views`: that prop name holds its two
100
+ * 1D *axis* models, which are view-shaped and are not views the user
101
+ * opened. No structural test separates the two — only the view knows.
102
+ */
103
+ readonly ownViews: AbstractViewModel[];
69
104
  } & {
70
105
  /**
71
106
  * #action
@@ -134,7 +169,7 @@ export declare const BaseViewModelWithDisplayedRegions: import("@jbrowse/mobx-st
134
169
  *
135
170
  * `ViewContainer` mounts a view's body only while an IntersectionObserver
136
171
  * says it is on screen, to hold the app under the WebGL2 context ceiling
137
- * (`reference/GPU_CONTEXT_BUDGET.md`). A view below the fold therefore has
172
+ * (`reference/GPU_PORTABILITY.md`). A view below the fold therefore has
138
173
  * no canvas, so nothing ever calls `markCanvasDrawn` and the pre-first-paint
139
174
  * term of `displayPhase` pins every display in it at `loading` with nothing
140
175
  * left to resolve it — which parks `[data-app-phase="ready"]` for the whole
@@ -152,15 +187,25 @@ export declare const BaseViewModelWithDisplayedRegions: import("@jbrowse/mobx-st
152
187
  } & {
153
188
  /**
154
189
  * #getter
155
- * Whether this view's body is in the DOM, counting the views it is nested
156
- * inside — which is the question a display's phase actually asks.
190
+ * Overridable hook (default true): whether this view's mounted body
191
+ * renders its own displays. A linear genome view collapsed to its ruler
192
+ * mounts the scalebar and none of its tracks, so a display in it can no
193
+ * more paint than one in a view scrolled off screen. Views nested in this
194
+ * one are unaffected: they paint wherever their own body is.
195
+ */
196
+ readonly rendersDisplays: boolean;
197
+ /**
198
+ * #getter
199
+ * Whether this view's displays have a canvas to paint into: its body is in
200
+ * the DOM, counting the views it is nested inside, and the body renders
201
+ * them (`rendersDisplays`). This is the question a display's phase asks.
157
202
  *
158
- * `bodyMounted` alone answers it only for a view a container renders
159
- * directly. A view nested in another view (a synteny row, a breakpoint
160
- * panel) has no container writing its flag, so it reads `true` forever
161
- * while its whole subtree is out of the DOM, and every display in it waits
162
- * for a first paint that nothing will make — the hang this flag exists to
163
- * prevent, one level down.
203
+ * `bodyMounted` alone answers the DOM half only for a view a container
204
+ * renders directly. A view nested in another view (a synteny row, a
205
+ * breakpoint panel) has no container writing its flag, so it reads `true`
206
+ * forever while its whole subtree is out of the DOM, and every display in
207
+ * it waits for a first paint that nothing will make — the hang this flag
208
+ * exists to prevent, one level down.
164
209
  *
165
210
  * An ancestor that does not carry the flag at all leaves the answer alone
166
211
  * rather than excusing the paint: only an explicit `false` unmounts, so a
@@ -172,6 +217,30 @@ export declare const BaseViewModelWithDisplayedRegions: import("@jbrowse/mobx-st
172
217
  * #method
173
218
  */
174
219
  menuItems(): MenuItem[];
220
+ /**
221
+ * #getter
222
+ * The tracks this view puts in the census — its own, not a nested view's.
223
+ *
224
+ * Empty here, and overridden by the views that have any: the base cannot
225
+ * read `self.tracks` for them, because what a view keeps under that name
226
+ * is the view's business. react-msaview's holds its MSA annotation rows —
227
+ * `{ReactComponent, model}` objects with no configuration and no displays
228
+ * — and a base that helped itself to them handed them to the readiness
229
+ * marker as tracks, which error-paged every session holding an MSA view.
230
+ */
231
+ readonly ownTracks: AbstractTrackModel[];
232
+ /**
233
+ * #getter
234
+ * The views nested directly inside this one, which the census counts as
235
+ * views in their own right — a synteny stack's genome rows, a breakpoint
236
+ * split view's panels.
237
+ *
238
+ * Empty here for the same reason, and the dotplot is why it has to be a
239
+ * declaration rather than a walk of `views`: that prop name holds its two
240
+ * 1D *axis* models, which are view-shaped and are not views the user
241
+ * opened. No structural test separates the two — only the view knows.
242
+ */
243
+ readonly ownViews: AbstractViewModel[];
175
244
  } & {
176
245
  /**
177
246
  * #action