@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
@@ -0,0 +1,76 @@
1
+ import { getType } from '@jbrowse/mobx-state-tree';
2
+ import { getNotificationSink } from './sessionServices.js';
3
+ /** what a diagnostic calls the view: its snapshot `type`, or the model name */
4
+ export function viewLabel(self) {
5
+ return self.type ?? getType(self).name;
6
+ }
7
+ /**
8
+ * What every surface calls this mistake. A session spec launches a view without
9
+ * ever building a snapshot, so it classifies its own keys and reports them
10
+ * through its own session rather than through the sink below — one wording, so
11
+ * a typo reads the same whether it was written in a config or in a URL.
12
+ */
13
+ export function unknownKeysMessage(label, keys) {
14
+ return `${label} ignored unknown key(s): ${keys.join(', ')}`;
15
+ }
16
+ /** The action `setter-only` names: `height` -> `setHeight`. */
17
+ export function displaySetterName(key) {
18
+ return `set${key[0].toUpperCase()}${key.slice(1)}`;
19
+ }
20
+ /**
21
+ * What a surface calls a key the display has an action for but no slot. Its own
22
+ * sentence rather than `unknownKeysMessage`'s: the display does take the
23
+ * setting, just not written this way, and saying "unknown key" over a key whose
24
+ * setter we name in the same breath contradicts itself.
25
+ */
26
+ export function setterOnlyMessage(label, keys) {
27
+ return `${label} did not apply ${keys.join(', ')}: no config slot takes ${keys.length > 1 ? 'them' : 'it'}. Call ${keys.map(displaySetterName).join(', ')} on the display instead.`;
28
+ }
29
+ /**
30
+ * Name the keys a view was handed and could not place, from the partition
31
+ * `withLaunchInput` runs on the snapshot. The console alone, like
32
+ * `reportLegacyInit`: the view opened without them, and the keys are usually a
33
+ * v4 session's retired state that a visitor holding the link cannot act on.
34
+ */
35
+ export function reportUnknownKeys(self, keys) {
36
+ if (keys.length) {
37
+ console.warn(unknownKeysMessage(viewLabel(self), keys));
38
+ }
39
+ }
40
+ /**
41
+ * Name the row lists a view refused whole. `withLaunchInput` splits an authored
42
+ * array into the recipes a launcher resolves and the built snapshots MST
43
+ * restores, per entry — but a row list is indexed against the view's `levels`
44
+ * and per-level tracks, so a list holding both kinds has no correct split and
45
+ * is refused rather than renumbered.
46
+ */
47
+ export function reportMalformedRows(self, keys) {
48
+ if (!keys.length) {
49
+ return;
50
+ }
51
+ const message = `${viewLabel(self)} refused ${keys.join(', ')}: the list mixes built view snapshots with recipes to open one, and the rows index against the levels between them. Write all of them one way.`;
52
+ console.warn(message);
53
+ try {
54
+ getNotificationSink(self).notify(message, 'warning');
55
+ }
56
+ catch {
57
+ // a view built outside a session has nowhere to put it
58
+ }
59
+ }
60
+ /**
61
+ * What every surface calls v4's nested `init`. v5 takes every setting directly
62
+ * on the view object and unwraps the nesting on the way in, so the settings
63
+ * still arrive — this names the spelling to fix while they do.
64
+ */
65
+ export function legacyInitMessage(label) {
66
+ return `${label} nests its settings under "init", which is deprecated: write every setting directly on the view object.`;
67
+ }
68
+ /**
69
+ * Name a snapshot that still writes v4's nested `init`. The console alone,
70
+ * unlike the two reporters above: the settings were applied, so there is
71
+ * nothing for a visitor to act on and a warning toast over a working view is
72
+ * noise. `jbrowse validate` is where the author of the config hears about it.
73
+ */
74
+ export function reportLegacyInit(self) {
75
+ console.warn(legacyInitMessage(viewLabel(self)));
76
+ }
@@ -12,10 +12,10 @@ export function useFeatureSequence({ session, start, end, refName, upDownBp, for
12
12
  start,
13
13
  end,
14
14
  upDownBp,
15
- +forceLoad,
15
+ forceLoad,
16
16
  ]
17
17
  : null, guard
18
- ? async (_name, _asm, _ref, _start, _end, _upDown, _force, stopToken, statusCallback) => {
18
+ ? async (_name, _asm, _ref, _start, _end, _upDown, _force, signal, statusCallback) => {
19
19
  const { session: s, assemblyName: asmName } = guard;
20
20
  if (!forceLoad && end - start > BPLIMIT) {
21
21
  return {
@@ -32,7 +32,7 @@ export function useFeatureSequence({ session, start, end, refName, upDownBp, for
32
32
  refName,
33
33
  assemblyName: asmName,
34
34
  session: s,
35
- stopToken,
35
+ signal,
36
36
  statusCallback: slot(),
37
37
  }),
38
38
  upDownBp > 0
@@ -42,7 +42,7 @@ export function useFeatureSequence({ session, start, end, refName, upDownBp, for
42
42
  refName,
43
43
  assemblyName: asmName,
44
44
  session: s,
45
- stopToken,
45
+ signal,
46
46
  statusCallback: slot(),
47
47
  })
48
48
  : Promise.resolve(''),
@@ -53,7 +53,7 @@ export function useFeatureSequence({ session, start, end, refName, upDownBp, for
53
53
  refName,
54
54
  assemblyName: asmName,
55
55
  session: s,
56
- stopToken,
56
+ signal,
57
57
  statusCallback: slot(),
58
58
  })
59
59
  : Promise.resolve(''),
@@ -1,5 +1,4 @@
1
1
  import type { RpcStatus, StatusCallback } from './progress.ts';
2
- import type { StopToken } from './stopToken.ts';
3
2
  export type FetchKey = string | readonly unknown[] | null | undefined | false;
4
3
  type FetchingKey<Key> = Exclude<Key, null | undefined | false>;
5
4
  /**
@@ -10,8 +9,8 @@ type FetchingKey<Key> = Exclude<Key, null | undefined | false>;
10
9
  * single argument (`useGenomesData`). Most fetchers close over what they need
11
10
  * and declare no parameters at all, which stays assignable either way.
12
11
  *
13
- * A stop token and a status callback follow the key arguments. The token is
14
- * created per fetch and stopped when the key changes or the component unmounts,
12
+ * A signal and a status callback follow the key arguments. The signal is
13
+ * created per fetch and aborted when the key changes or the component unmounts,
15
14
  * so a fetcher that forwards it to an RPC cancels the worker instead of leaving
16
15
  * it grinding on an answer nobody is waiting for. The callback is what the RPC's
17
16
  * own progress comes back through, and it surfaces on the hook's `status` — a
@@ -19,7 +18,7 @@ type FetchingKey<Key> = Exclude<Key, null | undefined | false>;
19
18
  * works, instead of a bare spinner over an uninterruptible whole-chromosome
20
19
  * read. Fetchers that take neither are unaffected.
21
20
  */
22
- type FetcherArgs<Key> = FetchingKey<Key> extends readonly unknown[] ? [...FetchingKey<Key>, StopToken, StatusCallback] : [FetchingKey<Key>, StopToken, StatusCallback];
21
+ type FetcherArgs<Key> = FetchingKey<Key> extends readonly unknown[] ? [...FetchingKey<Key>, AbortSignal, StatusCallback] : [FetchingKey<Key>, AbortSignal, StatusCallback];
23
22
  interface FetchState<Data> {
24
23
  data: Data | undefined;
25
24
  error: unknown;
@@ -1,11 +1,20 @@
1
1
  import { useCallback, useEffect, useRef, useState } from 'react';
2
2
  import { createStatusWindow } from './progress.js';
3
- import { createStopToken, stopStopToken } from './stopToken.js';
4
- const isNil = (k) => k === null || k === undefined || k === false;
5
- // A null result means "don't fetch": no key, or an array key with a missing
6
- // piece (e.g. an offset that isn't resolved yet).
3
+ // The whole key as the "don't fetch" sentinel: `cond && [...]`, `cond ? [...] :
4
+ // null`. `false` belongs here and NOT in the element check below, which is what
5
+ // this used to share with it.
6
+ const isNoKey = (k) => k === null || k === undefined || k === false;
7
+ // An element that has not resolved yet — an offset still being computed, an
8
+ // assembly still loading. **`false` is not one of them**: it is a resolved
9
+ // boolean, and a caller with a `false`-valued setting in its key meant to fetch
10
+ // under that setting. Sharing one predicate with the sentinel above made every
11
+ // such key unfetchable, which the MAF sequence widget shipped — its
12
+ // `includeInsertions` defaults to `false`, so the widget sat on its loading
13
+ // animation forever and issued no RPC at all. `SaveTrackData` hit the same
14
+ // thing and encoded its boolean as a string rather than fixing it here.
15
+ const isUnresolved = (k) => k === null || k === undefined;
7
16
  function serializeKey(key) {
8
- return isNil(key) || (Array.isArray(key) && key.some(isNil))
17
+ return isNoKey(key) || (Array.isArray(key) && key.some(isUnresolved))
9
18
  ? null
10
19
  : JSON.stringify(key);
11
20
  }
@@ -85,7 +94,7 @@ export function useFetch(key, fetcher, options = {}) {
85
94
  // fetch resolved is a different case, and the stream's own `clear` drops
86
95
  // that one.)
87
96
  let settled = false;
88
- const stopToken = createStopToken();
97
+ const controller = new AbortController();
89
98
  // A refetch under the same key — mutate(), or the cross-component
90
99
  // mutate(key) — is the same question asked again, so what is on screen is
91
100
  // a stale answer to it rather than an answer to something else: leave it
@@ -107,7 +116,7 @@ export function useFetch(key, fetcher, options = {}) {
107
116
  setStatus(undefined);
108
117
  // The runtime counterpart of FetcherArgs: an array key becomes one
109
118
  // argument per element, anything else a single argument, then the stop
110
- // token and the status callback. A conditional type over an unresolved
119
+ // signal and the status callback. A conditional type over an unresolved
111
120
  // `Key` can't be discharged
112
121
  // inside the function body, so the parameter list is erased for this one
113
122
  // call — callers still get the precise arity, and the looseness stops
@@ -127,7 +136,7 @@ export function useFetch(key, fetcher, options = {}) {
127
136
  const { statusCallback, clear: clearStatus } = statusWindow.open({
128
137
  isCurrent: () => alive && !settled,
129
138
  });
130
- const args = [...keyArgs, stopToken, statusCallback];
139
+ const args = [...keyArgs, controller.signal, statusCallback];
131
140
  const call = fetcher;
132
141
  Promise.resolve()
133
142
  .then(() => call(...args))
@@ -151,9 +160,9 @@ export function useFetch(key, fetcher, options = {}) {
151
160
  });
152
161
  return () => {
153
162
  alive = false;
154
- // the token's lifetime is this fetch's. An abort rejection lands in the
163
+ // the signal's lifetime is this fetch's. An abort rejection lands in the
155
164
  // catch above with alive already false, so it never surfaces as an error
156
- stopStopToken(stopToken);
165
+ controller.abort();
157
166
  // and the window's lifetime is too: `alive` already makes a queued
158
167
  // trailing write a no-op, but the timer behind it would otherwise stand
159
168
  // for up to a window past unmount
@@ -1,12 +1,16 @@
1
- import type { JBrowsePlugin } from './types/data.ts';
2
1
  /**
3
2
  * The plugin store listing. Shared by every surface that installs plugins (the
4
3
  * in-session plugin store widget, Desktop's global plugins dialog) so they read
5
4
  * the same manifest version and get the same integrity hashes and compatibility
6
5
  * ranges — a second copy of this fetch is how one of them silently ends up on
7
6
  * the unhashed v1 list.
7
+ *
8
+ * Through `fetchPlugins`, which memoizes its request, rather than fetching the
9
+ * url directly: `useFetch` holds no data cache, so every open of the store
10
+ * widget was a fresh round trip beside whatever the boot path had already
11
+ * asked for.
8
12
  */
9
13
  export declare function useFetchPlugins(): {
10
- plugins: JBrowsePlugin[] | undefined;
14
+ plugins: import("./index.ts").JBrowsePlugin[] | undefined;
11
15
  error: unknown;
12
16
  };
@@ -1,5 +1,4 @@
1
- import { PLUGIN_STORE_URL } from '../checkPlugins.js';
2
- import { fetchJson } from './fetchJson.js';
1
+ import { fetchPlugins } from '../checkPlugins.js';
3
2
  import { useFetch } from './useFetch.js';
4
3
  /**
5
4
  * The plugin store listing. Shared by every surface that installs plugins (the
@@ -7,8 +6,13 @@ import { useFetch } from './useFetch.js';
7
6
  * the same manifest version and get the same integrity hashes and compatibility
8
7
  * ranges — a second copy of this fetch is how one of them silently ends up on
9
8
  * the unhashed v1 list.
9
+ *
10
+ * Through `fetchPlugins`, which memoizes its request, rather than fetching the
11
+ * url directly: `useFetch` holds no data cache, so every open of the store
12
+ * widget was a fresh round trip beside whatever the boot path had already
13
+ * asked for.
10
14
  */
11
15
  export function useFetchPlugins() {
12
- const { data, error } = useFetch('jbrowse-plugin-store-v2', () => fetchJson(PLUGIN_STORE_URL));
16
+ const { data, error } = useFetch('jbrowse-plugin-store-v2', fetchPlugins);
13
17
  return { plugins: data?.plugins, error };
14
18
  }
@@ -113,6 +113,9 @@ export function usePanZoom(ref, view, { touchAction = 'none', } = {}) {
113
113
  };
114
114
  }, [ref, touchAction]);
115
115
  function endDrag(event) {
116
+ if (dragRef.current?.pointerId !== event.pointerId) {
117
+ return;
118
+ }
116
119
  dragRef.current = undefined;
117
120
  // release only what the move handler took — a press that stayed under the
118
121
  // threshold never captured anything
@@ -131,7 +134,7 @@ export function usePanZoom(ref, view, { touchAction = 'none', } = {}) {
131
134
  // lands on an icon inside the control. Shift is left alone too: it is
132
135
  // what a range-select of the host's own would want, and it is what
133
136
  // JBrowse's own view uses it for.
134
- if (event.button !== 0 || event.shiftKey) {
137
+ if (!event.isPrimary || event.button !== 0 || event.shiftKey) {
135
138
  return;
136
139
  }
137
140
  if (event.target instanceof Element &&
@@ -139,11 +142,15 @@ export function usePanZoom(ref, view, { touchAction = 'none', } = {}) {
139
142
  return;
140
143
  }
141
144
  // Note what this does *not* do: capture the pointer. See onPointerMove.
142
- dragRef.current = { x: event.clientX, panning: false };
145
+ dragRef.current = {
146
+ x: event.clientX,
147
+ panning: false,
148
+ pointerId: event.pointerId,
149
+ };
143
150
  },
144
151
  onPointerMove(event) {
145
152
  const drag = dragRef.current;
146
- if (!drag) {
153
+ if (!drag || drag.pointerId !== event.pointerId) {
147
154
  return;
148
155
  }
149
156
  if (!drag.panning) {
@@ -1,37 +1,9 @@
1
- interface PanelScrollTarget {
2
- scrollTop: number;
3
- scrollableHeight: number;
4
- setScrollTop: (n: number) => void;
5
- }
1
+ import type { VirtualScrollModel } from './useVirtualScrollWheel.ts';
6
2
  /**
7
- * Wheel gestures over a **scrolled canvas panel** — the alignments pileup and
8
- * the canvas basic display: a plain wheel scrolls it, `shift` keeps scrolling it
9
- * once `scrollZoom` has claimed the plain wheel for the view, and ctrl/meta is
10
- * left to the browser and the view's pinch-zoom. Nothing here resizes anything.
11
- *
12
- * These panels paint a fixed-size canvas at `-scrollTop` rather than living in a
13
- * DOM overflow container, so nothing scrolls them without this. The latch (inside
14
- * `applyScroll`) owns `preventDefault` but never `stopPropagation`, so a diagonal
15
- * wheel still bubbles its horizontal component to the LGV for panning.
16
- *
17
- * ADR-027 keeps wheel-*intent* dispatch per handler, because the panels do not
18
- * agree on what a gesture means. This is the second of the two rules that
19
- * survived that split — the row-stack rule (`useRowVirtualScroll`, where `shift`
20
- * resizes) is the other — and the two displays sharing it had byte-identical
21
- * copies differing only in which getter named the viewport. The canvas display
22
- * converged here when it moved off a native overflow container; the ADR's table
23
- * still described its pre-virtual-scroll rule and has been corrected.
24
- *
25
- * `scrollZoom` and `viewportHeight` are inputs rather than reads off the model,
26
- * so core needs no view typing and each display keeps naming its own viewport
27
- * (the pileup's excludes the sticky coverage band; the canvas display's is the
28
- * whole track).
29
- *
30
- * `panel` is the element wrapping the canvas AND the DOM overlays drawn over it,
31
- * never the canvas alone — see `useVirtualScrollWheel`, which says why.
3
+ * Wheel gestures over a **scrolled canvas panel** — the alignments pileup, the
4
+ * canvas feature display, multi-way synteny: a plain wheel scrolls it, `shift`
5
+ * still scrolls it once `scrollZoom` has given the plain wheel to the view, and
6
+ * ctrl/meta is left to the browser and the view's pinch-zoom. The row-stack
7
+ * rule, where `shift` resizes, is `useRowVirtualScroll` (ADR-027).
32
8
  */
33
- export declare function usePanelVirtualScroll(panel: HTMLElement | null, model: PanelScrollTarget, { viewportHeight, scrollZoom, }: {
34
- viewportHeight: number;
35
- scrollZoom: boolean;
36
- }): void;
37
- export {};
9
+ export declare function usePanelVirtualScroll(panel: HTMLElement | null, model: VirtualScrollModel, scrollZoom: boolean): void;
@@ -1,42 +1,15 @@
1
1
  import { useVirtualScrollWheel } from './useVirtualScrollWheel.js';
2
2
  /**
3
- * Wheel gestures over a **scrolled canvas panel** — the alignments pileup and
4
- * the canvas basic display: a plain wheel scrolls it, `shift` keeps scrolling it
5
- * once `scrollZoom` has claimed the plain wheel for the view, and ctrl/meta is
6
- * left to the browser and the view's pinch-zoom. Nothing here resizes anything.
7
- *
8
- * These panels paint a fixed-size canvas at `-scrollTop` rather than living in a
9
- * DOM overflow container, so nothing scrolls them without this. The latch (inside
10
- * `applyScroll`) owns `preventDefault` but never `stopPropagation`, so a diagonal
11
- * wheel still bubbles its horizontal component to the LGV for panning.
12
- *
13
- * ADR-027 keeps wheel-*intent* dispatch per handler, because the panels do not
14
- * agree on what a gesture means. This is the second of the two rules that
15
- * survived that split — the row-stack rule (`useRowVirtualScroll`, where `shift`
16
- * resizes) is the other — and the two displays sharing it had byte-identical
17
- * copies differing only in which getter named the viewport. The canvas display
18
- * converged here when it moved off a native overflow container; the ADR's table
19
- * still described its pre-virtual-scroll rule and has been corrected.
20
- *
21
- * `scrollZoom` and `viewportHeight` are inputs rather than reads off the model,
22
- * so core needs no view typing and each display keeps naming its own viewport
23
- * (the pileup's excludes the sticky coverage band; the canvas display's is the
24
- * whole track).
25
- *
26
- * `panel` is the element wrapping the canvas AND the DOM overlays drawn over it,
27
- * never the canvas alone — see `useVirtualScrollWheel`, which says why.
3
+ * Wheel gestures over a **scrolled canvas panel** — the alignments pileup, the
4
+ * canvas feature display, multi-way synteny: a plain wheel scrolls it, `shift`
5
+ * still scrolls it once `scrollZoom` has given the plain wheel to the view, and
6
+ * ctrl/meta is left to the browser and the view's pinch-zoom. The row-stack
7
+ * rule, where `shift` resizes, is `useRowVirtualScroll` (ADR-027).
28
8
  */
29
- export function usePanelVirtualScroll(panel, model, { viewportHeight, scrollZoom, }) {
30
- useVirtualScrollWheel(panel, (e, applyScroll) => {
31
- if ((scrollZoom && !e.shiftKey) || e.ctrlKey || e.metaKey) {
32
- return;
9
+ export function usePanelVirtualScroll(panel, model, scrollZoom) {
10
+ useVirtualScrollWheel(panel, model, (e, scroll) => {
11
+ if ((!scrollZoom || e.shiftKey) && !e.ctrlKey && !e.metaKey) {
12
+ scroll();
33
13
  }
34
- applyScroll(e, {
35
- scrollTop: model.scrollTop,
36
- viewportHeight,
37
- scrollableHeight: model.scrollableHeight,
38
- }, n => {
39
- model.setScrollTop(n);
40
- });
41
14
  });
42
15
  }
@@ -18,6 +18,7 @@ export function useRafCommit(commit) {
18
18
  const pending = pendingRef.current;
19
19
  if (pending) {
20
20
  cancelAnimationFrame(pending.id);
21
+ pendingRef.current = undefined;
21
22
  }
22
23
  }, []);
23
24
  const schedule = useCallback((value) => {
@@ -1,32 +1,9 @@
1
- interface RowScrollTarget {
2
- effectiveRowHeight: number;
3
- scrollTop: number;
4
- nrow: number;
5
- scrollableHeight: number;
6
- setRowHeight: (n: number) => void;
7
- setScrollTop: (n: number) => void;
8
- }
1
+ import type { RowResizeTarget } from './applyRowResizeWheel.ts';
9
2
  /**
10
3
  * Wheel gestures over a **row-stack** panel — the multi-sample variant displays
11
- * and MAF: `shift`+wheel resizes the rows (a vertical-zoom that keeps the row
12
- * under the cursor put), a plain wheel scrolls them, and anything the panel
13
- * can't consume is left to bubble to the view.
14
- *
15
- * These panels paint a fixed-size canvas at `-scrollTop` rather than living in a
16
- * DOM overflow container, so nothing scrolls them without this.
17
- *
18
- * ADR-027 keeps wheel-*intent* dispatch per handler, because the four panels do
19
- * not agree on what a gesture means — and that still holds. This is the one rule
20
- * two of them genuinely share, which the ADR states outright ("same rule as the
21
- * variant displays, and deliberately so: same sample-row shape, same coupled
22
- * row-height axis"). It is unified for exactly that reason, and no further: the
23
- * pileup / canvas-basic rule (`shift` scrolls, nothing resizes) stays where it
24
- * is. `scrollZoom` and `viewportHeight` are inputs rather than reads off the
25
- * model, so core needs no view typing and each display keeps naming its own
26
- * rows-area height.
4
+ * and MAF: `shift`+wheel resizes the rows, keeping the row under the cursor
5
+ * put, and a plain wheel scrolls them unless `scrollZoom` gave it to the view.
6
+ * ctrl/meta is the browser's zoom whatever else is held. The canvas-panel rule,
7
+ * where `shift` scrolls, is `usePanelVirtualScroll` (ADR-027).
27
8
  */
28
- export declare function useRowVirtualScroll(el: HTMLElement | null, model: RowScrollTarget, { viewportHeight, scrollZoom, }: {
29
- viewportHeight: number;
30
- scrollZoom: boolean;
31
- }): void;
32
- export {};
9
+ export declare function useRowVirtualScroll(el: HTMLElement | null, model: RowResizeTarget, scrollZoom: boolean): void;
@@ -2,62 +2,21 @@ import { applyRowResizeWheel } from './applyRowResizeWheel.js';
2
2
  import { useVirtualScrollWheel } from './useVirtualScrollWheel.js';
3
3
  /**
4
4
  * Wheel gestures over a **row-stack** panel — the multi-sample variant displays
5
- * and MAF: `shift`+wheel resizes the rows (a vertical-zoom that keeps the row
6
- * under the cursor put), a plain wheel scrolls them, and anything the panel
7
- * can't consume is left to bubble to the view.
8
- *
9
- * These panels paint a fixed-size canvas at `-scrollTop` rather than living in a
10
- * DOM overflow container, so nothing scrolls them without this.
11
- *
12
- * ADR-027 keeps wheel-*intent* dispatch per handler, because the four panels do
13
- * not agree on what a gesture means — and that still holds. This is the one rule
14
- * two of them genuinely share, which the ADR states outright ("same rule as the
15
- * variant displays, and deliberately so: same sample-row shape, same coupled
16
- * row-height axis"). It is unified for exactly that reason, and no further: the
17
- * pileup / canvas-basic rule (`shift` scrolls, nothing resizes) stays where it
18
- * is. `scrollZoom` and `viewportHeight` are inputs rather than reads off the
19
- * model, so core needs no view typing and each display keeps naming its own
20
- * rows-area height.
5
+ * and MAF: `shift`+wheel resizes the rows, keeping the row under the cursor
6
+ * put, and a plain wheel scrolls them unless `scrollZoom` gave it to the view.
7
+ * ctrl/meta is the browser's zoom whatever else is held. The canvas-panel rule,
8
+ * where `shift` scrolls, is `usePanelVirtualScroll` (ADR-027).
21
9
  */
22
- export function useRowVirtualScroll(el, model, { viewportHeight, scrollZoom, }) {
23
- useVirtualScrollWheel(el, (e, applyScroll, rowsEl) => {
24
- // ctrl/meta is the browser's own zoom (and the view's pinch-zoom) and is
25
- // never ours, whatever else is held. Tested first rather than only in the
26
- // scroll branch: ctrl+shift+wheel used to reach the resize below, which
27
- // `preventDefault`s — so a row-stack display swallowed page zoom where
28
- // every other display passes it through.
10
+ export function useRowVirtualScroll(el, model, scrollZoom) {
11
+ useVirtualScrollWheel(el, model, (e, scroll, rowsEl) => {
29
12
  if (e.ctrlKey || e.metaKey) {
30
13
  return;
31
14
  }
32
15
  if (e.shiftKey) {
33
- // Resizing exits fit-to-height into a pinned height, which is what makes
34
- // the gesture meaningful: the fit height is exactly the floor it shrinks
35
- // to, so there is nothing to zoom while the sentinel is set.
36
- applyRowResizeWheel(e, rowsEl, {
37
- effectiveRowHeight: model.effectiveRowHeight,
38
- scrollTop: model.scrollTop,
39
- nrow: model.nrow,
40
- viewportHeight,
41
- setRowHeight: n => {
42
- model.setRowHeight(n);
43
- },
44
- setScrollTop: n => {
45
- model.setScrollTop(n);
46
- },
47
- });
16
+ applyRowResizeWheel(e, rowsEl, model);
48
17
  }
49
18
  else if (!scrollZoom) {
50
- // A gesture the panel can't consume is left alone: with the rows fitting
51
- // the track (`scrollableHeight === 0`, always true in fit-to-height mode)
52
- // the wheel reaches the view and zooms or scrolls the page exactly as it
53
- // does over any other track. Same for the explicit zoom gestures.
54
- applyScroll(e, {
55
- scrollTop: model.scrollTop,
56
- viewportHeight,
57
- scrollableHeight: model.scrollableHeight,
58
- }, n => {
59
- model.setScrollTop(n);
60
- });
19
+ scroll();
61
20
  }
62
21
  });
63
22
  }
@@ -1,7 +1,23 @@
1
- export interface VirtualScrollOpts {
1
+ /**
2
+ * What a virtually scrolled panel reads and writes. `TrackHeightMixin`
3
+ * implements it, so a display passes itself.
4
+ */
5
+ export interface VirtualScrollModel {
2
6
  scrollTop: number;
3
- viewportHeight: number;
7
+ /** 0 when the content fits; never sub-pixel */
4
8
  scrollableHeight: number;
9
+ scrollViewportHeight: number;
10
+ setScrollTop: (scrollTop: number) => void;
5
11
  }
6
- export type ApplyVirtualScroll = (e: WheelEvent, opts: VirtualScrollOpts, commit: (scrollTop: number) => void) => void;
7
- export declare function useVirtualScrollWheel(panel: HTMLElement | null, onWheel: (e: WheelEvent, applyScroll: ApplyVirtualScroll, el: HTMLElement) => void): void;
12
+ /**
13
+ * Non-passive wheel wiring for a canvas-backed virtual scroll. Owns the scroll
14
+ * latch (and so `preventDefault`), per-frame coalescing of `setScrollTop`, and
15
+ * the listener lifecycle. `onWheel` decides what the gesture means and calls
16
+ * `scroll` when it means scrolling `model`.
17
+ *
18
+ * **Bind this to the panel, not to the `<canvas>`.** A canvas holds no DOM
19
+ * children, so the clickable overlays drawn over it are siblings, and a wheel
20
+ * over one never reaches a listener on the canvas. Overlays that run their own
21
+ * gestures opt out with `[data-gesture-owner]`.
22
+ */
23
+ export declare function useVirtualScrollWheel(panel: HTMLElement | null, model: VirtualScrollModel, onWheel: (e: WheelEvent, scroll: () => void, panel: HTMLElement) => void): void;