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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. package/README.md +1709 -390
  2. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +3 -2
  3. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +5 -5
  4. package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +3 -5
  5. package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +34 -29
  6. package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCard.js +1 -4
  7. package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.d.ts +11 -0
  8. package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.js +37 -14
  9. package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.d.ts +1 -1
  10. package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.js +15 -31
  11. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.d.ts +4 -3
  12. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.js +12 -25
  13. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.d.ts +11 -0
  14. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.js +11 -0
  15. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.d.ts +8 -0
  16. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.js +24 -0
  17. package/esm/BaseFeatureWidget/BaseFeatureDetail/Formatter.js +6 -4
  18. package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.d.ts +4 -0
  19. package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.js +17 -0
  20. package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.d.ts +3 -2
  21. package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +5 -3
  22. package/esm/BaseFeatureWidget/BaseFeatureDetail/index.d.ts +6 -2
  23. package/esm/BaseFeatureWidget/BaseFeatureDetail/index.js +7 -18
  24. package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.d.ts +16 -0
  25. package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.js +49 -0
  26. package/esm/BaseFeatureWidget/BaseFeatureDetail/util.d.ts +0 -8
  27. package/esm/BaseFeatureWidget/BaseFeatureDetail/util.js +6 -29
  28. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceContents.js +7 -34
  29. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeaturePanel.d.ts +2 -2
  30. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceName.js +2 -2
  31. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.js +3 -1
  32. package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.d.ts +12 -0
  33. package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.js +12 -5
  34. package/esm/BaseFeatureWidget/SequenceFeatureDetails/useSequenceData.js +8 -5
  35. package/esm/BaseFeatureWidget/configSchema.d.ts +1 -1
  36. package/esm/BaseFeatureWidget/formatDetails.d.ts +13 -29
  37. package/esm/BaseFeatureWidget/formatDetails.js +62 -83
  38. package/esm/BaseFeatureWidget/index.d.ts +2 -1
  39. package/esm/BaseFeatureWidget/stateModelFactory.d.ts +42 -29
  40. package/esm/BaseFeatureWidget/stateModelFactory.js +98 -98
  41. package/esm/BaseFeatureWidget/types.d.ts +12 -6
  42. package/esm/BaseFeatureWidget/util.d.ts +0 -10
  43. package/esm/BaseFeatureWidget/util.js +0 -17
  44. package/esm/CorePlugin.js +34 -3
  45. package/esm/PluginLoader.d.ts +24 -13
  46. package/esm/PluginLoader.js +167 -51
  47. package/esm/PluginManager.d.ts +130 -24
  48. package/esm/PluginManager.js +180 -32
  49. package/esm/ReExports/MuiDataGridReExports.d.ts +1 -0
  50. package/esm/ReExports/MuiDataGridReExports.js +2 -2
  51. package/esm/ReExports/coreModules.generated.d.ts +2 -0
  52. package/esm/ReExports/coreModules.generated.js +530 -0
  53. package/esm/ReExports/coreWorkerModules.generated.d.ts +2 -0
  54. package/esm/ReExports/coreWorkerModules.generated.js +490 -0
  55. package/esm/ReExports/frameworkModules.d.ts +2 -0
  56. package/esm/ReExports/frameworkModules.js +68 -0
  57. package/esm/ReExports/frameworkShared.d.ts +12 -0
  58. package/esm/ReExports/frameworkShared.js +16 -0
  59. package/esm/ReExports/frameworkWorkerModules.generated.d.ts +2 -0
  60. package/esm/ReExports/frameworkWorkerModules.generated.js +130 -0
  61. package/esm/ReExports/list.js +528 -79
  62. package/esm/ReExports/modules.d.ts +1 -1
  63. package/esm/ReExports/modules.js +10 -165
  64. package/esm/ReExports/registry.d.ts +1 -0
  65. package/esm/ReExports/registry.js +23 -5
  66. package/esm/ReExports/uiStub.d.ts +3 -0
  67. package/esm/ReExports/uiStub.js +33 -0
  68. package/esm/ReExports/workerModules.d.ts +2 -0
  69. package/esm/ReExports/workerModules.js +11 -0
  70. package/esm/TextSearch/TextSearchManager.d.ts +27 -13
  71. package/esm/TextSearch/TextSearchManager.js +77 -36
  72. package/esm/TextSearch/places.d.ts +12 -0
  73. package/esm/TextSearch/places.js +94 -0
  74. package/esm/assemblyManager/assembly.d.ts +21 -19
  75. package/esm/assemblyManager/assembly.js +28 -26
  76. package/esm/assemblyManager/assemblyAdapters.d.ts +1 -1
  77. package/esm/assemblyManager/assemblyAdapters.js +8 -2
  78. package/esm/assemblyManager/assemblyConfigSchema.d.ts +31 -90
  79. package/esm/assemblyManager/assemblyConfigSchema.js +35 -47
  80. package/esm/assemblyManager/assemblyManager.d.ts +35 -180
  81. package/esm/assemblyManager/assemblyManager.js +47 -51
  82. package/esm/assemblyManager/expandAssemblyConfigShorthand.d.ts +25 -18
  83. package/esm/assemblyManager/expandAssemblyConfigShorthand.js +78 -49
  84. package/esm/assemblyManager/geneticCodes.js +2 -5
  85. package/esm/assemblyManager/getSequenceAdapterConfig.d.ts +10 -0
  86. package/esm/assemblyManager/getSequenceAdapterConfig.js +10 -0
  87. package/esm/assemblyManager/indexAssemblyNames.d.ts +9 -0
  88. package/esm/assemblyManager/indexAssemblyNames.js +22 -0
  89. package/esm/assemblyManager/loadRefNameMap.d.ts +1 -1
  90. package/esm/assemblyManager/loadRefNameMap.js +4 -9
  91. package/esm/assemblyManager/refNameMapKey.d.ts +7 -0
  92. package/esm/assemblyManager/refNameMapKey.js +12 -0
  93. package/esm/checkPlugins.d.ts +2 -0
  94. package/esm/checkPlugins.js +38 -17
  95. package/esm/configuration/bamIndexFields.d.ts +49 -0
  96. package/esm/configuration/bamIndexFields.js +41 -0
  97. package/esm/configuration/configurationSchema.d.ts +101 -71
  98. package/esm/configuration/configurationSchema.js +207 -134
  99. package/esm/configuration/configurationSchemaUnion.d.ts +39 -0
  100. package/esm/configuration/configurationSchemaUnion.js +56 -0
  101. package/esm/configuration/configurationSlot.d.ts +150 -60
  102. package/esm/configuration/configurationSlot.js +103 -75
  103. package/esm/configuration/fillLocations.d.ts +14 -0
  104. package/esm/configuration/fillLocations.js +14 -0
  105. package/esm/configuration/formatAboutConfigSchema.d.ts +7 -21
  106. package/esm/configuration/formatDetailsConfigSchema.d.ts +11 -37
  107. package/esm/configuration/formatDetailsConfigSchema.js +10 -13
  108. package/esm/configuration/fullConfSnapshot.d.ts +4 -19
  109. package/esm/configuration/fullConfSnapshot.js +30 -52
  110. package/esm/configuration/getConf.d.ts +45 -41
  111. package/esm/configuration/getConf.js +111 -44
  112. package/esm/configuration/index.d.ts +26 -11
  113. package/esm/configuration/index.js +16 -7
  114. package/esm/configuration/indexType.d.ts +26 -0
  115. package/esm/configuration/indexType.js +38 -0
  116. package/esm/configuration/mergeFormatCallbacks.d.ts +6 -7
  117. package/esm/configuration/mergeFormatCallbacks.js +13 -10
  118. package/esm/configuration/plot.d.ts +61 -0
  119. package/esm/configuration/plot.js +142 -0
  120. package/esm/configuration/readConfObject.d.ts +2 -24
  121. package/esm/configuration/readConfObject.js +20 -63
  122. package/esm/configuration/requirements.d.ts +37 -0
  123. package/esm/configuration/requirements.js +88 -0
  124. package/esm/configuration/schemaRegistry.d.ts +32 -15
  125. package/esm/configuration/schemaRegistry.js +33 -35
  126. package/esm/configuration/schemaTypes.d.ts +21 -5
  127. package/esm/configuration/schemaTypes.js +66 -55
  128. package/esm/configuration/slotFacade.d.ts +12 -29
  129. package/esm/configuration/slotFacade.js +44 -23
  130. package/esm/configuration/snapshotPreprocess.d.ts +43 -0
  131. package/esm/configuration/snapshotPreprocess.js +161 -0
  132. package/esm/configuration/tabixIndexFields.d.ts +30 -4
  133. package/esm/configuration/tabixIndexFields.js +21 -4
  134. package/esm/configuration/tabixShorthand.d.ts +34 -17
  135. package/esm/configuration/tabixShorthand.js +49 -22
  136. package/esm/configuration/types.d.ts +182 -43
  137. package/esm/configuration/uriShorthand.d.ts +9 -0
  138. package/esm/configuration/uriShorthand.js +16 -0
  139. package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +13 -19
  140. package/esm/data_adapters/BaseAdapter/BaseAdapter.js +12 -19
  141. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +40 -2
  142. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +68 -5
  143. package/esm/data_adapters/BaseAdapter/featureDensity.d.ts +40 -0
  144. package/esm/data_adapters/BaseAdapter/featureDensity.js +31 -0
  145. package/esm/data_adapters/BaseAdapter/index.d.ts +23 -3
  146. package/esm/data_adapters/BaseAdapter/index.js +1 -0
  147. package/esm/data_adapters/BaseAdapter/rowSources.d.ts +37 -0
  148. package/esm/data_adapters/BaseAdapter/rowSources.js +7 -0
  149. package/esm/data_adapters/BaseAdapter/stats.d.ts +33 -1
  150. package/esm/data_adapters/BaseAdapter/stats.js +52 -13
  151. package/esm/data_adapters/BaseAdapter/types.d.ts +8 -12
  152. package/esm/data_adapters/BaseAdapter/zoomRange.d.ts +10 -0
  153. package/esm/data_adapters/CytobandAdapter/CytobandAdapter.js +1 -1
  154. package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +7 -11
  155. package/esm/data_adapters/CytobandAdapter/configSchema.js +3 -17
  156. package/esm/data_adapters/dataAdapterCache.d.ts +19 -2
  157. package/esm/data_adapters/dataAdapterCache.js +44 -10
  158. package/esm/data_adapters/getFeatureAdapter.d.ts +6 -4
  159. package/esm/data_adapters/getFeatureAdapter.js +8 -8
  160. package/esm/data_adapters/getSequenceSubAdapter.d.ts +7 -9
  161. package/esm/data_adapters/getSequenceSubAdapter.js +8 -10
  162. package/esm/pluggableElementTypes/AdapterType.d.ts +8 -8
  163. package/esm/pluggableElementTypes/AdapterType.js +1 -1
  164. package/esm/pluggableElementTypes/DisplayType.d.ts +53 -16
  165. package/esm/pluggableElementTypes/DisplayType.js +28 -12
  166. package/esm/pluggableElementTypes/LazyStateModelElement.d.ts +32 -0
  167. package/esm/pluggableElementTypes/LazyStateModelElement.js +77 -0
  168. package/esm/pluggableElementTypes/PluggableElementBase.d.ts +3 -5
  169. package/esm/pluggableElementTypes/PluggableElementBase.js +3 -5
  170. package/esm/pluggableElementTypes/RpcMethodType.d.ts +11 -1
  171. package/esm/pluggableElementTypes/RpcMethodType.js +25 -9
  172. package/esm/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.d.ts +1 -2
  173. package/esm/pluggableElementTypes/TextSearchAdapterType.d.ts +7 -7
  174. package/esm/pluggableElementTypes/ViewType.d.ts +20 -4
  175. package/esm/pluggableElementTypes/ViewType.js +32 -4
  176. package/esm/pluggableElementTypes/WidgetType.d.ts +6 -0
  177. package/esm/pluggableElementTypes/WidgetType.js +6 -0
  178. package/esm/pluggableElementTypes/addMenuItems.d.ts +3 -2
  179. package/esm/pluggableElementTypes/extendElementType.d.ts +1 -2
  180. package/esm/pluggableElementTypes/extendElementType.js +9 -5
  181. package/esm/pluggableElementTypes/index.d.ts +2 -1
  182. package/esm/pluggableElementTypes/index.js +2 -9
  183. package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +19 -9
  184. package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +122 -28
  185. package/esm/pluggableElementTypes/models/BaseDisplayModel.js +155 -11
  186. package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +65 -16
  187. package/esm/pluggableElementTypes/models/BaseTrackModel.js +179 -117
  188. package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +87 -18
  189. package/esm/pluggableElementTypes/models/BaseViewModel.js +54 -11
  190. package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +26 -16
  191. package/esm/pluggableElementTypes/models/assertDisplayContract.d.ts +15 -11
  192. package/esm/pluggableElementTypes/models/assertDisplayContract.js +25 -32
  193. package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +22 -18
  194. package/esm/pluggableElementTypes/models/baseConnectionConfig.js +5 -5
  195. package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +26 -31
  196. package/esm/pluggableElementTypes/models/baseTrackConfig.d.ts +108 -147
  197. package/esm/pluggableElementTypes/models/baseTrackConfig.js +96 -73
  198. package/esm/pluggableElementTypes/models/components/SaveTrackData.js +4 -6
  199. package/esm/pluggableElementTypes/models/components/fetchTrackData.d.ts +3 -4
  200. package/esm/pluggableElementTypes/models/components/fetchTrackData.js +3 -3
  201. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +23 -13
  202. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +80 -48
  203. package/esm/pluggableElementTypes/models/index.d.ts +2 -3
  204. package/esm/pluggableElementTypes/models/index.js +2 -3
  205. package/esm/pluggableElementTypes/models/migrateTrackConfig.d.ts +15 -1
  206. package/esm/pluggableElementTypes/models/migrateTrackConfig.js +85 -25
  207. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.d.ts +4 -3
  208. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.js +141 -19
  209. package/esm/pluggableElementTypes/models/saveTrackFileTypes/types.d.ts +3 -3
  210. package/esm/pluginDefinitions.d.ts +34 -7
  211. package/esm/pluginDefinitions.js +54 -20
  212. package/esm/rpc/BaseRpcDriver.d.ts +2 -2
  213. package/esm/rpc/BaseRpcDriver.js +25 -30
  214. package/esm/rpc/MainThreadRpcDriver.d.ts +2 -2
  215. package/esm/rpc/MainThreadRpcDriver.js +13 -8
  216. package/esm/rpc/RpcClient.d.ts +18 -6
  217. package/esm/rpc/RpcClient.js +51 -16
  218. package/esm/rpc/RpcManager.d.ts +14 -10
  219. package/esm/rpc/RpcManager.js +11 -1
  220. package/esm/rpc/RpcRegistry.d.ts +40 -7
  221. package/esm/rpc/RpcServer.d.ts +3 -1
  222. package/esm/rpc/RpcServer.js +19 -12
  223. package/esm/rpc/WebWorkerRpcDriver.d.ts +11 -4
  224. package/esm/rpc/WebWorkerRpcDriver.js +64 -68
  225. package/esm/rpc/byteBudget.d.ts +20 -5
  226. package/esm/rpc/byteBudget.js +16 -5
  227. package/esm/rpc/configSchema.d.ts +7 -21
  228. package/esm/rpc/coreRpcMethods.d.ts +4 -0
  229. package/esm/rpc/coreRpcMethods.js +4 -0
  230. package/esm/rpc/methods/CoreGetEncodedFeature.d.ts +13 -0
  231. package/esm/rpc/methods/CoreGetEncodedFeature.js +32 -0
  232. package/esm/rpc/methods/CoreGetEncodedLayers.d.ts +16 -0
  233. package/esm/rpc/methods/CoreGetEncodedLayers.js +59 -0
  234. package/esm/rpc/methods/CoreGetExportData.js +3 -4
  235. package/esm/rpc/methods/CoreGetFeatureDensity.d.ts +11 -0
  236. package/esm/rpc/methods/CoreGetFeatureDensity.js +22 -0
  237. package/esm/rpc/methods/CoreGetFeatures.js +3 -5
  238. package/esm/rpc/methods/CoreGetRefNames.js +2 -12
  239. package/esm/rpc/methods/CoreGetRegionByteEstimate.js +1 -1
  240. package/esm/rpc/methods/CoreGetSequence.js +2 -2
  241. package/esm/rpc/methods/CoreLoadAdapterCode.d.ts +13 -0
  242. package/esm/rpc/methods/CoreLoadAdapterCode.js +16 -0
  243. package/esm/rpc/methods/layerFeatures.d.ts +33 -0
  244. package/esm/rpc/methods/layerFeatures.js +29 -0
  245. package/esm/svg/SvgExport.js +6 -7
  246. package/esm/svg/SvgThemeProviders.d.ts +12 -0
  247. package/esm/svg/SvgThemeProviders.js +15 -0
  248. package/esm/svg/exportViewSvg.d.ts +28 -0
  249. package/esm/svg/exportViewSvg.js +13 -0
  250. package/esm/svg/normalizeSvgMarkup.d.ts +7 -0
  251. package/esm/svg/normalizeSvgMarkup.js +99 -0
  252. package/esm/svg/serializeSvg.d.ts +7 -0
  253. package/esm/svg/serializeSvg.js +11 -0
  254. package/esm/svg/svgId.d.ts +1 -1
  255. package/esm/svg/svgId.js +1 -1
  256. package/esm/svg/svgReady.d.ts +9 -7
  257. package/esm/svg/svgReady.js +8 -7
  258. package/esm/svg/trackNames.d.ts +7 -5
  259. package/esm/svg/trackNames.js +12 -9
  260. package/esm/svg/wrapSvgExport.js +6 -74
  261. package/esm/ui/AddCustomPluginDialog.js +3 -8
  262. package/esm/ui/AppReadyMarker.d.ts +45 -0
  263. package/esm/ui/AppReadyMarker.js +89 -0
  264. package/esm/ui/BaseExportSvgDialog.d.ts +1 -1
  265. package/esm/ui/CascadingMenu.js +181 -104
  266. package/esm/ui/DropDownMenu.js +2 -1
  267. package/esm/ui/ErrorBanner.js +1 -1
  268. package/esm/ui/ErrorBoundary.d.ts +2 -2
  269. package/esm/ui/ErrorMessageStackTraceContents.js +2 -1
  270. package/esm/ui/ErrorMessageStackTraceDialog.js +5 -11
  271. package/esm/ui/ExportSvgDialog.d.ts +1 -1
  272. package/esm/ui/FileDropZone.js +2 -1
  273. package/esm/ui/FileSelector/useInternetAccounts.d.ts +156 -96
  274. package/esm/ui/HoverMenu.d.ts +1 -2
  275. package/esm/ui/HoverMenu.js +6 -3
  276. package/esm/ui/JexlFilterDialog.d.ts +13 -10
  277. package/esm/ui/JexlFilterDialog.js +122 -50
  278. package/esm/ui/JexlFilterRowEditors.d.ts +15 -0
  279. package/esm/ui/JexlFilterRowEditors.js +90 -0
  280. package/esm/ui/LazyBaseTooltip.d.ts +4 -0
  281. package/esm/ui/LazyBaseTooltip.js +9 -0
  282. package/esm/ui/LegendSwatchGlyph.js +26 -21
  283. package/esm/ui/LoadingOverlay.d.ts +14 -0
  284. package/esm/ui/LoadingOverlay.js +4 -2
  285. package/esm/ui/MenuTypes.d.ts +23 -53
  286. package/esm/ui/MenuTypes.js +3 -0
  287. package/esm/ui/MonospaceTextField.d.ts +2 -1
  288. package/esm/ui/MonospaceTextField.js +23 -20
  289. package/esm/ui/PaletteContext.d.ts +10 -5
  290. package/esm/ui/PaletteContext.js +44 -6
  291. package/esm/ui/RefNameAutocomplete/SearchOption.d.ts +13 -0
  292. package/esm/ui/RefNameAutocomplete/SearchOption.js +45 -0
  293. package/esm/ui/RefNameAutocomplete/index.d.ts +1 -2
  294. package/esm/ui/RefNameAutocomplete/index.js +8 -2
  295. package/esm/ui/RefNameAutocomplete/util.d.ts +13 -0
  296. package/esm/ui/RefNameAutocomplete/util.js +42 -1
  297. package/esm/ui/ResizeHandle.d.ts +3 -1
  298. package/esm/ui/ResizeHandle.js +44 -11
  299. package/esm/ui/ScrollChrome.d.ts +13 -0
  300. package/esm/ui/ScrollChrome.js +11 -0
  301. package/esm/ui/ScrollEdgeShadow.d.ts +6 -9
  302. package/esm/ui/ScrollEdgeShadow.js +14 -35
  303. package/esm/ui/ScrollZoomToggle.d.ts +4 -27
  304. package/esm/ui/ScrollZoomToggle.js +34 -51
  305. package/esm/ui/SessionJsonPanel.d.ts +3 -0
  306. package/esm/ui/SessionJsonPanel.js +14 -0
  307. package/esm/ui/SettingsChangesTable.d.ts +1 -0
  308. package/esm/ui/SettingsChangesTable.js +49 -11
  309. package/esm/ui/ShareLinkField.d.ts +1 -3
  310. package/esm/ui/ShareLinkField.js +13 -40
  311. package/esm/ui/SizeSliderRow.d.ts +1 -3
  312. package/esm/ui/SizeSliderRow.js +4 -6
  313. package/esm/ui/SnackbarModel.js +79 -67
  314. package/esm/ui/StatusProgressBar.js +2 -2
  315. package/esm/ui/SvgColorLegend.d.ts +9 -4
  316. package/esm/ui/SvgColorLegend.js +82 -41
  317. package/esm/ui/VerticalScrollbar.d.ts +13 -34
  318. package/esm/ui/VerticalScrollbar.js +29 -83
  319. package/esm/ui/ViewLoadingScreen.d.ts +5 -4
  320. package/esm/ui/ViewLoadingScreen.js +8 -32
  321. package/esm/ui/colorScale.d.ts +92 -0
  322. package/esm/ui/colorScale.js +72 -0
  323. package/esm/ui/colors.d.ts +64 -0
  324. package/esm/ui/colors.js +230 -1
  325. package/esm/ui/hoverBoxStyle.d.ts +14 -2
  326. package/esm/ui/hoverBoxStyle.js +17 -2
  327. package/esm/ui/index.d.ts +12 -12
  328. package/esm/ui/index.js +14 -22
  329. package/esm/ui/launchViewMenu.js +15 -5
  330. package/esm/ui/legendMenuItem.d.ts +10 -32
  331. package/esm/ui/legendMenuItem.js +9 -36
  332. package/esm/ui/legendSpec.d.ts +15 -8
  333. package/esm/ui/legendSpec.js +14 -23
  334. package/esm/ui/makeSizeMenu.d.ts +0 -6
  335. package/esm/ui/makeSizeMenu.js +6 -30
  336. package/esm/ui/measureLegendText.js +1 -1
  337. package/esm/ui/menuItemAdornment.d.ts +9 -20
  338. package/esm/ui/menuItemAdornment.js +10 -32
  339. package/esm/ui/menuItems.d.ts +2 -7
  340. package/esm/ui/menuItems.js +1 -6
  341. package/esm/ui/multiTrackMenuItems.d.ts +6 -0
  342. package/esm/ui/palette.d.ts +118 -116
  343. package/esm/ui/palette.js +114 -75
  344. package/esm/ui/replaceViewAction.d.ts +1 -1
  345. package/esm/ui/replaceViewAction.js +1 -1
  346. package/esm/ui/theme.d.ts +43 -119
  347. package/esm/ui/theme.js +62 -78
  348. package/esm/ui/toggleMenuItems.d.ts +1 -3
  349. package/esm/ui/toggleMenuItems.js +6 -5
  350. package/esm/ui/useAssemblySelection.d.ts +4 -4
  351. package/esm/ui/viewHeaderHeight.d.ts +1 -0
  352. package/esm/ui/viewHeaderHeight.js +1 -0
  353. package/esm/util/Base1DUtils.d.ts +5 -3
  354. package/esm/util/Base1DUtils.js +14 -6
  355. package/esm/util/Base1DViewModel.d.ts +2 -1
  356. package/esm/util/Base1DViewModel.js +3 -2
  357. package/esm/util/SvgCanvas.d.ts +15 -13
  358. package/esm/util/SvgCanvas.js +76 -56
  359. package/esm/util/TimeTraveller.d.ts +3 -0
  360. package/esm/util/TimeTraveller.js +34 -2
  361. package/esm/util/aborting.d.ts +39 -0
  362. package/esm/util/aborting.js +88 -6
  363. package/esm/util/adapterMetadata.d.ts +1 -1
  364. package/esm/util/adapterMetadata.js +6 -5
  365. package/esm/util/addAndShowTrack.d.ts +2 -5
  366. package/esm/util/addAndShowTrack.js +5 -1
  367. package/esm/util/addRelativeUris.d.ts +17 -5
  368. package/esm/util/addRelativeUris.js +46 -10
  369. package/esm/util/addTrackFromWidget.d.ts +2 -5
  370. package/esm/util/addTrackFromWidget.js +5 -4
  371. package/esm/util/aggregateFieldName.d.ts +10 -0
  372. package/esm/util/aggregateFieldName.js +8 -0
  373. package/esm/util/analytics.js +46 -13
  374. package/esm/util/animationAllowed.d.ts +9 -0
  375. package/esm/util/animationAllowed.js +13 -0
  376. package/esm/util/applyRowResizeWheel.d.ts +10 -5
  377. package/esm/util/applyRowResizeWheel.js +10 -21
  378. package/esm/util/bandHeight.d.ts +10 -0
  379. package/esm/util/bandHeight.js +29 -0
  380. package/esm/util/bandLayout.d.ts +4 -4
  381. package/esm/util/bandLayout.js +4 -4
  382. package/esm/util/baseDisplayConfig.d.ts +8 -0
  383. package/esm/util/baseDisplayConfig.js +27 -0
  384. package/esm/util/bezierConnector.d.ts +4 -3
  385. package/esm/util/bezierConnector.js +38 -45
  386. package/esm/util/bgzfWorkerPool.d.ts +20 -74
  387. package/esm/util/bgzfWorkerPool.js +20 -74
  388. package/esm/util/binnedAggregate.d.ts +17 -0
  389. package/esm/util/binnedAggregate.js +275 -0
  390. package/esm/util/cacheBudgets.d.ts +22 -19
  391. package/esm/util/cacheBudgets.js +22 -19
  392. package/esm/util/cachedSetup.d.ts +16 -6
  393. package/esm/util/cachedSetup.js +108 -38
  394. package/esm/util/categoricalField.d.ts +56 -0
  395. package/esm/util/categoricalField.js +73 -0
  396. package/esm/util/cellMatches.d.ts +23 -0
  397. package/esm/util/cellMatches.js +264 -0
  398. package/esm/util/cellsStep.d.ts +29 -0
  399. package/esm/util/cellsStep.js +437 -0
  400. package/esm/util/clampToContig.d.ts +17 -0
  401. package/esm/util/clampToContig.js +19 -0
  402. package/esm/util/coarseStripHTML.js +1 -2
  403. package/esm/util/color/cssColorsLevel4.d.ts +1 -0
  404. package/esm/util/color/cssColorsLevel4.js +1 -0
  405. package/esm/util/color/index.d.ts +5 -3
  406. package/esm/util/color/index.js +7 -4
  407. package/esm/util/colorBits.d.ts +3 -3
  408. package/esm/util/colorBits.js +19 -44
  409. package/esm/util/colorRamp.d.ts +49 -5
  410. package/esm/util/colorRamp.js +169 -18
  411. package/esm/util/colorScale.d.ts +156 -0
  412. package/esm/util/colorScale.js +243 -0
  413. package/esm/util/colorSchemes.d.ts +21 -0
  414. package/esm/util/colorSchemes.js +30 -0
  415. package/esm/util/copyToClipboard.js +8 -1
  416. package/esm/util/{createStopTokenRotation.d.ts → createAbortRotation.d.ts} +21 -23
  417. package/esm/util/{createStopTokenRotation.js → createAbortRotation.js} +21 -52
  418. package/esm/util/createSvgRasterCanvas.d.ts +10 -0
  419. package/esm/util/cssColorParse.d.ts +15 -0
  420. package/esm/util/cssColorParse.js +53 -0
  421. package/esm/util/diagonalizeRegions.d.ts +2 -3
  422. package/esm/util/diagonalizeRegions.js +8 -13
  423. package/esm/util/expandLooseSearchIndex.d.ts +19 -0
  424. package/esm/util/expandLooseSearchIndex.js +29 -0
  425. package/esm/util/featureTable.d.ts +224 -0
  426. package/esm/util/featureTable.js +366 -0
  427. package/esm/util/featureTransforms.d.ts +81 -0
  428. package/esm/util/featureTransforms.js +1231 -0
  429. package/esm/util/featureTypes.d.ts +24 -0
  430. package/esm/util/featureTypes.js +35 -0
  431. package/esm/util/fetchAndMaybeUnzip.js +16 -9
  432. package/esm/util/fetchContext.d.ts +7 -8
  433. package/esm/util/fetchContext.js +3 -3
  434. package/esm/util/fetchHub.d.ts +4 -2
  435. package/esm/util/fetchHub.js +2 -2
  436. package/esm/util/fetchPhases.d.ts +10 -10
  437. package/esm/util/fetchSeq.d.ts +2 -3
  438. package/esm/util/fetchSeq.js +2 -2
  439. package/esm/util/fieldReader.d.ts +17 -0
  440. package/esm/util/fieldReader.js +62 -0
  441. package/esm/util/formatBytes.js +1 -1
  442. package/esm/util/formatGuessers.d.ts +25 -14
  443. package/esm/util/formatGuessers.js +42 -27
  444. package/esm/util/formatRelativeTime.js +1 -1
  445. package/esm/util/freezeDeep.d.ts +8 -10
  446. package/esm/util/freezeDeep.js +8 -10
  447. package/esm/util/getLocationUri.d.ts +2 -1
  448. package/esm/util/getLocationUri.js +8 -2
  449. package/esm/util/groupKeys.d.ts +76 -0
  450. package/esm/util/groupKeys.js +156 -0
  451. package/esm/util/highlights.d.ts +10 -6
  452. package/esm/util/highlights.js +12 -25
  453. package/esm/util/hooks.d.ts +31 -2
  454. package/esm/util/hooks.js +72 -3
  455. package/esm/util/index.d.ts +11 -11
  456. package/esm/util/index.js +11 -10
  457. package/esm/util/indexCandidates.d.ts +1 -31
  458. package/esm/util/indexCandidates.js +5 -63
  459. package/esm/util/installFetch.d.ts +77 -37
  460. package/esm/util/installFetch.js +65 -38
  461. package/esm/util/installInitAutorun.d.ts +14 -13
  462. package/esm/util/installInitAutorun.js +17 -17
  463. package/esm/util/installPrerequisiteFetch.d.ts +115 -0
  464. package/esm/util/installPrerequisiteFetch.js +111 -0
  465. package/esm/util/intervals.js +9 -4
  466. package/esm/util/io/index.js +22 -15
  467. package/esm/util/isDataCurrent.d.ts +7 -5
  468. package/esm/util/isDataCurrent.js +9 -6
  469. package/esm/util/isTextEntryFocused.d.ts +7 -0
  470. package/esm/util/isTextEntryFocused.js +16 -0
  471. package/esm/util/jexl.js +24 -21
  472. package/esm/util/jexlFilterRows.d.ts +89 -0
  473. package/esm/util/jexlFilterRows.js +252 -0
  474. package/esm/util/jexlFilters.d.ts +32 -57
  475. package/esm/util/jexlFilters.js +31 -29
  476. package/esm/util/jexlStrings.d.ts +3 -4
  477. package/esm/util/jexlStrings.js +2 -3
  478. package/esm/util/layouts/GranularRectLayout.d.ts +8 -1
  479. package/esm/util/layouts/GranularRectLayout.js +25 -8
  480. package/esm/util/lazyAfterAttach.d.ts +13 -0
  481. package/esm/util/lazyAfterAttach.js +31 -0
  482. package/esm/util/lazyWithPreload.d.ts +19 -0
  483. package/esm/util/lazyWithPreload.js +27 -0
  484. package/esm/util/legendCandidates.d.ts +72 -0
  485. package/esm/util/legendCandidates.js +138 -0
  486. package/esm/util/locString.js +5 -2
  487. package/esm/util/localStorage.js +4 -4
  488. package/esm/util/markEncoding.d.ts +150 -0
  489. package/esm/util/markEncoding.js +885 -0
  490. package/esm/util/markEncodingTypes.d.ts +595 -0
  491. package/esm/util/markEncodingTypes.js +8 -0
  492. package/esm/util/mst-reflection.d.ts +2 -20
  493. package/esm/util/mst-reflection.js +3 -53
  494. package/esm/util/mstUtils.d.ts +31 -23
  495. package/esm/util/mstUtils.js +39 -24
  496. package/esm/util/numericUtils.d.ts +7 -0
  497. package/esm/util/numericUtils.js +16 -0
  498. package/esm/util/numericValue.d.ts +14 -0
  499. package/esm/util/numericValue.js +34 -0
  500. package/esm/util/openFeatureWidget.d.ts +5 -0
  501. package/esm/util/openFeatureWidget.js +2 -2
  502. package/esm/util/openViews.d.ts +17 -0
  503. package/esm/util/openViews.js +22 -0
  504. package/esm/util/parentWalk.d.ts +1 -1
  505. package/esm/util/parentWalk.js +1 -1
  506. package/esm/util/parseLineByLine.d.ts +4 -5
  507. package/esm/util/parseLineByLine.js +8 -14
  508. package/esm/util/pluginStore.d.ts +6 -8
  509. package/esm/util/pluginStore.js +17 -16
  510. package/esm/util/preloadComponent.d.ts +5 -0
  511. package/esm/util/preloadComponent.js +11 -0
  512. package/esm/util/progress.d.ts +22 -22
  513. package/esm/util/progress.js +27 -26
  514. package/esm/util/quantileExtent.d.ts +49 -0
  515. package/esm/util/quantileExtent.js +162 -0
  516. package/esm/util/range.d.ts +13 -9
  517. package/esm/util/range.js +17 -8
  518. package/esm/util/renameRegions.d.ts +26 -6
  519. package/esm/util/renameRegions.js +68 -54
  520. package/esm/util/renderToStaticMarkup.js +24 -14
  521. package/esm/util/rxjs.d.ts +23 -8
  522. package/esm/util/rxjs.js +61 -15
  523. package/esm/util/samplesTsv.d.ts +49 -0
  524. package/esm/util/samplesTsv.js +86 -0
  525. package/esm/util/scheduleDetachedDestroy.d.ts +18 -0
  526. package/esm/util/scheduleDetachedDestroy.js +24 -0
  527. package/esm/util/scrollLatch.d.ts +1 -0
  528. package/esm/util/scrollLatch.js +8 -0
  529. package/esm/util/selectEncodedFeature.d.ts +16 -0
  530. package/esm/util/selectEncodedFeature.js +34 -0
  531. package/esm/util/sessionSharing.d.ts +7 -5
  532. package/esm/util/sessionSharing.js +23 -23
  533. package/esm/util/shapeNameList.d.ts +2 -0
  534. package/esm/util/shapeNameList.js +6 -0
  535. package/esm/util/shapeNames.d.ts +7 -0
  536. package/esm/util/shapeNames.js +11 -0
  537. package/esm/util/simpleFeature.d.ts +0 -1
  538. package/esm/util/springAnimate.js +1 -1
  539. package/esm/util/starFusion.d.ts +26 -0
  540. package/esm/util/starFusion.js +37 -0
  541. package/esm/util/stepTables.d.ts +96 -0
  542. package/esm/util/stepTables.js +277 -0
  543. package/esm/util/svAlt.d.ts +145 -0
  544. package/esm/util/svAlt.js +364 -0
  545. package/esm/util/svgColorProps.d.ts +11 -0
  546. package/esm/util/svgColorProps.js +28 -1
  547. package/esm/util/systemColorScheme.d.ts +12 -0
  548. package/esm/util/systemColorScheme.js +27 -0
  549. package/esm/util/tabix.d.ts +19 -10
  550. package/esm/util/tabix.js +19 -14
  551. package/esm/util/thresholdScale.d.ts +91 -0
  552. package/esm/util/thresholdScale.js +166 -0
  553. package/esm/util/timeGate.d.ts +4 -5
  554. package/esm/util/timeGate.js +4 -5
  555. package/esm/util/trackConfigDelta.d.ts +26 -26
  556. package/esm/util/trackConfigDelta.js +63 -47
  557. package/esm/util/tracks.d.ts +120 -66
  558. package/esm/util/tracks.js +501 -151
  559. package/esm/util/translateTranscript.d.ts +44 -0
  560. package/esm/util/translateTranscript.js +102 -0
  561. package/esm/util/types/data.d.ts +0 -2
  562. package/esm/util/types/index.d.ts +121 -22
  563. package/esm/util/types/index.js +9 -0
  564. package/esm/util/types/mst.d.ts +3 -0
  565. package/esm/util/types/mst.js +4 -0
  566. package/esm/util/types/renameIds.d.ts +1 -0
  567. package/esm/util/types/renameIds.js +29 -0
  568. package/esm/util/types/services.d.ts +1 -1
  569. package/esm/util/unknownSnapshotKeys.d.ts +53 -0
  570. package/esm/util/unknownSnapshotKeys.js +76 -0
  571. package/esm/util/useFeatureSequence.js +5 -5
  572. package/esm/util/useFetch.d.ts +3 -4
  573. package/esm/util/useFetch.js +19 -10
  574. package/esm/util/useFetchPlugins.d.ts +6 -2
  575. package/esm/util/useFetchPlugins.js +7 -3
  576. package/esm/util/usePanZoom.js +10 -3
  577. package/esm/util/usePanelVirtualScroll.d.ts +7 -35
  578. package/esm/util/usePanelVirtualScroll.js +9 -36
  579. package/esm/util/useRafCommit.js +1 -0
  580. package/esm/util/useRowVirtualScroll.d.ts +6 -29
  581. package/esm/util/useRowVirtualScroll.js +8 -49
  582. package/esm/util/useVirtualScrollWheel.d.ts +20 -4
  583. package/esm/util/useVirtualScrollWheel.js +40 -74
  584. package/esm/util/viewHighlights.d.ts +3 -0
  585. package/esm/util/viewHighlights.js +5 -0
  586. package/esm/util/viewStatus.d.ts +47 -15
  587. package/esm/util/viewStatus.js +34 -0
  588. package/esm/util/wheelZoom.d.ts +7 -1
  589. package/esm/util/wheelZoom.js +85 -19
  590. package/esm/util/whenViewSettled.d.ts +55 -8
  591. package/esm/util/whenViewSettled.js +56 -7
  592. package/esm/util/withFeatureDetails.js +4 -0
  593. package/esm/util/withLaunchInput.d.ts +174 -0
  594. package/esm/util/withLaunchInput.js +274 -0
  595. package/package.json +75 -24
  596. package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.d.ts +0 -2
  597. package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.js +0 -8
  598. package/esm/BaseFeatureWidget/BaseFeatureDetail/types.d.ts +0 -8
  599. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.d.ts +0 -80
  600. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.js +0 -583
  601. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.d.ts +0 -141
  602. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.js +0 -1116
  603. package/esm/ReExports/BaseFeatureDetails.d.ts +0 -1
  604. package/esm/ReExports/BaseFeatureDetails.js +0 -10
  605. package/esm/ReExports/index.d.ts +0 -1
  606. package/esm/ReExports/index.js +0 -1
  607. package/esm/ReExports/publicUtil.d.ts +0 -1
  608. package/esm/ReExports/publicUtil.js +0 -28
  609. package/esm/configuration/promotableDefaults.d.ts +0 -199
  610. package/esm/configuration/promotableDefaults.js +0 -326
  611. package/esm/configuration/promotablePin.d.ts +0 -55
  612. package/esm/configuration/promotablePin.js +0 -1
  613. package/esm/configuration/promotableResolve.d.ts +0 -108
  614. package/esm/configuration/promotableResolve.js +0 -117
  615. package/esm/configuration/promotableSlots.d.ts +0 -12
  616. package/esm/configuration/promotableSlots.js +0 -45
  617. package/esm/configuration/slotShape.d.ts +0 -12
  618. package/esm/configuration/slotShape.js +0 -84
  619. package/esm/pluggableElementTypes/models/HighlightsMixin.d.ts +0 -51
  620. package/esm/pluggableElementTypes/models/HighlightsMixin.js +0 -78
  621. package/esm/ui/PinAdornment.d.ts +0 -5
  622. package/esm/ui/PinAdornment.js +0 -79
  623. package/esm/ui/SvgGradientLegend.d.ts +0 -26
  624. package/esm/ui/SvgGradientLegend.js +0 -26
  625. package/esm/ui/highlightChipReveal.d.ts +0 -32
  626. package/esm/ui/highlightChipReveal.js +0 -39
  627. package/esm/ui/promotableMenuItems.d.ts +0 -19
  628. package/esm/ui/promotableMenuItems.js +0 -89
  629. package/esm/ui/promotablePinCoverage.d.ts +0 -44
  630. package/esm/ui/promotablePinCoverage.js +0 -87
  631. package/esm/util/applyInitSettings.d.ts +0 -79
  632. package/esm/util/applyInitSettings.js +0 -91
  633. package/esm/util/openDisplays.d.ts +0 -23
  634. package/esm/util/openDisplays.js +0 -79
  635. package/esm/util/stopToken.d.ts +0 -211
  636. package/esm/util/stopToken.js +0 -438
  637. /package/esm/{BaseFeatureWidget/BaseFeatureDetail/types.js → data_adapters/BaseAdapter/zoomRange.js} +0 -0
@@ -1,31 +1,17 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useRef, useState } from 'react';
3
+ import { observer } from 'mobx-react';
3
4
  import { clamp } from '../util/numericUtils.js';
4
5
  import { makeStyles } from '../util/tss-react/index.js';
5
6
  import { usePointerDrag } from '../util/usePointerDrag.js';
6
7
  import { useRafCommit } from '../util/useRafCommit.js';
7
8
  import { useVirtualScrollWheel } from '../util/useVirtualScrollWheel.js';
8
9
  /**
9
- * How much of a display's right edge this occupies while it is drawn.
10
- *
11
- * Exported because the things that have to *clear* it are drawn by the displays
12
- * that mount it, not by this file: the bottom-right indicator row and the
13
- * alignments coverage axis label. Both kept a private copy of the number (and
14
- * the alignments indicator row kept none at all, so its chips were drawn over
15
- * the thumb), which is a copy that can only be checked by looking at two files
16
- * at once.
10
+ * How much of a display's right edge this occupies while it is drawn, for the
11
+ * chrome the displays draw beside it.
17
12
  */
18
13
  export const VERTICAL_SCROLLBAR_WIDTH = 12;
19
- /**
20
- * Where the right edge of anything that has to sit *beside* the thumb goes: the
21
- * track's width plus a hair of air, so a chip or an axis label doesn't touch it.
22
- *
23
- * The four call sites all spelled `VERTICAL_SCROLLBAR_WIDTH + 2` inline, which
24
- * is the same copy the width constant was exported to stop — one addition
25
- * further along. The `+ 2` is a gap and belongs to the thing being cleared, not
26
- * to the scrollbar's own geometry, so it is named rather than folded into the
27
- * width (`right: 2` on the thumb is a different 2 and must not move with it).
28
- */
14
+ /** Where the right edge of something sitting beside the thumb goes. */
29
15
  export const VERTICAL_SCROLLBAR_CLEARANCE = VERTICAL_SCROLLBAR_WIDTH + 2;
30
16
  const MIN_THUMB_HEIGHT = 20;
31
17
  const useStyles = makeStyles()(theme => ({
@@ -35,12 +21,8 @@ const useStyles = makeStyles()(theme => ({
35
21
  width: VERTICAL_SCROLLBAR_WIDTH,
36
22
  cursor: 'default',
37
23
  zIndex: 10,
38
- // `usePointerDrag`'s one caller-owned requirement: without it the browser
39
- // claims a touch drag on this strip as a page scroll and no pointer stream
40
- // arrives at all, so the thumb simply doesn't drag by finger.
24
+ // without it the browser claims a touch drag as a page scroll
41
25
  touchAction: 'none',
42
- // theme-aware so the thumb stays visible in dark mode (a hardcoded black
43
- // thumb vanished against a dark canvas)
44
26
  '&:hover > *': {
45
27
  background: theme.palette.action.active,
46
28
  },
@@ -55,71 +37,41 @@ const useStyles = makeStyles()(theme => ({
55
37
  },
56
38
  }));
57
39
  /**
58
- * Draggable vertical scrollbar overlay for canvas-backed displays that scroll
59
- * their content via a `scrollTop` value (alignments pileup, variant matrix).
60
- * Renders nothing when the content fits the viewport. The thumb geometry and
61
- * the drag-to-scroll mapping live here so the consumers don't each re-derive
62
- * them; the wheel handling stays per-display (their gesture semantics differ).
40
+ * Draggable vertical scrollbar overlay for a virtually scrolled display.
41
+ * Renders nothing when the content fits.
63
42
  *
64
- * Deliberately NOT a keyboard tab stop: the surrounding views have no working
65
- * keyboard navigation to reach the scrolled content anyway, so a per-track
66
- * `tabIndex` would only add noise to the tab order. The `role="scrollbar"` +
67
- * `aria-value*` semantics are kept — they cost nothing and expose scroll
68
- * position to pointer/voice assistive tech.
43
+ * Not a keyboard tab stop: the views have no keyboard navigation to reach the
44
+ * scrolled content, so `tabIndex` would only add noise. The `role="scrollbar"`
45
+ * semantics stay for pointer and voice assistive tech.
69
46
  */
70
- export default function VerticalScrollbar({ scrollTop, setScrollTop, viewportHeight, contentHeight, controlsId, top = 0, }) {
47
+ const VerticalScrollbar = observer(function VerticalScrollbar({ model, controlsId, top = 0, }) {
71
48
  const { classes } = useStyles();
72
- // ephemeral drag anchor; null when not dragging. Pointer capture (set on the
73
- // track) delivers move/up here even when the pointer leaves the thin track,
74
- // and auto-releases on unmount — so no document listeners or effect cleanup.
75
49
  const dragRef = useRef(undefined);
76
50
  const [trackEl, setTrackEl] = useState(null);
77
- // A thumb drag's pointermove can fire faster than the frame rate, so coalesce
78
- // its scroll writes to one commit per frame; pointer-up flushes the final
79
- // (absolute) target so the resting position is exact.
80
- const { schedule: scheduleScroll, flush: flushScroll } = useRafCommit(setScrollTop);
81
- const scrollableHeight = Math.max(0, contentHeight - viewportHeight);
82
- // Wheeling while the pointer is over the scrollbar always scrolls the panel,
83
- // never zooms the view. The scrollbar overlay is a sibling of the canvas, so
84
- // its wheel events would otherwise bubble straight past the canvas's own
85
- // handler to the containing view's scroll-zoom. A native non-passive listener
86
- // here (via useVirtualScrollWheel) consumes the vertical delta into
87
- // setScrollTop and stopPropagation keeps it from reaching that scroll-zoom.
88
- useVirtualScrollWheel(trackEl, (e, applyScroll) => {
89
- applyScroll(e, { scrollTop, viewportHeight, scrollableHeight }, n => {
90
- setScrollTop(n);
91
- });
51
+ const { schedule: scheduleScroll, flush: flushScroll } = useRafCommit((n) => {
52
+ model.setScrollTop(n);
53
+ });
54
+ const { scrollTop, scrollableHeight, scrollViewportHeight: viewportHeight, } = model;
55
+ // Wheeling the scrollbar always scrolls the panel, whatever `scrollZoom`
56
+ // says, and never reaches the view.
57
+ useVirtualScrollWheel(trackEl, model, (e, scroll) => {
58
+ scroll();
92
59
  e.stopPropagation();
93
60
  });
94
61
  const clampedScrollTop = clamp(scrollTop, 0, scrollableHeight);
95
- // never taller than the track itself — on a very short viewport the
96
- // MIN_THUMB_HEIGHT floor would otherwise exceed viewportHeight, pushing
97
- // thumbTop negative (thumb drawn above the track) and making usableTrack
98
- // negative (drag mapping dead)
62
+ const contentHeight = viewportHeight + scrollableHeight;
99
63
  const thumbHeight = Math.min(viewportHeight, Math.max(MIN_THUMB_HEIGHT, viewportHeight * (viewportHeight / contentHeight)));
100
64
  const usableTrack = viewportHeight - thumbHeight;
101
- // clamp so a scrollTop past scrollableHeight (virtual-scroll displays don't
102
- // self-correct like a native overflow container) can't draw the thumb below
103
- // the track
104
65
  const thumbTop = clamp((clampedScrollTop / scrollableHeight) * usableTrack, 0, usableTrack);
105
- // The press lifecycle is `usePointerDrag`'s: primary button only, one drag per
106
- // pointer, capture on the track so moves keep arriving once the pointer leaves
107
- // the 12px strip, and auto-release on unmount. Hand-rolled here before that
108
- // existed, which cost two of the bugs it is written to prevent — a right-press
109
- // started a drag that then ran underneath its own context menu, and a second
110
- // finger landing mid-drag re-anchored the gesture.
66
+ // A press on the track above or below the thumb pages one viewport toward it
67
+ // rather than starting a drag; `dragRef` staying unset makes the captured
68
+ // moves that follow do nothing.
111
69
  const drag = usePointerDrag({
112
- // Click-to-page: a press on the track above/below the thumb jumps one
113
- // viewport toward it (like a native scrollbar) rather than starting a drag.
114
- // The thumb is pointerEvents:none so every press lands on the track; decide
115
- // page-vs-drag from its Y relative to the thumb. `dragRef` staying undefined
116
- // is what makes the paging branch ignore the moves that follow — the pointer
117
- // is captured either way, and a page press simply has nothing to do with them.
118
70
  onDragStart: e => {
119
71
  const clickY = e.clientY - e.currentTarget.getBoundingClientRect().top;
120
72
  if (clickY < thumbTop || clickY > thumbTop + thumbHeight) {
121
73
  const dir = clickY < thumbTop ? -1 : 1;
122
- setScrollTop(clamp(clampedScrollTop + dir * viewportHeight, 0, scrollableHeight));
74
+ model.setScrollTop(clamp(clampedScrollTop + dir * viewportHeight, 0, scrollableHeight));
123
75
  }
124
76
  else {
125
77
  dragRef.current = { startY: e.clientY, startScroll: clampedScrollTop };
@@ -137,22 +89,16 @@ export default function VerticalScrollbar({ scrollTop, setScrollTop, viewportHei
137
89
  dragRef.current = undefined;
138
90
  },
139
91
  });
140
- // Below every hook, not above the geometry it reads: "the content fits" is a
141
- // prop-driven condition that flips while mounted, so an early return above
142
- // `usePointerDrag` would call a different number of hooks per render. The
143
- // geometry it closes over is computed either way and simply goes unused here —
144
- // nothing renders, so nothing can dispatch a pointer event at it.
92
+ // below every hook: "the content fits" flips while mounted
145
93
  if (scrollableHeight <= 0) {
146
94
  return null;
147
95
  }
148
96
  return (_jsx("div", { ref: setTrackEl, "data-testid": "vertical-scrollbar", "data-gesture-owner": "true", className: classes.track, style: { top, height: viewportHeight }, role: "scrollbar", "aria-label": "Vertical scrollbar", "aria-controls": controlsId, "aria-orientation": "vertical", "aria-valuemin": 0, "aria-valuemax": Math.round(scrollableHeight), "aria-valuenow": Math.round(clampedScrollTop), ...drag,
149
- // Wraps the hook's own handler rather than replacing it: stopPropagation
150
- // so the press doesn't also pan the view, and it runs for every button, so
151
- // a right-press the drag ignores still doesn't reach the view. No
152
- // preventDefault, so the native focus shift can still close open popups
153
- // and the context menu still opens.
97
+ // every button, so a right-press the drag ignores doesn't pan the view
98
+ // either; no preventDefault, so focus still moves and menus still open
154
99
  onPointerDown: e => {
155
100
  e.stopPropagation();
156
101
  drag.onPointerDown(e);
157
102
  }, children: _jsx("div", { className: classes.thumb, style: { top: thumbTop, height: thumbHeight } }) }));
158
- }
103
+ });
104
+ export default VerticalScrollbar;
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * The "view exists but isn't ready yet" screen a view renders instead of its
3
3
  * content — LGV, dotplot and linear synteny all show it while the assembly they
4
- * name is still loading, labelled with which of the assembly's files is
5
- * downloading and a determinate bar when that download reports one.
4
+ * name is still loading. A load past two seconds is labelled with which of the
5
+ * assembly's files is downloading, and a determinate bar when that download
6
+ * reports one; a faster one says only "Loading".
6
7
  *
7
8
  * A load that then stops reporting names the file it is waiting on. The phase
8
9
  * label alone does not: "Downloading chromosome aliases" is a fair description
@@ -17,8 +18,8 @@
17
18
  * {@link LoadingProgress} directly — bare, it renders an unconstrained
18
19
  * full-width bar under an unaligned label.
19
20
  */
20
- export default function ViewLoadingScreen({ message, fraction, source, }: {
21
+ export default function ViewLoadingScreen({ message, progress, source, }: {
21
22
  message?: string;
22
- fraction?: number;
23
+ progress?: number;
23
24
  source?: string;
24
25
  }): import("react").JSX.Element;
@@ -1,12 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useEffect, useState } from 'react';
3
2
  import { Typography } from '@mui/material';
3
+ import { useSlowLoad, useStalled } from '../util/hooks.js';
4
4
  import { makeStyles } from '../util/tss-react/index.js';
5
5
  import LoadingProgress from './LoadingProgress.js';
6
- // Long enough that a load which is merely slow never says it, short enough to
7
- // beat the point where someone decides the app is broken. Every status write
8
- // resets it, so a download that is still moving its bar never reaches it
9
- const STALL_MS = 5000;
10
6
  const useStyles = makeStyles()(theme => ({
11
7
  root: {
12
8
  display: 'flex',
@@ -28,33 +24,12 @@ const useStyles = makeStyles()(theme => ({
28
24
  color: theme.palette.text.secondary,
29
25
  },
30
26
  }));
31
- /**
32
- * Has this load said the same thing for {@link STALL_MS}? `key` is everything
33
- * the screen is showing, so any status at all — a new phase, another chunk of
34
- * bytes — restarts the wait, and only a load that has genuinely stopped saying
35
- * anything gets there.
36
- *
37
- * The timeout stores the key it fired for rather than a boolean, which is what
38
- * makes the reset free: a key that has moved on is not the key that was stalled,
39
- * so the notice goes away on the next status without a write to undo it.
40
- */
41
- function useStalled(key) {
42
- const [stalledKey, setStalledKey] = useState();
43
- useEffect(() => {
44
- const timer = setTimeout(() => {
45
- setStalledKey(key);
46
- }, STALL_MS);
47
- return () => {
48
- clearTimeout(timer);
49
- };
50
- }, [key]);
51
- return stalledKey === key;
52
- }
53
27
  /**
54
28
  * The "view exists but isn't ready yet" screen a view renders instead of its
55
29
  * content — LGV, dotplot and linear synteny all show it while the assembly they
56
- * name is still loading, labelled with which of the assembly's files is
57
- * downloading and a determinate bar when that download reports one.
30
+ * name is still loading. A load past two seconds is labelled with which of the
31
+ * assembly's files is downloading, and a determinate bar when that download
32
+ * reports one; a faster one says only "Loading".
58
33
  *
59
34
  * A load that then stops reporting names the file it is waiting on. The phase
60
35
  * label alone does not: "Downloading chromosome aliases" is a fair description
@@ -69,8 +44,9 @@ function useStalled(key) {
69
44
  * {@link LoadingProgress} directly — bare, it renders an unconstrained
70
45
  * full-width bar under an unaligned label.
71
46
  */
72
- export default function ViewLoadingScreen({ message, fraction, source, }) {
47
+ export default function ViewLoadingScreen({ message, progress, source, }) {
73
48
  const { classes } = useStyles();
74
- const stalled = useStalled(`${message}|${fraction}|${source}`);
75
- return (_jsxs("div", { className: classes.root, children: [_jsx(LoadingProgress, { variant: "h6", message: message, fraction: fraction, barClassName: classes.bar }), stalled && source ? (_jsxs(Typography, { variant: "body2", className: classes.stalled, children: ["still waiting on ", source] })) : null] }));
49
+ const slow = useSlowLoad();
50
+ const stalled = useStalled(`${message}|${progress}|${source}`);
51
+ return (_jsxs("div", { className: classes.root, children: [_jsx(LoadingProgress, { variant: "h6", message: slow ? message : undefined, fraction: slow ? progress : undefined, barClassName: classes.bar }), stalled && source ? (_jsxs(Typography, { variant: "body2", className: classes.stalled, children: ["still waiting on ", source] })) : null] }));
76
52
  }
@@ -0,0 +1,92 @@
1
+ import type { LegendSpec, LegendSwatch } from './legendSpec.ts';
2
+ /**
3
+ * One value a categorical scale colors. `value` is the datum the color
4
+ * classifies (an SV type, a sample group, an impact tier), `label` how the key
5
+ * names it. A row with no `color` is a note in the key rather than a swatch —
6
+ * "+N more", or a rule the swatches cannot state.
7
+ */
8
+ export interface CategoricalEntry {
9
+ value: string;
10
+ /**
11
+ * Every value painted in this row's color where the key is derived from
12
+ * the painting (`derivedColorScale`), `value` being the first; the label
13
+ * names them all. A row declared one value at a time leaves it unset.
14
+ */
15
+ values?: string[];
16
+ label: string;
17
+ color?: string;
18
+ swatches?: LegendSwatch[];
19
+ hidden?: boolean;
20
+ missing?: boolean;
21
+ }
22
+ /**
23
+ * A color vocabulary: a finite set of values, each drawn in one color. ADR-094's
24
+ * palette-index and per-instance-value cardinalities both resolve to this once
25
+ * the values are enumerated.
26
+ */
27
+ export interface CategoricalScale {
28
+ kind: 'categorical';
29
+ id: string;
30
+ title?: string;
31
+ entries: CategoricalEntry[];
32
+ domain?: readonly string[];
33
+ focusesRows?: boolean;
34
+ note?: string;
35
+ }
36
+ /** One stop of a continuous ramp, `offset` in `[0, 1]`. */
37
+ export interface RampStop {
38
+ offset: number;
39
+ color: string;
40
+ opacity?: number;
41
+ }
42
+ /**
43
+ * A scalar through a color ramp: ADR-094's scalar-through-a-scale
44
+ * cardinality. `stops` are what the painter samples — read them out of the
45
+ * same LUT the GPU uploads (`stopsFromRampLut`) so the bar is byte-identical
46
+ * to the plot. `format` prints the domain ends; `formatScore` by default, so
47
+ * a domain measured off the data prints `24.4` and not the float it was
48
+ * measured as.
49
+ */
50
+ export interface RampScale {
51
+ kind: 'ramp';
52
+ id: string;
53
+ title?: string;
54
+ domain: [number, number];
55
+ stops: RampStop[];
56
+ format?: (value: number) => string;
57
+ /**
58
+ * The loaded values' extremes. An end of `domain` the data runs past prints
59
+ * `≤` or `≥`, since the ramp paints every value beyond it in its end colour.
60
+ */
61
+ extent?: readonly [number, number];
62
+ }
63
+ /**
64
+ * What a display says about one of its color channels. A display declares a
65
+ * list of these (`LegendMixin.colorScales`) and the legend derives from it, so
66
+ * the key cannot list a color nothing painted.
67
+ */
68
+ export type ColorScale = CategoricalScale | RampScale;
69
+ /**
70
+ * The one derivation of a legend from a display's color scales: a section per
71
+ * scale, in the order declared. On screen `FloatingLegend` renders the result
72
+ * and the export flattens it through `legendEntries`, so the two cannot
73
+ * describe different colors.
74
+ *
75
+ * A lone scale names itself: section titles draw only beside other sections,
76
+ * so a lone categorical scale's title becomes the box's (a field's name over
77
+ * its values) and a lone ramp's goes on its row. Empty scales are
78
+ * dropped first, so one waiting for data does not leave its sibling untitled.
79
+ */
80
+ export declare function legendSpecOf(scales: ColorScale[]): LegendSpec;
81
+ /**
82
+ * The no-value row goes after every value a `domain` orders: the domain never
83
+ * lists it, so ordering by the domain alone ranks it with the values the
84
+ * domain leaves out.
85
+ */
86
+ export declare function missingRowLast(a: {
87
+ missing?: boolean;
88
+ }, b: {
89
+ missing?: boolean;
90
+ }): number;
91
+ /** Whether a scale has anything for a key to show. */
92
+ export declare function colorScaleIsEmpty(scale: ColorScale): boolean;
@@ -0,0 +1,72 @@
1
+ import { groupKeyComparator } from '../util/groupKeys.js';
2
+ import { formatScore } from '../util/numericUtils.js';
3
+ // A lone ramp names itself on its row: `FloatingLegend` and `legendEntries`
4
+ // draw a section's title only beside other sections, and a bar of numbers
5
+ // with nothing saying what they count is not a key.
6
+ function rampItem({ title, domain, stops, format = formatScore, extent }, lone) {
7
+ const [min, max] = domain;
8
+ const [lo, hi] = extent ?? domain;
9
+ // compared at float32 as well, since a value lane carries the extent in one
10
+ // and a pinned 0.3 is then a hair under the 0.3 it read
11
+ const below = lo < min && Math.fround(lo) < Math.fround(min);
12
+ const above = hi > max && Math.fround(hi) > Math.fround(max);
13
+ return {
14
+ label: lone ? (title ?? '') : '',
15
+ gradient: {
16
+ stops,
17
+ minLabel: `${below ? '≤' : ''}${format(min)}`,
18
+ maxLabel: `${above ? '≥' : ''}${format(max)}`,
19
+ },
20
+ };
21
+ }
22
+ function sectionOf(scale, lone) {
23
+ if (scale.kind !== 'categorical') {
24
+ return { id: scale.id, title: scale.title, items: [rampItem(scale, lone)] };
25
+ }
26
+ // A key a display ordered itself keeps that order, rows it lists after the
27
+ // no-value row included.
28
+ const compare = scale.domain?.length
29
+ ? groupKeyComparator(scale.domain)
30
+ : undefined;
31
+ const items = compare
32
+ ? scale.entries.toSorted((a, b) => missingRowLast(a, b) || compare(a.value, b.value))
33
+ : scale.entries;
34
+ return {
35
+ id: scale.id,
36
+ title: scale.title,
37
+ note: scale.note,
38
+ items,
39
+ focusesRows: scale.focusesRows,
40
+ };
41
+ }
42
+ /**
43
+ * The one derivation of a legend from a display's color scales: a section per
44
+ * scale, in the order declared. On screen `FloatingLegend` renders the result
45
+ * and the export flattens it through `legendEntries`, so the two cannot
46
+ * describe different colors.
47
+ *
48
+ * A lone scale names itself: section titles draw only beside other sections,
49
+ * so a lone categorical scale's title becomes the box's (a field's name over
50
+ * its values) and a lone ramp's goes on its row. Empty scales are
51
+ * dropped first, so one waiting for data does not leave its sibling untitled.
52
+ */
53
+ export function legendSpecOf(scales) {
54
+ const drawn = scales.filter(scale => !colorScaleIsEmpty(scale));
55
+ const lone = drawn.length === 1 ? drawn[0] : undefined;
56
+ return {
57
+ title: lone?.kind === 'categorical' ? lone.title : undefined,
58
+ sections: drawn.map(scale => sectionOf(scale, lone !== undefined)),
59
+ };
60
+ }
61
+ /**
62
+ * The no-value row goes after every value a `domain` orders: the domain never
63
+ * lists it, so ordering by the domain alone ranks it with the values the
64
+ * domain leaves out.
65
+ */
66
+ export function missingRowLast(a, b) {
67
+ return Number(a.missing ?? false) - Number(b.missing ?? false);
68
+ }
69
+ /** Whether a scale has anything for a key to show. */
70
+ export function colorScaleIsEmpty(scale) {
71
+ return scale.kind === 'categorical' && scale.entries.length === 0;
72
+ }
@@ -29,8 +29,67 @@ export declare const paletteColors: {
29
29
  * Past the end is the caller's problem, and the two callers answer differently
30
30
  * on purpose: an attribute palette-by hashes the VALUE (stable across
31
31
  * re-palettes), while a by-position painter has no value to hash and wraps.
32
+ *
33
+ * **It holds 14 pairs `similarColors` calls the same** — five schemes' blues,
34
+ * oranges, greens, reds and pinks — and deduping it at construction is the
35
+ * wrong reading of that, measured on the 38 GENCODE gene biotypes. Hashed,
36
+ * which is what a track with no `colorDomain` does, 30 of them land on 22
37
+ * colors and 38 on 26; the loss is the birthday collision on 40 slots, not the
38
+ * near-twins, and only 3 of the pairs they land on read alike. Pruning to the
39
+ * 30 distinct entries makes that 23 and 24, so it costs ten colors and buys
40
+ * nothing.
41
+ *
42
+ * The near-twins bite the PINNED case instead, where a `domain` spends the
43
+ * list in order: 30 listed values take 30 colors today and 7 of those pairs
44
+ * read alike. Ordering the distinct 30 first and the twins behind them fixes
45
+ * that outright (0 pairs at 30 listed values, 11 at 38 where the twins are
46
+ * reached anyway) and costs no colors — but it moves every hashed color in
47
+ * marks, GWAS, canvas, multi-row and the arrangement dialog, so it is a pass
48
+ * with a figure refresh in it.
32
49
  */
33
50
  export declare const categoricalPalette: string[];
51
+ /**
52
+ * The palette color a categorical value paints, derived from the value rather
53
+ * than from the order it was met: values stream in as regions load, and a
54
+ * discovery-order slot would let one region paint `chr2` blue and the next
55
+ * paint it pink. A non-negative integer takes the slot it names, anchored at
56
+ * 1, so `1`, `2`, `3` walk the palette in order and stay distinct; anything
57
+ * else hashes in, stable for the same reason at the cost of an occasional
58
+ * collision. `categoricalScale` is the same rule with a domain.
59
+ */
60
+ export declare function categoricalValueColor(value: string): string;
61
+ export declare function categoricalValueColor<T>(value: string, palette: readonly T[]): T;
62
+ /**
63
+ * The categorical rule every scaled channel resolves through. With no
64
+ * `domain` a value takes `categoricalValueColor`'s slot in `range`. With one,
65
+ * the listed values take `range` in order, continuing into the `fallback`
66
+ * entries `range` lacks past its end, and any other value takes a slot of the
67
+ * whole list derived from itself that no listed value holds, nor one
68
+ * `isNear` calls the same. A value's entry depends only on the value and the
69
+ * declaration, so every region agrees on it, and adding a listed value moves
70
+ * only the unlisted values on the slots it takes.
71
+ */
72
+ export declare function categoricalScale<T>(domain: readonly (string | number)[] | undefined, range: readonly T[], { fallback, isNear, }?: {
73
+ fallback?: readonly T[];
74
+ isNear?: (a: T, b: T) => boolean;
75
+ }): (value: string) => T;
76
+ /**
77
+ * Whether two CSS colors read as one: under 0.05 apart in OKLab, where the
78
+ * wide palette's tableau and category10 oranges sit 0.003 apart.
79
+ */
80
+ export declare function similarColors(a: string, b: string): boolean;
81
+ /**
82
+ * `categoricalScale` for a color channel: `palette` (the wide palette when
83
+ * empty) spent in `domain` order and continued into the wide palette, and an
84
+ * unlisted value never on a listed value's color or one that reads the same.
85
+ */
86
+ export declare function categoricalColorScale(domain: readonly (string | number)[] | undefined, palette?: readonly string[]): (value: string) => string;
87
+ /**
88
+ * The color one value of a categorical color channel paints, by
89
+ * `categoricalColorScale`. A value-less feature is neutral grey, and an array
90
+ * value joins the way a group key does.
91
+ */
92
+ export declare function categoricalColor(value: unknown, domain?: readonly string[], palette?: readonly string[]): string;
34
93
  /**
35
94
  * Deterministic non-negative 32-bit hash of a string.
36
95
  */
@@ -60,4 +119,9 @@ export declare function refNamePaletteColorAt(position: number): string;
60
119
  * it falls back to the hash.
61
120
  */
62
121
  export declare function refNameColor(name: string, position: number | undefined): string;
122
+ /**
123
+ * A palette named in `namedPalettes`, or a comma-separated list of CSS
124
+ * colours; undefined, with a warning, for anything else.
125
+ */
126
+ export declare function paletteFromSpec(spec: unknown): readonly string[] | undefined;
63
127
  export { category10, set1 };