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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. package/README.md +1709 -390
  2. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +3 -2
  3. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +5 -5
  4. package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +3 -5
  5. package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +34 -29
  6. package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCard.js +1 -4
  7. package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.d.ts +11 -0
  8. package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.js +37 -14
  9. package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.d.ts +1 -1
  10. package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.js +15 -31
  11. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.d.ts +4 -3
  12. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.js +12 -25
  13. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.d.ts +11 -0
  14. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.js +11 -0
  15. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.d.ts +8 -0
  16. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.js +24 -0
  17. package/esm/BaseFeatureWidget/BaseFeatureDetail/Formatter.js +6 -4
  18. package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.d.ts +4 -0
  19. package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.js +17 -0
  20. package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.d.ts +3 -2
  21. package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +5 -3
  22. package/esm/BaseFeatureWidget/BaseFeatureDetail/index.d.ts +6 -2
  23. package/esm/BaseFeatureWidget/BaseFeatureDetail/index.js +7 -18
  24. package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.d.ts +16 -0
  25. package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.js +49 -0
  26. package/esm/BaseFeatureWidget/BaseFeatureDetail/util.d.ts +0 -8
  27. package/esm/BaseFeatureWidget/BaseFeatureDetail/util.js +6 -29
  28. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceContents.js +7 -34
  29. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeaturePanel.d.ts +2 -2
  30. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceName.js +2 -2
  31. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.js +3 -1
  32. package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.d.ts +12 -0
  33. package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.js +12 -5
  34. package/esm/BaseFeatureWidget/SequenceFeatureDetails/useSequenceData.js +8 -5
  35. package/esm/BaseFeatureWidget/configSchema.d.ts +1 -1
  36. package/esm/BaseFeatureWidget/formatDetails.d.ts +13 -29
  37. package/esm/BaseFeatureWidget/formatDetails.js +62 -83
  38. package/esm/BaseFeatureWidget/index.d.ts +2 -1
  39. package/esm/BaseFeatureWidget/stateModelFactory.d.ts +42 -29
  40. package/esm/BaseFeatureWidget/stateModelFactory.js +98 -98
  41. package/esm/BaseFeatureWidget/types.d.ts +12 -6
  42. package/esm/BaseFeatureWidget/util.d.ts +0 -10
  43. package/esm/BaseFeatureWidget/util.js +0 -17
  44. package/esm/CorePlugin.js +34 -3
  45. package/esm/PluginLoader.d.ts +24 -13
  46. package/esm/PluginLoader.js +167 -51
  47. package/esm/PluginManager.d.ts +130 -24
  48. package/esm/PluginManager.js +180 -32
  49. package/esm/ReExports/MuiDataGridReExports.d.ts +1 -0
  50. package/esm/ReExports/MuiDataGridReExports.js +2 -2
  51. package/esm/ReExports/coreModules.generated.d.ts +2 -0
  52. package/esm/ReExports/coreModules.generated.js +530 -0
  53. package/esm/ReExports/coreWorkerModules.generated.d.ts +2 -0
  54. package/esm/ReExports/coreWorkerModules.generated.js +490 -0
  55. package/esm/ReExports/frameworkModules.d.ts +2 -0
  56. package/esm/ReExports/frameworkModules.js +68 -0
  57. package/esm/ReExports/frameworkShared.d.ts +12 -0
  58. package/esm/ReExports/frameworkShared.js +16 -0
  59. package/esm/ReExports/frameworkWorkerModules.generated.d.ts +2 -0
  60. package/esm/ReExports/frameworkWorkerModules.generated.js +130 -0
  61. package/esm/ReExports/list.js +528 -79
  62. package/esm/ReExports/modules.d.ts +1 -1
  63. package/esm/ReExports/modules.js +10 -165
  64. package/esm/ReExports/registry.d.ts +1 -0
  65. package/esm/ReExports/registry.js +23 -5
  66. package/esm/ReExports/uiStub.d.ts +3 -0
  67. package/esm/ReExports/uiStub.js +33 -0
  68. package/esm/ReExports/workerModules.d.ts +2 -0
  69. package/esm/ReExports/workerModules.js +11 -0
  70. package/esm/TextSearch/TextSearchManager.d.ts +27 -13
  71. package/esm/TextSearch/TextSearchManager.js +77 -36
  72. package/esm/TextSearch/places.d.ts +12 -0
  73. package/esm/TextSearch/places.js +94 -0
  74. package/esm/assemblyManager/assembly.d.ts +21 -19
  75. package/esm/assemblyManager/assembly.js +28 -26
  76. package/esm/assemblyManager/assemblyAdapters.d.ts +1 -1
  77. package/esm/assemblyManager/assemblyAdapters.js +8 -2
  78. package/esm/assemblyManager/assemblyConfigSchema.d.ts +31 -90
  79. package/esm/assemblyManager/assemblyConfigSchema.js +35 -47
  80. package/esm/assemblyManager/assemblyManager.d.ts +35 -180
  81. package/esm/assemblyManager/assemblyManager.js +47 -51
  82. package/esm/assemblyManager/expandAssemblyConfigShorthand.d.ts +25 -18
  83. package/esm/assemblyManager/expandAssemblyConfigShorthand.js +78 -49
  84. package/esm/assemblyManager/geneticCodes.js +2 -5
  85. package/esm/assemblyManager/getSequenceAdapterConfig.d.ts +10 -0
  86. package/esm/assemblyManager/getSequenceAdapterConfig.js +10 -0
  87. package/esm/assemblyManager/indexAssemblyNames.d.ts +9 -0
  88. package/esm/assemblyManager/indexAssemblyNames.js +22 -0
  89. package/esm/assemblyManager/loadRefNameMap.d.ts +1 -1
  90. package/esm/assemblyManager/loadRefNameMap.js +4 -9
  91. package/esm/assemblyManager/refNameMapKey.d.ts +7 -0
  92. package/esm/assemblyManager/refNameMapKey.js +12 -0
  93. package/esm/checkPlugins.d.ts +2 -0
  94. package/esm/checkPlugins.js +38 -17
  95. package/esm/configuration/bamIndexFields.d.ts +49 -0
  96. package/esm/configuration/bamIndexFields.js +41 -0
  97. package/esm/configuration/configurationSchema.d.ts +101 -71
  98. package/esm/configuration/configurationSchema.js +207 -134
  99. package/esm/configuration/configurationSchemaUnion.d.ts +39 -0
  100. package/esm/configuration/configurationSchemaUnion.js +56 -0
  101. package/esm/configuration/configurationSlot.d.ts +150 -60
  102. package/esm/configuration/configurationSlot.js +103 -75
  103. package/esm/configuration/fillLocations.d.ts +14 -0
  104. package/esm/configuration/fillLocations.js +14 -0
  105. package/esm/configuration/formatAboutConfigSchema.d.ts +7 -21
  106. package/esm/configuration/formatDetailsConfigSchema.d.ts +11 -37
  107. package/esm/configuration/formatDetailsConfigSchema.js +10 -13
  108. package/esm/configuration/fullConfSnapshot.d.ts +4 -19
  109. package/esm/configuration/fullConfSnapshot.js +30 -52
  110. package/esm/configuration/getConf.d.ts +45 -41
  111. package/esm/configuration/getConf.js +111 -44
  112. package/esm/configuration/index.d.ts +26 -11
  113. package/esm/configuration/index.js +16 -7
  114. package/esm/configuration/indexType.d.ts +26 -0
  115. package/esm/configuration/indexType.js +38 -0
  116. package/esm/configuration/mergeFormatCallbacks.d.ts +6 -7
  117. package/esm/configuration/mergeFormatCallbacks.js +13 -10
  118. package/esm/configuration/plot.d.ts +61 -0
  119. package/esm/configuration/plot.js +142 -0
  120. package/esm/configuration/readConfObject.d.ts +2 -24
  121. package/esm/configuration/readConfObject.js +20 -63
  122. package/esm/configuration/requirements.d.ts +37 -0
  123. package/esm/configuration/requirements.js +88 -0
  124. package/esm/configuration/schemaRegistry.d.ts +32 -15
  125. package/esm/configuration/schemaRegistry.js +33 -35
  126. package/esm/configuration/schemaTypes.d.ts +21 -5
  127. package/esm/configuration/schemaTypes.js +66 -55
  128. package/esm/configuration/slotFacade.d.ts +12 -29
  129. package/esm/configuration/slotFacade.js +44 -23
  130. package/esm/configuration/snapshotPreprocess.d.ts +43 -0
  131. package/esm/configuration/snapshotPreprocess.js +161 -0
  132. package/esm/configuration/tabixIndexFields.d.ts +30 -4
  133. package/esm/configuration/tabixIndexFields.js +21 -4
  134. package/esm/configuration/tabixShorthand.d.ts +34 -17
  135. package/esm/configuration/tabixShorthand.js +49 -22
  136. package/esm/configuration/types.d.ts +182 -43
  137. package/esm/configuration/uriShorthand.d.ts +9 -0
  138. package/esm/configuration/uriShorthand.js +16 -0
  139. package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +13 -19
  140. package/esm/data_adapters/BaseAdapter/BaseAdapter.js +12 -19
  141. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +40 -2
  142. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +68 -5
  143. package/esm/data_adapters/BaseAdapter/featureDensity.d.ts +40 -0
  144. package/esm/data_adapters/BaseAdapter/featureDensity.js +31 -0
  145. package/esm/data_adapters/BaseAdapter/index.d.ts +23 -3
  146. package/esm/data_adapters/BaseAdapter/index.js +1 -0
  147. package/esm/data_adapters/BaseAdapter/rowSources.d.ts +37 -0
  148. package/esm/data_adapters/BaseAdapter/rowSources.js +7 -0
  149. package/esm/data_adapters/BaseAdapter/stats.d.ts +33 -1
  150. package/esm/data_adapters/BaseAdapter/stats.js +52 -13
  151. package/esm/data_adapters/BaseAdapter/types.d.ts +8 -12
  152. package/esm/data_adapters/BaseAdapter/zoomRange.d.ts +10 -0
  153. package/esm/data_adapters/CytobandAdapter/CytobandAdapter.js +1 -1
  154. package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +7 -11
  155. package/esm/data_adapters/CytobandAdapter/configSchema.js +3 -17
  156. package/esm/data_adapters/dataAdapterCache.d.ts +19 -2
  157. package/esm/data_adapters/dataAdapterCache.js +44 -10
  158. package/esm/data_adapters/getFeatureAdapter.d.ts +6 -4
  159. package/esm/data_adapters/getFeatureAdapter.js +8 -8
  160. package/esm/data_adapters/getSequenceSubAdapter.d.ts +7 -9
  161. package/esm/data_adapters/getSequenceSubAdapter.js +8 -10
  162. package/esm/pluggableElementTypes/AdapterType.d.ts +8 -8
  163. package/esm/pluggableElementTypes/AdapterType.js +1 -1
  164. package/esm/pluggableElementTypes/DisplayType.d.ts +53 -16
  165. package/esm/pluggableElementTypes/DisplayType.js +28 -12
  166. package/esm/pluggableElementTypes/LazyStateModelElement.d.ts +32 -0
  167. package/esm/pluggableElementTypes/LazyStateModelElement.js +77 -0
  168. package/esm/pluggableElementTypes/PluggableElementBase.d.ts +3 -5
  169. package/esm/pluggableElementTypes/PluggableElementBase.js +3 -5
  170. package/esm/pluggableElementTypes/RpcMethodType.d.ts +11 -1
  171. package/esm/pluggableElementTypes/RpcMethodType.js +25 -9
  172. package/esm/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.d.ts +1 -2
  173. package/esm/pluggableElementTypes/TextSearchAdapterType.d.ts +7 -7
  174. package/esm/pluggableElementTypes/ViewType.d.ts +20 -4
  175. package/esm/pluggableElementTypes/ViewType.js +32 -4
  176. package/esm/pluggableElementTypes/WidgetType.d.ts +6 -0
  177. package/esm/pluggableElementTypes/WidgetType.js +6 -0
  178. package/esm/pluggableElementTypes/addMenuItems.d.ts +3 -2
  179. package/esm/pluggableElementTypes/extendElementType.d.ts +1 -2
  180. package/esm/pluggableElementTypes/extendElementType.js +9 -5
  181. package/esm/pluggableElementTypes/index.d.ts +2 -1
  182. package/esm/pluggableElementTypes/index.js +2 -9
  183. package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +19 -9
  184. package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +122 -28
  185. package/esm/pluggableElementTypes/models/BaseDisplayModel.js +155 -11
  186. package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +65 -16
  187. package/esm/pluggableElementTypes/models/BaseTrackModel.js +179 -117
  188. package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +87 -18
  189. package/esm/pluggableElementTypes/models/BaseViewModel.js +54 -11
  190. package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +26 -16
  191. package/esm/pluggableElementTypes/models/assertDisplayContract.d.ts +15 -11
  192. package/esm/pluggableElementTypes/models/assertDisplayContract.js +25 -32
  193. package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +22 -18
  194. package/esm/pluggableElementTypes/models/baseConnectionConfig.js +5 -5
  195. package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +26 -31
  196. package/esm/pluggableElementTypes/models/baseTrackConfig.d.ts +108 -147
  197. package/esm/pluggableElementTypes/models/baseTrackConfig.js +96 -73
  198. package/esm/pluggableElementTypes/models/components/SaveTrackData.js +4 -6
  199. package/esm/pluggableElementTypes/models/components/fetchTrackData.d.ts +3 -4
  200. package/esm/pluggableElementTypes/models/components/fetchTrackData.js +3 -3
  201. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +23 -13
  202. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +80 -48
  203. package/esm/pluggableElementTypes/models/index.d.ts +2 -3
  204. package/esm/pluggableElementTypes/models/index.js +2 -3
  205. package/esm/pluggableElementTypes/models/migrateTrackConfig.d.ts +15 -1
  206. package/esm/pluggableElementTypes/models/migrateTrackConfig.js +85 -25
  207. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.d.ts +4 -3
  208. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.js +141 -19
  209. package/esm/pluggableElementTypes/models/saveTrackFileTypes/types.d.ts +3 -3
  210. package/esm/pluginDefinitions.d.ts +34 -7
  211. package/esm/pluginDefinitions.js +54 -20
  212. package/esm/rpc/BaseRpcDriver.d.ts +2 -2
  213. package/esm/rpc/BaseRpcDriver.js +25 -30
  214. package/esm/rpc/MainThreadRpcDriver.d.ts +2 -2
  215. package/esm/rpc/MainThreadRpcDriver.js +13 -8
  216. package/esm/rpc/RpcClient.d.ts +18 -6
  217. package/esm/rpc/RpcClient.js +51 -16
  218. package/esm/rpc/RpcManager.d.ts +14 -10
  219. package/esm/rpc/RpcManager.js +11 -1
  220. package/esm/rpc/RpcRegistry.d.ts +40 -7
  221. package/esm/rpc/RpcServer.d.ts +3 -1
  222. package/esm/rpc/RpcServer.js +19 -12
  223. package/esm/rpc/WebWorkerRpcDriver.d.ts +11 -4
  224. package/esm/rpc/WebWorkerRpcDriver.js +64 -68
  225. package/esm/rpc/byteBudget.d.ts +20 -5
  226. package/esm/rpc/byteBudget.js +16 -5
  227. package/esm/rpc/configSchema.d.ts +7 -21
  228. package/esm/rpc/coreRpcMethods.d.ts +4 -0
  229. package/esm/rpc/coreRpcMethods.js +4 -0
  230. package/esm/rpc/methods/CoreGetEncodedFeature.d.ts +13 -0
  231. package/esm/rpc/methods/CoreGetEncodedFeature.js +32 -0
  232. package/esm/rpc/methods/CoreGetEncodedLayers.d.ts +16 -0
  233. package/esm/rpc/methods/CoreGetEncodedLayers.js +59 -0
  234. package/esm/rpc/methods/CoreGetExportData.js +3 -4
  235. package/esm/rpc/methods/CoreGetFeatureDensity.d.ts +11 -0
  236. package/esm/rpc/methods/CoreGetFeatureDensity.js +22 -0
  237. package/esm/rpc/methods/CoreGetFeatures.js +3 -5
  238. package/esm/rpc/methods/CoreGetRefNames.js +2 -12
  239. package/esm/rpc/methods/CoreGetRegionByteEstimate.js +1 -1
  240. package/esm/rpc/methods/CoreGetSequence.js +2 -2
  241. package/esm/rpc/methods/CoreLoadAdapterCode.d.ts +13 -0
  242. package/esm/rpc/methods/CoreLoadAdapterCode.js +16 -0
  243. package/esm/rpc/methods/layerFeatures.d.ts +33 -0
  244. package/esm/rpc/methods/layerFeatures.js +29 -0
  245. package/esm/svg/SvgExport.js +6 -7
  246. package/esm/svg/SvgThemeProviders.d.ts +12 -0
  247. package/esm/svg/SvgThemeProviders.js +15 -0
  248. package/esm/svg/exportViewSvg.d.ts +28 -0
  249. package/esm/svg/exportViewSvg.js +13 -0
  250. package/esm/svg/normalizeSvgMarkup.d.ts +7 -0
  251. package/esm/svg/normalizeSvgMarkup.js +99 -0
  252. package/esm/svg/serializeSvg.d.ts +7 -0
  253. package/esm/svg/serializeSvg.js +11 -0
  254. package/esm/svg/svgId.d.ts +1 -1
  255. package/esm/svg/svgId.js +1 -1
  256. package/esm/svg/svgReady.d.ts +9 -7
  257. package/esm/svg/svgReady.js +8 -7
  258. package/esm/svg/trackNames.d.ts +7 -5
  259. package/esm/svg/trackNames.js +12 -9
  260. package/esm/svg/wrapSvgExport.js +6 -74
  261. package/esm/ui/AddCustomPluginDialog.js +3 -8
  262. package/esm/ui/AppReadyMarker.d.ts +45 -0
  263. package/esm/ui/AppReadyMarker.js +89 -0
  264. package/esm/ui/BaseExportSvgDialog.d.ts +1 -1
  265. package/esm/ui/CascadingMenu.js +181 -104
  266. package/esm/ui/DropDownMenu.js +2 -1
  267. package/esm/ui/ErrorBanner.js +1 -1
  268. package/esm/ui/ErrorBoundary.d.ts +2 -2
  269. package/esm/ui/ErrorMessageStackTraceContents.js +2 -1
  270. package/esm/ui/ErrorMessageStackTraceDialog.js +5 -11
  271. package/esm/ui/ExportSvgDialog.d.ts +1 -1
  272. package/esm/ui/FileDropZone.js +2 -1
  273. package/esm/ui/FileSelector/useInternetAccounts.d.ts +156 -96
  274. package/esm/ui/HoverMenu.d.ts +1 -2
  275. package/esm/ui/HoverMenu.js +6 -3
  276. package/esm/ui/JexlFilterDialog.d.ts +13 -10
  277. package/esm/ui/JexlFilterDialog.js +122 -50
  278. package/esm/ui/JexlFilterRowEditors.d.ts +15 -0
  279. package/esm/ui/JexlFilterRowEditors.js +90 -0
  280. package/esm/ui/LazyBaseTooltip.d.ts +4 -0
  281. package/esm/ui/LazyBaseTooltip.js +9 -0
  282. package/esm/ui/LegendSwatchGlyph.js +26 -21
  283. package/esm/ui/LoadingOverlay.d.ts +14 -0
  284. package/esm/ui/LoadingOverlay.js +4 -2
  285. package/esm/ui/MenuTypes.d.ts +23 -53
  286. package/esm/ui/MenuTypes.js +3 -0
  287. package/esm/ui/MonospaceTextField.d.ts +2 -1
  288. package/esm/ui/MonospaceTextField.js +23 -20
  289. package/esm/ui/PaletteContext.d.ts +10 -5
  290. package/esm/ui/PaletteContext.js +44 -6
  291. package/esm/ui/RefNameAutocomplete/SearchOption.d.ts +13 -0
  292. package/esm/ui/RefNameAutocomplete/SearchOption.js +45 -0
  293. package/esm/ui/RefNameAutocomplete/index.d.ts +1 -2
  294. package/esm/ui/RefNameAutocomplete/index.js +8 -2
  295. package/esm/ui/RefNameAutocomplete/util.d.ts +13 -0
  296. package/esm/ui/RefNameAutocomplete/util.js +42 -1
  297. package/esm/ui/ResizeHandle.d.ts +3 -1
  298. package/esm/ui/ResizeHandle.js +44 -11
  299. package/esm/ui/ScrollChrome.d.ts +13 -0
  300. package/esm/ui/ScrollChrome.js +11 -0
  301. package/esm/ui/ScrollEdgeShadow.d.ts +6 -9
  302. package/esm/ui/ScrollEdgeShadow.js +14 -35
  303. package/esm/ui/ScrollZoomToggle.d.ts +4 -27
  304. package/esm/ui/ScrollZoomToggle.js +34 -51
  305. package/esm/ui/SessionJsonPanel.d.ts +3 -0
  306. package/esm/ui/SessionJsonPanel.js +14 -0
  307. package/esm/ui/SettingsChangesTable.d.ts +1 -0
  308. package/esm/ui/SettingsChangesTable.js +49 -11
  309. package/esm/ui/ShareLinkField.d.ts +1 -3
  310. package/esm/ui/ShareLinkField.js +13 -40
  311. package/esm/ui/SizeSliderRow.d.ts +1 -3
  312. package/esm/ui/SizeSliderRow.js +4 -6
  313. package/esm/ui/SnackbarModel.js +79 -67
  314. package/esm/ui/StatusProgressBar.js +2 -2
  315. package/esm/ui/SvgColorLegend.d.ts +9 -4
  316. package/esm/ui/SvgColorLegend.js +82 -41
  317. package/esm/ui/VerticalScrollbar.d.ts +13 -34
  318. package/esm/ui/VerticalScrollbar.js +29 -83
  319. package/esm/ui/ViewLoadingScreen.d.ts +5 -4
  320. package/esm/ui/ViewLoadingScreen.js +8 -32
  321. package/esm/ui/colorScale.d.ts +92 -0
  322. package/esm/ui/colorScale.js +72 -0
  323. package/esm/ui/colors.d.ts +64 -0
  324. package/esm/ui/colors.js +230 -1
  325. package/esm/ui/hoverBoxStyle.d.ts +14 -2
  326. package/esm/ui/hoverBoxStyle.js +17 -2
  327. package/esm/ui/index.d.ts +12 -12
  328. package/esm/ui/index.js +14 -22
  329. package/esm/ui/launchViewMenu.js +15 -5
  330. package/esm/ui/legendMenuItem.d.ts +10 -32
  331. package/esm/ui/legendMenuItem.js +9 -36
  332. package/esm/ui/legendSpec.d.ts +15 -8
  333. package/esm/ui/legendSpec.js +14 -23
  334. package/esm/ui/makeSizeMenu.d.ts +0 -6
  335. package/esm/ui/makeSizeMenu.js +6 -30
  336. package/esm/ui/measureLegendText.js +1 -1
  337. package/esm/ui/menuItemAdornment.d.ts +9 -20
  338. package/esm/ui/menuItemAdornment.js +10 -32
  339. package/esm/ui/menuItems.d.ts +2 -7
  340. package/esm/ui/menuItems.js +1 -6
  341. package/esm/ui/multiTrackMenuItems.d.ts +6 -0
  342. package/esm/ui/palette.d.ts +118 -116
  343. package/esm/ui/palette.js +114 -75
  344. package/esm/ui/replaceViewAction.d.ts +1 -1
  345. package/esm/ui/replaceViewAction.js +1 -1
  346. package/esm/ui/theme.d.ts +43 -119
  347. package/esm/ui/theme.js +62 -78
  348. package/esm/ui/toggleMenuItems.d.ts +1 -3
  349. package/esm/ui/toggleMenuItems.js +6 -5
  350. package/esm/ui/useAssemblySelection.d.ts +4 -4
  351. package/esm/ui/viewHeaderHeight.d.ts +1 -0
  352. package/esm/ui/viewHeaderHeight.js +1 -0
  353. package/esm/util/Base1DUtils.d.ts +5 -3
  354. package/esm/util/Base1DUtils.js +14 -6
  355. package/esm/util/Base1DViewModel.d.ts +2 -1
  356. package/esm/util/Base1DViewModel.js +3 -2
  357. package/esm/util/SvgCanvas.d.ts +15 -13
  358. package/esm/util/SvgCanvas.js +76 -56
  359. package/esm/util/TimeTraveller.d.ts +3 -0
  360. package/esm/util/TimeTraveller.js +34 -2
  361. package/esm/util/aborting.d.ts +39 -0
  362. package/esm/util/aborting.js +88 -6
  363. package/esm/util/adapterMetadata.d.ts +1 -1
  364. package/esm/util/adapterMetadata.js +6 -5
  365. package/esm/util/addAndShowTrack.d.ts +2 -5
  366. package/esm/util/addAndShowTrack.js +5 -1
  367. package/esm/util/addRelativeUris.d.ts +17 -5
  368. package/esm/util/addRelativeUris.js +46 -10
  369. package/esm/util/addTrackFromWidget.d.ts +2 -5
  370. package/esm/util/addTrackFromWidget.js +5 -4
  371. package/esm/util/aggregateFieldName.d.ts +10 -0
  372. package/esm/util/aggregateFieldName.js +8 -0
  373. package/esm/util/analytics.js +46 -13
  374. package/esm/util/animationAllowed.d.ts +9 -0
  375. package/esm/util/animationAllowed.js +13 -0
  376. package/esm/util/applyRowResizeWheel.d.ts +10 -5
  377. package/esm/util/applyRowResizeWheel.js +10 -21
  378. package/esm/util/bandHeight.d.ts +10 -0
  379. package/esm/util/bandHeight.js +29 -0
  380. package/esm/util/bandLayout.d.ts +4 -4
  381. package/esm/util/bandLayout.js +4 -4
  382. package/esm/util/baseDisplayConfig.d.ts +8 -0
  383. package/esm/util/baseDisplayConfig.js +27 -0
  384. package/esm/util/bezierConnector.d.ts +4 -3
  385. package/esm/util/bezierConnector.js +38 -45
  386. package/esm/util/bgzfWorkerPool.d.ts +20 -74
  387. package/esm/util/bgzfWorkerPool.js +20 -74
  388. package/esm/util/binnedAggregate.d.ts +17 -0
  389. package/esm/util/binnedAggregate.js +275 -0
  390. package/esm/util/cacheBudgets.d.ts +22 -19
  391. package/esm/util/cacheBudgets.js +22 -19
  392. package/esm/util/cachedSetup.d.ts +16 -6
  393. package/esm/util/cachedSetup.js +108 -38
  394. package/esm/util/categoricalField.d.ts +56 -0
  395. package/esm/util/categoricalField.js +73 -0
  396. package/esm/util/cellMatches.d.ts +23 -0
  397. package/esm/util/cellMatches.js +264 -0
  398. package/esm/util/cellsStep.d.ts +29 -0
  399. package/esm/util/cellsStep.js +437 -0
  400. package/esm/util/clampToContig.d.ts +17 -0
  401. package/esm/util/clampToContig.js +19 -0
  402. package/esm/util/coarseStripHTML.js +1 -2
  403. package/esm/util/color/cssColorsLevel4.d.ts +1 -0
  404. package/esm/util/color/cssColorsLevel4.js +1 -0
  405. package/esm/util/color/index.d.ts +5 -3
  406. package/esm/util/color/index.js +7 -4
  407. package/esm/util/colorBits.d.ts +3 -3
  408. package/esm/util/colorBits.js +19 -44
  409. package/esm/util/colorRamp.d.ts +49 -5
  410. package/esm/util/colorRamp.js +169 -18
  411. package/esm/util/colorScale.d.ts +156 -0
  412. package/esm/util/colorScale.js +243 -0
  413. package/esm/util/colorSchemes.d.ts +21 -0
  414. package/esm/util/colorSchemes.js +30 -0
  415. package/esm/util/copyToClipboard.js +8 -1
  416. package/esm/util/{createStopTokenRotation.d.ts → createAbortRotation.d.ts} +21 -23
  417. package/esm/util/{createStopTokenRotation.js → createAbortRotation.js} +21 -52
  418. package/esm/util/createSvgRasterCanvas.d.ts +10 -0
  419. package/esm/util/cssColorParse.d.ts +15 -0
  420. package/esm/util/cssColorParse.js +53 -0
  421. package/esm/util/diagonalizeRegions.d.ts +2 -3
  422. package/esm/util/diagonalizeRegions.js +8 -13
  423. package/esm/util/expandLooseSearchIndex.d.ts +19 -0
  424. package/esm/util/expandLooseSearchIndex.js +29 -0
  425. package/esm/util/featureTable.d.ts +224 -0
  426. package/esm/util/featureTable.js +366 -0
  427. package/esm/util/featureTransforms.d.ts +81 -0
  428. package/esm/util/featureTransforms.js +1231 -0
  429. package/esm/util/featureTypes.d.ts +24 -0
  430. package/esm/util/featureTypes.js +35 -0
  431. package/esm/util/fetchAndMaybeUnzip.js +16 -9
  432. package/esm/util/fetchContext.d.ts +7 -8
  433. package/esm/util/fetchContext.js +3 -3
  434. package/esm/util/fetchHub.d.ts +4 -2
  435. package/esm/util/fetchHub.js +2 -2
  436. package/esm/util/fetchPhases.d.ts +10 -10
  437. package/esm/util/fetchSeq.d.ts +2 -3
  438. package/esm/util/fetchSeq.js +2 -2
  439. package/esm/util/fieldReader.d.ts +17 -0
  440. package/esm/util/fieldReader.js +62 -0
  441. package/esm/util/formatBytes.js +1 -1
  442. package/esm/util/formatGuessers.d.ts +25 -14
  443. package/esm/util/formatGuessers.js +42 -27
  444. package/esm/util/formatRelativeTime.js +1 -1
  445. package/esm/util/freezeDeep.d.ts +8 -10
  446. package/esm/util/freezeDeep.js +8 -10
  447. package/esm/util/getLocationUri.d.ts +2 -1
  448. package/esm/util/getLocationUri.js +8 -2
  449. package/esm/util/groupKeys.d.ts +76 -0
  450. package/esm/util/groupKeys.js +156 -0
  451. package/esm/util/highlights.d.ts +10 -6
  452. package/esm/util/highlights.js +12 -25
  453. package/esm/util/hooks.d.ts +31 -2
  454. package/esm/util/hooks.js +72 -3
  455. package/esm/util/index.d.ts +11 -11
  456. package/esm/util/index.js +11 -10
  457. package/esm/util/indexCandidates.d.ts +1 -31
  458. package/esm/util/indexCandidates.js +5 -63
  459. package/esm/util/installFetch.d.ts +77 -37
  460. package/esm/util/installFetch.js +65 -38
  461. package/esm/util/installInitAutorun.d.ts +14 -13
  462. package/esm/util/installInitAutorun.js +17 -17
  463. package/esm/util/installPrerequisiteFetch.d.ts +115 -0
  464. package/esm/util/installPrerequisiteFetch.js +111 -0
  465. package/esm/util/intervals.js +9 -4
  466. package/esm/util/io/index.js +22 -15
  467. package/esm/util/isDataCurrent.d.ts +7 -5
  468. package/esm/util/isDataCurrent.js +9 -6
  469. package/esm/util/isTextEntryFocused.d.ts +7 -0
  470. package/esm/util/isTextEntryFocused.js +16 -0
  471. package/esm/util/jexl.js +24 -21
  472. package/esm/util/jexlFilterRows.d.ts +89 -0
  473. package/esm/util/jexlFilterRows.js +252 -0
  474. package/esm/util/jexlFilters.d.ts +32 -57
  475. package/esm/util/jexlFilters.js +31 -29
  476. package/esm/util/jexlStrings.d.ts +3 -4
  477. package/esm/util/jexlStrings.js +2 -3
  478. package/esm/util/layouts/GranularRectLayout.d.ts +8 -1
  479. package/esm/util/layouts/GranularRectLayout.js +25 -8
  480. package/esm/util/lazyAfterAttach.d.ts +13 -0
  481. package/esm/util/lazyAfterAttach.js +31 -0
  482. package/esm/util/lazyWithPreload.d.ts +19 -0
  483. package/esm/util/lazyWithPreload.js +27 -0
  484. package/esm/util/legendCandidates.d.ts +72 -0
  485. package/esm/util/legendCandidates.js +138 -0
  486. package/esm/util/locString.js +5 -2
  487. package/esm/util/localStorage.js +4 -4
  488. package/esm/util/markEncoding.d.ts +150 -0
  489. package/esm/util/markEncoding.js +885 -0
  490. package/esm/util/markEncodingTypes.d.ts +595 -0
  491. package/esm/util/markEncodingTypes.js +8 -0
  492. package/esm/util/mst-reflection.d.ts +2 -20
  493. package/esm/util/mst-reflection.js +3 -53
  494. package/esm/util/mstUtils.d.ts +31 -23
  495. package/esm/util/mstUtils.js +39 -24
  496. package/esm/util/numericUtils.d.ts +7 -0
  497. package/esm/util/numericUtils.js +16 -0
  498. package/esm/util/numericValue.d.ts +14 -0
  499. package/esm/util/numericValue.js +34 -0
  500. package/esm/util/openFeatureWidget.d.ts +5 -0
  501. package/esm/util/openFeatureWidget.js +2 -2
  502. package/esm/util/openViews.d.ts +17 -0
  503. package/esm/util/openViews.js +22 -0
  504. package/esm/util/parentWalk.d.ts +1 -1
  505. package/esm/util/parentWalk.js +1 -1
  506. package/esm/util/parseLineByLine.d.ts +4 -5
  507. package/esm/util/parseLineByLine.js +8 -14
  508. package/esm/util/pluginStore.d.ts +6 -8
  509. package/esm/util/pluginStore.js +17 -16
  510. package/esm/util/preloadComponent.d.ts +5 -0
  511. package/esm/util/preloadComponent.js +11 -0
  512. package/esm/util/progress.d.ts +22 -22
  513. package/esm/util/progress.js +27 -26
  514. package/esm/util/quantileExtent.d.ts +49 -0
  515. package/esm/util/quantileExtent.js +162 -0
  516. package/esm/util/range.d.ts +13 -9
  517. package/esm/util/range.js +17 -8
  518. package/esm/util/renameRegions.d.ts +26 -6
  519. package/esm/util/renameRegions.js +68 -54
  520. package/esm/util/renderToStaticMarkup.js +24 -14
  521. package/esm/util/rxjs.d.ts +23 -8
  522. package/esm/util/rxjs.js +61 -15
  523. package/esm/util/samplesTsv.d.ts +49 -0
  524. package/esm/util/samplesTsv.js +86 -0
  525. package/esm/util/scheduleDetachedDestroy.d.ts +18 -0
  526. package/esm/util/scheduleDetachedDestroy.js +24 -0
  527. package/esm/util/scrollLatch.d.ts +1 -0
  528. package/esm/util/scrollLatch.js +8 -0
  529. package/esm/util/selectEncodedFeature.d.ts +16 -0
  530. package/esm/util/selectEncodedFeature.js +34 -0
  531. package/esm/util/sessionSharing.d.ts +7 -5
  532. package/esm/util/sessionSharing.js +23 -23
  533. package/esm/util/shapeNameList.d.ts +2 -0
  534. package/esm/util/shapeNameList.js +6 -0
  535. package/esm/util/shapeNames.d.ts +7 -0
  536. package/esm/util/shapeNames.js +11 -0
  537. package/esm/util/simpleFeature.d.ts +0 -1
  538. package/esm/util/springAnimate.js +1 -1
  539. package/esm/util/starFusion.d.ts +26 -0
  540. package/esm/util/starFusion.js +37 -0
  541. package/esm/util/stepTables.d.ts +96 -0
  542. package/esm/util/stepTables.js +277 -0
  543. package/esm/util/svAlt.d.ts +145 -0
  544. package/esm/util/svAlt.js +364 -0
  545. package/esm/util/svgColorProps.d.ts +11 -0
  546. package/esm/util/svgColorProps.js +28 -1
  547. package/esm/util/systemColorScheme.d.ts +12 -0
  548. package/esm/util/systemColorScheme.js +27 -0
  549. package/esm/util/tabix.d.ts +19 -10
  550. package/esm/util/tabix.js +19 -14
  551. package/esm/util/thresholdScale.d.ts +91 -0
  552. package/esm/util/thresholdScale.js +166 -0
  553. package/esm/util/timeGate.d.ts +4 -5
  554. package/esm/util/timeGate.js +4 -5
  555. package/esm/util/trackConfigDelta.d.ts +26 -26
  556. package/esm/util/trackConfigDelta.js +63 -47
  557. package/esm/util/tracks.d.ts +120 -66
  558. package/esm/util/tracks.js +501 -151
  559. package/esm/util/translateTranscript.d.ts +44 -0
  560. package/esm/util/translateTranscript.js +102 -0
  561. package/esm/util/types/data.d.ts +0 -2
  562. package/esm/util/types/index.d.ts +121 -22
  563. package/esm/util/types/index.js +9 -0
  564. package/esm/util/types/mst.d.ts +3 -0
  565. package/esm/util/types/mst.js +4 -0
  566. package/esm/util/types/renameIds.d.ts +1 -0
  567. package/esm/util/types/renameIds.js +29 -0
  568. package/esm/util/types/services.d.ts +1 -1
  569. package/esm/util/unknownSnapshotKeys.d.ts +53 -0
  570. package/esm/util/unknownSnapshotKeys.js +76 -0
  571. package/esm/util/useFeatureSequence.js +5 -5
  572. package/esm/util/useFetch.d.ts +3 -4
  573. package/esm/util/useFetch.js +19 -10
  574. package/esm/util/useFetchPlugins.d.ts +6 -2
  575. package/esm/util/useFetchPlugins.js +7 -3
  576. package/esm/util/usePanZoom.js +10 -3
  577. package/esm/util/usePanelVirtualScroll.d.ts +7 -35
  578. package/esm/util/usePanelVirtualScroll.js +9 -36
  579. package/esm/util/useRafCommit.js +1 -0
  580. package/esm/util/useRowVirtualScroll.d.ts +6 -29
  581. package/esm/util/useRowVirtualScroll.js +8 -49
  582. package/esm/util/useVirtualScrollWheel.d.ts +20 -4
  583. package/esm/util/useVirtualScrollWheel.js +40 -74
  584. package/esm/util/viewHighlights.d.ts +3 -0
  585. package/esm/util/viewHighlights.js +5 -0
  586. package/esm/util/viewStatus.d.ts +47 -15
  587. package/esm/util/viewStatus.js +34 -0
  588. package/esm/util/wheelZoom.d.ts +7 -1
  589. package/esm/util/wheelZoom.js +85 -19
  590. package/esm/util/whenViewSettled.d.ts +55 -8
  591. package/esm/util/whenViewSettled.js +56 -7
  592. package/esm/util/withFeatureDetails.js +4 -0
  593. package/esm/util/withLaunchInput.d.ts +174 -0
  594. package/esm/util/withLaunchInput.js +274 -0
  595. package/package.json +75 -24
  596. package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.d.ts +0 -2
  597. package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.js +0 -8
  598. package/esm/BaseFeatureWidget/BaseFeatureDetail/types.d.ts +0 -8
  599. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.d.ts +0 -80
  600. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.js +0 -583
  601. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.d.ts +0 -141
  602. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.js +0 -1116
  603. package/esm/ReExports/BaseFeatureDetails.d.ts +0 -1
  604. package/esm/ReExports/BaseFeatureDetails.js +0 -10
  605. package/esm/ReExports/index.d.ts +0 -1
  606. package/esm/ReExports/index.js +0 -1
  607. package/esm/ReExports/publicUtil.d.ts +0 -1
  608. package/esm/ReExports/publicUtil.js +0 -28
  609. package/esm/configuration/promotableDefaults.d.ts +0 -199
  610. package/esm/configuration/promotableDefaults.js +0 -326
  611. package/esm/configuration/promotablePin.d.ts +0 -55
  612. package/esm/configuration/promotablePin.js +0 -1
  613. package/esm/configuration/promotableResolve.d.ts +0 -108
  614. package/esm/configuration/promotableResolve.js +0 -117
  615. package/esm/configuration/promotableSlots.d.ts +0 -12
  616. package/esm/configuration/promotableSlots.js +0 -45
  617. package/esm/configuration/slotShape.d.ts +0 -12
  618. package/esm/configuration/slotShape.js +0 -84
  619. package/esm/pluggableElementTypes/models/HighlightsMixin.d.ts +0 -51
  620. package/esm/pluggableElementTypes/models/HighlightsMixin.js +0 -78
  621. package/esm/ui/PinAdornment.d.ts +0 -5
  622. package/esm/ui/PinAdornment.js +0 -79
  623. package/esm/ui/SvgGradientLegend.d.ts +0 -26
  624. package/esm/ui/SvgGradientLegend.js +0 -26
  625. package/esm/ui/highlightChipReveal.d.ts +0 -32
  626. package/esm/ui/highlightChipReveal.js +0 -39
  627. package/esm/ui/promotableMenuItems.d.ts +0 -19
  628. package/esm/ui/promotableMenuItems.js +0 -89
  629. package/esm/ui/promotablePinCoverage.d.ts +0 -44
  630. package/esm/ui/promotablePinCoverage.js +0 -87
  631. package/esm/util/applyInitSettings.d.ts +0 -79
  632. package/esm/util/applyInitSettings.js +0 -91
  633. package/esm/util/openDisplays.d.ts +0 -23
  634. package/esm/util/openDisplays.js +0 -79
  635. package/esm/util/stopToken.d.ts +0 -211
  636. package/esm/util/stopToken.js +0 -438
  637. /package/esm/{BaseFeatureWidget/BaseFeatureDetail/types.js → data_adapters/BaseAdapter/zoomRange.js} +0 -0
@@ -1,168 +1,13 @@
1
- // eslint-disable-next-line no-restricted-imports
2
- import * as React from 'react';
3
- import * as mst from '@jbrowse/mobx-state-tree';
4
- import { alpha, createTheme, useTheme } from '@mui/material';
5
- import SvgIcon, { createSvgIcon } from '@mui/material/SvgIcon';
6
- import * as MUIUtils from '@mui/material/utils';
7
- import * as mobx from 'mobx';
8
- import * as mxreact from 'mobx-react';
9
- import * as ReactDom from 'react-dom';
10
- import * as ReactDomClient from 'react-dom/client';
11
- import * as ReactJSXRuntime from 'react/jsx-runtime';
12
- import Plugin from '../Plugin.js';
13
- import * as Configuration from '../configuration/index.js';
14
- import * as BaseAdapterExports from '../data_adapters/BaseAdapter/index.js';
15
- import * as dataAdapterCache from '../data_adapters/dataAdapterCache.js';
16
- import AdapterType from '../pluggableElementTypes/AdapterType.js';
17
- import DisplayType from '../pluggableElementTypes/DisplayType.js';
18
- import TrackType from '../pluggableElementTypes/TrackType.js';
19
- import ViewType from '../pluggableElementTypes/ViewType.js';
20
- import WidgetType from '../pluggableElementTypes/WidgetType.js';
21
- import * as pluggableElementTypes from '../pluggableElementTypes/index.js';
22
- import * as pluggableElementTypeModels from '../pluggableElementTypes/models/index.js';
23
- import * as coreUi from '../ui/index.js';
24
- import * as corePalette from '../ui/palette.js';
25
- import * as coreTheme from '../ui/theme.js';
26
- import Base1DView from '../util/Base1DViewModel.js';
27
- import * as coreColor from '../util/color/index.js';
28
- import * as coreIo from '../util/io/index.js';
29
- import * as coreLayouts from '../util/layouts/index.js';
30
- import * as coreMstReflection from '../util/mst-reflection.js';
31
- import * as rxjs from '../util/rxjs.js';
32
- import * as trackUtils from '../util/tracks.js';
33
- import { cx, keyframes, makeStyles } from '../util/tss-react/index.js';
34
- import * as mstTypes from '../util/types/mst.js';
35
- import { BaseFeatureDetail } from './BaseFeatureDetails.js';
36
- import { DataGridEntries } from './MuiDataGridReExports.js';
37
- import { Entries } from './MuiReExports.js';
38
- import { MUIStyles } from './MuiStylesReExports.js';
39
- import { lazyMap } from './lazify.js';
40
- import reExportsList from './list.js';
41
- import * as coreUtil from './publicUtil.js';
42
- function makeLegacyMakeStyles() {
43
- return (args) => {
44
- const useStyles = makeStyles()(args);
45
- return () => useStyles().classes;
46
- };
47
- }
48
- const tssReact = { cx, keyframes, makeStyles };
49
- const legacyMakeStyles = makeLegacyMakeStyles();
1
+ // The runtime plugin ABI @jbrowse/core alone can serve, on the main thread: the
2
+ // framework singletons and Material UI from frameworkModules.ts, and every
3
+ // subpath core's exports map publishes from the generated half. A product
4
+ // spreads this under the packages it bundles beyond core — see each
5
+ // product's reExports.generated.ts, and scripts/generateReExports.ts for how
6
+ // both halves and list.ts are derived.
7
+ import coreModules from './coreModules.generated.js';
8
+ import frameworkModules from './frameworkModules.js';
50
9
  const libs = {
51
- mobx,
52
- '@jbrowse/mobx-state-tree': mst,
53
- 'mobx-state-tree': mst,
54
- react: React,
55
- 'react/jsx-runtime': ReactJSXRuntime,
56
- 'react-dom': ReactDom,
57
- 'react-dom/client': ReactDomClient,
58
- 'mobx-react': mxreact,
59
- // Only lazy component entries are re-exported. The grid *hooks*
60
- // (useGridApiContext/useGridApiRef/useGridRootProps) are intentionally left
61
- // out: statically importing them here pulled the entire ~1.2 MB
62
- // @mui/x-data-grid package into the eager first-paint graph, defeating the
63
- // lazy import('@mui/x-data-grid') in MuiDataGridReExports. First-party code
64
- // that needs the hooks imports them directly from '@mui/x-data-grid'.
65
- '@mui/x-data-grid': {
66
- ...lazyMap(DataGridEntries),
67
- },
68
- '@mui/material/utils': MUIUtils,
69
- '@material-ui/core/utils': MUIUtils,
70
- 'tss-react': tssReact,
71
- 'tss-react/mui': tssReact,
72
- '@material-ui/core': {
73
- ...lazyMap(Entries),
74
- useTheme,
75
- alpha,
76
- makeStyles: legacyMakeStyles,
77
- },
78
- '@mui/material': {
79
- ...lazyMap(Entries),
80
- alpha,
81
- useTheme,
82
- createTheme,
83
- },
84
- ...lazyMap(Entries, '@mui/material/'),
85
- ...lazyMap(Entries, '@material-ui/core/'),
86
- // @mui/icons-material — bundled into external plugins — reads the
87
- // `createSvgIcon` *named* export from @mui/material/SvgIcon, but lazyMap
88
- // exposes only the component (its default). SvgIcon is a primitive that's
89
- // eagerly loaded in practice, so expose it directly with createSvgIcon
90
- // attached: a default import still lands on a usable component (rollup-plugin-
91
- // external-globals substitutes the value itself, esbuild's globalExternals
92
- // reads `.default`), while the named import and icons-material's CJS
93
- // `require(...).createSvgIcon` both find the util. A shallow copy carries the
94
- // forwardRef's $$typeof/render so the shared SvgIcon export isn't mutated.
95
- // Overrides the lazy entry above; verified against both bundlers.
96
- // GMOD/jbrowse-components#5606.
97
- '@mui/material/SvgIcon': Object.assign({}, SvgIcon, { createSvgIcon }),
98
- '@mui/material/styles': {
99
- ...MUIStyles,
100
- makeStyles: legacyMakeStyles,
101
- },
102
- '@material-ui/core/styles': {
103
- ...MUIStyles,
104
- makeStyles: legacyMakeStyles,
105
- },
106
- // these are core in @mui/material, but used to be in @material-ui/lab
107
- '@material-ui/lab/ToggleButton': Entries.ToggleButton,
108
- '@material-ui/lab/ToggleButtonGroup': Entries.ToggleButtonGroup,
109
- '@material-ui/lab/Autocomplete': Entries.Autocomplete,
110
- '@material-ui/lab/Alert': Entries.Alert,
111
- '@material-ui/lab': {
112
- Alert: Entries.Alert,
113
- Autocomplete: Entries.Autocomplete,
114
- ToggleButton: Entries.ToggleButton,
115
- ToggleButtonGroup: Entries.ToggleButtonGroup,
116
- },
117
- '@jbrowse/core/Plugin': Plugin,
118
- '@jbrowse/core/configuration': Configuration,
119
- '@jbrowse/core/util/types/mst': mstTypes,
120
- '@jbrowse/core/ui': coreUi,
121
- '@jbrowse/core/ui/theme': coreTheme,
122
- '@jbrowse/core/ui/palette': corePalette,
123
- // BaseTooltip is deliberately absent from the '@jbrowse/core/ui' barrel: the
124
- // re-export alone held @floating-ui (~266KB) on the startup path, since eager
125
- // plugin entries import that barrel. Serving it as its own module behind
126
- // React.lazy keeps it off that path while leaving external plugins a way to
127
- // reach it -- published apollo deep-imports this exact path, and react-msaview
128
- // (bundled by tview and msaview) reads it too, so dropping it from the barrel
129
- // with no ABI home is what broke them.
130
- ...lazyMap({ BaseTooltip: React.lazy(() => import('../ui/BaseTooltip.js')) }, '@jbrowse/core/ui/'),
131
- '@jbrowse/core/util': coreUtil,
132
- '@jbrowse/core/util/color': coreColor,
133
- '@jbrowse/core/util/layouts': coreLayouts,
134
- '@jbrowse/core/util/tracks': trackUtils,
135
- '@jbrowse/core/util/Base1DViewModel': Base1DView,
136
- '@jbrowse/core/util/io': coreIo,
137
- '@jbrowse/core/util/mst-reflection': coreMstReflection,
138
- '@jbrowse/core/util/rxjs': rxjs,
139
- '@jbrowse/core/pluggableElementTypes': pluggableElementTypes,
140
- '@jbrowse/core/pluggableElementTypes/ViewType': ViewType,
141
- '@jbrowse/core/pluggableElementTypes/AdapterType': AdapterType,
142
- '@jbrowse/core/pluggableElementTypes/DisplayType': DisplayType,
143
- '@jbrowse/core/pluggableElementTypes/TrackType': TrackType,
144
- '@jbrowse/core/pluggableElementTypes/WidgetType': WidgetType,
145
- '@jbrowse/core/pluggableElementTypes/models': pluggableElementTypeModels,
146
- '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail': BaseFeatureDetail,
147
- '@jbrowse/core/data_adapters/BaseAdapter': BaseAdapterExports,
148
- // `adapterCache` is module-level state, so a plugin that bundles its own copy
149
- // of this file gets a second cache in the RPC worker — and `freeAdapterResources`,
150
- // which CoreFreeResources calls on the host's copy when the last track using
151
- // an adapter config closes, never sees it. The cache is the only strong
152
- // reference to an adapter (see the comment on that function), so those
153
- // adapters and everything they hold live as long as the worker. Serving the
154
- // module is what makes an external RPC method share the host's cache.
155
- '@jbrowse/core/data_adapters/dataAdapterCache': dataAdapterCache,
10
+ ...frameworkModules,
11
+ ...coreModules,
156
12
  };
157
- const libsList = Object.keys(libs);
158
- // make sure that all the items in the ReExports/list array (used by build
159
- // systems and such) are included here, and vice versa
160
- const inLibsOnly = libsList.filter(mod => !reExportsList.includes(mod));
161
- if (inLibsOnly.length > 0) {
162
- throw new Error(`The following modules are in the modules libs, but not the re-exports list: ${inLibsOnly.join(', ')}`);
163
- }
164
- const inReExportsOnly = reExportsList.filter(mod => !libsList.includes(mod));
165
- if (inReExportsOnly.length) {
166
- throw new Error(`The following modules are in the re-exports list, but not the modules libs: ${inReExportsOnly.join(', ')}`);
167
- }
168
13
  export default libs;
@@ -1,2 +1,3 @@
1
1
  export declare function setReExportRegistry(libs: Record<string, unknown>): void;
2
2
  export declare function getReExportRegistry(): Record<string, unknown>;
3
+ export declare function loudOnMissingModule(libs: Record<string, unknown>): Record<string, unknown>;
@@ -3,11 +3,11 @@
3
3
  * a runtime plugin.
4
4
  *
5
5
  * `ReExports/modules.ts` is the ABI external plugins link against, and it
6
- * reaches it by spreading `import * as` namespaces of `@jbrowse/core/ui`,
7
- * `configuration`, `util` and a dozen more into one object. A namespace spread
8
- * *names every export*, so nothing downstream of those barrels can be
9
- * tree-shaken — and the module also throws at top level if `libs` and `list.ts`
10
- * disagree, so it cannot be dropped either. `PluginManager` used to import it
6
+ * reaches it by spreading `import * as` namespaces of every subpath core
7
+ * publishes into one object, as each product's `reExports.generated.ts` does
8
+ * for every package it bundles. A namespace spread *names every export*, so
9
+ * nothing downstream of those modules can be tree-shaken. `PluginManager` used
10
+ * to import it
11
11
  * statically for `jbrequire`, which put the whole surface — most of
12
12
  * `@jbrowse/core/ui` and, behind it, ~400 KB of Material UI — into the eager
13
13
  * first-paint graph of **every** host, including embedded ones that load no
@@ -26,3 +26,21 @@ export function setReExportRegistry(libs) {
26
26
  export function getReExportRegistry() {
27
27
  return registry;
28
28
  }
29
+ // A bundle built against another @jbrowse/core, or against a package this host
30
+ // does not bundle, reads a key the map lacks — at module scope, so what it then
31
+ // throws is `Cannot read properties of undefined` with no module named. A
32
+ // plugin's own build tool only ever externalizes a key `ReExports/list.ts`
33
+ // names, so every scoped-or-slashed read that misses is that case, and this
34
+ // names it. Anything else missing reads `undefined` as it always did.
35
+ export function loudOnMissingModule(libs) {
36
+ return new Proxy(libs, {
37
+ get(target, key, receiver) {
38
+ if (typeof key === 'string' &&
39
+ !(key in target) &&
40
+ (key.startsWith('@') || key.includes('/'))) {
41
+ throw new Error(`This JBrowse does not serve '${key}' to plugins: the plugin was built against an older or newer @jbrowse/core, or against a package this host does not bundle`);
42
+ }
43
+ return Reflect.get(target, key, receiver);
44
+ },
45
+ });
46
+ }
@@ -0,0 +1,3 @@
1
+ export declare const uiStub: unknown;
2
+ export declare function uiNamespace(names: readonly string[], esModule?: boolean): Record<string, unknown>;
3
+ export declare const REACT_INTERNAL_KEYS: Set<string>;
@@ -0,0 +1,33 @@
1
+ // The RPC worker's stand-in for a UI entry of the plugin ABI; why, and why a
2
+ // namespace gets real own keys: agent-docs/reference/EAGER_BUNDLE.md.
3
+ export const uiStub = new Proxy(function stubTarget() { }, {
4
+ get: (_, key) => key === 'then' ? undefined : key === Symbol.toPrimitive ? () => '' : uiStub,
5
+ has: () => true,
6
+ apply: () => uiStub,
7
+ construct: () => uiStub,
8
+ });
9
+ // `esModule` mirrors the `__esModule` the main thread sets on a namespace that
10
+ // carries a default export beside named ones, so a bundler's interop reads the
11
+ // stub's `default` the same way in both realms.
12
+ export function uiNamespace(names, esModule = false) {
13
+ return {
14
+ ...(esModule ? { __esModule: true } : {}),
15
+ ...Object.fromEntries(names.map(name => [name, uiStub])),
16
+ };
17
+ }
18
+ // Own keys React puts on a component object, which are not export names and
19
+ // so do not survive into a stub or the manifest.
20
+ export const REACT_INTERNAL_KEYS = new Set([
21
+ '$$typeof',
22
+ '_debugInfo',
23
+ '_init',
24
+ '_payload',
25
+ 'compare',
26
+ 'contextTypes',
27
+ 'defaultProps',
28
+ 'displayName',
29
+ 'muiName',
30
+ 'propTypes',
31
+ 'render',
32
+ 'type',
33
+ ]);
@@ -0,0 +1,2 @@
1
+ declare const libs: Record<string, unknown>;
2
+ export default libs;
@@ -0,0 +1,11 @@
1
+ // Same keys as modules.ts, as the RPC worker serves them: a module a plugin
2
+ // reads only to render is a stub carrying the main thread's export names, so
3
+ // the one bundle a plugin ships evaluates in both realms without the worker
4
+ // fetching the UI graph. agent-docs/reference/EAGER_BUNDLE.md
5
+ import coreWorkerModules from './coreWorkerModules.generated.js';
6
+ import frameworkWorkerModules from './frameworkWorkerModules.generated.js';
7
+ const libs = {
8
+ ...frameworkWorkerModules,
9
+ ...coreWorkerModules,
10
+ };
11
+ export default libs;
@@ -3,25 +3,39 @@ import type PluginManager from '../PluginManager.ts';
3
3
  import type { AnyConfigurationModel } from '../configuration/index.ts';
4
4
  import type { BaseTextSearchAdapter, BaseTextSearchArgs } from '../data_adapters/BaseAdapter/index.ts';
5
5
  import type BaseResult from './BaseResults.ts';
6
+ export interface SearchIndex {
7
+ conf: AnyConfigurationModel;
8
+ /** the track a per-track index belongs to */
9
+ trackId?: string;
10
+ }
11
+ export interface TextSearchReport {
12
+ results: BaseResult[];
13
+ /** the indexes covering the assembly, zero when it has none to search */
14
+ indexCount: number;
15
+ /** what each index that could not answer threw */
16
+ failures: unknown[];
17
+ }
6
18
  export default class TextSearchManager {
7
19
  pluginManager: PluginManager;
8
20
  adapterCache: QuickLRU<string, BaseTextSearchAdapter>;
9
21
  constructor(pluginManager: PluginManager);
10
22
  clearCache(): void;
11
- loadTextSearchAdapters(assemblyName: string): Promise<BaseTextSearchAdapter[]>;
12
- relevantAdapters(assemblyName: string): (import("@jbrowse/mobx-state-tree").ModelInstanceTypeProps<Record<string, any>> & {
13
- setSubschema(slotName: string, data: Record<string, unknown>): any;
14
- setSlot(slotName: string, value: unknown): void;
15
- } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("../configuration/types.ts").AnyConfigurationSchemaType>)[];
16
- getAdaptersWithAssembly(matches: (names: string[] | undefined) => boolean, confs: AnyConfigurationModel[]): (import("@jbrowse/mobx-state-tree").ModelInstanceTypeProps<Record<string, any>> & {
17
- setSubschema(slotName: string, data: Record<string, unknown>): any;
18
- setSlot(slotName: string, value: unknown): void;
19
- } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("../configuration/types.ts").AnyConfigurationSchemaType>)[];
20
- getTrackAdaptersWithAssembly(matches: (names: string[] | undefined) => boolean, confs: AnyConfigurationModel[]): (import("@jbrowse/mobx-state-tree").ModelInstanceTypeProps<Record<string, any>> & {
21
- setSubschema(slotName: string, data: Record<string, unknown>): any;
22
- setSlot(slotName: string, value: unknown): void;
23
- } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("../configuration/types.ts").AnyConfigurationSchemaType>)[];
23
+ loadTextSearchAdapters(assemblyName: string): Promise<{
24
+ values: {
25
+ adapter: BaseTextSearchAdapter;
26
+ trackId: string | undefined;
27
+ }[];
28
+ failures: unknown[];
29
+ }>;
30
+ relevantAdapters(assemblyName: string): AnyConfigurationModel[];
31
+ relevantIndexes(assemblyName: string): SearchIndex[];
32
+ getAdaptersWithAssembly(matches: (names: string[] | undefined) => boolean, confs: AnyConfigurationModel[]): AnyConfigurationModel[];
33
+ getTrackAdaptersWithAssembly(matches: (names: string[] | undefined) => boolean, confs: AnyConfigurationModel[]): {
34
+ conf: AnyConfigurationModel;
35
+ trackId: string;
36
+ }[];
24
37
  search(args: BaseTextSearchArgs, assemblyName: string): Promise<BaseResult[]>;
38
+ searchIndexes(args: BaseTextSearchArgs, assemblyName: string): Promise<TextSearchReport>;
25
39
  sortResults({ results, args, }: {
26
40
  results: BaseResult[];
27
41
  args: BaseTextSearchArgs;
@@ -1,25 +1,29 @@
1
- import { readConfObject } from '../configuration/index.js';
1
+ import { getSnapshot, isStateTreeNode } from '@jbrowse/mobx-state-tree';
2
+ import { hydrateTrackConfig, readConfObject } from '../configuration/index.js';
3
+ import { adapterConfigCacheKey } from '../data_adapters/dataAdapterCache.js';
2
4
  import QuickLRU from '../util/QuickLRU/index.js';
3
- import { isAbortException } from '../util/aborting.js';
4
- import { checkStopToken } from '../util/stopToken.js';
5
- import { canonicalAssemblyNames } from '../util/tracks.js';
5
+ import { checkAbortSignal, isAbortException } from '../util/aborting.js';
6
+ import { allSessionTracks, canonicalAssemblyNames } from '../util/tracks.js';
6
7
  // A misconfigured or unreachable index (a 404 .ix, a config missing
7
8
  // ixFilePath) must not take down search as a whole: the remaining indexes, and
8
- // the refName results the caller merges in afterwards, are still useful. Log
9
- // the failures and keep going rather than rejecting. An abort is not a failure
10
- // — every keystroke supersedes the previous query, so logging those would turn
11
- // normal typing into console spam.
12
- async function keepFulfilled(promises, message) {
13
- const out = [];
9
+ // the refName results the caller merges in afterwards, are still useful. The
10
+ // failures are logged and handed back, so a miss can say an index failed rather
11
+ // than that the name is absent. An abort is not a failure — every keystroke
12
+ // supersedes the previous query, so logging those would turn normal typing
13
+ // into console spam.
14
+ async function settle(promises, message) {
15
+ const values = [];
16
+ const failures = [];
14
17
  for (const settled of await Promise.allSettled(promises)) {
15
18
  if (settled.status === 'fulfilled') {
16
- out.push(settled.value);
19
+ values.push(settled.value);
17
20
  }
18
21
  else if (!isAbortException(settled.reason)) {
19
22
  console.error(message, settled.reason);
23
+ failures.push(settled.reason);
20
24
  }
21
25
  }
22
- return out;
26
+ return { values, failures };
23
27
  }
24
28
  export default class TextSearchManager {
25
29
  pluginManager;
@@ -33,22 +37,25 @@ export default class TextSearchManager {
33
37
  this.adapterCache.clear();
34
38
  }
35
39
  loadTextSearchAdapters(assemblyName) {
36
- return keepFulfilled(this.relevantAdapters(assemblyName).map(async (conf) => {
37
- const adapterId = readConfObject(conf, 'textSearchAdapterId');
38
- const r = this.adapterCache.get(adapterId);
39
- if (r) {
40
- return r;
40
+ return settle(this.relevantIndexes(assemblyName).map(async ({ conf, trackId }) => {
41
+ const key = adapterConfigCacheKey(getSnapshot(conf));
42
+ const cached = this.adapterCache.get(key);
43
+ if (cached) {
44
+ return { adapter: cached, trackId };
41
45
  }
42
46
  else {
43
47
  const adapterType = this.pluginManager.getTextSearchAdapterType(conf.type);
44
48
  const AdapterClass = await adapterType.getAdapterClass();
45
- const adapterInstance = new AdapterClass(conf, undefined, this.pluginManager);
46
- this.adapterCache.set(adapterId, adapterInstance);
47
- return adapterInstance;
49
+ const adapter = new AdapterClass(conf, undefined, this.pluginManager);
50
+ this.adapterCache.set(key, adapter);
51
+ return { adapter, trackId };
48
52
  }
49
53
  }), 'failed to load text search adapter');
50
54
  }
51
55
  relevantAdapters(assemblyName) {
56
+ return this.relevantIndexes(assemblyName).map(index => index.conf);
57
+ }
58
+ relevantIndexes(assemblyName) {
52
59
  const { rootModel } = this.pluginManager;
53
60
  // jbrowse is typed as a bare state tree node, so its config slots need a
54
61
  // shape assertion; both it and the session are absent until a session is
@@ -65,9 +72,10 @@ export default class TextSearchManager {
65
72
  : names.filter(name => !!name);
66
73
  const [wanted] = canonical([assemblyName]);
67
74
  const matches = (names) => !!wanted && !!names && canonical(names).includes(wanted);
75
+ const session = rootModel?.session;
68
76
  return [
69
- ...this.getAdaptersWithAssembly(matches, aggregateTextSearchAdapters),
70
- ...this.getTrackAdaptersWithAssembly(matches, rootModel?.session?.tracks ?? []),
77
+ ...this.getAdaptersWithAssembly(matches, aggregateTextSearchAdapters).map(conf => ({ conf })),
78
+ ...this.getTrackAdaptersWithAssembly(matches, session ? allSessionTracks(session) : []),
71
79
  ];
72
80
  }
73
81
  getAdaptersWithAssembly(matches, confs) {
@@ -75,24 +83,57 @@ export default class TextSearchManager {
75
83
  }
76
84
  getTrackAdaptersWithAssembly(matches, confs) {
77
85
  return confs
78
- .filter(conf => matches(readConfObject(conf, [
79
- 'textSearching',
80
- 'textSearchAdapter',
81
- 'assemblyNames',
82
- ])))
83
- .map(conf => conf.textSearching.textSearchAdapter);
86
+ .filter(conf => {
87
+ const indexNames = readConfObject(conf, [
88
+ 'textSearching',
89
+ 'textSearchAdapter',
90
+ 'assemblyNames',
91
+ ]);
92
+ return (!!readConfObject(conf, ['textSearching', 'textSearchAdapter']) &&
93
+ matches(indexNames?.length
94
+ ? indexNames
95
+ : readConfObject(conf, 'assemblyNames')));
96
+ })
97
+ .flatMap(track => {
98
+ const live = isStateTreeNode(track)
99
+ ? track
100
+ : hydrateTrackConfig(this.pluginManager, track);
101
+ const conf = live?.textSearching.textSearchAdapter;
102
+ return conf
103
+ ? [{ conf, trackId: readConfObject(track, 'trackId') }]
104
+ : [];
105
+ });
84
106
  }
85
107
  async search(args, assemblyName) {
86
- const adapters = await this.loadTextSearchAdapters(assemblyName);
87
- const results = await keepFulfilled(adapters.map(a => a.searchIndex(args)), 'text search adapter failed');
108
+ return (await this.searchIndexes(args, assemblyName)).results;
109
+ }
110
+ async searchIndexes(args, assemblyName) {
111
+ const loaded = await this.loadTextSearchAdapters(assemblyName);
112
+ const searched = await settle(loaded.values.map(async ({ adapter, trackId }) => {
113
+ const found = await adapter.searchIndex(args);
114
+ // a per-track index answers for its track, whether or not its records
115
+ // name it — a UCSC hub's index holds only feature names
116
+ if (trackId) {
117
+ for (const result of found) {
118
+ result.trackId ??= trackId;
119
+ }
120
+ }
121
+ return found;
122
+ }), 'text search adapter failed');
88
123
  // the ranking below is the expensive half — a dynamic import plus a fuzzy
89
124
  // sort over every hit — and a superseded keystroke has no use for it.
90
- // Checked here rather than only inside the adapters because keepFulfilled
91
- // deliberately drops a failing adapter and carries on, so an abort thrown
92
- // by one of them would otherwise still land here as "no results from that
93
- // index" and rank the rest
94
- checkStopToken(args.stopToken);
95
- return await this.sortResults({ args, results: results.flat() });
125
+ // Checked here rather than only inside the adapters because settle drops an
126
+ // abort thrown by one of them, which would otherwise land here as "no
127
+ // results from that index" and rank the rest
128
+ checkAbortSignal(args.signal);
129
+ return {
130
+ results: await this.sortResults({
131
+ args,
132
+ results: searched.values.flat(),
133
+ }),
134
+ indexCount: loaded.values.length + loaded.failures.length,
135
+ failures: [...loaded.failures, ...searched.failures],
136
+ };
96
137
  }
97
138
  // Ranks, never filters: the adapters have already decided what matches, and
98
139
  // they match against attributes the display string does not always carry (a
@@ -0,0 +1,12 @@
1
+ import type { Assembly } from '../assemblyManager/assembly.ts';
2
+ import type BaseResult from './BaseResults.ts';
3
+ export declare function canonicalLocString(locString: string, assembly: Assembly): string;
4
+ /**
5
+ * Hits grouped by the place they go, groups and members in the order given.
6
+ * Hits are one place when they carry one name and either the same location or
7
+ * overlapping spans on one sequence: two gene tracks drawing one gene with
8
+ * slightly different ends answer one place, not a choice. A hit with no
9
+ * location, or one the assembly cannot yet resolve into a span, joins only an
10
+ * identical locstring.
11
+ */
12
+ export declare function groupByPlace(results: BaseResult[], assembly?: Assembly): BaseResult[][];
@@ -0,0 +1,94 @@
1
+ import { assembleLocString, parseLocString } from '../util/index.js';
2
+ // One spelling of a locstring, so two indexes that answer `chr1:1-100` and
3
+ // `1:1..100` are recognised as one place. An unparseable string is compared
4
+ // raw, which can only split a group that would otherwise have merged.
5
+ export function canonicalLocString(locString, assembly) {
6
+ try {
7
+ const loc = parseLocString(locString, refName => assembly.isValidRefName(refName));
8
+ return assembleLocString({
9
+ ...loc,
10
+ refName: assembly.getCanonicalRefName2(loc.refName),
11
+ });
12
+ }
13
+ catch (e) {
14
+ console.warn('failed to parse location string', locString, e);
15
+ return locString;
16
+ }
17
+ }
18
+ function spanOf(locString, assembly) {
19
+ try {
20
+ const { refName, start, end } = parseLocString(locString, r => assembly.isValidRefName(r));
21
+ return start === undefined || end === undefined
22
+ ? undefined
23
+ : { refName: assembly.getCanonicalRefName2(refName), start, end };
24
+ }
25
+ catch {
26
+ return undefined;
27
+ }
28
+ }
29
+ /**
30
+ * Hits grouped by the place they go, groups and members in the order given.
31
+ * Hits are one place when they carry one name and either the same location or
32
+ * overlapping spans on one sequence: two gene tracks drawing one gene with
33
+ * slightly different ends answer one place, not a choice. A hit with no
34
+ * location, or one the assembly cannot yet resolve into a span, joins only an
35
+ * identical locstring.
36
+ */
37
+ export function groupByPlace(results, assembly) {
38
+ const root = results.map((_, i) => i);
39
+ const find = (i) => root[i] === i ? i : (root[i] = find(root[i]));
40
+ const join = (a, b) => {
41
+ const ra = find(a);
42
+ const rb = find(b);
43
+ root[Math.max(ra, rb)] = Math.min(ra, rb);
44
+ };
45
+ const resolved = !!assembly?.initialized;
46
+ const firstAt = new Map();
47
+ const spans = [];
48
+ for (const [i, result] of results.entries()) {
49
+ const locString = result.getLocation();
50
+ if (locString) {
51
+ const name = result.getDisplayString();
52
+ const key = [
53
+ name,
54
+ resolved ? canonicalLocString(locString, assembly) : locString,
55
+ ].join('\u0000');
56
+ const seen = firstAt.get(key);
57
+ if (seen === undefined) {
58
+ firstAt.set(key, i);
59
+ }
60
+ else {
61
+ join(seen, i);
62
+ }
63
+ const span = resolved ? spanOf(locString, assembly) : undefined;
64
+ if (span) {
65
+ spans.push({ i, seq: [name, span.refName].join('\u0000'), ...span });
66
+ }
67
+ }
68
+ }
69
+ spans.sort((a, b) => a.seq === b.seq ? a.start - b.start : a.seq < b.seq ? -1 : 1);
70
+ let run;
71
+ let runEnd = 0;
72
+ for (const span of spans) {
73
+ if (run?.seq === span.seq && span.start < runEnd) {
74
+ join(run.i, span.i);
75
+ runEnd = Math.max(runEnd, span.end);
76
+ }
77
+ else {
78
+ run = span;
79
+ runEnd = span.end;
80
+ }
81
+ }
82
+ const groups = new Map();
83
+ for (const [i, result] of results.entries()) {
84
+ const r = find(i);
85
+ const group = groups.get(r);
86
+ if (group) {
87
+ group.push(result);
88
+ }
89
+ else {
90
+ groups.set(r, [result]);
91
+ }
92
+ }
93
+ return [...groups.values()];
94
+ }