@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,14 +1,22 @@
1
1
  import type { StatusCallback } from '../util/progress.ts';
2
- import type { StopToken, StopTokenChecker } from '../util/stopToken.ts';
3
2
  import type { AugmentedRegion } from '../util/types/data.ts';
4
3
  /**
5
4
  * Which question a byte budget asks of a region set: the gate's per-region
6
5
  * budget, or the save dialog's bound on the whole download.
7
6
  */
8
7
  export type ByteEstimateScope = 'largestRegion' | 'wholeRequest';
8
+ /**
9
+ * The one spelling of a gated feature RPC's budget argument: the number the
10
+ * worker measures against, undefined when the gate declined to act and nothing
11
+ * is measured. A call-site argument, never part of `rpcProps`, because it
12
+ * swings at 20kb and on force-load.
13
+ */
14
+ export interface GatedFetchArgs {
15
+ byteLimit?: number;
16
+ }
9
17
  export interface ByteMeasurableAdapter {
10
18
  getRegionByteSize: (regions: AugmentedRegion[], opts?: {
11
- stopToken?: StopToken;
19
+ signal?: AbortSignal;
12
20
  statusCallback?: StatusCallback;
13
21
  }) => Promise<number | undefined>;
14
22
  }
@@ -21,6 +29,8 @@ export interface RegionTooLargeResult {
21
29
  regionTooLarge: true;
22
30
  featureCount?: number;
23
31
  bytes?: number;
32
+ /** `bytes` is the max over the regions that reported — {@link measurementPartial} */
33
+ partial?: boolean;
24
34
  }
25
35
  export declare function isRegionRefused(result: unknown): result is RegionTooLargeResult;
26
36
  /** Undefined, never 0, when no region could be measured. */
@@ -30,19 +40,24 @@ export declare function adapterByteLimit(declared: unknown, fallback: number): n
30
40
  export declare function overByteBudget(bytes: number | undefined, byteLimit: number | undefined): bytes is number;
31
41
  /** The bytes a fetch result reports, payload or refusal; absent means unmeasured. */
32
42
  export declare function measuredBytes(result: unknown): number | undefined;
43
+ /**
44
+ * Whether a result's `bytes` covers the whole region set it was asked about. A
45
+ * fan-out that stops at its first refusal reports whichever regions won the
46
+ * race, and `nextByteEstimate` takes no zoom evidence from one.
47
+ */
48
+ export declare function measurementPartial(result: unknown): boolean;
33
49
  /**
34
50
  * The first await of every gated feature fetch: each region's index-only byte
35
51
  * estimate, judged by the largest because the budget is per region. `bytes`
36
52
  * comes back either way; when `tooLarge` is set the caller returns it and
37
53
  * fetches nothing. No budget means no measurement.
38
54
  */
39
- export declare function measureRegionBytes({ dataAdapter, regions, byteLimit, stopToken, statusCallback, stopTokenCheck, }: {
55
+ export declare function measureRegionBytes({ dataAdapter, regions, byteLimit, signal, statusCallback, }: {
40
56
  dataAdapter: ByteMeasurableAdapter;
41
57
  regions: AugmentedRegion[];
42
58
  byteLimit: number | undefined;
43
- stopToken?: StopToken;
59
+ signal?: AbortSignal;
44
60
  statusCallback?: StatusCallback;
45
- stopTokenCheck?: StopTokenChecker;
46
61
  }): Promise<{
47
62
  bytes?: number;
48
63
  tooLarge?: RegionTooLargeResult;
@@ -1,5 +1,5 @@
1
+ import { checkAbortSignal } from '../util/aborting.js';
1
2
  import { updateStatus } from '../util/progress.js';
2
- import { checkStopTokenThrottled } from '../util/stopToken.js';
3
3
  export function isRegionRefused(result) {
4
4
  return (typeof result === 'object' && result !== null && 'regionTooLarge' in result);
5
5
  }
@@ -29,21 +29,32 @@ export function measuredBytes(result) {
29
29
  ? result.bytes
30
30
  : undefined;
31
31
  }
32
+ /**
33
+ * Whether a result's `bytes` covers the whole region set it was asked about. A
34
+ * fan-out that stops at its first refusal reports whichever regions won the
35
+ * race, and `nextByteEstimate` takes no zoom evidence from one.
36
+ */
37
+ export function measurementPartial(result) {
38
+ return (typeof result === 'object' &&
39
+ result !== null &&
40
+ 'partial' in result &&
41
+ result.partial === true);
42
+ }
32
43
  /**
33
44
  * The first await of every gated feature fetch: each region's index-only byte
34
45
  * estimate, judged by the largest because the budget is per region. `bytes`
35
46
  * comes back either way; when `tooLarge` is set the caller returns it and
36
47
  * fetches nothing. No budget means no measurement.
37
48
  */
38
- export async function measureRegionBytes({ dataAdapter, regions, byteLimit, stopToken, statusCallback, stopTokenCheck, }) {
49
+ export async function measureRegionBytes({ dataAdapter, regions, byteLimit, signal, statusCallback, }) {
39
50
  if (byteLimit === undefined) {
40
51
  return {};
41
52
  }
42
- const bytes = largestRegionBytes(await updateStatus('Checking region size', statusCallback, () => Promise.all(regions.map(region => dataAdapter.getRegionByteSize([region], {
43
- stopToken,
53
+ const bytes = largestRegionBytes(await updateStatus('Downloading index', statusCallback, () => Promise.all(regions.map(region => dataAdapter.getRegionByteSize([region], {
54
+ signal,
44
55
  statusCallback,
45
56
  })))));
46
- checkStopTokenThrottled(stopTokenCheck);
57
+ checkAbortSignal(signal);
47
58
  return overByteBudget(bytes, byteLimit)
48
59
  ? { bytes, tooLarge: { regionTooLarge: true, bytes } }
49
60
  : { bytes };
@@ -3,29 +3,15 @@
3
3
  * #category root
4
4
  */
5
5
  declare const _default: import("../configuration/configurationSchema.ts").ConfigurationSchemaType<{
6
- /**
7
- * #slot
8
- * which RPC backend to use. Empty means "use the host application's
9
- * default" (web/desktop default to the web worker driver, embedded/headless
10
- * to the main thread). Every call in the session runs on the driver this
11
- * names; there is no per-track or per-call override.
12
- */
13
6
  readonly defaultDriver: {
14
- readonly type: "string";
15
- readonly description: "the RPC driver to run data fetching on: MainThreadRpcDriver or WebWorkerRpcDriver. Leave empty to use the default for this application";
16
- readonly defaultValue: "";
17
- readonly advanced: true;
7
+ type: "string";
8
+ } & {
9
+ defaultValue: string;
18
10
  };
19
- /**
20
- * #slot
21
- * number of web workers to spawn for the web worker RPC driver. 0 lets
22
- * JBrowse pick based on hardware concurrency.
23
- */
24
11
  readonly workerCount: {
25
- readonly type: "number";
26
- readonly description: "The number of workers to use. If 0 (the default) JBrowse will decide how many workers to use.";
27
- readonly defaultValue: 0;
28
- readonly advanced: true;
12
+ type: "number";
13
+ } & {
14
+ defaultValue: number;
29
15
  };
30
- }, import("../configuration/configurationSchema.ts").ConfigurationSchemaOptions<undefined, undefined>>;
16
+ }, import("../configuration/configurationSchema.ts").ConfigurationSchemaOptions<undefined, undefined, undefined, import("../configuration/requirements.ts").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>, any>>;
31
17
  export default _default;
@@ -2,8 +2,12 @@ export { default as CoreGetRefNames } from './methods/CoreGetRefNames.ts';
2
2
  export { default as CoreGetMetadata } from './methods/CoreGetMetadata.ts';
3
3
  export { default as CoreGetInfo } from './methods/CoreGetInfo.ts';
4
4
  export { default as CoreGetFeatures } from './methods/CoreGetFeatures.ts';
5
+ export { default as CoreGetEncodedLayers } from './methods/CoreGetEncodedLayers.ts';
6
+ export { default as CoreGetEncodedFeature } from './methods/CoreGetEncodedFeature.ts';
5
7
  export { default as CoreGetSequence } from './methods/CoreGetSequence.ts';
6
8
  export { default as CoreFreeResources } from './methods/CoreFreeResources.ts';
9
+ export { default as CoreLoadAdapterCode } from './methods/CoreLoadAdapterCode.ts';
7
10
  export { default as CoreGetRegionByteEstimate } from './methods/CoreGetRegionByteEstimate.ts';
11
+ export { default as CoreGetFeatureDensity } from './methods/CoreGetFeatureDensity.ts';
8
12
  export { default as CoreGetRegions } from './methods/CoreGetRegions.ts';
9
13
  export { default as CoreGetExportData } from './methods/CoreGetExportData.ts';
@@ -2,8 +2,12 @@ export { default as CoreGetRefNames } from './methods/CoreGetRefNames.js';
2
2
  export { default as CoreGetMetadata } from './methods/CoreGetMetadata.js';
3
3
  export { default as CoreGetInfo } from './methods/CoreGetInfo.js';
4
4
  export { default as CoreGetFeatures } from './methods/CoreGetFeatures.js';
5
+ export { default as CoreGetEncodedLayers } from './methods/CoreGetEncodedLayers.js';
6
+ export { default as CoreGetEncodedFeature } from './methods/CoreGetEncodedFeature.js';
5
7
  export { default as CoreGetSequence } from './methods/CoreGetSequence.js';
6
8
  export { default as CoreFreeResources } from './methods/CoreFreeResources.js';
9
+ export { default as CoreLoadAdapterCode } from './methods/CoreLoadAdapterCode.js';
7
10
  export { default as CoreGetRegionByteEstimate } from './methods/CoreGetRegionByteEstimate.js';
11
+ export { default as CoreGetFeatureDensity } from './methods/CoreGetFeatureDensity.js';
8
12
  export { default as CoreGetRegions } from './methods/CoreGetRegions.js';
9
13
  export { default as CoreGetExportData } from './methods/CoreGetExportData.js';
@@ -0,0 +1,13 @@
1
+ import RpcMethodTypeWithRenameRegion from '../../pluggableElementTypes/RpcMethodTypeWithRenameRegion.ts';
2
+ import type { RpcExecuteArgs } from '../RpcRegistry.ts';
3
+ /**
4
+ * The feature behind one instance of a `CoreGetEncodedLayers` answer: the same
5
+ * request run again, and the row of `layer`'s table the instance's
6
+ * `featureIndex` names. A display holds channels and no records, and two reads
7
+ * sharing a span, a run counted inside one facet section or a mark whose `x` is
8
+ * not `start` are each a feature no coordinate lookup finds.
9
+ */
10
+ export default class CoreGetEncodedFeature extends RpcMethodTypeWithRenameRegion<'CoreGetEncodedFeature'> {
11
+ name: 'CoreGetEncodedFeature';
12
+ execute(args: RpcExecuteArgs<'CoreGetEncodedFeature'>): Promise<import("../../util/simpleFeature.ts").SimpleFeatureSerialized | undefined>;
13
+ }
@@ -0,0 +1,32 @@
1
+ import { getFeatureAdapterOrThrow } from '../../data_adapters/getFeatureAdapter.js';
2
+ import RpcMethodTypeWithRenameRegion from '../../pluggableElementTypes/RpcMethodTypeWithRenameRegion.js';
3
+ import { layerFeatures } from './layerFeatures.js';
4
+ /**
5
+ * The feature behind one instance of a `CoreGetEncodedLayers` answer: the same
6
+ * request run again, and the row of `layer`'s table the instance's
7
+ * `featureIndex` names. A display holds channels and no records, and two reads
8
+ * sharing a span, a run counted inside one facet section or a mark whose `x` is
9
+ * not `start` are each a feature no coordinate lookup finds.
10
+ */
11
+ export default class CoreGetEncodedFeature extends RpcMethodTypeWithRenameRegion {
12
+ name = 'CoreGetEncodedFeature';
13
+ async execute(args) {
14
+ const { layer, featureIndex } = args;
15
+ const asked = args.layers[layer];
16
+ if (!asked) {
17
+ return undefined;
18
+ }
19
+ const { pluginManager } = this;
20
+ const dataAdapter = await getFeatureAdapterOrThrow({
21
+ ...args,
22
+ pluginManager,
23
+ });
24
+ // A layer's list does not depend on its neighbours, so only the one asked
25
+ // about runs its steps.
26
+ const { layers } = await layerFeatures(dataAdapter, { ...args, layers: [asked] }, pluginManager.jexl);
27
+ const table = layers[0]?.table;
28
+ return table && featureIndex < table.length
29
+ ? table.row(featureIndex).toJSON()
30
+ : undefined;
31
+ }
32
+ }
@@ -0,0 +1,16 @@
1
+ import RpcMethodTypeWithRenameRegion from '../../pluggableElementTypes/RpcMethodTypeWithRenameRegion.ts';
2
+ import type { EncodedLayersResult } from '../../util/markEncoding.ts';
3
+ import type { RpcExecuteArgs } from '../RpcRegistry.ts';
4
+ /**
5
+ * Fetch a region's features once, run the shared transform steps over them,
6
+ * split them by the facet where the request names one, run each layer's own
7
+ * steps (per section, under a facet), and evaluate the layer's encoding over
8
+ * what is left in the worker, where the `Feature` objects are, filling the
9
+ * lanes its mark reads. The colours come back packed, the scale tables
10
+ * resolved, and the main thread reads the same table for its legend that the
11
+ * colours were drawn from.
12
+ */
13
+ export default class CoreGetEncodedLayers extends RpcMethodTypeWithRenameRegion<'CoreGetEncodedLayers'> {
14
+ name: 'CoreGetEncodedLayers';
15
+ execute(args: RpcExecuteArgs<'CoreGetEncodedLayers'>): Promise<import("../byteBudget.ts").RegionTooLargeResult | import("../RpcServer.ts").RpcResult<EncodedLayersResult>>;
16
+ }
@@ -0,0 +1,59 @@
1
+ import { getFeatureAdapterOrThrow } from '../../data_adapters/getFeatureAdapter.js';
2
+ import RpcMethodTypeWithRenameRegion from '../../pluggableElementTypes/RpcMethodTypeWithRenameRegion.js';
3
+ import { rpcResult } from '../../util/librpc.js';
4
+ import { encodeFeatures, encodedChannelTransferables, } from '../../util/markEncoding.js';
5
+ import { createProgressReporter } from '../../util/progress.js';
6
+ import { measureRegionBytes } from '../byteBudget.js';
7
+ import { layerFeatures } from './layerFeatures.js';
8
+ /**
9
+ * Fetch a region's features once, run the shared transform steps over them,
10
+ * split them by the facet where the request names one, run each layer's own
11
+ * steps (per section, under a facet), and evaluate the layer's encoding over
12
+ * what is left in the worker, where the `Feature` objects are, filling the
13
+ * lanes its mark reads. The colours come back packed, the scale tables
14
+ * resolved, and the main thread reads the same table for its legend that the
15
+ * colours were drawn from.
16
+ */
17
+ export default class CoreGetEncodedLayers extends RpcMethodTypeWithRenameRegion {
18
+ name = 'CoreGetEncodedLayers';
19
+ async execute(args) {
20
+ const { region, layers: requested, byteLimit, signal, statusCallback, } = args;
21
+ const { pluginManager } = this;
22
+ const dataAdapter = await getFeatureAdapterOrThrow({
23
+ ...args,
24
+ pluginManager,
25
+ });
26
+ const { bytes, tooLarge } = await measureRegionBytes({
27
+ dataAdapter,
28
+ regions: [region],
29
+ byteLimit,
30
+ signal,
31
+ statusCallback,
32
+ });
33
+ if (tooLarge) {
34
+ return tooLarge;
35
+ }
36
+ const { jexl } = pluginManager;
37
+ const { layers: layered, sections, zoomRange, notices, } = await layerFeatures(dataAdapter, args, jexl);
38
+ const layers = requested.map((request, i) => {
39
+ const { table, row } = layered[i];
40
+ return encodeFeatures(table, { ...request.encoding, row }, request.lanes, {
41
+ jexl,
42
+ report: createProgressReporter({
43
+ label: 'Processing features',
44
+ total: table.length,
45
+ statusCallback,
46
+ signal,
47
+ }),
48
+ });
49
+ });
50
+ const result = {
51
+ layers,
52
+ facet: sections,
53
+ bytes,
54
+ zoomRange,
55
+ ...(notices.length > 0 ? { notices } : {}),
56
+ };
57
+ return rpcResult(result, layers.flatMap(l => encodedChannelTransferables(l)));
58
+ }
59
+ }
@@ -3,11 +3,10 @@ import RpcMethodTypeWithRenameRegions from '../../pluggableElementTypes/RpcMetho
3
3
  export default class CoreGetExportData extends RpcMethodTypeWithRenameRegions {
4
4
  name = 'CoreGetExportData';
5
5
  async execute(args) {
6
- const { sessionId, adapterConfig, regions, formatType, opts, stopToken, statusCallback, } = args;
6
+ const { regions, formatType, opts, signal, statusCallback } = args;
7
7
  const dataAdapter = await getFeatureAdapterOrThrow({
8
+ ...args,
8
9
  pluginManager: this.pluginManager,
9
- sessionId,
10
- adapterConfig,
11
10
  });
12
11
  // The handles go down to the adapter, which is the whole point of the
13
12
  // Save-track-data dialog having a cancel button and a progress label: an
@@ -22,7 +21,7 @@ export default class CoreGetExportData extends RpcMethodTypeWithRenameRegions {
22
21
  // empty file instead.
23
22
  return dataAdapter.getExportData(regions, formatType, {
24
23
  ...opts,
25
- stopToken,
24
+ signal,
26
25
  statusCallback,
27
26
  });
28
27
  }
@@ -0,0 +1,11 @@
1
+ import RpcMethodTypeWithRenameRegions from '../../pluggableElementTypes/RpcMethodTypeWithRenameRegions.ts';
2
+ import type { RpcExecuteArgs } from '../RpcRegistry.ts';
3
+ /**
4
+ * The density tier's read: features per bin at the view's bp/px for regions the
5
+ * region-too-large gate refused. Answers `undefined` for an adapter with no
6
+ * density source, and the display keeps the banner.
7
+ */
8
+ export default class CoreGetFeatureDensity extends RpcMethodTypeWithRenameRegions<'CoreGetFeatureDensity'> {
9
+ name: 'CoreGetFeatureDensity';
10
+ execute(args: RpcExecuteArgs<'CoreGetFeatureDensity'>): Promise<import("../../data_adapters/BaseAdapter/featureDensity.ts").FeatureDensity[] | undefined>;
11
+ }
@@ -0,0 +1,22 @@
1
+ import { isFeatureAdapter } from '../../data_adapters/BaseAdapter/index.js';
2
+ import { getAdapter } from '../../data_adapters/dataAdapterCache.js';
3
+ import RpcMethodTypeWithRenameRegions from '../../pluggableElementTypes/RpcMethodTypeWithRenameRegions.js';
4
+ /**
5
+ * The density tier's read: features per bin at the view's bp/px for regions the
6
+ * region-too-large gate refused. Answers `undefined` for an adapter with no
7
+ * density source, and the display keeps the banner.
8
+ */
9
+ export default class CoreGetFeatureDensity extends RpcMethodTypeWithRenameRegions {
10
+ name = 'CoreGetFeatureDensity';
11
+ async execute(args) {
12
+ const { adapterConfig, sessionId, regions, bpPerPx, signal } = args;
13
+ const { dataAdapter } = await getAdapter(this.pluginManager, sessionId, adapterConfig, args.sequenceAdapter);
14
+ return isFeatureAdapter(dataAdapter)
15
+ ? dataAdapter.getFeatureDensity(regions, {
16
+ bpPerPx,
17
+ signal,
18
+ statusCallback: args.statusCallback,
19
+ })
20
+ : undefined;
21
+ }
22
+ }
@@ -10,18 +10,16 @@ export default class CoreGetFeatures extends RpcMethodTypeWithRenameRegions {
10
10
  return unwrapRpcResult(feats).map(feat => new SimpleFeature(feat));
11
11
  }
12
12
  async execute(args) {
13
- const { stopToken, statusCallback, sessionId, adapterConfig, sequenceAdapter, regions, opts, } = args;
13
+ const { signal, statusCallback, regions, opts } = args;
14
14
  const dataAdapter = await getFeatureAdapterOrThrow({
15
+ ...args,
15
16
  pluginManager: this.pluginManager,
16
- sessionId,
17
- adapterConfig,
18
- sequenceAdapter,
19
17
  });
20
18
  const r = await firstValueFrom(dataAdapter
21
19
  .getFeaturesInMultipleRegions(regions, {
22
20
  ...opts,
23
21
  statusCallback,
24
- stopToken,
22
+ signal,
25
23
  })
26
24
  .pipe(toArray()));
27
25
  return r.map(f => f.toJSON());
@@ -1,21 +1,11 @@
1
- import { isFeatureAdapter, isRefNameSource, } from '../../data_adapters/BaseAdapter/util.js';
1
+ import { isRefNameSource } from '../../data_adapters/BaseAdapter/util.js';
2
2
  import { getAdapter } from '../../data_adapters/dataAdapterCache.js';
3
3
  import RpcMethodType from '../../pluggableElementTypes/RpcMethodType.js';
4
4
  export default class CoreGetRefNames extends RpcMethodType {
5
5
  name = 'CoreGetRefNames';
6
6
  async execute(args) {
7
7
  const { sessionId, adapterConfig, sequenceAdapter } = args;
8
- const { dataAdapter } = await getAdapter(this.pluginManager, sessionId, adapterConfig);
9
- // Primes BEFORE it asks: a ReferenceScanAdapter answers `getRefNames` by
10
- // asking the reference, and this line is what tells it where that is.
11
- // Pinned by sequenceAdapterPriming.test.ts, because reversing the two left
12
- // 3,015 tests green.
13
- //
14
- // The one call that still passes `sequenceAdapter` by hand — it is what
15
- // `renameRegionsIfNeeded` CALLS, so the derivation cannot reach it.
16
- if (isFeatureAdapter(dataAdapter)) {
17
- dataAdapter.setSequenceAdapterConfig(sequenceAdapter);
18
- }
8
+ const { dataAdapter } = await getAdapter(this.pluginManager, sessionId, adapterConfig, sequenceAdapter);
19
9
  // Gated on isRefNameSource rather than isFeatureAdapter: any adapter that
20
10
  // can name its own contigs needs them reconciled with the assembly's,
21
11
  // whether or not it serves features. PlinkLDTabixAdapter serves precomputed
@@ -6,7 +6,7 @@ export default class CoreGetRegionByteEstimate extends RpcMethodTypeWithRenameRe
6
6
  name = 'CoreGetRegionByteEstimate';
7
7
  async execute(args) {
8
8
  const { adapterConfig, sessionId, regions, scope } = args;
9
- const { dataAdapter } = await getAdapter(this.pluginManager, sessionId, adapterConfig);
9
+ const { dataAdapter } = await getAdapter(this.pluginManager, sessionId, adapterConfig, args.sequenceAdapter);
10
10
  // "Unmeasurable", not an error: the gate reads undefined as "no byte axis".
11
11
  if (!isFeatureAdapter(dataAdapter)) {
12
12
  return undefined;
@@ -6,11 +6,11 @@ import RpcMethodType from '../../pluggableElementTypes/RpcMethodType.js';
6
6
  export default class CoreGetSequence extends RpcMethodType {
7
7
  name = 'CoreGetSequence';
8
8
  async execute(args) {
9
- const { stopToken, statusCallback, sessionId, adapterConfig, region } = args;
9
+ const { signal, statusCallback, sessionId, adapterConfig, region } = args;
10
10
  const { dataAdapter } = await getAdapter(this.pluginManager, sessionId, adapterConfig);
11
11
  if (!isSequenceAdapter(dataAdapter)) {
12
12
  throw new Error('Adapter does not support retrieving sequences');
13
13
  }
14
- return dataAdapter.getSequence(region, { stopToken, statusCallback });
14
+ return dataAdapter.getSequence(region, { signal, statusCallback });
15
15
  }
16
16
  }
@@ -0,0 +1,13 @@
1
+ import RpcMethodType from '../../pluggableElementTypes/RpcMethodType.ts';
2
+ import type { RpcExecuteArgs } from '../RpcRegistry.ts';
3
+ /**
4
+ * Load these adapter types' code in the worker a track is about to use. An
5
+ * adapter's class arrives by dynamic import on the track's first request
6
+ * otherwise, and that download waits for the view to lay out and the assembly
7
+ * to load.
8
+ */
9
+ export default class CoreLoadAdapterCode extends RpcMethodType<'CoreLoadAdapterCode'> {
10
+ name: 'CoreLoadAdapterCode';
11
+ execute({ adapterTypes }: RpcExecuteArgs<'CoreLoadAdapterCode'>): Promise<void>;
12
+ serializeArguments(args: Record<string, unknown>): Promise<Record<string, unknown>>;
13
+ }
@@ -0,0 +1,16 @@
1
+ import RpcMethodType from '../../pluggableElementTypes/RpcMethodType.js';
2
+ /**
3
+ * Load these adapter types' code in the worker a track is about to use. An
4
+ * adapter's class arrives by dynamic import on the track's first request
5
+ * otherwise, and that download waits for the view to lay out and the assembly
6
+ * to load.
7
+ */
8
+ export default class CoreLoadAdapterCode extends RpcMethodType {
9
+ name = 'CoreLoadAdapterCode';
10
+ async execute({ adapterTypes }) {
11
+ await Promise.all(adapterTypes.map(type => this.pluginManager.getAdapterType(type).getAdapterClass()));
12
+ }
13
+ async serializeArguments(args) {
14
+ return args;
15
+ }
16
+ }
@@ -0,0 +1,33 @@
1
+ import type { BaseFeatureDataAdapter } from '../../data_adapters/BaseAdapter/index.ts';
2
+ import type { FeatureTable } from '../../util/featureTable.ts';
3
+ import type { JexlInstance } from '../../util/jexlStrings.ts';
4
+ import type { CoreGetEncodedLayersArgs, FieldRef } from '../../util/markEncodingTypes.ts';
5
+ import type { StatusCallback } from '../../util/progress.ts';
6
+ /**
7
+ * One layer of a request as the encoder takes it: its rows, and the row of the
8
+ * plot each stands in — the field the layer reads, or under a facet each
9
+ * row's stacked row.
10
+ */
11
+ export interface LayerFeatures {
12
+ table: FeatureTable;
13
+ row: FieldRef | ArrayLike<number> | undefined;
14
+ }
15
+ /**
16
+ * The table each layer of a `CoreGetEncodedLayers` request encodes: the
17
+ * region's features through the shared steps, split by the facet where the
18
+ * request names one, then through each layer's own steps, with each faceted
19
+ * layer's stacked rows beside it. An instance's `featureIndex` indexes its
20
+ * layer's table, so the same request answers which row an instance is.
21
+ */
22
+ export declare function layerFeatures(dataAdapter: BaseFeatureDataAdapter, args: Pick<CoreGetEncodedLayersArgs, 'region' | 'layers' | 'transform' | 'facet' | 'bpPerPx' | 'opts'> & {
23
+ signal?: AbortSignal;
24
+ statusCallback?: StatusCallback;
25
+ }, jexl: JexlInstance): Promise<{
26
+ layers: {
27
+ table: FeatureTable;
28
+ row: FieldRef | Uint32Array | undefined;
29
+ }[];
30
+ sections: import("../../util/markEncodingTypes.ts").FacetSection[] | undefined;
31
+ zoomRange: import("../../data_adapters/BaseAdapter/zoomRange.ts").ZoomRange | undefined;
32
+ notices: string[];
33
+ }>;
@@ -0,0 +1,29 @@
1
+ import { checkAbortSignal } from '../../util/aborting.js';
2
+ import { layerTables } from '../../util/featureTransforms.js';
3
+ import { updateStatus } from '../../util/progress.js';
4
+ /**
5
+ * The table each layer of a `CoreGetEncodedLayers` request encodes: the
6
+ * region's features through the shared steps, split by the facet where the
7
+ * request names one, then through each layer's own steps, with each faceted
8
+ * layer's stacked rows beside it. An instance's `featureIndex` indexes its
9
+ * layer's table, so the same request answers which row an instance is.
10
+ */
11
+ export async function layerFeatures(dataAdapter, args, jexl) {
12
+ const { region, layers: requested, transform = [], facet, bpPerPx, opts, signal, statusCallback, } = args;
13
+ const notices = [];
14
+ const fetchOpts = { ...opts, bpPerPx, statusCallback, signal, notices };
15
+ const [fetched, zoomRange] = await updateStatus('Downloading features', statusCallback, () => Promise.all([
16
+ dataAdapter.getFeatureTable(region, fetchOpts),
17
+ dataAdapter.getZoomRange(fetchOpts),
18
+ ]));
19
+ checkAbortSignal(signal);
20
+ const { layers, sections } = layerTables(fetched, {
21
+ transform,
22
+ facet,
23
+ layers: requested.map(r => ({
24
+ transform: r.transform,
25
+ row: r.encoding.row,
26
+ })),
27
+ }, jexl);
28
+ return { layers, sections, zoomRange, notices };
29
+ }
@@ -3,14 +3,14 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
3
3
  // the linear-genome-view plugin. Non-component members live in sibling files
4
4
  // (`constants.ts`, `svgReady.ts`) so this stays component-only for
5
5
  // react-refresh.
6
- import { useTheme } from '@mui/material';
7
- import { stripAlpha } from '../util/index.js';
6
+ import { usePalette } from '../ui/PaletteContext.js';
7
+ import { stripAlpha } from '../util/svgColorProps.js';
8
8
  import { exportMargin } from './constants.js';
9
9
  import { svgSafeId } from './svgId.js';
10
10
  // Full-bleed background rect. `width`/`height` are the *total* SVG dimensions.
11
11
  export function SVGBackground({ width, height, }) {
12
- const theme = useTheme();
13
- return (_jsx("rect", { width: width, height: height, fill: stripAlpha(theme.palette.background.default) }));
12
+ const palette = usePalette();
13
+ return (_jsx("rect", { width: width, height: height, fill: stripAlpha(palette.background.default) }));
14
14
  }
15
15
  // Root <svg> for an image export. Owns the xmlns/viewBox boilerplate, widens
16
16
  // the canvas by `margin` on each side, and paints the themed background.
@@ -36,9 +36,8 @@ export function SVGMessageBox({ message, width, height, }) {
36
36
  // terminal state itself — a "region too large" message — and only paints the
37
37
  // children when the display has renderable data. The body is an ordinary child
38
38
  // component, so it never runs in a terminal state and no `renderSvg` re-detects
39
- // one from empty/absent data. The readiness wait stays an explicit
40
- // `await awaitSvgReady(model)` in each `renderSvg` (the one genuinely async
41
- // step), so this component is sync.
39
+ // one from empty/absent data. The readiness wait happens before it, in
40
+ // `renderDisplaySvg` (the one genuinely async step), so this component is sync.
42
41
  //
43
42
  // One terminal, not two, and the asymmetry is the point: over-budget is a state
44
43
  // the user navigated to on purpose, and a figure saying so is the honest export
@@ -0,0 +1,12 @@
1
+ import type { ThemeOptions } from '@mui/material';
2
+ /**
3
+ * Both theme providers, from the export's theme options. An export renders
4
+ * outside every React tree the app mounted, so without them a `useTheme` body
5
+ * gets MUI's default theme and a `usePalette` or `makeStyles` one JBrowse's
6
+ * default light style theme — whatever theme the user picked. Every place an
7
+ * export tree is rendered mounts this: the file, a live figure, a ring strip.
8
+ */
9
+ export declare function SvgThemeProviders({ theme, children, }: {
10
+ theme: ThemeOptions | undefined;
11
+ children: React.ReactNode;
12
+ }): import("react").JSX.Element;
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { ThemeProvider } from '@mui/material';
3
+ import { StyleThemeProvider } from '../ui/PaletteContext.js';
4
+ import { resolveStyleTheme } from '../ui/styleTheme.js';
5
+ import { createJBrowseTheme } from '../ui/theme.js';
6
+ /**
7
+ * Both theme providers, from the export's theme options. An export renders
8
+ * outside every React tree the app mounted, so without them a `useTheme` body
9
+ * gets MUI's default theme and a `usePalette` or `makeStyles` one JBrowse's
10
+ * default light style theme — whatever theme the user picked. Every place an
11
+ * export tree is rendered mounts this: the file, a live figure, a ring strip.
12
+ */
13
+ export function SvgThemeProviders({ theme, children, }) {
14
+ return (_jsx(ThemeProvider, { theme: createJBrowseTheme(theme), children: _jsx(StyleThemeProvider, { theme: resolveStyleTheme({ configTheme: theme }), children: children }) }));
15
+ }
@@ -0,0 +1,28 @@
1
+ import type { SvgRasterCanvasOpts } from '../util/createSvgRasterCanvas.ts';
2
+ import type React from 'react';
3
+ /** What every view's `exportSvg` accepts. A view with more extends it. */
4
+ export interface ViewExportSvgOptions extends SvgRasterCanvasOpts {
5
+ rasterizeLayers?: boolean;
6
+ format?: 'svg' | 'png';
7
+ filename?: string;
8
+ /**
9
+ * Whether to hand the result to the browser's download path. Default true,
10
+ * which is the dialog. False returns the markup and writes nothing — the
11
+ * caller has somewhere of its own to put it, and a download it did not ask
12
+ * for would land beside that under a name it did not choose.
13
+ */
14
+ save?: boolean;
15
+ Wrapper?: React.FC<{
16
+ children: React.ReactNode;
17
+ }>;
18
+ /** a named theme; the session's active one when absent */
19
+ themeName?: string;
20
+ fontFamily?: string;
21
+ }
22
+ /**
23
+ * The body of every view's `exportSvg` action: load the view's lazy
24
+ * `renderToSvg`, render, save unless `save: false`, and return the markup.
25
+ */
26
+ export declare function exportViewSvg<V, O extends ViewExportSvgOptions>(view: V, opts: O, load: () => Promise<{
27
+ renderToSvg: (view: V, opts: O) => Promise<string>;
28
+ }>): Promise<string>;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * The body of every view's `exportSvg` action: load the view's lazy
3
+ * `renderToSvg`, render, save unless `save: false`, and return the markup.
4
+ */
5
+ export async function exportViewSvg(view, opts, load) {
6
+ const { renderToSvg } = await load();
7
+ const html = await renderToSvg(view, opts);
8
+ if (opts.save !== false) {
9
+ const { saveSvgAsImage } = await import('./saveSvgAsImage.js');
10
+ await saveSvgAsImage(html, opts);
11
+ }
12
+ return html;
13
+ }