@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
@@ -4,33 +4,24 @@ import type { Reversible } from '../ui/filterMenuItems.ts';
4
4
  * The two-tier feature-filter contract, shared by every display offering a
5
5
  * "Filter by..." row. Two tiers because the setting has two authors:
6
6
  *
7
- * - the **`jexlFilters` config slot** on `baseLinearDisplayConfigSchema`, which
8
- * an admin declares in a track config. It stores expressions **unprefixed**,
9
- * because config-slot values are deferred-evaluation and a stored `jexl:` is
10
- * what marks a slot as a callback — so the prefix goes on at read time, in
11
- * `configuredJexlFilters`.
12
- * - the **`jexlFiltersSetting` display property**, which the dialog writes and
13
- * which stores them already prefixed (the runtime convention). Set — *even to
14
- * an empty list* — it replaces the config tier entirely, which is what makes
15
- * "clear the filters an admin declared" expressible.
7
+ * - the **`filter` config slot**, which an admin declares in a track config:
8
+ * `jexlFilterConfigSchemaFields` in display-kit, spread by the canvas base
9
+ * display schema, the mark display schema and the shared multi-sample
10
+ * variant schema — the three whose models read it.
11
+ * - the **`filterSetting` display property**, which the dialog writes. Set —
12
+ * *even to an empty list* — it replaces the config tier entirely, which is
13
+ * what makes "clear the filters an admin declared" expressible.
16
14
  *
17
- * Every display implemented one half of this and a different half each:
18
- * `LinearBasicDisplay` had both tiers, `LDDisplay` had the slot alone, and the
19
- * multi-sample variant displays had a property literally named `jexlFilters`
20
- * that shadowed the inherited slot, so a config filter on one of those tracks
21
- * was read by nothing and reported no error. Neither of the last two prefixed,
22
- * so a filter following the slot's own documented convention reached
23
- * `stringToJexlExpression` unprefixed and threw inside the worker.
15
+ * Both hold `jexl:` expressions and refuse a bare string.
24
16
  */
25
17
  export interface JexlFilterSource {
26
18
  /**
27
- * The dialog's override, `jexl:`-prefixed. `undefined` means "follow the
28
- * config slot"; an empty array means "the user cleared them".
19
+ * The dialog's override. `undefined` means "follow the config slot"; an
20
+ * empty array means "the user cleared them".
29
21
  */
30
- jexlFiltersSetting?: readonly string[];
22
+ filterSetting?: readonly string[];
31
23
  /**
32
- * The config tier, `jexl:`-prefixed — in practice
33
- * `configuredJexlFilters(self)`. A member rather than a read this module does
24
+ * The config tier — in practice `configuredJexlFilters(self)`. A member rather than a read this module does
34
25
  * itself, so the two things that consume this contract off a **duck-typed**
35
26
  * model — LD's structural menu builder and its shape test — need no live
36
27
  * config node to answer a count with.
@@ -45,17 +36,19 @@ export interface JexlFilterSource {
45
36
  * cannot satisfy.
46
37
  */
47
38
  export interface JexlFilterModel extends JexlFilterSource {
48
- setJexlFilters: (filters?: string[]) => void;
39
+ setFilter: (filters?: string[]) => void;
49
40
  }
41
+ /** The `filterSetting` property, for a display model to declare. */
42
+ export declare const FilterSetting: import("@jbrowse/mobx-state-tree").IMaybe<import("@jbrowse/mobx-state-tree").IArrayType<import("@jbrowse/mobx-state-tree").ISimpleType<string>>>;
50
43
  /**
51
- * What the `jexlFilters` config slot alone declares, `jexl:`-prefixed. The slot
52
- * stores them unprefixed and every runtime consumer wants them prefixed, so the
53
- * prefixing happens once, here — this is what a display's `configuredFilters`
54
- * member is.
44
+ * A snapshot's v4 `jexlFiltersSetting` as `filterSetting`, for the
45
+ * `preProcessSnapshot` of the model declaring {@link FilterSetting}.
55
46
  */
47
+ export declare function liftRetiredFilterSetting<T>(snap: T): T;
48
+ /** What the `filter` config slot alone declares: a display's `configuredFilters`. */
56
49
  export declare function configuredJexlFilters(self: Parameters<typeof getConf>[0]): string[];
57
50
  /**
58
- * The filters actually applied, `jexl:`-prefixed — the single source of truth
51
+ * The filters actually applied — the single source of truth
59
52
  * for the worker (via `rpcProps`), for the "Filter by..." dialog (so config
60
53
  * filters show up and are editable), and for the narrowing count below.
61
54
  */
@@ -1,25 +1,37 @@
1
1
  // own module, not the configuration barrel: that barrel re-exports modules
2
2
  // which import this one, and a value import back into it is the cycle shape
3
3
  // `openFeatureWidget` documents
4
+ import { types } from '@jbrowse/mobx-state-tree';
4
5
  import { getConf } from '../configuration/getConf.js';
5
6
  import { ensureJexlPrefix } from './jexlStrings.js';
7
+ import { JexlExpressionString } from './types/mst.js';
8
+ /** The `filterSetting` property, for a display model to declare. */
9
+ export const FilterSetting = types.maybe(types.array(JexlExpressionString));
6
10
  /**
7
- * What the `jexlFilters` config slot alone declares, `jexl:`-prefixed. The slot
8
- * stores them unprefixed and every runtime consumer wants them prefixed, so the
9
- * prefixing happens once, here — this is what a display's `configuredFilters`
10
- * member is.
11
+ * A snapshot's v4 `jexlFiltersSetting` as `filterSetting`, for the
12
+ * `preProcessSnapshot` of the model declaring {@link FilterSetting}.
11
13
  */
14
+ export function liftRetiredFilterSetting(snap) {
15
+ if (!snap || typeof snap !== 'object' || !('jexlFiltersSetting' in snap)) {
16
+ return snap;
17
+ }
18
+ const { jexlFiltersSetting, ...rest } = snap;
19
+ return (Array.isArray(jexlFiltersSetting) && !('filterSetting' in rest)
20
+ ? { ...rest, filterSetting: jexlFiltersSetting.map(ensureJexlPrefix) }
21
+ : rest);
22
+ }
23
+ /** What the `filter` config slot alone declares: a display's `configuredFilters`. */
12
24
  export function configuredJexlFilters(self) {
13
- return getConf(self, 'jexlFilters').map(ensureJexlPrefix);
25
+ return getConf(self, 'filter');
14
26
  }
15
27
  /**
16
- * The filters actually applied, `jexl:`-prefixed — the single source of truth
28
+ * The filters actually applied — the single source of truth
17
29
  * for the worker (via `rpcProps`), for the "Filter by..." dialog (so config
18
30
  * filters show up and are editable), and for the narrowing count below.
19
31
  */
20
32
  export function activeJexlFilters(self) {
21
- const { jexlFiltersSetting } = self;
22
- return jexlFiltersSetting ? [...jexlFiltersSetting] : self.configuredFilters();
33
+ const { filterSetting } = self;
34
+ return filterSetting ? [...filterSetting] : self.configuredFilters();
23
35
  }
24
36
  /**
25
37
  * The `Reversible` a display declares for its jexl filters.
@@ -34,16 +46,16 @@ export function activeJexlFilters(self) {
34
46
  * restoring the config default, which the group clear already is.
35
47
  */
36
48
  export function jexlFilterNarrowing(self) {
37
- const override = self.jexlFiltersSetting;
49
+ const override = self.filterSetting;
38
50
  const configured = self.configuredFilters();
39
51
  return {
40
52
  count: override !== undefined &&
41
53
  (override.length !== configured.length ||
42
- override.some((f, i) => ensureJexlPrefix(f) !== configured[i]))
54
+ override.some((f, i) => f !== configured[i]))
43
55
  ? 1
44
56
  : 0,
45
57
  clear: () => {
46
- self.setJexlFilters(undefined);
58
+ self.setFilter(undefined);
47
59
  },
48
60
  };
49
61
  }
@@ -1,6 +1,6 @@
1
1
  export interface JexlExpression {
2
2
  eval(context?: Record<string, unknown>): unknown;
3
- _exprStr?: string;
3
+ readonly source?: string;
4
4
  }
5
5
  export interface JexlInstance {
6
6
  compile(code: string): JexlExpression;
@@ -11,9 +11,8 @@ export declare function isJexl(str: unknown): str is string;
11
11
  /** Add the `jexl:` prefix unless the string already carries it. */
12
12
  export declare function ensureJexlPrefix(code: string): string;
13
13
  /**
14
- * Compile a `jexl:...` string to an Expression. Compilation is memoized on the
15
- * jexl instance (see `createJexlInstance`), so this is a thin prefix-stripping
16
- * wrapper.
14
+ * Compile a `jexl:...` string to an Expression. The jexl instance caches
15
+ * compilation, so this only strips the prefix.
17
16
  *
18
17
  * @param str - string of code like `jexl:...`
19
18
  * @param jexl - the instance whose registered functions the expression may call
@@ -8,9 +8,8 @@ export function ensureJexlPrefix(code) {
8
8
  return isJexl(code) ? code : `${JEXL_PREFIX}${code}`;
9
9
  }
10
10
  /**
11
- * Compile a `jexl:...` string to an Expression. Compilation is memoized on the
12
- * jexl instance (see `createJexlInstance`), so this is a thin prefix-stripping
13
- * wrapper.
11
+ * Compile a `jexl:...` string to an Expression. The jexl instance caches
12
+ * compilation, so this only strips the prefix.
14
13
  *
15
14
  * @param str - string of code like `jexl:...`
16
15
  * @param jexl - the instance whose registered functions the expression may call
@@ -17,9 +17,16 @@ export default class GranularRectLayout {
17
17
  hardRowLimit?: number;
18
18
  });
19
19
  /**
20
+ * `lower` gives the rows lying wholly at or past `lower.top` px below the
21
+ * rect's top a span of their own.
22
+ *
20
23
  * @returns top position for the rect, or Null if laying
21
24
  * out the rect would exceed maxHeight
22
25
  */
23
- addRect(id: string, left: number, right: number, height: number): number | null;
26
+ addRect(id: string, left: number, right: number, height: number, lower?: {
27
+ top: number;
28
+ left: number;
29
+ right: number;
30
+ }): number | null;
24
31
  private getOrCreateRow;
25
32
  }
@@ -49,10 +49,13 @@ export default class GranularRectLayout {
49
49
  this.maxHeight = Math.ceil(maxHeight / this.pitchY);
50
50
  }
51
51
  /**
52
+ * `lower` gives the rows lying wholly at or past `lower.top` px below the
53
+ * rect's top a span of their own.
54
+ *
52
55
  * @returns top position for the rect, or Null if laying
53
56
  * out the rect would exceed maxHeight
54
57
  */
55
- addRect(id, left, right, height) {
58
+ addRect(id, left, right, height, lower) {
56
59
  const pitchX = this.pitchX;
57
60
  const pitchY = this.pitchY;
58
61
  // if we have already laid it out, return its layout
@@ -65,12 +68,19 @@ export default class GranularRectLayout {
65
68
  const pLeft = Math.trunc(left / pitchX);
66
69
  const pRight = Math.trunc(right / pitchX);
67
70
  const pHeight = Math.ceil(height / pitchY);
71
+ const pLowerTop = lower ? Math.ceil(lower.top / pitchY) : pHeight;
68
72
  const rectangle = {
69
73
  l: pLeft,
70
74
  r: pRight,
71
75
  top: null,
72
76
  h: pHeight,
73
77
  };
78
+ const lowerSpan = lower
79
+ ? {
80
+ l: Math.trunc(lower.left / pitchX),
81
+ r: Math.trunc(lower.right / pitchX),
82
+ }
83
+ : rectangle;
74
84
  // Allow features to start at any position up to maxHeight
75
85
  // Features starting at maxHeight or beyond are filtered out, but features
76
86
  // that start below maxHeight and extend past it are allowed
@@ -84,7 +94,10 @@ export default class GranularRectLayout {
84
94
  // between them still spans y, because y < top + pHeight — so nothing between
85
95
  // can fit. `top = y` plus the loop's own increment is that jump, and it turns
86
96
  // the scan from O(rows * pHeight) into O(rows): without it, a rect pHeight
87
- // rows tall re-tests the row that blocked it pHeight times over.
97
+ // rows tall re-tests the row that blocked it pHeight times over. Moving
98
+ // the rect down only moves y up within it, so a hit above the lower span
99
+ // blocks every top to y, and a hit in the lower span blocks just the tops
100
+ // keeping y there: the jump goes to the first top putting y above it.
88
101
  outer: for (; top <= maxTop; top += 1) {
89
102
  // Check all rows that this rectangle would occupy
90
103
  const maxY = top + pHeight;
@@ -97,13 +110,17 @@ export default class GranularRectLayout {
97
110
  const intervals = row.getIntervals();
98
111
  const len = intervals.length;
99
112
  if (len > 0) {
113
+ const inLower = y - top >= pLowerTop;
114
+ const l = inLower ? lowerSpan.l : pLeft;
115
+ const r = inLower ? lowerSpan.r : pRight;
116
+ const blockedTop = inLower ? y - pLowerTop : y;
100
117
  if (len < 40) {
101
118
  // Linear scan for small arrays
102
119
  for (let i = 0; i < len; i += 2) {
103
120
  const start = intervals[i];
104
121
  const end = intervals[i + 1];
105
- if (end > pLeft && start < pRight) {
106
- top = y;
122
+ if (end > l && start < r) {
123
+ top = blockedTop;
107
124
  continue outer;
108
125
  }
109
126
  }
@@ -115,7 +132,7 @@ export default class GranularRectLayout {
115
132
  while (low < high) {
116
133
  const mid = (low + high) >>> 1;
117
134
  const midIdx = mid << 1;
118
- if (intervals[midIdx + 1] <= pLeft) {
135
+ if (intervals[midIdx + 1] <= l) {
119
136
  low = mid + 1;
120
137
  }
121
138
  else {
@@ -125,8 +142,8 @@ export default class GranularRectLayout {
125
142
  const idx = low << 1;
126
143
  if (idx < len) {
127
144
  const start = intervals[idx];
128
- if (start < pRight) {
129
- top = y;
145
+ if (start < r) {
146
+ top = blockedTop;
130
147
  continue outer;
131
148
  }
132
149
  }
@@ -143,7 +160,7 @@ export default class GranularRectLayout {
143
160
  rectangle.top = top;
144
161
  const yEnd = top + pHeight;
145
162
  for (let y = top; y < yEnd; y += 1) {
146
- this.getOrCreateRow(y).addRect(rectangle);
163
+ this.getOrCreateRow(y).addRect(y - top >= pLowerTop ? lowerSpan : rectangle);
147
164
  }
148
165
  return top * pitchY;
149
166
  }
@@ -0,0 +1,13 @@
1
+ import type { IStateTreeNode } from '@jbrowse/mobx-state-tree';
2
+ /**
3
+ * #api core/util
4
+ * Run a display's `afterAttach` body from a module loaded on demand, so the
5
+ * autorun installers stay out of the display's eager bundle.
6
+ *
7
+ * One policy for the gap the `await` opens: a node torn down before the module
8
+ * lands installs nothing, and a module that fails to load is reported where the
9
+ * user can see it rather than onto the display's own error slot — that slot is
10
+ * what `reload()` clears, and nothing would re-run the install behind it.
11
+ * Three displays hand-rolled this IIFE and each drew the lines differently.
12
+ */
13
+ export declare function runLazyAfterAttach<Self extends IStateTreeNode>(self: Self, load: () => Promise<(self: Self) => void>): void;
@@ -0,0 +1,31 @@
1
+ import { isAlive } from '@jbrowse/mobx-state-tree';
2
+ import { getNotificationSink } from './sessionServices.js';
3
+ /**
4
+ * #api core/util
5
+ * Run a display's `afterAttach` body from a module loaded on demand, so the
6
+ * autorun installers stay out of the display's eager bundle.
7
+ *
8
+ * One policy for the gap the `await` opens: a node torn down before the module
9
+ * lands installs nothing, and a module that fails to load is reported where the
10
+ * user can see it rather than onto the display's own error slot — that slot is
11
+ * what `reload()` clears, and nothing would re-run the install behind it.
12
+ * Three displays hand-rolled this IIFE and each drew the lines differently.
13
+ */
14
+ export function runLazyAfterAttach(self, load) {
15
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
16
+ ;
17
+ (async () => {
18
+ try {
19
+ const install = await load();
20
+ if (isAlive(self)) {
21
+ install(self);
22
+ }
23
+ }
24
+ catch (e) {
25
+ if (isAlive(self)) {
26
+ console.error(e);
27
+ getNotificationSink(self).notifyError(`${e}`, e);
28
+ }
29
+ }
30
+ })();
31
+ }
@@ -0,0 +1,19 @@
1
+ import type { AnyReactComponentType } from './types/util.ts';
2
+ /**
3
+ * `React.lazy` that also exposes the import it wraps, so code that knows a
4
+ * component is about to render (a session naming a view, a track being shown)
5
+ * can start the download instead of waiting for React to reach it. A failed
6
+ * load is not kept, so the render that follows tries again.
7
+ *
8
+ * Once the import has landed, the first render gets the module synchronously.
9
+ * React.lazy suspends on any promise, settled or not, and React holds a
10
+ * suspended boundary's reveal for 300 ms after its fallback commits, so a
11
+ * preloaded component nested under another cost that 300 ms per level.
12
+ */
13
+ export declare function lazyWithPreload<T extends AnyReactComponentType>(factory: () => Promise<{
14
+ default: T;
15
+ }>): import("react").LazyExoticComponent<T> & {
16
+ preload: () => Promise<{
17
+ default: T;
18
+ }>;
19
+ };
@@ -0,0 +1,27 @@
1
+ import { lazy } from 'react';
2
+ /**
3
+ * `React.lazy` that also exposes the import it wraps, so code that knows a
4
+ * component is about to render (a session naming a view, a track being shown)
5
+ * can start the download instead of waiting for React to reach it. A failed
6
+ * load is not kept, so the render that follows tries again.
7
+ *
8
+ * Once the import has landed, the first render gets the module synchronously.
9
+ * React.lazy suspends on any promise, settled or not, and React holds a
10
+ * suspended boundary's reveal for 300 ms after its fallback commits, so a
11
+ * preloaded component nested under another cost that 300 ms per level.
12
+ */
13
+ export function lazyWithPreload(factory) {
14
+ let loaded;
15
+ let loading;
16
+ const load = () => (loading ??= factory().then(module => (loaded = module), (error) => {
17
+ loading = undefined;
18
+ throw error;
19
+ }));
20
+ const settled = (module) => ({
21
+ // eslint-disable-next-line unicorn/no-thenable -- React.lazy takes a module synchronously only from a then that calls back at once
22
+ then: (resolve) => {
23
+ resolve(module);
24
+ },
25
+ });
26
+ return Object.assign(lazy(() => (loaded ? settled(loaded) : load())), { preload: load });
27
+ }
@@ -0,0 +1,72 @@
1
+ import type { CategoricalEntry, CategoricalScale } from '../ui/colorScale.ts';
2
+ import type { LegendSwatch } from '../ui/legendSpec.ts';
3
+ import type { CategoricalField } from './categoricalField.ts';
4
+ export interface LegendCandidate {
5
+ rowIndex: number;
6
+ value: string;
7
+ color: number;
8
+ }
9
+ export interface LegendEntry {
10
+ values: string[];
11
+ color: number;
12
+ }
13
+ export declare const MAX_LEGEND_ENTRIES = 30;
14
+ export declare const MAX_LEGEND_CANDIDATES = 1024;
15
+ /**
16
+ * Accumulator for the distinct (row, value, color) combinations a packer walks
17
+ * past, in first-seen order and bounded, so the main thread never re-walks the
18
+ * features. Deduped on the whole triple: a row of the union lists every value
19
+ * painted in its color, so a second value on that color has to still be in the
20
+ * list to reach it.
21
+ */
22
+ export declare function createLegendCandidateCollector(maxCandidates?: number): {
23
+ candidates: LegendCandidate[];
24
+ add(rowIndex: number, value: string, color: number): void;
25
+ };
26
+ export interface LegendCandidateSource {
27
+ candidates: readonly LegendCandidate[];
28
+ rowPaintsCandidateColor: (rowIndex: number) => boolean;
29
+ }
30
+ /**
31
+ * The categorical color key over any number of packed regions: one entry per
32
+ * distinct color listing every value painted in it, colors in first-seen
33
+ * order. Keyed by color rather than by value because hiding a category hides
34
+ * features BY color, so two values sharing one color are one row that names
35
+ * both; a value met in two colors stays with the first.
36
+ *
37
+ * `[]` when there are more than `maxEntries` distinct colors, where the data is
38
+ * not a categorical vocabulary. `regions` is consumed lazily.
39
+ */
40
+ export declare function unionLegendCandidates<T>(regions: Iterable<T>, resolve: (region: T) => LegendCandidateSource, maxEntries?: number): LegendEntry[];
41
+ /**
42
+ * A source whose every entry is a candidate its one row paints: the entries of
43
+ * a scale table `encodeFeatures` resolved, or any walk that met each value in
44
+ * one color.
45
+ */
46
+ export declare function everyRowPaints(entries: readonly {
47
+ value: string;
48
+ color: number;
49
+ }[]): LegendCandidateSource;
50
+ /**
51
+ * The one categorical key a color channel derives from what a worker painted:
52
+ * the union above over the loaded regions, each row a painted color naming
53
+ * every value in it through `field` and ordered by it, and nothing where the
54
+ * rows would say nothing (`legendIsReadable`). A display resolving its own colors hands the
55
+ * candidates its packer recorded; one resolved by `encodeFeatures` hands the
56
+ * entries of the scale tables that came back. Either way the key lists what
57
+ * the painting holds, and a `closed` field's domain besides once anything
58
+ * painted. `title` heads it in place of the field's name, `''` heading
59
+ * nothing, and `swatches` draws a row as something other than its color's box.
60
+ * `besides` are the colors of rows a display lists beside these, which the
61
+ * one-color test counts and the length test does not.
62
+ */
63
+ export declare function derivedColorScale<T>(regions: Iterable<T>, resolve: (region: T) => LegendCandidateSource, { id, field, title, maxItems, swatches, besides, }: {
64
+ id: string;
65
+ field: CategoricalField;
66
+ title?: string;
67
+ maxItems?: number;
68
+ swatches?: (row: CategoricalEntry & {
69
+ color: string;
70
+ }) => LegendSwatch[];
71
+ besides?: readonly string[];
72
+ }): CategoricalScale[];
@@ -0,0 +1,138 @@
1
+ import { MAX_LEGEND_ITEMS, legendIsReadable } from '../ui/legendSpec.js';
2
+ import { abgrToCssRgba, cssColorToABGR } from './colorBits.js';
3
+ // How many distinct colors a derived key may name and still BE a key. Past this
4
+ // the data is not a categorical vocabulary (a track keyed by unique per-feature
5
+ // names), and a list of every feature is the thing a key exists instead of.
6
+ //
7
+ // A different question from `legendIsReadable`'s lower bar, which asks whether a
8
+ // key a display already has is worth the rows it costs.
9
+ export const MAX_LEGEND_ENTRIES = 30;
10
+ // Bound on the candidate list one region ships. Far above MAX_LEGEND_ENTRIES, so
11
+ // a vocabulary that is categorical at all crosses whole, and a track with a name
12
+ // per feature ships a prefix that reads the same way it would have.
13
+ export const MAX_LEGEND_CANDIDATES = 1024;
14
+ /**
15
+ * Accumulator for the distinct (row, value, color) combinations a packer walks
16
+ * past, in first-seen order and bounded, so the main thread never re-walks the
17
+ * features. Deduped on the whole triple: a row of the union lists every value
18
+ * painted in its color, so a second value on that color has to still be in the
19
+ * list to reach it.
20
+ */
21
+ export function createLegendCandidateCollector(maxCandidates = MAX_LEGEND_CANDIDATES) {
22
+ const candidates = [];
23
+ const seen = new Set();
24
+ return {
25
+ candidates,
26
+ add(rowIndex, value, color) {
27
+ const id = `${rowIndex}\u0000${color}\u0000${value}`;
28
+ if (candidates.length < maxCandidates && !seen.has(id)) {
29
+ seen.add(id);
30
+ candidates.push({ rowIndex, value, color });
31
+ }
32
+ },
33
+ };
34
+ }
35
+ /**
36
+ * The categorical color key over any number of packed regions: one entry per
37
+ * distinct color listing every value painted in it, colors in first-seen
38
+ * order. Keyed by color rather than by value because hiding a category hides
39
+ * features BY color, so two values sharing one color are one row that names
40
+ * both; a value met in two colors stays with the first.
41
+ *
42
+ * `[]` when there are more than `maxEntries` distinct colors, where the data is
43
+ * not a categorical vocabulary. `regions` is consumed lazily.
44
+ */
45
+ export function unionLegendCandidates(regions, resolve, maxEntries = MAX_LEGEND_ENTRIES) {
46
+ const rows = new Map();
47
+ const seenValues = new Set();
48
+ for (const region of regions) {
49
+ const { candidates, rowPaintsCandidateColor } = resolve(region);
50
+ for (const { rowIndex, value, color } of candidates) {
51
+ if (!rowPaintsCandidateColor(rowIndex) || seenValues.has(value)) {
52
+ continue;
53
+ }
54
+ seenValues.add(value);
55
+ const row = rows.get(color);
56
+ if (row) {
57
+ row.values.push(value);
58
+ }
59
+ else {
60
+ rows.set(color, { values: [value], color });
61
+ if (rows.size > maxEntries) {
62
+ return [];
63
+ }
64
+ }
65
+ }
66
+ }
67
+ return [...rows.values()];
68
+ }
69
+ /**
70
+ * A source whose every entry is a candidate its one row paints: the entries of
71
+ * a scale table `encodeFeatures` resolved, or any walk that met each value in
72
+ * one color.
73
+ */
74
+ export function everyRowPaints(entries) {
75
+ return {
76
+ candidates: entries.map(({ value, color }) => ({
77
+ rowIndex: 0,
78
+ value,
79
+ color,
80
+ })),
81
+ rowPaintsCandidateColor: () => true,
82
+ };
83
+ }
84
+ /**
85
+ * The one categorical key a color channel derives from what a worker painted:
86
+ * the union above over the loaded regions, each row a painted color naming
87
+ * every value in it through `field` and ordered by it, and nothing where the
88
+ * rows would say nothing (`legendIsReadable`). A display resolving its own colors hands the
89
+ * candidates its packer recorded; one resolved by `encodeFeatures` hands the
90
+ * entries of the scale tables that came back. Either way the key lists what
91
+ * the painting holds, and a `closed` field's domain besides once anything
92
+ * painted. `title` heads it in place of the field's name, `''` heading
93
+ * nothing, and `swatches` draws a row as something other than its color's box.
94
+ * `besides` are the colors of rows a display lists beside these, which the
95
+ * one-color test counts and the length test does not.
96
+ */
97
+ export function derivedColorScale(regions, resolve, { id, field, title = field.field, maxItems, swatches, besides = [], }) {
98
+ const painted = unionLegendCandidates(regions, resolve).map(({ values, color }) => {
99
+ const sorted = values.toSorted(field.compare);
100
+ const value = sorted[0];
101
+ return {
102
+ value,
103
+ values: sorted,
104
+ label: sorted.map(v => field.label(v)).join(', '),
105
+ color: abgrToCssRgba(color),
106
+ ...(value === '' ? { missing: true } : {}),
107
+ };
108
+ });
109
+ const named = new Set(painted.flatMap(e => e.values));
110
+ const unpainted = field.closed && painted.length > 0
111
+ ? field.domain
112
+ .filter(value => !named.has(value))
113
+ .map(value => ({
114
+ value,
115
+ label: field.label(value),
116
+ color: abgrToCssRgba(cssColorToABGR(field.color(value))),
117
+ }))
118
+ : [];
119
+ const entries = [...painted, ...unpainted].sort((a, b) => field.compare(a.value, b.value));
120
+ const beside = besides.map(color => ({
121
+ label: '',
122
+ color: abgrToCssRgba(cssColorToABGR(color)),
123
+ }));
124
+ return painted.length > 0 &&
125
+ legendIsReadable([...entries, ...beside], (maxItems ?? MAX_LEGEND_ITEMS) + beside.length)
126
+ ? [
127
+ {
128
+ kind: 'categorical',
129
+ id,
130
+ ...(title ? { title } : {}),
131
+ ...(field.domain.length > 0 ? { domain: field.domain } : {}),
132
+ entries: swatches
133
+ ? entries.map(row => ({ ...row, swatches: swatches(row) }))
134
+ : entries,
135
+ },
136
+ ]
137
+ : [];
138
+ }
@@ -12,10 +12,10 @@ export const { available: localStorageAvailable, getItem: localStorageGetItem, s
12
12
  // and has to be announced by hand. Missing that half is what let two components
13
13
  // on one key show different values until one of them remounted.
14
14
  //
15
- // Announcing is deliberately not folded into localStorageSetItem. The
16
- // grid-bookmark widget persists its list from an autorun over the list, so a
17
- // write that called its own subscriber back would re-enter that autorun and
18
- // write again, forever. A writer says when its write is news.
15
+ // Announcing is deliberately not folded into localStorageSetItem. A writer
16
+ // that persists from an autorun over its own state would, if its write called
17
+ // its own subscriber back, re-enter that autorun and write again, forever. A
18
+ // writer says when its write is news.
19
19
  const listeners = new Map();
20
20
  // Installed on the first subscription rather than at module scope, so importing
21
21
  // this file from a worker or a test never touches `window`.