@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
@@ -6,6 +6,11 @@ export default class WidgetType extends PluggableElementBase {
6
6
  ReactComponent;
7
7
  stateModel;
8
8
  helpText;
9
+ /**
10
+ * Closing the widget removes it from the session rather than hiding it, so
11
+ * what it holds stops riding along in every saved and shared session (#3538)
12
+ */
13
+ discardOnClose;
9
14
  constructor(stuff) {
10
15
  super(stuff);
11
16
  this.heading = stuff.heading;
@@ -14,5 +19,6 @@ export default class WidgetType extends PluggableElementBase {
14
19
  this.stateModel = stuff.stateModel;
15
20
  this.ReactComponent = stuff.ReactComponent;
16
21
  this.helpText = stuff.helpText;
22
+ this.discardOnClose = stuff.discardOnClose ?? false;
17
23
  }
18
24
  }
@@ -12,9 +12,10 @@ type ModelOf<T> = T extends IAnyType ? Instance<T> : never;
12
12
  /**
13
13
  * The methods on a model that return a menu. Derived from the model rather than
14
14
  * listed, which is what makes a renamed or retired method a compile error at
15
- * the call site: there are six of them across views and displays (`menuItems`,
15
+ * the call site: there are seven of them across views and displays (`menuItems`,
16
16
  * `trackMenuItems`, `contextMenuItems`, `rubberBandMenuItems`,
17
- * `rubberBandLaunchMenuItems`, `highlightMenuItems`), they are a convention
17
+ * `rubberBandLaunchMenuItems`, `highlightMenuItems`, `highlightsSubMenuItems`),
18
+ * they are a convention
18
19
  * rather than one declared interface, and a contribution to a name the model no
19
20
  * longer has is otherwise silent.
20
21
  *
@@ -5,8 +5,7 @@ import type { IAnyModelType } from '@jbrowse/mobx-state-tree';
5
5
  * Replace a view type's state model with an extended one, e.g. to add a menu
6
6
  * item to `LinearGenomeView`. Pass an array to extend several at once, which is
7
7
  * how a contribution reaches a family: the tree spells a display family as a
8
- * shared mixin set rather than a chain, so there is no parent to name — see
9
- * `reference/REJECTED_IDEAS.md`, "Give a pluggable element an `extendsType`".
8
+ * shared mixin set rather than a chain, so there is no parent to name, which is why an `extendsType` was declined.
10
9
  *
11
10
  * `Core-extendPluggableElement` fires for every pluggable element there is —
12
11
  * adapters, widgets, RPC methods, all of them — so a callback written against
@@ -14,8 +14,7 @@ function namesOf(name) {
14
14
  * Replace a view type's state model with an extended one, e.g. to add a menu
15
15
  * item to `LinearGenomeView`. Pass an array to extend several at once, which is
16
16
  * how a contribution reaches a family: the tree spells a display family as a
17
- * shared mixin set rather than a chain, so there is no parent to name — see
18
- * `reference/REJECTED_IDEAS.md`, "Give a pluggable element an `extendsType`".
17
+ * shared mixin set rather than a chain, so there is no parent to name, which is why an `extendsType` was declined.
19
18
  *
20
19
  * `Core-extendPluggableElement` fires for every pluggable element there is —
21
20
  * adapters, widgets, RPC methods, all of them — so a callback written against
@@ -45,8 +44,12 @@ export function extendViewType(pluginManager, name, extend) {
45
44
  // point of the signature; widening it once here costs nothing, since
46
45
  // the only operation is handing the model to `extend` and storing what
47
46
  // comes back.
47
+ //
48
+ // Routed through extendStateModel rather than assigning `.stateModel`
49
+ // directly so a view registered with a lazy loader queues the
50
+ // extension and composes it when the loader resolves.
48
51
  const view = element;
49
- view.stateModel = widen(extend)(view.stateModel);
52
+ view.extendStateModel(widen(extend));
50
53
  }
51
54
  return element;
52
55
  });
@@ -59,9 +62,10 @@ export function extendDisplayType(pluginManager, name, extend) {
59
62
  const names = namesOf(name);
60
63
  pluginManager.addToExtensionPoint('Core-extendPluggableElement', (element, props) => {
61
64
  if (props.group === 'display' && names.has(element.name)) {
62
- // widened for the reason in extendViewType
65
+ // widened for the reason in extendViewType; routed through
66
+ // extendStateModel so a lazy registration queues the extension
63
67
  const display = element;
64
- display.stateModel = widen(extend)(display.stateModel);
68
+ display.extendStateModel(widen(extend));
65
69
  }
66
70
  return element;
67
71
  });
@@ -8,7 +8,7 @@ import type TextSearchAdapterType from './TextSearchAdapterType.ts';
8
8
  import type TrackType from './TrackType.ts';
9
9
  import type ViewType from './ViewType.ts';
10
10
  import type WidgetType from './WidgetType.ts';
11
- export { BaseConnectionModelFactory, BaseDisplay, type BaseDisplayModel, type BaseDisplayStateModel, BaseInternetAccountConfig, type BaseInternetAccountModel, type BaseInternetAccountStateModel, type BaseTrackConfig, type BaseTrackModel, type BaseTrackStateModel, BaseViewModel, type DisplayModel, type FileTypeExporter, HighlightsMixin, type IBaseViewModel, InternetAccount, addDisplayConfigMigration, baseConnectionConfig, createBaseTrackConfig, createBaseTrackModel, preprocessTrackConfigSnapshot, type TrackConfigSnapshot, trackConfigActions, } from './models/index.ts';
11
+ export { BaseConnectionModelFactory, BaseDisplay, type BaseDisplayModel, type BaseDisplayStateModel, BaseInternetAccountConfig, type BaseInternetAccountModel, type BaseInternetAccountStateModel, type BaseTrackConfig, type BaseTrackModel, type BaseTrackStateModel, BaseViewModel, type DisplayModel, type FileTypeExporter, type IBaseViewModel, InternetAccount, baseConnectionConfig, createBaseTrackConfig, createBaseTrackModel, preprocessTrackConfigSnapshot, type TrackConfigSnapshot, } from './models/index.ts';
12
12
  export type PluggableElementType = AdapterType | ConnectionType | WidgetType | TrackType | DisplayType | ViewType | RpcMethodType | InternetAccountType | TextSearchAdapterType | AddTrackWorkflowType;
13
13
  export { extendDisplayType, extendViewType } from './extendElementType.ts';
14
14
  export { addDisplayMenuItems, addViewMenuItems } from './addMenuItems.ts';
@@ -18,6 +18,7 @@ export { default as TrackType } from './TrackType.ts';
18
18
  export { default as WidgetType } from './WidgetType.ts';
19
19
  export { default as ViewType } from './ViewType.ts';
20
20
  export { default as DisplayType } from './DisplayType.ts';
21
+ export type { DisplayEntry, RetiredDisplayState, RetiredDisplayType, } from './DisplayType.ts';
21
22
  export { default as InternetAccountType } from './InternetAccountType.ts';
22
23
  export { default as RpcMethodType } from './RpcMethodType.ts';
23
24
  export { default as RpcMethodTypeWithRenameRegion } from './RpcMethodTypeWithRenameRegion.ts';
@@ -1,4 +1,4 @@
1
- export { BaseConnectionModelFactory, BaseDisplay, BaseInternetAccountConfig, BaseViewModel, HighlightsMixin, InternetAccount, addDisplayConfigMigration, baseConnectionConfig, createBaseTrackConfig, createBaseTrackModel, preprocessTrackConfigSnapshot, trackConfigActions, } from './models/index.js';
1
+ export { BaseConnectionModelFactory, BaseDisplay, BaseInternetAccountConfig, BaseViewModel, InternetAccount, baseConnectionConfig, createBaseTrackConfig, createBaseTrackModel, preprocessTrackConfigSnapshot, } from './models/index.js';
2
2
  export { extendDisplayType, extendViewType } from './extendElementType.js';
3
3
  export { addDisplayMenuItems, addViewMenuItems } from './addMenuItems.js';
4
4
  export { default as AdapterType } from './AdapterType.js';
@@ -9,15 +9,8 @@ export { default as ViewType } from './ViewType.js';
9
9
  export { default as DisplayType } from './DisplayType.js';
10
10
  export { default as InternetAccountType } from './InternetAccountType.js';
11
11
  export { default as RpcMethodType } from './RpcMethodType.js';
12
- // The two region-renaming bases, which nearly every RPC method that takes a
13
- // viewport wants — without them an external plugin deep-imports the file and
14
- // bundles its own copy, which is only harmless because RPC methods are keyed by
15
- // name (PluginManager.rpcMethods) and nothing does an instanceof.
16
12
  // `RpcMethodTypeWithFiltersAndRenameRegions` is deliberately not here: it pulls
17
- // in `renderers/util/serializableFilterChain`, and RFC-001 §9 deletes
18
- // `pluggableElementTypes/renderers/*` after the legacy renderer migration. This
19
- // barrel is served as ABI, so exporting it would pin a directory we intend to
20
- // remove.
13
+ // in `renderers/util/serializableFilterChain`, and this barrel is served as ABI.
21
14
  export { default as RpcMethodTypeWithRenameRegion } from './RpcMethodTypeWithRenameRegion.js';
22
15
  export { default as RpcMethodTypeWithRenameRegions } from './RpcMethodTypeWithRenameRegions.js';
23
16
  export { default as AddTrackWorkflowType } from './AddTrackWorkflowType.js';
@@ -8,22 +8,32 @@ declare function stateModelFactory(pluginManager: PluginManager): import("@jbrow
8
8
  /**
9
9
  * #property
10
10
  */
11
- tracks: import("@jbrowse/mobx-state-tree").IArrayType<import("@jbrowse/mobx-state-tree").IAnyType>;
11
+ tracks: import("@jbrowse/mobx-state-tree").IArrayType<import("@jbrowse/core/PluginManager").PluggableConfigSchemaType>;
12
12
  /**
13
13
  * #property
14
14
  */
15
15
  configuration: import("../../configuration/configurationSchema.ts").IConfigurationReference<import("../../configuration/configurationSchema.ts").ConfigurationSchemaType<{
16
16
  readonly name: {
17
- readonly type: "string";
18
- readonly defaultValue: "nameOfConnection";
19
- readonly description: "a unique name for this connection";
17
+ type: "string";
18
+ } & {
19
+ defaultValue: string;
20
20
  };
21
21
  readonly assemblyNames: {
22
- readonly type: "stringArray";
23
- readonly defaultValue: readonly [];
24
- readonly description: "optional list of names of assemblies in this connection";
22
+ type: "stringArray";
23
+ } & {
24
+ defaultValue: unknown;
25
25
  };
26
- }, import("../../configuration/configurationSchema.ts").ConfigurationSchemaOptions<undefined, "connectionId">>>;
26
+ type: {
27
+ type: "string";
28
+ } & {
29
+ defaultValue: string;
30
+ };
31
+ connectionId: {
32
+ type: "string";
33
+ } & {
34
+ defaultValue: string;
35
+ };
36
+ }, import("../../configuration/configurationSchema.ts").ConfigurationSchemaOptions<undefined, "connectionId", true, import("../../configuration/requirements.ts").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>, any>>>;
27
37
  /**
28
38
  * #property
29
39
  * set when the connection is being re-established on session load (its
@@ -70,7 +80,7 @@ declare function stateModelFactory(pluginManager: PluginManager): import("@jbrow
70
80
  /**
71
81
  * #action
72
82
  */
73
- addTrackConf(trackConf: TrackConf): any;
83
+ addTrackConf(trackConf: TrackConf): (import("../../configuration/types.ts").PluggableConfigNode & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/core/PluginManager").PluggableConfigSchemaType>) | undefined;
74
84
  /**
75
85
  * #action
76
86
  */
@@ -1,6 +1,8 @@
1
1
  import type { AnyConfigurationModel } from '../../configuration/index.ts';
2
+ import type { Plot, PlotExample } from '../../configuration/plot.ts';
2
3
  import type { MenuItem } from '../../ui/index.ts';
3
4
  import type { RpcStatus } from '../../util/progress.ts';
5
+ import type { UnappliedSetting } from '../../util/unknownSnapshotKeys.ts';
4
6
  import type { Instance } from '@jbrowse/mobx-state-tree';
5
7
  import type React from 'react';
6
8
  export declare const BaseDisplay: import("@jbrowse/mobx-state-tree").IModelType<{
@@ -161,7 +163,7 @@ export declare const BaseDisplay: import("@jbrowse/mobx-state-tree").IModelType<
161
163
  * pointing at" channel a plugin can subscribe to.
162
164
  *
163
165
  * Declared here because a cross-display consumer can only read a name the
164
- * base declares — the same reason `SyntenyFetchStateMixin.fetchInert` is a
166
+ * base declares — the same reason `FetchMixin.fetchInert` is a
165
167
  * hook rather than a getter each display invents. The container used to
166
168
  * read `featureUnderMouse`, which only the wiggle, alignments and
167
169
  * Manhattan families spelled that way — canvas said `hoveredFeature`,
@@ -202,15 +204,14 @@ export declare const BaseDisplay: import("@jbrowse/mobx-state-tree").IModelType<
202
204
  readonly featureNoun: string;
203
205
  /**
204
206
  * #getter
205
- * Overridable hook: which widget `openFeatureWidget` opens for one of
206
- * this display's features. The default is the generic one, which is what
207
- * a display drawing plain features wants and what the canvas base spelled
208
- * out by hand.
207
+ * The widget `openFeatureWidget` opens for one of this display's
208
+ * features. Displays may override it. The default is the generic feature
209
+ * widget, for displays drawing plain features.
209
210
  *
210
- * An override is a display whose features have a vocabulary of their own —
211
- * a read, a variant, a synteny block — and the `id` is deliberately part
212
- * of it: two displays naming one id share the drawer panel, which is the
213
- * behaviour when the two are showing the same kind of thing.
211
+ * Displays whose features are a specific kind (a read, a variant, a
212
+ * synteny block) override it, including the `id`: two displays naming
213
+ * one id share the drawer panel, which suits two displays showing the
214
+ * same kind of feature.
214
215
  */
215
216
  readonly featureWidgetType: {
216
217
  type: string;
@@ -382,7 +383,7 @@ export declare const BaseDisplay: import("@jbrowse/mobx-state-tree").IModelType<
382
383
  * pointing at" channel a plugin can subscribe to.
383
384
  *
384
385
  * Declared here because a cross-display consumer can only read a name the
385
- * base declares — the same reason `SyntenyFetchStateMixin.fetchInert` is a
386
+ * base declares — the same reason `FetchMixin.fetchInert` is a
386
387
  * hook rather than a getter each display invents. The container used to
387
388
  * read `featureUnderMouse`, which only the wiggle, alignments and
388
389
  * Manhattan families spelled that way — canvas said `hoveredFeature`,
@@ -423,15 +424,14 @@ export declare const BaseDisplay: import("@jbrowse/mobx-state-tree").IModelType<
423
424
  readonly featureNoun: string;
424
425
  /**
425
426
  * #getter
426
- * Overridable hook: which widget `openFeatureWidget` opens for one of
427
- * this display's features. The default is the generic one, which is what
428
- * a display drawing plain features wants and what the canvas base spelled
429
- * out by hand.
427
+ * The widget `openFeatureWidget` opens for one of this display's
428
+ * features. Displays may override it. The default is the generic feature
429
+ * widget, for displays drawing plain features.
430
430
  *
431
- * An override is a display whose features have a vocabulary of their own —
432
- * a read, a variant, a synteny block — and the `id` is deliberately part
433
- * of it: two displays naming one id share the drawer panel, which is the
434
- * behaviour when the two are showing the same kind of thing.
431
+ * Displays whose features are a specific kind (a read, a variant, a
432
+ * synteny block) override it, including the `id`: two displays naming
433
+ * one id share the drawer panel, which suits two displays showing the
434
+ * same kind of feature.
435
435
  */
436
436
  readonly featureWidgetType: {
437
437
  type: string;
@@ -595,7 +595,7 @@ export declare const BaseDisplay: import("@jbrowse/mobx-state-tree").IModelType<
595
595
  * pointing at" channel a plugin can subscribe to.
596
596
  *
597
597
  * Declared here because a cross-display consumer can only read a name the
598
- * base declares — the same reason `SyntenyFetchStateMixin.fetchInert` is a
598
+ * base declares — the same reason `FetchMixin.fetchInert` is a
599
599
  * hook rather than a getter each display invents. The container used to
600
600
  * read `featureUnderMouse`, which only the wiggle, alignments and
601
601
  * Manhattan families spelled that way — canvas said `hoveredFeature`,
@@ -636,15 +636,14 @@ export declare const BaseDisplay: import("@jbrowse/mobx-state-tree").IModelType<
636
636
  readonly featureNoun: string;
637
637
  /**
638
638
  * #getter
639
- * Overridable hook: which widget `openFeatureWidget` opens for one of
640
- * this display's features. The default is the generic one, which is what
641
- * a display drawing plain features wants and what the canvas base spelled
642
- * out by hand.
639
+ * The widget `openFeatureWidget` opens for one of this display's
640
+ * features. Displays may override it. The default is the generic feature
641
+ * widget, for displays drawing plain features.
643
642
  *
644
- * An override is a display whose features have a vocabulary of their own —
645
- * a read, a variant, a synteny block — and the `id` is deliberately part
646
- * of it: two displays naming one id share the drawer panel, which is the
647
- * behaviour when the two are showing the same kind of thing.
643
+ * Displays whose features are a specific kind (a read, a variant, a
644
+ * synteny block) override it, including the `id`: two displays naming
645
+ * one id share the drawer panel, which suits two displays showing the
646
+ * same kind of feature.
648
647
  */
649
648
  readonly featureWidgetType: {
650
649
  type: string;
@@ -672,7 +671,7 @@ export declare const BaseDisplay: import("@jbrowse/mobx-state-tree").IModelType<
672
671
  * `installClearHoverOnViewportChange` calls.
673
672
  *
674
673
  * A display that STORES its hover owes an override; one that derives it
675
- * from the live pointer (MAF, Hi-C, LD) owes nothing, and the default
674
+ * from the live pointer (Hi-C, LD) owes nothing, and the default
676
675
  * costs it nothing. Declared here so the clear can be installed for every
677
676
  * display rather than remembered per display — forgetting it is the
678
677
  * failure ARCHITECTURE.md's stored-hover section is about, and it used to
@@ -684,6 +683,101 @@ export declare const BaseDisplay: import("@jbrowse/mobx-state-tree").IModelType<
684
683
  * base display reload does nothing, see specialized displays for details
685
684
  */
686
685
  reload(): void;
686
+ /**
687
+ * #action
688
+ * Apply a set of display settings to the live display, and report which
689
+ * were applied. Each key runs through the display config schema's
690
+ * `preProcessSnapshot` (shorthand expansions and legacy-key migrations,
691
+ * as `showTrackGeneric` applies to a session spec's inline track keys),
692
+ * then writes the matching config slot. A key naming a sub-schema
693
+ * (`facet`, `color`) replaces the whole object, its string shorthand
694
+ * lifted by that schema, and `null` clears it. Keys that are not slots
695
+ * come back in `unapplied` as `{ key, reason }`, so a caller can tell a
696
+ * misspelling from a key that has an action instead of a slot.
697
+ *
698
+ * `allowSetters` also routes a non-slot key to a single-argument action
699
+ * named `set<Key>`. It is off by default because session specs, share
700
+ * links and embeds pass untyped JSON here, and a default fallback would
701
+ * let them call internal setters (`setError`, `setScrollTop`, ...) and
702
+ * call multi-argument setters with one argument. A caller that wants a
703
+ * specific action can call it directly.
704
+ *
705
+ * A key whose write threw is reported in `failed`. Only `failed` means
706
+ * the caller passed a bad value. `unapplied` needs the caller's own
707
+ * context to read: `showTrackGeneric` spreads the same settings into the
708
+ * display's snapshot, so a declared prop (`resolution`) has already
709
+ * landed by the time it reports here, while the restyle path spreads
710
+ * nothing and every entry there did nothing.
711
+ *
712
+ * A per-key error does not abort the remaining keys. A caller
713
+ * mid-`showTrack` has already pushed the track, and one rejected value
714
+ * should not leave it half-configured.
715
+ */
716
+ applyDisplaySettings(settings: Record<string, unknown>, options?: {
717
+ allowSetters?: boolean;
718
+ }): {
719
+ applied: string[];
720
+ unapplied: UnappliedSetting[];
721
+ failed: {
722
+ key: string;
723
+ error: string;
724
+ }[];
725
+ };
726
+ } & {
727
+ /**
728
+ * #getter
729
+ * The grammar settings this display's config declares, by slot name
730
+ * (`PLOT_VOCABULARY`): what "Edit plot..." edits. Empty on a display
731
+ * with none, which then offers no editor.
732
+ */
733
+ readonly plotKeys: string[];
734
+ /**
735
+ * #getter
736
+ * Those settings as declared, defaults left off and a shorthand written
737
+ * as a config file writes it. An agent edits a `structuredClone` of it,
738
+ * checks it with `plotProblems` and hands it to `applyPlot`.
739
+ */
740
+ readonly plot: Plot;
741
+ /**
742
+ * #getter
743
+ * The worked examples this display type declares, which "Edit plot..."
744
+ * offers as buttons.
745
+ */
746
+ readonly plotExamples: readonly PlotExample[];
747
+ /**
748
+ * #getter
749
+ * This display type's page in the config reference, which lists every
750
+ * setting it takes.
751
+ */
752
+ readonly configDocsUrl: string;
753
+ /**
754
+ * #method
755
+ * A draft as the config would hold it, merged over `plot`, throwing what
756
+ * a config file would be refused for. Nothing on the display changes.
757
+ */
758
+ liftPlot(draft: Plot): AnyConfigurationModel;
759
+ /**
760
+ * #method
761
+ * What a draft would report once applied, throwing a refusal as
762
+ * `liftPlot` does. A display with a rule list over its settings
763
+ * overrides it; the draft still applies, and draws what it can.
764
+ */
765
+ plotProblems(draft: Plot): string[];
766
+ /**
767
+ * #method
768
+ * What applying a draft would write, by setting: the lifted value where
769
+ * it differs from `plot`, `null` where it resets one. Throws a refusal.
770
+ */
771
+ plotWrites(draft: Plot): Record<string, unknown>;
772
+ } & {
773
+ /**
774
+ * #action
775
+ * Write a draft over `plot`: each setting it changes is replaced whole,
776
+ * so a member left out of an object goes back to its default, and `null`
777
+ * resets the setting. A draft the schema refuses, or naming a setting
778
+ * outside the plot, throws before anything is written.
779
+ */
780
+ applyPlot(draft: Plot): void;
687
781
  }, import("@jbrowse/mobx-state-tree")._NotCustomized, import("@jbrowse/mobx-state-tree")._NotCustomized>;
688
782
  export type BaseDisplayStateModel = typeof BaseDisplay;
689
783
  export type BaseDisplayModel = Instance<BaseDisplayStateModel>;
@@ -1,7 +1,9 @@
1
1
  import { hasParent, isAlive, types } from '@jbrowse/mobx-state-tree';
2
- import { getConf } from '../../configuration/index.js';
2
+ import { applyConfSettings, getConfigurationSchemaMetadata, getConf, setConf, } from '../../configuration/index.js';
3
+ import { liftPlot as liftPlotDraft, plotKeysOf, plotOf, plotWrites as plotWritesOf, } from '../../configuration/plot.js';
3
4
  import { getContainingTrack, getEnv, statusFraction, statusMessageText, } from '../../util/index.js';
4
5
  import { ElementId } from '../../util/types/mst.js';
6
+ import { displaySetterName } from '../../util/unknownSnapshotKeys.js';
5
7
  /**
6
8
  * #stateModel BaseDisplay
7
9
  * #category display
@@ -94,7 +96,7 @@ function stateModelFactory() {
94
96
  * pointing at" channel a plugin can subscribe to.
95
97
  *
96
98
  * Declared here because a cross-display consumer can only read a name the
97
- * base declares — the same reason `SyntenyFetchStateMixin.fetchInert` is a
99
+ * base declares — the same reason `FetchMixin.fetchInert` is a
98
100
  * hook rather than a getter each display invents. The container used to
99
101
  * read `featureUnderMouse`, which only the wiggle, alignments and
100
102
  * Manhattan families spelled that way — canvas said `hoveredFeature`,
@@ -139,15 +141,14 @@ function stateModelFactory() {
139
141
  },
140
142
  /**
141
143
  * #getter
142
- * Overridable hook: which widget `openFeatureWidget` opens for one of
143
- * this display's features. The default is the generic one, which is what
144
- * a display drawing plain features wants and what the canvas base spelled
145
- * out by hand.
144
+ * The widget `openFeatureWidget` opens for one of this display's
145
+ * features. Displays may override it. The default is the generic feature
146
+ * widget, for displays drawing plain features.
146
147
  *
147
- * An override is a display whose features have a vocabulary of their own —
148
- * a read, a variant, a synteny block — and the `id` is deliberately part
149
- * of it: two displays naming one id share the drawer panel, which is the
150
- * behaviour when the two are showing the same kind of thing.
148
+ * Displays whose features are a specific kind (a read, a variant, a
149
+ * synteny block) override it, including the `id`: two displays naming
150
+ * one id share the drawer panel, which suits two displays showing the
151
+ * same kind of feature.
151
152
  */
152
153
  get featureWidgetType() {
153
154
  return {
@@ -198,7 +199,7 @@ function stateModelFactory() {
198
199
  * `installClearHoverOnViewportChange` calls.
199
200
  *
200
201
  * A display that STORES its hover owes an override; one that derives it
201
- * from the live pointer (MAF, Hi-C, LD) owes nothing, and the default
202
+ * from the live pointer (Hi-C, LD) owes nothing, and the default
202
203
  * costs it nothing. Declared here so the clear can be installed for every
203
204
  * display rather than remembered per display — forgetting it is the
204
205
  * failure ARCHITECTURE.md's stored-hover section is about, and it used to
@@ -210,6 +211,149 @@ function stateModelFactory() {
210
211
  * base display reload does nothing, see specialized displays for details
211
212
  */
212
213
  reload() { },
214
+ /**
215
+ * #action
216
+ * Apply a set of display settings to the live display, and report which
217
+ * were applied. Each key runs through the display config schema's
218
+ * `preProcessSnapshot` (shorthand expansions and legacy-key migrations,
219
+ * as `showTrackGeneric` applies to a session spec's inline track keys),
220
+ * then writes the matching config slot. A key naming a sub-schema
221
+ * (`facet`, `color`) replaces the whole object, its string shorthand
222
+ * lifted by that schema, and `null` clears it. Keys that are not slots
223
+ * come back in `unapplied` as `{ key, reason }`, so a caller can tell a
224
+ * misspelling from a key that has an action instead of a slot.
225
+ *
226
+ * `allowSetters` also routes a non-slot key to a single-argument action
227
+ * named `set<Key>`. It is off by default because session specs, share
228
+ * links and embeds pass untyped JSON here, and a default fallback would
229
+ * let them call internal setters (`setError`, `setScrollTop`, ...) and
230
+ * call multi-argument setters with one argument. A caller that wants a
231
+ * specific action can call it directly.
232
+ *
233
+ * A key whose write threw is reported in `failed`. Only `failed` means
234
+ * the caller passed a bad value. `unapplied` needs the caller's own
235
+ * context to read: `showTrackGeneric` spreads the same settings into the
236
+ * display's snapshot, so a declared prop (`resolution`) has already
237
+ * landed by the time it reports here, while the restyle path spreads
238
+ * nothing and every entry there did nothing.
239
+ *
240
+ * A per-key error does not abort the remaining keys. A caller
241
+ * mid-`showTrack` has already pushed the track, and one rejected value
242
+ * should not leave it half-configured.
243
+ */
244
+ applyDisplaySettings(settings, options) {
245
+ // configuration is the reference every concrete display adds at
246
+ // instantiation (see DisplayModel below); the base model composes
247
+ // before it exists, hence the cast rather than a prop
248
+ const { configuration } = self;
249
+ const { applied, undeclared, failed } = applyConfSettings(configuration, settings);
250
+ const unapplied = [];
251
+ for (const [key, value] of Object.entries(undeclared)) {
252
+ if (!key || key === 'type') {
253
+ unapplied.push({ key, reason: key ? 'display-type' : 'no-slot' });
254
+ continue;
255
+ }
256
+ const setter = self[displaySetterName(key)];
257
+ if (typeof setter !== 'function') {
258
+ unapplied.push({ key, reason: 'no-slot' });
259
+ }
260
+ else if (!options?.allowSetters) {
261
+ unapplied.push({ key, reason: 'setter-only' });
262
+ }
263
+ else {
264
+ try {
265
+ ;
266
+ setter(value);
267
+ applied.push(`${key} (via setter)`);
268
+ }
269
+ catch (e) {
270
+ failed.push({ key, error: `${e}` });
271
+ }
272
+ }
273
+ }
274
+ return { applied, unapplied, failed };
275
+ },
276
+ }))
277
+ .views(self => ({
278
+ /**
279
+ * #getter
280
+ * The grammar settings this display's config declares, by slot name
281
+ * (`PLOT_VOCABULARY`): what "Edit plot..." edits. Empty on a display
282
+ * with none, which then offers no editor.
283
+ */
284
+ get plotKeys() {
285
+ return plotKeysOf(self.configuration);
286
+ },
287
+ /**
288
+ * #getter
289
+ * Those settings as declared, defaults left off and a shorthand written
290
+ * as a config file writes it. An agent edits a `structuredClone` of it,
291
+ * checks it with `plotProblems` and hands it to `applyPlot`.
292
+ */
293
+ get plot() {
294
+ return plotOf(self.configuration);
295
+ },
296
+ /**
297
+ * #getter
298
+ * The worked examples this display type declares, which "Edit plot..."
299
+ * offers as buttons.
300
+ */
301
+ get plotExamples() {
302
+ const { pluginManager } = getEnv(self);
303
+ return pluginManager.getDisplayType(self.type).plotExamples;
304
+ },
305
+ /**
306
+ * #getter
307
+ * This display type's page in the config reference, which lists every
308
+ * setting it takes.
309
+ */
310
+ get configDocsUrl() {
311
+ const name = getConfigurationSchemaMetadata(self.configuration)?.name;
312
+ return name
313
+ ? `https://jbrowse.org/jb2/docs/config/${name.toLowerCase()}/`
314
+ : 'https://jbrowse.org/jb2/docs/config_guide/';
315
+ },
316
+ /**
317
+ * #method
318
+ * A draft as the config would hold it, merged over `plot`, throwing what
319
+ * a config file would be refused for. Nothing on the display changes.
320
+ */
321
+ liftPlot(draft) {
322
+ return liftPlotDraft(self.configuration, draft);
323
+ },
324
+ /**
325
+ * #method
326
+ * What a draft would report once applied, throwing a refusal as
327
+ * `liftPlot` does. A display with a rule list over its settings
328
+ * overrides it; the draft still applies, and draws what it can.
329
+ */
330
+ plotProblems(draft) {
331
+ this.liftPlot(draft);
332
+ return [];
333
+ },
334
+ /**
335
+ * #method
336
+ * What applying a draft would write, by setting: the lifted value where
337
+ * it differs from `plot`, `null` where it resets one. Throws a refusal.
338
+ */
339
+ plotWrites(draft) {
340
+ return plotWritesOf(self.configuration, draft);
341
+ },
342
+ }))
343
+ .actions(self => ({
344
+ /**
345
+ * #action
346
+ * Write a draft over `plot`: each setting it changes is replaced whole,
347
+ * so a member left out of an object goes back to its default, and `null`
348
+ * resets the setting. A draft the schema refuses, or naming a setting
349
+ * outside the plot, throws before anything is written.
350
+ */
351
+ applyPlot(draft) {
352
+ const { configuration } = self;
353
+ for (const [key, value] of Object.entries(self.plotWrites(draft))) {
354
+ setConf(configuration, key, value);
355
+ }
356
+ },
213
357
  }));
214
358
  }
215
359
  export const BaseDisplay = stateModelFactory();