@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,19 +1,28 @@
1
1
  export { ConfigurationReference, ConfigurationSchema, hydrateTrackConfig, } from './configurationSchema.js';
2
+ export { ConfigurationSchemaUnion, arraySlotUnion, } from './configurationSchemaUnion.js';
2
3
  export { getConfigurationSchemaDefinition,
3
4
  // exported for scripts/generateConfigManifest.ts, which needs the
4
5
  // preProcessSnapshot off a schema whose pluggable type does not expose one —
5
6
  // TextSearchAdapterType, where the shorthand is nonetheless the documented
6
7
  // way to write the config
7
- getConfigurationSchemaMetadata, } from './schemaRegistry.js';
8
+ getConfigurationSchemaMetadata, getConfigurationSchemaUnion, } from './schemaRegistry.js';
8
9
  export { getTypeNamesFromExplicitlyTypedUnion, isBareConfigurationSchemaType, isConfigurationModel, isConfigurationSchemaType, isConstantEntry, isSlotDefinitionEntry, } from './schemaTypes.js';
9
10
  export { FormatAboutConfigSchemaFactory } from './formatAboutConfigSchema.js';
10
11
  export { DEFAULT_FORMAT_DETAILS_DEPTH, FormatDetailsConfigSchemaFactory, } from './formatDetailsConfigSchema.js';
11
12
  export { mergeFormatCallbacks } from './mergeFormatCallbacks.js';
12
- export { readConfObject, readConfSlot, readConfigValue, } from './readConfObject.js';
13
- export { getConf, resolveConf, setConf } from './getConf.js';
14
- export { expandTabixShorthand, tabixIndexSnapshot } from './tabixShorthand.js';
15
- export { tabixIndexFields } from './tabixIndexFields.js';
13
+ export { readConfObject, readConfigValue } from './readConfObject.js';
14
+ export { applyConfSettings, getConf, setConf } from './getConf.js';
15
+ export { fillLocations } from './fillLocations.js';
16
+ export { applyRetiredSpellings, liftRetiredSpellings, preProcessConfigSnapshot, preProcessSnapshotWith, } from './snapshotPreprocess.js';
17
+ export { shorthandTargets, shorthandTargetsOf } from './schemaTypes.js';
18
+ export { requirementProblems } from './requirements.js';
19
+ export { expandTabixShorthand, indexSnapshot, requestedIndexType, tabixIndexSnapshot, } from './tabixShorthand.js';
20
+ export { expandUriShorthand } from './uriShorthand.js';
21
+ export { bamIndexFields, bamIndexSchema } from './bamIndexFields.js';
22
+ export { tabixIndexFields, tabixIndexSchema } from './tabixIndexFields.js';
23
+ export { fillIndexType, indexSuffix, isCsiLocation } from './indexType.js';
16
24
  export { evaluateJexl, isCallbackValue } from './slotValueUtils.js';
17
25
  export { toCallbackValue, toFixedValue } from './configurationSlot.js';
18
- export { getSlotDefinition, isConfigurationSlot, makeSlotFacade, preProcessSlotValues, slotChoices, } from './slotFacade.js';
19
- export { clearPromotedDefaults, getDisplayTypeDefaultChanges, isSlotCustomized, makePin, getConfigSnapshotWithPromotables, getTrackConfigWithPromotables, } from './promotableDefaults.js';
26
+ export { getSlotDefinition, isConfigurationSlot, makeSlotFacade, slotChoices, slotValueRefusal, } from './slotFacade.js';
27
+ export { fullConfSnapshot } from './fullConfSnapshot.js';
28
+ export { PLOT_VOCABULARY, liftPlot, parsePlot, plotKeysOf, plotOf, plotWrites, } from './plot.js';
@@ -0,0 +1,26 @@
1
+ /** The sibling index format of a family: TBI for tabix, BAI for BAM. */
2
+ export type SiblingIndexType = 'TBI' | 'BAI';
3
+ export type IndexType = SiblingIndexType | 'CSI';
4
+ /** The extension an index of this type carries: `CSI` → `.csi`, `TBI` → `.tbi`. */
5
+ export declare function indexSuffix(indexType: IndexType): string;
6
+ /**
7
+ * Whether a file location names a CSI. htslib writes `.csi` in place of a `.bai`
8
+ * or a `.tbi` for a reference over 512 Mb and on request at any size, so the
9
+ * extension is the only thing distinguishing the two parsers.
10
+ *
11
+ * `makeIndexType` in `util/tracks.ts` asks this of a bare filename, for the
12
+ * guessers and add-track forms that WRITE an `indexType` beside the location.
13
+ * Those stay: a config the CLI or jbrowse-img writes is read by older JBrowse
14
+ * versions, which have no inference to fall back on.
15
+ */
16
+ export declare function isCsiLocation(location: unknown): boolean;
17
+ /**
18
+ * An index sub-schema's snapshot with `indexType` filled in from the location it
19
+ * names, where it states none. Only CSI is ever filled in — the sibling format
20
+ * is the slot's own default.
21
+ *
22
+ * Belongs to the sub-schema rather than to the `uri` shorthand because it has to
23
+ * cover the paths no shorthand runs on: a long-form config, and an add-track
24
+ * form that writes a location and nothing else.
25
+ */
26
+ export declare function fillIndexType(snap: Record<string, unknown>): Record<string, unknown>;
@@ -0,0 +1,38 @@
1
+ import { isPlainObject } from '../util/objectUtils.js';
2
+ /** The extension an index of this type carries: `CSI` → `.csi`, `TBI` → `.tbi`. */
3
+ export function indexSuffix(indexType) {
4
+ return `.${indexType.toLowerCase()}`;
5
+ }
6
+ /**
7
+ * Whether a file location names a CSI. htslib writes `.csi` in place of a `.bai`
8
+ * or a `.tbi` for a reference over 512 Mb and on request at any size, so the
9
+ * extension is the only thing distinguishing the two parsers.
10
+ *
11
+ * `makeIndexType` in `util/tracks.ts` asks this of a bare filename, for the
12
+ * guessers and add-track forms that WRITE an `indexType` beside the location.
13
+ * Those stay: a config the CLI or jbrowse-img writes is read by older JBrowse
14
+ * versions, which have no inference to fall back on.
15
+ */
16
+ export function isCsiLocation(location) {
17
+ if (!isPlainObject(location)) {
18
+ return false;
19
+ }
20
+ const { uri, localPath } = location;
21
+ const name = typeof uri === 'string' ? uri : localPath;
22
+ // a presigned url carries its query string after the name
23
+ return typeof name === 'string' && /\.csi$/i.test(name.split(/[?#]/)[0]);
24
+ }
25
+ /**
26
+ * An index sub-schema's snapshot with `indexType` filled in from the location it
27
+ * names, where it states none. Only CSI is ever filled in — the sibling format
28
+ * is the slot's own default.
29
+ *
30
+ * Belongs to the sub-schema rather than to the `uri` shorthand because it has to
31
+ * cover the paths no shorthand runs on: a long-form config, and an add-track
32
+ * form that writes a location and nothing else.
33
+ */
34
+ export function fillIndexType(snap) {
35
+ return snap.indexType === undefined && isCsiLocation(snap.location)
36
+ ? { ...snap, indexType: 'CSI' }
37
+ : snap;
38
+ }
@@ -4,12 +4,11 @@
4
4
  * first, so a track's object is spread over the session-wide one and can
5
5
  * override individual keys the global callback added.
6
6
  *
7
- * A tier that isn't a plain object is dropped rather than spread. The classic
8
- * slip is `"jexl:feature.name"` where `"jexl:{name:feature.name}"` was meant;
9
- * spreading the resulting string produced attribute rows keyed `0`, `1`, `2`,
10
- * and an array does the same, which is why `isObject` alone isn't the gate.
11
- *
12
- * `null` and `undefined` *values* survive on purpose: they are how a callback
13
- * hides a field, and the panels filter them out downstream.
7
+ * A tier that returns something other than an object is an authoring mistake,
8
+ * `"jexl:feature.name"` where `"jexl:{name:feature.name}"` was meant, and it
9
+ * throws rather than vanishing: spread, the string became rows keyed 0, 1, 2,
10
+ * and dropped, the author's callback silently did nothing. A tier returning
11
+ * null or undefined has nothing to add. `null` and `undefined` *values* survive:
12
+ * they are how a callback hides a field, and the panels filter them downstream.
14
13
  */
15
14
  export declare function mergeFormatCallbacks(...tiers: unknown[]): Record<string, unknown>;
@@ -1,24 +1,27 @@
1
- import { isObject } from '../util/objectUtils.js';
1
+ import { isPlainObject } from '../util/objectUtils.js';
2
2
  /**
3
3
  * Combine the tiers of an object-returning format callback (`formatDetails` on
4
4
  * the feature-details panel, `formatAbout` on the About dialog), earliest
5
5
  * first, so a track's object is spread over the session-wide one and can
6
6
  * override individual keys the global callback added.
7
7
  *
8
- * A tier that isn't a plain object is dropped rather than spread. The classic
9
- * slip is `"jexl:feature.name"` where `"jexl:{name:feature.name}"` was meant;
10
- * spreading the resulting string produced attribute rows keyed `0`, `1`, `2`,
11
- * and an array does the same, which is why `isObject` alone isn't the gate.
12
- *
13
- * `null` and `undefined` *values* survive on purpose: they are how a callback
14
- * hides a field, and the panels filter them out downstream.
8
+ * A tier that returns something other than an object is an authoring mistake,
9
+ * `"jexl:feature.name"` where `"jexl:{name:feature.name}"` was meant, and it
10
+ * throws rather than vanishing: spread, the string became rows keyed 0, 1, 2,
11
+ * and dropped, the author's callback silently did nothing. A tier returning
12
+ * null or undefined has nothing to add. `null` and `undefined` *values* survive:
13
+ * they are how a callback hides a field, and the panels filter them downstream.
15
14
  */
16
15
  export function mergeFormatCallbacks(...tiers) {
17
16
  const out = {};
18
17
  for (const tier of tiers) {
19
- if (isObject(tier) && !Array.isArray(tier)) {
20
- Object.assign(out, tier);
18
+ if (tier == null) {
19
+ continue;
20
+ }
21
+ if (!isPlainObject(tier)) {
22
+ throw new Error(`a format callback returned ${Array.isArray(tier) ? 'an array' : `a ${typeof tier}`} where an object of fields was expected, e.g. "jexl:{name:feature.name}" rather than "jexl:feature.name"`);
21
23
  }
24
+ Object.assign(out, tier);
22
25
  }
23
26
  return out;
24
27
  }
@@ -0,0 +1,61 @@
1
+ import type { AnyConfigurationModel } from './types.ts';
2
+ /**
3
+ * #api core/configuration
4
+ * The grammar's settings, by the slot name every display that has one gives
5
+ * it, and what each holds: what "Edit plot..." shows and an agent reads as a
6
+ * display's `plot`. A display's plot is the ones its config declares
7
+ * (`plotKeysOf`).
8
+ */
9
+ export declare const PLOT_VOCABULARY: Readonly<Record<string, string>>;
10
+ /**
11
+ * #api core/configuration
12
+ * A display's plot settings as written: a key left out is left alone, and
13
+ * `null` resets that setting. Untyped, since a value may be a shorthand the
14
+ * schema lifts, and the schema is what judges it.
15
+ */
16
+ export type Plot = Record<string, unknown>;
17
+ /**
18
+ * #api core/configuration
19
+ * A worked example of a display's plot: the text it fills the editor with,
20
+ * and what it does.
21
+ */
22
+ export interface PlotExample {
23
+ plot: string;
24
+ description: string;
25
+ }
26
+ /**
27
+ * #api core/configuration
28
+ * The plot keys a display config declares.
29
+ */
30
+ export declare function plotKeysOf(conf: AnyConfigurationModel): string[];
31
+ /**
32
+ * #api core/configuration
33
+ * A display's plot as declared, defaults left off. A list sitting at a
34
+ * default it shares with no other display, a default plot's marks, shows its
35
+ * entries, since they are what is drawn.
36
+ */
37
+ export declare function plotOf(conf: AnyConfigurationModel): Plot;
38
+ /**
39
+ * #api core/configuration
40
+ * The text as a plot, refusing a key the display's plot does not hold. The
41
+ * schema is the parser past this point.
42
+ */
43
+ export declare function parsePlot(text: string, keys: readonly string[]): Plot;
44
+ /**
45
+ * #api core/configuration
46
+ * A draft as the display's config would hold it, through the schema's own
47
+ * lift and checks: a shorthand becomes its object, a default falls off, and
48
+ * what a config file is refused for throws, a key outside the plot included.
49
+ * The node is never attached, so nothing on the display is touched; a display
50
+ * reads its typed members off it. The draft is copied first, since MST
51
+ * freezes what it creates from.
52
+ */
53
+ export declare function liftPlot(conf: AnyConfigurationModel, draft: Plot): AnyConfigurationModel;
54
+ /**
55
+ * #api core/configuration
56
+ * What applying a draft writes: each setting whose lifted value differs from
57
+ * the plot, as the lifted value, and `null` for one it resets. A value
58
+ * spelled another way but lifting to the same setting writes nothing.
59
+ * Throws a refusal before anything is written.
60
+ */
61
+ export declare function plotWrites(conf: AnyConfigurationModel, draft: Plot): Record<string, unknown>;
@@ -0,0 +1,142 @@
1
+ import { getSnapshot, getType, isArrayType, isStateTreeNode, } from '@jbrowse/mobx-state-tree';
2
+ import { compareStructural } from 'mobx';
3
+ import { getConfigurationSchemaMetadata } from './schemaRegistry.js';
4
+ import { bareFormOf, shorthandTargets } from './schemaTypes.js';
5
+ /**
6
+ * #api core/configuration
7
+ * The grammar's settings, by the slot name every display that has one gives
8
+ * it, and what each holds: what "Edit plot..." shows and an agent reads as a
9
+ * display's `plot`. A display's plot is the ones its config declares
10
+ * (`plotKeysOf`).
11
+ */
12
+ export const PLOT_VOCABULARY = {
13
+ marks: 'the marks drawn in order, each a mark and an encoding',
14
+ transform: 'the steps run over the features before any mark',
15
+ facet: 'one section per value of a field',
16
+ rows: 'the rows: their field or order, labels, focus and tree',
17
+ rowColor: 'the colour of each row label',
18
+ color: 'the colour',
19
+ baseColor: 'the per-base layer over the reads',
20
+ arcColor: 'the colour of the arcs between mates',
21
+ ribbonColor: 'the colour of the ribbons between lanes',
22
+ laneLayers: 'the layers drawn over each lane',
23
+ scales: 'the axes, scales.y the value axis',
24
+ filter: 'the jexl: expressions a feature has to pass',
25
+ filterBy: 'the read flags and tags a read has to pass',
26
+ };
27
+ const LIFT_ID = 'plotLift';
28
+ /**
29
+ * #api core/configuration
30
+ * The plot keys a display config declares.
31
+ */
32
+ export function plotKeysOf(conf) {
33
+ const definition = getConfigurationSchemaMetadata(conf)?.definition ?? {};
34
+ return Object.keys(PLOT_VOCABULARY).filter(key => Object.hasOwn(definition, key));
35
+ }
36
+ // A one-member object a shorthand would write as a bare value prints as that
37
+ // value, as a config file writes it: `color: "red"`, `facet: "strand"`.
38
+ function folded(member, value) {
39
+ if (!isStateTreeNode(member) ||
40
+ typeof value !== 'object' ||
41
+ value === null ||
42
+ Array.isArray(value)) {
43
+ return value;
44
+ }
45
+ const meta = getConfigurationSchemaMetadata(member);
46
+ const entries = Object.entries(value);
47
+ if (!meta || meta.options.shorthandWith || entries.length !== 1) {
48
+ return value;
49
+ }
50
+ const [slot, bare] = entries[0];
51
+ const form = bareFormOf(bare);
52
+ return form && shorthandTargets(meta)[form] === slot ? bare : value;
53
+ }
54
+ /**
55
+ * #api core/configuration
56
+ * A display's plot as declared, defaults left off. A list sitting at a
57
+ * default it shares with no other display, a default plot's marks, shows its
58
+ * entries, since they are what is drawn.
59
+ */
60
+ export function plotOf(conf) {
61
+ const snapshot = getSnapshot(conf);
62
+ const plot = {};
63
+ for (const key of plotKeysOf(conf)) {
64
+ const member = conf[key];
65
+ const value = snapshot[key] ??
66
+ (isStateTreeNode(member) &&
67
+ isArrayType(getType(member)) &&
68
+ member.length > 0
69
+ ? getSnapshot(member)
70
+ : undefined);
71
+ if (value !== undefined) {
72
+ plot[key] = folded(member, value);
73
+ }
74
+ }
75
+ return plot;
76
+ }
77
+ function checkKeys(draft, keys) {
78
+ const unknown = Object.keys(draft).filter(key => !keys.includes(key));
79
+ if (unknown.length > 0) {
80
+ throw new Error(`This display's plot is ${keys.join(', ')}, not ${unknown.join(', ')}`);
81
+ }
82
+ }
83
+ /**
84
+ * #api core/configuration
85
+ * The text as a plot, refusing a key the display's plot does not hold. The
86
+ * schema is the parser past this point.
87
+ */
88
+ export function parsePlot(text, keys) {
89
+ const parsed = JSON.parse(text);
90
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
91
+ throw new Error(`A plot is one JSON object of ${keys.join(', ')}`);
92
+ }
93
+ checkKeys(parsed, keys);
94
+ return parsed;
95
+ }
96
+ function merged(draft, current) {
97
+ const out = { ...current };
98
+ for (const [key, value] of Object.entries(draft)) {
99
+ if (value === null) {
100
+ delete out[key];
101
+ }
102
+ else if (value !== undefined) {
103
+ out[key] = value;
104
+ }
105
+ }
106
+ return out;
107
+ }
108
+ /**
109
+ * #api core/configuration
110
+ * A draft as the display's config would hold it, through the schema's own
111
+ * lift and checks: a shorthand becomes its object, a default falls off, and
112
+ * what a config file is refused for throws, a key outside the plot included.
113
+ * The node is never attached, so nothing on the display is touched; a display
114
+ * reads its typed members off it. The draft is copied first, since MST
115
+ * freezes what it creates from.
116
+ */
117
+ export function liftPlot(conf, draft) {
118
+ checkKeys(draft, plotKeysOf(conf));
119
+ return getType(conf).create({
120
+ displayId: LIFT_ID,
121
+ ...structuredClone(merged(draft, plotOf(conf))),
122
+ });
123
+ }
124
+ /**
125
+ * #api core/configuration
126
+ * What applying a draft writes: each setting whose lifted value differs from
127
+ * the plot, as the lifted value, and `null` for one it resets. A value
128
+ * spelled another way but lifting to the same setting writes nothing.
129
+ * Throws a refusal before anything is written.
130
+ */
131
+ export function plotWrites(conf, draft) {
132
+ const current = plotOf(conf);
133
+ const lifted = plotOf(liftPlot(conf, draft));
134
+ const writes = {};
135
+ for (const [key, value] of Object.entries(draft)) {
136
+ if (value === undefined || compareStructural(lifted[key], current[key])) {
137
+ continue;
138
+ }
139
+ writes[key] = lifted[key] ?? null;
140
+ }
141
+ return writes;
142
+ }
@@ -1,7 +1,6 @@
1
1
  import type { Feature } from '../util/index.ts';
2
2
  import type { JexlInstance } from '../util/jexlStrings.ts';
3
- import type { AnyConfigurationModel, AnyConfigurationSchemaType, AnyConfigurationSnapshot, ConfigurationSchemaForModel, ConfigurationSlotName, ConfigurationSlotValue } from './types.ts';
4
- import type { IMSTMap } from '@jbrowse/mobx-state-tree';
3
+ import type { AnyConfigurationModel, AnyConfigurationSnapshot, ConfigurationSchemaForModel, ConfigurationSlotName, ConfigurationSlotPath, ConfigurationSlotPathValue, ConfigurationSlotValue } from './types.ts';
5
4
  /**
6
5
  * #api core/configuration
7
6
  * Given a configuration model (an instance of a ConfigurationSchema), read the
@@ -25,8 +24,7 @@ import type { IMSTMap } from '@jbrowse/mobx-state-tree';
25
24
  * will be sent to each of the slotNames
26
25
  */
27
26
  export declare function readConfObject(confObject: AnyConfigurationModel): AnyConfigurationSnapshot;
28
- export declare function readConfObject<CONFMODEL extends AnyConfigurationModel, SLOT extends ConfigurationSlotName<ConfigurationSchemaForModel<CONFMODEL>> | string[] = ConfigurationSlotName<ConfigurationSchemaForModel<CONFMODEL>>>(confObject: CONFMODEL, slotPath?: SLOT, args?: Record<string, unknown>): SLOT extends string ? ConfigurationSlotValue<ConfigurationSchemaForModel<CONFMODEL>, SLOT> : any;
29
- export declare function readConfObject(confObject: IMSTMap<AnyConfigurationSchemaType>, slotPath?: string | string[], args?: Record<string, unknown>): any;
27
+ export declare function readConfObject<CONFMODEL extends AnyConfigurationModel, const SLOT extends ConfigurationSlotName<ConfigurationSchemaForModel<CONFMODEL>> | ConfigurationSlotPath<ConfigurationSchemaForModel<CONFMODEL>> = ConfigurationSlotName<ConfigurationSchemaForModel<CONFMODEL>>>(confObject: CONFMODEL, slotPath?: SLOT, args?: Record<string, unknown>): SLOT extends string ? ConfigurationSlotValue<ConfigurationSchemaForModel<CONFMODEL>, SLOT> : ConfigurationSlotPathValue<ConfigurationSchemaForModel<CONFMODEL>, SLOT>;
30
28
  /**
31
29
  * Read a value from a plain config snapshot object. Automatically evaluates
32
30
  * "jexl:..." strings per-feature. Works without MST — intended for use in
@@ -34,23 +32,3 @@ export declare function readConfObject(confObject: IMSTMap<AnyConfigurationSchem
34
32
  * so plugin-registered functions (e.g. in a custom `mouseover` slot) resolve.
35
33
  */
36
34
  export declare function readConfigValue<T>(config: Record<string, unknown>, key: string | string[], feature: Feature, jexl: JexlInstance): T;
37
- /**
38
- * #api core/configuration
39
- * Read a single config slot from a config that may be **either** a live MST
40
- * node or a plain snapshot object, evaluating the value if it is a `jexl:`
41
- * expression. For the dialogs and panels that are handed a track config without
42
- * knowing which of the two they got. An About panel gets a hydrated track
43
- * config from the session and a bare object from an embedded caller.
44
- *
45
- * Reach for `readConfObject` or `readConfigValue` when the shape is known:
46
- * this one decides at runtime, and the plain branch inherits the snapshot
47
- * caveat (a slot at its default is absent from a snapshot, so it reads
48
- * `undefined`).
49
- *
50
- * @param config - live config model or plain config object
51
- * @param slotPath - slot name, or path of sub-config names ending in a slot
52
- * @param args - extra arguments for a callback slot, e.g. `{ feature }`
53
- * @param jexl - realm jexl instance, required only to evaluate a callback slot
54
- * on a plain object (a live node resolves its own from env)
55
- */
56
- export declare function readConfSlot<T = unknown>(config: AnyConfigurationModel | Record<string, unknown>, slotPath: string | string[], args?: Record<string, unknown>, jexl?: JexlInstance): T;
@@ -1,13 +1,14 @@
1
1
  /**
2
2
  * @module
3
- * The config **readers**: `readConfObject` off a live MST config node,
4
- * `readConfigValue` off a plain snapshot object in a worker or a renderer, and
5
- * `readConfSlot` for the callers that hold either and don't know which. All
6
- * three exist to evaluate a slot's `jexl:...` callback on read; they differ only
7
- * in where the jexl instance comes from (the node's env vs. an explicit
8
- * argument) and in how much of that they are willing to decide at runtime.
3
+ * The config **readers**: `readConfObject` off a live MST config node, and
4
+ * `readConfigValue` off a plain snapshot object in a worker or a renderer. Both
5
+ * exist to evaluate a slot's `jexl:...` callback on read; they differ only in
6
+ * where the jexl instance comes from, the node's env or an explicit argument.
7
+ * A `featureField` slot's `jexl:` expression is the display's to evaluate per
8
+ * feature, so `readConfObject` hands it over as written.
9
9
  */
10
- import { getEnv, getSnapshot, getType, isMapType, isStateTreeNode, } from '@jbrowse/mobx-state-tree';
10
+ import { getEnv, getSnapshot, getType, isStateTreeNode, } from '@jbrowse/mobx-state-tree';
11
+ import { getConfigurationSchemaMetadata } from './schemaRegistry.js';
11
12
  import { evaluateJexl, isCallbackValue } from './slotValueUtils.js';
12
13
  // Evaluate a slot's `jexl:...` callback string against the realm's single jexl
13
14
  // instance (carrying plugin-registered functions), read from the config node's
@@ -30,26 +31,20 @@ function evalConfigCallback(expr, args, confObject) {
30
31
  }
31
32
  return evaluateJexl(expr, args, jexl);
32
33
  }
33
- function isConfigMap(confObject) {
34
- return isStateTreeNode(confObject) && isMapType(getType(confObject));
35
- }
36
- // Read a slot's raw stored value, drilling into a map entry via `.get()` when
37
- // the config is itself a types.map.
38
- function rawSlotValue(confObject, slotName) {
39
- return isConfigMap(confObject)
40
- ? confObject.get(slotName)
41
- : confObject[slotName];
34
+ function isFeatureField(confObject, slotName) {
35
+ return (isStateTreeNode(confObject) &&
36
+ !!getConfigurationSchemaMetadata(getType(confObject))?.featureFields.has(slotName));
42
37
  }
43
38
  // Read and resolve a single slot: raw value, jexl callback evaluation, then a
44
39
  // referentially-stable snapshot for sub-config nodes.
45
40
  function readSlot(confObject, slotName, args) {
46
41
  // strict undefined check, not truthiness — a slot value can legitimately be
47
42
  // falsy (0, '', false, null)
48
- const value = rawSlotValue(confObject, slotName);
43
+ const value = confObject[slotName];
49
44
  if (value === undefined) {
50
45
  return undefined;
51
46
  }
52
- const val = isCallbackValue(value)
47
+ const val = isCallbackValue(value) && !isFeatureField(confObject, slotName)
53
48
  ? evalConfigCallback(value, args, confObject)
54
49
  : value;
55
50
  // Fast path for primitives (most common case)
@@ -63,8 +58,9 @@ function readSlot(confObject, slotName, args) {
63
58
  return isStateTreeNode(val) ? getSnapshot(val) : val;
64
59
  }
65
60
  // loose implementation signature: the body returns values that are `any` by
66
- // nature (raw slot values, snapshots); the typed overload above is what callers
67
- // see.
61
+ // nature (raw slot values, snapshots); the typed overloads above are what
62
+ // callers see. No looser overload admits the model: one that did was a
63
+ // catch-all a slot-name typo fell through to, compiling clean as `any`.
68
64
  export function readConfObject(confObject, slotPath, args = {}) {
69
65
  // the single-slot read, first and allocation-free: it is the shape of nearly
70
66
  // every one of the ~1300 call sites, so it doesn't get normalized into a
@@ -89,7 +85,7 @@ export function readConfObject(confObject, slotPath, args = {}) {
89
85
  // whole argument-shape preamble above at each level.
90
86
  let conf = confObject;
91
87
  for (let i = 0; i < slotPath.length - 1; i++) {
92
- const subConf = rawSlotValue(conf, slotPath[i]);
88
+ const subConf = conf[slotPath[i]];
93
89
  if (subConf === undefined) {
94
90
  return undefined;
95
91
  }
@@ -97,10 +93,9 @@ export function readConfObject(confObject, slotPath, args = {}) {
97
93
  }
98
94
  return readSlot(conf, slotPath[slotPath.length - 1], args);
99
95
  }
100
- // The plain-object half of the slot walk, shared by readConfigValue and
101
- // readConfSlot. The MST half is readSlot/rawSlotValue above. A plain object has
102
- // no map entries and no sub-config nodes to snapshot, so it is just a path
103
- // reduce.
96
+ // The plain-object half of the slot walk, for readConfigValue. The MST half is
97
+ // readSlot/rawSlotValue above. A plain object has no map entries and no
98
+ // sub-config nodes to snapshot, so it is just a path reduce.
104
99
  function resolveConfigValue(config, key) {
105
100
  if (Array.isArray(key)) {
106
101
  let val = config;
@@ -121,41 +116,3 @@ export function readConfigValue(config, key, feature, jexl) {
121
116
  const raw = resolveConfigValue(config, key);
122
117
  return (isCallbackValue(raw) ? evaluateJexl(raw, { feature }, jexl) : raw);
123
118
  }
124
- /**
125
- * #api core/configuration
126
- * Read a single config slot from a config that may be **either** a live MST
127
- * node or a plain snapshot object, evaluating the value if it is a `jexl:`
128
- * expression. For the dialogs and panels that are handed a track config without
129
- * knowing which of the two they got. An About panel gets a hydrated track
130
- * config from the session and a bare object from an embedded caller.
131
- *
132
- * Reach for `readConfObject` or `readConfigValue` when the shape is known:
133
- * this one decides at runtime, and the plain branch inherits the snapshot
134
- * caveat (a slot at its default is absent from a snapshot, so it reads
135
- * `undefined`).
136
- *
137
- * @param config - live config model or plain config object
138
- * @param slotPath - slot name, or path of sub-config names ending in a slot
139
- * @param args - extra arguments for a callback slot, e.g. `{ feature }`
140
- * @param jexl - realm jexl instance, required only to evaluate a callback slot
141
- * on a plain object (a live node resolves its own from env)
142
- */
143
- export function readConfSlot(config, slotPath, args = {}, jexl) {
144
- if (isStateTreeNode(config)) {
145
- // pass slotPath through rather than normalizing a string into a one-element
146
- // array: readConfObject keeps the single-slot read allocation-free
147
- return readConfObject(config, slotPath, args);
148
- }
149
- const value = resolveConfigValue(config, slotPath);
150
- // A plain-object config has no MST env, so the realm's jexl instance can't be
151
- // resolved automatically — callers reading a callback slot must pass it. Only
152
- // reached when the slot actually holds a `jexl:` value (trackId/adapter/etc.
153
- // never do), so non-callback readers need not supply it.
154
- if (isCallbackValue(value)) {
155
- if (!jexl) {
156
- throw new Error(`cannot evaluate jexl config slot ${JSON.stringify(slotPath)} on a plain-object config: no jexl instance provided`);
157
- }
158
- return evaluateJexl(value, args, jexl);
159
- }
160
- return value;
161
- }
@@ -0,0 +1,37 @@
1
+ import type { ConfigurationSchemaDefinition } from './configurationSchema.ts';
2
+ import type { IAnyType } from '@jbrowse/mobx-state-tree';
3
+ /**
4
+ * A combination one config object cannot mean, declared once: when every slot
5
+ * named in `when` holds one of the listed values, each dotted path in `slots`
6
+ * has to name a value — a non-empty string, or a sub-schema a string lifts
7
+ * into. `message` says why, and `id` is the stable name a report carries.
8
+ * `requirementProblems` reads it for a display's notice, and the generated
9
+ * JSON Schema carries it as `if`/`then` with the message, which the CLI
10
+ * validator and an editor report.
11
+ *
12
+ * `ConfigurationSchema()` types `when`, its values and `slots` off the
13
+ * definition and throws at construction for what the types cannot reach: a
14
+ * misspelt `when` key or value would never fire, and a misspelt path would
15
+ * require a key `closed` then refuses.
16
+ */
17
+ export interface ConfigurationSchemaRequirement<WHEN extends Partial<Record<string, string[]>> = Partial<Record<string, string[]>>, PATH extends string = string> {
18
+ id: string;
19
+ when: WHEN;
20
+ slots: PATH[];
21
+ message: string;
22
+ }
23
+ /** A requirement a snapshot does not meet: the slot path left empty, and why. */
24
+ export interface RequirementProblem {
25
+ id: string;
26
+ slot: string;
27
+ message: string;
28
+ }
29
+ export declare function checkRequirements(modelName: string, definition: ConfigurationSchemaDefinition, requires: ConfigurationSchemaRequirement[]): void;
30
+ /**
31
+ * #api core/configuration
32
+ * The `requires` entries of a configuration schema that `snapshot` does not
33
+ * meet, as a config file or `getSnapshot` spells it: a slot left off reads as
34
+ * its default, so a `when` value that is the default fires for an absent slot,
35
+ * which is what the generated JSON Schema's `if` does.
36
+ */
37
+ export declare function requirementProblems(type: IAnyType, snapshot: Record<string, unknown>): RequirementProblem[];