@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
@@ -2,17 +2,15 @@
2
2
  * Resolves the reference sequence an adapter reads from.
3
3
  *
4
4
  * **The assembly is the source, and a hand-written `sequenceAdapter` slot is an
5
- * anti-pattern.** `getFeatureAdapter` and `CoreGetRefNames` prime every feature
6
- * adapter's `sequenceAdapterConfig` from the assembly the track is displayed
7
- * against, so no config has to copy a sequence adapter into a track. The slot
8
- * survives as an escape hatch for reading some *other* sequence, and setting it
9
- * pins the track to that source even when the assembly's own sequence changes —
10
- * so it wins only when explicitly present, and `jbrowse validate` warns about it.
5
+ * anti-pattern.** A reference-reading adapter is built with the sequence of the
6
+ * assembly the request that created it named (dataAdapterCache), so no config
7
+ * has to copy a sequence adapter into a track. The slot survives as an escape
8
+ * hatch for reading some *other* sequence, and setting it pins the track to
9
+ * that source even when the assembly's own sequence changes — so it wins only
10
+ * when explicitly present, and `jbrowse validate` warns about it.
11
11
  *
12
12
  * In core rather than beside one of its callers because the field it reads is
13
- * `BaseAdapter`'s. Deliberately NOT in `BaseAdapter/index.ts`: that barrel is a
14
- * `@jbrowse/core/*` re-export, and a name published there is load-bearing ABI —
15
- * `abi.test.ts`/`abiBaseline.json` fails a removal from it.
13
+ * `BaseAdapter`'s.
16
14
  *
17
15
  * `configured` is passed in rather than read here so each adapter reads its own
18
16
  * slot through its own config type.
@@ -20,7 +18,7 @@
20
18
  export async function getSequenceSubAdapter(adapter, configured) {
21
19
  const config = configured ?? adapter.sequenceAdapterConfig;
22
20
  if (!config) {
23
- throw new Error('No sequence adapter available: either set the `sequenceAdapter` slot or display this track against an assembly that has one');
21
+ throw new Error(`${adapter.config.type} was built with no reference: the request that created it named no assembly, and no \`sequenceAdapter\` slot is set`);
24
22
  }
25
23
  const result = await adapter.getSubAdapter?.(config);
26
24
  if (!result) {
@@ -1,6 +1,6 @@
1
1
  import PluggableElementBase from './PluggableElementBase.ts';
2
2
  import type { AnyConfigurationSchemaType } from '../configuration/index.ts';
3
- import type { AnyAdapter } from '../data_adapters/BaseAdapter/index.ts';
3
+ import type { AdapterClassFor } from '../data_adapters/BaseAdapter/index.ts';
4
4
  export interface AdapterMetadata {
5
5
  category?: string;
6
6
  hiddenFromGUI?: boolean;
@@ -25,9 +25,9 @@ export interface AdapterMetadata {
25
25
  }
26
26
  /** Expand a raw adapter config snapshot (plain JSON) to its canonical form. */
27
27
  export type NormalizeSnapshot = (snap: Record<string, unknown>) => Record<string, unknown>;
28
- export default class AdapterType extends PluggableElementBase {
29
- getAdapterClass: () => Promise<AnyAdapter>;
30
- configSchema: AnyConfigurationSchemaType;
28
+ export default class AdapterType<SCHEMA extends AnyConfigurationSchemaType = any> extends PluggableElementBase {
29
+ getAdapterClass: () => Promise<AdapterClassFor<SCHEMA>>;
30
+ configSchema: SCHEMA;
31
31
  adapterCapabilities: string[];
32
32
  adapterMetadata?: AdapterMetadata;
33
33
  private declaredNormalizeSnapshot?;
@@ -42,7 +42,7 @@ export default class AdapterType extends PluggableElementBase {
42
42
  * declaring the shorthand once gets both. It used to be a second, separate
43
43
  * registration, and five in-tree adapters had only the schema half
44
44
  * (`MafTabixAdapter`, `BgzipMafAdapter`, `BgzipTaffyAdapter`,
45
- * `AllVsAllPAFAdapter`, `MCScanBlocksAdapter`) — which reads as working,
45
+ * `MultiGenomePAFAdapter`, `MCScanBlocksAdapter`) — which reads as working,
46
46
  * because loading such a config from a URL goes through the schema. Only
47
47
  * `normalizeAdapterSnapshots` consults *this*, so what broke was `localFiles`
48
48
  * in the embedded products: the shorthand stayed unexpanded, `uri` never
@@ -61,15 +61,15 @@ export default class AdapterType extends PluggableElementBase {
61
61
  locationKey?: string;
62
62
  constructor(stuff: {
63
63
  name: string;
64
- configSchema: AnyConfigurationSchemaType;
64
+ configSchema: SCHEMA;
65
65
  displayName?: string;
66
66
  adapterCapabilities?: string[];
67
67
  adapterMetadata?: AdapterMetadata;
68
68
  normalizeSnapshot?: NormalizeSnapshot;
69
69
  locationKey?: string;
70
70
  } & ({
71
- getAdapterClass: () => Promise<AnyAdapter>;
71
+ getAdapterClass: () => Promise<AdapterClassFor<SCHEMA>>;
72
72
  } | {
73
- AdapterClass: AnyAdapter;
73
+ AdapterClass: AdapterClassFor<SCHEMA>;
74
74
  }));
75
75
  }
@@ -17,7 +17,7 @@ export default class AdapterType extends PluggableElementBase {
17
17
  * declaring the shorthand once gets both. It used to be a second, separate
18
18
  * registration, and five in-tree adapters had only the schema half
19
19
  * (`MafTabixAdapter`, `BgzipMafAdapter`, `BgzipTaffyAdapter`,
20
- * `AllVsAllPAFAdapter`, `MCScanBlocksAdapter`) — which reads as working,
20
+ * `MultiGenomePAFAdapter`, `MCScanBlocksAdapter`) — which reads as working,
21
21
  * because loading such a config from a URL goes through the schema. Only
22
22
  * `normalizeAdapterSnapshots` consults *this*, so what broke was `localFiles`
23
23
  * in the embedded products: the shorthand stayed unexpanded, `uri` never
@@ -1,19 +1,43 @@
1
- import PluggableElementBase from './PluggableElementBase.ts';
1
+ import LazyStateModelElement from './LazyStateModelElement.ts';
2
2
  import type { AnyConfigurationSchemaType } from '../configuration/index.ts';
3
+ import type { PlotExample } from '../configuration/plot.ts';
3
4
  import type { AnyReactComponentType } from '../util/index.ts';
4
5
  import type { IAnyModelType } from '@jbrowse/mobx-state-tree';
5
- export default class DisplayType extends PluggableElementBase {
6
- stateModel: IAnyModelType;
6
+ export type DisplayEntry = Record<string, unknown>;
7
+ /**
8
+ * A display type retired into this one. Configs and sessions naming it load
9
+ * as this display, the entry rewritten by `migrate` first: the settings the
10
+ * old type's picture needs, and its own spelling of any slot value, which
11
+ * `values` lists by slot so the published JSON schema and `jbrowse validate`
12
+ * admit it. A session track's entry keeps the retired type after its lifted
13
+ * settings are folded onto it, so `migrate` must leave an entry it already
14
+ * rewrote as it found it.
15
+ */
16
+ export interface RetiredDisplayType {
17
+ type: string;
18
+ migrate?: (entry: DisplayEntry) => DisplayEntry;
19
+ values?: Readonly<Record<string, readonly unknown[]>>;
20
+ }
21
+ /**
22
+ * Display-instance props an old session carries that are config slots now.
23
+ * `lift` answers the slots they become, which the session migration writes
24
+ * into the track's config; `keys` lists them, so the instance sheds them and
25
+ * `jbrowse validate` reports them as stale rather than dead.
26
+ */
27
+ export interface RetiredDisplayState {
28
+ keys: readonly string[];
29
+ lift: (instance: DisplayEntry) => DisplayEntry;
30
+ }
31
+ export default class DisplayType extends LazyStateModelElement {
32
+ protected readonly group = "display";
7
33
  configSchema: AnyConfigurationSchemaType;
8
34
  ReactComponent: AnyReactComponentType;
9
35
  /**
10
- * The track type the display is associated with
36
+ * The track type the display attaches to, or several: a display that reads
37
+ * a field any feature adapter serves (the Manhattan plot's `score`) belongs
38
+ * to every track type whose adapters serve it.
11
39
  */
12
- trackType: string;
13
- subDisplay?: {
14
- type: string;
15
- [key: string]: unknown;
16
- };
40
+ trackType: string | string[];
17
41
  /**
18
42
  * The view type the display is associated with
19
43
  */
@@ -22,19 +46,32 @@ export default class DisplayType extends PluggableElementBase {
22
46
  * Help text describing the display type
23
47
  */
24
48
  helpText?: string;
49
+ /**
50
+ * What the track's adapter must declare it can answer for this display to
51
+ * be offered on the track: a graph display draws only from an adapter that
52
+ * cuts a subgraph (`['getSubgraph']`), so a track whose adapter cannot is
53
+ * not given one.
54
+ */
55
+ adapterCapabilities: readonly string[];
56
+ retiredTypes: readonly RetiredDisplayType[];
57
+ retiredState?: RetiredDisplayState;
58
+ /**
59
+ * Worked examples of this display's plot, which "Edit plot..." offers as
60
+ * buttons. Each has to pass the display's config schema.
61
+ */
62
+ plotExamples: readonly PlotExample[];
25
63
  constructor(stuff: {
26
64
  name: string;
27
- stateModel: IAnyModelType;
28
- trackType: string;
65
+ stateModel: IAnyModelType | (() => Promise<IAnyModelType>);
66
+ trackType: string | string[];
29
67
  viewType: string;
30
68
  displayName?: string;
31
- subDisplay?: {
32
- type: string;
33
- [key: string]: unknown;
34
- };
35
69
  configSchema: AnyConfigurationSchemaType;
36
70
  ReactComponent: AnyReactComponentType;
37
71
  helpText?: string;
38
- aliases?: string[];
72
+ adapterCapabilities?: readonly string[];
73
+ retiredTypes?: readonly RetiredDisplayType[];
74
+ retiredState?: RetiredDisplayState;
75
+ plotExamples?: readonly PlotExample[];
39
76
  });
40
77
  }
@@ -1,17 +1,14 @@
1
- import PluggableElementBase from './PluggableElementBase.js';
2
- export default class DisplayType extends PluggableElementBase {
3
- stateModel;
1
+ import LazyStateModelElement from './LazyStateModelElement.js';
2
+ export default class DisplayType extends LazyStateModelElement {
3
+ group = 'display';
4
4
  configSchema;
5
5
  ReactComponent;
6
6
  /**
7
- * The track type the display is associated with
7
+ * The track type the display attaches to, or several: a display that reads
8
+ * a field any feature adapter serves (the Manhattan plot's `score`) belongs
9
+ * to every track type whose adapters serve it.
8
10
  */
9
11
  trackType;
10
- /*
11
- * Indicates that this display type can be a "sub-display" of another type of
12
- * display, e.g. in AlignmentsDisplay, has Pileup and SNPCoverage subDisplays
13
- */
14
- subDisplay;
15
12
  /**
16
13
  * The view type the display is associated with
17
14
  */
@@ -20,14 +17,33 @@ export default class DisplayType extends PluggableElementBase {
20
17
  * Help text describing the display type
21
18
  */
22
19
  helpText;
20
+ /**
21
+ * What the track's adapter must declare it can answer for this display to
22
+ * be offered on the track: a graph display draws only from an adapter that
23
+ * cuts a subgraph (`['getSubgraph']`), so a track whose adapter cannot is
24
+ * not given one.
25
+ */
26
+ adapterCapabilities;
27
+ retiredTypes;
28
+ retiredState;
29
+ /**
30
+ * Worked examples of this display's plot, which "Edit plot..." offers as
31
+ * buttons. Each has to pass the display's config schema.
32
+ */
33
+ plotExamples;
23
34
  constructor(stuff) {
24
- super(stuff);
25
- this.stateModel = stuff.stateModel;
26
- this.subDisplay = stuff.subDisplay;
35
+ super({
36
+ ...stuff,
37
+ aliases: stuff.retiredTypes?.map(r => r.type),
38
+ });
27
39
  this.configSchema = stuff.configSchema;
28
40
  this.ReactComponent = stuff.ReactComponent;
29
41
  this.trackType = stuff.trackType;
30
42
  this.viewType = stuff.viewType;
31
43
  this.helpText = stuff.helpText;
44
+ this.adapterCapabilities = stuff.adapterCapabilities ?? [];
45
+ this.retiredTypes = stuff.retiredTypes ?? [];
46
+ this.retiredState = stuff.retiredState;
47
+ this.plotExamples = stuff.plotExamples ?? [];
32
48
  }
33
49
  }
@@ -0,0 +1,32 @@
1
+ import PluggableElementBase from './PluggableElementBase.ts';
2
+ import type { IAnyModelType } from '@jbrowse/mobx-state-tree';
3
+ /**
4
+ * A pluggable element whose state model may arrive through a dynamic import.
5
+ * Code that can run before any instance exists — session preloading, pruning,
6
+ * union membership — checks `isStateModelLoaded` before reading `stateModel`.
7
+ */
8
+ export default abstract class LazyStateModelElement extends PluggableElementBase {
9
+ protected abstract readonly group: 'view' | 'display';
10
+ abstract ReactComponent: unknown;
11
+ private loadedStateModel?;
12
+ private stateModelPromise?;
13
+ private pendingStateModelExtensions;
14
+ stateModelLoader?: () => Promise<IAnyModelType>;
15
+ onStateModelLoaded?: () => void;
16
+ constructor(stuff: {
17
+ name: string;
18
+ displayName?: string;
19
+ aliases?: string[];
20
+ stateModel: IAnyModelType | (() => Promise<IAnyModelType>);
21
+ });
22
+ get stateModel(): IAnyModelType;
23
+ set stateModel(stateModel: IAnyModelType);
24
+ get isStateModelLoaded(): boolean;
25
+ assertStateModelLoaded(): void;
26
+ /**
27
+ * Also starts the component's download, which rendering would otherwise
28
+ * request only after the model exists and the element mounts.
29
+ */
30
+ loadStateModel(): Promise<IAnyModelType>;
31
+ extendStateModel(extend: (stateModel: IAnyModelType) => IAnyModelType): void;
32
+ }
@@ -0,0 +1,77 @@
1
+ import { preloadComponent } from '../util/preloadComponent.js';
2
+ import PluggableElementBase from './PluggableElementBase.js';
3
+ /**
4
+ * A pluggable element whose state model may arrive through a dynamic import.
5
+ * Code that can run before any instance exists — session preloading, pruning,
6
+ * union membership — checks `isStateModelLoaded` before reading `stateModel`.
7
+ */
8
+ export default class LazyStateModelElement extends PluggableElementBase {
9
+ loadedStateModel;
10
+ stateModelPromise;
11
+ pendingStateModelExtensions = [];
12
+ // named `stateModel` + `Loader` because pluggableMstType probes
13
+ // `${fieldName}Loader` generically
14
+ stateModelLoader;
15
+ // set by PluginManager.addElementType: runs Core-extendPluggableElement once
16
+ // the loader resolves, so a callback reading `stateModel` sees a model
17
+ onStateModelLoaded;
18
+ constructor(stuff) {
19
+ super(stuff);
20
+ if (typeof stuff.stateModel === 'function') {
21
+ this.stateModelLoader = stuff.stateModel;
22
+ }
23
+ else {
24
+ this.loadedStateModel = stuff.stateModel;
25
+ }
26
+ }
27
+ // Throws before the loader resolves, so a plugin composing an unloaded
28
+ // model fails here rather than as an opaque MST error.
29
+ get stateModel() {
30
+ this.assertStateModelLoaded();
31
+ return this.loadedStateModel;
32
+ }
33
+ set stateModel(stateModel) {
34
+ this.loadedStateModel = stateModel;
35
+ }
36
+ get isStateModelLoaded() {
37
+ return this.loadedStateModel !== undefined;
38
+ }
39
+ assertStateModelLoaded() {
40
+ if (this.loadedStateModel === undefined) {
41
+ const getter = this.group === 'view' ? 'getViewType' : 'getDisplayType';
42
+ throw new Error(`state model for ${this.group} type ${this.name} is not loaded yet — await ${getter}('${this.name}').loadStateModel() first`);
43
+ }
44
+ }
45
+ /**
46
+ * Also starts the component's download, which rendering would otherwise
47
+ * request only after the model exists and the element mounts.
48
+ */
49
+ loadStateModel() {
50
+ preloadComponent(this.ReactComponent);
51
+ if (this.loadedStateModel !== undefined) {
52
+ return Promise.resolve(this.loadedStateModel);
53
+ }
54
+ if (!this.stateModelLoader) {
55
+ throw new Error(`${this.group} type ${this.name} has neither a state model nor a loader`);
56
+ }
57
+ this.stateModelPromise ??= this.stateModelLoader().then(loaded => {
58
+ let stateModel = loaded;
59
+ for (const extend of this.pendingStateModelExtensions) {
60
+ stateModel = extend(stateModel);
61
+ }
62
+ this.pendingStateModelExtensions = [];
63
+ this.loadedStateModel = stateModel;
64
+ this.onStateModelLoaded?.();
65
+ return this.stateModel;
66
+ });
67
+ return this.stateModelPromise;
68
+ }
69
+ extendStateModel(extend) {
70
+ if (this.loadedStateModel !== undefined) {
71
+ this.loadedStateModel = extend(this.loadedStateModel);
72
+ }
73
+ else {
74
+ this.pendingStateModelExtensions.push(extend);
75
+ }
76
+ }
77
+ }
@@ -6,11 +6,9 @@ export default abstract class PluggableElementBase {
6
6
  * or config names one. Each entry is a legacy `type` value previously used.
7
7
  *
8
8
  * Lets an element own its renames instead of a central migration file, so a
9
- * plugin can be renamed out of tree. A per-element `preProcessSnapshot` hook
10
- * then handles any property migrations within the renamed type; for a
11
- * migration that rewrites the value of an existing constrained slot (an enum
12
- * rename, a type narrow) use `addDisplayConfigMigration` instead — see that
13
- * helper for why.
9
+ * plugin can be renamed out of tree. A display declares its renames as
10
+ * `retiredTypes`, which also say what the old type's entries become, and
11
+ * answers these from them.
14
12
  */
15
13
  aliases?: string[];
16
14
  constructor(args?: {
@@ -6,11 +6,9 @@ export default class PluggableElementBase {
6
6
  * or config names one. Each entry is a legacy `type` value previously used.
7
7
  *
8
8
  * Lets an element own its renames instead of a central migration file, so a
9
- * plugin can be renamed out of tree. A per-element `preProcessSnapshot` hook
10
- * then handles any property migrations within the renamed type; for a
11
- * migration that rewrites the value of an existing constrained slot (an enum
12
- * rename, a type narrow) use `addDisplayConfigMigration` instead — see that
13
- * helper for why.
9
+ * plugin can be renamed out of tree. A display declares its renames as
10
+ * `retiredTypes`, which also say what the old type's entries become, and
11
+ * answers these from them.
14
12
  */
15
13
  aliases;
16
14
  constructor(args) {
@@ -71,6 +71,16 @@ export default abstract class RpcMethodType<MethodName extends string = string>
71
71
  pluginManager: PluginManager;
72
72
  constructor(pluginManager: PluginManager);
73
73
  serializeArguments(args: object): Promise<Record<string, unknown>>;
74
+ /**
75
+ * The reference sequence of the genome a call names in `assemblyName`, as a
76
+ * sibling of `adapterConfig`. The worker keys and builds a reference-reading
77
+ * adapter with it (dataAdapterCache), and this is the one place it comes
78
+ * from: a per-genome renaming method's regions have already become its
79
+ * `assemblyName` by the time super is reached, a header call names its own,
80
+ * and a comparative method names none. Ahead of the location walk, which
81
+ * converts and authorizes what the worker opens.
82
+ */
83
+ private attachReference;
74
84
  protected renameRegions<T extends RenameRegionsArgs>(args: T): Promise<T>;
75
85
  /**
76
86
  * The root model to resolve internet accounts against, but only while it is
@@ -109,7 +119,7 @@ export default abstract class RpcMethodType<MethodName extends string = string>
109
119
  * is not cosmetic, because the two handles every method receives are the two
110
120
  * an author who did not write them down never forwards.
111
121
  *
112
- * `CoreGetExportData` is the worked example: the stop token and status
122
+ * `CoreGetExportData` is the worked example: the signal and status
113
123
  * callback arrived on every call and its `execute` destructured neither, so
114
124
  * the Save-track-data dialog's cancel did nothing and its progress never moved
115
125
  * on the adapter-export branch. Nothing was mistyped — the fields simply were
@@ -1,4 +1,6 @@
1
1
  import { isAlive, isStateTreeNode } from '@jbrowse/mobx-state-tree';
2
+ import { untracked } from 'mobx';
3
+ import { getSequenceAdapterConfigByName } from '../assemblyManager/getSequenceAdapterConfig.js';
2
4
  import { renameRegionsIfNeeded } from '../util/index.js';
3
5
  import { resolveUriLocation } from '../util/io/index.js';
4
6
  import { unwrapRpcResult } from '../util/rpc.js';
@@ -64,17 +66,12 @@ function isCloneable(thing) {
64
66
  }
65
67
  // Values that structuredClone handles natively and that must pass through
66
68
  // ownArgs unchanged: `Object.entries` on them yields `[]`, so naive cloning
67
- // would collapse them to plain `{}` (e.g. a SharedArrayBuffer-backed stop token
68
- // would silently stop working, a typed array would lose its data).
69
+ // would collapse them to plain `{}` (a typed array would lose its data).
69
70
  function isStructuredClonePassthrough(thing) {
70
71
  return (thing instanceof File ||
71
72
  thing instanceof Blob ||
72
73
  thing instanceof ArrayBuffer ||
73
- // SharedArrayBuffer is not an ArrayBuffer subclass; without this it
74
- // collapses to {} and SAB-based stop tokens silently stop working. Nothing
75
- // we ship mints one (see `stopToken.ts`, "Which path runs where"), so this
76
- // arm is correctness for an isolated embedding host and nothing else —
77
- // keep it, but it is not a hot path and never was.
74
+ // not an ArrayBuffer subclass
78
75
  (typeof SharedArrayBuffer !== 'undefined' &&
79
76
  thing instanceof SharedArrayBuffer) ||
80
77
  ArrayBuffer.isView(thing) ||
@@ -96,7 +93,7 @@ function isStructuredClonePassthrough(thing) {
96
93
  // DataCloneError on every call a display makes.
97
94
  //
98
95
  // So: non-cloneable leaves (functions, Errors) and structured-clone natives
99
- // (typed arrays, Blobs, the SAB stop token...) pass through by reference
96
+ // (typed arrays, Blobs...) pass through by reference
100
97
  // unchanged. A genuinely non-cloneable value that leaked in by mistake is still
101
98
  // caught — at the worker postMessage boundary, which is a real structuredClone.
102
99
  function ownArgs(thing, seen = new WeakMap()) {
@@ -171,12 +168,31 @@ export default class RpcMethodType extends PluggableElementBase {
171
168
  this.pluginManager = pluginManager;
172
169
  }
173
170
  async serializeArguments(args) {
174
- const augmented = await this.augmentLocationObjects(args);
171
+ const augmented = await this.augmentLocationObjects(this.attachReference(args));
175
172
  return {
176
173
  ...augmented,
177
174
  blobMap: getBlobMap(),
178
175
  };
179
176
  }
177
+ /**
178
+ * The reference sequence of the genome a call names in `assemblyName`, as a
179
+ * sibling of `adapterConfig`. The worker keys and builds a reference-reading
180
+ * adapter with it (dataAdapterCache), and this is the one place it comes
181
+ * from: a per-genome renaming method's regions have already become its
182
+ * `assemblyName` by the time super is reached, a header call names its own,
183
+ * and a comparative method names none. Ahead of the location walk, which
184
+ * converts and authorizes what the worker opens.
185
+ */
186
+ attachReference(args) {
187
+ const { assemblyName } = args;
188
+ const assemblyManager = this.pluginManager.rootModel?.session?.assemblyManager;
189
+ if (!assemblyName || !assemblyManager) {
190
+ return args;
191
+ }
192
+ // eslint-disable-next-line no-restricted-syntax -- EFFECT INPUT: the reference only rides along on the RPC this call sends; the autorun that reached here (the synteny swap check) branches on the call's result, not on this read
193
+ const sequenceAdapter = untracked(() => getSequenceAdapterConfigByName(assemblyManager, assemblyName));
194
+ return sequenceAdapter ? { ...args, sequenceAdapter } : args;
195
+ }
180
196
  async renameRegions(args) {
181
197
  const { rootModel } = this.pluginManager;
182
198
  return renameRegionsIfNeeded(rootModel.session.assemblyManager, args);
@@ -2,7 +2,6 @@ import RpcMethodTypeWithRenameRegions from './RpcMethodTypeWithRenameRegions.ts'
2
2
  import SerializableFilterChain from './renderers/util/serializableFilterChain.ts';
3
3
  import type { Region } from '../util/index.ts';
4
4
  import type { StatusCallback } from '../util/progress.ts';
5
- import type { StopToken } from '../util/stopToken.ts';
6
5
  interface FilterRenameArgs {
7
6
  sessionId: string;
8
7
  regions?: Region[];
@@ -14,7 +13,7 @@ export default abstract class RpcMethodTypeWithFiltersAndRenameRegions<MethodNam
14
13
  filters?: unknown;
15
14
  }): Promise<T>;
16
15
  serializeArguments(args: FilterRenameArgs & {
17
- stopToken?: StopToken;
16
+ signal?: AbortSignal;
18
17
  statusCallback?: StatusCallback;
19
18
  }): Promise<Record<string, unknown>>;
20
19
  }
@@ -1,18 +1,18 @@
1
1
  import PluggableElementBase from './PluggableElementBase.ts';
2
2
  import type { AnyConfigurationSchemaType } from '../configuration/index.ts';
3
- import type { AnyAdapter } from '../data_adapters/BaseAdapter/index.ts';
4
- export default class TextSearchAdapterType extends PluggableElementBase {
5
- getAdapterClass: () => Promise<AnyAdapter>;
6
- configSchema: AnyConfigurationSchemaType;
3
+ import type { AdapterClassFor } from '../data_adapters/BaseAdapter/index.ts';
4
+ export default class TextSearchAdapterType<SCHEMA extends AnyConfigurationSchemaType = any> extends PluggableElementBase {
5
+ getAdapterClass: () => Promise<AdapterClassFor<SCHEMA>>;
6
+ configSchema: SCHEMA;
7
7
  description?: string;
8
8
  constructor(stuff: {
9
9
  name: string;
10
- configSchema: AnyConfigurationSchemaType;
10
+ configSchema: SCHEMA;
11
11
  displayName?: string;
12
12
  description?: string;
13
13
  } & ({
14
- getAdapterClass: () => Promise<AnyAdapter>;
14
+ getAdapterClass: () => Promise<AdapterClassFor<SCHEMA>>;
15
15
  } | {
16
- AdapterClass: AnyAdapter;
16
+ AdapterClass: AdapterClassFor<SCHEMA>;
17
17
  }));
18
18
  }
@@ -1,4 +1,5 @@
1
- import PluggableElementBase from './PluggableElementBase.ts';
1
+ import LazyStateModelElement from './LazyStateModelElement.ts';
2
+ import type { LaunchKeyRegistration } from '../util/withLaunchInput.ts';
2
3
  import type DisplayType from './DisplayType.ts';
3
4
  import type { IAnyModelType, IAnyStateTreeNode } from '@jbrowse/mobx-state-tree';
4
5
  import type React from 'react';
@@ -10,21 +11,36 @@ type ViewComponentType = React.LazyExoticComponent<BasicView> | BasicView;
10
11
  interface ViewMetadata {
11
12
  hiddenFromGUI?: boolean;
12
13
  }
13
- export default class ViewType extends PluggableElementBase {
14
+ export default class ViewType extends LazyStateModelElement {
15
+ protected readonly group = "view";
14
16
  ReactComponent: ViewComponentType;
15
- stateModel: IAnyModelType;
17
+ launchKeys?: LaunchKeyRegistration<unknown, string>;
16
18
  displayTypes: DisplayType[];
17
19
  viewMetadata: ViewMetadata;
18
20
  extendedName?: string;
19
21
  constructor(stuff: {
20
22
  name: string;
21
23
  displayName?: string;
22
- stateModel: IAnyModelType;
24
+ stateModel: IAnyModelType | (() => Promise<IAnyModelType>);
25
+ launchKeys?: LaunchKeyRegistration<unknown, string>;
23
26
  extendedName?: string;
24
27
  viewMetadata?: ViewMetadata;
25
28
  ReactComponent: ViewComponentType;
26
29
  aliases?: string[];
27
30
  });
31
+ /**
32
+ * Every key this view accepts written on the view object — its declared MST
33
+ * properties plus the launch keys above. `undefined` for a view that
34
+ * registers none: nothing there says which of its launcher's arguments are
35
+ * settings, so a caller must classify nothing rather than call them all typos.
36
+ * Also `undefined` while a lazily registered state model is not loaded yet,
37
+ * for the same reason: nothing is known, so nothing is a typo.
38
+ *
39
+ * This is the set `withLaunchInput`'s partition reads off the same two
40
+ * declarations, published for the surfaces that never build a view snapshot —
41
+ * a session spec launches straight through `LaunchView-<type>`.
42
+ */
43
+ get acceptedKeys(): string[] | undefined;
28
44
  addDisplayType(display: DisplayType): void;
29
45
  }
30
46
  export {};
@@ -1,7 +1,11 @@
1
- import PluggableElementBase from './PluggableElementBase.js';
2
- export default class ViewType extends PluggableElementBase {
1
+ import LazyStateModelElement from './LazyStateModelElement.js';
2
+ export default class ViewType extends LazyStateModelElement {
3
+ group = 'view';
3
4
  ReactComponent;
4
- stateModel;
5
+ // What `withLaunchInput` partitioned out of this view's snapshots, published
6
+ // beside the model so an out-of-tree plugin, the doc generator and the
7
+ // validator read one declaration rather than each keeping a list.
8
+ launchKeys;
5
9
  displayTypes = [];
6
10
  viewMetadata = {};
7
11
  // extendedName can be used for when you extend a given view type, and want
@@ -16,9 +20,33 @@ export default class ViewType extends PluggableElementBase {
16
20
  super(stuff);
17
21
  this.ReactComponent = stuff.ReactComponent;
18
22
  this.viewMetadata = stuff.viewMetadata ?? {};
19
- this.stateModel = stuff.stateModel;
23
+ this.launchKeys = stuff.launchKeys;
20
24
  this.extendedName = stuff.extendedName;
21
25
  }
26
+ /**
27
+ * Every key this view accepts written on the view object — its declared MST
28
+ * properties plus the launch keys above. `undefined` for a view that
29
+ * registers none: nothing there says which of its launcher's arguments are
30
+ * settings, so a caller must classify nothing rather than call them all typos.
31
+ * Also `undefined` while a lazily registered state model is not loaded yet,
32
+ * for the same reason: nothing is known, so nothing is a typo.
33
+ *
34
+ * This is the set `withLaunchInput`'s partition reads off the same two
35
+ * declarations, published for the surfaces that never build a view snapshot —
36
+ * a session spec launches straight through `LaunchView-<type>`.
37
+ */
38
+ get acceptedKeys() {
39
+ const properties = this.isStateModelLoaded
40
+ ? this.stateModel.properties
41
+ : undefined;
42
+ return this.launchKeys && properties
43
+ ? [
44
+ ...Object.keys(properties),
45
+ ...Object.keys(this.launchKeys.keys),
46
+ ...this.launchKeys.passThrough,
47
+ ]
48
+ : undefined;
49
+ }
22
50
  addDisplayType(display) {
23
51
  this.displayTypes.push(display);
24
52
  }
@@ -14,6 +14,11 @@ export default class WidgetType extends PluggableElementBase {
14
14
  ReactComponent: WidgetComponentType;
15
15
  stateModel: IAnyModelType;
16
16
  helpText?: React.ReactNode;
17
+ /**
18
+ * Closing the widget removes it from the session rather than hiding it, so
19
+ * what it holds stops riding along in every saved and shared session (#3538)
20
+ */
21
+ discardOnClose: boolean;
17
22
  constructor(stuff: {
18
23
  name: string;
19
24
  heading?: string;
@@ -22,6 +27,7 @@ export default class WidgetType extends PluggableElementBase {
22
27
  stateModel: IAnyModelType;
23
28
  ReactComponent: WidgetComponentType;
24
29
  helpText?: React.ReactNode;
30
+ discardOnClose?: boolean;
25
31
  });
26
32
  }
27
33
  export {};