@jbrowse/core 5.0.0-beta.1 → 5.0.0-beta.10

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 (611) hide show
  1. package/README.md +1476 -265
  2. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +3 -2
  3. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +5 -3
  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 +16 -9
  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 +50 -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/configSchema.d.ts +1 -1
  35. package/esm/BaseFeatureWidget/formatDetails.d.ts +13 -29
  36. package/esm/BaseFeatureWidget/formatDetails.js +62 -83
  37. package/esm/BaseFeatureWidget/index.d.ts +2 -1
  38. package/esm/BaseFeatureWidget/stateModelFactory.d.ts +42 -29
  39. package/esm/BaseFeatureWidget/stateModelFactory.js +98 -98
  40. package/esm/BaseFeatureWidget/types.d.ts +12 -6
  41. package/esm/BaseFeatureWidget/util.d.ts +0 -10
  42. package/esm/BaseFeatureWidget/util.js +0 -17
  43. package/esm/CorePlugin.js +2 -2
  44. package/esm/PluginLoader.d.ts +24 -13
  45. package/esm/PluginLoader.js +167 -51
  46. package/esm/PluginManager.d.ts +130 -24
  47. package/esm/PluginManager.js +180 -32
  48. package/esm/ReExports/MuiDataGridReExports.d.ts +1 -0
  49. package/esm/ReExports/MuiDataGridReExports.js +2 -2
  50. package/esm/ReExports/coreModules.generated.d.ts +2 -0
  51. package/esm/ReExports/coreModules.generated.js +528 -0
  52. package/esm/ReExports/coreWorkerModules.generated.d.ts +2 -0
  53. package/esm/ReExports/coreWorkerModules.generated.js +488 -0
  54. package/esm/ReExports/frameworkModules.d.ts +2 -0
  55. package/esm/ReExports/frameworkModules.js +68 -0
  56. package/esm/ReExports/frameworkShared.d.ts +12 -0
  57. package/esm/ReExports/frameworkShared.js +16 -0
  58. package/esm/ReExports/frameworkWorkerModules.generated.d.ts +2 -0
  59. package/esm/ReExports/frameworkWorkerModules.generated.js +130 -0
  60. package/esm/ReExports/list.js +527 -79
  61. package/esm/ReExports/modules.d.ts +1 -1
  62. package/esm/ReExports/modules.js +10 -165
  63. package/esm/ReExports/registry.d.ts +1 -0
  64. package/esm/ReExports/registry.js +23 -5
  65. package/esm/ReExports/uiStub.d.ts +3 -0
  66. package/esm/ReExports/uiStub.js +33 -0
  67. package/esm/ReExports/workerModules.d.ts +2 -0
  68. package/esm/ReExports/workerModules.js +11 -0
  69. package/esm/TextSearch/TextSearchManager.d.ts +27 -13
  70. package/esm/TextSearch/TextSearchManager.js +77 -36
  71. package/esm/TextSearch/places.d.ts +12 -0
  72. package/esm/TextSearch/places.js +94 -0
  73. package/esm/assemblyManager/assembly.d.ts +21 -19
  74. package/esm/assemblyManager/assembly.js +28 -26
  75. package/esm/assemblyManager/assemblyAdapters.d.ts +1 -1
  76. package/esm/assemblyManager/assemblyAdapters.js +8 -2
  77. package/esm/assemblyManager/assemblyConfigSchema.d.ts +31 -90
  78. package/esm/assemblyManager/assemblyConfigSchema.js +35 -47
  79. package/esm/assemblyManager/assemblyManager.d.ts +35 -180
  80. package/esm/assemblyManager/assemblyManager.js +47 -51
  81. package/esm/assemblyManager/expandAssemblyConfigShorthand.d.ts +25 -18
  82. package/esm/assemblyManager/expandAssemblyConfigShorthand.js +78 -49
  83. package/esm/assemblyManager/geneticCodes.js +2 -5
  84. package/esm/assemblyManager/getSequenceAdapterConfig.d.ts +10 -0
  85. package/esm/assemblyManager/getSequenceAdapterConfig.js +10 -0
  86. package/esm/assemblyManager/indexAssemblyNames.d.ts +9 -0
  87. package/esm/assemblyManager/indexAssemblyNames.js +22 -0
  88. package/esm/assemblyManager/loadRefNameMap.d.ts +1 -1
  89. package/esm/assemblyManager/loadRefNameMap.js +4 -9
  90. package/esm/assemblyManager/refNameMapKey.d.ts +7 -0
  91. package/esm/assemblyManager/refNameMapKey.js +12 -0
  92. package/esm/checkPlugins.d.ts +2 -0
  93. package/esm/checkPlugins.js +38 -17
  94. package/esm/configuration/bamIndexFields.d.ts +49 -0
  95. package/esm/configuration/bamIndexFields.js +41 -0
  96. package/esm/configuration/configurationSchema.d.ts +101 -71
  97. package/esm/configuration/configurationSchema.js +207 -134
  98. package/esm/configuration/configurationSchemaUnion.d.ts +39 -0
  99. package/esm/configuration/configurationSchemaUnion.js +56 -0
  100. package/esm/configuration/configurationSlot.d.ts +150 -60
  101. package/esm/configuration/configurationSlot.js +103 -75
  102. package/esm/configuration/fillLocations.d.ts +14 -0
  103. package/esm/configuration/fillLocations.js +14 -0
  104. package/esm/configuration/formatAboutConfigSchema.d.ts +7 -21
  105. package/esm/configuration/formatDetailsConfigSchema.d.ts +11 -37
  106. package/esm/configuration/formatDetailsConfigSchema.js +10 -13
  107. package/esm/configuration/fullConfSnapshot.d.ts +4 -19
  108. package/esm/configuration/fullConfSnapshot.js +30 -52
  109. package/esm/configuration/getConf.d.ts +45 -41
  110. package/esm/configuration/getConf.js +111 -44
  111. package/esm/configuration/index.d.ts +24 -11
  112. package/esm/configuration/index.js +15 -7
  113. package/esm/configuration/indexType.d.ts +26 -0
  114. package/esm/configuration/indexType.js +38 -0
  115. package/esm/configuration/mergeFormatCallbacks.d.ts +6 -7
  116. package/esm/configuration/mergeFormatCallbacks.js +13 -10
  117. package/esm/configuration/readConfObject.d.ts +2 -24
  118. package/esm/configuration/readConfObject.js +20 -63
  119. package/esm/configuration/requirements.d.ts +37 -0
  120. package/esm/configuration/requirements.js +88 -0
  121. package/esm/configuration/schemaRegistry.d.ts +32 -15
  122. package/esm/configuration/schemaRegistry.js +33 -35
  123. package/esm/configuration/schemaTypes.d.ts +21 -5
  124. package/esm/configuration/schemaTypes.js +66 -55
  125. package/esm/configuration/slotFacade.d.ts +12 -29
  126. package/esm/configuration/slotFacade.js +44 -23
  127. package/esm/configuration/snapshotPreprocess.d.ts +43 -0
  128. package/esm/configuration/snapshotPreprocess.js +161 -0
  129. package/esm/configuration/tabixIndexFields.d.ts +30 -4
  130. package/esm/configuration/tabixIndexFields.js +21 -4
  131. package/esm/configuration/tabixShorthand.d.ts +34 -17
  132. package/esm/configuration/tabixShorthand.js +49 -22
  133. package/esm/configuration/types.d.ts +182 -43
  134. package/esm/configuration/uriShorthand.d.ts +9 -0
  135. package/esm/configuration/uriShorthand.js +16 -0
  136. package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +13 -19
  137. package/esm/data_adapters/BaseAdapter/BaseAdapter.js +12 -19
  138. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +40 -2
  139. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +68 -5
  140. package/esm/data_adapters/BaseAdapter/featureDensity.d.ts +40 -0
  141. package/esm/data_adapters/BaseAdapter/featureDensity.js +31 -0
  142. package/esm/data_adapters/BaseAdapter/index.d.ts +23 -3
  143. package/esm/data_adapters/BaseAdapter/index.js +1 -0
  144. package/esm/data_adapters/BaseAdapter/rowSources.d.ts +37 -0
  145. package/esm/data_adapters/BaseAdapter/rowSources.js +7 -0
  146. package/esm/data_adapters/BaseAdapter/stats.d.ts +33 -1
  147. package/esm/data_adapters/BaseAdapter/stats.js +52 -13
  148. package/esm/data_adapters/BaseAdapter/types.d.ts +8 -12
  149. package/esm/data_adapters/BaseAdapter/zoomRange.d.ts +10 -0
  150. package/esm/data_adapters/CytobandAdapter/CytobandAdapter.js +1 -1
  151. package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +7 -11
  152. package/esm/data_adapters/CytobandAdapter/configSchema.js +3 -17
  153. package/esm/data_adapters/dataAdapterCache.d.ts +19 -2
  154. package/esm/data_adapters/dataAdapterCache.js +44 -10
  155. package/esm/data_adapters/getFeatureAdapter.d.ts +6 -4
  156. package/esm/data_adapters/getFeatureAdapter.js +8 -8
  157. package/esm/data_adapters/getSequenceSubAdapter.d.ts +7 -9
  158. package/esm/data_adapters/getSequenceSubAdapter.js +8 -10
  159. package/esm/pluggableElementTypes/AdapterType.d.ts +8 -8
  160. package/esm/pluggableElementTypes/AdapterType.js +1 -1
  161. package/esm/pluggableElementTypes/DisplayType.d.ts +46 -16
  162. package/esm/pluggableElementTypes/DisplayType.js +22 -12
  163. package/esm/pluggableElementTypes/LazyStateModelElement.d.ts +32 -0
  164. package/esm/pluggableElementTypes/LazyStateModelElement.js +77 -0
  165. package/esm/pluggableElementTypes/PluggableElementBase.d.ts +3 -5
  166. package/esm/pluggableElementTypes/PluggableElementBase.js +3 -5
  167. package/esm/pluggableElementTypes/RpcMethodType.d.ts +11 -1
  168. package/esm/pluggableElementTypes/RpcMethodType.js +25 -9
  169. package/esm/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.d.ts +1 -2
  170. package/esm/pluggableElementTypes/TextSearchAdapterType.d.ts +7 -7
  171. package/esm/pluggableElementTypes/ViewType.d.ts +20 -4
  172. package/esm/pluggableElementTypes/ViewType.js +32 -4
  173. package/esm/pluggableElementTypes/addMenuItems.d.ts +3 -2
  174. package/esm/pluggableElementTypes/extendElementType.d.ts +1 -2
  175. package/esm/pluggableElementTypes/extendElementType.js +9 -5
  176. package/esm/pluggableElementTypes/index.d.ts +2 -1
  177. package/esm/pluggableElementTypes/index.js +1 -1
  178. package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +19 -9
  179. package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +65 -27
  180. package/esm/pluggableElementTypes/models/BaseDisplayModel.js +72 -10
  181. package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +65 -16
  182. package/esm/pluggableElementTypes/models/BaseTrackModel.js +179 -117
  183. package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +85 -16
  184. package/esm/pluggableElementTypes/models/BaseViewModel.js +53 -10
  185. package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +26 -16
  186. package/esm/pluggableElementTypes/models/assertDisplayContract.d.ts +15 -11
  187. package/esm/pluggableElementTypes/models/assertDisplayContract.js +25 -32
  188. package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +22 -18
  189. package/esm/pluggableElementTypes/models/baseConnectionConfig.js +5 -5
  190. package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +26 -31
  191. package/esm/pluggableElementTypes/models/baseTrackConfig.d.ts +108 -147
  192. package/esm/pluggableElementTypes/models/baseTrackConfig.js +96 -73
  193. package/esm/pluggableElementTypes/models/components/SaveTrackData.js +4 -6
  194. package/esm/pluggableElementTypes/models/components/fetchTrackData.d.ts +3 -4
  195. package/esm/pluggableElementTypes/models/components/fetchTrackData.js +3 -3
  196. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +23 -13
  197. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +80 -48
  198. package/esm/pluggableElementTypes/models/index.d.ts +2 -3
  199. package/esm/pluggableElementTypes/models/index.js +2 -3
  200. package/esm/pluggableElementTypes/models/migrateTrackConfig.d.ts +15 -1
  201. package/esm/pluggableElementTypes/models/migrateTrackConfig.js +85 -25
  202. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.d.ts +4 -3
  203. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.js +141 -19
  204. package/esm/pluggableElementTypes/models/saveTrackFileTypes/types.d.ts +3 -3
  205. package/esm/pluginDefinitions.d.ts +34 -7
  206. package/esm/pluginDefinitions.js +54 -20
  207. package/esm/rpc/BaseRpcDriver.d.ts +2 -2
  208. package/esm/rpc/BaseRpcDriver.js +25 -30
  209. package/esm/rpc/MainThreadRpcDriver.d.ts +2 -2
  210. package/esm/rpc/MainThreadRpcDriver.js +13 -8
  211. package/esm/rpc/RpcClient.d.ts +18 -6
  212. package/esm/rpc/RpcClient.js +51 -16
  213. package/esm/rpc/RpcManager.d.ts +14 -10
  214. package/esm/rpc/RpcManager.js +11 -1
  215. package/esm/rpc/RpcRegistry.d.ts +40 -7
  216. package/esm/rpc/RpcServer.d.ts +3 -1
  217. package/esm/rpc/RpcServer.js +19 -12
  218. package/esm/rpc/WebWorkerRpcDriver.d.ts +11 -4
  219. package/esm/rpc/WebWorkerRpcDriver.js +64 -68
  220. package/esm/rpc/byteBudget.d.ts +20 -5
  221. package/esm/rpc/byteBudget.js +16 -5
  222. package/esm/rpc/configSchema.d.ts +7 -21
  223. package/esm/rpc/coreRpcMethods.d.ts +4 -0
  224. package/esm/rpc/coreRpcMethods.js +4 -0
  225. package/esm/rpc/methods/CoreGetEncodedFeature.d.ts +13 -0
  226. package/esm/rpc/methods/CoreGetEncodedFeature.js +32 -0
  227. package/esm/rpc/methods/CoreGetEncodedLayers.d.ts +16 -0
  228. package/esm/rpc/methods/CoreGetEncodedLayers.js +59 -0
  229. package/esm/rpc/methods/CoreGetExportData.js +3 -4
  230. package/esm/rpc/methods/CoreGetFeatureDensity.d.ts +11 -0
  231. package/esm/rpc/methods/CoreGetFeatureDensity.js +22 -0
  232. package/esm/rpc/methods/CoreGetFeatures.js +3 -5
  233. package/esm/rpc/methods/CoreGetRefNames.js +2 -12
  234. package/esm/rpc/methods/CoreGetRegionByteEstimate.js +1 -1
  235. package/esm/rpc/methods/CoreGetSequence.js +2 -2
  236. package/esm/rpc/methods/CoreLoadAdapterCode.d.ts +13 -0
  237. package/esm/rpc/methods/CoreLoadAdapterCode.js +16 -0
  238. package/esm/rpc/methods/layerFeatures.d.ts +33 -0
  239. package/esm/rpc/methods/layerFeatures.js +29 -0
  240. package/esm/svg/SvgExport.js +6 -7
  241. package/esm/svg/SvgThemeProviders.d.ts +12 -0
  242. package/esm/svg/SvgThemeProviders.js +15 -0
  243. package/esm/svg/exportViewSvg.d.ts +28 -0
  244. package/esm/svg/exportViewSvg.js +13 -0
  245. package/esm/svg/normalizeSvgMarkup.d.ts +7 -0
  246. package/esm/svg/normalizeSvgMarkup.js +99 -0
  247. package/esm/svg/serializeSvg.d.ts +7 -0
  248. package/esm/svg/serializeSvg.js +11 -0
  249. package/esm/svg/svgId.d.ts +1 -1
  250. package/esm/svg/svgId.js +1 -1
  251. package/esm/svg/svgReady.d.ts +9 -7
  252. package/esm/svg/svgReady.js +8 -7
  253. package/esm/svg/trackNames.d.ts +7 -5
  254. package/esm/svg/trackNames.js +12 -9
  255. package/esm/svg/wrapSvgExport.js +6 -74
  256. package/esm/ui/AddCustomPluginDialog.js +3 -8
  257. package/esm/ui/AppReadyMarker.d.ts +45 -0
  258. package/esm/ui/AppReadyMarker.js +89 -0
  259. package/esm/ui/BaseExportSvgDialog.d.ts +1 -1
  260. package/esm/ui/CascadingMenu.js +181 -104
  261. package/esm/ui/DropDownMenu.js +2 -1
  262. package/esm/ui/ErrorBanner.js +1 -1
  263. package/esm/ui/ErrorBoundary.d.ts +2 -2
  264. package/esm/ui/ErrorMessageStackTraceContents.js +2 -1
  265. package/esm/ui/ErrorMessageStackTraceDialog.js +5 -11
  266. package/esm/ui/ExportSvgDialog.d.ts +1 -1
  267. package/esm/ui/FileDropZone.js +2 -1
  268. package/esm/ui/FileSelector/useInternetAccounts.d.ts +156 -96
  269. package/esm/ui/HoverMenu.d.ts +1 -2
  270. package/esm/ui/HoverMenu.js +6 -3
  271. package/esm/ui/JexlFilterDialog.d.ts +13 -10
  272. package/esm/ui/JexlFilterDialog.js +122 -49
  273. package/esm/ui/JexlFilterRowEditors.d.ts +15 -0
  274. package/esm/ui/JexlFilterRowEditors.js +90 -0
  275. package/esm/ui/LazyBaseTooltip.d.ts +4 -0
  276. package/esm/ui/LazyBaseTooltip.js +9 -0
  277. package/esm/ui/LegendSwatchGlyph.js +26 -21
  278. package/esm/ui/LoadingOverlay.d.ts +14 -0
  279. package/esm/ui/LoadingOverlay.js +4 -2
  280. package/esm/ui/MenuTypes.d.ts +23 -53
  281. package/esm/ui/MenuTypes.js +3 -0
  282. package/esm/ui/MonospaceTextField.d.ts +2 -1
  283. package/esm/ui/MonospaceTextField.js +23 -20
  284. package/esm/ui/PaletteContext.d.ts +10 -5
  285. package/esm/ui/PaletteContext.js +44 -6
  286. package/esm/ui/RefNameAutocomplete/SearchOption.d.ts +13 -0
  287. package/esm/ui/RefNameAutocomplete/SearchOption.js +45 -0
  288. package/esm/ui/RefNameAutocomplete/index.d.ts +1 -2
  289. package/esm/ui/RefNameAutocomplete/index.js +8 -2
  290. package/esm/ui/RefNameAutocomplete/util.d.ts +13 -0
  291. package/esm/ui/RefNameAutocomplete/util.js +42 -1
  292. package/esm/ui/ResizeHandle.d.ts +3 -1
  293. package/esm/ui/ResizeHandle.js +44 -11
  294. package/esm/ui/ScrollChrome.d.ts +13 -0
  295. package/esm/ui/ScrollChrome.js +11 -0
  296. package/esm/ui/ScrollEdgeShadow.d.ts +6 -9
  297. package/esm/ui/ScrollEdgeShadow.js +14 -35
  298. package/esm/ui/ScrollZoomToggle.d.ts +4 -27
  299. package/esm/ui/ScrollZoomToggle.js +34 -51
  300. package/esm/ui/SessionJsonPanel.d.ts +3 -0
  301. package/esm/ui/SessionJsonPanel.js +14 -0
  302. package/esm/ui/SettingsChangesTable.d.ts +1 -0
  303. package/esm/ui/SettingsChangesTable.js +49 -11
  304. package/esm/ui/ShareLinkField.d.ts +1 -3
  305. package/esm/ui/ShareLinkField.js +13 -40
  306. package/esm/ui/SizeSliderRow.d.ts +1 -3
  307. package/esm/ui/SizeSliderRow.js +4 -6
  308. package/esm/ui/SnackbarModel.js +79 -67
  309. package/esm/ui/StatusProgressBar.js +2 -2
  310. package/esm/ui/SvgColorLegend.d.ts +9 -4
  311. package/esm/ui/SvgColorLegend.js +82 -41
  312. package/esm/ui/VerticalScrollbar.d.ts +13 -34
  313. package/esm/ui/VerticalScrollbar.js +29 -83
  314. package/esm/ui/ViewLoadingScreen.d.ts +5 -4
  315. package/esm/ui/ViewLoadingScreen.js +8 -32
  316. package/esm/ui/colorScale.d.ts +92 -0
  317. package/esm/ui/colorScale.js +72 -0
  318. package/esm/ui/colors.d.ts +64 -0
  319. package/esm/ui/colors.js +230 -1
  320. package/esm/ui/hoverBoxStyle.d.ts +14 -2
  321. package/esm/ui/hoverBoxStyle.js +17 -2
  322. package/esm/ui/index.d.ts +12 -12
  323. package/esm/ui/index.js +14 -22
  324. package/esm/ui/launchViewMenu.js +15 -5
  325. package/esm/ui/legendMenuItem.d.ts +10 -32
  326. package/esm/ui/legendMenuItem.js +9 -36
  327. package/esm/ui/legendSpec.d.ts +15 -8
  328. package/esm/ui/legendSpec.js +14 -23
  329. package/esm/ui/makeSizeMenu.d.ts +0 -6
  330. package/esm/ui/makeSizeMenu.js +6 -30
  331. package/esm/ui/measureLegendText.js +1 -1
  332. package/esm/ui/menuItemAdornment.d.ts +9 -20
  333. package/esm/ui/menuItemAdornment.js +10 -32
  334. package/esm/ui/menuItems.d.ts +2 -7
  335. package/esm/ui/menuItems.js +1 -6
  336. package/esm/ui/multiTrackMenuItems.d.ts +6 -0
  337. package/esm/ui/palette.d.ts +118 -116
  338. package/esm/ui/palette.js +114 -75
  339. package/esm/ui/replaceViewAction.d.ts +1 -1
  340. package/esm/ui/replaceViewAction.js +1 -1
  341. package/esm/ui/theme.d.ts +43 -119
  342. package/esm/ui/theme.js +62 -78
  343. package/esm/ui/toggleMenuItems.d.ts +1 -3
  344. package/esm/ui/toggleMenuItems.js +6 -5
  345. package/esm/ui/useAssemblySelection.d.ts +4 -4
  346. package/esm/ui/viewHeaderHeight.d.ts +1 -0
  347. package/esm/ui/viewHeaderHeight.js +1 -0
  348. package/esm/util/Base1DUtils.d.ts +5 -3
  349. package/esm/util/Base1DUtils.js +14 -6
  350. package/esm/util/Base1DViewModel.d.ts +2 -1
  351. package/esm/util/Base1DViewModel.js +3 -2
  352. package/esm/util/SvgCanvas.d.ts +15 -13
  353. package/esm/util/SvgCanvas.js +76 -56
  354. package/esm/util/aborting.d.ts +39 -0
  355. package/esm/util/aborting.js +88 -6
  356. package/esm/util/adapterMetadata.d.ts +1 -1
  357. package/esm/util/adapterMetadata.js +6 -5
  358. package/esm/util/addAndShowTrack.d.ts +2 -5
  359. package/esm/util/addAndShowTrack.js +5 -1
  360. package/esm/util/addRelativeUris.d.ts +17 -5
  361. package/esm/util/addRelativeUris.js +46 -10
  362. package/esm/util/addTrackFromWidget.d.ts +2 -5
  363. package/esm/util/addTrackFromWidget.js +5 -4
  364. package/esm/util/aggregateFieldName.d.ts +10 -0
  365. package/esm/util/aggregateFieldName.js +8 -0
  366. package/esm/util/analytics.js +46 -13
  367. package/esm/util/animationAllowed.d.ts +9 -0
  368. package/esm/util/animationAllowed.js +13 -0
  369. package/esm/util/applyRowResizeWheel.d.ts +10 -5
  370. package/esm/util/applyRowResizeWheel.js +10 -21
  371. package/esm/util/bandHeight.d.ts +10 -0
  372. package/esm/util/bandHeight.js +29 -0
  373. package/esm/util/bandLayout.d.ts +4 -4
  374. package/esm/util/bandLayout.js +4 -4
  375. package/esm/util/bezierConnector.d.ts +4 -3
  376. package/esm/util/bezierConnector.js +38 -45
  377. package/esm/util/bgzfWorkerPool.d.ts +20 -74
  378. package/esm/util/bgzfWorkerPool.js +20 -74
  379. package/esm/util/binnedAggregate.d.ts +17 -0
  380. package/esm/util/binnedAggregate.js +275 -0
  381. package/esm/util/cacheBudgets.d.ts +22 -19
  382. package/esm/util/cacheBudgets.js +22 -19
  383. package/esm/util/cachedSetup.d.ts +1 -1
  384. package/esm/util/cachedSetup.js +2 -2
  385. package/esm/util/categoricalField.d.ts +56 -0
  386. package/esm/util/categoricalField.js +73 -0
  387. package/esm/util/clampToContig.d.ts +17 -0
  388. package/esm/util/clampToContig.js +19 -0
  389. package/esm/util/coarseStripHTML.js +1 -2
  390. package/esm/util/color/cssColorsLevel4.d.ts +1 -0
  391. package/esm/util/color/cssColorsLevel4.js +1 -0
  392. package/esm/util/color/index.d.ts +5 -3
  393. package/esm/util/color/index.js +7 -4
  394. package/esm/util/colorBits.d.ts +3 -3
  395. package/esm/util/colorBits.js +19 -44
  396. package/esm/util/colorRamp.d.ts +49 -5
  397. package/esm/util/colorRamp.js +169 -18
  398. package/esm/util/colorScale.d.ts +156 -0
  399. package/esm/util/colorScale.js +243 -0
  400. package/esm/util/colorSchemes.d.ts +21 -0
  401. package/esm/util/colorSchemes.js +30 -0
  402. package/esm/util/{createStopTokenRotation.d.ts → createAbortRotation.d.ts} +21 -23
  403. package/esm/util/{createStopTokenRotation.js → createAbortRotation.js} +21 -52
  404. package/esm/util/createSvgRasterCanvas.d.ts +10 -0
  405. package/esm/util/cssColorParse.d.ts +15 -0
  406. package/esm/util/cssColorParse.js +53 -0
  407. package/esm/util/diagonalizeRegions.d.ts +2 -3
  408. package/esm/util/diagonalizeRegions.js +8 -13
  409. package/esm/util/expandLooseSearchIndex.d.ts +19 -0
  410. package/esm/util/expandLooseSearchIndex.js +29 -0
  411. package/esm/util/featureTable.d.ts +224 -0
  412. package/esm/util/featureTable.js +366 -0
  413. package/esm/util/featureTransforms.d.ts +80 -0
  414. package/esm/util/featureTransforms.js +1579 -0
  415. package/esm/util/featureTypes.d.ts +24 -0
  416. package/esm/util/featureTypes.js +35 -0
  417. package/esm/util/fetchAndMaybeUnzip.js +16 -9
  418. package/esm/util/fetchContext.d.ts +7 -8
  419. package/esm/util/fetchContext.js +3 -3
  420. package/esm/util/fetchHub.d.ts +4 -2
  421. package/esm/util/fetchHub.js +2 -2
  422. package/esm/util/fetchPhases.d.ts +10 -10
  423. package/esm/util/fetchSeq.d.ts +2 -3
  424. package/esm/util/fetchSeq.js +2 -2
  425. package/esm/util/fieldReader.d.ts +17 -0
  426. package/esm/util/fieldReader.js +62 -0
  427. package/esm/util/freezeDeep.d.ts +8 -10
  428. package/esm/util/freezeDeep.js +8 -10
  429. package/esm/util/groupKeys.d.ts +77 -0
  430. package/esm/util/groupKeys.js +155 -0
  431. package/esm/util/highlights.d.ts +10 -6
  432. package/esm/util/highlights.js +12 -25
  433. package/esm/util/hooks.d.ts +31 -2
  434. package/esm/util/hooks.js +72 -3
  435. package/esm/util/index.d.ts +11 -11
  436. package/esm/util/index.js +11 -10
  437. package/esm/util/indexCandidates.d.ts +1 -31
  438. package/esm/util/indexCandidates.js +5 -63
  439. package/esm/util/installFetch.d.ts +77 -37
  440. package/esm/util/installFetch.js +65 -38
  441. package/esm/util/installInitAutorun.d.ts +14 -13
  442. package/esm/util/installInitAutorun.js +17 -17
  443. package/esm/util/installPrerequisiteFetch.d.ts +115 -0
  444. package/esm/util/installPrerequisiteFetch.js +111 -0
  445. package/esm/util/io/index.js +19 -14
  446. package/esm/util/isDataCurrent.d.ts +7 -5
  447. package/esm/util/isDataCurrent.js +9 -6
  448. package/esm/util/isTextEntryFocused.d.ts +7 -0
  449. package/esm/util/isTextEntryFocused.js +16 -0
  450. package/esm/util/jexl.js +24 -21
  451. package/esm/util/jexlFilterRows.d.ts +89 -0
  452. package/esm/util/jexlFilterRows.js +252 -0
  453. package/esm/util/jexlFilters.d.ts +20 -27
  454. package/esm/util/jexlFilters.js +23 -11
  455. package/esm/util/jexlStrings.d.ts +3 -4
  456. package/esm/util/jexlStrings.js +2 -3
  457. package/esm/util/layouts/GranularRectLayout.d.ts +8 -1
  458. package/esm/util/layouts/GranularRectLayout.js +25 -8
  459. package/esm/util/lazyAfterAttach.d.ts +13 -0
  460. package/esm/util/lazyAfterAttach.js +31 -0
  461. package/esm/util/lazyWithPreload.d.ts +19 -0
  462. package/esm/util/lazyWithPreload.js +27 -0
  463. package/esm/util/legendCandidates.d.ts +72 -0
  464. package/esm/util/legendCandidates.js +138 -0
  465. package/esm/util/localStorage.js +4 -4
  466. package/esm/util/markEncoding.d.ts +150 -0
  467. package/esm/util/markEncoding.js +845 -0
  468. package/esm/util/markEncodingTypes.d.ts +588 -0
  469. package/esm/util/markEncodingTypes.js +8 -0
  470. package/esm/util/mst-reflection.d.ts +2 -20
  471. package/esm/util/mst-reflection.js +3 -53
  472. package/esm/util/mstUtils.d.ts +31 -23
  473. package/esm/util/mstUtils.js +39 -24
  474. package/esm/util/numericUtils.d.ts +7 -0
  475. package/esm/util/numericUtils.js +16 -0
  476. package/esm/util/numericValue.d.ts +14 -0
  477. package/esm/util/numericValue.js +34 -0
  478. package/esm/util/openFeatureWidget.d.ts +5 -0
  479. package/esm/util/openFeatureWidget.js +2 -2
  480. package/esm/util/openViews.d.ts +17 -0
  481. package/esm/util/openViews.js +22 -0
  482. package/esm/util/parentWalk.d.ts +1 -1
  483. package/esm/util/parentWalk.js +1 -1
  484. package/esm/util/parseLineByLine.d.ts +4 -5
  485. package/esm/util/parseLineByLine.js +8 -14
  486. package/esm/util/pluginStore.d.ts +6 -8
  487. package/esm/util/pluginStore.js +17 -16
  488. package/esm/util/preloadComponent.d.ts +5 -0
  489. package/esm/util/preloadComponent.js +11 -0
  490. package/esm/util/progress.d.ts +22 -22
  491. package/esm/util/progress.js +27 -26
  492. package/esm/util/quantileExtent.d.ts +49 -0
  493. package/esm/util/quantileExtent.js +162 -0
  494. package/esm/util/range.d.ts +13 -9
  495. package/esm/util/range.js +17 -8
  496. package/esm/util/renameRegions.d.ts +26 -6
  497. package/esm/util/renameRegions.js +68 -54
  498. package/esm/util/renderToStaticMarkup.js +24 -14
  499. package/esm/util/rxjs.d.ts +23 -8
  500. package/esm/util/rxjs.js +61 -15
  501. package/esm/util/samplesTsv.d.ts +49 -0
  502. package/esm/util/samplesTsv.js +86 -0
  503. package/esm/util/scheduleDetachedDestroy.d.ts +18 -0
  504. package/esm/util/scheduleDetachedDestroy.js +24 -0
  505. package/esm/util/scrollLatch.d.ts +1 -0
  506. package/esm/util/scrollLatch.js +8 -0
  507. package/esm/util/selectEncodedFeature.d.ts +16 -0
  508. package/esm/util/selectEncodedFeature.js +34 -0
  509. package/esm/util/sessionSharing.d.ts +7 -5
  510. package/esm/util/sessionSharing.js +23 -23
  511. package/esm/util/shapeNameList.d.ts +2 -0
  512. package/esm/util/shapeNameList.js +6 -0
  513. package/esm/util/shapeNames.d.ts +7 -0
  514. package/esm/util/shapeNames.js +11 -0
  515. package/esm/util/simpleFeature.d.ts +0 -1
  516. package/esm/util/starFusion.d.ts +26 -0
  517. package/esm/util/starFusion.js +37 -0
  518. package/esm/util/stepTables.d.ts +82 -0
  519. package/esm/util/stepTables.js +243 -0
  520. package/esm/util/svAlt.d.ts +145 -0
  521. package/esm/util/svAlt.js +364 -0
  522. package/esm/util/svgColorProps.d.ts +11 -0
  523. package/esm/util/svgColorProps.js +28 -1
  524. package/esm/util/systemColorScheme.d.ts +12 -0
  525. package/esm/util/systemColorScheme.js +27 -0
  526. package/esm/util/tabix.d.ts +13 -8
  527. package/esm/util/tabix.js +17 -12
  528. package/esm/util/thresholdScale.d.ts +91 -0
  529. package/esm/util/thresholdScale.js +166 -0
  530. package/esm/util/timeGate.d.ts +4 -5
  531. package/esm/util/timeGate.js +4 -5
  532. package/esm/util/trackConfigDelta.d.ts +26 -26
  533. package/esm/util/trackConfigDelta.js +63 -47
  534. package/esm/util/tracks.d.ts +121 -40
  535. package/esm/util/tracks.js +497 -112
  536. package/esm/util/translateTranscript.d.ts +44 -0
  537. package/esm/util/translateTranscript.js +102 -0
  538. package/esm/util/types/data.d.ts +0 -2
  539. package/esm/util/types/index.d.ts +121 -22
  540. package/esm/util/types/index.js +9 -0
  541. package/esm/util/types/mst.d.ts +3 -0
  542. package/esm/util/types/mst.js +4 -0
  543. package/esm/util/types/renameIds.d.ts +1 -0
  544. package/esm/util/types/renameIds.js +29 -0
  545. package/esm/util/types/services.d.ts +1 -1
  546. package/esm/util/unknownSnapshotKeys.d.ts +51 -0
  547. package/esm/util/unknownSnapshotKeys.js +82 -0
  548. package/esm/util/useFeatureSequence.js +5 -5
  549. package/esm/util/useFetch.d.ts +3 -4
  550. package/esm/util/useFetch.js +19 -10
  551. package/esm/util/useFetchPlugins.d.ts +6 -2
  552. package/esm/util/useFetchPlugins.js +7 -3
  553. package/esm/util/usePanelVirtualScroll.d.ts +7 -35
  554. package/esm/util/usePanelVirtualScroll.js +9 -36
  555. package/esm/util/useRowVirtualScroll.d.ts +6 -29
  556. package/esm/util/useRowVirtualScroll.js +8 -49
  557. package/esm/util/useVirtualScrollWheel.d.ts +20 -4
  558. package/esm/util/useVirtualScrollWheel.js +40 -74
  559. package/esm/util/viewHighlights.d.ts +3 -0
  560. package/esm/util/viewHighlights.js +5 -0
  561. package/esm/util/viewStatus.d.ts +47 -15
  562. package/esm/util/viewStatus.js +34 -0
  563. package/esm/util/wheelZoom.d.ts +7 -1
  564. package/esm/util/wheelZoom.js +85 -19
  565. package/esm/util/whenViewSettled.d.ts +55 -8
  566. package/esm/util/whenViewSettled.js +56 -7
  567. package/esm/util/withLaunchInput.d.ts +174 -0
  568. package/esm/util/withLaunchInput.js +274 -0
  569. package/package.json +70 -20
  570. package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.d.ts +0 -2
  571. package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.js +0 -8
  572. package/esm/BaseFeatureWidget/BaseFeatureDetail/types.d.ts +0 -8
  573. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.d.ts +0 -80
  574. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.js +0 -583
  575. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.d.ts +0 -141
  576. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.js +0 -1116
  577. package/esm/ReExports/BaseFeatureDetails.d.ts +0 -1
  578. package/esm/ReExports/BaseFeatureDetails.js +0 -10
  579. package/esm/ReExports/index.d.ts +0 -1
  580. package/esm/ReExports/index.js +0 -1
  581. package/esm/ReExports/publicUtil.d.ts +0 -1
  582. package/esm/ReExports/publicUtil.js +0 -28
  583. package/esm/configuration/promotableDefaults.d.ts +0 -199
  584. package/esm/configuration/promotableDefaults.js +0 -326
  585. package/esm/configuration/promotablePin.d.ts +0 -55
  586. package/esm/configuration/promotablePin.js +0 -1
  587. package/esm/configuration/promotableResolve.d.ts +0 -108
  588. package/esm/configuration/promotableResolve.js +0 -117
  589. package/esm/configuration/promotableSlots.d.ts +0 -12
  590. package/esm/configuration/promotableSlots.js +0 -45
  591. package/esm/configuration/slotShape.d.ts +0 -12
  592. package/esm/configuration/slotShape.js +0 -84
  593. package/esm/pluggableElementTypes/models/HighlightsMixin.d.ts +0 -51
  594. package/esm/pluggableElementTypes/models/HighlightsMixin.js +0 -78
  595. package/esm/ui/PinAdornment.d.ts +0 -5
  596. package/esm/ui/PinAdornment.js +0 -79
  597. package/esm/ui/SvgGradientLegend.d.ts +0 -26
  598. package/esm/ui/SvgGradientLegend.js +0 -26
  599. package/esm/ui/highlightChipReveal.d.ts +0 -32
  600. package/esm/ui/highlightChipReveal.js +0 -39
  601. package/esm/ui/promotableMenuItems.d.ts +0 -19
  602. package/esm/ui/promotableMenuItems.js +0 -89
  603. package/esm/ui/promotablePinCoverage.d.ts +0 -44
  604. package/esm/ui/promotablePinCoverage.js +0 -87
  605. package/esm/util/applyInitSettings.d.ts +0 -79
  606. package/esm/util/applyInitSettings.js +0 -91
  607. package/esm/util/openDisplays.d.ts +0 -23
  608. package/esm/util/openDisplays.js +0 -79
  609. package/esm/util/stopToken.d.ts +0 -211
  610. package/esm/util/stopToken.js +0 -438
  611. /package/esm/{BaseFeatureWidget/BaseFeatureDetail/types.js → data_adapters/BaseAdapter/zoomRange.js} +0 -0
@@ -1,32 +0,0 @@
1
- import type { MouseTracker } from './useMouseTracking.ts';
2
- export declare const OverlayPointerProvider: import("react").Provider<MouseTracker | undefined>;
3
- /**
4
- * The stripe a band occupies: an x span across a full-height band, a y span
5
- * across a full-width one. The other axis is the whole overlay, which is why it
6
- * isn't here.
7
- */
8
- export type HighlightStripe = {
9
- left: number;
10
- width: number;
11
- } | {
12
- top: number;
13
- height: number;
14
- };
15
- /**
16
- * Whether a band should be drawing its chip, and the `setOpen` that keeps it
17
- * drawn while its menu is up.
18
- *
19
- * A band reveals its chip while the pointer is in its stripe, so the highlight's
20
- * menu is reachable where the highlight is rather than only from the view menu,
21
- * and a view full of bands is not also a view full of link icons. `persistent`
22
- * is the `showHighlightChips` pin, which a screenshot needs because nothing
23
- * hovers in one.
24
- *
25
- * The menu is the reason this owns state at all: it is portalled out of the
26
- * band, so opening it moves the pointer off the stripe that revealed it, and
27
- * unmounting the chip under an open menu takes the menu's own anchor with it.
28
- */
29
- export declare function useHighlightChip(stripe: HighlightStripe | undefined, persistent: boolean): {
30
- chipVisible: boolean;
31
- setMenuOpen: import("react").Dispatch<import("react").SetStateAction<boolean>>;
32
- };
@@ -1,39 +0,0 @@
1
- import { createContext, use, useState } from 'react';
2
- import { useMouseSelector } from './useMouseTracking.js';
3
- /**
4
- * The pointer over the surface a view's highlight bands are positioned in — the
5
- * LinearGenomeView's tracks container, the DotplotView's plot area. Published by
6
- * whichever of those bound the handlers.
7
- *
8
- * A context rather than a prop because a band is often drawn by another plugin
9
- * through an extension point (grid-bookmark's bookmark bands), and those carry
10
- * only their `{ model }` props bag — the band families are siblings on screen
11
- * and would otherwise reach the pointer two different ways.
12
- */
13
- const OverlayPointerContext = createContext(undefined);
14
- export const OverlayPointerProvider = OverlayPointerContext.Provider;
15
- function pointerInStripe(stripe, state) {
16
- return 'left' in stripe
17
- ? state.x >= stripe.left && state.x < stripe.left + stripe.width
18
- : state.y >= stripe.top && state.y < stripe.top + stripe.height;
19
- }
20
- /**
21
- * Whether a band should be drawing its chip, and the `setOpen` that keeps it
22
- * drawn while its menu is up.
23
- *
24
- * A band reveals its chip while the pointer is in its stripe, so the highlight's
25
- * menu is reachable where the highlight is rather than only from the view menu,
26
- * and a view full of bands is not also a view full of link icons. `persistent`
27
- * is the `showHighlightChips` pin, which a screenshot needs because nothing
28
- * hovers in one.
29
- *
30
- * The menu is the reason this owns state at all: it is portalled out of the
31
- * band, so opening it moves the pointer off the stripe that revealed it, and
32
- * unmounting the chip under an open menu takes the menu's own anchor with it.
33
- */
34
- export function useHighlightChip(stripe, persistent) {
35
- const tracker = use(OverlayPointerContext);
36
- const [menuOpen, setMenuOpen] = useState(false);
37
- const hovered = useMouseSelector(tracker, state => !!state && !!stripe && pointerInStripe(stripe, state));
38
- return { chipVisible: persistent || hovered || menuOpen, setMenuOpen };
39
- }
@@ -1,19 +0,0 @@
1
- import type { Pin } from '../configuration/promotablePin.ts';
2
- import type { CheckboxMenuItem, RadioMenuItem } from './MenuTypes.ts';
3
- import type { RadioOption, SettingRowOptions } from './toggleMenuItems.ts';
4
- /** #menuBuilder promotableToggleItem | `checkboxItem` plus an apply-to-open-tracks pin */
5
- export declare function promotableToggleItem({ label, checked, onToggle, pin, ...opts }: {
6
- label: string;
7
- checked: boolean;
8
- onToggle: () => void;
9
- pin: Pin;
10
- } & SettingRowOptions): CheckboxMenuItem;
11
- /** #menuBuilder promotableRadioItem | `radioItem` plus an apply-to-open-tracks pin */
12
- export declare function promotableRadioItem({ label, checked, onClick, pin, ...opts }: {
13
- label: string;
14
- checked: boolean;
15
- onClick: () => void;
16
- pin?: Pin;
17
- } & SettingRowOptions): RadioMenuItem;
18
- /** #menuBuilder promotableRadioItems | `radioItems` plus a pin per option, from a factory over the value */
19
- export declare function promotableRadioItems<T extends string>(options: readonly RadioOption<T>[], current: T | undefined, setMode: (m: T) => void, pin: (value: T) => Pin): RadioMenuItem[];
@@ -1,89 +0,0 @@
1
- import { checkboxItem, radioItem, radioItems } from './toggleMenuItems.js';
2
- // Every builder here describes the trailing pin (`pin`) rather than
3
- // rendering it. That is what keeps this module — and therefore every state
4
- // model and menu file that calls it — free of React and of MUI's
5
- // ToggleButton/Tooltip. `menuItemAdornment.tsx` turns the description into
6
- // `PinAdornment` at the point the menu is drawn. See
7
- // reference/EAGER_BUNDLE.md; `menuItems.purity.test.ts` holds it.
8
- //
9
- // Each is the plain builder in `toggleMenuItems.ts` plus a pin, and each is
10
- // written that way — `checkboxItem` / `radioItems` build the row — so the
11
- // promotable and plain forms of a row can differ only by the pin.
12
- // A promotable setting as one native checkbox menu row: the value toggles the
13
- // track (inheriting native hover/sizing/keyboard), and a trailing pin
14
- // (endAdornment) applies this value to every open track of the display type,
15
- // offering the display-type default as its snackbar's one action. Always shown
16
- // so the capability is discoverable.
17
- //
18
- // **The row itself is `checkboxItem`'s**, so the two builders can only ever
19
- // differ by the pin. They used to be two literals, and had already drifted: this
20
- // one accepted `helpText` and `keepMenuOpen` while silently dropping `disabled`
21
- // and `disabledHelpText`, so a promotable row could not be greyed out the way
22
- // its plain sibling could. Sharing the body is also what makes a future
23
- // change to what a checkbox row *is* reach both — the failure `checkboxItem`'s
24
- // own comment records is a menu regressing by omission.
25
- //
26
- // `keepMenuOpen` is left unset by default, so `CascadingMenu` keeps the row open
27
- // by its checkbox type: these rows only write a setting, users flip several in
28
- // one visit, and the menu is an observer so the ticks and pins move live. A row
29
- // whose click opens a dialog instead (colorBy's "Tag...") passes false.
30
- /** #menuBuilder promotableToggleItem | `checkboxItem` plus an apply-to-open-tracks pin */
31
- export function promotableToggleItem({ label, checked, onToggle, pin, ...opts }) {
32
- return {
33
- ...checkboxItem(label, checked, onToggle, opts),
34
- pin: { control: pin, label },
35
- };
36
- }
37
- // ONE radio row of a promotable-value group — the escape hatch, for a group the
38
- // plural builder below can't express. **Reach for `promotableRadioItems` first**:
39
- // every option in a group has to get a pin, and hand-naming the rows is what
40
- // leaves one without.
41
- //
42
- // The rows that genuinely need this: `pin` is optional here, for a row with no
43
- // single value to promote yet (the colorBy "Tag..." row before a tag is picked)
44
- // or a display whose slot isn't promotable at all (the shared colorBy menu on
45
- // gwas/variants); and the alignments size presets, whose group is gated row by
46
- // row (`needsContent`) and mixes in a non-promotable "Custom..." peer.
47
- //
48
- // **The row itself is `radioItem`'s**, for the reason `promotableToggleItem`'s
49
- // is `checkboxItem`'s: it was a second literal, and it had drifted the same way
50
- // its checkbox sibling had — naming `helpText`/`keepMenuOpen` by hand and so
51
- // silently dropping `disabled` and `disabledHelpText`, which the
52
- // alignments size presets have to bolt back on afterwards (`needsContent`).
53
- /** #menuBuilder promotableRadioItem | `radioItem` plus an apply-to-open-tracks pin */
54
- export function promotableRadioItem({ label, checked, onClick, pin, ...opts }) {
55
- return {
56
- ...radioItem(label, checked, onClick, opts),
57
- ...(pin && {
58
- pin: { control: pin, label },
59
- }),
60
- };
61
- }
62
- // A whole promotable radio group: `radioItems` plus one pin per option. The
63
- // plural form of the builder above, and the one to reach for on a group whose
64
- // options differ only in their value — which is all four of them today
65
- // (`heightMode`, `displayMode`, `subfeatureLabels`, `sashimiArcsMode`).
66
- //
67
- // **Every option in a group gets a pin, the `promotedBase` value included** —
68
- // once a non-base value is promoted, pinning the base back is the only per-value
69
- // way to undo it from its own row, and a radio group with one row silently
70
- // missing its trailing control reads as a bug. Building the group here is what
71
- // makes that structural instead of a rule to remember: `sashimiArcsMode`'s base
72
- // looked unpinnable precisely because each row had been named by hand. Prefer
73
- // this over `.map(promotableRadioItem)` whenever the pin is a function of the
74
- // option's value.
75
- //
76
- // `pin` is a factory rather than an array so it can't be a row short. Pass
77
- // `value => makePin(self, slot, value)`, or a model member of that shape where
78
- // the menu module is handed a duck-typed model (alignments).
79
- //
80
- // The rows are `radioItems`' own, so the promotable and plain groups can't drift
81
- // on anything but the pin. `radioItems` maps `options` in order, which is what
82
- // lets each row be paired back to the option that built it.
83
- /** #menuBuilder promotableRadioItems | `radioItems` plus a pin per option, from a factory over the value */
84
- export function promotableRadioItems(options, current, setMode, pin) {
85
- return radioItems(options, current, setMode).map((item, i) => {
86
- const { value, label } = options[i];
87
- return { ...item, pin: { control: pin(value), label } };
88
- });
89
- }
@@ -1,44 +0,0 @@
1
- import type { ResolvableDisplay } from '../configuration/promotableResolve.ts';
2
- import type { MenuItem } from './MenuTypes.ts';
3
- import type { IAnyType } from '@jbrowse/mobx-state-tree';
4
- /**
5
- * The registered display types whose config schema declares a promotable slot,
6
- * sorted — the set a pin-coverage check has to reach, answered off the
7
- * `DisplayType`s themselves before anything is opened.
8
- *
9
- * The other half of the same gap `promotableSlotsWithoutPin` covers, and the
10
- * half that has no symptom at all: that function reports on a display it was
11
- * *given*, so a display type no fixture ever opens is not checked and does not
12
- * say so. Six display types declaring `showLegend` sat outside the check's
13
- * reach with nothing recording it.
14
- *
15
- * Takes the display types rather than a `PluginManager`, so core doesn't have
16
- * to name a plugin registry to answer a question about config schemas.
17
- */
18
- export declare function displayTypesWithPromotableSlots(displayTypes: readonly {
19
- name: string;
20
- configSchema: IAnyType;
21
- }[]): string[];
22
- /**
23
- * Every promotable slot some row of `items` carries a pin for, submenus
24
- * included.
25
- *
26
- * Reads `pin.control.slot` and nothing else. A raw `endAdornment` is
27
- * deliberately not counted: it is an arbitrary element (synteny's colour
28
- * swatch), so it cannot say which slot it promotes, and a pin built by hand
29
- * rather than through `promotableToggleItem`/`promotableRadioItem` is a thing to
30
- * find, not to accept.
31
- */
32
- export declare function pinnedSlots(items: MenuItem[]): Set<string>;
33
- /**
34
- * A display's promotable slots that its own track menu offers no pin for,
35
- * sorted. Empty is the healthy answer.
36
- *
37
- * Takes the built menu rather than calling `trackMenuItems()` itself, because
38
- * what a menu contains depends on the display's current state — a row can be
39
- * gated on a rendering type (wiggle line width), on a parent toggle (the sashimi
40
- * options), or on data having arrived. A caller that wants the whole surface has
41
- * to drive the display into the states that reveal it, and that is a decision
42
- * this function should not make silently.
43
- */
44
- export declare function promotableSlotsWithoutPin(display: ResolvableDisplay, menuItems: MenuItem[]): string[];
@@ -1,87 +0,0 @@
1
- /**
2
- * @module
3
- * The read side of the promotable pin: given a display, which of its promotable
4
- * slots its track menu actually offers a pin for.
5
- *
6
- * This exists because the two halves of the feature are declared in different
7
- * places and nothing joins them. Declaring `promotedBase` is a **schema** fact
8
- * that travels down `baseConfiguration` to every subclass; the pin is a **menu**
9
- * fact, built by whichever `trackMenuItems()` happens to construct a row for that
10
- * slot. A display that inherits the slot and curates its own menu therefore ends
11
- * up with a promotable slot that has no pin anywhere — and since a promoted default
12
- * is keyed by *display type*, no other display's pin can write its key either, so
13
- * the slot resolves to `promotedBase` forever unless a track customizes it.
14
- *
15
- * Nothing throws, nothing renders differently, and the config docs go on
16
- * advertising the setting as having a session-wide default. The state was tracked
17
- * by hand in `agent-docs/reference/DISPLAY_TYPE_DEFAULTS.md` and drifted twice
18
- * before this was written — once gaining a row for a slot that had been deleted,
19
- * once missing a slot that had been added.
20
- *
21
- * `products/jbrowse-web/src/tests/PromotablePinCoverage.test.ts` is the guard: it
22
- * opens one display of every type that declares a promotable slot and holds the
23
- * result against a baseline.
24
- */
25
- import { promotableSlotNames } from '../configuration/promotableSlots.js';
26
- /**
27
- * The registered display types whose config schema declares a promotable slot,
28
- * sorted — the set a pin-coverage check has to reach, answered off the
29
- * `DisplayType`s themselves before anything is opened.
30
- *
31
- * The other half of the same gap `promotableSlotsWithoutPin` covers, and the
32
- * half that has no symptom at all: that function reports on a display it was
33
- * *given*, so a display type no fixture ever opens is not checked and does not
34
- * say so. Six display types declaring `showLegend` sat outside the check's
35
- * reach with nothing recording it.
36
- *
37
- * Takes the display types rather than a `PluginManager`, so core doesn't have
38
- * to name a plugin registry to answer a question about config schemas.
39
- */
40
- export function displayTypesWithPromotableSlots(displayTypes) {
41
- return displayTypes
42
- .filter(d => promotableSlotNames(d.configSchema).size > 0)
43
- .map(d => d.name)
44
- .sort((a, b) => a.localeCompare(b));
45
- }
46
- /**
47
- * Every promotable slot some row of `items` carries a pin for, submenus
48
- * included.
49
- *
50
- * Reads `pin.control.slot` and nothing else. A raw `endAdornment` is
51
- * deliberately not counted: it is an arbitrary element (synteny's colour
52
- * swatch), so it cannot say which slot it promotes, and a pin built by hand
53
- * rather than through `promotableToggleItem`/`promotableRadioItem` is a thing to
54
- * find, not to accept.
55
- */
56
- export function pinnedSlots(items) {
57
- const found = new Set();
58
- const walk = (list) => {
59
- for (const item of list) {
60
- if ('pin' in item && item.pin) {
61
- found.add(item.pin.control.slot);
62
- }
63
- if ('subMenu' in item) {
64
- walk(item.subMenu);
65
- }
66
- }
67
- };
68
- walk(items);
69
- return found;
70
- }
71
- /**
72
- * A display's promotable slots that its own track menu offers no pin for,
73
- * sorted. Empty is the healthy answer.
74
- *
75
- * Takes the built menu rather than calling `trackMenuItems()` itself, because
76
- * what a menu contains depends on the display's current state — a row can be
77
- * gated on a rendering type (wiggle line width), on a parent toggle (the sashimi
78
- * options), or on data having arrived. A caller that wants the whole surface has
79
- * to drive the display into the states that reveal it, and that is a decision
80
- * this function should not make silently.
81
- */
82
- export function promotableSlotsWithoutPin(display, menuItems) {
83
- const pinned = pinnedSlots(menuItems);
84
- return [...promotableSlotNames(display.configuration)]
85
- .filter(slot => !pinned.has(slot))
86
- .sort((a, b) => a.localeCompare(b));
87
- }
@@ -1,79 +0,0 @@
1
- import type { IAnyModelType, IStateTreeNode, SnapshotIn } from '@jbrowse/mobx-state-tree';
2
- /**
3
- * A view's init type, derived: the keys its launcher interprets (`Commands`)
4
- * plus every declared property of its state model, optional, in the property's
5
- * own snapshot type. Nothing is restated, so a property is authorable — and
6
- * TYPED — from the line that declares it.
7
- *
8
- * ```ts
9
- * export type LinearSyntenyViewInit = ViewInit<
10
- * LinearSyntenyViewStateModel,
11
- * LinearSyntenyViewCommands
12
- * >
13
- * ```
14
- *
15
- * THE ONE RULE THIS DEPENDS ON: the model's own `init` property must be typed
16
- * as the `Commands`, not as this. `init` is a property, so an `init` typed as
17
- * the whole thing makes the whole thing depend on itself — TS7023 on the
18
- * factory, then implicit-any across every file that touches the view (ADR-055,
19
- * same failure the view/display instance pair has). Commands never mention the
20
- * model, so typing `init` as those breaks the loop, and it costs nothing: the
21
- * view's own code reads the commands out of `self.init`, and the settings half
22
- * is read only by `applyInitSettings`, which asks the model rather than a type.
23
- */
24
- export type ViewInit<M extends IAnyModelType, Commands> = Commands & Partial<Omit<SnapshotIn<M>, keyof Commands | (typeof RESERVED_KEYS)[number]>>;
25
- export declare const RESERVED_KEYS: readonly ['id', 'type', 'init'];
26
- export interface InitSettingsReport {
27
- /** keys applied, in the order they were found */
28
- applied: string[];
29
- /** keys naming no declared property — a typo, or a prop that never existed */
30
- unknown: string[];
31
- /** declared keys whose value the property's own type rejected */
32
- invalid: string[];
33
- }
34
- /**
35
- * Apply the plain-settings half of an `init` blob: every key naming a declared
36
- * MST property of `self` is written straight to it, and the caller handles only
37
- * the keys it names in `commands`.
38
- *
39
- * THE POINT IS THAT THERE IS NO PER-SETTING CODE. A view used to need a
40
- * hand-written `if (init.x !== undefined) self.setX(init.x)` arm per property,
41
- * so a new toggle worked from its menu the moment it was declared and was
42
- * dropped in silence from every authored surface — a session spec, a share
43
- * link, a config `defaultSession` — until someone remembered the second edit.
44
- * Nobody did: `drawLocationMarkers` shipped unauthorable, and DotplotView's
45
- * `alpha`/`drawCigar`/`lineWidth`/`lockAspectRatio` never had an arm at all.
46
- * Reading the property list off the model at runtime means declaring the
47
- * property IS declaring it authorable, including properties a composed mixin
48
- * brings in (colorBy, showColorLegend), and there is nothing left to keep in
49
- * sync.
50
- *
51
- * `commands` is what a launcher genuinely has to interpret: keys with no
52
- * property behind them (`loc`, `autoDiagonalize`), keys whose name collides
53
- * with a property meaning something else (a spec's `views` is a list of
54
- * assemblies to open; the model's `views` is the built rows), and keys with an
55
- * ordering constraint (`levelHeights` must land after the auto-scale pass).
56
- * Listing one is a decision to write code for it; everything else needs none.
57
- *
58
- * WRITTEN AS A PATCH, not through `setX`. Applying init is state restoration,
59
- * and the authority on that is MST: `applyPatch` validates each value against
60
- * the property's own type and touches nothing else, where `applySnapshot`
61
- * would rebuild the view's children. That it skips the setters is correct
62
- * rather than a shortcut — a session reload restores the same state from a
63
- * snapshot and calls no setters either, so a property needing a setter's side
64
- * effect to be correct is already broken on reload, and the effect belongs in a
65
- * reaction on the property.
66
- *
67
- * A value the property's type rejects is dropped and reported rather than
68
- * thrown: init blobs come from URLs, and one bad number should not cost the
69
- * reader the whole view.
70
- */
71
- export declare function applyInitSettings(self: IStateTreeNode, init: object | undefined, { commands }?: {
72
- commands?: readonly string[];
73
- }): InitSettingsReport;
74
- /**
75
- * Say what `applyInitSettings` refused, naming the surface. Split from the
76
- * apply so a caller under test can assert the report without a console, and so
77
- * the two messages read the same wherever they come from.
78
- */
79
- export declare function warnInitSettings(surface: string, report: InitSettingsReport): void;
@@ -1,91 +0,0 @@
1
- import { applyPatch, getPropertyMembers } from '@jbrowse/mobx-state-tree';
2
- // Keys that are a view's identity or its plumbing rather than a setting. A
3
- // launch spec never gets to write these: `type` picks the view, `id` is passed
4
- // top-level so MST's optional identifier honors it, and `init` inside `init` is
5
- // the nesting mistake loadSessionSpec already reports.
6
- export const RESERVED_KEYS = ['id', 'type', 'init'];
7
- const RESERVED = new Set(RESERVED_KEYS);
8
- /**
9
- * Apply the plain-settings half of an `init` blob: every key naming a declared
10
- * MST property of `self` is written straight to it, and the caller handles only
11
- * the keys it names in `commands`.
12
- *
13
- * THE POINT IS THAT THERE IS NO PER-SETTING CODE. A view used to need a
14
- * hand-written `if (init.x !== undefined) self.setX(init.x)` arm per property,
15
- * so a new toggle worked from its menu the moment it was declared and was
16
- * dropped in silence from every authored surface — a session spec, a share
17
- * link, a config `defaultSession` — until someone remembered the second edit.
18
- * Nobody did: `drawLocationMarkers` shipped unauthorable, and DotplotView's
19
- * `alpha`/`drawCigar`/`lineWidth`/`lockAspectRatio` never had an arm at all.
20
- * Reading the property list off the model at runtime means declaring the
21
- * property IS declaring it authorable, including properties a composed mixin
22
- * brings in (colorBy, showColorLegend), and there is nothing left to keep in
23
- * sync.
24
- *
25
- * `commands` is what a launcher genuinely has to interpret: keys with no
26
- * property behind them (`loc`, `autoDiagonalize`), keys whose name collides
27
- * with a property meaning something else (a spec's `views` is a list of
28
- * assemblies to open; the model's `views` is the built rows), and keys with an
29
- * ordering constraint (`levelHeights` must land after the auto-scale pass).
30
- * Listing one is a decision to write code for it; everything else needs none.
31
- *
32
- * WRITTEN AS A PATCH, not through `setX`. Applying init is state restoration,
33
- * and the authority on that is MST: `applyPatch` validates each value against
34
- * the property's own type and touches nothing else, where `applySnapshot`
35
- * would rebuild the view's children. That it skips the setters is correct
36
- * rather than a shortcut — a session reload restores the same state from a
37
- * snapshot and calls no setters either, so a property needing a setter's side
38
- * effect to be correct is already broken on reload, and the effect belongs in a
39
- * reaction on the property.
40
- *
41
- * A value the property's type rejects is dropped and reported rather than
42
- * thrown: init blobs come from URLs, and one bad number should not cost the
43
- * reader the whole view.
44
- */
45
- export function applyInitSettings(self,
46
- // `object` rather than a keyed record: an init blob's static type is the
47
- // view's own `ViewInit`, which has named members and no index signature — by
48
- // design, so a typo is a compile error there — and that is not assignable to
49
- // `Record<string, unknown>`. This reads it by enumeration anyway.
50
- init, { commands = [] } = {}) {
51
- const report = { applied: [], unknown: [], invalid: [] };
52
- if (!init) {
53
- return report;
54
- }
55
- const skip = new Set(commands);
56
- const { properties } = getPropertyMembers(self);
57
- const patch = [];
58
- for (const [key, value] of Object.entries(init)) {
59
- if (skip.has(key) || RESERVED.has(key) || value === undefined) {
60
- continue;
61
- }
62
- const propType = properties[key];
63
- if (!propType) {
64
- report.unknown.push(key);
65
- }
66
- else if (!propType.is(value)) {
67
- report.invalid.push(key);
68
- }
69
- else {
70
- patch.push({ op: 'replace', path: `/${key}`, value });
71
- report.applied.push(key);
72
- }
73
- }
74
- if (patch.length) {
75
- applyPatch(self, patch);
76
- }
77
- return report;
78
- }
79
- /**
80
- * Say what `applyInitSettings` refused, naming the surface. Split from the
81
- * apply so a caller under test can assert the report without a console, and so
82
- * the two messages read the same wherever they come from.
83
- */
84
- export function warnInitSettings(surface, report) {
85
- if (report.unknown.length) {
86
- console.warn(`${surface} ignored unknown key(s): ${report.unknown.join(', ')}`);
87
- }
88
- if (report.invalid.length) {
89
- console.warn(`${surface} ignored key(s) with an invalid value: ${report.invalid.join(', ')}`);
90
- }
91
- }
@@ -1,23 +0,0 @@
1
- import type { ResolvableDisplay } from '../configuration/promotableResolve.ts';
2
- import type { AbstractSessionModel } from './types/index.ts';
3
- /**
4
- * #api core/util
5
- * Every display on an open track, across all open views — the reach of anything
6
- * that acts on "the tracks the user is looking at": a promoted default's "apply
7
- * to open tracks", and the share/export bake. One walk so those can't drift
8
- * apart.
9
- *
10
- * Recurses into composite views. A display nested in one resolves the cascade
11
- * like any other but was invisible to both callers, so the share/export bake
12
- * didn't bake its inherited values and a shared session containing a
13
- * breakpoint-split or synteny view rendered differently for the recipient.
14
- * `LGVSyntenyDisplay` is only ever reached through this branch, so don't flatten
15
- * the recursion away. `hasChildViews` names the one composite shape it does not
16
- * cover.
17
- *
18
- * A view holding neither (e.g. spreadsheet) drops out via the structural guards.
19
- * A view whose displays declare no promotable slot (e.g. dotplot, which does
20
- * hold tracks) is walked and contributes nothing — harmless, and cheaper than
21
- * asking each display whether it has anything to promote.
22
- */
23
- export declare function openPromotableDisplays(session: AbstractSessionModel): ResolvableDisplay[];
@@ -1,79 +0,0 @@
1
- /**
2
- * @module
3
- * One walk of "every display on an open track, across all open views".
4
- *
5
- * Lives here rather than in `configuration/promotableDefaults.ts`, where it grew:
6
- * nothing about it is a cascade concern — it answers "the tracks the user is
7
- * looking at", and its two callers want that for different reasons (the promoted
8
- * default's "apply to open tracks", and `product-core`'s share/export bake). It
9
- * cannot move next to either one: `product-core` imports `@jbrowse/core`, never
10
- * the reverse.
11
- *
12
- * The displays are typed `ResolvableDisplay` because both callers immediately
13
- * resolve config off them, and that shape (`IStateTreeNode` + `type` +
14
- * `configuration`) is the smallest thing either needs.
15
- */
16
- import { isObject } from './objectUtils.js';
17
- import { isViewContainer } from './types/index.js';
18
- // A view whose open tracks we can enumerate. The generic view interface doesn't
19
- // surface `tracks`, so narrow structurally — the declared display shape is the
20
- // same ResolvableDisplay the cascade already operates on.
21
- //
22
- // Checks the elements, not just that `tracks` is an array: this narrowing is
23
- // what every consumer downstream trusts, and an element without `displays`
24
- // would put `undefined` in the walk and throw at the first `display.type` —
25
- // inside a share/export bake, i.e. as far from the cause as it gets. Every
26
- // `tracks`-bearing view today holds real track models, so this only ever
27
- // confirms what is already true.
28
- function hasOpenTracks(view) {
29
- return ('tracks' in view &&
30
- Array.isArray(view.tracks) &&
31
- view.tracks.every(t => isObject(t) && Array.isArray(t.displays)));
32
- }
33
- // A composite view holding child views in a `views` array: breakpoint-split and
34
- // the linear-comparative family incl. synteny. Not exclusive with
35
- // `hasOpenTracks`: LinearComparativeView has both its own synteny tracks and two
36
- // child LGVs.
37
- //
38
- // A view that holds its children under *named* props instead (SvInspectorView's
39
- // `spreadsheetView`/`circularView`) is NOT reached. Enumerating a view's own
40
- // properties to find them isn't an option — reading every key of an MST node
41
- // invokes every computed view on it, several of which throw before the view is
42
- // initialized. No display reachable that way declares a promotable slot today,
43
- // so nothing is currently missed; if one ever does, give that view a `views`
44
- // getter returning its children rather than duck-typing harder here.
45
- function hasChildViews(view) {
46
- return ('views' in view &&
47
- Array.isArray(view.views) &&
48
- view.views.every(v => typeof v === 'object' && v !== null));
49
- }
50
- function displaysInView(view) {
51
- return [
52
- ...(hasOpenTracks(view) ? view.tracks.flatMap(t => t.displays) : []),
53
- ...(hasChildViews(view) ? view.views.flatMap(displaysInView) : []),
54
- ];
55
- }
56
- /**
57
- * #api core/util
58
- * Every display on an open track, across all open views — the reach of anything
59
- * that acts on "the tracks the user is looking at": a promoted default's "apply
60
- * to open tracks", and the share/export bake. One walk so those can't drift
61
- * apart.
62
- *
63
- * Recurses into composite views. A display nested in one resolves the cascade
64
- * like any other but was invisible to both callers, so the share/export bake
65
- * didn't bake its inherited values and a shared session containing a
66
- * breakpoint-split or synteny view rendered differently for the recipient.
67
- * `LGVSyntenyDisplay` is only ever reached through this branch, so don't flatten
68
- * the recursion away. `hasChildViews` names the one composite shape it does not
69
- * cover.
70
- *
71
- * A view holding neither (e.g. spreadsheet) drops out via the structural guards.
72
- * A view whose displays declare no promotable slot (e.g. dotplot, which does
73
- * hold tracks) is walked and contributes nothing — harmless, and cheaper than
74
- * asking each display whether it has anything to promote.
75
- */
76
- export function openPromotableDisplays(session) {
77
- const views = isViewContainer(session) ? session.views : [];
78
- return views.flatMap(displaysInView);
79
- }