@jbrowse/core 4.2.1 → 5.0.0-beta.1

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 (1124) hide show
  1. package/README.md +783 -0
  2. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +13 -3
  3. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +33 -22
  4. package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +8 -3
  5. package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +117 -19
  6. package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseAttributes.d.ts +2 -8
  7. package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseAttributes.js +4 -4
  8. package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCard.d.ts +1 -1
  9. package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCard.js +2 -2
  10. package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCoreDetails.d.ts +1 -1
  11. package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCoreDetails.js +4 -4
  12. package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.d.ts +1 -1
  13. package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.js +12 -5
  14. package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.d.ts +1 -1
  15. package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.js +28 -17
  16. package/esm/BaseFeatureWidget/BaseFeatureDetail/DataGridDetails.d.ts +1 -1
  17. package/esm/BaseFeatureWidget/BaseFeatureDetail/DataGridDetails.js +19 -40
  18. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.d.ts +6 -4
  19. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.js +46 -30
  20. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureWash.d.ts +20 -0
  21. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureWash.js +66 -0
  22. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldName.d.ts +1 -1
  23. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldName.js +2 -2
  24. package/esm/BaseFeatureWidget/BaseFeatureDetail/Formatter.d.ts +3 -0
  25. package/esm/BaseFeatureWidget/BaseFeatureDetail/Formatter.js +17 -0
  26. package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.d.ts +1 -1
  27. package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.js +3 -9
  28. package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.d.ts +3 -2
  29. package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +3 -3
  30. package/esm/BaseFeatureWidget/BaseFeatureDetail/UriField.d.ts +3 -2
  31. package/esm/BaseFeatureWidget/BaseFeatureDetail/UriField.js +7 -14
  32. package/esm/BaseFeatureWidget/BaseFeatureDetail/index.d.ts +2 -1
  33. package/esm/BaseFeatureWidget/BaseFeatureDetail/index.js +19 -13
  34. package/esm/BaseFeatureWidget/BaseFeatureDetail/types.d.ts +5 -4
  35. package/esm/BaseFeatureWidget/BaseFeatureDetail/util.d.ts +8 -1
  36. package/esm/BaseFeatureWidget/BaseFeatureDetail/util.js +32 -10
  37. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceBody.d.ts +18 -0
  38. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceBody.js +10 -0
  39. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceContents.d.ts +7 -4
  40. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceContents.js +62 -24
  41. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.d.ts +10 -5
  42. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.js +64 -41
  43. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeaturePanel.d.ts +1 -1
  44. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeaturePanel.js +17 -8
  45. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceLegend.d.ts +6 -0
  46. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceLegend.js +19 -0
  47. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceName.d.ts +5 -4
  48. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceName.js +15 -18
  49. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequencePanel.d.ts +1 -1
  50. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequencePanel.js +33 -17
  51. package/esm/BaseFeatureWidget/SequenceFeatureDetails/consts.d.ts +3 -3
  52. package/esm/BaseFeatureWidget/SequenceFeatureDetails/consts.js +7 -3
  53. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/FeatureSequenceDialog.d.ts +11 -0
  54. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/FeatureSequenceDialog.js +29 -0
  55. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/HelpDialog.d.ts +1 -1
  56. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/HelpDialog.js +4 -6
  57. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceDialog.d.ts +18 -6
  58. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceDialog.js +11 -29
  59. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceFeatureMenu.d.ts +9 -2
  60. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceFeatureMenu.js +63 -58
  61. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceTypeSelector.d.ts +7 -3
  62. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceTypeSelector.js +38 -51
  63. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SettingsDialog.d.ts +1 -1
  64. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SettingsDialog.js +19 -27
  65. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.d.ts +6 -0
  66. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.js +18 -0
  67. package/esm/BaseFeatureWidget/SequenceFeatureDetails/featureTypeUtil.d.ts +12 -0
  68. package/esm/BaseFeatureWidget/SequenceFeatureDetails/featureTypeUtil.js +97 -0
  69. package/esm/BaseFeatureWidget/SequenceFeatureDetails/index.js +1 -1
  70. package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.d.ts +50 -63
  71. package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.js +62 -59
  72. package/esm/BaseFeatureWidget/SequenceFeatureDetails/panelAssemblyName.d.ts +21 -0
  73. package/esm/BaseFeatureWidget/SequenceFeatureDetails/panelAssemblyName.js +24 -0
  74. package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/CDNASequence.d.ts +5 -3
  75. package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/CDNASequence.js +93 -75
  76. package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/CDSSequence.d.ts +1 -1
  77. package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/CDSSequence.js +4 -11
  78. package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/GenomicSequence.d.ts +5 -2
  79. package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/GenomicSequence.js +21 -48
  80. package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/PlainSequence.d.ts +8 -0
  81. package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/PlainSequence.js +20 -0
  82. package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/ProteinSequence.d.ts +6 -3
  83. package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/ProteinSequence.js +33 -13
  84. package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/SequenceDisplay.d.ts +7 -4
  85. package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/SequenceDisplay.js +67 -11
  86. package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/renderSequenceSegments.d.ts +14 -0
  87. package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/renderSequenceSegments.js +42 -0
  88. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.d.ts +1 -1
  89. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.d.ts +7 -7
  90. package/esm/BaseFeatureWidget/SequenceFeatureDetails/types.d.ts +8 -1
  91. package/esm/BaseFeatureWidget/SequenceFeatureDetails/useSequenceData.d.ts +9 -9
  92. package/esm/BaseFeatureWidget/SequenceFeatureDetails/useSequenceData.js +28 -44
  93. package/esm/BaseFeatureWidget/SequenceFeatureDetails/useSequenceFetch.d.ts +23 -0
  94. package/esm/BaseFeatureWidget/SequenceFeatureDetails/useSequenceFetch.js +31 -0
  95. package/esm/BaseFeatureWidget/SequenceFeatureDetails/util.d.ts +90 -1
  96. package/esm/BaseFeatureWidget/SequenceFeatureDetails/util.js +145 -23
  97. package/esm/BaseFeatureWidget/configSchema.js +1 -1
  98. package/esm/BaseFeatureWidget/formatDetails.d.ts +38 -0
  99. package/esm/BaseFeatureWidget/formatDetails.js +103 -0
  100. package/esm/BaseFeatureWidget/index.d.ts +3 -1
  101. package/esm/BaseFeatureWidget/index.js +2 -2
  102. package/esm/BaseFeatureWidget/stateModelFactory.d.ts +80 -62
  103. package/esm/BaseFeatureWidget/stateModelFactory.js +128 -29
  104. package/esm/BaseFeatureWidget/types.d.ts +4 -3
  105. package/esm/BaseFeatureWidget/util.d.ts +4 -29
  106. package/esm/BaseFeatureWidget/util.js +20 -84
  107. package/esm/CorePlugin.js +11 -6
  108. package/esm/PhasedScheduler.d.ts +4 -2
  109. package/esm/PhasedScheduler.js +18 -2
  110. package/esm/Plugin.d.ts +6 -1
  111. package/esm/Plugin.js +7 -0
  112. package/esm/PluginLoader.d.ts +40 -40
  113. package/esm/PluginLoader.js +166 -82
  114. package/esm/PluginManager.d.ts +368 -55
  115. package/esm/PluginManager.js +326 -85
  116. package/esm/ReExports/BaseFeatureDetails.js +7 -6
  117. package/esm/ReExports/MuiDataGridReExports.d.ts +2 -2
  118. package/esm/ReExports/MuiDataGridReExports.js +58 -130
  119. package/esm/ReExports/MuiReExports.d.ts +3 -134
  120. package/esm/ReExports/MuiReExports.js +43 -16
  121. package/esm/ReExports/MuiStylesReExports.d.ts +66 -0
  122. package/esm/ReExports/MuiStylesReExports.js +55 -0
  123. package/esm/ReExports/index.js +1 -1
  124. package/esm/ReExports/lazify.d.ts +2 -2
  125. package/esm/ReExports/lazify.js +16 -3
  126. package/esm/ReExports/list.js +54 -229
  127. package/esm/ReExports/modules.js +84 -65
  128. package/esm/ReExports/muiComponentNames.d.ts +18 -0
  129. package/esm/ReExports/muiComponentNames.js +130 -0
  130. package/esm/ReExports/publicUtil.d.ts +1 -0
  131. package/esm/ReExports/publicUtil.js +28 -0
  132. package/esm/ReExports/registry.d.ts +2 -0
  133. package/esm/ReExports/registry.js +28 -0
  134. package/esm/TextSearch/BaseResults.d.ts +20 -21
  135. package/esm/TextSearch/BaseResults.js +8 -33
  136. package/esm/TextSearch/TextSearchManager.d.ts +14 -34
  137. package/esm/TextSearch/TextSearchManager.js +87 -34
  138. package/esm/assemblyManager/assembly.d.ts +307 -34
  139. package/esm/assemblyManager/assembly.js +551 -262
  140. package/esm/assemblyManager/assemblyAdapters.d.ts +12 -0
  141. package/esm/assemblyManager/assemblyAdapters.js +18 -0
  142. package/esm/assemblyManager/assemblyConfigSchema.d.ts +192 -17
  143. package/esm/assemblyManager/assemblyConfigSchema.js +213 -19
  144. package/esm/assemblyManager/assemblyManager.d.ts +711 -303
  145. package/esm/assemblyManager/assemblyManager.js +351 -46
  146. package/esm/assemblyManager/expandAssemblyConfigShorthand.d.ts +32 -0
  147. package/esm/assemblyManager/expandAssemblyConfigShorthand.js +85 -0
  148. package/esm/assemblyManager/geneticCodes.d.ts +21 -0
  149. package/esm/assemblyManager/geneticCodes.js +47 -0
  150. package/esm/assemblyManager/getSequenceAdapterConfig.d.ts +9 -0
  151. package/esm/assemblyManager/getSequenceAdapterConfig.js +12 -0
  152. package/esm/assemblyManager/index.d.ts +1 -1
  153. package/esm/assemblyManager/index.js +2 -2
  154. package/esm/assemblyManager/loadRefNameMap.d.ts +5 -0
  155. package/esm/assemblyManager/loadRefNameMap.js +80 -0
  156. package/esm/assemblyManager/refNameColors.d.ts +1 -0
  157. package/esm/assemblyManager/refNameColors.js +32 -0
  158. package/esm/assemblyManager/refNameMaps.d.ts +26 -0
  159. package/esm/assemblyManager/refNameMaps.js +87 -0
  160. package/esm/assemblyManager/refNameMismatch.d.ts +54 -0
  161. package/esm/assemblyManager/refNameMismatch.js +66 -0
  162. package/esm/checkPlugins.d.ts +11 -0
  163. package/esm/checkPlugins.js +77 -0
  164. package/esm/configuration/configurationSchema.d.ts +154 -19
  165. package/esm/configuration/configurationSchema.js +359 -138
  166. package/esm/configuration/configurationSlot.d.ts +283 -30
  167. package/esm/configuration/configurationSlot.js +205 -226
  168. package/esm/configuration/formatAboutConfigSchema.d.ts +55 -0
  169. package/esm/configuration/formatAboutConfigSchema.js +58 -0
  170. package/esm/configuration/formatDetailsConfigSchema.d.ts +80 -0
  171. package/esm/configuration/formatDetailsConfigSchema.js +90 -0
  172. package/esm/configuration/fullConfSnapshot.d.ts +28 -0
  173. package/esm/configuration/fullConfSnapshot.js +66 -0
  174. package/esm/configuration/getConf.d.ts +88 -0
  175. package/esm/configuration/getConf.js +74 -0
  176. package/esm/configuration/index.d.ts +19 -3
  177. package/esm/configuration/index.js +19 -2
  178. package/esm/configuration/mergeFormatCallbacks.d.ts +15 -0
  179. package/esm/configuration/mergeFormatCallbacks.js +24 -0
  180. package/esm/configuration/promotableDefaults.d.ts +199 -0
  181. package/esm/configuration/promotableDefaults.js +326 -0
  182. package/esm/configuration/promotablePin.d.ts +55 -0
  183. package/esm/configuration/promotableResolve.d.ts +108 -0
  184. package/esm/configuration/promotableResolve.js +117 -0
  185. package/esm/configuration/promotableSlots.d.ts +12 -0
  186. package/esm/configuration/promotableSlots.js +45 -0
  187. package/esm/configuration/readConfObject.d.ts +56 -0
  188. package/esm/configuration/readConfObject.js +161 -0
  189. package/esm/configuration/schemaRegistry.d.ts +35 -0
  190. package/esm/configuration/schemaRegistry.js +50 -0
  191. package/esm/configuration/schemaTypes.d.ts +23 -0
  192. package/esm/configuration/schemaTypes.js +94 -0
  193. package/esm/configuration/slotFacade.d.ts +82 -0
  194. package/esm/configuration/slotFacade.js +89 -0
  195. package/esm/configuration/slotShape.d.ts +12 -0
  196. package/esm/configuration/slotShape.js +84 -0
  197. package/esm/configuration/slotValueUtils.d.ts +17 -0
  198. package/esm/configuration/slotValueUtils.js +25 -0
  199. package/esm/configuration/tabixIndexFields.d.ts +44 -0
  200. package/esm/configuration/tabixIndexFields.js +45 -0
  201. package/esm/configuration/tabixShorthand.d.ts +34 -0
  202. package/esm/configuration/tabixShorthand.js +45 -0
  203. package/esm/configuration/types.d.ts +170 -7
  204. package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +24 -10
  205. package/esm/data_adapters/BaseAdapter/BaseAdapter.js +23 -15
  206. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +120 -7
  207. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +99 -27
  208. package/esm/data_adapters/BaseAdapter/BaseRefNameAliasAdapter.d.ts +1 -0
  209. package/esm/data_adapters/BaseAdapter/BaseSequenceAdapter.d.ts +13 -5
  210. package/esm/data_adapters/BaseAdapter/BaseSequenceAdapter.js +9 -7
  211. package/esm/data_adapters/BaseAdapter/BaseTextSearchAdapter.d.ts +2 -1
  212. package/esm/data_adapters/BaseAdapter/CytobandAdapter.d.ts +7 -0
  213. package/esm/data_adapters/BaseAdapter/RegionsAdapter.d.ts +2 -1
  214. package/esm/data_adapters/BaseAdapter/getAdapterId.d.ts +2 -0
  215. package/esm/data_adapters/BaseAdapter/getAdapterId.js +9 -0
  216. package/esm/data_adapters/BaseAdapter/index.d.ts +6 -4
  217. package/esm/data_adapters/BaseAdapter/index.js +5 -5
  218. package/esm/data_adapters/BaseAdapter/stats.d.ts +5 -5
  219. package/esm/data_adapters/BaseAdapter/stats.js +48 -22
  220. package/esm/data_adapters/BaseAdapter/types.d.ts +10 -8
  221. package/esm/data_adapters/BaseAdapter/types.js +1 -0
  222. package/esm/data_adapters/BaseAdapter/util.d.ts +5 -1
  223. package/esm/data_adapters/BaseAdapter/util.js +14 -3
  224. package/esm/data_adapters/CytobandAdapter/CytobandAdapter.d.ts +1 -1
  225. package/esm/data_adapters/CytobandAdapter/CytobandAdapter.js +4 -4
  226. package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +36 -4
  227. package/esm/data_adapters/CytobandAdapter/configSchema.js +46 -2
  228. package/esm/data_adapters/CytobandAdapter/index.js +3 -3
  229. package/esm/data_adapters/adapterSessionRefcount.d.ts +61 -0
  230. package/esm/data_adapters/adapterSessionRefcount.js +96 -0
  231. package/esm/data_adapters/dataAdapterCache.d.ts +35 -1
  232. package/esm/data_adapters/dataAdapterCache.js +62 -22
  233. package/esm/data_adapters/getFeatureAdapter.d.ts +22 -0
  234. package/esm/data_adapters/getFeatureAdapter.js +27 -0
  235. package/esm/data_adapters/getSequenceSubAdapter.d.ts +21 -0
  236. package/esm/data_adapters/getSequenceSubAdapter.js +44 -0
  237. package/esm/pluggableElementTypes/AdapterType.d.ts +52 -2
  238. package/esm/pluggableElementTypes/AdapterType.js +44 -5
  239. package/esm/pluggableElementTypes/AddTrackWorkflowType.d.ts +6 -1
  240. package/esm/pluggableElementTypes/AddTrackWorkflowType.js +3 -1
  241. package/esm/pluggableElementTypes/ConnectionType.d.ts +5 -5
  242. package/esm/pluggableElementTypes/ConnectionType.js +1 -1
  243. package/esm/pluggableElementTypes/DisplayType.d.ts +10 -0
  244. package/esm/pluggableElementTypes/DisplayType.js +14 -1
  245. package/esm/pluggableElementTypes/InternetAccountType.js +1 -1
  246. package/esm/pluggableElementTypes/PluggableElementBase.d.ts +13 -0
  247. package/esm/pluggableElementTypes/PluggableElementBase.js +13 -0
  248. package/esm/pluggableElementTypes/RpcMethodType.d.ts +132 -12
  249. package/esm/pluggableElementTypes/RpcMethodType.js +263 -98
  250. package/esm/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.d.ts +19 -9
  251. package/esm/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.js +26 -20
  252. package/esm/pluggableElementTypes/RpcMethodTypeWithRenameRegion.d.ts +5 -0
  253. package/esm/pluggableElementTypes/RpcMethodTypeWithRenameRegion.js +18 -0
  254. package/esm/pluggableElementTypes/RpcMethodTypeWithRenameRegions.d.ts +5 -0
  255. package/esm/pluggableElementTypes/RpcMethodTypeWithRenameRegions.js +10 -0
  256. package/esm/pluggableElementTypes/TextSearchAdapterType.d.ts +3 -3
  257. package/esm/pluggableElementTypes/TextSearchAdapterType.js +3 -1
  258. package/esm/pluggableElementTypes/TrackType.d.ts +2 -1
  259. package/esm/pluggableElementTypes/TrackType.js +1 -1
  260. package/esm/pluggableElementTypes/ViewType.d.ts +2 -1
  261. package/esm/pluggableElementTypes/ViewType.js +9 -2
  262. package/esm/pluggableElementTypes/WidgetType.d.ts +2 -2
  263. package/esm/pluggableElementTypes/WidgetType.js +1 -1
  264. package/esm/pluggableElementTypes/addMenuItems.d.ts +87 -0
  265. package/esm/pluggableElementTypes/addMenuItems.js +82 -0
  266. package/esm/pluggableElementTypes/extendElementType.d.ts +30 -0
  267. package/esm/pluggableElementTypes/extendElementType.js +68 -0
  268. package/esm/pluggableElementTypes/index.d.ts +7 -7
  269. package/esm/pluggableElementTypes/index.js +24 -14
  270. package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +70 -15
  271. package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.js +90 -10
  272. package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +605 -84
  273. package/esm/pluggableElementTypes/models/BaseDisplayModel.js +172 -64
  274. package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +196 -55
  275. package/esm/pluggableElementTypes/models/BaseTrackModel.js +332 -85
  276. package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +167 -16
  277. package/esm/pluggableElementTypes/models/BaseViewModel.js +111 -16
  278. package/esm/pluggableElementTypes/models/HighlightsMixin.d.ts +51 -0
  279. package/esm/pluggableElementTypes/models/HighlightsMixin.js +78 -0
  280. package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +163 -29
  281. package/esm/pluggableElementTypes/models/InternetAccountModel.js +218 -48
  282. package/esm/pluggableElementTypes/models/assertDisplayContract.d.ts +174 -0
  283. package/esm/pluggableElementTypes/models/assertDisplayContract.js +246 -0
  284. package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +22 -8
  285. package/esm/pluggableElementTypes/models/baseConnectionConfig.js +18 -2
  286. package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +39 -20
  287. package/esm/pluggableElementTypes/models/baseInternetAccountConfig.js +23 -2
  288. package/esm/pluggableElementTypes/models/baseTrackConfig.d.ts +181 -65
  289. package/esm/pluggableElementTypes/models/baseTrackConfig.js +191 -89
  290. package/esm/pluggableElementTypes/models/components/SaveTrackData.d.ts +3 -8
  291. package/esm/pluggableElementTypes/models/components/SaveTrackData.js +113 -139
  292. package/esm/pluggableElementTypes/models/components/fetchTrackData.d.ts +55 -0
  293. package/esm/pluggableElementTypes/models/components/fetchTrackData.js +83 -0
  294. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +40 -0
  295. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +115 -0
  296. package/esm/pluggableElementTypes/models/index.d.ts +6 -3
  297. package/esm/pluggableElementTypes/models/index.js +10 -8
  298. package/esm/pluggableElementTypes/models/migrateTrackConfig.d.ts +34 -0
  299. package/esm/pluggableElementTypes/models/migrateTrackConfig.js +54 -0
  300. package/esm/pluggableElementTypes/models/saveTrackFileTypes/bed.js +75 -7
  301. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.d.ts +9 -3
  302. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.js +153 -103
  303. package/esm/pluggableElementTypes/models/saveTrackFileTypes/gff3.d.ts +6 -1
  304. package/esm/pluggableElementTypes/models/saveTrackFileTypes/gff3.js +70 -74
  305. package/esm/pluggableElementTypes/models/saveTrackFileTypes/types.d.ts +9 -1
  306. package/esm/pluggableElementTypes/models/saveTrackFileTypes/util.d.ts +21 -0
  307. package/esm/pluggableElementTypes/models/saveTrackFileTypes/util.js +51 -0
  308. package/esm/pluggableElementTypes/models/uriMatchesDomains.d.ts +29 -0
  309. package/esm/pluggableElementTypes/models/uriMatchesDomains.js +62 -0
  310. package/esm/pluggableElementTypes/renderers/util/serializableFilterChain.d.ts +5 -4
  311. package/esm/pluggableElementTypes/renderers/util/serializableFilterChain.js +20 -10
  312. package/esm/pluginDefinitions.d.ts +198 -0
  313. package/esm/pluginDefinitions.js +220 -0
  314. package/esm/rpc/BaseRpcDriver.d.ts +27 -35
  315. package/esm/rpc/BaseRpcDriver.js +74 -107
  316. package/esm/rpc/MainThreadRpcDriver.d.ts +9 -10
  317. package/esm/rpc/MainThreadRpcDriver.js +18 -29
  318. package/esm/rpc/RpcClient.d.ts +38 -0
  319. package/esm/rpc/RpcClient.js +154 -0
  320. package/esm/rpc/RpcManager.d.ts +116 -27
  321. package/esm/rpc/RpcManager.js +177 -50
  322. package/esm/rpc/RpcRegistry.d.ts +265 -0
  323. package/esm/rpc/RpcRegistry.js +1 -0
  324. package/esm/rpc/RpcServer.d.ts +41 -0
  325. package/esm/rpc/RpcServer.js +235 -0
  326. package/esm/rpc/WebWorkerRpcDriver.d.ts +71 -24
  327. package/esm/rpc/WebWorkerRpcDriver.js +312 -27
  328. package/esm/rpc/byteBudget.d.ts +49 -0
  329. package/esm/rpc/byteBudget.js +50 -0
  330. package/esm/rpc/configSchema.d.ts +27 -5
  331. package/esm/rpc/configSchema.js +40 -16
  332. package/esm/rpc/coreRpcMethods.d.ts +2 -5
  333. package/esm/rpc/coreRpcMethods.js +9 -12
  334. package/esm/rpc/explainTransferError.d.ts +35 -0
  335. package/esm/rpc/explainTransferError.js +158 -0
  336. package/esm/rpc/methods/CoreFreeResources.d.ts +19 -4
  337. package/esm/rpc/methods/CoreFreeResources.js +17 -6
  338. package/esm/rpc/methods/CoreGetExportData.d.ts +5 -18
  339. package/esm/rpc/methods/CoreGetExportData.js +26 -15
  340. package/esm/rpc/methods/CoreGetFeatures.d.ts +6 -15
  341. package/esm/rpc/methods/CoreGetFeatures.js +15 -17
  342. package/esm/rpc/methods/CoreGetInfo.d.ts +6 -0
  343. package/esm/rpc/methods/CoreGetInfo.js +12 -0
  344. package/esm/rpc/methods/CoreGetMetadata.d.ts +4 -7
  345. package/esm/rpc/methods/CoreGetMetadata.js +6 -9
  346. package/esm/rpc/methods/CoreGetRefNames.d.ts +4 -8
  347. package/esm/rpc/methods/CoreGetRefNames.js +24 -13
  348. package/esm/rpc/methods/CoreGetRegionByteEstimate.d.ts +6 -0
  349. package/esm/rpc/methods/CoreGetRegionByteEstimate.js +19 -0
  350. package/esm/rpc/methods/CoreGetRegions.d.ts +4 -6
  351. package/esm/rpc/methods/CoreGetRegions.js +6 -9
  352. package/esm/rpc/methods/CoreGetSequence.d.ts +4 -11
  353. package/esm/rpc/methods/CoreGetSequence.js +12 -13
  354. package/esm/rpc/serializeError/index.d.ts +9 -0
  355. package/esm/rpc/serializeError/index.js +86 -0
  356. package/esm/svg/SvgExport.d.ts +30 -0
  357. package/esm/svg/SvgExport.js +53 -0
  358. package/esm/svg/constants.d.ts +1 -0
  359. package/esm/svg/constants.js +5 -0
  360. package/esm/svg/saveSvgAsImage.d.ts +6 -0
  361. package/esm/svg/saveSvgAsImage.js +90 -0
  362. package/esm/svg/svgId.d.ts +42 -0
  363. package/esm/svg/svgId.js +84 -0
  364. package/esm/svg/svgReady.d.ts +136 -0
  365. package/esm/svg/svgReady.js +164 -0
  366. package/esm/svg/trackNames.d.ts +27 -0
  367. package/esm/svg/trackNames.js +31 -0
  368. package/esm/svg/wrapSvgExport.d.ts +12 -0
  369. package/esm/svg/wrapSvgExport.js +78 -0
  370. package/esm/ui/ActionLink.d.ts +7 -0
  371. package/esm/ui/ActionLink.js +9 -0
  372. package/esm/ui/AddCustomPluginDialog.d.ts +14 -0
  373. package/esm/ui/AddCustomPluginDialog.js +61 -0
  374. package/esm/ui/AddGenomePane.d.ts +8 -0
  375. package/esm/ui/AddGenomePane.js +228 -0
  376. package/esm/ui/AdvancedOptions.d.ts +6 -0
  377. package/esm/ui/AdvancedOptions.js +17 -0
  378. package/esm/ui/AppLogo.d.ts +1 -1
  379. package/esm/ui/AppLogo.js +2 -2
  380. package/esm/ui/AssemblySelector.d.ts +5 -8
  381. package/esm/ui/AssemblySelector.js +8 -26
  382. package/esm/ui/BaseExportSvgDialog.d.ts +16 -0
  383. package/esm/ui/BaseExportSvgDialog.js +84 -0
  384. package/esm/ui/BaseTooltip.d.ts +14 -3
  385. package/esm/ui/BaseTooltip.js +151 -34
  386. package/esm/ui/CascadingMenu.d.ts +9 -18
  387. package/esm/ui/CascadingMenu.js +368 -41
  388. package/esm/ui/CascadingMenuButton.d.ts +9 -11
  389. package/esm/ui/CascadingMenuButton.js +36 -18
  390. package/esm/ui/CascadingMenuHelpDialog.d.ts +2 -2
  391. package/esm/ui/CascadingMenuHelpDialog.js +4 -5
  392. package/esm/ui/CascadingMenuHelpIconButton.d.ts +2 -1
  393. package/esm/ui/CascadingMenuHelpIconButton.js +18 -9
  394. package/esm/ui/ColorPicker.d.ts +6 -9
  395. package/esm/ui/ColorPicker.js +36 -39
  396. package/esm/ui/ConfirmDialog.d.ts +2 -9
  397. package/esm/ui/ConfirmDialog.js +6 -9
  398. package/esm/ui/ContextMenu.d.ts +50 -0
  399. package/esm/ui/ContextMenu.js +55 -0
  400. package/esm/ui/CopyToClipboardButton.d.ts +10 -0
  401. package/esm/ui/CopyToClipboardButton.js +14 -0
  402. package/esm/ui/Crosshairs.d.ts +10 -0
  403. package/esm/ui/Crosshairs.js +15 -0
  404. package/esm/ui/DOMPurifySanitizedHTML.d.ts +1 -1
  405. package/esm/ui/DOMPurifySanitizedHTML.js +5 -5
  406. package/esm/ui/DataGridFlexContainer.d.ts +9 -2
  407. package/esm/ui/DataGridFlexContainer.js +4 -3
  408. package/esm/ui/Dialog.d.ts +5 -2
  409. package/esm/ui/Dialog.js +35 -27
  410. package/esm/ui/DraggableDialog.d.ts +3 -3
  411. package/esm/ui/DraggableDialog.js +50 -12
  412. package/esm/ui/DropDownMenu.d.ts +4 -2
  413. package/esm/ui/DropDownMenu.js +4 -4
  414. package/esm/ui/EditableTypography.d.ts +3 -1
  415. package/esm/ui/EditableTypography.js +34 -26
  416. package/esm/ui/ErrorActions.d.ts +24 -0
  417. package/esm/ui/ErrorActions.js +20 -0
  418. package/esm/ui/ErrorBanner.d.ts +7 -0
  419. package/esm/ui/ErrorBanner.js +35 -0
  420. package/esm/ui/ErrorBar.d.ts +6 -0
  421. package/esm/ui/ErrorBar.js +35 -0
  422. package/esm/ui/ErrorBoundary.d.ts +29 -5
  423. package/esm/ui/ErrorBoundary.js +32 -2
  424. package/esm/ui/ErrorMessage.d.ts +2 -4
  425. package/esm/ui/ErrorMessage.js +17 -52
  426. package/esm/ui/ErrorMessageStackTraceContents.d.ts +1 -1
  427. package/esm/ui/ErrorMessageStackTraceContents.js +3 -3
  428. package/esm/ui/ErrorMessageStackTraceDialog.d.ts +1 -1
  429. package/esm/ui/ErrorMessageStackTraceDialog.js +57 -96
  430. package/esm/ui/ErrorOverlay.d.ts +8 -0
  431. package/esm/ui/ErrorOverlay.js +5 -0
  432. package/esm/ui/ExportSvgDialog.d.ts +7 -0
  433. package/esm/ui/ExportSvgDialog.js +9 -0
  434. package/esm/ui/ExternalLink.d.ts +1 -1
  435. package/esm/ui/FactoryResetDialog.d.ts +1 -1
  436. package/esm/ui/FactoryResetDialog.js +6 -15
  437. package/esm/ui/FatalErrorDialog.d.ts +3 -2
  438. package/esm/ui/FatalErrorDialog.js +6 -5
  439. package/esm/ui/FileDropZone.d.ts +25 -0
  440. package/esm/ui/FileDropZone.js +128 -0
  441. package/esm/ui/FileSelector/FileSelector.d.ts +1 -1
  442. package/esm/ui/FileSelector/FileSelector.js +59 -30
  443. package/esm/ui/FileSelector/LocalFileChooser.d.ts +7 -2
  444. package/esm/ui/FileSelector/LocalFileChooser.js +61 -47
  445. package/esm/ui/FileSelector/LocationInput.d.ts +1 -1
  446. package/esm/ui/FileSelector/LocationInput.js +8 -12
  447. package/esm/ui/FileSelector/SourceTypeSelector.d.ts +5 -5
  448. package/esm/ui/FileSelector/SourceTypeSelector.js +9 -7
  449. package/esm/ui/FileSelector/UrlChooser.d.ts +1 -1
  450. package/esm/ui/FileSelector/UrlChooser.js +26 -2
  451. package/esm/ui/FileSelector/emptySourceType.d.ts +2 -0
  452. package/esm/ui/FileSelector/emptySourceType.js +14 -0
  453. package/esm/ui/FileSelector/useInternetAccounts.d.ts +383 -71
  454. package/esm/ui/FileSelector/useInternetAccounts.js +13 -6
  455. package/esm/ui/FileSelector/util.d.ts +58 -3
  456. package/esm/ui/FileSelector/util.js +128 -11
  457. package/esm/ui/GpuFallbackButton.d.ts +12 -0
  458. package/esm/ui/GpuFallbackButton.js +20 -0
  459. package/esm/ui/HoverMenu.d.ts +12 -3
  460. package/esm/ui/HoverMenu.js +31 -9
  461. package/esm/ui/HoverTooltip.d.ts +27 -0
  462. package/esm/ui/HoverTooltip.js +24 -0
  463. package/esm/ui/Icons.d.ts +6 -4
  464. package/esm/ui/Icons.js +9 -0
  465. package/esm/ui/InfoDialog.d.ts +7 -0
  466. package/esm/ui/InfoDialog.js +16 -0
  467. package/esm/ui/InlineMenuControls.d.ts +6 -0
  468. package/esm/ui/InlineMenuControls.js +17 -0
  469. package/esm/ui/JexlFilterDialog.d.ts +23 -0
  470. package/esm/ui/JexlFilterDialog.js +94 -0
  471. package/esm/ui/LabeledCheckbox.d.ts +9 -0
  472. package/esm/ui/LabeledCheckbox.js +7 -0
  473. package/esm/ui/LegendSwatchGlyph.d.ts +7 -0
  474. package/esm/ui/LegendSwatchGlyph.js +25 -0
  475. package/esm/ui/LoadingDots.d.ts +1 -0
  476. package/esm/ui/LoadingDots.js +30 -0
  477. package/esm/ui/LoadingEllipses.d.ts +17 -1
  478. package/esm/ui/LoadingEllipses.js +20 -29
  479. package/esm/ui/LoadingOverlay.d.ts +9 -0
  480. package/esm/ui/LoadingOverlay.js +137 -0
  481. package/esm/ui/LoadingProgress.d.ts +16 -0
  482. package/esm/ui/LoadingProgress.js +16 -0
  483. package/esm/ui/Logo.d.ts +2 -2
  484. package/esm/ui/Logo.js +23 -24
  485. package/esm/ui/Menu.js +1 -1
  486. package/esm/ui/MenuItemChevron.d.ts +3 -0
  487. package/esm/ui/MenuItemChevron.js +19 -0
  488. package/esm/ui/MenuItemEndDecoration.d.ts +4 -0
  489. package/esm/ui/MenuItemEndDecoration.js +28 -0
  490. package/esm/ui/MenuItemTrailing.d.ts +12 -0
  491. package/esm/ui/MenuItemTrailing.js +42 -0
  492. package/esm/ui/MenuTypes.d.ts +124 -4
  493. package/esm/ui/MenuTypes.js +13 -1
  494. package/esm/ui/MonospaceTextField.d.ts +9 -0
  495. package/esm/ui/MonospaceTextField.js +37 -0
  496. package/esm/ui/NumberTextField.d.ts +31 -0
  497. package/esm/ui/NumberTextField.js +33 -0
  498. package/esm/ui/PaletteContext.d.ts +85 -0
  499. package/esm/ui/PaletteContext.js +104 -0
  500. package/esm/ui/PinAdornment.d.ts +5 -0
  501. package/esm/ui/PinAdornment.js +79 -0
  502. package/esm/ui/PluggableComponent.d.ts +10 -0
  503. package/esm/ui/PluggableComponent.js +19 -0
  504. package/esm/ui/PluggableComponents.d.ts +29 -0
  505. package/esm/ui/PluggableComponents.js +28 -0
  506. package/esm/ui/PluggableElements.d.ts +23 -0
  507. package/esm/ui/PluggableElements.js +24 -0
  508. package/esm/ui/PluginStoreCard.d.ts +17 -0
  509. package/esm/ui/PluginStoreCard.js +45 -0
  510. package/esm/ui/PopoverPicker.d.ts +6 -0
  511. package/esm/ui/PopoverPicker.js +25 -0
  512. package/esm/ui/PrerenderedCanvas.d.ts +1 -1
  513. package/esm/ui/PrerenderedCanvas.js +5 -4
  514. package/esm/ui/ProgressChip.d.ts +37 -0
  515. package/esm/ui/ProgressChip.js +66 -0
  516. package/esm/ui/RedErrorMessageBox.d.ts +1 -1
  517. package/esm/ui/RedErrorMessageBox.js +9 -3
  518. package/esm/ui/RefNameAutocomplete/EndAdornment.d.ts +5 -0
  519. package/esm/ui/RefNameAutocomplete/EndAdornment.js +31 -0
  520. package/esm/ui/RefNameAutocomplete/HelpDialog.d.ts +3 -0
  521. package/esm/ui/RefNameAutocomplete/HelpDialog.js +7 -0
  522. package/esm/ui/RefNameAutocomplete/index.d.ts +22 -0
  523. package/esm/ui/RefNameAutocomplete/index.js +78 -0
  524. package/esm/ui/RefNameAutocomplete/util.d.ts +49 -0
  525. package/esm/ui/RefNameAutocomplete/util.js +168 -0
  526. package/esm/ui/ReplaceCurrentViewButton.d.ts +19 -0
  527. package/esm/ui/ReplaceCurrentViewButton.js +22 -0
  528. package/esm/ui/ResizeHandle.d.ts +13 -7
  529. package/esm/ui/ResizeHandle.js +42 -55
  530. package/esm/ui/ReturnToImportFormDialog.d.ts +1 -1
  531. package/esm/ui/ReturnToImportFormDialog.js +7 -9
  532. package/esm/ui/SanitizedHTML.d.ts +6 -1
  533. package/esm/ui/SanitizedHTML.js +7 -46
  534. package/esm/ui/ScrollEdgeShadow.d.ts +44 -0
  535. package/esm/ui/ScrollEdgeShadow.js +98 -0
  536. package/esm/ui/ScrollZoomToggle.d.ts +38 -0
  537. package/esm/ui/ScrollZoomToggle.js +92 -0
  538. package/esm/ui/SequenceAdapterInputs.d.ts +9 -0
  539. package/esm/ui/SequenceAdapterInputs.js +30 -0
  540. package/esm/ui/SettingsChangesTable.d.ts +14 -0
  541. package/esm/ui/SettingsChangesTable.js +49 -0
  542. package/esm/ui/ShareLinkField.d.ts +6 -0
  543. package/esm/ui/ShareLinkField.js +42 -0
  544. package/esm/ui/SingleSlider.d.ts +8 -0
  545. package/esm/ui/SingleSlider.js +11 -0
  546. package/esm/ui/SizeSliderRow.d.ts +16 -0
  547. package/esm/ui/SizeSliderRow.js +50 -0
  548. package/esm/ui/SliderTooltip.d.ts +2 -0
  549. package/esm/ui/SliderTooltip.js +17 -0
  550. package/esm/ui/Snackbar.d.ts +4 -2
  551. package/esm/ui/Snackbar.js +11 -8
  552. package/esm/ui/SnackbarContents.d.ts +1 -1
  553. package/esm/ui/SnackbarContents.js +21 -3
  554. package/esm/ui/SnackbarModel.d.ts +40 -0
  555. package/esm/ui/SnackbarModel.js +43 -11
  556. package/esm/ui/StackTraceButton.d.ts +5 -0
  557. package/esm/ui/StackTraceButton.js +16 -0
  558. package/esm/ui/StatusProgressBar.d.ts +37 -0
  559. package/esm/ui/StatusProgressBar.js +76 -0
  560. package/esm/ui/SubmitDialog.d.ts +6 -0
  561. package/esm/ui/SubmitDialog.js +9 -0
  562. package/esm/ui/SubmitForm.d.ts +23 -0
  563. package/esm/ui/SubmitForm.js +23 -0
  564. package/esm/ui/SvgColorLegend.d.ts +13 -0
  565. package/esm/ui/SvgColorLegend.js +65 -0
  566. package/esm/ui/SvgGradientLegend.d.ts +26 -0
  567. package/esm/ui/SvgGradientLegend.js +26 -0
  568. package/esm/ui/TagTextField.d.ts +40 -0
  569. package/esm/ui/TagTextField.js +32 -0
  570. package/esm/ui/VerticalScrollbar.d.ts +45 -0
  571. package/esm/ui/VerticalScrollbar.js +158 -0
  572. package/esm/ui/ViewLoadingScreen.d.ts +24 -0
  573. package/esm/ui/ViewLoadingScreen.js +76 -0
  574. package/esm/ui/addExtensionElement.d.ts +18 -0
  575. package/esm/ui/addExtensionElement.js +23 -0
  576. package/esm/ui/buildExtraTrackMenuItems.d.ts +22 -0
  577. package/esm/ui/buildExtraTrackMenuItems.js +14 -0
  578. package/esm/ui/colorSwatchStyle.d.ts +9 -0
  579. package/esm/ui/colorSwatchStyle.js +11 -0
  580. package/esm/ui/colors.d.ts +61 -8
  581. package/esm/ui/colors.js +135 -1
  582. package/esm/ui/extensionSelectors.d.ts +38 -0
  583. package/esm/ui/extensionSelectors.js +49 -0
  584. package/esm/ui/filterMenuItems.d.ts +112 -0
  585. package/esm/ui/filterMenuItems.js +86 -0
  586. package/esm/ui/formatErrorStack.d.ts +1 -0
  587. package/esm/ui/formatErrorStack.js +56 -0
  588. package/esm/ui/gpuFallback.d.ts +33 -0
  589. package/esm/ui/gpuFallback.js +39 -0
  590. package/esm/ui/highlightChipReveal.d.ts +32 -0
  591. package/esm/ui/highlightChipReveal.js +39 -0
  592. package/esm/ui/hoverBoxStyle.d.ts +11 -0
  593. package/esm/ui/hoverBoxStyle.js +13 -0
  594. package/esm/ui/index.d.ts +76 -4
  595. package/esm/ui/index.js +90 -19
  596. package/esm/ui/inlineMenuRowWidth.d.ts +1 -0
  597. package/esm/ui/inlineMenuRowWidth.js +8 -0
  598. package/esm/ui/launchTargetsMenuItem.d.ts +18 -0
  599. package/esm/ui/launchTargetsMenuItem.js +24 -0
  600. package/esm/ui/launchViewMenu.d.ts +4 -0
  601. package/esm/ui/launchViewMenu.js +36 -0
  602. package/esm/ui/legendMenuItem.d.ts +38 -0
  603. package/esm/ui/legendMenuItem.js +44 -0
  604. package/esm/ui/legendSpec.d.ts +62 -0
  605. package/esm/ui/legendSpec.js +78 -0
  606. package/esm/ui/loadingDotKeyframes.d.ts +18 -0
  607. package/esm/ui/loadingDotKeyframes.js +17 -0
  608. package/esm/ui/makeSizeMenu.d.ts +30 -0
  609. package/esm/ui/makeSizeMenu.js +82 -0
  610. package/esm/ui/mapStackTrace.d.ts +8 -0
  611. package/esm/ui/mapStackTrace.js +108 -0
  612. package/esm/ui/measureLegendText.d.ts +1 -0
  613. package/esm/ui/measureLegendText.js +8 -0
  614. package/esm/ui/menuItemAdornment.d.ts +33 -0
  615. package/esm/ui/menuItemAdornment.js +50 -0
  616. package/esm/ui/menuItems.d.ts +28 -0
  617. package/esm/ui/menuItems.js +26 -0
  618. package/esm/ui/menuLabels.d.ts +41 -0
  619. package/esm/ui/menuLabels.js +43 -0
  620. package/esm/ui/multiTrackMenuItems.d.ts +19 -0
  621. package/esm/ui/multiTrackMenuItems.js +15 -0
  622. package/esm/ui/palette.d.ts +559 -0
  623. package/esm/ui/palette.js +746 -0
  624. package/esm/ui/parseError.d.ts +4 -0
  625. package/esm/ui/parseError.js +18 -0
  626. package/esm/ui/persistentScrollbarStyle.d.ts +49 -0
  627. package/esm/ui/persistentScrollbarStyle.js +53 -0
  628. package/esm/ui/promotableMenuItems.d.ts +19 -0
  629. package/esm/ui/promotableMenuItems.js +89 -0
  630. package/esm/ui/promotablePinCoverage.d.ts +44 -0
  631. package/esm/ui/promotablePinCoverage.js +87 -0
  632. package/esm/ui/radioSubMenu.d.ts +33 -0
  633. package/esm/ui/radioSubMenu.js +32 -0
  634. package/esm/ui/react-colorful.js +5 -1
  635. package/esm/ui/replaceViewAction.d.ts +31 -0
  636. package/esm/ui/replaceViewAction.js +39 -0
  637. package/esm/ui/rewriteExternalAnchors.d.ts +1 -0
  638. package/esm/ui/rewriteExternalAnchors.js +8 -0
  639. package/esm/ui/scrollZoomLabels.d.ts +17 -0
  640. package/esm/ui/scrollZoomLabels.js +22 -0
  641. package/esm/ui/showSubMenu.d.ts +19 -0
  642. package/esm/ui/showSubMenu.js +30 -0
  643. package/esm/ui/sliderScale.d.ts +6 -0
  644. package/esm/ui/sliderScale.js +30 -0
  645. package/esm/ui/statusProgressKeyframes.d.ts +6 -0
  646. package/esm/ui/statusProgressKeyframes.js +14 -0
  647. package/esm/ui/stripStackTraceMessage.d.ts +1 -0
  648. package/esm/ui/stripStackTraceMessage.js +9 -0
  649. package/esm/ui/styleTheme.d.ts +158 -0
  650. package/esm/ui/styleTheme.js +115 -0
  651. package/esm/ui/submenuAim.d.ts +30 -0
  652. package/esm/ui/submenuAim.js +37 -0
  653. package/esm/ui/theme.d.ts +343 -29
  654. package/esm/ui/theme.js +258 -342
  655. package/esm/ui/toggleMenuItems.d.ts +44 -0
  656. package/esm/ui/toggleMenuItems.js +60 -0
  657. package/esm/ui/useAssemblySelection.d.ts +153 -0
  658. package/esm/ui/useAssemblySelection.js +54 -0
  659. package/esm/ui/useCoalescedPointer.d.ts +36 -0
  660. package/esm/ui/useCoalescedPointer.js +60 -0
  661. package/esm/ui/useCopyToClipboard.d.ts +15 -0
  662. package/esm/ui/useCopyToClipboard.js +41 -0
  663. package/esm/ui/useExportSvgPreference.d.ts +1 -0
  664. package/esm/ui/useExportSvgPreference.js +4 -0
  665. package/esm/ui/useMouseTracking.d.ts +71 -0
  666. package/esm/ui/useMouseTracking.js +179 -0
  667. package/esm/ui/useRecentLocations.d.ts +28 -0
  668. package/esm/ui/useRecentLocations.js +31 -0
  669. package/esm/ui/wrapComponent.d.ts +47 -0
  670. package/esm/ui/wrapComponent.js +58 -0
  671. package/esm/ui/zIndexes.d.ts +28 -0
  672. package/esm/ui/zIndexes.js +38 -0
  673. package/esm/util/Base1DUtils.d.ts +204 -16
  674. package/esm/util/Base1DUtils.js +310 -175
  675. package/esm/util/Base1DViewModel.d.ts +97 -20
  676. package/esm/util/Base1DViewModel.js +148 -39
  677. package/esm/util/FileSaver/index.d.ts +1 -0
  678. package/esm/util/FileSaver/index.js +27 -0
  679. package/esm/util/IntervalTree.d.ts +18 -39
  680. package/esm/util/IntervalTree.js +63 -244
  681. package/esm/util/SvgCanvas.d.ts +81 -0
  682. package/esm/util/SvgCanvas.js +500 -0
  683. package/esm/util/TimeTraveller.d.ts +12 -0
  684. package/esm/util/TimeTraveller.js +130 -27
  685. package/esm/util/aborting.d.ts +17 -4
  686. package/esm/util/aborting.js +30 -25
  687. package/esm/util/adapterMetadata.d.ts +20 -0
  688. package/esm/util/adapterMetadata.js +39 -0
  689. package/esm/util/addAndShowTrack.d.ts +22 -0
  690. package/esm/util/addAndShowTrack.js +23 -0
  691. package/esm/util/addRelativeUris.d.ts +17 -0
  692. package/esm/util/addRelativeUris.js +42 -0
  693. package/esm/util/addTrackComponent.d.ts +72 -0
  694. package/esm/util/addTrackComponent.js +53 -0
  695. package/esm/util/addTrackFromWidget.d.ts +94 -0
  696. package/esm/util/addTrackFromWidget.js +90 -0
  697. package/esm/util/analytics.d.ts +32 -3
  698. package/esm/util/analytics.js +102 -49
  699. package/esm/util/animationAllowed.d.ts +17 -0
  700. package/esm/util/animationAllowed.js +22 -0
  701. package/esm/util/applyInitSettings.d.ts +79 -0
  702. package/esm/util/applyInitSettings.js +91 -0
  703. package/esm/util/applyRowResizeWheel.d.ts +10 -0
  704. package/esm/util/applyRowResizeWheel.js +34 -0
  705. package/esm/util/assemblyConfigUtils.d.ts +144 -0
  706. package/esm/util/assemblyConfigUtils.js +498 -0
  707. package/esm/util/bandHeight.d.ts +53 -0
  708. package/esm/util/bandHeight.js +56 -0
  709. package/esm/util/bandLayout.d.ts +51 -0
  710. package/esm/util/bandLayout.js +36 -0
  711. package/esm/util/bezierConnector.d.ts +14 -0
  712. package/esm/util/bezierConnector.js +108 -0
  713. package/esm/util/bgzfWorkerPool.d.ts +78 -0
  714. package/esm/util/bgzfWorkerPool.js +81 -0
  715. package/esm/util/blockTypes.d.ts +64 -45
  716. package/esm/util/blockTypes.js +67 -74
  717. package/esm/util/bpUtils.d.ts +81 -0
  718. package/esm/util/bpUtils.js +103 -0
  719. package/esm/util/cacheBudgets.d.ts +52 -0
  720. package/esm/util/cacheBudgets.js +52 -0
  721. package/esm/util/cachedSetup.d.ts +51 -0
  722. package/esm/util/cachedSetup.js +87 -0
  723. package/esm/util/calculateDynamicBlocks.d.ts +5 -0
  724. package/esm/util/calculateDynamicBlocks.js +85 -82
  725. package/esm/util/calculateStaticBlocks.d.ts +2 -3
  726. package/esm/util/calculateStaticBlocks.js +48 -71
  727. package/esm/util/chooseGridPitch.d.ts +9 -0
  728. package/esm/util/chooseGridPitch.js +31 -0
  729. package/esm/util/clampToContig.d.ts +26 -0
  730. package/esm/util/clampToContig.js +28 -0
  731. package/esm/util/cmpStr.d.ts +1 -0
  732. package/esm/util/cmpStr.js +7 -0
  733. package/esm/util/coarseStripHTML.js +3 -15
  734. package/esm/util/color/cssColorsLevel4.js +6 -2
  735. package/esm/util/color/index.d.ts +81 -2
  736. package/esm/util/color/index.js +194 -25
  737. package/esm/util/color-bits/bit.d.ts +4 -0
  738. package/esm/util/color-bits/bit.js +37 -0
  739. package/esm/util/color-bits/convert.d.ts +23 -0
  740. package/esm/util/color-bits/convert.js +294 -0
  741. package/esm/util/color-bits/core.d.ts +34 -0
  742. package/esm/util/color-bits/core.js +67 -0
  743. package/esm/util/color-bits/format.d.ts +24 -0
  744. package/esm/util/color-bits/format.js +82 -0
  745. package/esm/util/color-bits/functions.d.ts +33 -0
  746. package/esm/util/color-bits/functions.js +70 -0
  747. package/esm/util/color-bits/index.d.ts +5 -0
  748. package/esm/util/color-bits/index.js +4 -0
  749. package/esm/util/color-bits/parse.d.ts +17 -0
  750. package/esm/util/color-bits/parse.js +382 -0
  751. package/esm/util/colorBits.d.ts +39 -0
  752. package/esm/util/colorBits.js +180 -0
  753. package/esm/util/colorRamp.d.ts +37 -0
  754. package/esm/util/colorRamp.js +93 -0
  755. package/esm/util/colord.d.ts +8 -0
  756. package/esm/util/colord.js +43 -191
  757. package/esm/util/convertCodingSequenceToPeptides.d.ts +17 -3
  758. package/esm/util/convertCodingSequenceToPeptides.js +51 -4
  759. package/esm/util/copyText.d.ts +18 -0
  760. package/esm/util/copyText.js +30 -0
  761. package/esm/util/copyToClipboard.d.ts +4 -0
  762. package/esm/util/copyToClipboard.js +58 -0
  763. package/esm/util/createStopTokenRotation.d.ts +117 -0
  764. package/esm/util/createStopTokenRotation.js +147 -0
  765. package/esm/util/createSvgRasterCanvas.d.ts +7 -0
  766. package/esm/util/createSvgRasterCanvas.js +22 -0
  767. package/esm/util/crypto.d.ts +24 -0
  768. package/esm/util/crypto.js +85 -2
  769. package/esm/util/dataGridUtils.d.ts +9 -0
  770. package/esm/util/dataGridUtils.js +36 -0
  771. package/esm/util/dedupe.js +1 -0
  772. package/esm/util/deepEqual.d.ts +8 -0
  773. package/esm/util/deepEqual.js +22 -0
  774. package/esm/util/deepMerge.d.ts +20 -0
  775. package/esm/util/deepMerge.js +44 -0
  776. package/esm/util/diagonalizeRegions.d.ts +23 -0
  777. package/esm/util/diagonalizeRegions.js +192 -0
  778. package/esm/util/environment.d.ts +4 -0
  779. package/esm/util/environment.js +43 -0
  780. package/esm/util/eventPoint.d.ts +32 -0
  781. package/esm/util/eventPoint.js +28 -0
  782. package/esm/util/fetchAndMaybeUnzip.d.ts +6 -0
  783. package/esm/util/fetchAndMaybeUnzip.js +64 -0
  784. package/esm/util/fetchContext.d.ts +82 -0
  785. package/esm/util/fetchContext.js +59 -0
  786. package/esm/util/fetchHub.d.ts +15 -0
  787. package/esm/util/fetchHub.js +31 -0
  788. package/esm/util/fetchJson.d.ts +1 -0
  789. package/esm/util/fetchJson.js +7 -0
  790. package/esm/util/fetchPhases.d.ts +77 -0
  791. package/esm/util/fetchPhases.js +1 -0
  792. package/esm/util/fetchSeq.d.ts +5 -1
  793. package/esm/util/fetchSeq.js +18 -6
  794. package/esm/util/fileHandleStore.d.ts +19 -2
  795. package/esm/util/fileHandleStore.js +95 -35
  796. package/esm/util/flatbush/index.d.ts +27 -6
  797. package/esm/util/flatbush/index.js +194 -218
  798. package/esm/util/formatBytes.d.ts +9 -0
  799. package/esm/util/formatBytes.js +18 -0
  800. package/esm/util/formatFastaStrings.d.ts +13 -0
  801. package/esm/util/formatFastaStrings.js +13 -0
  802. package/esm/util/formatGuessers.d.ts +30 -0
  803. package/esm/util/formatGuessers.js +69 -0
  804. package/esm/util/formatRelativeTime.d.ts +1 -0
  805. package/esm/util/formatRelativeTime.js +25 -0
  806. package/esm/util/frameCoalescer.d.ts +30 -0
  807. package/esm/util/frameCoalescer.js +22 -0
  808. package/esm/util/freezeDeep.d.ts +28 -0
  809. package/esm/util/freezeDeep.js +41 -0
  810. package/esm/util/geneticCodes.d.ts +56 -0
  811. package/esm/util/geneticCodes.js +371 -0
  812. package/esm/util/getFileName.d.ts +11 -0
  813. package/esm/util/getFileName.js +34 -0
  814. package/esm/util/getLocationUri.d.ts +49 -0
  815. package/esm/util/getLocationUri.js +63 -0
  816. package/esm/util/getRelativeX.d.ts +4 -0
  817. package/esm/util/getRelativeX.js +7 -0
  818. package/esm/util/getStr.d.ts +6 -0
  819. package/esm/util/getStr.js +15 -0
  820. package/esm/util/highlights.d.ts +21 -0
  821. package/esm/util/highlights.js +100 -0
  822. package/esm/util/hooks.d.ts +160 -0
  823. package/esm/util/hooks.js +416 -0
  824. package/esm/util/htmlText.d.ts +13 -0
  825. package/esm/util/htmlText.js +66 -0
  826. package/esm/util/idMaker.d.ts +1 -1
  827. package/esm/util/idMaker.js +31 -18
  828. package/esm/util/index.d.ts +82 -268
  829. package/esm/util/index.js +136 -853
  830. package/esm/util/indexCandidates.d.ts +50 -0
  831. package/esm/util/indexCandidates.js +101 -0
  832. package/esm/util/installClearHoverOnSurfaceMove.d.ts +40 -0
  833. package/esm/util/installClearHoverOnSurfaceMove.js +41 -0
  834. package/esm/util/installFetch.d.ts +194 -0
  835. package/esm/util/installFetch.js +178 -0
  836. package/esm/util/installInitAutorun.d.ts +62 -0
  837. package/esm/util/installInitAutorun.js +107 -0
  838. package/esm/util/intervals.d.ts +20 -0
  839. package/esm/util/intervals.js +37 -0
  840. package/esm/util/io/RemoteFileWithRangeCache.d.ts +10 -11
  841. package/esm/util/io/RemoteFileWithRangeCache.js +10 -148
  842. package/esm/util/io/index.d.ts +39 -2
  843. package/esm/util/io/index.js +115 -12
  844. package/esm/util/isDataCurrent.d.ts +7 -0
  845. package/esm/util/isDataCurrent.js +9 -0
  846. package/esm/util/isWebWorker.js +1 -2
  847. package/esm/util/iupac.d.ts +4 -0
  848. package/esm/util/iupac.js +59 -0
  849. package/esm/util/jexl.js +141 -17
  850. package/esm/util/jexlFilters.d.ts +75 -0
  851. package/esm/util/jexlFilters.js +49 -0
  852. package/esm/util/jexlStrings.d.ts +22 -1
  853. package/esm/util/jexlStrings.js +21 -14
  854. package/esm/util/layouts/GranularRectLayout.d.ts +13 -25
  855. package/esm/util/layouts/GranularRectLayout.js +99 -356
  856. package/esm/util/layouts/index.d.ts +1 -7
  857. package/esm/util/layouts/index.js +2 -6
  858. package/esm/util/layouts/intervalUtils.d.ts +12 -1
  859. package/esm/util/layouts/intervalUtils.js +13 -31
  860. package/esm/util/layouts/placeRect.d.ts +50 -0
  861. package/esm/util/layouts/placeRect.js +97 -0
  862. package/esm/util/leadingEdgeAutorun.d.ts +40 -0
  863. package/esm/util/leadingEdgeAutorun.js +51 -0
  864. package/esm/util/librpc.d.ts +5 -2
  865. package/esm/util/librpc.js +6 -1
  866. package/esm/util/linkify.js +2 -0
  867. package/esm/util/locString.d.ts +72 -0
  868. package/esm/util/locString.js +178 -7
  869. package/esm/util/locStringsToRegions.d.ts +10 -0
  870. package/esm/util/locStringsToRegions.js +35 -0
  871. package/esm/util/localStorage.d.ts +36 -0
  872. package/esm/util/localStorage.js +137 -0
  873. package/esm/util/makeAssembly.d.ts +54 -0
  874. package/esm/util/makeAssembly.js +52 -0
  875. package/esm/util/makeTrackId.d.ts +14 -0
  876. package/esm/util/makeTrackId.js +14 -0
  877. package/esm/util/matchTrackId.d.ts +11 -0
  878. package/esm/util/matchTrackId.js +14 -0
  879. package/esm/util/measureText.d.ts +24 -0
  880. package/esm/util/measureText.js +51 -0
  881. package/esm/util/mst-reflection.d.ts +14 -4
  882. package/esm/util/mst-reflection.js +33 -32
  883. package/esm/util/mstUtils.d.ts +89 -0
  884. package/esm/util/mstUtils.js +122 -0
  885. package/esm/util/nanoid.d.ts +0 -4
  886. package/esm/util/nanoid.js +10 -20
  887. package/esm/util/numericUtils.d.ts +20 -0
  888. package/esm/util/numericUtils.js +127 -0
  889. package/esm/util/objectUtils.d.ts +2 -0
  890. package/esm/util/objectUtils.js +9 -0
  891. package/esm/util/offscreenCanvasPonyfill.d.ts +5 -4
  892. package/esm/util/offscreenCanvasPonyfill.js +5 -47
  893. package/esm/util/openDisplays.d.ts +23 -0
  894. package/esm/util/openDisplays.js +79 -0
  895. package/esm/util/openFeatureWidget.d.ts +33 -0
  896. package/esm/util/openFeatureWidget.js +64 -0
  897. package/esm/util/paintLayer.d.ts +32 -0
  898. package/esm/util/paintLayer.js +33 -0
  899. package/esm/util/parentWalk.d.ts +32 -0
  900. package/esm/util/parentWalk.js +84 -0
  901. package/esm/util/parseLineByLine.d.ts +45 -2
  902. package/esm/util/parseLineByLine.js +156 -15
  903. package/esm/util/parseMotifList.d.ts +17 -0
  904. package/esm/util/parseMotifList.js +69 -0
  905. package/esm/util/pluginStore.d.ts +113 -0
  906. package/esm/util/pluginStore.js +253 -0
  907. package/esm/util/pointerPresence.d.ts +5 -0
  908. package/esm/util/pointerPresence.js +21 -0
  909. package/esm/util/progress.d.ts +459 -0
  910. package/esm/util/progress.js +820 -0
  911. package/esm/util/range.d.ts +42 -1
  912. package/esm/util/range.js +59 -2
  913. package/esm/util/renameRegions.d.ts +21 -0
  914. package/esm/util/renameRegions.js +129 -0
  915. package/esm/util/renderToStaticMarkup.d.ts +2 -0
  916. package/esm/util/renderToStaticMarkup.js +50 -0
  917. package/esm/util/reorder.d.ts +35 -0
  918. package/esm/util/reorder.js +83 -0
  919. package/esm/util/resolveRowHeight.d.ts +27 -0
  920. package/esm/util/resolveRowHeight.js +30 -0
  921. package/esm/util/revlist.d.ts +13 -0
  922. package/esm/util/revlist.js +14 -0
  923. package/esm/util/rowStackGeometry.d.ts +66 -0
  924. package/esm/util/rowStackGeometry.js +70 -0
  925. package/esm/util/rpc.d.ts +16 -1
  926. package/esm/util/rpc.js +12 -1
  927. package/esm/util/rxjs.d.ts +14 -1
  928. package/esm/util/rxjs.js +39 -10
  929. package/esm/util/sameStrings.d.ts +16 -0
  930. package/esm/util/sameStrings.js +20 -0
  931. package/esm/util/scrollLatch.d.ts +4 -0
  932. package/esm/util/scrollLatch.js +59 -0
  933. package/esm/util/selectNamedRegions.d.ts +136 -0
  934. package/esm/util/selectNamedRegions.js +222 -0
  935. package/esm/util/seqUtils.d.ts +17 -0
  936. package/esm/util/seqUtils.js +80 -0
  937. package/esm/util/sessionServices.d.ts +29 -0
  938. package/esm/util/sessionServices.js +46 -0
  939. package/esm/util/sessionSharing.d.ts +38 -0
  940. package/esm/util/sessionSharing.js +154 -0
  941. package/esm/util/sessionStorage.d.ts +1 -0
  942. package/esm/util/sessionStorage.js +15 -0
  943. package/esm/util/setStackTraceLimit.d.ts +6 -0
  944. package/esm/util/setStackTraceLimit.js +20 -0
  945. package/esm/util/simpleFeature.d.ts +112 -4
  946. package/esm/util/simpleFeature.js +181 -29
  947. package/esm/util/springAnimate.d.ts +20 -0
  948. package/esm/util/springAnimate.js +80 -0
  949. package/esm/util/stats.d.ts +25 -2
  950. package/esm/util/stats.js +39 -8
  951. package/esm/util/stopToken.d.ts +207 -15
  952. package/esm/util/stopToken.js +403 -55
  953. package/esm/util/stringUtils.d.ts +5 -0
  954. package/esm/util/stringUtils.js +34 -0
  955. package/esm/util/svgColorProps.d.ts +7 -0
  956. package/esm/util/svgColorProps.js +28 -0
  957. package/esm/util/tabix.d.ts +120 -0
  958. package/esm/util/tabix.js +143 -0
  959. package/esm/util/tags.d.ts +2 -0
  960. package/esm/util/tags.js +5 -0
  961. package/esm/util/temporaryAssembly.d.ts +21 -0
  962. package/esm/util/temporaryAssembly.js +29 -0
  963. package/esm/util/tickLabels.d.ts +36 -0
  964. package/esm/util/tickLabels.js +45 -0
  965. package/esm/util/timeGate.d.ts +26 -0
  966. package/esm/util/timeGate.js +79 -0
  967. package/esm/util/trackConfigDelta.d.ts +84 -0
  968. package/esm/util/trackConfigDelta.js +190 -0
  969. package/esm/util/tracks.d.ts +352 -32
  970. package/esm/util/tracks.js +576 -194
  971. package/esm/util/tss-react/cssAndCx.js +11 -66
  972. package/esm/util/tss-react/index.d.ts +11 -2
  973. package/esm/util/tss-react/index.js +9 -2
  974. package/esm/util/tss-react/makeStyles.js +7 -4
  975. package/esm/util/tss-react/mergeClasses.js +1 -0
  976. package/esm/util/tss-react/tools/classnames.d.ts +3 -0
  977. package/esm/util/tss-react/tools/classnames.js +3 -0
  978. package/esm/util/tss-react/tools/getDependencyArrayRef.d.ts +18 -0
  979. package/esm/util/tss-react/tools/getDependencyArrayRef.js +19 -0
  980. package/esm/util/tss-react/types.d.ts +1 -1
  981. package/esm/util/tss-react/types.js +1 -6
  982. package/esm/util/types/ElementId.js +1 -1
  983. package/esm/util/types/data.d.ts +75 -0
  984. package/esm/util/types/data.js +41 -0
  985. package/esm/util/types/index.d.ts +358 -119
  986. package/esm/util/types/index.js +87 -64
  987. package/esm/util/types/isAny.d.ts +11 -0
  988. package/esm/util/types/isAny.js +1 -0
  989. package/esm/util/types/mst.d.ts +71 -47
  990. package/esm/util/types/mst.js +27 -22
  991. package/esm/util/types/predicate.d.ts +9 -0
  992. package/esm/util/types/predicate.js +1 -0
  993. package/esm/util/types/renderingServices.d.ts +16 -0
  994. package/esm/util/types/renderingServices.js +1 -0
  995. package/esm/util/types/services.d.ts +55 -0
  996. package/esm/util/types/services.js +10 -0
  997. package/esm/util/types/util.d.ts +8 -2
  998. package/esm/util/unzip.d.ts +1 -0
  999. package/esm/util/unzip.js +6 -0
  1000. package/esm/util/useEventCallback.d.ts +1 -0
  1001. package/esm/util/useEventCallback.js +16 -0
  1002. package/esm/util/useFeatureSequence.d.ts +13 -7
  1003. package/esm/util/useFeatureSequence.js +56 -78
  1004. package/esm/util/useFetch.d.ts +56 -0
  1005. package/esm/util/useFetch.js +188 -0
  1006. package/esm/util/useFetchPlugins.d.ts +12 -0
  1007. package/esm/util/useFetchPlugins.js +14 -0
  1008. package/esm/util/useMeasure.d.ts +11 -1
  1009. package/esm/util/useMeasure.js +20 -6
  1010. package/esm/util/usePanZoom.d.ts +75 -0
  1011. package/esm/util/usePanZoom.js +175 -0
  1012. package/esm/util/usePanelVirtualScroll.d.ts +37 -0
  1013. package/esm/util/usePanelVirtualScroll.js +42 -0
  1014. package/esm/util/usePointerDrag.d.ts +37 -0
  1015. package/esm/util/usePointerDrag.js +61 -0
  1016. package/esm/util/useRafCommit.d.ts +4 -0
  1017. package/esm/util/useRafCommit.js +50 -0
  1018. package/esm/util/useResizeDrag.d.ts +91 -0
  1019. package/esm/util/useResizeDrag.js +105 -0
  1020. package/esm/util/useRowVirtualScroll.d.ts +32 -0
  1021. package/esm/util/useRowVirtualScroll.js +63 -0
  1022. package/esm/util/useVirtualScrollWheel.d.ts +7 -0
  1023. package/esm/util/useVirtualScrollWheel.js +108 -0
  1024. package/esm/util/viewStatus.d.ts +58 -0
  1025. package/esm/util/viewStatus.js +20 -0
  1026. package/esm/util/virtualRange.d.ts +36 -0
  1027. package/esm/util/virtualRange.js +26 -0
  1028. package/esm/util/webStorage.d.ts +26 -0
  1029. package/esm/util/webStorage.js +92 -0
  1030. package/esm/util/wheelZoom.d.ts +59 -0
  1031. package/esm/util/wheelZoom.js +231 -0
  1032. package/esm/util/whenViewSettled.d.ts +27 -0
  1033. package/esm/util/whenViewSettled.js +28 -0
  1034. package/esm/util/withFeatureDetails.d.ts +34 -0
  1035. package/esm/util/withFeatureDetails.js +59 -0
  1036. package/package.json +240 -820
  1037. package/esm/ReExports/DataGrid.d.ts +0 -1
  1038. package/esm/ReExports/DataGrid.js +0 -1
  1039. package/esm/configuration/util.d.ts +0 -10
  1040. package/esm/configuration/util.js +0 -123
  1041. package/esm/data_adapters/BaseAdapter/BaseOptions.d.ts +0 -18
  1042. package/esm/data_adapters/util.d.ts +0 -1
  1043. package/esm/data_adapters/util.js +0 -6
  1044. package/esm/pluggableElementTypes/GlyphType.d.ts +0 -43
  1045. package/esm/pluggableElementTypes/GlyphType.js +0 -18
  1046. package/esm/pluggableElementTypes/models/saveTrackFileTypes/fetchSequence.d.ts +0 -5
  1047. package/esm/pluggableElementTypes/models/saveTrackFileTypes/fetchSequence.js +0 -17
  1048. package/esm/pluggableElementTypes/renderers/BoxRendererType.d.ts +0 -52
  1049. package/esm/pluggableElementTypes/renderers/BoxRendererType.js +0 -78
  1050. package/esm/pluggableElementTypes/renderers/CircularChordRendererType.d.ts +0 -4
  1051. package/esm/pluggableElementTypes/renderers/CircularChordRendererType.js +0 -4
  1052. package/esm/pluggableElementTypes/renderers/FeatureRendererType.d.ts +0 -58
  1053. package/esm/pluggableElementTypes/renderers/FeatureRendererType.js +0 -77
  1054. package/esm/pluggableElementTypes/renderers/LayoutSession.d.ts +0 -31
  1055. package/esm/pluggableElementTypes/renderers/LayoutSession.js +0 -40
  1056. package/esm/pluggableElementTypes/renderers/RendererType.d.ts +0 -28
  1057. package/esm/pluggableElementTypes/renderers/RendererType.js +0 -20
  1058. package/esm/pluggableElementTypes/renderers/ServerSideRendererType.d.ts +0 -58
  1059. package/esm/pluggableElementTypes/renderers/ServerSideRendererType.js +0 -108
  1060. package/esm/pluggableElementTypes/renderers/index.d.ts +0 -6
  1061. package/esm/pluggableElementTypes/renderers/index.js +0 -6
  1062. package/esm/pluggableElementTypes/renderers/util.d.ts +0 -3
  1063. package/esm/pluggableElementTypes/renderers/util.js +0 -14
  1064. package/esm/rpc/baseRpcConfig.d.ts +0 -8
  1065. package/esm/rpc/baseRpcConfig.js +0 -10
  1066. package/esm/rpc/mainThreadRpcConfig.d.ts +0 -8
  1067. package/esm/rpc/mainThreadRpcConfig.js +0 -8
  1068. package/esm/rpc/methods/CoreGetFeatureDensityStats.d.ts +0 -17
  1069. package/esm/rpc/methods/CoreGetFeatureDensityStats.js +0 -25
  1070. package/esm/rpc/methods/CoreGetFeatureDetails.d.ts +0 -11
  1071. package/esm/rpc/methods/CoreGetFeatureDetails.js +0 -24
  1072. package/esm/rpc/methods/CoreGetFileInfo.d.ts +0 -9
  1073. package/esm/rpc/methods/CoreGetFileInfo.js +0 -15
  1074. package/esm/rpc/methods/CoreRender.d.ts +0 -14
  1075. package/esm/rpc/methods/CoreRender.js +0 -40
  1076. package/esm/rpc/methods/CoreSaveFeatureData.d.ts +0 -16
  1077. package/esm/rpc/methods/CoreSaveFeatureData.js +0 -32
  1078. package/esm/rpc/methods/util.d.ts +0 -15
  1079. package/esm/rpc/methods/util.js +0 -7
  1080. package/esm/rpc/webWorkerRpcConfig.d.ts +0 -8
  1081. package/esm/rpc/webWorkerRpcConfig.js +0 -8
  1082. package/esm/ui/MenuButton.d.ts +0 -1
  1083. package/esm/ui/MenuButton.js +0 -1
  1084. package/esm/ui/MenuItems.d.ts +0 -15
  1085. package/esm/ui/MenuItems.js +0 -59
  1086. package/esm/ui/useEvent.d.ts +0 -1
  1087. package/esm/ui/useEvent.js +0 -10
  1088. package/esm/util/blobToDataURL.d.ts +0 -1
  1089. package/esm/util/blobToDataURL.js +0 -14
  1090. package/esm/util/compositeMap.d.ts +0 -11
  1091. package/esm/util/compositeMap.js +0 -59
  1092. package/esm/util/flatqueue/index.d.ts +0 -11
  1093. package/esm/util/flatqueue/index.js +0 -61
  1094. package/esm/util/layouts/BaseLayout.d.ts +0 -30
  1095. package/esm/util/layouts/MultiLayout.d.ts +0 -12
  1096. package/esm/util/layouts/MultiLayout.js +0 -40
  1097. package/esm/util/layouts/PileupLayout.d.ts +0 -41
  1098. package/esm/util/layouts/PileupLayout.js +0 -202
  1099. package/esm/util/layouts/PrecomputedLayout.d.ts +0 -30
  1100. package/esm/util/layouts/PrecomputedLayout.js +0 -71
  1101. package/esm/util/layouts/SceneGraph.d.ts +0 -31
  1102. package/esm/util/layouts/SceneGraph.js +0 -121
  1103. package/esm/util/makeAbortableReaction.d.ts +0 -3
  1104. package/esm/util/makeAbortableReaction.js +0 -47
  1105. package/esm/util/map-obj/index.d.ts +0 -13
  1106. package/esm/util/map-obj/index.js +0 -92
  1107. package/esm/util/nextTick.d.ts +0 -1
  1108. package/esm/util/nextTick.js +0 -3
  1109. package/esm/util/offscreenCanvasGetSerializingSvg.d.ts +0 -5
  1110. package/esm/util/offscreenCanvasGetSerializingSvg.js +0 -9
  1111. package/esm/util/offscreenCanvasUtils.d.ts +0 -12
  1112. package/esm/util/offscreenCanvasUtils.js +0 -19
  1113. package/esm/util/renderToAbstractCanvas.d.ts +0 -17
  1114. package/esm/util/renderToAbstractCanvas.js +0 -53
  1115. package/esm/util/transferables.d.ts +0 -2
  1116. package/esm/util/transferables.js +0 -35
  1117. package/esm/util/tss-react/mui/index.d.ts +0 -1
  1118. package/esm/util/tss-react/mui/index.js +0 -1
  1119. package/esm/util/tss-react/mui/mui.d.ts +0 -10
  1120. package/esm/util/tss-react/mui/mui.js +0 -5
  1121. package/esm/util/when.d.ts +0 -1
  1122. package/esm/util/when.js +0 -1
  1123. /package/esm/{data_adapters/BaseAdapter/BaseOptions.js → configuration/promotablePin.js} +0 -0
  1124. /package/esm/{util/layouts/BaseLayout.js → data_adapters/BaseAdapter/CytobandAdapter.js} +0 -0
@@ -1,48 +1,112 @@
1
- import { getParent, getSnapshot, isRoot, isStateTreeNode, } from '@jbrowse/mobx-state-tree';
2
- import { getFileHandle, storeFileHandle, verifyPermission, } from "./fileHandleStore.js";
3
- import { getEnv, getSession, objectHash } from "./index.js";
4
- import { readConfObject } from "../configuration/index.js";
5
- const trackAssemblyNamesCache = new WeakMap();
1
+ // Re-exported because `@jbrowse/core/util/tracks` is the path plugins import it
2
+ // from. It must come first: `../configuration` imports the util barrel, which
3
+ // imports this module back, and a re-export declared after that cycle has a
4
+ // getter that fires before its own require has run.
5
+ export { getFileName } from './getFileName.js';
6
+ // Lives in `./mstUtils.ts` with the rest of the tree walks, and is re-exported
7
+ // here because `@jbrowse/core/util/tracks` is a plugin ABI module that offers
8
+ // it. `fetchContext.ts` takes it from mstUtils instead, which is what keeps the
9
+ // configuration schemas this file pulls in out of the fetch harness's graph.
10
+ export { getRpcSessionId } from './parentWalk.js';
11
+ import { getParent, getSnapshot, isStateTreeNode, } from '@jbrowse/mobx-state-tree';
12
+ import { observable, runInAction, untracked } from 'mobx';
13
+ import { isConfigurationSlot, preProcessSlotValues, readConfObject, } from '../configuration/index.js';
14
+ import { getFileHandle, storeFileHandle, verifyPermission, } from './fileHandleStore.js';
15
+ import { getFileName } from './getFileName.js';
16
+ import { getContainingView, getEnv, getSession, objectHash, } from './mstUtils.js';
17
+ import { isViewModel } from './types/index.js';
18
+ // Deliberately uncached. This used to memoize on a permanent WeakMap keyed by
19
+ // track, but every caller reads it from inside a reactive getter or autorun: the
20
+ // memo meant the reaction never subscribed to the config, so editing
21
+ // assemblyNames in the config editor did not invalidate it. The reads are
22
+ // per-view-change, not per-feature, so MobX's own computed caching is enough.
6
23
  export function getTrackAssemblyNames(track) {
7
- let cached = trackAssemblyNamesCache.get(track);
8
- if (!cached) {
9
- cached = getConfAssemblyNames(track.configuration);
10
- trackAssemblyNamesCache.set(track, cached);
11
- }
12
- return cached;
13
- }
14
- export function getConfAssemblyNames(conf) {
24
+ return getConfAssemblyNames(track.configuration);
25
+ }
26
+ /**
27
+ * Assembly names as the aliases resolve them, so a track configured against
28
+ * `hg38` compares equal to a view on `GRCh38`. Every "does this track belong to
29
+ * these assemblies" test should run both sides through this, or the same track
30
+ * is offered by one picker and hidden by another.
31
+ *
32
+ * A name the assembly manager doesn't know is kept **as written**, not dropped.
33
+ * Dropping it means "matches nothing" on the track side but "no constraint at
34
+ * all" on the list side, and those disagree; kept, both sides compare the same
35
+ * raw string and matching degrades to the exact name — which is also the right
36
+ * answer in the window before the assembly manager has built its models. Empty
37
+ * names are dropped: a half-initialized view pads its assembly list with them.
38
+ */
39
+ export function canonicalAssemblyNames(names, assemblyManager) {
40
+ return names
41
+ .filter(name => !!name)
42
+ .map(name => assemblyManager.getCanonicalAssemblyName(name) ?? name);
43
+ }
44
+ /**
45
+ * Whether two names name the same assembly, resolving aliases on both sides.
46
+ *
47
+ * The pairwise counterpart to {@link canonicalAssemblyNames}, for the two
48
+ * places a list cannot be mapped: an index-aligned array, which that function's
49
+ * empty-name filter would desync, and a comparison where one side must come
50
+ * back in the caller's own spelling rather than the canonical one.
51
+ *
52
+ * **Both sides, or it buys nothing.** The names meeting at these comparisons
53
+ * come from different places — a view holds what the session opened it on, a
54
+ * track config holds what its author wrote, and a synteny mate holds whatever
55
+ * the adapter resolved a PanSN prefix to. Any two of those can be aliases of
56
+ * one assembly, and `===` says no.
57
+ *
58
+ * A name the assembly manager doesn't know compares as written, the same
59
+ * degradation {@link canonicalAssemblyNames} makes and for the same reason: an
60
+ * all-vs-all file carries sample names no config declares, and those still have
61
+ * to compare equal to themselves.
62
+ */
63
+ export function isSameAssemblyName(a, b, assemblyManager) {
64
+ if (!a || !b) {
65
+ return false;
66
+ }
67
+ return (a === b ||
68
+ (assemblyManager.getCanonicalAssemblyName(a) ?? a) ===
69
+ (assemblyManager.getCanonicalAssemblyName(b) ?? b));
70
+ }
71
+ /**
72
+ * The assemblies a track config names, or `undefined` when it names none.
73
+ *
74
+ * Two shapes, and the second is why this is a function rather than a slot read.
75
+ * A track built on `createBaseTrackConfig` carries `assemblyNames`.
76
+ * `ReferenceSequenceTrack` does not — its schema omits the slot deliberately
77
+ * (see `createReferenceSeqTrackConfig`), because the assembly config holding it
78
+ * IS its assembly, so the name is read off the parent instead.
79
+ */
80
+ function confAssemblyNames(conf) {
15
81
  const trackAssemblyNames = readConfObject(conf, 'assemblyNames');
16
- if (!trackAssemblyNames) {
17
- const parent = getParent(conf);
18
- if ('sequence' in parent) {
19
- return [readConfObject(parent, 'name')];
20
- }
21
- else {
22
- throw new Error('unknown assembly names');
23
- }
24
- }
25
- return trackAssemblyNames;
26
- }
27
- export function getRpcSessionId(thisNode) {
28
- let highestRpcSessionId;
29
- for (let node = thisNode; !isRoot(node); node = getParent(node)) {
30
- if ('rpcSessionId' in node) {
31
- highestRpcSessionId = node.rpcSessionId;
32
- }
82
+ if (trackAssemblyNames) {
83
+ return trackAssemblyNames;
33
84
  }
34
- if (!highestRpcSessionId) {
35
- throw new Error('getRpcSessionId failed, no parent node in the state tree has an `rpcSessionId` attribute');
36
- }
37
- return highestRpcSessionId;
85
+ const parent = getParent(conf);
86
+ return 'sequence' in parent
87
+ ? [readConfObject(parent, 'name')]
88
+ : undefined;
38
89
  }
39
- export function getParentRenderProps(node) {
40
- for (let currentNode = getParent(node); !isRoot(currentNode); currentNode = getParent(currentNode)) {
41
- if ('renderProps' in currentNode) {
42
- return currentNode.renderProps();
43
- }
44
- }
45
- return {};
90
+ export function getConfAssemblyNames(conf) {
91
+ const names = confAssemblyNames(conf);
92
+ if (!names) {
93
+ throw new Error('unknown assembly names');
94
+ }
95
+ return names;
96
+ }
97
+ /**
98
+ * {@link getConfAssemblyNames} for a caller that cannot afford its throw — a
99
+ * config answering neither way leaves the question unanswered instead.
100
+ *
101
+ * `BaseTrackModel.refNameMismatch` is the caller: it runs on every render of
102
+ * every track label, so an unanswerable question must not become a thrown
103
+ * getter. It used to read the raw `assemblyNames` slot itself for that reason,
104
+ * which is a second, subtly different copy of the walk above — and one that
105
+ * answers `[]` for a ReferenceSequenceTrack whose assembly this already knows
106
+ * how to name.
107
+ */
108
+ export function getConfAssemblyNamesOrNone(conf) {
109
+ return confAssemblyNames(conf) ?? [];
46
110
  }
47
111
  export const UNKNOWN = 'UNKNOWN';
48
112
  export const UNSUPPORTED = 'UNSUPPORTED';
@@ -53,10 +117,17 @@ export function getBlob(id) {
53
117
  export function getBlobMap() {
54
118
  return blobMap;
55
119
  }
120
+ // Populates the blobMap in a fresh JS realm (e.g. a web worker, which starts
121
+ // with an empty module-level blobMap). RPC args are the only channel into the
122
+ // worker, so the main thread ships its full blobMap and the worker replaces its
123
+ // own here before adapters call the synchronous getBlob() during openLocation.
56
124
  export function setBlobMap(map) {
57
125
  blobMap = map;
58
126
  }
59
127
  let counter = 0;
128
+ // blob files are stored in a global map. the blobId is based on a combination
129
+ // of timestamp plus counter to be unique across sessions and fast repeated
130
+ // calls
60
131
  export function storeBlobLocation(location) {
61
132
  if ('blob' in location) {
62
133
  const blobId = `b${Date.now()}-${counter++}`;
@@ -69,24 +140,33 @@ export function storeBlobLocation(location) {
69
140
  }
70
141
  return location;
71
142
  }
72
- let fileHandleCache = {};
143
+ // openLocation is synchronous, so File objects are cached here after async handle
144
+ // resolution. Observable so an open LocalFileChooser reactively clears its "needs
145
+ // reload" notice once a restore (afterAttach / "Restore access") populates the
146
+ // cache; the worker/RPC readers run outside any reaction so nothing else
147
+ // subscribes.
148
+ const fileHandleCache = observable.map();
73
149
  export function getFileFromCache(handleId) {
74
- return fileHandleCache[handleId];
150
+ return fileHandleCache.get(handleId);
75
151
  }
76
152
  export function setFileInCache(handleId, file) {
77
- fileHandleCache[handleId] = file;
153
+ runInAction(() => {
154
+ fileHandleCache.set(handleId, file);
155
+ });
78
156
  }
79
157
  export function clearFileFromCache(handleId) {
80
- delete fileHandleCache[handleId];
81
- }
82
- export function getFileHandleCache() {
83
- return fileHandleCache;
158
+ runInAction(() => {
159
+ fileHandleCache.delete(handleId);
160
+ });
84
161
  }
85
- export function setFileHandleCache(cache) {
86
- fileHandleCache = cache;
162
+ export function hasFileHandlesInCache() {
163
+ // read in RpcMethodType.serializeArguments, which an RPC-fetch autorun can
164
+ // reach; untracked so populating the cache never re-triggers that autorun
165
+ // eslint-disable-next-line no-restricted-syntax -- self-write: the fetch this is reached from populates the cache
166
+ return untracked(() => fileHandleCache.size > 0);
87
167
  }
88
168
  export async function ensureFileHandleReady(handleId, requestPermission = true) {
89
- const cached = fileHandleCache[handleId];
169
+ const cached = fileHandleCache.get(handleId);
90
170
  if (cached) {
91
171
  return cached;
92
172
  }
@@ -99,88 +179,100 @@ export async function ensureFileHandleReady(handleId, requestPermission = true)
99
179
  throw new Error(`Permission denied for file "${handle.name}". Click "Restore access" to grant permission.`);
100
180
  }
101
181
  const file = await handle.getFile();
102
- fileHandleCache[handleId] = file;
182
+ setFileInCache(handleId, file);
103
183
  return file;
104
184
  }
105
185
  export async function storeFileHandleLocation(handle) {
106
186
  const handleId = await storeFileHandle(handle);
107
187
  const file = await handle.getFile();
108
- fileHandleCache[handleId] = file;
188
+ setFileInCache(handleId, file);
109
189
  return {
110
190
  locationType: 'FileHandleLocation',
111
191
  name: handle.name,
112
192
  handleId,
113
193
  };
114
194
  }
195
+ async function settleFileHandle(handleId, requestPermission) {
196
+ try {
197
+ await ensureFileHandleReady(handleId, requestPermission);
198
+ return { handleId, success: true };
199
+ }
200
+ catch (error) {
201
+ return { handleId, success: false, error };
202
+ }
203
+ }
204
+ /**
205
+ * Resolves a batch of stored file handles, one result per id.
206
+ *
207
+ * With `requestPermission` set these run ONE AT A TIME, and that is the whole
208
+ * point of the branch. `requestPermission()` needs transient user activation and
209
+ * the browser puts a single file-access prompt on screen at a time, so N of them
210
+ * fired off one "Restore access" click means the first call takes the prompt and
211
+ * the rest are refused without the user ever seeing a dialog — files reported
212
+ * back as permission failures that nobody was asked about. Taking turns, each
213
+ * prompt waits for the one before it to be answered, and whatever the activation
214
+ * window no longer covers is simply still pending for the next click instead of
215
+ * being spent.
216
+ *
217
+ * Without it nothing can prompt, so there is nothing to take turns over and the
218
+ * batch runs at once.
219
+ */
115
220
  export async function restoreFileHandles(handleIds, requestPermission = false) {
221
+ if (!requestPermission) {
222
+ return Promise.all(handleIds.map(id => settleFileHandle(id, false)));
223
+ }
116
224
  const results = [];
117
225
  for (const handleId of handleIds) {
118
- try {
119
- await ensureFileHandleReady(handleId, requestPermission);
120
- results.push({ handleId, success: true });
121
- }
122
- catch (e) {
123
- results.push({ handleId, success: false, error: e });
124
- }
226
+ results.push(await settleFileHandle(handleId, true));
125
227
  }
126
228
  return results;
127
229
  }
128
- export function findFileHandleIds(obj, handleIds = new Set(), seen = new WeakSet()) {
129
- if (!obj || typeof obj !== 'object') {
130
- return handleIds;
131
- }
132
- if (seen.has(obj)) {
133
- return handleIds;
134
- }
135
- seen.add(obj);
136
- if (Array.isArray(obj)) {
137
- for (const item of obj) {
138
- findFileHandleIds(item, handleIds, seen);
230
+ export function findFileHandleIds(obj) {
231
+ const handleIds = new Set();
232
+ const seen = new WeakSet();
233
+ function walk(o) {
234
+ if (!o || typeof o !== 'object' || seen.has(o)) {
235
+ return;
139
236
  }
140
- }
141
- else {
142
- const record = obj;
143
- if (record.locationType === 'FileHandleLocation' &&
144
- typeof record.handleId === 'string') {
145
- handleIds.add(record.handleId);
237
+ seen.add(o);
238
+ if (Array.isArray(o)) {
239
+ for (const item of o) {
240
+ walk(item);
241
+ }
146
242
  }
147
- for (const value of Object.values(record)) {
148
- findFileHandleIds(value, handleIds, seen);
243
+ else {
244
+ const record = o;
245
+ if (record.locationType === 'FileHandleLocation' &&
246
+ typeof record.handleId === 'string') {
247
+ handleIds.add(record.handleId);
248
+ }
249
+ for (const value of Object.values(record)) {
250
+ walk(value);
251
+ }
149
252
  }
150
253
  }
254
+ walk(obj);
151
255
  return handleIds;
152
256
  }
153
257
  export async function restoreFileHandlesFromSnapshot(sessionSnapshot, requestPermission = false) {
154
- const handleIds = findFileHandleIds(sessionSnapshot);
155
- if (handleIds.size > 0) {
156
- return restoreFileHandles([...handleIds], requestPermission);
157
- }
158
- return [];
159
- }
160
- let pendingFileHandleIds = [];
161
- export function getPendingFileHandleIds() {
162
- return pendingFileHandleIds;
163
- }
164
- export function setPendingFileHandleIds(ids) {
165
- pendingFileHandleIds = ids;
166
- }
167
- export function clearPendingFileHandleIds() {
168
- pendingFileHandleIds = [];
169
- }
170
- export async function restorePendingFileHandles() {
171
- if (pendingFileHandleIds.length === 0) {
172
- return [];
173
- }
174
- const results = await restoreFileHandles(pendingFileHandleIds, true);
175
- const stillFailed = results.filter(r => !r.success).map(r => r.handleId);
176
- pendingFileHandleIds = stillFailed;
177
- return results;
178
- }
258
+ return restoreFileHandles([...findFileHandleIds(sessionSnapshot)], requestPermission);
259
+ }
260
+ /**
261
+ * creates a new location from the provided location including the appropriate
262
+ * suffix and location type
263
+ *
264
+ * @param location - the FileLocation
265
+ * @param suffix - the file suffix (e.g. .bam)
266
+ * @returns the constructed location object from the provided parameters
267
+ */
179
268
  export function makeIndex(location, suffix) {
180
269
  if ('uri' in location) {
181
270
  return {
182
271
  uri: location.uri + suffix,
183
272
  locationType: 'UriLocation',
273
+ // carry the parent's baseUri so a derived sibling index resolves against
274
+ // the same config location as the file it indexes
275
+ ...(location.baseUri ? { baseUri: location.baseUri } : {}),
184
276
  };
185
277
  }
186
278
  else if ('localPath' in location) {
@@ -193,36 +285,78 @@ export function makeIndex(location, suffix) {
193
285
  return location;
194
286
  }
195
287
  }
288
+ /**
289
+ * constructs a potential index file (with suffix) from the provided file name
290
+ *
291
+ * @param name - the name of the index file
292
+ * @param typeA - one option of a potential two file suffix (e.g. CSI, BAI)
293
+ * @param typeB - the second option of a potential two file suffix (e.g. CSI, BAI)
294
+ * @returns a likely name of the index file for a given filename
295
+ */
196
296
  export function makeIndexType(name, typeA, typeB) {
197
297
  return name?.toUpperCase().endsWith(typeA) ? typeA : typeB;
198
298
  }
199
- export function getFileName(track) {
200
- const uri = 'uri' in track ? track.uri : undefined;
201
- const localPath = 'localPath' in track ? track.localPath : undefined;
202
- const blob = 'blobId' in track ? track : undefined;
203
- const fileHandle = 'handleId' in track ? track : undefined;
204
- if (blob?.name) {
205
- return blob.name;
206
- }
207
- if (fileHandle?.name) {
208
- return fileHandle.name;
209
- }
210
- if (uri) {
211
- const normalized = uri.replace(/\\/g, '/');
212
- return normalized.slice(normalized.lastIndexOf('/') + 1);
213
- }
214
- if (localPath) {
215
- const normalized = localPath.replace(/\\/g, '/');
216
- return normalized.slice(normalized.lastIndexOf('/') + 1);
217
- }
218
- return '';
299
+ /**
300
+ * The `index` block a tabix-indexed adapter's guess writes: where the index is,
301
+ * and which of the two kinds it is.
302
+ *
303
+ * Eight guessers spelled this pair out by hand, which is the crossed-pair hazard
304
+ * `tabixIndexSnapshot` was extracted for on the config side: a `.csi` location
305
+ * filed under `indexType: 'TBI'` is a valid-looking config that opens no index
306
+ * at all, and nothing downstream can tell it from a correct one.
307
+ *
308
+ * BAM is deliberately not here, for the reason `tabixIndexFields` gives: BAI/CSI
309
+ * is a different enumeration over a different default, and folding the two would
310
+ * mean a slot whose vocabulary depends on its adapter.
311
+ */
312
+ export function guessTabixIndex(file, index) {
313
+ return {
314
+ location: index ?? makeIndex(file, '.tbi'),
315
+ indexType: makeIndexType(index && getFileName(index), 'CSI', 'TBI'),
316
+ };
317
+ }
318
+ /**
319
+ * Register a guess on `Core-guessAdapterForLocation`. Return an adapter config
320
+ * to claim the file, or `undefined` to defer to the plugins registered before
321
+ * this one.
322
+ *
323
+ * Prefer this over calling `addToExtensionPoint` directly: the chaining is done
324
+ * once here, so a plugin cannot break the chain by forgetting to delegate, nor
325
+ * drop an argument on the way through.
326
+ */
327
+ export function addAdapterGuesser(pluginManager, guess) {
328
+ pluginManager.addToExtensionPoint('Core-guessAdapterForLocation', next => (file, index, adapterHint) => guess(file, index, adapterHint) ?? next(file, index, adapterHint));
329
+ }
330
+ /**
331
+ * Register a guess on `Core-guessTrackTypeForLocation`. Return a track type
332
+ * name to claim the adapter, or `undefined` to defer. See `addAdapterGuesser`
333
+ * for why this wrapper exists — hand-written delegates here used to drop the
334
+ * optional `file`, which hid it from every guesser registered earlier in the
335
+ * chain.
336
+ */
337
+ export function addTrackTypeGuesser(pluginManager, guess) {
338
+ pluginManager.addToExtensionPoint('Core-guessTrackTypeForLocation', next => (adapterName, file) => guess(adapterName, file) ?? next(adapterName, file));
339
+ }
340
+ const COMPRESSION_SUFFIXES = ['.gz', '.bgz', '.bz2', '.zst'];
341
+ /**
342
+ * Drop the format extension from a filename, plus any compression suffix, so
343
+ * `volvox.vcf.gz` becomes `volvox` rather than `volvox.vcf`. Names with no
344
+ * extension, and dotfiles, are returned unchanged.
345
+ */
346
+ export function stripFileExtension(name) {
347
+ const lower = name.toLowerCase();
348
+ const base = COMPRESSION_SUFFIXES.some(suffix => lower.endsWith(suffix))
349
+ ? name.slice(0, name.lastIndexOf('.'))
350
+ : name;
351
+ const dot = base.lastIndexOf('.');
352
+ return dot > 0 ? base.slice(0, dot) : base;
219
353
  }
220
354
  export function guessAdapter(file, index, adapterHint, model) {
221
355
  if (model) {
222
356
  const { pluginManager } = getEnv(model);
223
- const adapterGuesser = pluginManager.evaluateExtensionPoint('Core-guessAdapterForLocation', (_file, _index, _adapterHint) => {
224
- return undefined;
225
- });
357
+ const adapterGuesser = pluginManager.evaluateExtensionPoint(
358
+ /** #extensionPoint Core-guessAdapterForLocation | sync | Guess an adapter config from a file location */
359
+ 'Core-guessAdapterForLocation', () => undefined);
226
360
  const adapter = adapterGuesser(file, index, adapterHint);
227
361
  if (adapter) {
228
362
  return adapter;
@@ -232,115 +366,363 @@ export function guessAdapter(file, index, adapterHint, model) {
232
366
  type: UNKNOWN,
233
367
  };
234
368
  }
235
- export function guessTrackType(adapterType, model) {
369
+ export function guessTrackType(adapterType, model, file) {
236
370
  if (model) {
237
371
  const session = getSession(model);
238
- const trackTypeGuesser = getEnv(session).pluginManager.evaluateExtensionPoint('Core-guessTrackTypeForLocation', (_adapterName) => {
239
- return undefined;
240
- });
241
- const trackType = trackTypeGuesser(adapterType);
372
+ const trackTypeGuesser = getEnv(session).pluginManager.evaluateExtensionPoint(
373
+ /** #extensionPoint Core-guessTrackTypeForLocation | sync | Guess a track type from a file location */
374
+ 'Core-guessTrackTypeForLocation', () => undefined);
375
+ const trackType = trackTypeGuesser(adapterType, file);
242
376
  if (trackType) {
243
377
  return trackType;
244
378
  }
245
379
  }
246
380
  return 'FeatureTrack';
247
381
  }
248
- export function generateUnsupportedTrackConf(trackName, trackUrl, categories) {
249
- const conf = {
250
- type: 'FeatureTrack',
251
- name: `${trackName} (Unsupported)`,
252
- description: `Support not yet implemented for "${trackUrl}"`,
253
- category: categories,
254
- trackId: '',
382
+ /**
383
+ * Expand a loose track description — a bare data-file URI, or an object with
384
+ * `uri` (and optional `index`) plus any extra config keys — into a full track
385
+ * config, the same inference the "Add track" flow does: the adapter and track
386
+ * type are guessed from the file via the format plugins, a stable `trackId` and
387
+ * a `name` are derived from the filename, and the assembly is stamped on. Extra
388
+ * keys on the input (`name`, `category`, `displays`, ...) override the inferred
389
+ * defaults. Takes a `pluginManager` (not a model) so it runs headlessly — in a
390
+ * worker/Node export as well as the browser. Throws when no format matches, so
391
+ * the caller can ask for a full config instead.
392
+ */
393
+ export function guessTrackConf(input, pluginManager, assemblyName) {
394
+ const { uri, index, ...extra } = typeof input === 'string' ? { uri: input } : input;
395
+ const file = { uri, locationType: 'UriLocation' };
396
+ const indexLocation = index
397
+ ? { uri: index, locationType: 'UriLocation' }
398
+ : undefined;
399
+ const adapterGuesser = pluginManager.evaluateExtensionPoint('Core-guessAdapterForLocation', () => undefined);
400
+ const adapter = adapterGuesser(file, indexLocation, undefined);
401
+ if (!adapter || adapter.type === UNKNOWN) {
402
+ throw new Error(`could not infer a track type from "${uri}"; pass a full track config instead`);
403
+ }
404
+ const trackTypeGuesser = pluginManager.evaluateExtensionPoint('Core-guessTrackTypeForLocation', () => undefined);
405
+ const name = getFileName(file);
406
+ return {
407
+ trackId: `${name}-${objectHash(adapter).slice(0, 8)}`,
408
+ type: trackTypeGuesser(adapter.type, file) ?? 'FeatureTrack',
409
+ name,
410
+ assemblyNames: assemblyName ? [assemblyName] : [],
411
+ adapter,
412
+ ...extra,
255
413
  };
256
- conf.trackId = objectHash(conf);
257
- return conf;
258
414
  }
259
- export function generateUnknownTrackConf(trackName, trackUrl, categories) {
415
+ /**
416
+ * Whether a track snapshot is the loose `{ uri, ... }` form — a data file with
417
+ * no `adapter` — that {@link expandLooseTrackConfig} expands.
418
+ */
419
+ export function isLooseTrackConfig(snap) {
420
+ return (typeof snap === 'object' &&
421
+ snap !== null &&
422
+ !Array.isArray(snap) &&
423
+ typeof snap.uri === 'string' &&
424
+ !('adapter' in snap));
425
+ }
426
+ /**
427
+ * Expand a loose track config into a full one and leave any other snapshot
428
+ * untouched, so it can sit on every path a track snapshot enters the tree by:
429
+ * the track config union, the root config's frozen `tracks`, `addTrackConf`,
430
+ * and `showTrackGeneric`'s inline config.
431
+ *
432
+ * `{ "trackId": "reads", "uri": "reads.bam", "assemblyNames": ["hg38"] }` is a
433
+ * whole track: the adapter and track type come from the file's extension
434
+ * through the format plugins' guessers, the same inference the "Add track"
435
+ * flow runs, and `name` defaults to the file name. Any key written beside
436
+ * `uri` — `trackId`, `name`, `category`, `displayDefaults`, an explicit `type`
437
+ * — overrides what was inferred. `assemblyName` fills `assemblyNames` when the
438
+ * snapshot has none, for a config or embed that has exactly one assembly.
439
+ */
440
+ export function expandLooseTrackConfig(snap, pluginManager, assemblyName) {
441
+ return isLooseTrackConfig(snap)
442
+ ? guessTrackConf(snap, pluginManager, assemblyName)
443
+ : snap;
444
+ }
445
+ function generateProblemTrackConf(trackName, categories, label, description) {
260
446
  const conf = {
261
447
  type: 'FeatureTrack',
262
- name: `${trackName} (Unknown)`,
263
- description: `Could not determine track type for "${trackUrl}"`,
448
+ name: `${trackName} (${label})`,
449
+ description,
264
450
  category: categories,
265
451
  trackId: '',
266
452
  };
267
453
  conf.trackId = objectHash(conf);
268
454
  return conf;
269
455
  }
456
+ export function generateUnsupportedTrackConf(trackName, trackUrl, categories) {
457
+ return generateProblemTrackConf(trackName, categories, 'Unsupported', `Support not yet implemented for "${trackUrl}"`);
458
+ }
459
+ export function generateUnknownTrackConf(trackName, trackUrl, categories) {
460
+ return generateProblemTrackConf(trackName, categories, 'Unknown', `Could not determine track type for "${trackUrl}"`);
461
+ }
270
462
  export function getTrackName(conf, session) {
271
- const trackName = isStateTreeNode(conf)
463
+ const isMst = isStateTreeNode(conf);
464
+ const trackName = isMst
272
465
  ? readConfObject(conf, 'name')
273
466
  : (conf.name ?? '');
274
- const trackType = isStateTreeNode(conf)
275
- ? readConfObject(conf, 'type')
276
- : conf.type;
467
+ const trackType = isMst ? readConfObject(conf, 'type') : conf.type;
277
468
  if (!trackName && trackType === 'ReferenceSequenceTrack') {
278
469
  const asm = session.assemblies.find(a => a.sequence === conf);
279
470
  return asm
280
471
  ? `Reference sequence (${readConfObject(asm, 'displayName') || readConfObject(asm, 'name')})`
281
472
  : 'Reference sequence';
282
473
  }
283
- return trackName;
474
+ const trackId = isMst
475
+ ? readConfObject(conf, 'trackId')
476
+ : (conf.trackId ?? '');
477
+ return trackName || trackId;
478
+ }
479
+ /**
480
+ * Which display a track opens with in a given view, and the display config that
481
+ * display must use: `{ type, conf }`, or undefined when the view supports none
482
+ * of the track's displays.
483
+ *
484
+ * Two decisions, in this order, and the order is the point. The **type** is what
485
+ * the caller asked for, else the track's first declared display the view
486
+ * supports, else the track type's first supported display. The **config** is
487
+ * then whichever declared entry has that type — never "the first supported one",
488
+ * which is what let a display be created wearing another display's config node
489
+ * (a multi-sample VCF declares both the matrix and the regular display, so the
490
+ * regular one inherited the matrix's 20px connector-line zone and drew its
491
+ * clustering tree offset from the rows it labels). `display.type ===
492
+ * display.configuration.type` is the invariant `DisplayConfigurationReference`
493
+ * already assumes when it falls back to resolving a display config by type; this
494
+ * is where it has to hold.
495
+ *
496
+ * `conf` is undefined when the track config declares no entry of that type;
497
+ * `baseTrackConfig.preProcessSnapshot` injects one for every registered display
498
+ * type, so the caller's `${trackId}-${type}` id resolves to it.
499
+ */
500
+ /**
501
+ * The display type names a view can render, as a lookup set. Built once per
502
+ * view and handed to {@link viewCanDisplayTrack} for every track, rather than
503
+ * rebuilt per track.
504
+ */
505
+ export function viewDisplayNames(pluginManager, viewType) {
506
+ return new Set(pluginManager.getViewType(viewType).displayTypes.map(d => d.name));
507
+ }
508
+ /**
509
+ * Whether a view rendering `viewDisplays` can open a track of this type at all
510
+ * — does the track type declare a display the view draws. The coarse half of
511
+ * the question {@link pickDisplayForView} answers precisely: a picker that
512
+ * offers a track this says no to is offering one `showTrackGeneric` will
513
+ * refuse.
514
+ *
515
+ * Reads the *track type's* registered displays rather than a config's own
516
+ * `displays` array, which is both cheaper and the only form available on an
517
+ * un-hydrated frozen track config (ADR-032). The two agree, since
518
+ * `preprocessTrackConfigSnapshot` injects a stub display for every display the
519
+ * track type registers.
520
+ *
521
+ * Two answers that are easy to get wrong, and both have been:
522
+ *
523
+ * - A type **no plugin registered** answers false rather than throwing.
524
+ * `getTrackType` throws on an unknown name, and a frozen track config never
525
+ * passes the schema that would have rejected it at load — so a config naming
526
+ * a plugin that failed to load put that throw inside whatever loop was
527
+ * filtering tracks, and one unopenable track took out the entire list. The
528
+ * track selector and jb2export's circular-view filter met this separately.
529
+ * - A view type registering **no displays at all** constrains nothing, so
530
+ * every track passes. That is a policy rather than a fact, and it lives here
531
+ * so the pickers agree on it.
532
+ */
533
+ export function viewCanDisplayTrack(pluginManager, viewDisplays, trackType) {
534
+ if (!pluginManager.trackTypes.has(trackType)) {
535
+ return false;
536
+ }
537
+ return (viewDisplays.size === 0 ||
538
+ pluginManager
539
+ .getTrackType(trackType)
540
+ .displayTypes.some(d => viewDisplays.has(d.name)));
541
+ }
542
+ export function pickDisplayForView({ declaredDisplays, requestedType, trackDisplayTypes, viewDisplayTypes, }) {
543
+ const supported = new Set(viewDisplayTypes);
544
+ const type = requestedType ??
545
+ declaredDisplays.find(d => supported.has(d.type))?.type ??
546
+ trackDisplayTypes.find(name => supported.has(name));
547
+ return type === undefined
548
+ ? undefined
549
+ : { type, conf: declaredDisplays.find(d => d.type === type) };
550
+ }
551
+ // #endregion
552
+ // Resolve a session-spec `TrackInit` into the (trackId, trackSnapshot,
553
+ // displaySnapshot) triple that `showTrackGeneric` expects. Display props written
554
+ // inline on the track object (everything except trackId/trackSnapshot/
555
+ // displaySnapshot) fold into the display snapshot, so a spec can write
556
+ // `{ trackId, showDescriptions: false }` instead of nesting under
557
+ // `displaySnapshot`. An explicit `displaySnapshot` still wins over an inline
558
+ // key of the same name, and the older nested form keeps working unchanged.
559
+ // `showTrackGeneric` then routes any inline key that is a real config slot (e.g.
560
+ // `forceLoad`) onto the display config, so a session spec can declaratively
561
+ // force-load a track with `{ trackId, forceLoad: true }`.
562
+ export function normalizeTrackInit(t) {
563
+ if (typeof t === 'string') {
564
+ return { trackId: t, trackSnapshot: {}, displaySnapshot: {} };
565
+ }
566
+ else {
567
+ const { trackId, trackSnapshot, displaySnapshot, ...rest } = t;
568
+ return {
569
+ trackId,
570
+ trackSnapshot: trackSnapshot ?? {},
571
+ displaySnapshot: { ...rest, ...displaySnapshot },
572
+ };
573
+ }
284
574
  }
285
- export function showTrackGeneric(self, trackId, initialSnapshot = {}, displayInitialSnapshot = {}) {
575
+ export function showTrackGeneric(self, trackId,
576
+ // `object`, annotated, rather than inferred from the default. A bare `{}`
577
+ // accepts every non-nullish value, numbers included, which is how a synteny
578
+ // level index typechecked its way into a track snapshot — see the dotplot and
579
+ // comparative views' own `showTrack`, whose second parameter is this one.
580
+ //
581
+ // `object` and not `Record<string, unknown>`: the hazard is a primitive, and
582
+ // an index signature additionally rejects the precise snapshot interfaces
583
+ // callers legitimately pass (jbrowse-img's `DisplaySnapshot` is one).
584
+ initialSnapshot = {}, displayInitialSnapshot = {},
585
+ // The config itself, for a track no session list holds: a view that
586
+ // synthesizes a track only it can draw passes the config here and it lives on
587
+ // the track node, so closing the track takes the config with it. Without it
588
+ // such a config has to be parked in a session list that outlives the view.
589
+ inlineConf) {
286
590
  const { pluginManager } = getEnv(self);
287
591
  const session = getSession(self);
288
592
  const found = self.tracks.find(t => t.configuration.trackId === trackId);
289
593
  if (found) {
290
594
  return found;
291
595
  }
292
- const rawConf = session.getTracksById()[trackId];
293
- if (!rawConf) {
294
- throw new Error(`Could not resolve identifier "${trackId}"`);
295
- }
296
- const confSnapshot = isStateTreeNode(rawConf)
297
- ? getSnapshot(rawConf)
298
- : structuredClone(rawConf);
299
- const conf = pluginManager.evaluateExtensionPoint('Core-preProcessTrackConfig', confSnapshot);
300
- const trackType = pluginManager.getTrackType(conf.type);
301
- if (!trackType) {
302
- throw new Error(`Unknown track type ${conf.type}`);
596
+ // Single choke point for all "open a track" paths — errors surface as
597
+ // snackbars. Config is validated before the push so the open set never holds
598
+ // a broken track.
599
+ try {
600
+ const rawConf = (inlineConf && expandLooseTrackConfig(inlineConf, pluginManager)) ??
601
+ session.getTrackById(trackId);
602
+ if (!rawConf) {
603
+ throw new Error(`Could not resolve identifier "${trackId}"`);
604
+ }
605
+ const confSnapshot = structuredClone(isStateTreeNode(rawConf) ? getSnapshot(rawConf) : rawConf);
606
+ const conf = pluginManager.evaluateExtensionPoint('Core-preProcessTrackConfig', confSnapshot);
607
+ const trackType = pluginManager.getTrackType(conf.type);
608
+ // Validate only a conf that is not already in the tree. `configSchema.create`
609
+ // here builds an entire config node and throws it away purely to surface a
610
+ // nice error; its preProcessSnapshot also re-runs Core-preProcessTrackConfig
611
+ // on a snapshot this function just preprocessed. A conf that is a state tree
612
+ // node was validated when MST created it, so all of that is pure waste on
613
+ // the common showTrack path.
614
+ if (!isStateTreeNode(rawConf)) {
615
+ try {
616
+ trackType.configSchema.create(conf, getEnv(self));
617
+ }
618
+ catch (e) {
619
+ throw new Error(`Track "${trackId}" has an invalid configuration: ${e}`, { cause: e });
620
+ }
621
+ }
622
+ // A track container that isn't itself a view — a synteny level, which owns
623
+ // a track list but has no width and no registered view type — takes the
624
+ // display choice from the view it sits in, which is the same node
625
+ // getContainingView already resolves to for everything else beneath it.
626
+ const view = isViewModel(self) ? self : getContainingView(self);
627
+ const viewType = pluginManager.getViewType(view.type);
628
+ const picked = pickDisplayForView({
629
+ declaredDisplays: conf.displays ?? [],
630
+ requestedType: displayInitialSnapshot.type,
631
+ trackDisplayTypes: trackType.displayTypes.map(d => d.name),
632
+ viewDisplayTypes: viewType.displayTypes.map(d => d.name),
633
+ });
634
+ if (!picked) {
635
+ throw new Error(`Could not find a compatible display for view type ${view.type}`);
636
+ }
637
+ const { type: displayType, conf: displayConf } = picked;
638
+ const displayId = displayConf?.displayId ?? `${trackId}-${displayType}`;
639
+ const track = trackType.stateModel.create({
640
+ ...initialSnapshot,
641
+ type: conf.type,
642
+ configuration: inlineConf ?? trackId,
643
+ displays: [
644
+ {
645
+ ...displayConf,
646
+ type: displayType,
647
+ configuration: displayId,
648
+ ...displayInitialSnapshot,
649
+ },
650
+ ],
651
+ });
652
+ self.tracks.push(track);
653
+ // Display settings (height, color, …) are config slots now, not display
654
+ // instance props — passed in the display snapshot they'd be dropped as
655
+ // unknown MST keys. Route the ones that are real slots onto the persistent
656
+ // display config so they take effect and survive hide/retick (#5591). Runs
657
+ // after the push so the display's config reference can resolve.
658
+ //
659
+ // preProcessSlotValues first, so a display schema's shorthand expansions
660
+ // and legacy-key migrations reach this path too: a session spec, share
661
+ // link, or embed writes slots here rather than creating a config from a
662
+ // snapshot, and those two surfaces are meant to speak the same vocabulary.
663
+ const display = track.displays[0];
664
+ const displaySlots = preProcessSlotValues(display.configuration, displayInitialSnapshot);
665
+ for (const [key, value] of Object.entries(displaySlots)) {
666
+ if (key !== 'type' && isConfigurationSlot(display.configuration, key)) {
667
+ // the key comes from a snapshot at runtime, and setConf's slot name is
668
+ // a compile-time type
669
+ // eslint-disable-next-line no-restricted-syntax
670
+ display.configuration.setSlot(key, value);
671
+ }
672
+ }
673
+ // if this track came from a connection, persist its config so it survives
674
+ // reload without re-establishing the connection (no-op otherwise)
675
+ session.captureConnectionTrack?.(trackId);
676
+ return track;
303
677
  }
304
- const viewType = pluginManager.getViewType(self.type);
305
- const supportedDisplays = new Set(viewType.displayTypes.map(d => d.name));
306
- const displays = conf.displays ?? [];
307
- const displayConf = displays.find((d) => supportedDisplays.has(d.type));
308
- const snapshotType = displayInitialSnapshot.type;
309
- const defaultDisplayType = displayConf?.type ??
310
- trackType.displayTypes.find(d => supportedDisplays.has(d.name))?.name;
311
- const displayType = snapshotType ?? defaultDisplayType;
312
- if (!displayType) {
313
- throw new Error(`Could not find a compatible display for view type ${self.type}`);
678
+ catch (e) {
679
+ session.notifyError(`${e}`, e);
680
+ return undefined;
314
681
  }
315
- const displayId = displayConf?.displayId ?? `${trackId}-${displayType}`;
316
- const { type: _type, displayId: _displayId, ...displayConfState } = displayConf ?? {};
317
- const track = trackType.stateModel.create({
318
- ...initialSnapshot,
319
- type: conf.type,
320
- configuration: trackId,
321
- displays: [
322
- {
323
- type: displayType,
324
- configuration: displayId,
325
- ...displayConfState,
326
- ...displayInitialSnapshot,
327
- },
328
- ],
329
- });
330
- self.tracks.push(track);
331
- return track;
682
+ }
683
+ // Strip a track's identifier and its nested display identifiers (both are
684
+ // types.identifier) so a duplicated/copied snapshot doesn't collide with the
685
+ // source's ids when added back into the same session tree.
686
+ export function stripTrackIds(tracks) {
687
+ return tracks.map(({ id, displays, ...rest }) => ({
688
+ ...rest,
689
+ displays: displays.map(({ id, ...d }) => d),
690
+ }));
332
691
  }
333
692
  export function hideTrackGeneric(self, trackId) {
334
693
  const t = self.tracks.find(t => t.configuration.trackId === trackId);
335
694
  if (t) {
336
695
  self.tracks.remove(t);
337
- return 1;
696
+ // drop the persisted connection-track config if no other view holds it
697
+ // (persisted → guards saved-session size; the volatile working-copy cache
698
+ // in SessionTracks is deliberately not pruned, see editableTrackConfigs)
699
+ getSession(self).pruneConnectionTrackConfig?.(trackId);
700
+ return true;
338
701
  }
339
- return 0;
702
+ return false;
340
703
  }
704
+ // Returns true if the track is now shown, false if it was hidden or failed to
705
+ // open (callers use this to e.g. record only newly-opened tracks as recent).
341
706
  export function toggleTrackGeneric(self, trackId) {
342
- const hiddenCount = hideTrackGeneric(self, trackId);
343
- if (!hiddenCount) {
344
- showTrackGeneric(self, trackId);
345
- }
707
+ return hideTrackGeneric(self, trackId)
708
+ ? false
709
+ : !!showTrackGeneric(self, trackId);
710
+ }
711
+ /**
712
+ * Every track config the session can show, connection-supplied ones included.
713
+ *
714
+ * `session.tracks` is only sessionTracks plus the admin config (see
715
+ * product-core's SessionTracks), so a track that arrived from a hub or registry
716
+ * connection is absent from it while still being toggleable from the track
717
+ * selector, which unions the same two sources. Anything answering "what tracks
718
+ * exist for X" wants this, or a feature silently can't see connection tracks.
719
+ *
720
+ * Note `session.tracks` already contains `sessionTracks` — unioning those two
721
+ * yields every session track twice.
722
+ */
723
+ export function allSessionTracks(session) {
724
+ const connectionTracks = (session.connectionInstances ?? []).flatMap(conn => conn.tracks);
725
+ return connectionTracks.length
726
+ ? [...session.tracks, ...connectionTracks]
727
+ : session.tracks;
346
728
  }