@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,29 +1,143 @@
1
1
  import type { FileLocation } from '../util/types/index.ts';
2
+ import type { IsAny } from '../util/types/isAny.ts';
2
3
  import type { ConfigurationSchemaDefinition, ConfigurationSchemaOptions, ConfigurationSchemaType } from './configurationSchema.ts';
3
4
  import type { BuiltinSlotTypeName } from './configurationSlot.ts';
4
- import type { ISimpleType, IStateTreeNode, Instance, SnapshotOut } from '@jbrowse/mobx-state-tree';
5
- export type GetOptions<SCHEMA> = SCHEMA extends ConfigurationSchemaType<any, infer OPTIONS> ? OPTIONS : never;
6
- export type GetBase<SCHEMA> = SCHEMA extends undefined ? never : GetOptions<SCHEMA> extends ConfigurationSchemaOptions<undefined, any> ? undefined : GetOptions<SCHEMA> extends ConfigurationSchemaOptions<infer BASE extends AnyConfigurationSchemaType, any> ? BASE : never;
7
- export type GetExplicitIdentifier<SCHEMA> = GetOptions<SCHEMA> extends ConfigurationSchemaOptions<any, infer EXPLICIT_IDENTIFIER extends string> ? EXPLICIT_IDENTIFIER : never;
8
- /**
9
- * The identifier prop a schema declares **or inherits** — `trackId`,
10
- * `displayId`, or whatever `explicitIdentifier` names. Recursive because most
11
- * display schemas never declare it themselves: they pick up `displayId` from
12
- * `baseConfiguration: baseLinearDisplayConfigSchema`, whose options
13
- * `preprocessConfigurationSchemaArguments` merges in at runtime, leaving the
14
- * subclass's own `EXPLICIT_IDENTIFIER` param `undefined`. Same walk
15
- * `ConfigurationSlotName` does for inherited slot names.
16
- */
17
- export type GetInheritedIdentifier<SCHEMA> = SCHEMA extends undefined ? never : SCHEMA extends ConfigurationSchemaType<any, any> ? GetExplicitIdentifier<SCHEMA> | (GetBase<SCHEMA> extends ConfigurationSchemaType<any, any> ? GetInheritedIdentifier<GetBase<SCHEMA>> : never) : never;
18
- export type ConfigurationSchemaForModel<MODEL> = MODEL extends IStateTreeNode<infer SCHEMA extends AnyConfigurationSchemaType> ? SCHEMA : never;
19
- export type ConfigurationSlotName<SCHEMA> = SCHEMA extends undefined ? never : SCHEMA extends ConfigurationSchemaType<infer D, any> ? (keyof D & string) | GetExplicitIdentifier<SCHEMA> | (GetBase<SCHEMA> extends ConfigurationSchemaType<any, any> ? ConfigurationSlotName<GetBase<SCHEMA>> : never) : never;
5
+ import type { IAnyType, IArrayType, IOptionalIType, ISimpleType, IStateTreeNode, Instance, SnapshotOut } from '@jbrowse/mobx-state-tree';
6
+ export type ConfigurationSchemaForModel<MODEL> = IsAny<MODEL> extends true ? AnyConfigurationSchemaType : MODEL extends IStateTreeNode<infer T> ? T extends AnyConfigurationSchemaType ? T : T extends IOptionalIType<infer INNER extends AnyConfigurationSchemaType, any> ? INNER : AnyConfigurationSchemaType : never;
7
+ /**
8
+ * A schema's definition as **stored**: the author's own entries over the ones
9
+ * its `baseConfiguration` contributed, the type-level twin of
10
+ * `mergeSchemaDefinition`. The base arrives already merged with its own base,
11
+ * so one level here covers a chain of any depth.
12
+ *
13
+ * A flat mapped type over the union of both key sets, not
14
+ * `Omit<BASE, keyof D> & D`: an intersection's `keyof` is a union of key sets,
15
+ * and mapping over a union that includes `string` — which
16
+ * `ConfigurationSchemaDefinition`'s index signature contributes — collapses
17
+ * back to an index signature, which is the thing `ConfigNodeProps` exists to
18
+ * get rid of.
19
+ */
20
+ export type MergeConfigDef<D, BASE> = BASE extends ConfigurationSchemaType<infer BD, any> ? {
21
+ [K in keyof BD | keyof D]: NormalizeSlotDef<K extends keyof D ? K extends keyof BD ? MergeSlotDef<BD[K], D[K]> : D[K] : K extends keyof BD ? BD[K] : never>;
22
+ } : {
23
+ [K in keyof D]: NormalizeSlotDef<D[K]>;
24
+ };
25
+ /**
26
+ * A redeclared slot merges field-by-field over the base's; a sub-schema or a
27
+ * constant keeps replace semantics, matching `mergeSchemaDefinition`'s
28
+ * `isSlotDefinitionEntry` guard.
29
+ */
30
+ type MergeSlotDef<BASE_ENTRY, ENTRY> = BASE_ENTRY extends {
31
+ type: string;
32
+ } ? ENTRY extends {
33
+ type: string;
34
+ } ? Omit<BASE_ENTRY, keyof ENTRY> & ENTRY : ENTRY : ENTRY;
35
+ /**
36
+ * What the type level reads off a slot definition: the slot's `type`, a
37
+ * `stringEnum`'s `model`, and whether a `defaultValue` is there at all — widened
38
+ * off its literal. The description, `advanced`, `contextVariable` and the
39
+ * literal default are documentation and runtime, and carrying them makes two
40
+ * schemas that differ only in one of them mutually unassignable: a subclass
41
+ * raising `height` from 100 to 250 stopped satisfying a parameter pinned to its
42
+ * base. `SlotValueRawFromDef` re-widens a scalar default anyway, and reaches
43
+ * `any` for everything else, so nothing downstream loses precision.
44
+ */
45
+ type NormalizeSlotDef<E> = E extends AnyConfigurationSchemaType ? E : E extends {
46
+ type: infer T;
47
+ } ? {
48
+ type: T;
49
+ } & (E extends {
50
+ model: infer M;
51
+ } ? {
52
+ model: M;
53
+ } : unknown) & (E extends {
54
+ defaultValue: infer V;
55
+ } ? {
56
+ defaultValue: WidenDefaultValue<V>;
57
+ } : unknown) : E;
58
+ type WidenDefaultValue<V> = [V] extends [boolean] ? boolean : [V] extends [string] ? string : [V] extends [number] ? number : unknown;
59
+ type ConfigNodeValue<DEF> = IsAny<DEF> extends true ? any : DEF extends AnyConfigurationSchemaType ? DEF['Type'] : DEF extends IArrayType<any> | IOptionalIType<IArrayType<any>, any> ? DEF['Type'] : DEF extends string ? string : DEF extends number ? number : SlotValueRawFromDef<DEF>;
60
+ /**
61
+ * The slots a config node presents, read off the schema's own DEFINITION rather
62
+ * than the `Record<string, any>` `makeConfigurationSchemaModel` assembles its
63
+ * MST props from. Those props carry an index signature, so every
64
+ * `node.anything` resolves to `any`; mapping the definition instead is what
65
+ * makes `node.colorr` a compile error.
66
+ *
67
+ * A plain mapped type, and it has to stay one. Wrapping it in a conditional —
68
+ * to answer early for a widened definition, say — makes TypeScript measure
69
+ * DEFINITION as covariant instead of invariant, and it refuses a failed
70
+ * covariant check on a type argument outright where a failed invariant one
71
+ * falls back to comparing the two schemas structurally. Structural is the
72
+ * comparison that matters: a subclass schema's node has every slot the base's
73
+ * does, while its *definition* restates `defaultValue` and `description` and so
74
+ * matches nothing. The widened case belongs on `AnyConfigurationModel`.
75
+ */
76
+ export type ConfigNodeProps<DEFINITION> = {
77
+ [K in keyof DEFINITION]: ConfigNodeValue<DEFINITION[K]>;
78
+ };
79
+ /**
80
+ * The two write actions every config node carries, which `setConf` is the
81
+ * spelling of. A type alias rather than an interface because it annotates the
82
+ * `.actions` block: MST constrains that to `ModelActions`, an index signature
83
+ * of functions, and only a type alias of an object literal gets the implicit
84
+ * index signature that satisfies it.
85
+ */
86
+ export type ConfigNodeActions = {
87
+ setSubschema: (slotName: string, data: unknown) => unknown;
88
+ setSlot: (slotName: string, value: unknown) => void;
89
+ };
90
+ /**
91
+ * MST's node brand, restated. A config node carries its own schema here by
92
+ * polymorphic `this`, and `ConfigurationSchemaForModel` walks it back out —
93
+ * which is what every `getConf` / `readConfObject` / `setConf` slot-name
94
+ * constraint hangs off, so losing it switches the read-side check off with no
95
+ * error anywhere. `scripts/audit-config-read-types.ts` is the only thing that
96
+ * reports that; run it after touching this.
97
+ *
98
+ * Structurally identical to `IStateTreeNode<IT>`, but an alias rather than an
99
+ * interface: TypeScript infers an implicit index signature for an intersection
100
+ * only when every constituent is an alias or a mapped type, and that is what
101
+ * leaves a concrete config node — whose props are a mapped type with no index
102
+ * signature of its own — assignable to `AnyConfigurationModel`.
103
+ */
104
+ export type ConfigNodeBrand<IT extends IAnyType> = {
105
+ readonly $treenode?: any;
106
+ readonly $__mstStateTreeNodeType__?: [IT] | [any];
107
+ };
108
+ /**
109
+ * The identifier a schema's `explicitIdentifier` installs, folded into the
110
+ * definition as if it were a declared string slot — which is what it is at
111
+ * runtime, `makeConfigurationSchemaModel` just builds it from the options rather
112
+ * than from the table. Folding it in rather than intersecting it onto `Type`
113
+ * keeps it out of `ConfigurationSchemaType`'s parameter list: as a parameter it
114
+ * reads as invariant (it lands in a `Record<K, …>` key position), which stops a
115
+ * concrete schema widening to `AnyConfigurationSchemaType`. Inheritance comes
116
+ * free, since `MergeConfigDef` already folds the base's whole definition in.
117
+ */
118
+ export interface IdentifierSlotDef {
119
+ type: 'string';
120
+ defaultValue: '';
121
+ }
122
+ /**
123
+ * The `type` prop an `explicitlyTyped` schema installs, folded into the
124
+ * definition the same way and for the same reasons. Separate from
125
+ * `IdentifierSlotDef` despite the identical shape, because the runtime prop is
126
+ * `types.literal(modelName)` and this is where that would be said if the model
127
+ * name ever became a type parameter.
128
+ */
129
+ export interface TypeSlotDef {
130
+ type: 'string';
131
+ defaultValue: '';
132
+ }
133
+ export type ConfigurationSlotName<SCHEMA> = IsAny<SCHEMA> extends true ? string : SCHEMA extends ConfigurationSchemaType<infer D, any> ? keyof D & string : never;
20
134
  /**
21
135
  * The names a config snapshot for `SCHEMA` may use — its own slots, its
22
136
  * sub-schemas recursively, its identifier and everything it inherits — with
23
137
  * every value left `unknown`.
24
138
  *
25
139
  * Names are the whole point of it. A slot value can be its own type, a `jexl:`
26
- * callback string, or (for a promotable slot) absent, and nothing here tries to
140
+ * callback string, or (for a `maybe*` slot) absent, and nothing here tries to
27
141
  * check that; a *name* the schema does not declare is dropped on the way in
28
142
  * without a word, so `preferance` is a setting that reads as applied and never
29
143
  * applies. Against an object literal — which is how an embedder writes one —
@@ -31,14 +145,7 @@ export type ConfigurationSlotName<SCHEMA> = SCHEMA extends undefined ? never : S
31
145
  */
32
146
  export type ConfigurationSnapshot<SCHEMA> = SCHEMA extends undefined ? never : SCHEMA extends ConfigurationSchemaType<infer D, any> ? {
33
147
  [K in keyof D]?: D[K] extends ConfigurationSchemaType<any, any> ? ConfigurationSnapshot<D[K]> : unknown;
34
- } & {
35
- [K in GetExplicitIdentifier<SCHEMA>]?: string;
36
- } & (GetBase<SCHEMA> extends ConfigurationSchemaType<any, any> ? ConfigurationSnapshot<GetBase<SCHEMA>> : unknown) : unknown;
37
- type SlotValueResolvedFromDef<DEF> = DEF extends {
38
- promotedBase: undefined;
39
- } ? SlotValueRawFromDef<DEF> : DEF extends {
40
- promotedBase: unknown;
41
- } ? Exclude<SlotValueRawFromDef<DEF>, undefined> : SlotValueRawFromDef<DEF>;
148
+ } : unknown;
42
149
  /**
43
150
  * The value each builtin slot `type` reads as — the type-level twin of
44
151
  * `slotTypes` in `configurationSlot.ts`, which is the same list as MST models.
@@ -54,21 +161,24 @@ type SlotValueResolvedFromDef<DEF> = DEF extends {
54
161
  */
55
162
  interface SlotValueByType {
56
163
  stringArray: string[];
164
+ expressionArray: string[];
57
165
  stringArrayMap: Record<string, string[]>;
58
166
  numberMap: Record<string, number>;
167
+ stringMap: Record<string, string>;
59
168
  fileLocation: FileLocation;
169
+ maybeFileLocation: FileLocation | undefined;
60
170
  maybeNumber: number | undefined;
61
171
  maybeBoolean: boolean | undefined;
62
172
  maybeColor: string | undefined;
173
+ maybeString: string | undefined;
63
174
  /**
64
175
  * `frozen` and its `maybe*` form are `any` deliberately — arbitrary dynamic
65
176
  * JSON whose shape the caller asserts at the read boundary. `unknown` would
66
177
  * only add cast ceremony on values that are legitimately dynamic.
67
178
  *
68
179
  * Stated here rather than left to the `defaultValue` fallback, which reaches
69
- * `any` for these only by accident: it lands there because no `frozen` slot in
70
- * the repo happens to default to a scalar, and a promotable slot's default is
71
- * always the `undefined` sentinel.
180
+ * `any` for these only by accident: no `frozen` slot in the repo happens to
181
+ * default to a scalar.
72
182
  */
73
183
  frozen: any;
74
184
  maybeFrozen: any;
@@ -77,7 +187,9 @@ interface SlotValueByType {
77
187
  boolean: boolean;
78
188
  string: string;
79
189
  text: string;
190
+ featureField: string;
80
191
  color: string;
192
+ colorArray: string[];
81
193
  }
82
194
  /**
83
195
  * The two tables name the same builtin slot types, checked rather than
@@ -99,18 +211,37 @@ type SlotValueRawFromDef<DEF> = DEF extends AnyConfigurationSchemaType ? AnyConf
99
211
  model: ISimpleType<infer T extends string>;
100
212
  } ? DEF extends {
101
213
  type: 'maybeStringEnum';
102
- } ? T | undefined : T : DEF extends {
214
+ } ? T | undefined : DEF extends {
215
+ type: 'stringEnumArray';
216
+ } ? T[] : T : DEF extends {
103
217
  type: infer T extends keyof SlotValueByType;
104
218
  } ? SlotValueByType[T] : DEF extends {
105
219
  defaultValue: infer V;
106
220
  } ? [V] extends [boolean] ? boolean : [V] extends [string] ? string : [V] extends [number] ? number : any : any;
107
- /** what a raw read (`getConf` / `readConfObject`) of this slot yields */
108
- export type ConfigurationSlotValue<SCHEMA, K extends string> = SCHEMA extends ConfigurationSchemaType<infer D, any> ? K extends keyof D ? SlotValueRawFromDef<D[K]> : GetBase<SCHEMA> extends ConfigurationSchemaType<any, any> ? ConfigurationSlotValue<GetBase<SCHEMA>, K> : any : any;
221
+ type SubSchemaOf<SCHEMA, K> = IsAny<SCHEMA> extends true ? any : SCHEMA extends ConfigurationSchemaType<infer D, any> ? K extends keyof D ? D[K] : never : never;
222
+ type SubSchemaSlotPath<SCHEMA> = SCHEMA extends ConfigurationSchemaType<infer D, any> ? IsAny<D> extends true ? readonly string[] : {
223
+ [K in keyof D & string]: D[K] extends AnyConfigurationSchemaType ? readonly [K, ConfigurationSlotName<D[K]>] | readonly [K, ...SubSchemaSlotPath<D[K]>] : D[K] extends IAnyType | {
224
+ type: 'frozen' | 'maybeFrozen';
225
+ } ? readonly [K, ...string[]] : never;
226
+ }[keyof D & string] : readonly string[];
109
227
  /**
110
- * what `resolveConf` yields: the same, minus the inherit sentinel on a
111
- * promotable slot — the cascade always produces a real value.
228
+ * The array paths a read may take into `SCHEMA`. Past one segment each is
229
+ * checked: a sub-schema's name, then one of its slot names or a deeper path. A
230
+ * head naming something other than a sub-schema — a pluggable adapter union, an
231
+ * array or map of sub-schemas, a `frozen` slot — keeps an unchecked tail, and a
232
+ * widened schema admits any `string[]`.
233
+ *
234
+ * A one-segment path stays unchecked: it is how a generic class body, where
235
+ * `SCHEMA` is unresolved, reads a slot at all (`FastaAdapterBase`).
112
236
  */
113
- export type ConfigurationSlotValueResolved<SCHEMA, K extends string> = SCHEMA extends ConfigurationSchemaType<infer D, any> ? K extends keyof D ? SlotValueResolvedFromDef<D[K]> : GetBase<SCHEMA> extends ConfigurationSchemaType<any, any> ? ConfigurationSlotValueResolved<GetBase<SCHEMA>, K> : any : any;
237
+ export type ConfigurationSlotPath<SCHEMA> = readonly [] | readonly [string] | SubSchemaSlotPath<SCHEMA>;
238
+ /** what a read of `PATH` into `SCHEMA` yields */
239
+ export type ConfigurationSlotPathValue<SCHEMA, PATH> = PATH extends readonly [
240
+ infer HEAD,
241
+ ...infer REST
242
+ ] ? SubSchemaOf<SCHEMA, HEAD> extends infer SUB extends AnyConfigurationSchemaType ? REST extends readonly [infer SLOT extends string] ? ConfigurationSlotValue<SUB, SLOT> : ConfigurationSlotPathValue<SUB, REST> : any : any;
243
+ /** what a raw read (`getConf` / `readConfObject`) of this slot yields */
244
+ export type ConfigurationSlotValue<SCHEMA, K extends string> = SCHEMA extends ConfigurationSchemaType<infer D, any> ? K extends keyof D ? SlotValueRawFromDef<D[K]> : any : any;
114
245
  /**
115
246
  * Naming convention for config types, paired per schema:
116
247
  * - `XConfigSchema` is the MST IType (the schema itself). Use it for
@@ -125,7 +256,15 @@ export type ConfigurationSlotValueResolved<SCHEMA, K extends string> = SCHEMA ex
125
256
  * model-or-snapshot union, not a plain instance).
126
257
  */
127
258
  export type AnyConfigurationSchemaType = ConfigurationSchemaType<any, any>;
128
- export type AnyConfigurationModel = Instance<AnyConfigurationSchemaType>;
259
+ export type AnyConfigurationModel = Instance<AnyConfigurationSchemaType> & Record<string, any>;
260
+ /**
261
+ * A node of a pluggable element union — a track's, a display's, an adapter's —
262
+ * whichever member it is, naming its `type`. An interface rather than an
263
+ * intersection so a generated doc prints the name.
264
+ */
265
+ export interface PluggableConfigNode extends AnyConfigurationModel {
266
+ type: string;
267
+ }
129
268
  /**
130
269
  * The `XConfigModel` for a **field table** — a `*ConfigSchemaFields` export —
131
270
  * rather than for a whole assembled schema. What it is for is the cast a
@@ -144,7 +283,7 @@ export type AnyConfigurationModel = Instance<AnyConfigurationSchemaType>;
144
283
  * `RowHeightMixin` + `rowHeightConfigSchemaFields` is the worked example, and
145
284
  * `packages/tree-sidebar/CLAUDE.md` has the reasoning.
146
285
  */
147
- export type ConfigModelForFields<FIELDS extends ConfigurationSchemaDefinition, BASE extends AnyConfigurationSchemaType | undefined = undefined> = Instance<ConfigurationSchemaType<FIELDS, ConfigurationSchemaOptions<BASE, undefined>>>;
286
+ export type ConfigModelForFields<FIELDS extends ConfigurationSchemaDefinition, BASE extends AnyConfigurationSchemaType | undefined = undefined> = Instance<ConfigurationSchemaType<MergeConfigDef<FIELDS, BASE>, ConfigurationSchemaOptions<BASE, undefined>>>;
148
287
  /**
149
288
  * `true` when HOST's `configuration` still narrows slot names, `false` when it
150
289
  * has widened them back to `string`. One line per mixin pins it:
@@ -154,8 +293,7 @@ export type ConfigModelForFields<FIELDS extends ConfigurationSchemaDefinition, B
154
293
  * ```
155
294
  *
156
295
  * Worth a named type because the widened form has **no symptom** — a mixin host
157
- * cast to `AnyConfigurationModel`, or to the `ResolvableDisplay & { … }`
158
- * intersection that re-widens, compiles and runs and checks nothing. Every
296
+ * cast to `AnyConfigurationModel` compiles and runs and checks nothing. Every
159
297
  * misspelled slot name below it typechecks, and a misspelled *read* returns
160
298
  * `undefined` with no diagnostic at any layer, so only a sabotage or this
161
299
  * assertion tells the two apart.
@@ -167,11 +305,12 @@ export type HostChecksSlotNames<HOST extends {
167
305
  export type AnyConfigurationSnapshot = SnapshotOut<AnyConfigurationModel>;
168
306
  /**
169
307
  * A value readable as configuration: either a live configuration model or a
170
- * plain snapshot of one. `session.tracks` legitimately holds a mix (live
171
- * `sessionTracks` nodes, plus plain frozen/merged base entries that hydrate to
172
- * MST only on first reference access), and `readConfObject` reads both — so this
173
- * is the honest type at those boundaries. Reserve `AnyConfigurationModel` for
174
- * values that must be live (actions, identity, reference resolution).
308
+ * plain snapshot of one. `session.tracks` holds plain base or merged configs
309
+ * that hydrate to MST only on first reference access, `getTrackById` also
310
+ * answers live assembly-sequence and connection nodes, and `readConfObject`
311
+ * reads both — so this is the honest type at those boundaries. Reserve
312
+ * `AnyConfigurationModel` for values that must be live (actions, identity,
313
+ * reference resolution).
175
314
  */
176
315
  export type AnyConfiguration = AnyConfigurationModel | AnyConfigurationSnapshot;
177
316
  export {};
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Expand a one-file adapter's `{ uri }` shorthand into the single location slot
3
+ * it declares, or pass a snapshot already in full form through untouched.
4
+ *
5
+ * `locationKey` is the only thing that differs between the twenty-odd adapters
6
+ * reading one file (`bedLocation`, `bigWigLocation`, `hicLocation`,
7
+ * `pafLocation`, …). `expandTabixShorthand` is the indexed families' version.
8
+ */
9
+ export declare function expandUriShorthand(snap: Record<string, unknown>, locationKey: string): Record<string, unknown>;
@@ -0,0 +1,16 @@
1
+ import { fillLocations } from './fillLocations.js';
2
+ /**
3
+ * Expand a one-file adapter's `{ uri }` shorthand into the single location slot
4
+ * it declares, or pass a snapshot already in full form through untouched.
5
+ *
6
+ * `locationKey` is the only thing that differs between the twenty-odd adapters
7
+ * reading one file (`bedLocation`, `bigWigLocation`, `hicLocation`,
8
+ * `pafLocation`, …). `expandTabixShorthand` is the indexed families' version.
9
+ */
10
+ export function expandUriShorthand(snap, locationKey) {
11
+ return snap.uri
12
+ ? fillLocations(snap, {
13
+ [locationKey]: { uri: snap.uri, baseUri: snap.baseUri },
14
+ })
15
+ : snap;
16
+ }
@@ -1,30 +1,24 @@
1
1
  import type PluginManager from '../../PluginManager.ts';
2
- import type { AnyConfigurationModel, ConfigurationSchemaForModel, ConfigurationSlotName, ConfigurationSlotValue } from '../../configuration/index.ts';
2
+ import type { AnyConfigurationModel, ConfigurationSchemaForModel, ConfigurationSlotName, ConfigurationSlotPath, ConfigurationSlotPathValue, ConfigurationSlotValue } from '../../configuration/index.ts';
3
3
  import type { getSubAdapterType } from '../dataAdapterCache.ts';
4
4
  export declare class BaseAdapter<CONF extends AnyConfigurationModel = AnyConfigurationModel> {
5
5
  id: string;
6
6
  config: CONF;
7
7
  getSubAdapter?: getSubAdapterType;
8
8
  pluginManager?: PluginManager;
9
- sequenceAdapterConfig?: Record<string, unknown>;
10
- static capabilities: string[];
11
- constructor(config?: CONF, getSubAdapter?: getSubAdapterType, pluginManager?: PluginManager);
12
9
  /**
13
- * Stashes the reference-sequence adapter config for adapters that decode
14
- * against the reference (e.g. BAM/CRAM). Set once and never cleared: the
15
- * adapter is cached per adapterConfig (dataAdapterCache), so a given instance
16
- * maps to a single, stable sequence adapter, and an `undefined` from a later
17
- * caller must not wipe a config an earlier one already primed. One `??=` does
18
- * both; callers don't need to guard.
19
- *
20
- * **Instance state rather than a per-call argument, and that is forced.**
21
- * `CramAdapter` binds its `seqFetch` into the `IndexedCramFile` at
22
- * construction, and @gmod/cram invokes it later with `(seqId, start, end)` and
23
- * nothing else — there is no call to thread a config through. Threading it per
24
- * call is the recurring proposal here and it dies at CRAM, which is the
25
- * adapter that needs the reference most.
10
+ * The reference sequence this instance reads, as the adapter config of the
11
+ * assembly the request that built it named. Part of the instance's identity:
12
+ * dataAdapterCache keys a {@link READS_REFERENCE} adapter on its config AND
13
+ * this, so one BAM shown on two genomes is two instances, each reading its
14
+ * own. Undefined when the building request named no genome, and a reference
15
+ * read then throws rather than guessing. Instance state rather than a
16
+ * per-call argument because `CramAdapter` binds its reference fetch into the
17
+ * `IndexedCramFile` at construction, inside @gmod/cram's slice cache.
26
18
  */
27
- setSequenceAdapterConfig(config: Record<string, unknown> | undefined): void;
19
+ readonly sequenceAdapterConfig?: Record<string, unknown>;
20
+ static capabilities: string[];
21
+ constructor(config?: CONF, getSubAdapter?: getSubAdapterType, pluginManager?: PluginManager, sequenceAdapterConfig?: Record<string, unknown>);
28
22
  /** shorthand for `readConfObject(this.config, arg)` */
29
- getConf<SLOT extends ConfigurationSlotName<ConfigurationSchemaForModel<CONF>> | string[] = ConfigurationSlotName<ConfigurationSchemaForModel<CONF>>>(arg: SLOT, args?: Record<string, unknown>): SLOT extends string ? ConfigurationSlotValue<ConfigurationSchemaForModel<CONF>, SLOT> : any;
23
+ getConf<const SLOT extends ConfigurationSlotName<ConfigurationSchemaForModel<CONF>> | ConfigurationSlotPath<ConfigurationSchemaForModel<CONF>> = ConfigurationSlotName<ConfigurationSchemaForModel<CONF>>>(arg: SLOT, args?: Record<string, unknown>): SLOT extends string ? ConfigurationSlotValue<ConfigurationSchemaForModel<CONF>, SLOT> : ConfigurationSlotPathValue<ConfigurationSchemaForModel<CONF>, SLOT>;
30
24
  }
@@ -6,32 +6,25 @@ export class BaseAdapter {
6
6
  config;
7
7
  getSubAdapter;
8
8
  pluginManager;
9
+ /**
10
+ * The reference sequence this instance reads, as the adapter config of the
11
+ * assembly the request that built it named. Part of the instance's identity:
12
+ * dataAdapterCache keys a {@link READS_REFERENCE} adapter on its config AND
13
+ * this, so one BAM shown on two genomes is two instances, each reading its
14
+ * own. Undefined when the building request named no genome, and a reference
15
+ * read then throws rather than guessing. Instance state rather than a
16
+ * per-call argument because `CramAdapter` binds its reference fetch into the
17
+ * `IndexedCramFile` at construction, inside @gmod/cram's slice cache.
18
+ */
9
19
  sequenceAdapterConfig;
10
20
  static capabilities = [];
11
- constructor(config = EmptyConfig.create(), getSubAdapter, pluginManager) {
21
+ constructor(config = EmptyConfig.create(), getSubAdapter, pluginManager, sequenceAdapterConfig) {
12
22
  this.config = config;
13
23
  this.getSubAdapter = getSubAdapter;
14
24
  this.pluginManager = pluginManager;
25
+ this.sequenceAdapterConfig = sequenceAdapterConfig;
15
26
  this.id = getAdapterId(config);
16
27
  }
17
- /**
18
- * Stashes the reference-sequence adapter config for adapters that decode
19
- * against the reference (e.g. BAM/CRAM). Set once and never cleared: the
20
- * adapter is cached per adapterConfig (dataAdapterCache), so a given instance
21
- * maps to a single, stable sequence adapter, and an `undefined` from a later
22
- * caller must not wipe a config an earlier one already primed. One `??=` does
23
- * both; callers don't need to guard.
24
- *
25
- * **Instance state rather than a per-call argument, and that is forced.**
26
- * `CramAdapter` binds its `seqFetch` into the `IndexedCramFile` at
27
- * construction, and @gmod/cram invokes it later with `(seqId, start, end)` and
28
- * nothing else — there is no call to thread a config through. Threading it per
29
- * call is the recurring proposal here and it dies at CRAM, which is the
30
- * adapter that needs the reference most.
31
- */
32
- setSequenceAdapterConfig(config) {
33
- this.sequenceAdapterConfig ??= config;
34
- }
35
28
  /** shorthand for `readConfObject(this.config, arg)` */
36
29
  getConf(arg, args) {
37
30
  return readConfObject(this.config, arg, args);
@@ -1,8 +1,10 @@
1
1
  import { BaseAdapter } from './BaseAdapter.ts';
2
2
  import type { AnyConfigurationModel } from '../../configuration/index.ts';
3
+ import type { FeatureTable } from '../../util/featureTable.ts';
3
4
  import type { Feature } from '../../util/simpleFeature.ts';
4
5
  import type { AugmentedRegion as Region } from '../../util/types/index.ts';
5
- import type { BaseOptions } from './types.ts';
6
+ import type { FeatureDensity } from './featureDensity.ts';
7
+ import type { BaseOptions, ZoomRange } from './types.ts';
6
8
  import type { Observable } from 'rxjs';
7
9
  /**
8
10
  * Base class for feature adapters to extend. Defines some methods that
@@ -75,11 +77,18 @@ export declare abstract class BaseFeatureDataAdapter<CONF extends AnyConfigurati
75
77
  /**
76
78
  * Convenience wrapper that collects {@link getFeatures} for a region into an
77
79
  * array — the common shape across RPC methods (RenderFeatureData, Manhattan,
78
- * Wiggle, etc.). Pass `opts` so `statusCallback`/`stopToken` reach the
80
+ * Wiggle, etc.). Pass `opts` so `statusCallback`/`signal` reach the
79
81
  * adapter; omitting them means no download progress and a fetch that can't be
80
82
  * interrupted mid-flight.
81
83
  */
82
84
  getFeaturesArray(region: Region, opts?: BaseOptions): Promise<Feature[]>;
85
+ /**
86
+ * The features overlapping a region as the table a mark's declaration runs
87
+ * over: by default a table over {@link getFeaturesArray}. An adapter that
88
+ * already holds its rows as typed arrays answers a `ColumnTable` over them
89
+ * instead, and makes no object per row.
90
+ */
91
+ getFeatureTable(region: Region, opts?: BaseOptions): Promise<FeatureTable>;
83
92
  /**
84
93
  * {@link getFeaturesArray} across multiple regions — collects
85
94
  * {@link getFeaturesInMultipleRegions} into an array. The common shape in
@@ -117,6 +126,35 @@ export declare abstract class BaseFeatureDataAdapter<CONF extends AnyConfigurati
117
126
  * agent-docs/reference/REGION_TOO_LARGE.md.
118
127
  */
119
128
  getRegionByteSize(_regions: Region[], _opts?: BaseOptions): Promise<number | undefined>;
129
+ /**
130
+ * The bp/px interval over which this adapter answers a fetch from the same
131
+ * zoom level it answers `opts.bpPerPx` from, so a display holding the answer
132
+ * refetches only when the view leaves it. The default, `undefined`, is an
133
+ * answer that does not depend on the zoom, which a display never refetches
134
+ * for a zoom. An adapter that reads `bpPerPx` declares its range here
135
+ * (`BigWigAdapter` from its header's zoom levels).
136
+ */
137
+ getZoomRange(_opts?: BaseOptions): Promise<ZoomRange | undefined>;
138
+ /**
139
+ * The interval every value this adapter answers lies in by definition, as a
140
+ * fraction lies in [0, 1], which a value scale's unpinned ends stand at
141
+ * rather than following the loaded data, so the axis reads alike at every
142
+ * locus. The default, `undefined`, is a quantity with no such bounds, whose
143
+ * axis autoscales. `GCContentAdapter` declares [0, 1] for GC content and none
144
+ * for skew.
145
+ */
146
+ getValueDomain(_opts?: BaseOptions): Promise<[number, number] | undefined>;
147
+ /**
148
+ * Features per bin over each region, at the view's `bpPerPx`, for the density
149
+ * tier the display draws where the region-too-large gate refused the
150
+ * features. The default reads the `densityAdapter` sidecar slot
151
+ * (`densityAdapterConfigSchemaFields`) through `getSubAdapter`; `undefined`
152
+ * means no tier, and the banner stands. ADR-102 records why no index
153
+ * estimate stands in for a missing sidecar.
154
+ */
155
+ getFeatureDensity(regions: Region[], opts: BaseOptions & {
156
+ bpPerPx: number;
157
+ }): Promise<FeatureDensity[] | undefined>;
120
158
  getSources(regions: Region[], opts?: BaseOptions): Promise<{
121
159
  name: string;
122
160
  color?: string;
@@ -1,9 +1,12 @@
1
1
  import { firstValueFrom, merge } from 'rxjs';
2
2
  import { toArray } from 'rxjs/operators';
3
+ import { asTable } from '../../util/featureTable.js';
3
4
  import { createStatusFanOut } from '../../util/progress.js';
4
5
  import { blankStats, scoresToStats } from '../../util/stats.js';
5
6
  import { BaseAdapter } from './BaseAdapter.js';
7
+ import { isSubAdapterConfig } from './featureDensity.js';
6
8
  import { aggregateQuantitativeStats } from './stats.js';
9
+ import { isFeatureAdapter } from './util.js';
7
10
  /**
8
11
  * Base class for feature adapters to extend. Defines some methods that
9
12
  * subclasses must implement.
@@ -47,13 +50,22 @@ export class BaseFeatureDataAdapter extends BaseAdapter {
47
50
  /**
48
51
  * Convenience wrapper that collects {@link getFeatures} for a region into an
49
52
  * array — the common shape across RPC methods (RenderFeatureData, Manhattan,
50
- * Wiggle, etc.). Pass `opts` so `statusCallback`/`stopToken` reach the
53
+ * Wiggle, etc.). Pass `opts` so `statusCallback`/`signal` reach the
51
54
  * adapter; omitting them means no download progress and a fetch that can't be
52
55
  * interrupted mid-flight.
53
56
  */
54
57
  getFeaturesArray(region, opts = {}) {
55
58
  return firstValueFrom(this.getFeatures(region, opts).pipe(toArray()));
56
59
  }
60
+ /**
61
+ * The features overlapping a region as the table a mark's declaration runs
62
+ * over: by default a table over {@link getFeaturesArray}. An adapter that
63
+ * already holds its rows as typed arrays answers a `ColumnTable` over them
64
+ * instead, and makes no object per row.
65
+ */
66
+ async getFeatureTable(region, opts = {}) {
67
+ return asTable(await this.getFeaturesArray(region, opts));
68
+ }
57
69
  /**
58
70
  * {@link getFeaturesArray} across multiple regions — collects
59
71
  * {@link getFeaturesInMultipleRegions} into an array. The common shape in
@@ -76,10 +88,7 @@ export class BaseFeatureDataAdapter extends BaseAdapter {
76
88
  * features over a region, primarily used for quantitative tracks
77
89
  */
78
90
  async getRegionQuantitativeStats(region, opts) {
79
- const feats = this.getFeatures(region, {
80
- ...opts,
81
- statsEstimationMode: true,
82
- });
91
+ const feats = this.getFeatures(region, opts);
83
92
  return scoresToStats(region, feats);
84
93
  }
85
94
  /**
@@ -110,6 +119,60 @@ export class BaseFeatureDataAdapter extends BaseAdapter {
110
119
  async getRegionByteSize(_regions, _opts) {
111
120
  return undefined;
112
121
  }
122
+ /**
123
+ * The bp/px interval over which this adapter answers a fetch from the same
124
+ * zoom level it answers `opts.bpPerPx` from, so a display holding the answer
125
+ * refetches only when the view leaves it. The default, `undefined`, is an
126
+ * answer that does not depend on the zoom, which a display never refetches
127
+ * for a zoom. An adapter that reads `bpPerPx` declares its range here
128
+ * (`BigWigAdapter` from its header's zoom levels).
129
+ */
130
+ async getZoomRange(_opts) {
131
+ return undefined;
132
+ }
133
+ /**
134
+ * The interval every value this adapter answers lies in by definition, as a
135
+ * fraction lies in [0, 1], which a value scale's unpinned ends stand at
136
+ * rather than following the loaded data, so the axis reads alike at every
137
+ * locus. The default, `undefined`, is a quantity with no such bounds, whose
138
+ * axis autoscales. `GCContentAdapter` declares [0, 1] for GC content and none
139
+ * for skew.
140
+ */
141
+ async getValueDomain(_opts) {
142
+ return undefined;
143
+ }
144
+ /**
145
+ * Features per bin over each region, at the view's `bpPerPx`, for the density
146
+ * tier the display draws where the region-too-large gate refused the
147
+ * features. The default reads the `densityAdapter` sidecar slot
148
+ * (`densityAdapterConfigSchemaFields`) through `getSubAdapter`; `undefined`
149
+ * means no tier, and the banner stands. ADR-102 records why no index
150
+ * estimate stands in for a missing sidecar.
151
+ */
152
+ async getFeatureDensity(regions, opts) {
153
+ const sidecar = this.getConf(['densityAdapter']);
154
+ const resolved = isSubAdapterConfig(sidecar) && this.getSubAdapter
155
+ ? (await this.getSubAdapter(sidecar)).dataAdapter
156
+ : undefined;
157
+ if (resolved && !isFeatureAdapter(resolved)) {
158
+ throw new Error(`densityAdapter ${isSubAdapterConfig(sidecar) ? sidecar.type : ''} is not a feature adapter`);
159
+ }
160
+ return resolved
161
+ ? Promise.all(regions.map(async (region) => {
162
+ const features = await resolved.getFeaturesArray(region, opts);
163
+ const starts = new Uint32Array(features.length);
164
+ const ends = new Uint32Array(features.length);
165
+ const scores = new Float32Array(features.length);
166
+ features.forEach((feature, i) => {
167
+ const score = feature.get('score');
168
+ starts[i] = feature.get('start');
169
+ ends[i] = feature.get('end');
170
+ scores[i] = score === undefined ? 0 : score;
171
+ });
172
+ return { starts, ends, scores };
173
+ }))
174
+ : undefined;
175
+ }
113
176
  async getSources(regions, opts = {}) {
114
177
  const features = await this.getFeaturesInMultipleRegionsArray(regions, opts);
115
178
  const sources = new Set();