@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
package/esm/util/index.js CHANGED
@@ -12,7 +12,7 @@ export { capitalizeFirst, pluralize, shorten, shorten2, truncateMiddle, } from '
12
12
  export { formatBytes } from './formatBytes.js';
13
13
  export { getFillProps, getStrokeProps, stripAlpha } from './svgColorProps.js';
14
14
  export { fetchAndMaybeUnzip, fetchAndMaybeUnzipText, isGzip, } from './fetchAndMaybeUnzip.js';
15
- export { AuthNeededError, addOrReplaceView, canReplaceView, isAbstractMenuManager, isAppRootModel, isAuthNeededException, isBlobLocation, isDisplayModel, isFileHandleLocation, isLocalPathLocation, isRootModelWithInternetAccounts, isSelectionContainer, isSessionModel, isSessionServices, isSessionModelWithConfigEditing, isSessionModelWithConnectionEditing, isSessionModelWithConnections, isSessionModelWithWidgets, isSessionWithAddAssembly, isSessionWithAddSessionTrack, isSessionWithAddTracks, isSessionWithPublishTrackConf, isSessionWithDeleteTrackConf, isSessionWithPermanentPlugins, isSessionWithSessionPlugins, isSessionWithSessionTracks, isSessionWithShareURL, isSessionWithViewReplacement, isTrackModel, isTrackViewModel, isUriLocation, isViewContainer, isViewModel, } from './types/index.js';
15
+ export { AuthNeededError, addOrReplaceView, canReplaceView, isAbstractMenuManager, isAppRootModel, isAuthNeededException, isBlobLocation, isDisplayModel, isFileHandleLocation, isLocalPathLocation, isRootModelWithInternetAccounts, isSelectionContainer, isSessionModel, isSessionServices, isSessionModelWithConfigEditing, isSessionModelWithConnectionEditing, isSessionModelWithConnections, isSessionModelWithWidgets, isSessionWithAddAssembly, isSessionWithAddSessionTrack, isSessionWithAddTracks, isSessionWithPublishTrackConf, isSessionWithDeleteTrackConf, isSessionWithMultipleViews, isSessionWithPermanentPlugins, isSessionWithSessionPlugins, isSessionWithSessionTracks, isSessionWithShareURL, isSessionWithViewReplacement, isTrackModel, isTrackViewModel, isUriLocation, isViewContainer, isViewModel, } from './types/index.js';
16
16
  export { getPluginUpdate, installablePlugins, installedVersionFromUrl, isPluginInstalled, resolvePlugin, resolveStorePluginRefs, resolveStoreRefs, } from './pluginStore.js';
17
17
  export { createProgressReporter, createStatusFanOut, createStatusWindow, downloadStatus, progressLabel, statusFraction, statusMessageText, statusProgressLabel, statusReading, statusSource, throttleStatusEmits, updateStatus, withProgress, } from './progress.js';
18
18
  export { calculateRedispatchRange, doesIntersect2, intersection2, } from './range.js';
@@ -29,11 +29,11 @@ export { MAX_ZOOM_RATE_PER_MS, SCROLL_ZOOM_FACTOR_DIVISOR, ZOOM_ACTIVE_WINDOW_MS
29
29
  export { avg, clamp, getDisplayStr, getNumberGrouping, max, maxFinite, min, minmax, polarToCartesian, radToDeg, reducePrecision, setNumberGrouping, sum, toLocale, } from './numericUtils.js';
30
30
  export { bpSpanPx, bpToPx, bytesForRegions, featureSpanPx, getBpDisplayStr, getTickDisplayStr, parseBpString, } from './bpUtils.js';
31
31
  export { gatherOverlaps, mergeIntervals, } from './intervals.js';
32
- export { clampToContig } from './clampToContig.js';
33
- export { animationAllowed } from './animationAllowed.js';
32
+ export { clampToContig, clampToListedContig } from './clampToContig.js';
33
+ export { MORPH_DURATION_MS, animationAllowed, easeInOutCubic, morphClockMs, } from './animationAllowed.js';
34
34
  export { springAnimate } from './springAnimate.js';
35
35
  export { localStorageAvailable, localStorageGetBoolean, localStorageGetItem, localStorageGetJSON, localStorageGetNumber, localStorageGetStringArray, localStorageRemoveItem, localStorageSetBoolean, localStorageSetItem, localStorageSetJSON, localStorageSetNumber, notifyLocalStorageKey, subscribeToLocalStorageKey, } from './localStorage.js';
36
- export { renameRegionIfNeeded, renameRegionsIfNeeded } from './renameRegions.js';
36
+ export { renameComparativeRegions, renameRegionIfNeeded, renameRegionsIfNeeded, } from './renameRegions.js';
37
37
  export { addAndShowTrack } from './addAndShowTrack.js';
38
38
  export { addTrackFromWidget, containerDisplaysAssembly, finishAddTrack, } from './addTrackFromWidget.js';
39
39
  export { namesTemporaryAssembly } from './temporaryAssembly.js';
@@ -44,7 +44,6 @@ export { indexedDBAvailable, isElectron, isNode, rIC } from './environment.js';
44
44
  export { isWebWorker } from './isWebWorker.js';
45
45
  export { sessionStorageAvailable, sessionStorageGetItem, sessionStorageRemoveItem, sessionStorageSetItem, } from './sessionStorage.js';
46
46
  export { isObject } from './objectUtils.js';
47
- export { openPromotableDisplays } from './openDisplays.js';
48
47
  export { applyOrderWithin, reorder, reorderWithin, } from './reorder.js';
49
48
  export { getStr } from './getStr.js';
50
49
  export { downloadPhase, getLocationUri, resolveUri } from './getLocationUri.js';
@@ -53,7 +52,7 @@ export { isRpcResult } from './rpc.js';
53
52
  export { aesDecrypt, aesEncrypt, sha256, sha256Base64, sha256Base64Url, toBase64, toBase64Url, } from './crypto.js';
54
53
  export { notifyFeatureDetailsMiss, openFeatureWidget, } from './openFeatureWidget.js';
55
54
  export { withFeatureDetails } from './withFeatureDetails.js';
56
- export { canonicalizeViewRefName, findParentThat, findParentThatIs, getAssemblyHost, getContainingDisplay, getContainingTrack, getContainingView, getEnv, getRenderingServices, getSession, hashCode, objectHash, } from './mstUtils.js';
55
+ export { canonicalizeViewRefName, findParentThat, findParentThatIs, getAssemblyHost, getContainingDisplay, getContainingTrack, getContainingView, getEnv, getRenderingServices, launchOrReplaceView, getSession, hashCode, objectHash, } from './mstUtils.js';
57
56
  export { getDialogHost, getNotificationSink, getPaletteHost, getRpcHost, getSessionServices, } from './sessionServices.js';
58
57
  // this is recommended in a later comment in
59
58
  // https://github.com/electron/electron/issues/2288 for detecting electron in a
@@ -91,7 +90,6 @@ export { revlist } from './revlist.js';
91
90
  // without it that is `(0, PR.useLocalStorage) is not a function` when the panel
92
91
  // renders. The implementations never went anywhere -- only these lines did.
93
92
  export { useCreateOnce, useDebounce, useFinalUnmount, useLocalStorage, useWidthSetter, } from './hooks.js';
94
- export { renderToStaticMarkup } from './renderToStaticMarkup.js';
95
93
  export { codonTable, defaultCodonTable, generateCodonTable, } from './geneticCodes.js';
96
94
  export { IUPAC_MOTIF_REGEX, isPalindromic, iupacToRegex, reverseComplementIupac, } from './iupac.js';
97
95
  export { parseMotifList, } from './parseMotifList.js';
@@ -121,6 +119,7 @@ export function isSupportedIndexingAdapter(type = '') {
121
119
  // needing insertion order builds its own Map (see tree-sidebar's CLAUDE.md).
122
120
  export function groupBy(array, predicate) {
123
121
  const result = Object.create(null);
122
+ // eslint-disable-next-line unicorn/prefer-group-by -- Object.groupBy types its result Partial, which would widen every caller's Object.values to `T[] | undefined`
124
123
  for (const value of array) {
125
124
  const t = predicate(value);
126
125
  result[t] ??= [];
@@ -137,17 +136,19 @@ export function testAdapter(fileName, regex, adapterHint, expected) {
137
136
  export { default as SimpleFeature, isFeature, } from './simpleFeature.js';
138
137
  export { saveAs } from './FileSaver/index.js';
139
138
  export { saveSvgAsImage, svgHtmlToPngBlob, } from '../svg/saveSvgAsImage.js';
140
- export { createStatusChannel, createStopTokenRotation, } from './createStopTokenRotation.js';
139
+ export { createStatusChannel, createAbortRotation, } from './createAbortRotation.js';
141
140
  // `installFetch` is deliberately NOT re-exported here: it reaches `getSession`
142
141
  // through `fetchContext.ts`, which imports this barrel, so exporting it makes
143
142
  // the barrel initialize itself. Import it from `@jbrowse/core/util/installFetch`.
144
143
  export { createSharedSetup } from './cachedSetup.js';
144
+ export { scheduleDetachedDestroy } from './scheduleDetachedDestroy.js';
145
145
  export { isDataCurrent } from './isDataCurrent.js';
146
146
  export { handleFetchError, isAbortException, makeAbortError, } from './aborting.js';
147
147
  export { linkify } from './linkify.js';
148
+ export { isGeneLikeType, isSequenceMatchType } from './featureTypes.js';
148
149
  export { locStringsToRegions } from './locStringsToRegions.js';
149
150
  export { UnknownRefNameError, assembleLocString, assembleLocStringRaw, assembleLocStrings, compareLocStrings, compareLocs, parseLocString, parseLocStringOneBased, stringify, } from './locString.js';
150
- export { checkStopToken, checkStopTokenThrottled, createStopToken, createStopTokenChecker, hasSharedArrayBuffer, isStopToken, isStopped, markStopTokenStopped, registerStopTokenBroadcaster, stopStopToken, stopTokenSignal, withStopTokenCheck, withStopTokenSignal, } from './stopToken.js';
151
+ export { checkAbortSignal, createAbortBreakpoint, withAbortCheck, } from './aborting.js';
151
152
  export { adapterNeedsAddTrackComponent, addAddTrackComponent, } from './addTrackComponent.js';
152
153
  export { adapterConfigFromSpec } from './formatGuessers.js';
153
154
  export { UNKNOWN, UNSUPPORTED, addAdapterGuesser, addTrackTypeGuesser, clearFileFromCache, ensureFileHandleReady, expandLooseTrackConfig, findFileHandleIds, generateUnknownTrackConf, generateUnsupportedTrackConf, getBlob, getBlobMap, getConfAssemblyNames, getFileFromCache, getFileName, getRpcSessionId, getTrackAssemblyNames, getTrackName, guessAdapter, guessTrackConf, guessTrackType, hasFileHandlesInCache, hideTrackGeneric, isLooseTrackConfig, makeIndex, makeIndexType, restoreFileHandles, restoreFileHandlesFromSnapshot, setBlobMap, setFileInCache, showTrackGeneric, storeBlobLocation, storeFileHandleLocation, stripFileExtension, stripTrackIds, toggleTrackGeneric, } from './tracks.js';
@@ -155,5 +156,5 @@ export { getFileHandle, isFileSystemAccessSupported, storeFileHandle, verifyPerm
155
156
  export { IntervalTree } from './IntervalTree.js';
156
157
  export { cmpStr } from './cmpStr.js';
157
158
  export { diffTrackConfig, flattenTrackConfigDelta, mergeTrackConfig, } from './trackConfigDelta.js';
158
- export { BEZIER_CONNECTOR_MAX_REACH_PX, bezierConnectorPath, } from './bezierConnector.js';
159
+ export { BEZIER_CONNECTOR_MAX_REACH_PX, CUBIC_APEX_RATIO, bezierConnectorPath, } from './bezierConnector.js';
159
160
  export { diagonalizeRegions, } from './diagonalizeRegions.js';
@@ -1,35 +1,5 @@
1
1
  import type { FileLocation } from './types/data.ts';
2
- /**
3
- * Every conventional spelling of an index file, for the docs that describe this
4
- * behavior. Kept beside {@link indexCandidateNames}, which is the list actually
5
- * probed, so the two are edited together.
6
- */
7
- export declare const indexSpellings: {
8
- name: string;
9
- writtenBy: string;
10
- }[];
11
- /**
12
- * The index filenames worth looking for beside `fileName`, best guess first.
13
- *
14
- * One data file has several names its index might carry, and picking only the
15
- * first left everyone else with a missing-file error naming a path they never
16
- * wrote:
17
- *
18
- * - `<file>.bai` / `.crai` / `.tbi` is what samtools and tabix write
19
- * - `<file>.csi` is what htslib writes for a reference over 512 Mb, and on
20
- * request at any size
21
- * - `reads.bai` beside `reads.bam` is what Picard and GATK write, in place of
22
- * samtools' `reads.bam.bai`
23
- *
24
- * Empty for a file type that carries no sibling index (BigWig, BigBed, hic),
25
- * which is how a caller knows not to go looking.
26
- *
27
- * `jbrowse-cli` answers the same question in `siblingSidecar`
28
- * (`commands/add-track-utils/adapter-utils.ts`) rather than calling this: it
29
- * carries no `@jbrowse/core` dependency, so `npm i -g @jbrowse/cli` stays a CLI
30
- * rather than a copy of the app. Change one, change the other.
31
- */
32
- export declare function indexCandidateNames(fileName: string): string[];
2
+ export { indexCandidateNames, indexSpellings } from '@jbrowse/add-track-core';
33
3
  /**
34
4
  * `location` with its filename replaced, i.e. the sibling of a data file.
35
5
  *
@@ -1,66 +1,8 @@
1
+ import { indexCandidateNames } from '@jbrowse/add-track-core';
1
2
  import { getFileName } from './getFileName.js';
2
- /**
3
- * Every conventional spelling of an index file, for the docs that describe this
4
- * behavior. Kept beside {@link indexCandidateNames}, which is the list actually
5
- * probed, so the two are edited together.
6
- */
7
- export const indexSpellings = [
8
- {
9
- name: '`<file>.tbi`, `<file>.bai`, `<file>.crai`',
10
- writtenBy: 'samtools, tabix',
11
- },
12
- {
13
- name: '`<file>.csi`',
14
- writtenBy: 'htslib, for a reference over 512 Mb and on request at any size',
15
- },
16
- {
17
- name: '`reads.bai` beside `reads.bam`',
18
- writtenBy: 'Picard, GATK',
19
- },
20
- ];
21
- /**
22
- * The index filenames worth looking for beside `fileName`, best guess first.
23
- *
24
- * One data file has several names its index might carry, and picking only the
25
- * first left everyone else with a missing-file error naming a path they never
26
- * wrote:
27
- *
28
- * - `<file>.bai` / `.crai` / `.tbi` is what samtools and tabix write
29
- * - `<file>.csi` is what htslib writes for a reference over 512 Mb, and on
30
- * request at any size
31
- * - `reads.bai` beside `reads.bam` is what Picard and GATK write, in place of
32
- * samtools' `reads.bam.bai`
33
- *
34
- * Empty for a file type that carries no sibling index (BigWig, BigBed, hic),
35
- * which is how a caller knows not to go looking.
36
- *
37
- * `jbrowse-cli` answers the same question in `siblingSidecar`
38
- * (`commands/add-track-utils/adapter-utils.ts`) rather than calling this: it
39
- * carries no `@jbrowse/core` dependency, so `npm i -g @jbrowse/cli` stays a CLI
40
- * rather than a copy of the app. Change one, change the other.
41
- */
42
- export function indexCandidateNames(fileName) {
43
- const lower = fileName.toLowerCase();
44
- if (lower.endsWith('.bam')) {
45
- return [
46
- `${fileName}.bai`,
47
- `${fileName}.csi`,
48
- fileName.replace(/\.bam$/i, '.bai'),
49
- ];
50
- }
51
- if (lower.endsWith('.cram')) {
52
- return [`${fileName}.crai`, fileName.replace(/\.cram$/i, '.crai')];
53
- }
54
- // the tabix family is spelled by its compression, not its content: a .gz here
55
- // is a bgzipped VCF/GFF/BED/SAM, all of which index the same two ways. `.bgz`
56
- // is the same file under the name htslib's own tools give it, so it takes the
57
- // same candidates — every format guesser accepts `\.b?gz$`, and matching only
58
- // `.gz` left a `calls.vcf.bgz` with no detection at all
59
- if (/\.b?gz$/.test(lower)) {
60
- return [`${fileName}.tbi`, `${fileName}.csi`];
61
- }
62
- return [];
63
- }
3
+ // defined in `@jbrowse/add-track-core`, which is framework-free so `jbrowse-cli`
4
+ // reads the same list; re-exported because this subpath serves them to plugins
5
+ export { indexCandidateNames, indexSpellings } from '@jbrowse/add-track-core';
64
6
  /**
65
7
  * `location` with its filename replaced, i.e. the sibling of a data file.
66
8
  *
@@ -73,7 +15,7 @@ export function siblingLocation(location, fileName) {
73
15
  const replaceLast = (path) =>
74
16
  // the separator is kept: a Windows local path uses backslashes and a URI
75
17
  // never does, so rebuilding with '/' would corrupt one of them
76
- path.replace(/[^/\\]*$/, fileName);
18
+ path.replace(/[^/\\]*$/, () => fileName);
77
19
  if (location.locationType === 'UriLocation') {
78
20
  return { ...location, uri: replaceLast(location.uri) };
79
21
  }
@@ -1,4 +1,4 @@
1
- import type { ActiveFetch, StatusReporter } from './createStopTokenRotation.ts';
1
+ import type { ActiveFetch, StatusReporter, AbortRotation } from './createAbortRotation.ts';
2
2
  import type { FetchContext } from './fetchContext.ts';
3
3
  import type { FetchPhases } from './fetchPhases.ts';
4
4
  import type { IStateTreeNode } from '@jbrowse/mobx-state-tree';
@@ -23,12 +23,17 @@ export interface FetchLifecycle {
23
23
  setError: (error?: unknown) => void;
24
24
  /**
25
25
  * Runs synchronously as the fetch starts, after the rotation has superseded
26
- * whatever it replaced: the loading flag (`FetchMixin`'s `activeStopToken`,
27
- * the comparative family's `fetching`), and anything a display blanks
26
+ * whatever it replaced: the loading flag (`FetchMixin`'s `activeSignal`,
27
+ * through `fetchMixinLifecycle`), and anything a display blanks
28
28
  * because it has no freshness signature to keep stale data honest with
29
29
  * (chord's refName map).
30
+ *
31
+ * Takes the signal rather than the whole {@link ActiveFetch}: publishing it is
32
+ * the only thing any implementation does with the fetch, and the guard and
33
+ * the status slot are the skeleton's to hand out — through `ctx`, where a
34
+ * `run` gets them pre-wired.
30
35
  */
31
- onBegin?: (active: ActiveFetch) => void;
36
+ onBegin?: (signal: AbortSignal) => void;
32
37
  /**
33
38
  * Runs in the `finally`, before the rotation's `end()`. `current` is this
34
39
  * run's own guard, already evaluated: a **superseded** run must not clear the
@@ -50,7 +55,7 @@ export interface FetchLifecycle {
50
55
  * the loading flag on an abort. The rules only pay for themselves by being the
51
56
  * same everywhere, so they live here and the differences are parameters.
52
57
  *
53
- * `active` comes from a {@link createStopTokenRotation} `begin()` the caller
58
+ * `active` comes from a {@link createAbortRotation} `begin()` the caller
54
59
  * already made, because who owns the rotation is one of the real differences: a
55
60
  * display's *primary* fetch rotates through `FetchMixin`, so `cancelFetch` can
56
61
  * reach it, while every other fetch's rotation lives in its installer's closure
@@ -80,7 +85,7 @@ export interface FetchSkeletonHost extends IStateTreeNode {
80
85
  reloadCounter: number;
81
86
  /**
82
87
  * The states where this host deliberately fetches nothing, read only by the
83
- * dev-only retry check. A decline there is not a dead Retry.
88
+ * retry contract check. A decline there is not a dead Retry.
84
89
  */
85
90
  fetchInert: boolean;
86
91
  /**
@@ -97,19 +102,11 @@ export interface FetchSkeletonHost extends IStateTreeNode {
97
102
  */
98
103
  fetchCanceled?: boolean;
99
104
  }
100
- export interface InstallFetchOptions<TArgs, TResult> extends FetchPhases<TArgs, TResult, FetchContext>, FetchLifecycle {
105
+ interface InstallFetchOptionsBase<TArgs, TResult> extends FetchPhases<TArgs, TResult, FetchContext>, FetchLifecycle {
101
106
  /** autorun name, for the MobX devtools/spy stream */
102
107
  name: string;
103
108
  /** how long to coalesce reruns once the body has started work once */
104
109
  delay: number;
105
- /**
106
- * Where this fetch's status lands. A display passes itself — its status
107
- * fields are part of its own API, and one composing `FetchMixin` lends the
108
- * model-wide window so this fetch takes a slot on the one field beside the
109
- * display's other operations rather than opening a second writer over it.
110
- * Anything with one operation to narrate passes a `createStatusChannel`.
111
- */
112
- report: StatusReporter;
113
110
  /**
114
111
  * An extra skip above `prepare`, reported as `gated` rather than `declined`:
115
112
  * the skeleton decided before the family's own gate was consulted, so it is
@@ -129,7 +126,7 @@ export interface InstallFetchOptions<TArgs, TResult> extends FetchPhases<TArgs,
129
126
  * also be invalidated by `reload()`, or Retry re-runs the body straight into
130
127
  * the same decline and the button is dead. Every layer that has one made
131
128
  * that pairing structural in the end — the global family after arc shipped
132
- * the bug (`GlobalFetchMixin.reload` drops `loadedFetchSignature` in the same
129
+ * the bug (`GlobalFetchMixin.reload` drops `loadedFetchKey` in the same
133
130
  * action as the bump) — and this is that move for the skeleton: a run whose
134
131
  * `reloadCounter` has advanced since the run that last ISSUED a fetch ignores
135
132
  * this gate, so nothing has to remember to clear anything. The multi-way
@@ -145,13 +142,17 @@ export interface InstallFetchOptions<TArgs, TResult> extends FetchPhases<TArgs,
145
142
  *
146
143
  * Omit it where the fetch holds no committed state to compare against — most
147
144
  * of them, whose `prepare` returns args unconditionally.
145
+ *
146
+ * A value, compared by `isDataCurrent`: the settings a fetch was issued
147
+ * under go in as the object the worker receives, never as a serialized
148
+ * spelling of it.
148
149
  */
149
- fetchKey?: (args: TArgs) => string;
150
+ fetchKey?: (args: TArgs) => unknown;
150
151
  /**
151
- * The key of the data already committed, when the host keeps one — the
152
- * comparative displays stamp `loadedFetchKey`, which their `dataCurrent`
153
- * flag reads too, so a second stamp would be one more thing to disagree with
154
- * it. Omitted, the skeleton stamps its own at commit.
152
+ * The key of the data already committed, when the host keeps one —
153
+ * `KeyedFetchMixin` stamps `loadedFetchKey`, which its `dataCurrent` reads
154
+ * too, so a second stamp would be one more thing to disagree with it.
155
+ * Omitted, the skeleton stamps its own at commit.
155
156
  *
156
157
  * **Either way the stamp is observable**, and the read is tracked. Zoom A→B
157
158
  * issues a fetch for B; zoom back to A before B commits and the re-run
@@ -159,9 +160,23 @@ export interface InstallFetchOptions<TArgs, TResult> extends FetchPhases<TArgs,
159
160
  * write is what wakes the autorun to fetch A again. A closure variable would
160
161
  * leave data B under viewport A until the next input moved.
161
162
  */
162
- committedKey?: () => string | undefined;
163
+ loadedKey?: () => unknown;
164
+ /**
165
+ * The predicate form of the freshness gate, for a fetch whose "I have exactly
166
+ * this already" is not key equality: the density tier holds bins over a
167
+ * buffered read and answers a viewport those bins *contain*, which no key can
168
+ * spell. Same rules as `fetchKey` — declined runs report `declined`, and a
169
+ * `reloadCounter` advanced since the last issued fetch overrides it — so the
170
+ * comparison lives here and not in `prepare`, where a reload could not reach
171
+ * it. Runs inside the autorun, so what it reads is tracked: read the
172
+ * committed state off an observable, and the commit that changes the answer
173
+ * wakes the declined run.
174
+ *
175
+ * Either this or `fetchKey`, not both.
176
+ */
177
+ heldAnswers?: (args: TArgs) => boolean;
163
178
  /**
164
- * Install the two dev-only display-contract checks under this name. Omitted
179
+ * Install the two display-contract checks under this name. Omitted
165
180
  * by a **secondary** fetch on a host whose primary foundation already
166
181
  * installed them: `assertDisplayContract` would report the second install as
167
182
  * the double-attach it is built to catch, and a second retry check would
@@ -169,26 +184,51 @@ export interface InstallFetchOptions<TArgs, TResult> extends FetchPhases<TArgs,
169
184
  */
170
185
  contract?: string;
171
186
  }
187
+ /**
188
+ * The rotation half is either/or: `report` says where a rotation this installer
189
+ * creates for itself reports, and `rotation` lends the host's own instead — a
190
+ * display composing `FetchMixin` passes its `fetchRotation`, so `cancelFetch`
191
+ * and `cancelFetchByUser` reach the fetch this installs rather than a second
192
+ * rotation they cannot see. A lent rotation already carries its status window,
193
+ * so `report` would be dead beside it — the same either/or `StatusReporter`
194
+ * itself is a union for.
195
+ */
196
+ export type InstallFetchOptions<TArgs, TResult> = InstallFetchOptionsBase<TArgs, TResult> & ({
197
+ /**
198
+ * Where this fetch's status lands. A display passes itself — its status
199
+ * fields are part of its own API, and one composing `FetchMixin` lends
200
+ * the model-wide window so this fetch takes a slot on the one field
201
+ * beside the display's other operations rather than opening a second
202
+ * writer over it. Anything with one operation to narrate passes a
203
+ * `createStatusChannel`.
204
+ */
205
+ report: StatusReporter;
206
+ rotation?: never;
207
+ } | {
208
+ /** the host's own latest-wins rotation, lent whole — see above */
209
+ rotation: AbortRotation;
210
+ report?: never;
211
+ });
172
212
  /**
173
213
  * A whole fetch, installed: the rotation, the leading-edge autorun, the
174
214
  * unconditional trigger reads, the gates, and {@link runFetchOnce} under them.
175
215
  *
176
- * Every fetch in the tree is this shape except one — the prerequisite reads
177
- * (HiC's header, the multi-sample sample list), both comparative displays, the
178
- * circular view's chord fetch, the breakpoint overlay fetch and the multi-way
179
- * synteny display's two DEPENDENT fetches (lane genes, lane links, each gated on
180
- * the key its own commit stamps) all take it. The
181
- * exception is `FetchMixin.runFetch`, the viewport fetch of an LGV display: its
182
- * rotation is a member rather than a closure (so `cancelFetch` can reach it)
183
- * and its trigger list is the per-region or global foundation's, so it holds
184
- * `runFetchOnce` directly and the autorun above it is that foundation's.
216
+ * Every fetch in the tree is this shape except one family — the prerequisite
217
+ * reads (HiC's header, the multi-sample sample list), the two keyed families
218
+ * (`installGlobalFetchAutorun` and `installComparativeFetchAutorun`, which lend
219
+ * `FetchMixin`'s rotation through the `rotation` option so `cancelFetch` and
220
+ * the Cancel button reach the fetch they install), the circular view's chord
221
+ * fetch, the breakpoint overlay fetch and the multi-way synteny display's two
222
+ * DEPENDENT fetches (lane genes, lane links, each gated on the key its own
223
+ * commit stamps) all take it. The
224
+ * exception is the per-region family's `FetchMixin.runFetch`: its trigger is
225
+ * `planRegionFetch`'s autorun and its commits stream per region through
226
+ * `ctx.commitRegion`, so it holds `runFetchOnce` directly and the autorun above
227
+ * it is that foundation's.
185
228
  *
186
229
  * What a caller supplies is exactly what differs between them: which reads wake
187
230
  * it (`prepare`, plus `gate`), what a round trip commits, where the loading
188
231
  * flag lives (`onBegin` / `onEnd`) and where the status goes (`report`).
189
- *
190
- * Returns the rotation's `cancel`, for a family whose model owns the user-facing
191
- * Cancel button: the flag alone is not a cancel — nothing rotates the token, the
192
- * stopped RPC stays current, and it commits over the load the user just stopped.
193
232
  */
194
- export declare function installFetch<TArgs, TResult>(self: FetchSkeletonHost, { name, delay, report, gate, contract, fetchKey, committedKey, prepare, run, commit, setError, onBegin, onEnd, }: InstallFetchOptions<TArgs, TResult>): () => void;
233
+ export declare function installFetch<TArgs, TResult>(self: FetchSkeletonHost, opts: InstallFetchOptions<TArgs, TResult>): void;
234
+ export {};
@@ -2,7 +2,7 @@ import { addDisposer, isAlive } from '@jbrowse/mobx-state-tree';
2
2
  import { observable, runInAction, untracked } from 'mobx';
3
3
  import { assertDisplayContract, makeRetryContractCheck, } from '../pluggableElementTypes/models/assertDisplayContract.js';
4
4
  import { handleFetchError } from './aborting.js';
5
- import { createStopTokenRotation } from './createStopTokenRotation.js';
5
+ import { createAbortRotation } from './createAbortRotation.js';
6
6
  import { makeFetchContext } from './fetchContext.js';
7
7
  import { isDataCurrent } from './isDataCurrent.js';
8
8
  import { leadingEdgeAutorun } from './leadingEdgeAutorun.js';
@@ -18,7 +18,7 @@ import { leadingEdgeAutorun } from './leadingEdgeAutorun.js';
18
18
  * the loading flag on an abort. The rules only pay for themselves by being the
19
19
  * same everywhere, so they live here and the differences are parameters.
20
20
  *
21
- * `active` comes from a {@link createStopTokenRotation} `begin()` the caller
21
+ * `active` comes from a {@link createAbortRotation} `begin()` the caller
22
22
  * already made, because who owns the rotation is one of the real differences: a
23
23
  * display's *primary* fetch rotates through `FetchMixin`, so `cancelFetch` can
24
24
  * reach it, while every other fetch's rotation lives in its installer's closure
@@ -30,13 +30,13 @@ import { leadingEdgeAutorun } from './leadingEdgeAutorun.js';
30
30
  * flow, and so an action, which MobX runs untracked already.
31
31
  */
32
32
  export async function runFetchOnce(self, active, args, { run, commit, setError, onBegin, onEnd, }) {
33
- const { stopToken, isCurrent, statusCallback, end } = active;
33
+ const { signal, isCurrent, statusCallback, end } = active;
34
34
  // synchronous, so it lands while this run is by construction the current one
35
35
  setError(undefined);
36
- onBegin?.(active);
36
+ onBegin?.(signal);
37
37
  try {
38
38
  const result = await run(args, makeFetchContext(self, {
39
- stopToken,
39
+ signal,
40
40
  isStale: () => !isCurrent(),
41
41
  statusCallback,
42
42
  }));
@@ -52,20 +52,18 @@ export async function runFetchOnce(self, active, args, { run, commit, setError,
52
52
  finally {
53
53
  // Both `onEnd` implementations are MST actions on `self`, and a display
54
54
  // destroyed mid-fetch — a track closed, a display type switched out from
55
- // under a load — still resumes here. `beforeDestroy` already stopped the
56
- // token, so the bookkeeping is moot on a dead node; calling the action
55
+ // under a load — still resumes here. `beforeDestroy` already aborted the
56
+ // signal, so the bookkeeping is moot on a dead node; calling the action
57
57
  // anyway only warns.
58
58
  if (isAlive(self)) {
59
59
  onEnd?.(isCurrent());
60
60
  }
61
- // last, because it closes the guard `onEnd` reads, and unconditional
62
- // because a superseded run's status slot goes on voting for a phase that
63
- // is over until it is retired
61
+ // last, because it closes the guard `onEnd` reads
64
62
  end();
65
63
  }
66
64
  }
67
65
  /**
68
- * The two dev-only checks every fetch installer owes, together because they are
66
+ * The two contract checks every fetch installer owes, together because they are
69
67
  * the same doctrine: one reports a foundation attached twice, the other reports
70
68
  * a `reload()` the gate still declines — the dead Retry button.
71
69
  */
@@ -73,38 +71,63 @@ function installContractChecks(self, contract) {
73
71
  assertDisplayContract(self, contract);
74
72
  return makeRetryContractCheck(self);
75
73
  }
74
+ /**
75
+ * The rotation for an installation that was lent none: created here, so
76
+ * disposed here — a lent one is the host's, and resetting its status window
77
+ * would drop a write the host's other operations are still owed.
78
+ */
79
+ function ownRotation(self, report) {
80
+ const rotation = createAbortRotation(self, report);
81
+ addDisposer(self, () => {
82
+ rotation.dispose();
83
+ });
84
+ return rotation;
85
+ }
76
86
  /**
77
87
  * A whole fetch, installed: the rotation, the leading-edge autorun, the
78
88
  * unconditional trigger reads, the gates, and {@link runFetchOnce} under them.
79
89
  *
80
- * Every fetch in the tree is this shape except one — the prerequisite reads
81
- * (HiC's header, the multi-sample sample list), both comparative displays, the
82
- * circular view's chord fetch, the breakpoint overlay fetch and the multi-way
83
- * synteny display's two DEPENDENT fetches (lane genes, lane links, each gated on
84
- * the key its own commit stamps) all take it. The
85
- * exception is `FetchMixin.runFetch`, the viewport fetch of an LGV display: its
86
- * rotation is a member rather than a closure (so `cancelFetch` can reach it)
87
- * and its trigger list is the per-region or global foundation's, so it holds
88
- * `runFetchOnce` directly and the autorun above it is that foundation's.
90
+ * Every fetch in the tree is this shape except one family — the prerequisite
91
+ * reads (HiC's header, the multi-sample sample list), the two keyed families
92
+ * (`installGlobalFetchAutorun` and `installComparativeFetchAutorun`, which lend
93
+ * `FetchMixin`'s rotation through the `rotation` option so `cancelFetch` and
94
+ * the Cancel button reach the fetch they install), the circular view's chord
95
+ * fetch, the breakpoint overlay fetch and the multi-way synteny display's two
96
+ * DEPENDENT fetches (lane genes, lane links, each gated on the key its own
97
+ * commit stamps) all take it. The
98
+ * exception is the per-region family's `FetchMixin.runFetch`: its trigger is
99
+ * `planRegionFetch`'s autorun and its commits stream per region through
100
+ * `ctx.commitRegion`, so it holds `runFetchOnce` directly and the autorun above
101
+ * it is that foundation's.
89
102
  *
90
103
  * What a caller supplies is exactly what differs between them: which reads wake
91
104
  * it (`prepare`, plus `gate`), what a round trip commits, where the loading
92
105
  * flag lives (`onBegin` / `onEnd`) and where the status goes (`report`).
93
- *
94
- * Returns the rotation's `cancel`, for a family whose model owns the user-facing
95
- * Cancel button: the flag alone is not a cancel — nothing rotates the token, the
96
- * stopped RPC stays current, and it commits over the load the user just stopped.
97
106
  */
98
- export function installFetch(self, { name, delay, report, gate, contract, fetchKey, committedKey, prepare, run, commit, setError, onBegin, onEnd, }) {
107
+ export function installFetch(self, opts) {
108
+ const { name, delay, gate, contract, fetchKey, loadedKey, heldAnswers, prepare, run, commit, setError, onBegin, onEnd, } = opts;
99
109
  const noteFetchAutorunRun = contract === undefined ? undefined : installContractChecks(self, contract);
100
- const rotation = createStopTokenRotation(self, report);
110
+ const lent = opts.rotation;
111
+ const rotation = lent === undefined ? ownRotation(self, opts.report) : lent;
101
112
  // The `reloadCounter` this installation last issued a fetch at. Per
102
113
  // installation and per instance, so a host with several fetches gives each its
103
114
  // own — and a closure rather than model state, because nothing outside reads
104
115
  // it and a volatile would be one more thing a host has to declare.
105
116
  let issuedEpoch;
106
- const stamp = committedKey ? undefined : observable.box();
107
- const heldKey = committedKey ?? (() => stamp.get());
117
+ // The skeleton's own stamp exists only where there is a key to stamp — a
118
+ // fetch with no `fetchKey` never reads it, so allocating one would only feed
119
+ // it `undefined` on every commit. Shallow, because the deep enhancer would
120
+ // swap a stamped key object for an observable copy of it.
121
+ const stamp = loadedKey === undefined && fetchKey !== undefined
122
+ ? observable.box(undefined, { deep: false })
123
+ : undefined;
124
+ const heldKey = loadedKey ?? (() => stamp?.get());
125
+ // the freshness gate in whichever form the caller declared it
126
+ const held = heldAnswers !== undefined
127
+ ? heldAnswers
128
+ : fetchKey !== undefined
129
+ ? (args) => isDataCurrent(heldKey(), fetchKey(args))
130
+ : undefined;
108
131
  const commitAndStamp = stamp
109
132
  ? (result, args) => {
110
133
  runInAction(() => {
@@ -113,9 +136,6 @@ export function installFetch(self, { name, delay, report, gate, contract, fetchK
113
136
  });
114
137
  }
115
138
  : commit;
116
- addDisposer(self, () => {
117
- rotation.dispose();
118
- });
119
139
  leadingEdgeAutorun(self,
120
140
  // #region voidTracking
121
141
  () => {
@@ -128,13 +148,23 @@ export function installFetch(self, { name, delay, report, gate, contract, fetchK
128
148
  // Cancel would be a one-way door with a Retry button on it. Order, not
129
149
  // just position: counter first, then this, then the gates.
130
150
  const canceled = self.fetchCanceled === true;
151
+ // Above the gate, not only above `prepare`: teardown mutates the
152
+ // observables this body reads before the disposers run, and every `gate`
153
+ // but the breakpoint view's reaches the containing view or track through a
154
+ // parent walk (`host.initialized`, `isMinimized`, `getContainingView`),
155
+ // which throws once the node has left the tree. This catches the destroyed
156
+ // node; the detached-and-still-alive window (ADR-069) is covered only by
157
+ // the walk's own cache. Nothing is reported for a dead node — there is no
158
+ // Retry button left to be dead, and the check would read three more
159
+ // members of a corpse to decide it.
160
+ if (!isAlive(self)) {
161
+ return false;
162
+ }
131
163
  if (canceled || gate?.() === false) {
132
164
  noteFetchAutorunRun?.('gated');
133
165
  return false;
134
166
  }
135
- // Teardown mutates observables `prepare` reads before the disposers run,
136
- // and getContainingView on a detached node warns then throws.
137
- const args = isAlive(self) ? prepare() : undefined;
167
+ const args = prepare();
138
168
  if (args === undefined) {
139
169
  noteFetchAutorunRun?.('declined');
140
170
  return false;
@@ -145,9 +175,7 @@ export function installFetch(self, { name, delay, report, gate, contract, fetchK
145
175
  // consuming the retry here costs nothing — while a reload landing
146
176
  // mid-flight is answered by the re-run the counter read above already
147
177
  // guarantees.
148
- if (fetchKey !== undefined &&
149
- isDataCurrent(heldKey(), fetchKey(args)) &&
150
- reloadEpoch === issuedEpoch) {
178
+ if (held !== undefined && held(args) && reloadEpoch === issuedEpoch) {
151
179
  noteFetchAutorunRun?.('declined');
152
180
  return false;
153
181
  }
@@ -174,5 +202,4 @@ export function installFetch(self, { name, delay, report, gate, contract, fetchK
174
202
  },
175
203
  // #endregion
176
204
  { name, delay });
177
- return rotation.cancel;
178
205
  }