@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
@@ -5,6 +5,14 @@ declare const slotTypes: {
5
5
  model: import("@jbrowse/mobx-state-tree").IArrayType<import("@jbrowse/mobx-state-tree").ISimpleType<string>>;
6
6
  fallbackDefault: never[];
7
7
  };
8
+ expressionArray: {
9
+ model: import("@jbrowse/mobx-state-tree").IArrayType<import("@jbrowse/mobx-state-tree").ISimpleType<string>>;
10
+ fallbackDefault: never[];
11
+ };
12
+ colorArray: {
13
+ model: import("@jbrowse/mobx-state-tree").IArrayType<import("@jbrowse/mobx-state-tree").ISimpleType<string>>;
14
+ fallbackDefault: never[];
15
+ };
8
16
  stringArrayMap: {
9
17
  model: import("@jbrowse/mobx-state-tree").IMapType<import("@jbrowse/mobx-state-tree").IArrayType<import("@jbrowse/mobx-state-tree").ISimpleType<string>>>;
10
18
  fallbackDefault: {};
@@ -13,6 +21,10 @@ declare const slotTypes: {
13
21
  model: import("@jbrowse/mobx-state-tree").IMapType<import("@jbrowse/mobx-state-tree").ISimpleType<number>>;
14
22
  fallbackDefault: {};
15
23
  };
24
+ stringMap: {
25
+ model: import("@jbrowse/mobx-state-tree").IMapType<import("@jbrowse/mobx-state-tree").ISimpleType<string>>;
26
+ fallbackDefault: {};
27
+ };
16
28
  boolean: {
17
29
  model: import("@jbrowse/mobx-state-tree").ISimpleType<boolean>;
18
30
  fallbackDefault: boolean;
@@ -41,6 +53,9 @@ declare const slotTypes: {
41
53
  maybeFrozen: {
42
54
  model: import("@jbrowse/mobx-state-tree").IMaybe<import("@jbrowse/mobx-state-tree").IType<any, any, any>>;
43
55
  };
56
+ maybeString: {
57
+ model: import("@jbrowse/mobx-state-tree").IMaybe<import("@jbrowse/mobx-state-tree").ISimpleType<string>>;
58
+ };
44
59
  string: {
45
60
  model: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
46
61
  fallbackDefault: string;
@@ -49,6 +64,10 @@ declare const slotTypes: {
49
64
  model: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
50
65
  fallbackDefault: string;
51
66
  };
67
+ featureField: {
68
+ model: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
69
+ fallbackDefault: string;
70
+ };
52
71
  fileLocation: {
53
72
  model: import("@jbrowse/mobx-state-tree").ISnapshotProcessor<import("@jbrowse/mobx-state-tree").ITypeUnion<import("@jbrowse/mobx-state-tree").ModelCreationType<{
54
73
  locationType: "LocalPathLocation";
@@ -135,6 +154,108 @@ declare const slotTypes: {
135
154
  locationType: string;
136
155
  };
137
156
  };
157
+ maybeFileLocation: {
158
+ model: import("@jbrowse/mobx-state-tree").ISnapshotProcessor<import("@jbrowse/mobx-state-tree").IMaybe<import("@jbrowse/mobx-state-tree").ISnapshotProcessor<import("@jbrowse/mobx-state-tree").ITypeUnion<import("@jbrowse/mobx-state-tree").ModelCreationType<{
159
+ locationType: "LocalPathLocation";
160
+ localPath: string;
161
+ }> | import("@jbrowse/mobx-state-tree").ModelCreationType<{
162
+ locationType: "BlobLocation";
163
+ name: string;
164
+ blobId: string;
165
+ }> | import("@jbrowse/mobx-state-tree").ModelCreationType<{
166
+ locationType: "FileHandleLocation";
167
+ name: string;
168
+ handleId: string;
169
+ }> | import("@jbrowse/mobx-state-tree").ModelCreationType<{
170
+ locationType: "UriLocation";
171
+ uri: string;
172
+ baseUri: string | undefined;
173
+ internetAccountId: string | undefined;
174
+ internetAccountPreAuthorization: import("@jbrowse/mobx-state-tree").ModelCreationType<{
175
+ internetAccountType: string;
176
+ authInfo: any;
177
+ }> | undefined;
178
+ }>, import("@jbrowse/mobx-state-tree").ModelSnapshotType<{
179
+ locationType: import("@jbrowse/mobx-state-tree").ILiteralType<"LocalPathLocation">;
180
+ localPath: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
181
+ }> | import("@jbrowse/mobx-state-tree").ModelSnapshotType<{
182
+ locationType: import("@jbrowse/mobx-state-tree").ILiteralType<"BlobLocation">;
183
+ name: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
184
+ blobId: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
185
+ }> | import("@jbrowse/mobx-state-tree").ModelSnapshotType<{
186
+ locationType: import("@jbrowse/mobx-state-tree").ILiteralType<"FileHandleLocation">;
187
+ name: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
188
+ handleId: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
189
+ }> | {
190
+ locationType: "UriLocation";
191
+ uri: string;
192
+ internetAccountId: string | undefined;
193
+ internetAccountPreAuthorization: import("@jbrowse/mobx-state-tree").ModelSnapshotType<{
194
+ internetAccountType: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
195
+ authInfo: import("@jbrowse/mobx-state-tree").IType<any, any, any>;
196
+ }> | undefined;
197
+ }, import("@jbrowse/mobx-state-tree").ModelInstanceTypeProps<{
198
+ locationType: import("@jbrowse/mobx-state-tree").ILiteralType<"LocalPathLocation">;
199
+ localPath: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
200
+ }> | import("@jbrowse/mobx-state-tree").ModelInstanceTypeProps<{
201
+ locationType: import("@jbrowse/mobx-state-tree").ILiteralType<"BlobLocation">;
202
+ name: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
203
+ blobId: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
204
+ }> | import("@jbrowse/mobx-state-tree").ModelInstanceTypeProps<{
205
+ locationType: import("@jbrowse/mobx-state-tree").ILiteralType<"FileHandleLocation">;
206
+ name: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
207
+ handleId: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
208
+ }> | import("@jbrowse/mobx-state-tree").ModelInstanceTypeProps<{
209
+ locationType: import("@jbrowse/mobx-state-tree").ILiteralType<"UriLocation">;
210
+ uri: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
211
+ baseUri: import("@jbrowse/mobx-state-tree").IMaybe<import("@jbrowse/mobx-state-tree").ISimpleType<string>>;
212
+ internetAccountId: import("@jbrowse/mobx-state-tree").IMaybe<import("@jbrowse/mobx-state-tree").ISimpleType<string>>;
213
+ internetAccountPreAuthorization: import("@jbrowse/mobx-state-tree").IMaybe<import("@jbrowse/mobx-state-tree").IModelType<{
214
+ internetAccountType: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
215
+ authInfo: import("@jbrowse/mobx-state-tree").IType<any, any, any>;
216
+ }, {}, import("@jbrowse/mobx-state-tree")._NotCustomized, import("@jbrowse/mobx-state-tree")._NotCustomized>>;
217
+ }>>, import("../util/types/mst.ts").LegacyFileLocation | import("@jbrowse/mobx-state-tree").ModelCreationType<{
218
+ locationType: "LocalPathLocation";
219
+ localPath: string;
220
+ }> | import("@jbrowse/mobx-state-tree").ModelCreationType<{
221
+ locationType: "BlobLocation";
222
+ name: string;
223
+ blobId: string;
224
+ }> | import("@jbrowse/mobx-state-tree").ModelCreationType<{
225
+ locationType: "FileHandleLocation";
226
+ name: string;
227
+ handleId: string;
228
+ }> | import("@jbrowse/mobx-state-tree").ModelCreationType<{
229
+ locationType: "UriLocation";
230
+ uri: string;
231
+ baseUri: string | undefined;
232
+ internetAccountId: string | undefined;
233
+ internetAccountPreAuthorization: import("@jbrowse/mobx-state-tree").ModelCreationType<{
234
+ internetAccountType: string;
235
+ authInfo: any;
236
+ }> | undefined;
237
+ }>, import("@jbrowse/mobx-state-tree")._NotCustomized>>, import("../util/types/mst.ts").LegacyFileLocation | import("@jbrowse/mobx-state-tree").ModelCreationType<{
238
+ locationType: "LocalPathLocation";
239
+ localPath: string;
240
+ }> | import("@jbrowse/mobx-state-tree").ModelCreationType<{
241
+ locationType: "BlobLocation";
242
+ name: string;
243
+ blobId: string;
244
+ }> | import("@jbrowse/mobx-state-tree").ModelCreationType<{
245
+ locationType: "FileHandleLocation";
246
+ name: string;
247
+ handleId: string;
248
+ }> | import("@jbrowse/mobx-state-tree").ModelCreationType<{
249
+ locationType: "UriLocation";
250
+ uri: string;
251
+ baseUri: string | undefined;
252
+ internetAccountId: string | undefined;
253
+ internetAccountPreAuthorization: import("@jbrowse/mobx-state-tree").ModelCreationType<{
254
+ internetAccountType: string;
255
+ authInfo: any;
256
+ }> | undefined;
257
+ }> | undefined, import("@jbrowse/mobx-state-tree")._NotCustomized>;
258
+ };
138
259
  frozen: {
139
260
  model: import("@jbrowse/mobx-state-tree").IType<any, any, any>;
140
261
  fallbackDefault: {};
@@ -146,10 +267,10 @@ declare const slotTypes: {
146
267
  * `types.ts`, which has to name the same set and is checked against this.
147
268
  */
148
269
  export type BuiltinSlotTypeName = keyof typeof slotTypes;
149
- declare const ENUM_SLOT_TYPES: readonly ['stringEnum', 'maybeStringEnum'];
270
+ declare const ENUM_SLOT_TYPES: readonly ['stringEnum', 'maybeStringEnum', 'stringEnumArray'];
150
271
  /**
151
272
  * Every legal `type` on a slot definition: the builtin table's own names, plus
152
- * the two enum types.
273
+ * the enum types.
153
274
  *
154
275
  * Closed on purpose. A name outside this set still *works* at runtime as long
155
276
  * as a `model` is given — which is exactly the trap: the value round-trips
@@ -167,65 +288,23 @@ type MaybeBuiltinSlotTypeName = {
167
288
  [K in keyof typeof slotTypes]: 'fallbackDefault' extends keyof (typeof slotTypes)[K] ? never : K;
168
289
  }[keyof typeof slotTypes];
169
290
  export type MaybeSlotTypeName = MaybeBuiltinSlotTypeName | 'maybeStringEnum';
291
+ /** Why the slot `name`, of type `type`, refuses `value` on a write. */
292
+ export declare function slotWriteRefusal(name: string, type: string, value: unknown): string;
170
293
  interface ConfigSlotDefinitionCommon {
171
294
  /** human-readable description of the slot's meaning */
172
295
  description?: string;
173
296
  /** custom base MST model for the slot's value */
174
297
  model?: IAnyType;
175
- /** parameter names of the function callback */
298
+ /**
299
+ * The names a `jexl:` callback in this slot reads. Declaring any is what
300
+ * makes the slot take a callback; every other slot refuses one.
301
+ */
176
302
  contextVariable?: string[];
177
303
  /**
178
304
  * hide this slot behind a "Show advanced settings" toggle in the config
179
305
  * editor, so common slots aren't crowded out by rarely-changed ones
180
306
  */
181
307
  advanced?: boolean;
182
- /**
183
- * **Declaring this makes the slot promotable**, and it is the only thing that
184
- * does: a user can promote the slot's value to a session-wide default for all
185
- * tracks of the same display type (the track-menu pin). An *unset* slot
186
- * follows (inherits) that promoted default; any concrete value customizes the
187
- * track. Read it with `resolveConf`, never `getConf`; see
188
- * `promotableResolve.ts`.
189
- *
190
- * The value itself is what the unset state resolves to when a track inherits
191
- * and nothing is promoted. This is the CSS model — being unset is the
192
- * `inherit` keyword and `promotedBase` is `initial` (the value at the bottom
193
- * of the cascade). Spending only `undefined` on the sentinel is what leaves
194
- * every *real* value — `promotedBase` included — customizable over an opposite
195
- * session default, so a track can hold `displayMode: 'normal'` under a
196
- * promoted `'compact'`.
197
- *
198
- * Requires a `maybe*` slot type (whose `undefined` is the inherit sentinel)
199
- * and no `defaultValue`; `ConfigSlot` throws otherwise, and both stay runtime
200
- * checks. Forbidding it on the plain half of `ConfigSlotDefinition` was tried:
201
- * it forces a cast into `mergeSchemaDefinition`, whose spread of two slot
202
- * definitions lands in neither member, and buys only an earlier version of a
203
- * throw that already fires when the schema is built.
204
- *
205
- * A subclass turns an inherited promotable slot back into a plain one by
206
- * stating `promotedBase: undefined` — the definition merge is a spread, so a
207
- * stated `undefined` really does overwrite the base's value.
208
- */
209
- promotedBase?: unknown;
210
- /**
211
- * For a promotable slot: an extra semantic check a stored value must pass,
212
- * on top of the built-in type-shape check, before the cascade
213
- * (`promotableResolve.ts`'s `isUsableValue`) treats it as usable. Applies to
214
- * both cascade tiers — a session-wide promoted default and a track's own saved
215
- * value. Needed when a slot's shape alone can't catch a semantically-invalid
216
- * value — e.g. alignments `colorBy`'s `.type` must name a currently-registered
217
- * color scheme, not just be *some* string — so a stale scheme name (renamed or
218
- * removed since the value was saved) degrades to "not usable" (falls back to
219
- * the base) instead of reaching a lookup that assumes every `.type` is
220
- * registered. Omit when the type-shape check alone is enough to trust the value.
221
- *
222
- * Runs at **schema build** too, over the slot's own `promotedBase` — the base
223
- * is what every failing tier degrades to, so it has to clear the same bar.
224
- * Keep the hook a function of module-level data (as `isRegisteredColorScheme`
225
- * is of `COLOR_SCHEMES`); one that consults state its plugin registers later
226
- * during `install()` would reject a base that is really fine.
227
- */
228
- validate?: (value: unknown) => boolean;
229
308
  }
230
309
  /**
231
310
  * A slot definition, split on whether the slot's type spends `undefined` on
@@ -244,7 +323,9 @@ interface ConfigSlotDefinitionCommon {
244
323
  * this mistake actually happens.
245
324
  *
246
325
  * Stating the sentinel stays meaningful in a subclass override, where the merge
247
- * is a spread and an omitted key inherits the base's value.
326
+ * is a spread and an omitted key inherits the base's value. The same spread is
327
+ * why an enum slot's `model` stays optional here though `ConfigSlot` requires
328
+ * one: a subclass restating only the default inherits the vocabulary.
248
329
  */
249
330
  export type ConfigSlotDefinition = (ConfigSlotDefinitionCommon & {
250
331
  /** a `maybe*` slot type, whose unset state is `undefined` */
@@ -258,16 +339,25 @@ export type ConfigSlotDefinition = (ConfigSlotDefinitionCommon & {
258
339
  defaultValue: unknown;
259
340
  });
260
341
  /**
261
- * A configuration slot is a plain value-union MST property: the slot's value
262
- * type, OR a `jexl:...` callback string. The value lives directly on the parent
263
- * configuration model — there is no per-slot sub-model. `types.stripDefault`
264
- * omits the property from the parent snapshot when it equals the default, so
265
- * saved sessions stay minimal. Per-slot metadata
266
- * (type/description/defaultValue/contextVariable) lives in the schema registry
267
- * (a WeakMap keyed by the MST type, see schemaRegistry.ts); jexl callbacks are
268
- * evaluated on read by `readConfObject`.
342
+ * A configuration slot is a plain MST property holding the slot's value type,
343
+ * or, where the slot declares a `contextVariable`, that or a `jexl:...`
344
+ * callback string. Every other slot refuses a `jexl:` string, so a callback
345
+ * the reader would evaluate is one the schema says it takes. A `featureField`
346
+ * holds a `jexl:` expression as its value, which the display evaluates per
347
+ * feature. The value lives directly on the parent configuration model — there
348
+ * is no per-slot sub-model. `types.stripDefault` omits the property from the
349
+ * parent snapshot when it equals the default, so saved sessions stay minimal.
350
+ * Per-slot metadata (type/description/defaultValue/contextVariable) lives in
351
+ * the schema registry (a WeakMap keyed by the MST type, see
352
+ * schemaRegistry.ts); jexl callbacks are evaluated on read by
353
+ * `readConfObject`.
354
+ *
355
+ * Interning the returned type on `(type, model, defaultValue)` was prototyped
356
+ * and declined: a session builds 1197 slot types for 222 distinct ones, and
357
+ * removing the repeats moves neither the time nor the heap
358
+ * (`config-schema-construction`, published in `reference/EAGER_BUNDLE.md`).
269
359
  */
270
- export default function ConfigSlot(definition: ConfigSlotDefinition): import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ITypeUnion<any, any, any>, [undefined]>;
360
+ export default function ConfigSlot(definition: ConfigSlotDefinition): import("@jbrowse/mobx-state-tree").IOptionalIType<IAnyType, [undefined]>;
271
361
  /**
272
362
  * New value when converting a fixed-value slot to a jexl callback. Already-
273
363
  * callback values are returned unchanged.
@@ -1,9 +1,21 @@
1
1
  import { types } from '@jbrowse/mobx-state-tree';
2
- import { freezeDeep } from '../util/freezeDeep.js';
2
+ import { isCssColor } from '../util/cssColorParse.js';
3
3
  import { isJexl, stringToJexlExpression } from '../util/jexlStrings.js';
4
- import { FileLocation } from '../util/types/mst.js';
5
- import { isUsableValue } from './slotShape.js';
4
+ import { FileLocation, JexlExpressionString } from '../util/types/mst.js';
6
5
  import { isCallbackValue } from './slotValueUtils.js';
6
+ // What a color slot admits is what the painters parse (`isCssColor`), plus the
7
+ // empty string a slot such as `outlineColor` spells "none" with; a field name
8
+ // written where a color goes used to load and paint the invalid sentinel.
9
+ function notAColor(value) {
10
+ return `${JSON.stringify(value)} is not a color. A color is a CSS color: a name like "red" or "steelblue", "#rgb" / "#rrggbb" / "#rrggbbaa", "rgb()" / "rgba()" / "hsl()" / "hsla()", or "transparent"; a color computed per feature is a "jexl:" callback, in a slot that takes one`;
11
+ }
12
+ const CssColorType = types.refinement('CssColor', types.string, value => value === '' || isCssColor(value), notAColor);
13
+ // An entry of a colour list has no "none" to spell, so '' is refused with the
14
+ // rest of what is not a colour.
15
+ const CssColorEntryType = types.refinement('CssColorEntry', types.string, isCssColor, notAColor);
16
+ const MaybeFileLocation = types.snapshotProcessor(types.maybe(FileLocation), {
17
+ preProcessor: (snap) => snap && 'uri' in snap && snap.uri === '' ? undefined : snap,
18
+ });
7
19
  // Single source of truth for the builtin slot type names, pairing each with its
8
20
  // MST value type and its editor fallback default. Keeping model + fallback in
9
21
  // one table means adding a slot type is one edit and can't half-register.
@@ -15,31 +27,39 @@ import { isCallbackValue } from './slotValueUtils.js';
15
27
  // of.
16
28
  const slotTypes = {
17
29
  stringArray: { model: types.array(types.string), fallbackDefault: [] },
30
+ expressionArray: {
31
+ model: types.array(JexlExpressionString),
32
+ fallbackDefault: [],
33
+ },
34
+ colorArray: { model: types.array(CssColorEntryType), fallbackDefault: [] },
18
35
  stringArrayMap: {
19
36
  model: types.map(types.array(types.string)),
20
37
  fallbackDefault: {},
21
38
  },
22
39
  numberMap: { model: types.map(types.number), fallbackDefault: {} },
40
+ stringMap: { model: types.map(types.string), fallbackDefault: {} },
23
41
  boolean: { model: types.boolean, fallbackDefault: true },
24
- // a color is just a string; the editor picks a color widget off the slot's
25
- // `type` metadata, and values are accepted unvalidated (CSS names, hex, jexl)
26
- color: { model: types.string, fallbackDefault: 'black' },
42
+ color: { model: CssColorType, fallbackDefault: 'black' },
27
43
  integer: { model: types.integer, fallbackDefault: 1 },
28
44
  number: { model: types.number, fallbackDefault: 1 },
29
45
  // The `maybe*` types spend `undefined` on "not explicitly set", which is the
30
46
  // one value no config can spell and so the only reliable way to say it — a
31
- // computed/auto fallback (a drag-resized track height), or the inherit
32
- // sentinel every promotable slot needs (pair with `promotedBase`, and read
33
- // with `resolveConf`).
47
+ // computed/auto fallback, e.g. a drag-resized track height.
34
48
  maybeNumber: { model: types.maybe(types.number) },
35
49
  maybeBoolean: { model: types.maybe(types.boolean) },
36
50
  // for a slot whose unset state means "decide from the data" — a feature's own
37
51
  // BED itemRgb, say
38
- maybeColor: { model: types.maybe(types.string) },
39
- // object-valued, e.g. alignments `colorBy`
52
+ maybeColor: { model: types.maybe(CssColorType) },
53
+ // object-valued, e.g. alignments `sortedBy`
40
54
  maybeFrozen: { model: types.maybe(types.frozen()) },
55
+ // for text whose unset state is a third thing beside some text and none: an
56
+ // axis title is derived while unset, and drawn bare once it is ''
57
+ maybeString: { model: types.maybe(types.string) },
41
58
  string: { model: types.string, fallbackDefault: '' },
42
59
  text: { model: types.string, fallbackDefault: '' },
60
+ // a field the display reads per feature: a name, a dotted path, or a
61
+ // `jexl:` expression, which the display evaluates and the reader never does
62
+ featureField: { model: types.string, fallbackDefault: '' },
43
63
  fileLocation: {
44
64
  model: FileLocation,
45
65
  fallbackDefault: {
@@ -47,12 +67,22 @@ const slotTypes = {
47
67
  locationType: 'UriLocation',
48
68
  },
49
69
  },
70
+ // for a sidecar the adapter works without: unset means no file is
71
+ // configured, and so does the `{ uri: '' }` a cleared URL field in the
72
+ // config editor writes
73
+ maybeFileLocation: { model: MaybeFileLocation },
50
74
  frozen: { model: types.frozen(), fallbackDefault: {} },
51
75
  };
52
- // The two types with no builtin table entry, because the author supplies the
53
- // `types.enumeration` as `model`. Named once, and spliced into both the type
54
- // union and the runtime set below so those two cannot drift apart.
55
- const ENUM_SLOT_TYPES = ['stringEnum', 'maybeStringEnum'];
76
+ // The types with no builtin table entry, because the author supplies the
77
+ // `types.enumeration` as `model` and `ConfigSlot` wraps it: in `types.maybe`
78
+ // for `maybeStringEnum`, in `types.array` for `stringEnumArray`. Named once,
79
+ // and spliced into both the type union and the runtime set below so those two
80
+ // cannot drift apart.
81
+ const ENUM_SLOT_TYPES = [
82
+ 'stringEnum',
83
+ 'maybeStringEnum',
84
+ 'stringEnumArray',
85
+ ];
56
86
  /**
57
87
  * The same closed set, at runtime, because the type alone does not close it for
58
88
  * the callers that matter most: `ConfigSlot` is plugin-facing, and a JS plugin
@@ -86,18 +116,45 @@ const MAYBE_TYPES = new Set([
86
116
  'maybeStringEnum',
87
117
  ]);
88
118
  const JexlStringType = types.refinement('JexlString', types.string, isJexl);
119
+ const CALLBACK_SLOTS = 'a slot that takes a callback declares the names it reads, which its config docs list as callback args';
120
+ function notACallbackSlot(value) {
121
+ return `${JSON.stringify(value)} is a jexl: callback, and this slot takes a value: ${CALLBACK_SLOTS}`;
122
+ }
123
+ /** Why the slot `name`, of type `type`, refuses `value` on a write. */
124
+ export function slotWriteRefusal(name, type, value) {
125
+ const bare = type === 'expressionArray' && Array.isArray(value)
126
+ ? value.find(entry => !isJexl(entry))
127
+ : undefined;
128
+ return isJexl(value)
129
+ ? `${name} takes no jexl: callback, and ${JSON.stringify(value)} is one: ${CALLBACK_SLOTS}`
130
+ : bare !== undefined
131
+ ? `${name} takes jexl: expressions, and ${JSON.stringify(bare)} is not an expression: write it with its prefix, as "jexl:${String(bare)}"`
132
+ : `${name} is a ${type} slot and cannot take ${JSON.stringify(value)}`;
133
+ }
134
+ function refusingCallbacks(model) {
135
+ return types.refinement(model, value => !isJexl(value), notACallbackSlot);
136
+ }
89
137
  /**
90
- * A configuration slot is a plain value-union MST property: the slot's value
91
- * type, OR a `jexl:...` callback string. The value lives directly on the parent
92
- * configuration model — there is no per-slot sub-model. `types.stripDefault`
93
- * omits the property from the parent snapshot when it equals the default, so
94
- * saved sessions stay minimal. Per-slot metadata
95
- * (type/description/defaultValue/contextVariable) lives in the schema registry
96
- * (a WeakMap keyed by the MST type, see schemaRegistry.ts); jexl callbacks are
97
- * evaluated on read by `readConfObject`.
138
+ * A configuration slot is a plain MST property holding the slot's value type,
139
+ * or, where the slot declares a `contextVariable`, that or a `jexl:...`
140
+ * callback string. Every other slot refuses a `jexl:` string, so a callback
141
+ * the reader would evaluate is one the schema says it takes. A `featureField`
142
+ * holds a `jexl:` expression as its value, which the display evaluates per
143
+ * feature. The value lives directly on the parent configuration model — there
144
+ * is no per-slot sub-model. `types.stripDefault` omits the property from the
145
+ * parent snapshot when it equals the default, so saved sessions stay minimal.
146
+ * Per-slot metadata (type/description/defaultValue/contextVariable) lives in
147
+ * the schema registry (a WeakMap keyed by the MST type, see
148
+ * schemaRegistry.ts); jexl callbacks are evaluated on read by
149
+ * `readConfObject`.
150
+ *
151
+ * Interning the returned type on `(type, model, defaultValue)` was prototyped
152
+ * and declined: a session builds 1197 slot types for 222 distinct ones, and
153
+ * removing the repeats moves neither the time nor the heap
154
+ * (`config-schema-construction`, published in `reference/EAGER_BUNDLE.md`).
98
155
  */
99
156
  export default function ConfigSlot(definition) {
100
- const { model, type, defaultValue, promotedBase } = definition;
157
+ const { model, type, defaultValue } = definition;
101
158
  if (!CONFIG_SLOT_TYPE_NAMES.has(type)) {
102
159
  throw new Error(`config slot needs a known type name, got ${JSON.stringify(type)}`);
103
160
  }
@@ -111,49 +168,6 @@ export default function ConfigSlot(definition) {
111
168
  if (defaultValue === undefined && !MAYBE_TYPES.has(type)) {
112
169
  throw new Error("no 'defaultValue' provided");
113
170
  }
114
- // `promotedBase` is what makes a slot promotable, so its presence is the whole
115
- // condition here (ADR-047).
116
- //
117
- // A promotable slot spends being-unset on the inherit sentinel, so it must be a
118
- // `maybe*` type. Any *concrete* default would double as the inherit signal,
119
- // making that one value un-customizable under an opposite promoted default — an
120
- // authoring mistake with no runtime symptom other than a setting that won't
121
- // stay put, so fail at construction.
122
- if (promotedBase !== undefined) {
123
- if (!MAYBE_TYPES.has(type)) {
124
- throw new Error(`a 'promotedBase' slot needs a maybe* type whose undefined is the inherit sentinel, not "${type}"`);
125
- }
126
- if (defaultValue !== undefined) {
127
- throw new Error("a promotable slot must leave 'defaultValue' undefined — that IS the inherit sentinel; 'promotedBase' is what an unset slot resolves to");
128
- }
129
- // The base is the bottom of the cascade: every other tier that fails
130
- // `isUsableValue` falls back to it, so a base that would itself fail has
131
- // nowhere left to fall and every read of the slot returns a value no
132
- // consumer handles — with nothing thrown anywhere. The typo this catches is
133
- // a `promotedBase` outside the slot's own vocabulary (an enum member not in
134
- // `model`, a non-finite number), which nothing else in the system checks.
135
- if (!isUsableValue(definition, promotedBase)) {
136
- throw new Error(`a 'promotedBase' must be a value the slot can hold: ${JSON.stringify(promotedBase)} is not a valid "${type}"`);
137
- }
138
- // A promotable slot cannot hold a callback: `isUsableValue` refuses a
139
- // `jexl:` value at both cascade tiers, so one written into the slot is
140
- // discarded straight back to the base. `contextVariable` is the only thing
141
- // that offers writing one — it is what raises the config editor's jexl
142
- // toggle (`SlotEditor`) — so the pair is a control whose every write the
143
- // cascade throws away, with nothing thrown anywhere. Nothing else in the
144
- // system states this; DISPLAY_TYPE_DEFAULTS.md §"No callbacks" only
145
- // describes the read side.
146
- if (definition.contextVariable?.length) {
147
- throw new Error("a promotable slot ('promotedBase') cannot declare 'contextVariable': the cascade refuses a jexl: callback, so the config editor would offer a toggle whose writes silently degrade back to the base");
148
- }
149
- // The resolver hands `promotedBase` out by reference, so an object-valued one
150
- // (`maybeFrozen`, e.g. alignments `colorBy`) is one literal shared live by
151
- // every track sitting at base. Freeze it here, the only place it enters the
152
- // system, so mutating a resolved value throws instead of silently rewriting
153
- // the default for every other track — and for every later session, since this
154
- // object belongs to the schema. See `freezeDeep` for why by-reference stays.
155
- freezeDeep(promotedBase);
156
- }
157
171
  // The inverse of the `defaultValue === undefined` check above, and the half
158
172
  // that had no guard. A `maybe*` slot whose default is concrete can never *be*
159
173
  // unset — no config can spell `undefined` — so the unset state such a slot
@@ -161,8 +175,6 @@ export default function ConfigSlot(definition) {
161
175
  // and the branch reading it never runs. There is no symptom: the slot reads as
162
176
  // a perfectly good value everywhere.
163
177
  //
164
- // Last, so a promotable slot still gets the more specific message above.
165
- //
166
178
  // The way this happens is **inheritance**, which is why the type can't catch
167
179
  // it: a `maybe*` override of a plain base slot inherits the base's concrete
168
180
  // default through the definition spread, and the override's own literal looks
@@ -171,12 +183,28 @@ export default function ConfigSlot(definition) {
171
183
  if (defaultValue !== undefined && MAYBE_TYPES.has(type)) {
172
184
  throw new Error(`a "${type}" slot cannot have a concrete defaultValue (${JSON.stringify(defaultValue)}): unset is the state a maybe* slot exists for, and no config can spell undefined, so it would be unreachable. If this slot overrides a base slot, the base's defaultValue merged in — state 'defaultValue: undefined' to overwrite it. Otherwise use the non-maybe form of the type.`);
173
185
  }
174
- return types.stripDefault(types.union(JexlStringType,
175
- // `maybeStringEnum` is the only maybe type whose model comes from the
176
- // author: they write the plain vocabulary (`['fixed','grow','fit']`) and
177
- // the nullability is added here, so no enumeration has to carry a fake
178
- // member for the cascade's benefit.
179
- type === 'maybeStringEnum' ? types.maybe(valueModel) : valueModel), defaultValue);
186
+ const callback = !!definition.contextVariable?.length;
187
+ if (type === 'featureField' && callback) {
188
+ throw new Error('a "featureField" slot names a field the display reads per feature, and its jexl: expression is evaluated there, never called with a contextVariable. If this slot overrides a base callback slot, state \'contextVariable: undefined\'.');
189
+ }
190
+ if (!callback && isJexl(defaultValue)) {
191
+ throw new Error(`the defaultValue ${JSON.stringify(defaultValue)} is a jexl: callback, so the slot declares the contextVariable names it reads`);
192
+ }
193
+ const value = enumShaped(type, valueModel);
194
+ return types.stripDefault(callback
195
+ ? types.union(JexlStringType, value)
196
+ : type === 'featureField'
197
+ ? value
198
+ : refusingCallbacks(value), defaultValue);
199
+ }
200
+ // The author writes an enum slot's plain vocabulary, and the slot's shape
201
+ // around it is added here.
202
+ function enumShaped(type, model) {
203
+ return type === 'maybeStringEnum'
204
+ ? types.maybe(model)
205
+ : type === 'stringEnumArray'
206
+ ? types.array(model)
207
+ : model;
180
208
  }
181
209
  /**
182
210
  * New value when converting a fixed-value slot to a jexl callback. Already-
@@ -0,0 +1,14 @@
1
+ /**
2
+ * A shorthand snapshot with its location slots filled in: `derived` supplies
3
+ * what the shorthand implies, and any key the config spells out for itself
4
+ * wins.
5
+ *
6
+ * Spread the other way round — derived over the snapshot — a config naming both
7
+ * a `uri` and a location that is not the sibling of it, `{ uri: 'x.fa',
8
+ * faiLocation: { uri: 'custom.fai' } }`, silently lost the index it named to
9
+ * the one the shorthand invents. Every adapter's normalizer had its own copy of
10
+ * the spread, so the precedence had to be got right 30-odd times.
11
+ */
12
+ export declare function fillLocations(snap: Record<string, unknown>, derived: Record<string, unknown>): {
13
+ [x: string]: unknown;
14
+ };
@@ -0,0 +1,14 @@
1
+ /**
2
+ * A shorthand snapshot with its location slots filled in: `derived` supplies
3
+ * what the shorthand implies, and any key the config spells out for itself
4
+ * wins.
5
+ *
6
+ * Spread the other way round — derived over the snapshot — a config naming both
7
+ * a `uri` and a location that is not the sibling of it, `{ uri: 'x.fa',
8
+ * faiLocation: { uri: 'custom.fai' } }`, silently lost the index it named to
9
+ * the one the shorthand invents. Every adapter's normalizer had its own copy of
10
+ * the spread, so the precedence had to be got right 30-odd times.
11
+ */
12
+ export function fillLocations(snap, derived) {
13
+ return { ...derived, ...snap };
14
+ }
@@ -28,28 +28,14 @@
28
28
  * ```
29
29
  */
30
30
  export declare function FormatAboutConfigSchemaFactory(): import("./configurationSchema.ts").ConfigurationSchemaType<{
31
- /**
32
- * #slot formatAbout.config
33
- * callback returning an object of fields to merge over the config shown
34
- */
35
31
  readonly config: {
36
- readonly type: "frozen";
37
- readonly description: "formats configuration object in about dialog";
38
- readonly defaultValue: {};
39
- readonly contextVariable: ["config"];
32
+ type: "frozen";
33
+ } & {
34
+ defaultValue: unknown;
40
35
  };
41
- /**
42
- * #slot formatAbout.hideUris
43
- * leave file locations out of the About dialog, for a deployment that would
44
- * rather not show users where the data sits. Hides URIs and local paths
45
- * alike, drops the "Copy config" button, and suppresses the File info panel
46
- * — a BAM's `@SQ UR:` and `@PG CL:` lines are locations too. "Show ref
47
- * names" stays, since it exposes none. The two tiers are OR'd, so a
48
- * session-wide `true` cannot be turned back on by a track. It hides the
49
- * locations from the dialog only, not from `config.json`
50
- */
51
36
  readonly hideUris: {
52
- readonly type: "boolean";
53
- readonly defaultValue: false;
37
+ type: "boolean";
38
+ } & {
39
+ defaultValue: boolean;
54
40
  };
55
- }, import("./configurationSchema.ts").ConfigurationSchemaOptions<undefined, undefined>>;
41
+ }, import("./configurationSchema.ts").ConfigurationSchemaOptions<undefined, undefined, undefined, import("./requirements.ts").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>, any>>;