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

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 (611) hide show
  1. package/README.md +1476 -265
  2. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +3 -2
  3. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +5 -3
  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 +16 -9
  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 +50 -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/configSchema.d.ts +1 -1
  35. package/esm/BaseFeatureWidget/formatDetails.d.ts +13 -29
  36. package/esm/BaseFeatureWidget/formatDetails.js +62 -83
  37. package/esm/BaseFeatureWidget/index.d.ts +2 -1
  38. package/esm/BaseFeatureWidget/stateModelFactory.d.ts +42 -29
  39. package/esm/BaseFeatureWidget/stateModelFactory.js +98 -98
  40. package/esm/BaseFeatureWidget/types.d.ts +12 -6
  41. package/esm/BaseFeatureWidget/util.d.ts +0 -10
  42. package/esm/BaseFeatureWidget/util.js +0 -17
  43. package/esm/CorePlugin.js +2 -2
  44. package/esm/PluginLoader.d.ts +24 -13
  45. package/esm/PluginLoader.js +167 -51
  46. package/esm/PluginManager.d.ts +130 -24
  47. package/esm/PluginManager.js +180 -32
  48. package/esm/ReExports/MuiDataGridReExports.d.ts +1 -0
  49. package/esm/ReExports/MuiDataGridReExports.js +2 -2
  50. package/esm/ReExports/coreModules.generated.d.ts +2 -0
  51. package/esm/ReExports/coreModules.generated.js +528 -0
  52. package/esm/ReExports/coreWorkerModules.generated.d.ts +2 -0
  53. package/esm/ReExports/coreWorkerModules.generated.js +488 -0
  54. package/esm/ReExports/frameworkModules.d.ts +2 -0
  55. package/esm/ReExports/frameworkModules.js +68 -0
  56. package/esm/ReExports/frameworkShared.d.ts +12 -0
  57. package/esm/ReExports/frameworkShared.js +16 -0
  58. package/esm/ReExports/frameworkWorkerModules.generated.d.ts +2 -0
  59. package/esm/ReExports/frameworkWorkerModules.generated.js +130 -0
  60. package/esm/ReExports/list.js +527 -79
  61. package/esm/ReExports/modules.d.ts +1 -1
  62. package/esm/ReExports/modules.js +10 -165
  63. package/esm/ReExports/registry.d.ts +1 -0
  64. package/esm/ReExports/registry.js +23 -5
  65. package/esm/ReExports/uiStub.d.ts +3 -0
  66. package/esm/ReExports/uiStub.js +33 -0
  67. package/esm/ReExports/workerModules.d.ts +2 -0
  68. package/esm/ReExports/workerModules.js +11 -0
  69. package/esm/TextSearch/TextSearchManager.d.ts +27 -13
  70. package/esm/TextSearch/TextSearchManager.js +77 -36
  71. package/esm/TextSearch/places.d.ts +12 -0
  72. package/esm/TextSearch/places.js +94 -0
  73. package/esm/assemblyManager/assembly.d.ts +21 -19
  74. package/esm/assemblyManager/assembly.js +28 -26
  75. package/esm/assemblyManager/assemblyAdapters.d.ts +1 -1
  76. package/esm/assemblyManager/assemblyAdapters.js +8 -2
  77. package/esm/assemblyManager/assemblyConfigSchema.d.ts +31 -90
  78. package/esm/assemblyManager/assemblyConfigSchema.js +35 -47
  79. package/esm/assemblyManager/assemblyManager.d.ts +35 -180
  80. package/esm/assemblyManager/assemblyManager.js +47 -51
  81. package/esm/assemblyManager/expandAssemblyConfigShorthand.d.ts +25 -18
  82. package/esm/assemblyManager/expandAssemblyConfigShorthand.js +78 -49
  83. package/esm/assemblyManager/geneticCodes.js +2 -5
  84. package/esm/assemblyManager/getSequenceAdapterConfig.d.ts +10 -0
  85. package/esm/assemblyManager/getSequenceAdapterConfig.js +10 -0
  86. package/esm/assemblyManager/indexAssemblyNames.d.ts +9 -0
  87. package/esm/assemblyManager/indexAssemblyNames.js +22 -0
  88. package/esm/assemblyManager/loadRefNameMap.d.ts +1 -1
  89. package/esm/assemblyManager/loadRefNameMap.js +4 -9
  90. package/esm/assemblyManager/refNameMapKey.d.ts +7 -0
  91. package/esm/assemblyManager/refNameMapKey.js +12 -0
  92. package/esm/checkPlugins.d.ts +2 -0
  93. package/esm/checkPlugins.js +38 -17
  94. package/esm/configuration/bamIndexFields.d.ts +49 -0
  95. package/esm/configuration/bamIndexFields.js +41 -0
  96. package/esm/configuration/configurationSchema.d.ts +101 -71
  97. package/esm/configuration/configurationSchema.js +207 -134
  98. package/esm/configuration/configurationSchemaUnion.d.ts +39 -0
  99. package/esm/configuration/configurationSchemaUnion.js +56 -0
  100. package/esm/configuration/configurationSlot.d.ts +150 -60
  101. package/esm/configuration/configurationSlot.js +103 -75
  102. package/esm/configuration/fillLocations.d.ts +14 -0
  103. package/esm/configuration/fillLocations.js +14 -0
  104. package/esm/configuration/formatAboutConfigSchema.d.ts +7 -21
  105. package/esm/configuration/formatDetailsConfigSchema.d.ts +11 -37
  106. package/esm/configuration/formatDetailsConfigSchema.js +10 -13
  107. package/esm/configuration/fullConfSnapshot.d.ts +4 -19
  108. package/esm/configuration/fullConfSnapshot.js +30 -52
  109. package/esm/configuration/getConf.d.ts +45 -41
  110. package/esm/configuration/getConf.js +111 -44
  111. package/esm/configuration/index.d.ts +24 -11
  112. package/esm/configuration/index.js +15 -7
  113. package/esm/configuration/indexType.d.ts +26 -0
  114. package/esm/configuration/indexType.js +38 -0
  115. package/esm/configuration/mergeFormatCallbacks.d.ts +6 -7
  116. package/esm/configuration/mergeFormatCallbacks.js +13 -10
  117. package/esm/configuration/readConfObject.d.ts +2 -24
  118. package/esm/configuration/readConfObject.js +20 -63
  119. package/esm/configuration/requirements.d.ts +37 -0
  120. package/esm/configuration/requirements.js +88 -0
  121. package/esm/configuration/schemaRegistry.d.ts +32 -15
  122. package/esm/configuration/schemaRegistry.js +33 -35
  123. package/esm/configuration/schemaTypes.d.ts +21 -5
  124. package/esm/configuration/schemaTypes.js +66 -55
  125. package/esm/configuration/slotFacade.d.ts +12 -29
  126. package/esm/configuration/slotFacade.js +44 -23
  127. package/esm/configuration/snapshotPreprocess.d.ts +43 -0
  128. package/esm/configuration/snapshotPreprocess.js +161 -0
  129. package/esm/configuration/tabixIndexFields.d.ts +30 -4
  130. package/esm/configuration/tabixIndexFields.js +21 -4
  131. package/esm/configuration/tabixShorthand.d.ts +34 -17
  132. package/esm/configuration/tabixShorthand.js +49 -22
  133. package/esm/configuration/types.d.ts +182 -43
  134. package/esm/configuration/uriShorthand.d.ts +9 -0
  135. package/esm/configuration/uriShorthand.js +16 -0
  136. package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +13 -19
  137. package/esm/data_adapters/BaseAdapter/BaseAdapter.js +12 -19
  138. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +40 -2
  139. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +68 -5
  140. package/esm/data_adapters/BaseAdapter/featureDensity.d.ts +40 -0
  141. package/esm/data_adapters/BaseAdapter/featureDensity.js +31 -0
  142. package/esm/data_adapters/BaseAdapter/index.d.ts +23 -3
  143. package/esm/data_adapters/BaseAdapter/index.js +1 -0
  144. package/esm/data_adapters/BaseAdapter/rowSources.d.ts +37 -0
  145. package/esm/data_adapters/BaseAdapter/rowSources.js +7 -0
  146. package/esm/data_adapters/BaseAdapter/stats.d.ts +33 -1
  147. package/esm/data_adapters/BaseAdapter/stats.js +52 -13
  148. package/esm/data_adapters/BaseAdapter/types.d.ts +8 -12
  149. package/esm/data_adapters/BaseAdapter/zoomRange.d.ts +10 -0
  150. package/esm/data_adapters/CytobandAdapter/CytobandAdapter.js +1 -1
  151. package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +7 -11
  152. package/esm/data_adapters/CytobandAdapter/configSchema.js +3 -17
  153. package/esm/data_adapters/dataAdapterCache.d.ts +19 -2
  154. package/esm/data_adapters/dataAdapterCache.js +44 -10
  155. package/esm/data_adapters/getFeatureAdapter.d.ts +6 -4
  156. package/esm/data_adapters/getFeatureAdapter.js +8 -8
  157. package/esm/data_adapters/getSequenceSubAdapter.d.ts +7 -9
  158. package/esm/data_adapters/getSequenceSubAdapter.js +8 -10
  159. package/esm/pluggableElementTypes/AdapterType.d.ts +8 -8
  160. package/esm/pluggableElementTypes/AdapterType.js +1 -1
  161. package/esm/pluggableElementTypes/DisplayType.d.ts +46 -16
  162. package/esm/pluggableElementTypes/DisplayType.js +22 -12
  163. package/esm/pluggableElementTypes/LazyStateModelElement.d.ts +32 -0
  164. package/esm/pluggableElementTypes/LazyStateModelElement.js +77 -0
  165. package/esm/pluggableElementTypes/PluggableElementBase.d.ts +3 -5
  166. package/esm/pluggableElementTypes/PluggableElementBase.js +3 -5
  167. package/esm/pluggableElementTypes/RpcMethodType.d.ts +11 -1
  168. package/esm/pluggableElementTypes/RpcMethodType.js +25 -9
  169. package/esm/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.d.ts +1 -2
  170. package/esm/pluggableElementTypes/TextSearchAdapterType.d.ts +7 -7
  171. package/esm/pluggableElementTypes/ViewType.d.ts +20 -4
  172. package/esm/pluggableElementTypes/ViewType.js +32 -4
  173. package/esm/pluggableElementTypes/addMenuItems.d.ts +3 -2
  174. package/esm/pluggableElementTypes/extendElementType.d.ts +1 -2
  175. package/esm/pluggableElementTypes/extendElementType.js +9 -5
  176. package/esm/pluggableElementTypes/index.d.ts +2 -1
  177. package/esm/pluggableElementTypes/index.js +1 -1
  178. package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +19 -9
  179. package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +65 -27
  180. package/esm/pluggableElementTypes/models/BaseDisplayModel.js +72 -10
  181. package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +65 -16
  182. package/esm/pluggableElementTypes/models/BaseTrackModel.js +179 -117
  183. package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +85 -16
  184. package/esm/pluggableElementTypes/models/BaseViewModel.js +53 -10
  185. package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +26 -16
  186. package/esm/pluggableElementTypes/models/assertDisplayContract.d.ts +15 -11
  187. package/esm/pluggableElementTypes/models/assertDisplayContract.js +25 -32
  188. package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +22 -18
  189. package/esm/pluggableElementTypes/models/baseConnectionConfig.js +5 -5
  190. package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +26 -31
  191. package/esm/pluggableElementTypes/models/baseTrackConfig.d.ts +108 -147
  192. package/esm/pluggableElementTypes/models/baseTrackConfig.js +96 -73
  193. package/esm/pluggableElementTypes/models/components/SaveTrackData.js +4 -6
  194. package/esm/pluggableElementTypes/models/components/fetchTrackData.d.ts +3 -4
  195. package/esm/pluggableElementTypes/models/components/fetchTrackData.js +3 -3
  196. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +23 -13
  197. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +80 -48
  198. package/esm/pluggableElementTypes/models/index.d.ts +2 -3
  199. package/esm/pluggableElementTypes/models/index.js +2 -3
  200. package/esm/pluggableElementTypes/models/migrateTrackConfig.d.ts +15 -1
  201. package/esm/pluggableElementTypes/models/migrateTrackConfig.js +85 -25
  202. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.d.ts +4 -3
  203. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.js +141 -19
  204. package/esm/pluggableElementTypes/models/saveTrackFileTypes/types.d.ts +3 -3
  205. package/esm/pluginDefinitions.d.ts +34 -7
  206. package/esm/pluginDefinitions.js +54 -20
  207. package/esm/rpc/BaseRpcDriver.d.ts +2 -2
  208. package/esm/rpc/BaseRpcDriver.js +25 -30
  209. package/esm/rpc/MainThreadRpcDriver.d.ts +2 -2
  210. package/esm/rpc/MainThreadRpcDriver.js +13 -8
  211. package/esm/rpc/RpcClient.d.ts +18 -6
  212. package/esm/rpc/RpcClient.js +51 -16
  213. package/esm/rpc/RpcManager.d.ts +14 -10
  214. package/esm/rpc/RpcManager.js +11 -1
  215. package/esm/rpc/RpcRegistry.d.ts +40 -7
  216. package/esm/rpc/RpcServer.d.ts +3 -1
  217. package/esm/rpc/RpcServer.js +19 -12
  218. package/esm/rpc/WebWorkerRpcDriver.d.ts +11 -4
  219. package/esm/rpc/WebWorkerRpcDriver.js +64 -68
  220. package/esm/rpc/byteBudget.d.ts +20 -5
  221. package/esm/rpc/byteBudget.js +16 -5
  222. package/esm/rpc/configSchema.d.ts +7 -21
  223. package/esm/rpc/coreRpcMethods.d.ts +4 -0
  224. package/esm/rpc/coreRpcMethods.js +4 -0
  225. package/esm/rpc/methods/CoreGetEncodedFeature.d.ts +13 -0
  226. package/esm/rpc/methods/CoreGetEncodedFeature.js +32 -0
  227. package/esm/rpc/methods/CoreGetEncodedLayers.d.ts +16 -0
  228. package/esm/rpc/methods/CoreGetEncodedLayers.js +59 -0
  229. package/esm/rpc/methods/CoreGetExportData.js +3 -4
  230. package/esm/rpc/methods/CoreGetFeatureDensity.d.ts +11 -0
  231. package/esm/rpc/methods/CoreGetFeatureDensity.js +22 -0
  232. package/esm/rpc/methods/CoreGetFeatures.js +3 -5
  233. package/esm/rpc/methods/CoreGetRefNames.js +2 -12
  234. package/esm/rpc/methods/CoreGetRegionByteEstimate.js +1 -1
  235. package/esm/rpc/methods/CoreGetSequence.js +2 -2
  236. package/esm/rpc/methods/CoreLoadAdapterCode.d.ts +13 -0
  237. package/esm/rpc/methods/CoreLoadAdapterCode.js +16 -0
  238. package/esm/rpc/methods/layerFeatures.d.ts +33 -0
  239. package/esm/rpc/methods/layerFeatures.js +29 -0
  240. package/esm/svg/SvgExport.js +6 -7
  241. package/esm/svg/SvgThemeProviders.d.ts +12 -0
  242. package/esm/svg/SvgThemeProviders.js +15 -0
  243. package/esm/svg/exportViewSvg.d.ts +28 -0
  244. package/esm/svg/exportViewSvg.js +13 -0
  245. package/esm/svg/normalizeSvgMarkup.d.ts +7 -0
  246. package/esm/svg/normalizeSvgMarkup.js +99 -0
  247. package/esm/svg/serializeSvg.d.ts +7 -0
  248. package/esm/svg/serializeSvg.js +11 -0
  249. package/esm/svg/svgId.d.ts +1 -1
  250. package/esm/svg/svgId.js +1 -1
  251. package/esm/svg/svgReady.d.ts +9 -7
  252. package/esm/svg/svgReady.js +8 -7
  253. package/esm/svg/trackNames.d.ts +7 -5
  254. package/esm/svg/trackNames.js +12 -9
  255. package/esm/svg/wrapSvgExport.js +6 -74
  256. package/esm/ui/AddCustomPluginDialog.js +3 -8
  257. package/esm/ui/AppReadyMarker.d.ts +45 -0
  258. package/esm/ui/AppReadyMarker.js +89 -0
  259. package/esm/ui/BaseExportSvgDialog.d.ts +1 -1
  260. package/esm/ui/CascadingMenu.js +181 -104
  261. package/esm/ui/DropDownMenu.js +2 -1
  262. package/esm/ui/ErrorBanner.js +1 -1
  263. package/esm/ui/ErrorBoundary.d.ts +2 -2
  264. package/esm/ui/ErrorMessageStackTraceContents.js +2 -1
  265. package/esm/ui/ErrorMessageStackTraceDialog.js +5 -11
  266. package/esm/ui/ExportSvgDialog.d.ts +1 -1
  267. package/esm/ui/FileDropZone.js +2 -1
  268. package/esm/ui/FileSelector/useInternetAccounts.d.ts +156 -96
  269. package/esm/ui/HoverMenu.d.ts +1 -2
  270. package/esm/ui/HoverMenu.js +6 -3
  271. package/esm/ui/JexlFilterDialog.d.ts +13 -10
  272. package/esm/ui/JexlFilterDialog.js +122 -49
  273. package/esm/ui/JexlFilterRowEditors.d.ts +15 -0
  274. package/esm/ui/JexlFilterRowEditors.js +90 -0
  275. package/esm/ui/LazyBaseTooltip.d.ts +4 -0
  276. package/esm/ui/LazyBaseTooltip.js +9 -0
  277. package/esm/ui/LegendSwatchGlyph.js +26 -21
  278. package/esm/ui/LoadingOverlay.d.ts +14 -0
  279. package/esm/ui/LoadingOverlay.js +4 -2
  280. package/esm/ui/MenuTypes.d.ts +23 -53
  281. package/esm/ui/MenuTypes.js +3 -0
  282. package/esm/ui/MonospaceTextField.d.ts +2 -1
  283. package/esm/ui/MonospaceTextField.js +23 -20
  284. package/esm/ui/PaletteContext.d.ts +10 -5
  285. package/esm/ui/PaletteContext.js +44 -6
  286. package/esm/ui/RefNameAutocomplete/SearchOption.d.ts +13 -0
  287. package/esm/ui/RefNameAutocomplete/SearchOption.js +45 -0
  288. package/esm/ui/RefNameAutocomplete/index.d.ts +1 -2
  289. package/esm/ui/RefNameAutocomplete/index.js +8 -2
  290. package/esm/ui/RefNameAutocomplete/util.d.ts +13 -0
  291. package/esm/ui/RefNameAutocomplete/util.js +42 -1
  292. package/esm/ui/ResizeHandle.d.ts +3 -1
  293. package/esm/ui/ResizeHandle.js +44 -11
  294. package/esm/ui/ScrollChrome.d.ts +13 -0
  295. package/esm/ui/ScrollChrome.js +11 -0
  296. package/esm/ui/ScrollEdgeShadow.d.ts +6 -9
  297. package/esm/ui/ScrollEdgeShadow.js +14 -35
  298. package/esm/ui/ScrollZoomToggle.d.ts +4 -27
  299. package/esm/ui/ScrollZoomToggle.js +34 -51
  300. package/esm/ui/SessionJsonPanel.d.ts +3 -0
  301. package/esm/ui/SessionJsonPanel.js +14 -0
  302. package/esm/ui/SettingsChangesTable.d.ts +1 -0
  303. package/esm/ui/SettingsChangesTable.js +49 -11
  304. package/esm/ui/ShareLinkField.d.ts +1 -3
  305. package/esm/ui/ShareLinkField.js +13 -40
  306. package/esm/ui/SizeSliderRow.d.ts +1 -3
  307. package/esm/ui/SizeSliderRow.js +4 -6
  308. package/esm/ui/SnackbarModel.js +79 -67
  309. package/esm/ui/StatusProgressBar.js +2 -2
  310. package/esm/ui/SvgColorLegend.d.ts +9 -4
  311. package/esm/ui/SvgColorLegend.js +82 -41
  312. package/esm/ui/VerticalScrollbar.d.ts +13 -34
  313. package/esm/ui/VerticalScrollbar.js +29 -83
  314. package/esm/ui/ViewLoadingScreen.d.ts +5 -4
  315. package/esm/ui/ViewLoadingScreen.js +8 -32
  316. package/esm/ui/colorScale.d.ts +92 -0
  317. package/esm/ui/colorScale.js +72 -0
  318. package/esm/ui/colors.d.ts +64 -0
  319. package/esm/ui/colors.js +230 -1
  320. package/esm/ui/hoverBoxStyle.d.ts +14 -2
  321. package/esm/ui/hoverBoxStyle.js +17 -2
  322. package/esm/ui/index.d.ts +12 -12
  323. package/esm/ui/index.js +14 -22
  324. package/esm/ui/launchViewMenu.js +15 -5
  325. package/esm/ui/legendMenuItem.d.ts +10 -32
  326. package/esm/ui/legendMenuItem.js +9 -36
  327. package/esm/ui/legendSpec.d.ts +15 -8
  328. package/esm/ui/legendSpec.js +14 -23
  329. package/esm/ui/makeSizeMenu.d.ts +0 -6
  330. package/esm/ui/makeSizeMenu.js +6 -30
  331. package/esm/ui/measureLegendText.js +1 -1
  332. package/esm/ui/menuItemAdornment.d.ts +9 -20
  333. package/esm/ui/menuItemAdornment.js +10 -32
  334. package/esm/ui/menuItems.d.ts +2 -7
  335. package/esm/ui/menuItems.js +1 -6
  336. package/esm/ui/multiTrackMenuItems.d.ts +6 -0
  337. package/esm/ui/palette.d.ts +118 -116
  338. package/esm/ui/palette.js +114 -75
  339. package/esm/ui/replaceViewAction.d.ts +1 -1
  340. package/esm/ui/replaceViewAction.js +1 -1
  341. package/esm/ui/theme.d.ts +43 -119
  342. package/esm/ui/theme.js +62 -78
  343. package/esm/ui/toggleMenuItems.d.ts +1 -3
  344. package/esm/ui/toggleMenuItems.js +6 -5
  345. package/esm/ui/useAssemblySelection.d.ts +4 -4
  346. package/esm/ui/viewHeaderHeight.d.ts +1 -0
  347. package/esm/ui/viewHeaderHeight.js +1 -0
  348. package/esm/util/Base1DUtils.d.ts +5 -3
  349. package/esm/util/Base1DUtils.js +14 -6
  350. package/esm/util/Base1DViewModel.d.ts +2 -1
  351. package/esm/util/Base1DViewModel.js +3 -2
  352. package/esm/util/SvgCanvas.d.ts +15 -13
  353. package/esm/util/SvgCanvas.js +76 -56
  354. package/esm/util/aborting.d.ts +39 -0
  355. package/esm/util/aborting.js +88 -6
  356. package/esm/util/adapterMetadata.d.ts +1 -1
  357. package/esm/util/adapterMetadata.js +6 -5
  358. package/esm/util/addAndShowTrack.d.ts +2 -5
  359. package/esm/util/addAndShowTrack.js +5 -1
  360. package/esm/util/addRelativeUris.d.ts +17 -5
  361. package/esm/util/addRelativeUris.js +46 -10
  362. package/esm/util/addTrackFromWidget.d.ts +2 -5
  363. package/esm/util/addTrackFromWidget.js +5 -4
  364. package/esm/util/aggregateFieldName.d.ts +10 -0
  365. package/esm/util/aggregateFieldName.js +8 -0
  366. package/esm/util/analytics.js +46 -13
  367. package/esm/util/animationAllowed.d.ts +9 -0
  368. package/esm/util/animationAllowed.js +13 -0
  369. package/esm/util/applyRowResizeWheel.d.ts +10 -5
  370. package/esm/util/applyRowResizeWheel.js +10 -21
  371. package/esm/util/bandHeight.d.ts +10 -0
  372. package/esm/util/bandHeight.js +29 -0
  373. package/esm/util/bandLayout.d.ts +4 -4
  374. package/esm/util/bandLayout.js +4 -4
  375. package/esm/util/bezierConnector.d.ts +4 -3
  376. package/esm/util/bezierConnector.js +38 -45
  377. package/esm/util/bgzfWorkerPool.d.ts +20 -74
  378. package/esm/util/bgzfWorkerPool.js +20 -74
  379. package/esm/util/binnedAggregate.d.ts +17 -0
  380. package/esm/util/binnedAggregate.js +275 -0
  381. package/esm/util/cacheBudgets.d.ts +22 -19
  382. package/esm/util/cacheBudgets.js +22 -19
  383. package/esm/util/cachedSetup.d.ts +1 -1
  384. package/esm/util/cachedSetup.js +2 -2
  385. package/esm/util/categoricalField.d.ts +56 -0
  386. package/esm/util/categoricalField.js +73 -0
  387. package/esm/util/clampToContig.d.ts +17 -0
  388. package/esm/util/clampToContig.js +19 -0
  389. package/esm/util/coarseStripHTML.js +1 -2
  390. package/esm/util/color/cssColorsLevel4.d.ts +1 -0
  391. package/esm/util/color/cssColorsLevel4.js +1 -0
  392. package/esm/util/color/index.d.ts +5 -3
  393. package/esm/util/color/index.js +7 -4
  394. package/esm/util/colorBits.d.ts +3 -3
  395. package/esm/util/colorBits.js +19 -44
  396. package/esm/util/colorRamp.d.ts +49 -5
  397. package/esm/util/colorRamp.js +169 -18
  398. package/esm/util/colorScale.d.ts +156 -0
  399. package/esm/util/colorScale.js +243 -0
  400. package/esm/util/colorSchemes.d.ts +21 -0
  401. package/esm/util/colorSchemes.js +30 -0
  402. package/esm/util/{createStopTokenRotation.d.ts → createAbortRotation.d.ts} +21 -23
  403. package/esm/util/{createStopTokenRotation.js → createAbortRotation.js} +21 -52
  404. package/esm/util/createSvgRasterCanvas.d.ts +10 -0
  405. package/esm/util/cssColorParse.d.ts +15 -0
  406. package/esm/util/cssColorParse.js +53 -0
  407. package/esm/util/diagonalizeRegions.d.ts +2 -3
  408. package/esm/util/diagonalizeRegions.js +8 -13
  409. package/esm/util/expandLooseSearchIndex.d.ts +19 -0
  410. package/esm/util/expandLooseSearchIndex.js +29 -0
  411. package/esm/util/featureTable.d.ts +224 -0
  412. package/esm/util/featureTable.js +366 -0
  413. package/esm/util/featureTransforms.d.ts +80 -0
  414. package/esm/util/featureTransforms.js +1579 -0
  415. package/esm/util/featureTypes.d.ts +24 -0
  416. package/esm/util/featureTypes.js +35 -0
  417. package/esm/util/fetchAndMaybeUnzip.js +16 -9
  418. package/esm/util/fetchContext.d.ts +7 -8
  419. package/esm/util/fetchContext.js +3 -3
  420. package/esm/util/fetchHub.d.ts +4 -2
  421. package/esm/util/fetchHub.js +2 -2
  422. package/esm/util/fetchPhases.d.ts +10 -10
  423. package/esm/util/fetchSeq.d.ts +2 -3
  424. package/esm/util/fetchSeq.js +2 -2
  425. package/esm/util/fieldReader.d.ts +17 -0
  426. package/esm/util/fieldReader.js +62 -0
  427. package/esm/util/freezeDeep.d.ts +8 -10
  428. package/esm/util/freezeDeep.js +8 -10
  429. package/esm/util/groupKeys.d.ts +77 -0
  430. package/esm/util/groupKeys.js +155 -0
  431. package/esm/util/highlights.d.ts +10 -6
  432. package/esm/util/highlights.js +12 -25
  433. package/esm/util/hooks.d.ts +31 -2
  434. package/esm/util/hooks.js +72 -3
  435. package/esm/util/index.d.ts +11 -11
  436. package/esm/util/index.js +11 -10
  437. package/esm/util/indexCandidates.d.ts +1 -31
  438. package/esm/util/indexCandidates.js +5 -63
  439. package/esm/util/installFetch.d.ts +77 -37
  440. package/esm/util/installFetch.js +65 -38
  441. package/esm/util/installInitAutorun.d.ts +14 -13
  442. package/esm/util/installInitAutorun.js +17 -17
  443. package/esm/util/installPrerequisiteFetch.d.ts +115 -0
  444. package/esm/util/installPrerequisiteFetch.js +111 -0
  445. package/esm/util/io/index.js +19 -14
  446. package/esm/util/isDataCurrent.d.ts +7 -5
  447. package/esm/util/isDataCurrent.js +9 -6
  448. package/esm/util/isTextEntryFocused.d.ts +7 -0
  449. package/esm/util/isTextEntryFocused.js +16 -0
  450. package/esm/util/jexl.js +24 -21
  451. package/esm/util/jexlFilterRows.d.ts +89 -0
  452. package/esm/util/jexlFilterRows.js +252 -0
  453. package/esm/util/jexlFilters.d.ts +20 -27
  454. package/esm/util/jexlFilters.js +23 -11
  455. package/esm/util/jexlStrings.d.ts +3 -4
  456. package/esm/util/jexlStrings.js +2 -3
  457. package/esm/util/layouts/GranularRectLayout.d.ts +8 -1
  458. package/esm/util/layouts/GranularRectLayout.js +25 -8
  459. package/esm/util/lazyAfterAttach.d.ts +13 -0
  460. package/esm/util/lazyAfterAttach.js +31 -0
  461. package/esm/util/lazyWithPreload.d.ts +19 -0
  462. package/esm/util/lazyWithPreload.js +27 -0
  463. package/esm/util/legendCandidates.d.ts +72 -0
  464. package/esm/util/legendCandidates.js +138 -0
  465. package/esm/util/localStorage.js +4 -4
  466. package/esm/util/markEncoding.d.ts +150 -0
  467. package/esm/util/markEncoding.js +845 -0
  468. package/esm/util/markEncodingTypes.d.ts +588 -0
  469. package/esm/util/markEncodingTypes.js +8 -0
  470. package/esm/util/mst-reflection.d.ts +2 -20
  471. package/esm/util/mst-reflection.js +3 -53
  472. package/esm/util/mstUtils.d.ts +31 -23
  473. package/esm/util/mstUtils.js +39 -24
  474. package/esm/util/numericUtils.d.ts +7 -0
  475. package/esm/util/numericUtils.js +16 -0
  476. package/esm/util/numericValue.d.ts +14 -0
  477. package/esm/util/numericValue.js +34 -0
  478. package/esm/util/openFeatureWidget.d.ts +5 -0
  479. package/esm/util/openFeatureWidget.js +2 -2
  480. package/esm/util/openViews.d.ts +17 -0
  481. package/esm/util/openViews.js +22 -0
  482. package/esm/util/parentWalk.d.ts +1 -1
  483. package/esm/util/parentWalk.js +1 -1
  484. package/esm/util/parseLineByLine.d.ts +4 -5
  485. package/esm/util/parseLineByLine.js +8 -14
  486. package/esm/util/pluginStore.d.ts +6 -8
  487. package/esm/util/pluginStore.js +17 -16
  488. package/esm/util/preloadComponent.d.ts +5 -0
  489. package/esm/util/preloadComponent.js +11 -0
  490. package/esm/util/progress.d.ts +22 -22
  491. package/esm/util/progress.js +27 -26
  492. package/esm/util/quantileExtent.d.ts +49 -0
  493. package/esm/util/quantileExtent.js +162 -0
  494. package/esm/util/range.d.ts +13 -9
  495. package/esm/util/range.js +17 -8
  496. package/esm/util/renameRegions.d.ts +26 -6
  497. package/esm/util/renameRegions.js +68 -54
  498. package/esm/util/renderToStaticMarkup.js +24 -14
  499. package/esm/util/rxjs.d.ts +23 -8
  500. package/esm/util/rxjs.js +61 -15
  501. package/esm/util/samplesTsv.d.ts +49 -0
  502. package/esm/util/samplesTsv.js +86 -0
  503. package/esm/util/scheduleDetachedDestroy.d.ts +18 -0
  504. package/esm/util/scheduleDetachedDestroy.js +24 -0
  505. package/esm/util/scrollLatch.d.ts +1 -0
  506. package/esm/util/scrollLatch.js +8 -0
  507. package/esm/util/selectEncodedFeature.d.ts +16 -0
  508. package/esm/util/selectEncodedFeature.js +34 -0
  509. package/esm/util/sessionSharing.d.ts +7 -5
  510. package/esm/util/sessionSharing.js +23 -23
  511. package/esm/util/shapeNameList.d.ts +2 -0
  512. package/esm/util/shapeNameList.js +6 -0
  513. package/esm/util/shapeNames.d.ts +7 -0
  514. package/esm/util/shapeNames.js +11 -0
  515. package/esm/util/simpleFeature.d.ts +0 -1
  516. package/esm/util/starFusion.d.ts +26 -0
  517. package/esm/util/starFusion.js +37 -0
  518. package/esm/util/stepTables.d.ts +82 -0
  519. package/esm/util/stepTables.js +243 -0
  520. package/esm/util/svAlt.d.ts +145 -0
  521. package/esm/util/svAlt.js +364 -0
  522. package/esm/util/svgColorProps.d.ts +11 -0
  523. package/esm/util/svgColorProps.js +28 -1
  524. package/esm/util/systemColorScheme.d.ts +12 -0
  525. package/esm/util/systemColorScheme.js +27 -0
  526. package/esm/util/tabix.d.ts +13 -8
  527. package/esm/util/tabix.js +17 -12
  528. package/esm/util/thresholdScale.d.ts +91 -0
  529. package/esm/util/thresholdScale.js +166 -0
  530. package/esm/util/timeGate.d.ts +4 -5
  531. package/esm/util/timeGate.js +4 -5
  532. package/esm/util/trackConfigDelta.d.ts +26 -26
  533. package/esm/util/trackConfigDelta.js +63 -47
  534. package/esm/util/tracks.d.ts +121 -40
  535. package/esm/util/tracks.js +497 -112
  536. package/esm/util/translateTranscript.d.ts +44 -0
  537. package/esm/util/translateTranscript.js +102 -0
  538. package/esm/util/types/data.d.ts +0 -2
  539. package/esm/util/types/index.d.ts +121 -22
  540. package/esm/util/types/index.js +9 -0
  541. package/esm/util/types/mst.d.ts +3 -0
  542. package/esm/util/types/mst.js +4 -0
  543. package/esm/util/types/renameIds.d.ts +1 -0
  544. package/esm/util/types/renameIds.js +29 -0
  545. package/esm/util/types/services.d.ts +1 -1
  546. package/esm/util/unknownSnapshotKeys.d.ts +51 -0
  547. package/esm/util/unknownSnapshotKeys.js +82 -0
  548. package/esm/util/useFeatureSequence.js +5 -5
  549. package/esm/util/useFetch.d.ts +3 -4
  550. package/esm/util/useFetch.js +19 -10
  551. package/esm/util/useFetchPlugins.d.ts +6 -2
  552. package/esm/util/useFetchPlugins.js +7 -3
  553. package/esm/util/usePanelVirtualScroll.d.ts +7 -35
  554. package/esm/util/usePanelVirtualScroll.js +9 -36
  555. package/esm/util/useRowVirtualScroll.d.ts +6 -29
  556. package/esm/util/useRowVirtualScroll.js +8 -49
  557. package/esm/util/useVirtualScrollWheel.d.ts +20 -4
  558. package/esm/util/useVirtualScrollWheel.js +40 -74
  559. package/esm/util/viewHighlights.d.ts +3 -0
  560. package/esm/util/viewHighlights.js +5 -0
  561. package/esm/util/viewStatus.d.ts +47 -15
  562. package/esm/util/viewStatus.js +34 -0
  563. package/esm/util/wheelZoom.d.ts +7 -1
  564. package/esm/util/wheelZoom.js +85 -19
  565. package/esm/util/whenViewSettled.d.ts +55 -8
  566. package/esm/util/whenViewSettled.js +56 -7
  567. package/esm/util/withLaunchInput.d.ts +174 -0
  568. package/esm/util/withLaunchInput.js +274 -0
  569. package/package.json +70 -20
  570. package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.d.ts +0 -2
  571. package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.js +0 -8
  572. package/esm/BaseFeatureWidget/BaseFeatureDetail/types.d.ts +0 -8
  573. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.d.ts +0 -80
  574. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.js +0 -583
  575. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.d.ts +0 -141
  576. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.js +0 -1116
  577. package/esm/ReExports/BaseFeatureDetails.d.ts +0 -1
  578. package/esm/ReExports/BaseFeatureDetails.js +0 -10
  579. package/esm/ReExports/index.d.ts +0 -1
  580. package/esm/ReExports/index.js +0 -1
  581. package/esm/ReExports/publicUtil.d.ts +0 -1
  582. package/esm/ReExports/publicUtil.js +0 -28
  583. package/esm/configuration/promotableDefaults.d.ts +0 -199
  584. package/esm/configuration/promotableDefaults.js +0 -326
  585. package/esm/configuration/promotablePin.d.ts +0 -55
  586. package/esm/configuration/promotablePin.js +0 -1
  587. package/esm/configuration/promotableResolve.d.ts +0 -108
  588. package/esm/configuration/promotableResolve.js +0 -117
  589. package/esm/configuration/promotableSlots.d.ts +0 -12
  590. package/esm/configuration/promotableSlots.js +0 -45
  591. package/esm/configuration/slotShape.d.ts +0 -12
  592. package/esm/configuration/slotShape.js +0 -84
  593. package/esm/pluggableElementTypes/models/HighlightsMixin.d.ts +0 -51
  594. package/esm/pluggableElementTypes/models/HighlightsMixin.js +0 -78
  595. package/esm/ui/PinAdornment.d.ts +0 -5
  596. package/esm/ui/PinAdornment.js +0 -79
  597. package/esm/ui/SvgGradientLegend.d.ts +0 -26
  598. package/esm/ui/SvgGradientLegend.js +0 -26
  599. package/esm/ui/highlightChipReveal.d.ts +0 -32
  600. package/esm/ui/highlightChipReveal.js +0 -39
  601. package/esm/ui/promotableMenuItems.d.ts +0 -19
  602. package/esm/ui/promotableMenuItems.js +0 -89
  603. package/esm/ui/promotablePinCoverage.d.ts +0 -44
  604. package/esm/ui/promotablePinCoverage.js +0 -87
  605. package/esm/util/applyInitSettings.d.ts +0 -79
  606. package/esm/util/applyInitSettings.js +0 -91
  607. package/esm/util/openDisplays.d.ts +0 -23
  608. package/esm/util/openDisplays.js +0 -79
  609. package/esm/util/stopToken.d.ts +0 -211
  610. package/esm/util/stopToken.js +0 -438
  611. /package/esm/{BaseFeatureWidget/BaseFeatureDetail/types.js → data_adapters/BaseAdapter/zoomRange.js} +0 -0
@@ -1,42 +1,15 @@
1
- import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Alert, TextField, Typography } from '@mui/material';
3
- import { formatBytes } from '../util/formatBytes.js';
4
- import { makeStyles } from '../util/tss-react/index.js';
5
- // Two ceilings, because a long link fails two different ways.
6
- //
7
- // Past LARGE_URL_LENGTH the link still opens everywhere, but it stops
8
- // surviving delivery: mail and chat clients wrap or truncate it, and anything
9
- // that moves it from a hash into a request line meets the ~8k a server accepts
10
- // there.
11
- //
12
- // Past UNUSABLE_URL_LENGTH it does not open at all — WebKit caps a url around
13
- // 80k characters, so Safari and everything on iOS refuse it however it arrives.
14
- // Chromium's own cap is 2 MB, which is why the person who made the link sees
15
- // nothing wrong with it and the recipient sees a browser error.
16
- const LARGE_URL_LENGTH = 8000;
17
- const UNUSABLE_URL_LENGTH = 80000;
18
- const useStyles = makeStyles()(theme => ({
19
- warning: {
20
- color: theme.palette.warning.main,
21
- },
22
- }));
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { TextField } from '@mui/material';
23
3
  // Read-only single-line field for a shareable URL; clicking selects the whole
24
- // value so it's easy to copy, and overly long URLs surface a size warning.
25
- // Shared by jbrowse-web's ShareDialog and jbrowse-desktop's ExportToWebDialog.
26
- //
27
- // `action` is what the caller can do about a url too long to open — in practice
28
- // "switch to a short link", which is the mode that solves it. Only rendered at
29
- // the unusable tier, where saying so without offering the fix leaves the user
30
- // with a link and no way to make a working one.
31
- export default function ShareLinkField({ value, label = 'URL', action, }) {
32
- const { classes } = useStyles();
33
- const size = formatBytes(value.length);
34
- return (_jsxs(_Fragment, { children: [_jsx(TextField, { label: label, value: value, variant: "filled", fullWidth: true, onClick: event => {
35
- const target = event.target;
36
- target.select();
37
- }, slotProps: {
38
- input: {
39
- readOnly: true,
40
- },
41
- } }), value.length > UNUSABLE_URL_LENGTH ? (_jsxs(Alert, { severity: "warning", action: action, children: ["This URL is ", size, ", which Safari and iOS browsers refuse to open and most mail clients will truncate. It may work where you test it \u2014 Chrome accepts far longer \u2014 and fail for whoever you send it to. Use a short link instead."] })) : value.length > LARGE_URL_LENGTH ? (_jsxs(Typography, { variant: "caption", className: classes.warning, children: ["This URL is ", size, " and may be too long for some browsers or tools \u2014 prefer a short link if possible."] })) : null] }));
4
+ // value so it's easy to copy. Shared by jbrowse-web's ShareDialog and
5
+ // jbrowse-desktop's ExportToWebDialog.
6
+ export default function ShareLinkField({ value, label = 'URL', }) {
7
+ return (_jsx(TextField, { label: label, value: value, variant: "filled", fullWidth: true, onClick: event => {
8
+ const target = event.target;
9
+ target.select();
10
+ }, slotProps: {
11
+ input: {
12
+ readOnly: true,
13
+ },
14
+ } }));
42
15
  }
@@ -1,6 +1,5 @@
1
- import type { Pin } from '../configuration/promotablePin.ts';
2
1
  import type { SliderScale } from './sliderScale.ts';
3
- export declare const SizeSliderRow: ({ title, getValue, min, max, step, scale, format, isDefault, commitOnRelease, onChange, onReset, pin, }: {
2
+ export declare const SizeSliderRow: ({ title, getValue, min, max, step, scale, format, isDefault, commitOnRelease, onChange, onReset, }: {
4
3
  title: string;
5
4
  getValue: () => number;
6
5
  min: number;
@@ -12,5 +11,4 @@ export declare const SizeSliderRow: ({ title, getValue, min, max, step, scale, f
12
11
  commitOnRelease?: boolean;
13
12
  onChange: (n: number) => void;
14
13
  onReset: () => void;
15
- pin?: Pin;
16
14
  }) => import("react").JSX.Element;
@@ -1,13 +1,12 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // The drawn half of a `makeSizeMenu` row, split out so the builder can reach
3
3
  // it through `lazy()`. Everything Material UI in a size row is here: the
4
- // slider, the reset button, the pin, the caption. See makeSizeMenu.tsx.
4
+ // slider, the reset button, the caption. See makeSizeMenu.tsx.
5
5
  import { useState } from 'react';
6
6
  import { Typography } from '@mui/material';
7
7
  import { observer } from 'mobx-react';
8
8
  import { makeStyles } from '../util/tss-react/index.js';
9
9
  import { ResetToDefaultButton } from './InlineMenuControls.js';
10
- import { PinAdornment } from './PinAdornment.js';
11
10
  import SingleSlider from './SingleSlider.js';
12
11
  import { INLINE_MENU_ROW_WIDTH } from './inlineMenuRowWidth.js';
13
12
  import { sliderScale } from './sliderScale.js';
@@ -24,16 +23,15 @@ const useStyles = makeStyles()(theme => ({
24
23
  flex: 1,
25
24
  },
26
25
  }));
27
- export const SizeSliderRow = observer(function SizeSliderRow({ title, getValue, min, max, step, scale, format, isDefault, commitOnRelease, onChange, onReset, pin, }) {
26
+ export const SizeSliderRow = observer(function SizeSliderRow({ title, getValue, min, max, step, scale, format, isDefault, commitOnRelease, onChange, onReset, }) {
28
27
  const { classes } = useStyles();
29
- const modelValue = getValue();
30
28
  const [dragValue, setDragValue] = useState(undefined);
31
- const value = dragValue ?? modelValue;
29
+ const value = dragValue ?? getValue();
32
30
  const { toSlider, fromSlider, sliderStep } = sliderScale(scale);
33
31
  const slug = title.toLowerCase().replaceAll(' ', '-');
34
32
  return (_jsxs("div", { className: classes.root, children: [_jsxs("div", { className: classes.header, children: [_jsxs(Typography, { variant: "caption", color: "textSecondary", className: classes.label, children: [title, ": ", format(value)] }), _jsx(ResetToDefaultButton, { disabled: isDefault, onClick: () => {
35
33
  onReset();
36
- } }), pin ? (_jsx(PinAdornment, { pin: { control: pin, label: `${title} (${format(value)})` } })) : null] }), _jsx(SingleSlider, { value: toSlider(value), min: toSlider(min), max: toSlider(max), step: sliderStep ?? step, size: "small", "aria-label": title.toLowerCase(), "data-testid": `${slug}-slider`, valueLabelDisplay: "auto", valueLabelFormat: (v) => format(fromSlider(v)), sx: { py: 0.5, display: 'block' }, onChange: v => {
34
+ } })] }), _jsx(SingleSlider, { value: toSlider(value), min: toSlider(min), max: toSlider(max), step: sliderStep ?? step, size: "small", "aria-label": title.toLowerCase(), "data-testid": `${slug}-slider`, valueLabelDisplay: "auto", valueLabelFormat: (v) => format(fromSlider(v)), sx: { py: 0.5, display: 'block' }, onChange: v => {
37
35
  const n = fromSlider(v);
38
36
  if (commitOnRelease) {
39
37
  setDragValue(n);
@@ -1,4 +1,4 @@
1
- import { types } from '@jbrowse/mobx-state-tree';
1
+ import { addDisposer, types } from '@jbrowse/mobx-state-tree';
2
2
  import { observable } from 'mobx';
3
3
  /**
4
4
  * #stateModel SnackbarModel
@@ -28,71 +28,83 @@ export default function SnackbarModel() {
28
28
  return new Map(self.snackbarMessages.map(s => [s.message, s]));
29
29
  },
30
30
  }))
31
- .actions(self => ({
32
- /**
33
- * #action
34
- */
35
- notify(message, level, action) {
36
- const actions = action
37
- ? Array.isArray(action)
38
- ? action
39
- : [action]
40
- : undefined;
41
- this.pushSnackbarMessage(message, level, actions);
42
- // A plain info/success toast auto-hides; an actionable one persists
43
- // until acted on or dismissed (5s is too short to read and click the
44
- // action, and warning/error already persist).
45
- if ((level === 'info' || level === 'success') && !actions?.length) {
46
- setTimeout(() => {
47
- this.removeSnackbarMessage(message);
48
- }, 5000);
49
- }
50
- },
51
- /**
52
- * #action
53
- */
54
- notifyError(errorMessage, error, extra, action) {
55
- const reportAction = {
56
- name: 'report',
57
- onClick: () => {
58
- this.setErrorDialog({ error, extra });
59
- },
60
- };
61
- const actions = action ? [reportAction, action] : [reportAction];
62
- this.pushSnackbarMessage(errorMessage, 'error', actions);
63
- },
64
- /**
65
- * #action
66
- */
67
- setErrorDialog(state) {
68
- self.errorDialog = state;
69
- },
70
- /**
71
- * #action
72
- */
73
- pushSnackbarMessage(message, level, actions) {
74
- if (actions?.length || !self.snackbarMessageSet.has(message)) {
75
- self.snackbarMessages.push({
76
- message,
77
- level,
78
- actions,
79
- });
80
- }
81
- },
82
- /**
83
- * #action
84
- */
85
- popSnackbarMessage() {
86
- return self.snackbarMessages.pop();
87
- },
88
- /**
89
- * #action
90
- */
91
- removeSnackbarMessage(message) {
92
- const element = self.snackbarMessageSet.get(message);
93
- if (element !== undefined) {
94
- self.snackbarMessages.remove(element);
31
+ .actions(self => {
32
+ // A pending auto-dismiss would otherwise fire on a destroyed session, and
33
+ // in node keeps the process alive for its five seconds.
34
+ const dismissTimers = new Set();
35
+ addDisposer(self, () => {
36
+ for (const timer of dismissTimers) {
37
+ clearTimeout(timer);
95
38
  }
96
- },
97
- }));
39
+ });
40
+ return {
41
+ /**
42
+ * #action
43
+ */
44
+ notify(message, level, action) {
45
+ const actions = action
46
+ ? Array.isArray(action)
47
+ ? action
48
+ : [action]
49
+ : undefined;
50
+ this.pushSnackbarMessage(message, level, actions);
51
+ // A plain info/success toast auto-hides; an actionable one persists
52
+ // until acted on or dismissed (5s is too short to read and click the
53
+ // action, and warning/error already persist).
54
+ if ((level === 'info' || level === 'success') && !actions?.length) {
55
+ const timer = setTimeout(() => {
56
+ dismissTimers.delete(timer);
57
+ this.removeSnackbarMessage(message);
58
+ }, 5000);
59
+ dismissTimers.add(timer);
60
+ }
61
+ },
62
+ /**
63
+ * #action
64
+ */
65
+ notifyError(errorMessage, error, extra, action) {
66
+ const reportAction = {
67
+ name: 'report',
68
+ onClick: () => {
69
+ this.setErrorDialog({ error, extra });
70
+ },
71
+ };
72
+ const actions = action ? [reportAction, action] : [reportAction];
73
+ this.pushSnackbarMessage(errorMessage, 'error', actions);
74
+ },
75
+ /**
76
+ * #action
77
+ */
78
+ setErrorDialog(state) {
79
+ self.errorDialog = state;
80
+ },
81
+ /**
82
+ * #action
83
+ */
84
+ pushSnackbarMessage(message, level, actions) {
85
+ if (actions?.length || !self.snackbarMessageSet.has(message)) {
86
+ self.snackbarMessages.push({
87
+ message,
88
+ level,
89
+ actions,
90
+ });
91
+ }
92
+ },
93
+ /**
94
+ * #action
95
+ */
96
+ popSnackbarMessage() {
97
+ return self.snackbarMessages.pop();
98
+ },
99
+ /**
100
+ * #action
101
+ */
102
+ removeSnackbarMessage(message) {
103
+ const element = self.snackbarMessageSet.get(message);
104
+ if (element !== undefined) {
105
+ self.snackbarMessages.remove(element);
106
+ }
107
+ },
108
+ };
109
+ });
98
110
  }
@@ -12,7 +12,7 @@ const useStyles = makeStyles()(theme => ({
12
12
  // put this component back in the toolkit. Same idiom `plainChromeOverlays`
13
13
  // uses, and it tints against the surface rather than compositing over
14
14
  // whatever the bar happens to be drawn on.
15
- background: `color-mix(in srgb, ${theme.palette.primary.main} 26%, transparent)`,
15
+ background: `color-mix(in srgb, ${theme.palette.accent} 26%, transparent)`,
16
16
  },
17
17
  bar: {
18
18
  position: 'absolute',
@@ -20,7 +20,7 @@ const useStyles = makeStyles()(theme => ({
20
20
  bottom: 0,
21
21
  left: 0,
22
22
  width: '100%',
23
- background: theme.palette.primary.main,
23
+ background: theme.palette.accent,
24
24
  // scaled from the left rather than sized, so a progress update is a
25
25
  // compositor transform instead of a layout
26
26
  transformOrigin: 'left center',
@@ -1,13 +1,18 @@
1
1
  import type { ColorLegendEntry } from './legendSpec.ts';
2
- import type { ReactNode } from 'react';
3
2
  export type { ColorLegendEntry } from './legendSpec.ts';
4
3
  export declare const LEGEND_ROW_HEIGHT = 14;
5
4
  export declare const LEGEND_SWATCH = 10;
6
- export default function SvgColorLegend({ entries, canvasWidth, maxHeight, onDismiss, children, testid, }: {
5
+ /**
6
+ * Horizontal space the LGV export reserves beside the plot for a display whose
7
+ * legend asked to sit off the plot (`LegendMixin.svgLegendWidth`): the widest
8
+ * row this draws for a ramp, plus a margin either side.
9
+ */
10
+ export declare const LEGEND_SVG_GUTTER_WIDTH: number;
11
+ export default function SvgColorLegend({ entries, canvasWidth, x, maxHeight, testid, idPrefix, }: {
7
12
  entries: ColorLegendEntry[];
8
13
  canvasWidth: number;
14
+ x?: number;
9
15
  maxHeight?: number;
10
- onDismiss?: () => void;
11
- children?: ReactNode;
16
+ idPrefix?: string;
12
17
  testid?: string;
13
18
  }): import("react").JSX.Element | null;
@@ -1,65 +1,106 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  /* eslint-disable react-refresh/only-export-components -- geometry constants belong with this leaf SVG primitive; no component state to fast-refresh */
3
+ import { useId } from 'react';
4
+ import { svgSafeId } from '../svg/svgId.js';
3
5
  import { LegendSwatchGlyph } from './LegendSwatchGlyph.js';
4
6
  import { measureLegendText } from './measureLegendText.js';
5
7
  const FONT_SIZE = 10;
6
8
  const SWATCH_LEFT = 2;
7
9
  const SWATCH_GAP = 2;
8
- // Row geometry, exported so callers positioning `children` (or sizing an outer
9
- // container) stay in lockstep with what this draws.
10
+ // Row geometry, exported so callers sizing an outer container stay in lockstep
11
+ // with what this draws.
10
12
  export const LEGEND_ROW_HEIGHT = 14;
11
13
  export const LEGEND_SWATCH = 10;
12
- // narrow right-side gutter reserved for the small dismiss "×"
13
- const DISMISS_GUTTER = 11;
14
- // A row's marks, with the flat `color` shorthand read as the single filled
14
+ const GRADIENT_BAR_WIDTH = 100;
15
+ const GRADIENT_BAR_HEIGHT = 10;
16
+ // the bar plus the row of domain labels under it
17
+ const GRADIENT_ROW_HEIGHT = GRADIENT_BAR_HEIGHT + 4 + LEGEND_ROW_HEIGHT;
18
+ /**
19
+ * Horizontal space the LGV export reserves beside the plot for a display whose
20
+ * legend asked to sit off the plot (`LegendMixin.svgLegendWidth`): the widest
21
+ * row this draws for a ramp, plus a margin either side.
22
+ */
23
+ export const LEGEND_SVG_GUTTER_WIDTH = GRADIENT_BAR_WIDTH + 40;
24
+ // A row's swatches, with the flat `color` shorthand read as the single
15
25
  // square it has always drawn.
16
26
  function entrySwatches(entry) {
17
27
  return (entry.swatches ??
18
28
  (entry.color === undefined ? [] : [{ color: entry.color }]));
19
29
  }
20
- // Shared SVG categorical color key: one translucent row per entry, each a swatch
21
- // + label, right-aligned within canvasWidth. Used by any display that colors by
22
- // a discrete vocabulary (wiggle multi-source overlays, multi-row per-feature
23
- // paintings). A <g> so the on-screen overlay and the SVG export share one
24
- // renderer.
25
- //
26
- // Two escape hatches keep it usable for less-uniform legends without a second
27
- // component: a per-entry `marker` overrides the color square, and `children`
28
- // render inside the positioned box below the rows (from the box's top-left; the
29
- // rows occupy `shownEntryCount * LEGEND_ROW_HEIGHT`). Draws nothing when there's
30
- // neither an entry nor a child.
30
+ // A row keying a color, as opposed to a title or note over such rows.
31
+ function keysAColor(entry) {
32
+ return entry.gradient !== undefined || entrySwatches(entry).length > 0;
33
+ }
34
+ // A ramp row is the bar and its labels, captioned when the entry has a label.
35
+ function rowHeight(entry) {
36
+ return entry.gradient
37
+ ? GRADIENT_ROW_HEIGHT + (entry.label ? LEGEND_ROW_HEIGHT : 0)
38
+ : LEGEND_ROW_HEIGHT;
39
+ }
40
+ // The rows that fit `maxHeight`, leaving room for a "+N more" summary when
41
+ // they do not all fit. A heading the cut separated from every row under it is
42
+ // dropped with them.
43
+ function fitEntries(entries, maxHeight) {
44
+ let used = 0;
45
+ const shown = [];
46
+ for (const [idx, entry] of entries.entries()) {
47
+ const rest = entries.length - idx - 1;
48
+ const reserve = rest > 0 ? LEGEND_ROW_HEIGHT : 0;
49
+ if (used + rowHeight(entry) + reserve > maxHeight && shown.length > 0) {
50
+ break;
51
+ }
52
+ used += rowHeight(entry);
53
+ shown.push(entry);
54
+ }
55
+ while (shown.length > 1 &&
56
+ shown.length < entries.length &&
57
+ !keysAColor(shown.at(-1))) {
58
+ shown.pop();
59
+ }
60
+ return shown;
61
+ }
62
+ function GradientRow({ entry, width, gradientId, }) {
63
+ const { stops, minLabel, maxLabel } = entry.gradient;
64
+ const barTop = (entry.label ? LEGEND_ROW_HEIGHT : 0) + 2;
65
+ const labelY = barTop + GRADIENT_BAR_HEIGHT + 2 + FONT_SIZE;
66
+ return (_jsxs(_Fragment, { children: [_jsx("rect", { x: 0, y: 0, width: width, height: rowHeight(entry), fill: "rgba(255,255,255,0.95)" }), entry.label ? (_jsx("text", { x: SWATCH_LEFT, y: 11, fontSize: FONT_SIZE, fill: "black", children: entry.label })) : null, _jsx("defs", { children: _jsx("linearGradient", { id: gradientId, x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: stops.map(stop => (_jsx("stop", { offset: stop.offset, style: { stopColor: stop.color, stopOpacity: stop.opacity ?? 1 } }, stop.offset))) }) }), _jsx("rect", { x: SWATCH_LEFT, y: barTop, width: GRADIENT_BAR_WIDTH, height: GRADIENT_BAR_HEIGHT, fill: `url(#${gradientId})`, rx: 2 }), _jsx("text", { x: SWATCH_LEFT, y: labelY, fontSize: FONT_SIZE, fill: "black", children: minLabel }), _jsx("text", { x: SWATCH_LEFT + GRADIENT_BAR_WIDTH, y: labelY, fontSize: FONT_SIZE, fill: "black", textAnchor: "end", children: maxLabel })] }));
67
+ }
68
+ // Shared SVG color key: one translucent row per entry — a swatch and a label,
69
+ // or a ramp bar with its domain ends — right-aligned within `canvasWidth`, or
70
+ // at `x` when the caller places it (the LGV export's legend gutter). A <g>, so
71
+ // an on-screen SVG overlay and the export share one renderer.
31
72
  //
32
- // `maxHeight` (e.g. the display height) caps the box: entries past what fits
73
+ // `maxHeight` (the display height) caps the box: entries past what fits
33
74
  // collapse into a trailing "+N more" summary row, so the legend never overflows
34
75
  // its display — the full list stays reachable via the track menu.
35
- //
36
- // `onDismiss` adds a clickable "×" in the top-right corner (with its own
37
- // pointer-events so it works under a pointer-events:none overlay). Pass it only
38
- // on interactive paths where the legend can be re-shown — never on the SVG
39
- // export, which has no way to click it.
40
- export default function SvgColorLegend({ entries, canvasWidth, maxHeight, onDismiss, children, testid, }) {
41
- const fit = maxHeight === undefined
42
- ? entries.length
43
- : Math.max(1, Math.floor(maxHeight / LEGEND_ROW_HEIGHT));
44
- // reserve the last fitting row for the summary when truncating
45
- const shown = entries.length > fit ? entries.slice(0, fit - 1) : entries;
46
- const overflowLabel = entries.length > fit ? `+${entries.length - shown.length} more` : undefined;
76
+ export default function SvgColorLegend({ entries, canvasWidth, x, maxHeight, testid, idPrefix, }) {
77
+ const reactId = useId();
78
+ const legendId = idPrefix ?? reactId;
79
+ const shown = maxHeight === undefined ? entries : fitEntries(entries, maxHeight);
80
+ const cutRows = entries.slice(shown.length).filter(keysAColor).length;
81
+ const overflowLabel = cutRows > 0 ? `+${cutRows} more` : undefined;
47
82
  // Labels line up across rows, so the swatch column is sized by the row with
48
- // the most marks — otherwise a two-mark row shoves its own label out of the
49
- // column the others share. One mark reproduces the original 16px inset.
83
+ // the most swatches — otherwise a two-box row shoves its own label out of the
84
+ // column the others share. One box reproduces the original 16px inset.
50
85
  const swatchColumns = Math.max(1, ...shown.map(e => entrySwatches(e).length));
51
86
  const textLeft = SWATCH_LEFT + swatchColumns * (LEGEND_SWATCH + SWATCH_GAP) + 2;
52
- let maxLabelWidth = 0;
87
+ let contentRight = 0;
53
88
  for (const entry of shown) {
54
- maxLabelWidth = Math.max(maxLabelWidth, measureLegendText(entry.label, FONT_SIZE));
89
+ contentRight = Math.max(contentRight, entry.gradient
90
+ ? SWATCH_LEFT +
91
+ Math.max(GRADIENT_BAR_WIDTH, measureLegendText(entry.label, FONT_SIZE))
92
+ : textLeft + measureLegendText(entry.label, FONT_SIZE));
55
93
  }
56
94
  if (overflowLabel !== undefined) {
57
- maxLabelWidth = Math.max(maxLabelWidth, measureLegendText(overflowLabel, FONT_SIZE));
95
+ contentRight = Math.max(contentRight, textLeft + measureLegendText(overflowLabel, FONT_SIZE));
96
+ }
97
+ const totalWidth = contentRight + 6;
98
+ const left = x ?? Math.max(0, canvasWidth - totalWidth - 4);
99
+ const rowTops = [];
100
+ let y = 0;
101
+ for (const entry of shown) {
102
+ rowTops.push(y);
103
+ y += rowHeight(entry);
58
104
  }
59
- const totalWidth = textLeft + maxLabelWidth + 6 + (onDismiss ? DISMISS_GUTTER : 0);
60
- const x = Math.max(0, canvasWidth - totalWidth - 4);
61
- return shown.length || overflowLabel || children ? (_jsxs("g", { transform: `translate(${x} 0)`, "data-testid": testid, children: [shown.map((entry, idx) => (_jsxs("g", { transform: `translate(0 ${idx * LEGEND_ROW_HEIGHT})`, children: [_jsx("rect", { x: 0, y: 0, width: totalWidth, height: LEGEND_ROW_HEIGHT, fill: "rgba(255,255,255,0.95)" }), _jsxs("g", { opacity: entry.hidden ? 0.35 : 1, children: [entry.marker ??
62
- entrySwatches(entry).map((swatch, i) => (_jsx(LegendSwatchGlyph, { swatch: swatch, size: LEGEND_SWATCH, x: SWATCH_LEFT + i * (LEGEND_SWATCH + SWATCH_GAP), y: 2 }, `${swatch.color}-${swatch.mark ?? 'fill'}`))), _jsx("text", { x: textLeft, y: 11, fontSize: FONT_SIZE, fill: "black", textDecoration: entry.hidden ? 'line-through' : undefined, children: entry.label })] })] }, entry.key))), overflowLabel === undefined ? null : (_jsxs("g", { transform: `translate(0 ${shown.length * LEGEND_ROW_HEIGHT})`, children: [_jsx("rect", { x: 0, y: 0, width: totalWidth, height: LEGEND_ROW_HEIGHT, fill: "rgba(255,255,255,0.95)" }), _jsx("text", { x: textLeft, y: 11, fontSize: FONT_SIZE, fill: "#555", children: overflowLabel })] })), onDismiss === undefined ? null : (_jsxs("g", { transform: `translate(${totalWidth - DISMISS_GUTTER} 0)`, style: { cursor: 'pointer', pointerEvents: 'auto' }, "data-gesture-owner": "true", onClick: () => {
63
- onDismiss();
64
- }, children: [_jsx("title", { children: "Hide legend" }), _jsx("rect", { x: 0, y: 0, width: DISMISS_GUTTER, height: LEGEND_ROW_HEIGHT, fill: "transparent" }), _jsx("text", { x: DISMISS_GUTTER / 2, y: 9, fontSize: 9, fill: "#777", textAnchor: "middle", children: "\u00D7" })] })), children] })) : null;
105
+ return shown.length || overflowLabel ? (_jsxs("g", { transform: `translate(${left} 0)`, "data-testid": testid, children: [shown.map((entry, idx) => (_jsx("g", { transform: `translate(0 ${rowTops[idx]})`, children: entry.gradient ? (_jsx(GradientRow, { entry: entry, width: totalWidth, gradientId: svgSafeId(`${legendId}-${entry.key}`) })) : (_jsxs(_Fragment, { children: [_jsx("rect", { x: 0, y: 0, width: totalWidth, height: LEGEND_ROW_HEIGHT, fill: "rgba(255,255,255,0.95)" }), _jsxs("g", { opacity: entry.hidden ? 0.35 : 1, children: [entrySwatches(entry).map((swatch, i) => (_jsx(LegendSwatchGlyph, { swatch: swatch, size: LEGEND_SWATCH, x: SWATCH_LEFT + i * (LEGEND_SWATCH + SWATCH_GAP), y: 2 }, `${swatch.shape}-${swatch.color}`))), _jsx("text", { x: textLeft, y: 11, fontSize: FONT_SIZE, fill: "black", textDecoration: entry.hidden ? 'line-through' : undefined, children: entry.label })] })] })) }, entry.key))), overflowLabel === undefined ? null : (_jsxs("g", { transform: `translate(0 ${y})`, children: [_jsx("rect", { x: 0, y: 0, width: totalWidth, height: LEGEND_ROW_HEIGHT, fill: "rgba(255,255,255,0.95)" }), _jsx("text", { x: textLeft, y: 11, fontSize: FONT_SIZE, fill: "#555", children: overflowLabel })] }))] })) : null;
65
106
  }
@@ -1,45 +1,24 @@
1
+ import type { VirtualScrollModel } from '../util/useVirtualScrollWheel.ts';
1
2
  /**
2
- * How much of a display's right edge this occupies while it is drawn.
3
- *
4
- * Exported because the things that have to *clear* it are drawn by the displays
5
- * that mount it, not by this file: the bottom-right indicator row and the
6
- * alignments coverage axis label. Both kept a private copy of the number (and
7
- * the alignments indicator row kept none at all, so its chips were drawn over
8
- * the thumb), which is a copy that can only be checked by looking at two files
9
- * at once.
3
+ * How much of a display's right edge this occupies while it is drawn, for the
4
+ * chrome the displays draw beside it.
10
5
  */
11
6
  export declare const VERTICAL_SCROLLBAR_WIDTH = 12;
12
- /**
13
- * Where the right edge of anything that has to sit *beside* the thumb goes: the
14
- * track's width plus a hair of air, so a chip or an axis label doesn't touch it.
15
- *
16
- * The four call sites all spelled `VERTICAL_SCROLLBAR_WIDTH + 2` inline, which
17
- * is the same copy the width constant was exported to stop — one addition
18
- * further along. The `+ 2` is a gap and belongs to the thing being cleared, not
19
- * to the scrollbar's own geometry, so it is named rather than folded into the
20
- * width (`right: 2` on the thumb is a different 2 and must not move with it).
21
- */
7
+ /** Where the right edge of something sitting beside the thumb goes. */
22
8
  export declare const VERTICAL_SCROLLBAR_CLEARANCE: number;
23
9
  /**
24
- * Draggable vertical scrollbar overlay for canvas-backed displays that scroll
25
- * their content via a `scrollTop` value (alignments pileup, variant matrix).
26
- * Renders nothing when the content fits the viewport. The thumb geometry and
27
- * the drag-to-scroll mapping live here so the consumers don't each re-derive
28
- * them; the wheel handling stays per-display (their gesture semantics differ).
10
+ * Draggable vertical scrollbar overlay for a virtually scrolled display.
11
+ * Renders nothing when the content fits.
29
12
  *
30
- * Deliberately NOT a keyboard tab stop: the surrounding views have no working
31
- * keyboard navigation to reach the scrolled content anyway, so a per-track
32
- * `tabIndex` would only add noise to the tab order. The `role="scrollbar"` +
33
- * `aria-value*` semantics are kept — they cost nothing and expose scroll
34
- * position to pointer/voice assistive tech.
13
+ * Not a keyboard tab stop: the views have no keyboard navigation to reach the
14
+ * scrolled content, so `tabIndex` would only add noise. The `role="scrollbar"`
15
+ * semantics stay for pointer and voice assistive tech.
35
16
  */
36
- export default function VerticalScrollbar({ scrollTop, setScrollTop, viewportHeight, contentHeight, controlsId, top, }: {
37
- scrollTop: number;
38
- setScrollTop: (n: number) => void;
39
- viewportHeight: number;
40
- contentHeight: number;
17
+ declare const VerticalScrollbar: ({ model, controlsId, top, }: {
18
+ model: VirtualScrollModel;
41
19
  /** `id` of the scrolled viewport element, for `aria-controls`. */
42
20
  controlsId: string;
43
21
  /** Track offset from the top, for displays with a sticky band above it. */
44
22
  top?: number;
45
- }): import("react").JSX.Element | null;
23
+ }) => import("react").JSX.Element | null;
24
+ export default VerticalScrollbar;