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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. package/README.md +1709 -390
  2. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +3 -2
  3. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +5 -5
  4. package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +3 -5
  5. package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +34 -29
  6. package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCard.js +1 -4
  7. package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.d.ts +11 -0
  8. package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.js +37 -14
  9. package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.d.ts +1 -1
  10. package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.js +15 -31
  11. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.d.ts +4 -3
  12. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.js +12 -25
  13. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.d.ts +11 -0
  14. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.js +11 -0
  15. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.d.ts +8 -0
  16. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.js +24 -0
  17. package/esm/BaseFeatureWidget/BaseFeatureDetail/Formatter.js +6 -4
  18. package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.d.ts +4 -0
  19. package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.js +17 -0
  20. package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.d.ts +3 -2
  21. package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +5 -3
  22. package/esm/BaseFeatureWidget/BaseFeatureDetail/index.d.ts +6 -2
  23. package/esm/BaseFeatureWidget/BaseFeatureDetail/index.js +7 -18
  24. package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.d.ts +16 -0
  25. package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.js +49 -0
  26. package/esm/BaseFeatureWidget/BaseFeatureDetail/util.d.ts +0 -8
  27. package/esm/BaseFeatureWidget/BaseFeatureDetail/util.js +6 -29
  28. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceContents.js +7 -34
  29. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeaturePanel.d.ts +2 -2
  30. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceName.js +2 -2
  31. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.js +3 -1
  32. package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.d.ts +12 -0
  33. package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.js +12 -5
  34. package/esm/BaseFeatureWidget/SequenceFeatureDetails/useSequenceData.js +8 -5
  35. package/esm/BaseFeatureWidget/configSchema.d.ts +1 -1
  36. package/esm/BaseFeatureWidget/formatDetails.d.ts +13 -29
  37. package/esm/BaseFeatureWidget/formatDetails.js +62 -83
  38. package/esm/BaseFeatureWidget/index.d.ts +2 -1
  39. package/esm/BaseFeatureWidget/stateModelFactory.d.ts +42 -29
  40. package/esm/BaseFeatureWidget/stateModelFactory.js +98 -98
  41. package/esm/BaseFeatureWidget/types.d.ts +12 -6
  42. package/esm/BaseFeatureWidget/util.d.ts +0 -10
  43. package/esm/BaseFeatureWidget/util.js +0 -17
  44. package/esm/CorePlugin.js +34 -3
  45. package/esm/PluginLoader.d.ts +24 -13
  46. package/esm/PluginLoader.js +167 -51
  47. package/esm/PluginManager.d.ts +130 -24
  48. package/esm/PluginManager.js +180 -32
  49. package/esm/ReExports/MuiDataGridReExports.d.ts +1 -0
  50. package/esm/ReExports/MuiDataGridReExports.js +2 -2
  51. package/esm/ReExports/coreModules.generated.d.ts +2 -0
  52. package/esm/ReExports/coreModules.generated.js +530 -0
  53. package/esm/ReExports/coreWorkerModules.generated.d.ts +2 -0
  54. package/esm/ReExports/coreWorkerModules.generated.js +490 -0
  55. package/esm/ReExports/frameworkModules.d.ts +2 -0
  56. package/esm/ReExports/frameworkModules.js +68 -0
  57. package/esm/ReExports/frameworkShared.d.ts +12 -0
  58. package/esm/ReExports/frameworkShared.js +16 -0
  59. package/esm/ReExports/frameworkWorkerModules.generated.d.ts +2 -0
  60. package/esm/ReExports/frameworkWorkerModules.generated.js +130 -0
  61. package/esm/ReExports/list.js +528 -79
  62. package/esm/ReExports/modules.d.ts +1 -1
  63. package/esm/ReExports/modules.js +10 -165
  64. package/esm/ReExports/registry.d.ts +1 -0
  65. package/esm/ReExports/registry.js +23 -5
  66. package/esm/ReExports/uiStub.d.ts +3 -0
  67. package/esm/ReExports/uiStub.js +33 -0
  68. package/esm/ReExports/workerModules.d.ts +2 -0
  69. package/esm/ReExports/workerModules.js +11 -0
  70. package/esm/TextSearch/TextSearchManager.d.ts +27 -13
  71. package/esm/TextSearch/TextSearchManager.js +77 -36
  72. package/esm/TextSearch/places.d.ts +12 -0
  73. package/esm/TextSearch/places.js +94 -0
  74. package/esm/assemblyManager/assembly.d.ts +21 -19
  75. package/esm/assemblyManager/assembly.js +28 -26
  76. package/esm/assemblyManager/assemblyAdapters.d.ts +1 -1
  77. package/esm/assemblyManager/assemblyAdapters.js +8 -2
  78. package/esm/assemblyManager/assemblyConfigSchema.d.ts +31 -90
  79. package/esm/assemblyManager/assemblyConfigSchema.js +35 -47
  80. package/esm/assemblyManager/assemblyManager.d.ts +35 -180
  81. package/esm/assemblyManager/assemblyManager.js +47 -51
  82. package/esm/assemblyManager/expandAssemblyConfigShorthand.d.ts +25 -18
  83. package/esm/assemblyManager/expandAssemblyConfigShorthand.js +78 -49
  84. package/esm/assemblyManager/geneticCodes.js +2 -5
  85. package/esm/assemblyManager/getSequenceAdapterConfig.d.ts +10 -0
  86. package/esm/assemblyManager/getSequenceAdapterConfig.js +10 -0
  87. package/esm/assemblyManager/indexAssemblyNames.d.ts +9 -0
  88. package/esm/assemblyManager/indexAssemblyNames.js +22 -0
  89. package/esm/assemblyManager/loadRefNameMap.d.ts +1 -1
  90. package/esm/assemblyManager/loadRefNameMap.js +4 -9
  91. package/esm/assemblyManager/refNameMapKey.d.ts +7 -0
  92. package/esm/assemblyManager/refNameMapKey.js +12 -0
  93. package/esm/checkPlugins.d.ts +2 -0
  94. package/esm/checkPlugins.js +38 -17
  95. package/esm/configuration/bamIndexFields.d.ts +49 -0
  96. package/esm/configuration/bamIndexFields.js +41 -0
  97. package/esm/configuration/configurationSchema.d.ts +101 -71
  98. package/esm/configuration/configurationSchema.js +207 -134
  99. package/esm/configuration/configurationSchemaUnion.d.ts +39 -0
  100. package/esm/configuration/configurationSchemaUnion.js +56 -0
  101. package/esm/configuration/configurationSlot.d.ts +150 -60
  102. package/esm/configuration/configurationSlot.js +103 -75
  103. package/esm/configuration/fillLocations.d.ts +14 -0
  104. package/esm/configuration/fillLocations.js +14 -0
  105. package/esm/configuration/formatAboutConfigSchema.d.ts +7 -21
  106. package/esm/configuration/formatDetailsConfigSchema.d.ts +11 -37
  107. package/esm/configuration/formatDetailsConfigSchema.js +10 -13
  108. package/esm/configuration/fullConfSnapshot.d.ts +4 -19
  109. package/esm/configuration/fullConfSnapshot.js +30 -52
  110. package/esm/configuration/getConf.d.ts +45 -41
  111. package/esm/configuration/getConf.js +111 -44
  112. package/esm/configuration/index.d.ts +26 -11
  113. package/esm/configuration/index.js +16 -7
  114. package/esm/configuration/indexType.d.ts +26 -0
  115. package/esm/configuration/indexType.js +38 -0
  116. package/esm/configuration/mergeFormatCallbacks.d.ts +6 -7
  117. package/esm/configuration/mergeFormatCallbacks.js +13 -10
  118. package/esm/configuration/plot.d.ts +61 -0
  119. package/esm/configuration/plot.js +142 -0
  120. package/esm/configuration/readConfObject.d.ts +2 -24
  121. package/esm/configuration/readConfObject.js +20 -63
  122. package/esm/configuration/requirements.d.ts +37 -0
  123. package/esm/configuration/requirements.js +88 -0
  124. package/esm/configuration/schemaRegistry.d.ts +32 -15
  125. package/esm/configuration/schemaRegistry.js +33 -35
  126. package/esm/configuration/schemaTypes.d.ts +21 -5
  127. package/esm/configuration/schemaTypes.js +66 -55
  128. package/esm/configuration/slotFacade.d.ts +12 -29
  129. package/esm/configuration/slotFacade.js +44 -23
  130. package/esm/configuration/snapshotPreprocess.d.ts +43 -0
  131. package/esm/configuration/snapshotPreprocess.js +161 -0
  132. package/esm/configuration/tabixIndexFields.d.ts +30 -4
  133. package/esm/configuration/tabixIndexFields.js +21 -4
  134. package/esm/configuration/tabixShorthand.d.ts +34 -17
  135. package/esm/configuration/tabixShorthand.js +49 -22
  136. package/esm/configuration/types.d.ts +182 -43
  137. package/esm/configuration/uriShorthand.d.ts +9 -0
  138. package/esm/configuration/uriShorthand.js +16 -0
  139. package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +13 -19
  140. package/esm/data_adapters/BaseAdapter/BaseAdapter.js +12 -19
  141. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +40 -2
  142. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +68 -5
  143. package/esm/data_adapters/BaseAdapter/featureDensity.d.ts +40 -0
  144. package/esm/data_adapters/BaseAdapter/featureDensity.js +31 -0
  145. package/esm/data_adapters/BaseAdapter/index.d.ts +23 -3
  146. package/esm/data_adapters/BaseAdapter/index.js +1 -0
  147. package/esm/data_adapters/BaseAdapter/rowSources.d.ts +37 -0
  148. package/esm/data_adapters/BaseAdapter/rowSources.js +7 -0
  149. package/esm/data_adapters/BaseAdapter/stats.d.ts +33 -1
  150. package/esm/data_adapters/BaseAdapter/stats.js +52 -13
  151. package/esm/data_adapters/BaseAdapter/types.d.ts +8 -12
  152. package/esm/data_adapters/BaseAdapter/zoomRange.d.ts +10 -0
  153. package/esm/data_adapters/CytobandAdapter/CytobandAdapter.js +1 -1
  154. package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +7 -11
  155. package/esm/data_adapters/CytobandAdapter/configSchema.js +3 -17
  156. package/esm/data_adapters/dataAdapterCache.d.ts +19 -2
  157. package/esm/data_adapters/dataAdapterCache.js +44 -10
  158. package/esm/data_adapters/getFeatureAdapter.d.ts +6 -4
  159. package/esm/data_adapters/getFeatureAdapter.js +8 -8
  160. package/esm/data_adapters/getSequenceSubAdapter.d.ts +7 -9
  161. package/esm/data_adapters/getSequenceSubAdapter.js +8 -10
  162. package/esm/pluggableElementTypes/AdapterType.d.ts +8 -8
  163. package/esm/pluggableElementTypes/AdapterType.js +1 -1
  164. package/esm/pluggableElementTypes/DisplayType.d.ts +53 -16
  165. package/esm/pluggableElementTypes/DisplayType.js +28 -12
  166. package/esm/pluggableElementTypes/LazyStateModelElement.d.ts +32 -0
  167. package/esm/pluggableElementTypes/LazyStateModelElement.js +77 -0
  168. package/esm/pluggableElementTypes/PluggableElementBase.d.ts +3 -5
  169. package/esm/pluggableElementTypes/PluggableElementBase.js +3 -5
  170. package/esm/pluggableElementTypes/RpcMethodType.d.ts +11 -1
  171. package/esm/pluggableElementTypes/RpcMethodType.js +25 -9
  172. package/esm/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.d.ts +1 -2
  173. package/esm/pluggableElementTypes/TextSearchAdapterType.d.ts +7 -7
  174. package/esm/pluggableElementTypes/ViewType.d.ts +20 -4
  175. package/esm/pluggableElementTypes/ViewType.js +32 -4
  176. package/esm/pluggableElementTypes/WidgetType.d.ts +6 -0
  177. package/esm/pluggableElementTypes/WidgetType.js +6 -0
  178. package/esm/pluggableElementTypes/addMenuItems.d.ts +3 -2
  179. package/esm/pluggableElementTypes/extendElementType.d.ts +1 -2
  180. package/esm/pluggableElementTypes/extendElementType.js +9 -5
  181. package/esm/pluggableElementTypes/index.d.ts +2 -1
  182. package/esm/pluggableElementTypes/index.js +2 -9
  183. package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +19 -9
  184. package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +122 -28
  185. package/esm/pluggableElementTypes/models/BaseDisplayModel.js +155 -11
  186. package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +65 -16
  187. package/esm/pluggableElementTypes/models/BaseTrackModel.js +179 -117
  188. package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +87 -18
  189. package/esm/pluggableElementTypes/models/BaseViewModel.js +54 -11
  190. package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +26 -16
  191. package/esm/pluggableElementTypes/models/assertDisplayContract.d.ts +15 -11
  192. package/esm/pluggableElementTypes/models/assertDisplayContract.js +25 -32
  193. package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +22 -18
  194. package/esm/pluggableElementTypes/models/baseConnectionConfig.js +5 -5
  195. package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +26 -31
  196. package/esm/pluggableElementTypes/models/baseTrackConfig.d.ts +108 -147
  197. package/esm/pluggableElementTypes/models/baseTrackConfig.js +96 -73
  198. package/esm/pluggableElementTypes/models/components/SaveTrackData.js +4 -6
  199. package/esm/pluggableElementTypes/models/components/fetchTrackData.d.ts +3 -4
  200. package/esm/pluggableElementTypes/models/components/fetchTrackData.js +3 -3
  201. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +23 -13
  202. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +80 -48
  203. package/esm/pluggableElementTypes/models/index.d.ts +2 -3
  204. package/esm/pluggableElementTypes/models/index.js +2 -3
  205. package/esm/pluggableElementTypes/models/migrateTrackConfig.d.ts +15 -1
  206. package/esm/pluggableElementTypes/models/migrateTrackConfig.js +85 -25
  207. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.d.ts +4 -3
  208. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.js +141 -19
  209. package/esm/pluggableElementTypes/models/saveTrackFileTypes/types.d.ts +3 -3
  210. package/esm/pluginDefinitions.d.ts +34 -7
  211. package/esm/pluginDefinitions.js +54 -20
  212. package/esm/rpc/BaseRpcDriver.d.ts +2 -2
  213. package/esm/rpc/BaseRpcDriver.js +25 -30
  214. package/esm/rpc/MainThreadRpcDriver.d.ts +2 -2
  215. package/esm/rpc/MainThreadRpcDriver.js +13 -8
  216. package/esm/rpc/RpcClient.d.ts +18 -6
  217. package/esm/rpc/RpcClient.js +51 -16
  218. package/esm/rpc/RpcManager.d.ts +14 -10
  219. package/esm/rpc/RpcManager.js +11 -1
  220. package/esm/rpc/RpcRegistry.d.ts +40 -7
  221. package/esm/rpc/RpcServer.d.ts +3 -1
  222. package/esm/rpc/RpcServer.js +19 -12
  223. package/esm/rpc/WebWorkerRpcDriver.d.ts +11 -4
  224. package/esm/rpc/WebWorkerRpcDriver.js +64 -68
  225. package/esm/rpc/byteBudget.d.ts +20 -5
  226. package/esm/rpc/byteBudget.js +16 -5
  227. package/esm/rpc/configSchema.d.ts +7 -21
  228. package/esm/rpc/coreRpcMethods.d.ts +4 -0
  229. package/esm/rpc/coreRpcMethods.js +4 -0
  230. package/esm/rpc/methods/CoreGetEncodedFeature.d.ts +13 -0
  231. package/esm/rpc/methods/CoreGetEncodedFeature.js +32 -0
  232. package/esm/rpc/methods/CoreGetEncodedLayers.d.ts +16 -0
  233. package/esm/rpc/methods/CoreGetEncodedLayers.js +59 -0
  234. package/esm/rpc/methods/CoreGetExportData.js +3 -4
  235. package/esm/rpc/methods/CoreGetFeatureDensity.d.ts +11 -0
  236. package/esm/rpc/methods/CoreGetFeatureDensity.js +22 -0
  237. package/esm/rpc/methods/CoreGetFeatures.js +3 -5
  238. package/esm/rpc/methods/CoreGetRefNames.js +2 -12
  239. package/esm/rpc/methods/CoreGetRegionByteEstimate.js +1 -1
  240. package/esm/rpc/methods/CoreGetSequence.js +2 -2
  241. package/esm/rpc/methods/CoreLoadAdapterCode.d.ts +13 -0
  242. package/esm/rpc/methods/CoreLoadAdapterCode.js +16 -0
  243. package/esm/rpc/methods/layerFeatures.d.ts +33 -0
  244. package/esm/rpc/methods/layerFeatures.js +29 -0
  245. package/esm/svg/SvgExport.js +6 -7
  246. package/esm/svg/SvgThemeProviders.d.ts +12 -0
  247. package/esm/svg/SvgThemeProviders.js +15 -0
  248. package/esm/svg/exportViewSvg.d.ts +28 -0
  249. package/esm/svg/exportViewSvg.js +13 -0
  250. package/esm/svg/normalizeSvgMarkup.d.ts +7 -0
  251. package/esm/svg/normalizeSvgMarkup.js +99 -0
  252. package/esm/svg/serializeSvg.d.ts +7 -0
  253. package/esm/svg/serializeSvg.js +11 -0
  254. package/esm/svg/svgId.d.ts +1 -1
  255. package/esm/svg/svgId.js +1 -1
  256. package/esm/svg/svgReady.d.ts +9 -7
  257. package/esm/svg/svgReady.js +8 -7
  258. package/esm/svg/trackNames.d.ts +7 -5
  259. package/esm/svg/trackNames.js +12 -9
  260. package/esm/svg/wrapSvgExport.js +6 -74
  261. package/esm/ui/AddCustomPluginDialog.js +3 -8
  262. package/esm/ui/AppReadyMarker.d.ts +45 -0
  263. package/esm/ui/AppReadyMarker.js +89 -0
  264. package/esm/ui/BaseExportSvgDialog.d.ts +1 -1
  265. package/esm/ui/CascadingMenu.js +181 -104
  266. package/esm/ui/DropDownMenu.js +2 -1
  267. package/esm/ui/ErrorBanner.js +1 -1
  268. package/esm/ui/ErrorBoundary.d.ts +2 -2
  269. package/esm/ui/ErrorMessageStackTraceContents.js +2 -1
  270. package/esm/ui/ErrorMessageStackTraceDialog.js +5 -11
  271. package/esm/ui/ExportSvgDialog.d.ts +1 -1
  272. package/esm/ui/FileDropZone.js +2 -1
  273. package/esm/ui/FileSelector/useInternetAccounts.d.ts +156 -96
  274. package/esm/ui/HoverMenu.d.ts +1 -2
  275. package/esm/ui/HoverMenu.js +6 -3
  276. package/esm/ui/JexlFilterDialog.d.ts +13 -10
  277. package/esm/ui/JexlFilterDialog.js +122 -50
  278. package/esm/ui/JexlFilterRowEditors.d.ts +15 -0
  279. package/esm/ui/JexlFilterRowEditors.js +90 -0
  280. package/esm/ui/LazyBaseTooltip.d.ts +4 -0
  281. package/esm/ui/LazyBaseTooltip.js +9 -0
  282. package/esm/ui/LegendSwatchGlyph.js +26 -21
  283. package/esm/ui/LoadingOverlay.d.ts +14 -0
  284. package/esm/ui/LoadingOverlay.js +4 -2
  285. package/esm/ui/MenuTypes.d.ts +23 -53
  286. package/esm/ui/MenuTypes.js +3 -0
  287. package/esm/ui/MonospaceTextField.d.ts +2 -1
  288. package/esm/ui/MonospaceTextField.js +23 -20
  289. package/esm/ui/PaletteContext.d.ts +10 -5
  290. package/esm/ui/PaletteContext.js +44 -6
  291. package/esm/ui/RefNameAutocomplete/SearchOption.d.ts +13 -0
  292. package/esm/ui/RefNameAutocomplete/SearchOption.js +45 -0
  293. package/esm/ui/RefNameAutocomplete/index.d.ts +1 -2
  294. package/esm/ui/RefNameAutocomplete/index.js +8 -2
  295. package/esm/ui/RefNameAutocomplete/util.d.ts +13 -0
  296. package/esm/ui/RefNameAutocomplete/util.js +42 -1
  297. package/esm/ui/ResizeHandle.d.ts +3 -1
  298. package/esm/ui/ResizeHandle.js +44 -11
  299. package/esm/ui/ScrollChrome.d.ts +13 -0
  300. package/esm/ui/ScrollChrome.js +11 -0
  301. package/esm/ui/ScrollEdgeShadow.d.ts +6 -9
  302. package/esm/ui/ScrollEdgeShadow.js +14 -35
  303. package/esm/ui/ScrollZoomToggle.d.ts +4 -27
  304. package/esm/ui/ScrollZoomToggle.js +34 -51
  305. package/esm/ui/SessionJsonPanel.d.ts +3 -0
  306. package/esm/ui/SessionJsonPanel.js +14 -0
  307. package/esm/ui/SettingsChangesTable.d.ts +1 -0
  308. package/esm/ui/SettingsChangesTable.js +49 -11
  309. package/esm/ui/ShareLinkField.d.ts +1 -3
  310. package/esm/ui/ShareLinkField.js +13 -40
  311. package/esm/ui/SizeSliderRow.d.ts +1 -3
  312. package/esm/ui/SizeSliderRow.js +4 -6
  313. package/esm/ui/SnackbarModel.js +79 -67
  314. package/esm/ui/StatusProgressBar.js +2 -2
  315. package/esm/ui/SvgColorLegend.d.ts +9 -4
  316. package/esm/ui/SvgColorLegend.js +82 -41
  317. package/esm/ui/VerticalScrollbar.d.ts +13 -34
  318. package/esm/ui/VerticalScrollbar.js +29 -83
  319. package/esm/ui/ViewLoadingScreen.d.ts +5 -4
  320. package/esm/ui/ViewLoadingScreen.js +8 -32
  321. package/esm/ui/colorScale.d.ts +92 -0
  322. package/esm/ui/colorScale.js +72 -0
  323. package/esm/ui/colors.d.ts +64 -0
  324. package/esm/ui/colors.js +230 -1
  325. package/esm/ui/hoverBoxStyle.d.ts +14 -2
  326. package/esm/ui/hoverBoxStyle.js +17 -2
  327. package/esm/ui/index.d.ts +12 -12
  328. package/esm/ui/index.js +14 -22
  329. package/esm/ui/launchViewMenu.js +15 -5
  330. package/esm/ui/legendMenuItem.d.ts +10 -32
  331. package/esm/ui/legendMenuItem.js +9 -36
  332. package/esm/ui/legendSpec.d.ts +15 -8
  333. package/esm/ui/legendSpec.js +14 -23
  334. package/esm/ui/makeSizeMenu.d.ts +0 -6
  335. package/esm/ui/makeSizeMenu.js +6 -30
  336. package/esm/ui/measureLegendText.js +1 -1
  337. package/esm/ui/menuItemAdornment.d.ts +9 -20
  338. package/esm/ui/menuItemAdornment.js +10 -32
  339. package/esm/ui/menuItems.d.ts +2 -7
  340. package/esm/ui/menuItems.js +1 -6
  341. package/esm/ui/multiTrackMenuItems.d.ts +6 -0
  342. package/esm/ui/palette.d.ts +118 -116
  343. package/esm/ui/palette.js +114 -75
  344. package/esm/ui/replaceViewAction.d.ts +1 -1
  345. package/esm/ui/replaceViewAction.js +1 -1
  346. package/esm/ui/theme.d.ts +43 -119
  347. package/esm/ui/theme.js +62 -78
  348. package/esm/ui/toggleMenuItems.d.ts +1 -3
  349. package/esm/ui/toggleMenuItems.js +6 -5
  350. package/esm/ui/useAssemblySelection.d.ts +4 -4
  351. package/esm/ui/viewHeaderHeight.d.ts +1 -0
  352. package/esm/ui/viewHeaderHeight.js +1 -0
  353. package/esm/util/Base1DUtils.d.ts +5 -3
  354. package/esm/util/Base1DUtils.js +14 -6
  355. package/esm/util/Base1DViewModel.d.ts +2 -1
  356. package/esm/util/Base1DViewModel.js +3 -2
  357. package/esm/util/SvgCanvas.d.ts +15 -13
  358. package/esm/util/SvgCanvas.js +76 -56
  359. package/esm/util/TimeTraveller.d.ts +3 -0
  360. package/esm/util/TimeTraveller.js +34 -2
  361. package/esm/util/aborting.d.ts +39 -0
  362. package/esm/util/aborting.js +88 -6
  363. package/esm/util/adapterMetadata.d.ts +1 -1
  364. package/esm/util/adapterMetadata.js +6 -5
  365. package/esm/util/addAndShowTrack.d.ts +2 -5
  366. package/esm/util/addAndShowTrack.js +5 -1
  367. package/esm/util/addRelativeUris.d.ts +17 -5
  368. package/esm/util/addRelativeUris.js +46 -10
  369. package/esm/util/addTrackFromWidget.d.ts +2 -5
  370. package/esm/util/addTrackFromWidget.js +5 -4
  371. package/esm/util/aggregateFieldName.d.ts +10 -0
  372. package/esm/util/aggregateFieldName.js +8 -0
  373. package/esm/util/analytics.js +46 -13
  374. package/esm/util/animationAllowed.d.ts +9 -0
  375. package/esm/util/animationAllowed.js +13 -0
  376. package/esm/util/applyRowResizeWheel.d.ts +10 -5
  377. package/esm/util/applyRowResizeWheel.js +10 -21
  378. package/esm/util/bandHeight.d.ts +10 -0
  379. package/esm/util/bandHeight.js +29 -0
  380. package/esm/util/bandLayout.d.ts +4 -4
  381. package/esm/util/bandLayout.js +4 -4
  382. package/esm/util/baseDisplayConfig.d.ts +8 -0
  383. package/esm/util/baseDisplayConfig.js +27 -0
  384. package/esm/util/bezierConnector.d.ts +4 -3
  385. package/esm/util/bezierConnector.js +38 -45
  386. package/esm/util/bgzfWorkerPool.d.ts +20 -74
  387. package/esm/util/bgzfWorkerPool.js +20 -74
  388. package/esm/util/binnedAggregate.d.ts +17 -0
  389. package/esm/util/binnedAggregate.js +275 -0
  390. package/esm/util/cacheBudgets.d.ts +22 -19
  391. package/esm/util/cacheBudgets.js +22 -19
  392. package/esm/util/cachedSetup.d.ts +16 -6
  393. package/esm/util/cachedSetup.js +108 -38
  394. package/esm/util/categoricalField.d.ts +56 -0
  395. package/esm/util/categoricalField.js +73 -0
  396. package/esm/util/cellMatches.d.ts +23 -0
  397. package/esm/util/cellMatches.js +264 -0
  398. package/esm/util/cellsStep.d.ts +29 -0
  399. package/esm/util/cellsStep.js +437 -0
  400. package/esm/util/clampToContig.d.ts +17 -0
  401. package/esm/util/clampToContig.js +19 -0
  402. package/esm/util/coarseStripHTML.js +1 -2
  403. package/esm/util/color/cssColorsLevel4.d.ts +1 -0
  404. package/esm/util/color/cssColorsLevel4.js +1 -0
  405. package/esm/util/color/index.d.ts +5 -3
  406. package/esm/util/color/index.js +7 -4
  407. package/esm/util/colorBits.d.ts +3 -3
  408. package/esm/util/colorBits.js +19 -44
  409. package/esm/util/colorRamp.d.ts +49 -5
  410. package/esm/util/colorRamp.js +169 -18
  411. package/esm/util/colorScale.d.ts +156 -0
  412. package/esm/util/colorScale.js +243 -0
  413. package/esm/util/colorSchemes.d.ts +21 -0
  414. package/esm/util/colorSchemes.js +30 -0
  415. package/esm/util/copyToClipboard.js +8 -1
  416. package/esm/util/{createStopTokenRotation.d.ts → createAbortRotation.d.ts} +21 -23
  417. package/esm/util/{createStopTokenRotation.js → createAbortRotation.js} +21 -52
  418. package/esm/util/createSvgRasterCanvas.d.ts +10 -0
  419. package/esm/util/cssColorParse.d.ts +15 -0
  420. package/esm/util/cssColorParse.js +53 -0
  421. package/esm/util/diagonalizeRegions.d.ts +2 -3
  422. package/esm/util/diagonalizeRegions.js +8 -13
  423. package/esm/util/expandLooseSearchIndex.d.ts +19 -0
  424. package/esm/util/expandLooseSearchIndex.js +29 -0
  425. package/esm/util/featureTable.d.ts +224 -0
  426. package/esm/util/featureTable.js +366 -0
  427. package/esm/util/featureTransforms.d.ts +81 -0
  428. package/esm/util/featureTransforms.js +1231 -0
  429. package/esm/util/featureTypes.d.ts +24 -0
  430. package/esm/util/featureTypes.js +35 -0
  431. package/esm/util/fetchAndMaybeUnzip.js +16 -9
  432. package/esm/util/fetchContext.d.ts +7 -8
  433. package/esm/util/fetchContext.js +3 -3
  434. package/esm/util/fetchHub.d.ts +4 -2
  435. package/esm/util/fetchHub.js +2 -2
  436. package/esm/util/fetchPhases.d.ts +10 -10
  437. package/esm/util/fetchSeq.d.ts +2 -3
  438. package/esm/util/fetchSeq.js +2 -2
  439. package/esm/util/fieldReader.d.ts +17 -0
  440. package/esm/util/fieldReader.js +62 -0
  441. package/esm/util/formatBytes.js +1 -1
  442. package/esm/util/formatGuessers.d.ts +25 -14
  443. package/esm/util/formatGuessers.js +42 -27
  444. package/esm/util/formatRelativeTime.js +1 -1
  445. package/esm/util/freezeDeep.d.ts +8 -10
  446. package/esm/util/freezeDeep.js +8 -10
  447. package/esm/util/getLocationUri.d.ts +2 -1
  448. package/esm/util/getLocationUri.js +8 -2
  449. package/esm/util/groupKeys.d.ts +76 -0
  450. package/esm/util/groupKeys.js +156 -0
  451. package/esm/util/highlights.d.ts +10 -6
  452. package/esm/util/highlights.js +12 -25
  453. package/esm/util/hooks.d.ts +31 -2
  454. package/esm/util/hooks.js +72 -3
  455. package/esm/util/index.d.ts +11 -11
  456. package/esm/util/index.js +11 -10
  457. package/esm/util/indexCandidates.d.ts +1 -31
  458. package/esm/util/indexCandidates.js +5 -63
  459. package/esm/util/installFetch.d.ts +77 -37
  460. package/esm/util/installFetch.js +65 -38
  461. package/esm/util/installInitAutorun.d.ts +14 -13
  462. package/esm/util/installInitAutorun.js +17 -17
  463. package/esm/util/installPrerequisiteFetch.d.ts +115 -0
  464. package/esm/util/installPrerequisiteFetch.js +111 -0
  465. package/esm/util/intervals.js +9 -4
  466. package/esm/util/io/index.js +22 -15
  467. package/esm/util/isDataCurrent.d.ts +7 -5
  468. package/esm/util/isDataCurrent.js +9 -6
  469. package/esm/util/isTextEntryFocused.d.ts +7 -0
  470. package/esm/util/isTextEntryFocused.js +16 -0
  471. package/esm/util/jexl.js +24 -21
  472. package/esm/util/jexlFilterRows.d.ts +89 -0
  473. package/esm/util/jexlFilterRows.js +252 -0
  474. package/esm/util/jexlFilters.d.ts +32 -57
  475. package/esm/util/jexlFilters.js +31 -29
  476. package/esm/util/jexlStrings.d.ts +3 -4
  477. package/esm/util/jexlStrings.js +2 -3
  478. package/esm/util/layouts/GranularRectLayout.d.ts +8 -1
  479. package/esm/util/layouts/GranularRectLayout.js +25 -8
  480. package/esm/util/lazyAfterAttach.d.ts +13 -0
  481. package/esm/util/lazyAfterAttach.js +31 -0
  482. package/esm/util/lazyWithPreload.d.ts +19 -0
  483. package/esm/util/lazyWithPreload.js +27 -0
  484. package/esm/util/legendCandidates.d.ts +72 -0
  485. package/esm/util/legendCandidates.js +138 -0
  486. package/esm/util/locString.js +5 -2
  487. package/esm/util/localStorage.js +4 -4
  488. package/esm/util/markEncoding.d.ts +150 -0
  489. package/esm/util/markEncoding.js +885 -0
  490. package/esm/util/markEncodingTypes.d.ts +595 -0
  491. package/esm/util/markEncodingTypes.js +8 -0
  492. package/esm/util/mst-reflection.d.ts +2 -20
  493. package/esm/util/mst-reflection.js +3 -53
  494. package/esm/util/mstUtils.d.ts +31 -23
  495. package/esm/util/mstUtils.js +39 -24
  496. package/esm/util/numericUtils.d.ts +7 -0
  497. package/esm/util/numericUtils.js +16 -0
  498. package/esm/util/numericValue.d.ts +14 -0
  499. package/esm/util/numericValue.js +34 -0
  500. package/esm/util/openFeatureWidget.d.ts +5 -0
  501. package/esm/util/openFeatureWidget.js +2 -2
  502. package/esm/util/openViews.d.ts +17 -0
  503. package/esm/util/openViews.js +22 -0
  504. package/esm/util/parentWalk.d.ts +1 -1
  505. package/esm/util/parentWalk.js +1 -1
  506. package/esm/util/parseLineByLine.d.ts +4 -5
  507. package/esm/util/parseLineByLine.js +8 -14
  508. package/esm/util/pluginStore.d.ts +6 -8
  509. package/esm/util/pluginStore.js +17 -16
  510. package/esm/util/preloadComponent.d.ts +5 -0
  511. package/esm/util/preloadComponent.js +11 -0
  512. package/esm/util/progress.d.ts +22 -22
  513. package/esm/util/progress.js +27 -26
  514. package/esm/util/quantileExtent.d.ts +49 -0
  515. package/esm/util/quantileExtent.js +162 -0
  516. package/esm/util/range.d.ts +13 -9
  517. package/esm/util/range.js +17 -8
  518. package/esm/util/renameRegions.d.ts +26 -6
  519. package/esm/util/renameRegions.js +68 -54
  520. package/esm/util/renderToStaticMarkup.js +24 -14
  521. package/esm/util/rxjs.d.ts +23 -8
  522. package/esm/util/rxjs.js +61 -15
  523. package/esm/util/samplesTsv.d.ts +49 -0
  524. package/esm/util/samplesTsv.js +86 -0
  525. package/esm/util/scheduleDetachedDestroy.d.ts +18 -0
  526. package/esm/util/scheduleDetachedDestroy.js +24 -0
  527. package/esm/util/scrollLatch.d.ts +1 -0
  528. package/esm/util/scrollLatch.js +8 -0
  529. package/esm/util/selectEncodedFeature.d.ts +16 -0
  530. package/esm/util/selectEncodedFeature.js +34 -0
  531. package/esm/util/sessionSharing.d.ts +7 -5
  532. package/esm/util/sessionSharing.js +23 -23
  533. package/esm/util/shapeNameList.d.ts +2 -0
  534. package/esm/util/shapeNameList.js +6 -0
  535. package/esm/util/shapeNames.d.ts +7 -0
  536. package/esm/util/shapeNames.js +11 -0
  537. package/esm/util/simpleFeature.d.ts +0 -1
  538. package/esm/util/springAnimate.js +1 -1
  539. package/esm/util/starFusion.d.ts +26 -0
  540. package/esm/util/starFusion.js +37 -0
  541. package/esm/util/stepTables.d.ts +96 -0
  542. package/esm/util/stepTables.js +277 -0
  543. package/esm/util/svAlt.d.ts +145 -0
  544. package/esm/util/svAlt.js +364 -0
  545. package/esm/util/svgColorProps.d.ts +11 -0
  546. package/esm/util/svgColorProps.js +28 -1
  547. package/esm/util/systemColorScheme.d.ts +12 -0
  548. package/esm/util/systemColorScheme.js +27 -0
  549. package/esm/util/tabix.d.ts +19 -10
  550. package/esm/util/tabix.js +19 -14
  551. package/esm/util/thresholdScale.d.ts +91 -0
  552. package/esm/util/thresholdScale.js +166 -0
  553. package/esm/util/timeGate.d.ts +4 -5
  554. package/esm/util/timeGate.js +4 -5
  555. package/esm/util/trackConfigDelta.d.ts +26 -26
  556. package/esm/util/trackConfigDelta.js +63 -47
  557. package/esm/util/tracks.d.ts +120 -66
  558. package/esm/util/tracks.js +501 -151
  559. package/esm/util/translateTranscript.d.ts +44 -0
  560. package/esm/util/translateTranscript.js +102 -0
  561. package/esm/util/types/data.d.ts +0 -2
  562. package/esm/util/types/index.d.ts +121 -22
  563. package/esm/util/types/index.js +9 -0
  564. package/esm/util/types/mst.d.ts +3 -0
  565. package/esm/util/types/mst.js +4 -0
  566. package/esm/util/types/renameIds.d.ts +1 -0
  567. package/esm/util/types/renameIds.js +29 -0
  568. package/esm/util/types/services.d.ts +1 -1
  569. package/esm/util/unknownSnapshotKeys.d.ts +53 -0
  570. package/esm/util/unknownSnapshotKeys.js +76 -0
  571. package/esm/util/useFeatureSequence.js +5 -5
  572. package/esm/util/useFetch.d.ts +3 -4
  573. package/esm/util/useFetch.js +19 -10
  574. package/esm/util/useFetchPlugins.d.ts +6 -2
  575. package/esm/util/useFetchPlugins.js +7 -3
  576. package/esm/util/usePanZoom.js +10 -3
  577. package/esm/util/usePanelVirtualScroll.d.ts +7 -35
  578. package/esm/util/usePanelVirtualScroll.js +9 -36
  579. package/esm/util/useRafCommit.js +1 -0
  580. package/esm/util/useRowVirtualScroll.d.ts +6 -29
  581. package/esm/util/useRowVirtualScroll.js +8 -49
  582. package/esm/util/useVirtualScrollWheel.d.ts +20 -4
  583. package/esm/util/useVirtualScrollWheel.js +40 -74
  584. package/esm/util/viewHighlights.d.ts +3 -0
  585. package/esm/util/viewHighlights.js +5 -0
  586. package/esm/util/viewStatus.d.ts +47 -15
  587. package/esm/util/viewStatus.js +34 -0
  588. package/esm/util/wheelZoom.d.ts +7 -1
  589. package/esm/util/wheelZoom.js +85 -19
  590. package/esm/util/whenViewSettled.d.ts +55 -8
  591. package/esm/util/whenViewSettled.js +56 -7
  592. package/esm/util/withFeatureDetails.js +4 -0
  593. package/esm/util/withLaunchInput.d.ts +174 -0
  594. package/esm/util/withLaunchInput.js +274 -0
  595. package/package.json +75 -24
  596. package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.d.ts +0 -2
  597. package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.js +0 -8
  598. package/esm/BaseFeatureWidget/BaseFeatureDetail/types.d.ts +0 -8
  599. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.d.ts +0 -80
  600. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.js +0 -583
  601. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.d.ts +0 -141
  602. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.js +0 -1116
  603. package/esm/ReExports/BaseFeatureDetails.d.ts +0 -1
  604. package/esm/ReExports/BaseFeatureDetails.js +0 -10
  605. package/esm/ReExports/index.d.ts +0 -1
  606. package/esm/ReExports/index.js +0 -1
  607. package/esm/ReExports/publicUtil.d.ts +0 -1
  608. package/esm/ReExports/publicUtil.js +0 -28
  609. package/esm/configuration/promotableDefaults.d.ts +0 -199
  610. package/esm/configuration/promotableDefaults.js +0 -326
  611. package/esm/configuration/promotablePin.d.ts +0 -55
  612. package/esm/configuration/promotablePin.js +0 -1
  613. package/esm/configuration/promotableResolve.d.ts +0 -108
  614. package/esm/configuration/promotableResolve.js +0 -117
  615. package/esm/configuration/promotableSlots.d.ts +0 -12
  616. package/esm/configuration/promotableSlots.js +0 -45
  617. package/esm/configuration/slotShape.d.ts +0 -12
  618. package/esm/configuration/slotShape.js +0 -84
  619. package/esm/pluggableElementTypes/models/HighlightsMixin.d.ts +0 -51
  620. package/esm/pluggableElementTypes/models/HighlightsMixin.js +0 -78
  621. package/esm/ui/PinAdornment.d.ts +0 -5
  622. package/esm/ui/PinAdornment.js +0 -79
  623. package/esm/ui/SvgGradientLegend.d.ts +0 -26
  624. package/esm/ui/SvgGradientLegend.js +0 -26
  625. package/esm/ui/highlightChipReveal.d.ts +0 -32
  626. package/esm/ui/highlightChipReveal.js +0 -39
  627. package/esm/ui/promotableMenuItems.d.ts +0 -19
  628. package/esm/ui/promotableMenuItems.js +0 -89
  629. package/esm/ui/promotablePinCoverage.d.ts +0 -44
  630. package/esm/ui/promotablePinCoverage.js +0 -87
  631. package/esm/util/applyInitSettings.d.ts +0 -79
  632. package/esm/util/applyInitSettings.js +0 -91
  633. package/esm/util/openDisplays.d.ts +0 -23
  634. package/esm/util/openDisplays.js +0 -79
  635. package/esm/util/stopToken.d.ts +0 -211
  636. package/esm/util/stopToken.js +0 -438
  637. /package/esm/{BaseFeatureWidget/BaseFeatureDetail/types.js → data_adapters/BaseAdapter/zoomRange.js} +0 -0
@@ -38,32 +38,39 @@ export function b64PadSuffix(b64) {
38
38
  }
39
39
  return b64 + '='.repeat(num);
40
40
  }
41
+ async function transformBytes(bytes, transform) {
42
+ const stream = new Response(bytes).body.pipeThrough(transform);
43
+ return new Uint8Array(await new Response(stream).arrayBuffer());
44
+ }
41
45
  /**
42
46
  * Decode and inflate a url-safe base64 to a string
43
47
  * See {@link https://en.wikipedia.org/wiki/Base64#URL_applications}
48
+ *
49
+ * A truncated input rejects rather than inflating to a prefix: a link cut short
50
+ * in transit has to say so, not fail later as a JSON syntax error.
44
51
  */
45
52
  export async function fromUrlSafeB64(b64) {
46
- const originalB64 = b64PadSuffix(b64.replaceAll('-', '+').replaceAll('_', '/'));
47
- const { inflate } = await import('pako-esm2');
48
- const bytes = Uint8Array.from(atob(originalB64), c => c.charCodeAt(0));
49
- const inflated = inflate(bytes, undefined);
50
- return new TextDecoder('utf8').decode(inflated);
53
+ try {
54
+ const bytes = Uint8Array.from(atob(b64PadSuffix(b64.replaceAll('-', '+').replaceAll('_', '/'))), c => c.charCodeAt(0));
55
+ return new TextDecoder().decode(await transformBytes(bytes, new DecompressionStream('deflate')));
56
+ }
57
+ catch (e) {
58
+ throw new Error('This session is incomplete or damaged, which is how a link cut short in transit arrives. A short link survives being sent where a long one may not.', { cause: e });
59
+ }
51
60
  }
52
61
  /**
53
62
  * Compress and encode a string as url-safe base64
54
63
  * See {@link https://en.wikipedia.org/wiki/Base64#URL_applications}
55
64
  */
56
65
  export async function toUrlSafeB64(str) {
57
- const bytes = new TextEncoder().encode(str);
58
- const { deflate } = await import('pako-esm2');
59
- const deflated = deflate(bytes, undefined);
66
+ const deflated = await transformBytes(new TextEncoder().encode(str), new CompressionStream('deflate'));
60
67
  const encoded = btoa(bytesToBinaryString(deflated)).replace(/=+$/, '');
61
68
  return encoded.replaceAll('+', '-').replaceAll('/', '_');
62
69
  }
63
70
  /**
64
- * The `?session=` value prefixes, named here because this module is what
65
- * produces them. The decoder half (jbrowse-web's SessionLoader) has its own
66
- * list covering the two prefixes nothing here writes (`spec-`, `local-`).
71
+ * The `?session=` value prefixes for a session carried by or behind the link.
72
+ * The decoder half (jbrowse-web's SessionLoader) has its own list covering
73
+ * `spec-` and `local-` too.
67
74
  */
68
75
  export const SHARE_PREFIX = 'share-';
69
76
  export const ENCODED_PREFIX = 'encoded-';
@@ -102,23 +109,16 @@ async function shareSessionToDynamo(session, shareURL, referer) {
102
109
  return { sessionId, password };
103
110
  }
104
111
  // Encodes a session snapshot into the `?session=` value jbrowse-web decodes:
105
- // `share-<id>` (uploaded + encrypted), `encoded-<b64>` (compressed inline), or
106
- // `json-<json>` (plaintext inline). Single source of these prefixes, shared by
107
- // jbrowse-web's ShareDialog and jbrowse-desktop's ExportToWebDialog so the two
108
- // producers can't drift from the decoder.
112
+ // `share-<id>` (uploaded + encrypted) or `encoded-<b64>` (compressed inline).
113
+ // Single source of these prefixes, shared by jbrowse-web's ShareDialog and
114
+ // jbrowse-desktop's ExportToWebDialog so the two producers can't drift from the
115
+ // decoder. The decoder also reads `json-{"session":…}`, which nothing here
116
+ // writes: it is the form a person writes by hand.
109
117
  export async function encodeSessionParam(mode, session, options) {
110
118
  if (mode === 'short') {
111
119
  const { sessionId, password } = await shareSessionToDynamo(session, options.shareURL, options.referer);
112
120
  return { sessionParam: `${SHARE_PREFIX}${sessionId}`, password };
113
121
  }
114
- else if (mode === 'json') {
115
- // compact in the link (this mode's URL is the longest of the three
116
- // already), indented in the dialog's readable-JSON panel
117
- return {
118
- sessionParam: `${JSON_PREFIX}${JSON.stringify({ session })}`,
119
- plaintext: JSON.stringify({ session }, null, 2),
120
- };
121
- }
122
122
  else {
123
123
  const encoded = await toUrlSafeB64(JSON.stringify(session));
124
124
  return { sessionParam: `${ENCODED_PREFIX}${encoded}` };
@@ -0,0 +1,2 @@
1
+ /** The shape names in range order: what an unlisted `range` hands out. */
2
+ export declare const SHAPE_NAMES: ('circle' | 'triangle-down' | 'diamond')[];
@@ -0,0 +1,6 @@
1
+ /** The shape names in range order: what an unlisted `range` hands out. */
2
+ export const SHAPE_NAMES = [
3
+ 'circle',
4
+ 'triangle-down',
5
+ 'diamond',
6
+ ];
@@ -0,0 +1,7 @@
1
+ import type { ShapeName } from './markEncodingTypes.ts';
2
+ /**
3
+ * #api
4
+ * The `point` mark's painter code for each shape an encoding can name.
5
+ */
6
+ export declare const SHAPE_CODES: Record<ShapeName, number>;
7
+ export { SHAPE_NAMES } from './shapeNameList.ts';
@@ -0,0 +1,11 @@
1
+ import { GLYPH_DIAMOND, GLYPH_DISC, GLYPH_TRIANGLE, } from '@jbrowse/render-core/shaders/pointMarkConsts';
2
+ /**
3
+ * #api
4
+ * The `point` mark's painter code for each shape an encoding can name.
5
+ */
6
+ export const SHAPE_CODES = {
7
+ circle: GLYPH_DISC,
8
+ 'triangle-down': GLYPH_TRIANGLE,
9
+ diamond: GLYPH_DIAMOND,
10
+ };
11
+ export { SHAPE_NAMES } from './shapeNameList.js';
@@ -90,7 +90,6 @@ export interface SimpleFeatureSerializedNoId {
90
90
  name?: string;
91
91
  id?: string | number;
92
92
  uniqueId?: string;
93
- __jbrowsefmt?: Record<string, unknown>;
94
93
  mate?: {
95
94
  refName: string;
96
95
  start: number;
@@ -61,7 +61,7 @@ export function springAnimate({ from, to, write, read, onFinish = () => { }, pre
61
61
  animationFrameId = requestAnimationFrame(() => {
62
62
  update({
63
63
  lastPosition: position,
64
- lastTime: time,
64
+ lastTime: lastTime + numSteps,
65
65
  lastVelocity: velocity,
66
66
  });
67
67
  });
@@ -0,0 +1,26 @@
1
+ export type FusionBreakpoint = {
2
+ refName: string;
3
+ start: number;
4
+ end: number;
5
+ strand?: number;
6
+ /** which way the sequence this end keeps runs from it: 1 right, -1 left, 0 unknown */
7
+ mateDirection: number;
8
+ };
9
+ /**
10
+ * The column names of a STAR-Fusion `fusion_predictions.tsv` header line. The
11
+ * leading `#` is not universal across STAR-Fusion versions and wrappers, so it
12
+ * is stripped when present. Throws a named error for a header without the two
13
+ * breakpoint columns, which is the wrong file or the wrong File Type guess.
14
+ */
15
+ export declare function starFusionColumns(header: string | undefined): string[];
16
+ /**
17
+ * A STAR-Fusion `refName:pos:strand` breakpoint as an interbase feature, read
18
+ * from the RIGHT because a refName may contain colons (GRCh38's
19
+ * `HLA-A*01:01:01:01`). The position is 1-based in the file. The strand is the
20
+ * gene's transcription strand, and the fusion transcript keeps the donor's
21
+ * sequence 5' of the junction and the acceptor's 3' of it, so `mateDirection`
22
+ * is the strand negated for a donor and taken as read for an acceptor: the
23
+ * convention `parseSvAlt` states for a breakend and the paired-arc display
24
+ * draws its ticks from.
25
+ */
26
+ export declare function parseStarFusionBreakpoint(str: string, isDonor: boolean): FusionBreakpoint;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * The column names of a STAR-Fusion `fusion_predictions.tsv` header line. The
3
+ * leading `#` is not universal across STAR-Fusion versions and wrappers, so it
4
+ * is stripped when present. Throws a named error for a header without the two
5
+ * breakpoint columns, which is the wrong file or the wrong File Type guess.
6
+ */
7
+ export function starFusionColumns(header) {
8
+ const columns = (header?.startsWith('#') ? header.slice(1) : header)?.split('\t') ?? [];
9
+ const missing = ['LeftBreakpoint', 'RightBreakpoint'].filter(c => !columns.includes(c));
10
+ if (missing.length) {
11
+ throw new Error(`Not a STAR-Fusion file: no ${missing.join(' or ')} column. Found: ${columns.slice(0, 6).join(', ')}`);
12
+ }
13
+ return columns;
14
+ }
15
+ /**
16
+ * A STAR-Fusion `refName:pos:strand` breakpoint as an interbase feature, read
17
+ * from the RIGHT because a refName may contain colons (GRCh38's
18
+ * `HLA-A*01:01:01:01`). The position is 1-based in the file. The strand is the
19
+ * gene's transcription strand, and the fusion transcript keeps the donor's
20
+ * sequence 5' of the junction and the acceptor's 3' of it, so `mateDirection`
21
+ * is the strand negated for a donor and taken as read for an acceptor: the
22
+ * convention `parseSvAlt` states for a breakend and the paired-arc display
23
+ * draws its ticks from.
24
+ */
25
+ export function parseStarFusionBreakpoint(str, isDonor) {
26
+ const parts = str.split(':');
27
+ const strandStr = parts.length >= 3 ? parts.pop() : undefined;
28
+ const pos = parts.length >= 2 ? +parts.pop() : Number.NaN;
29
+ const strand = strandStr === '+' ? 1 : strandStr === '-' ? -1 : undefined;
30
+ return {
31
+ refName: parts.join(':'),
32
+ start: pos - 1,
33
+ end: pos,
34
+ strand,
35
+ mateDirection: strand === undefined ? 0 : isDonor ? -strand : strand,
36
+ };
37
+ }
@@ -0,0 +1,96 @@
1
+ import { DerivedTable } from './featureTable.ts';
2
+ import type { Column, FeatureTable, MadeRows } from './featureTable.ts';
3
+ import type { AggregateOp, AggregateStep, BinStep } from './markEncodingTypes.ts';
4
+ import type { Feature, SimpleFeatureSerialized } from './simpleFeature.ts';
5
+ export declare const DEFAULT_BIN_AS: [string, string];
6
+ /** What a `bin` over `fields` writes on each piece: the bases of its interval inside its bin. */
7
+ export declare const BIN_OVERLAP_FIELD = "overlap";
8
+ /**
9
+ * A table's rows split into sections, each a contiguous range: `bounds[s]` is
10
+ * where section `s` starts and `bounds[s + 1]` where it ends. A step keeps
11
+ * its rows in section order, and one that groups rows groups within a
12
+ * section, so a faceted request runs each step once over every section.
13
+ */
14
+ export type Bounds = Uint32Array;
15
+ export interface Staged {
16
+ table: FeatureTable;
17
+ bounds: Bounds;
18
+ }
19
+ export declare function boundsThrough(bounds: Bounds, parentRow: Uint32Array): Bounds;
20
+ /**
21
+ * The entries a `flatten` fanned out, one row each over the container row it
22
+ * came from. A container kept with nothing to fan out is a row of its own
23
+ * that reads everything off itself.
24
+ */
25
+ export declare abstract class FannedTable extends DerivedTable {
26
+ get madeFrom(): boolean;
27
+ /** A container kept with nothing to fan out: the row is the container. */
28
+ abstract isKept(i: number): boolean;
29
+ abstract get hasKept(): boolean;
30
+ row(i: number): Feature;
31
+ }
32
+ export declare function stepReader(table: FeatureTable, ref: string, step: string): (i: number) => unknown;
33
+ export declare function stepNumberReader(table: FeatureTable, ref: string, step: string): (i: number) => number;
34
+ export declare function groupKey(value: unknown): unknown;
35
+ export declare function binSize({ step }: BinStep): number;
36
+ /**
37
+ * Each row's interval and the bins it overlaps, `first` to `last`, with each
38
+ * section's lowest and highest bin: `first` NaN where the ends are not
39
+ * numbers or run backwards, so the row is no piece. A zero-length interval
40
+ * is its position's bin alone.
41
+ */
42
+ export declare function intervalsOf(table: FeatureTable, [startField, endField]: [string, string], size: number, bounds: Bounds): {
43
+ start: Float64Array<ArrayBuffer>;
44
+ end: Float64Array<ArrayBuffer>;
45
+ first: Float64Array<ArrayBuffer>;
46
+ last: Float64Array<ArrayBuffer>;
47
+ pieces: number;
48
+ lowBin: Float64Array<ArrayBuffer>;
49
+ highBin: Float64Array<ArrayBuffer>;
50
+ };
51
+ /**
52
+ * Rows a step made from nothing: an `aggregate`'s groups and a `coverage`'s
53
+ * runs, carrying only the fields they wrote and an id from their span, with
54
+ * no feature to hang from.
55
+ */
56
+ export declare class MadeTable implements MadeRows {
57
+ readonly length: number;
58
+ private readonly columns;
59
+ private readonly tags;
60
+ constructor(length: number, columns: ReadonlyMap<string, Column>, tags: (i: number) => string);
61
+ column(field: string): Column;
62
+ id(i: number): string;
63
+ parentOfRow(): undefined;
64
+ row(i: number): Feature;
65
+ json(i: number): SimpleFeatureSerialized;
66
+ }
67
+ export declare function valueColumn(values: readonly unknown[]): Column;
68
+ export declare function madeGroups({ groups, keys, ops, step, refNames, start, end, sectionOf, sections, }: {
69
+ groups: number;
70
+ keys: readonly [string, unknown[]][];
71
+ ops: readonly Column[];
72
+ step: AggregateStep;
73
+ refNames: unknown[];
74
+ start: Float64Array;
75
+ end: Float64Array;
76
+ sectionOf: ArrayLike<number>;
77
+ sections: number;
78
+ }): Staged;
79
+ export declare function isWeighted({ op, weight }: AggregateOp): boolean;
80
+ /**
81
+ * One op's running sums per group, which the aggregate and the binned
82
+ * aggregate both add rows to in row order, so the two answer the same
83
+ * doubles. An unweighted row adds a weight of 1, which leaves every sum what
84
+ * it was before weights.
85
+ */
86
+ export declare class OpSums {
87
+ readonly op: AggregateOp['op'];
88
+ private readonly readsValue;
89
+ readonly sum: Float64Array;
90
+ readonly weight: Float64Array;
91
+ readonly min: Float64Array;
92
+ readonly max: Float64Array;
93
+ constructor({ op, field }: AggregateOp, groups: number);
94
+ add(g: number, v: number, w: number): void;
95
+ column(groups: number): Column;
96
+ }
@@ -0,0 +1,277 @@
1
+ // The pieces of the transform steps that the fused kernels share with the
2
+ // steps themselves. Imported by relative path only, so none of it is a
3
+ // package subpath or part of the plugin ABI.
4
+ import { aggregateFieldName } from './aggregateFieldName.js';
5
+ import { DerivedTable, NO_COLUMN, TableRow, numberReaderOf, readerOf, valueAt, } from './featureTable.js';
6
+ import { fieldReader, isPlainFieldRef } from './fieldReader.js';
7
+ import { isJexl } from './jexlStrings.js';
8
+ import { numericValue } from './numericValue.js';
9
+ export const DEFAULT_BIN_AS = ['start', 'end'];
10
+ /** What a `bin` over `fields` writes on each piece: the bases of its interval inside its bin. */
11
+ export const BIN_OVERLAP_FIELD = 'overlap';
12
+ // Section starts through a step whose rows came from its input's in order:
13
+ // each section starts at the first row whose parent row is in it.
14
+ export function boundsThrough(bounds, parentRow) {
15
+ const out = new Uint32Array(bounds.length);
16
+ let lo = 0;
17
+ for (let s = 0; s < bounds.length; s++) {
18
+ const edge = bounds[s];
19
+ let hi = parentRow.length;
20
+ while (lo < hi) {
21
+ const mid = (lo + hi) >>> 1;
22
+ if (parentRow[mid] < edge) {
23
+ lo = mid + 1;
24
+ }
25
+ else {
26
+ hi = mid;
27
+ }
28
+ }
29
+ out[s] = lo;
30
+ }
31
+ return out;
32
+ }
33
+ /**
34
+ * The entries a `flatten` fanned out, one row each over the container row it
35
+ * came from. A container kept with nothing to fan out is a row of its own
36
+ * that reads everything off itself.
37
+ */
38
+ export class FannedTable extends DerivedTable {
39
+ get madeFrom() {
40
+ return true;
41
+ }
42
+ row(i) {
43
+ return this.isKept(i) ? this.parent.row(this.parentOf(i)) : super.row(i);
44
+ }
45
+ }
46
+ // A step reads a name or a dotted path. A plain name reads the table's column;
47
+ // a path walks each row, chosen once per step. A computed field is a `formula`
48
+ // step's to make.
49
+ export function stepReader(table, ref, step) {
50
+ if (isJexl(ref)) {
51
+ throw new Error(`${step} field is a name or a dotted path, and a formula step in front computes one (${ref})`);
52
+ }
53
+ if (isPlainFieldRef(ref)) {
54
+ return readerOf(table.column(ref));
55
+ }
56
+ const read = fieldReader(ref, undefined);
57
+ return (i) => read(table.row(i));
58
+ }
59
+ export function stepNumberReader(table, ref, step) {
60
+ if (isPlainFieldRef(ref) && !isJexl(ref)) {
61
+ return numberReaderOf(table.column(ref));
62
+ }
63
+ const read = stepReader(table, ref, step);
64
+ return (i) => numericValue(read(i));
65
+ }
66
+ // A list holding one value is that value, as a VCF's ALT and INFO fields
67
+ // arrive, and a longer one is its text: a Map keys a list by identity, which
68
+ // made every row a group of its own. A missing value is one group, whether
69
+ // the field is absent or holds a VCF's `.`.
70
+ export function groupKey(value) {
71
+ return Array.isArray(value)
72
+ ? value.length === 1
73
+ ? (value[0] ?? undefined)
74
+ : value.join(',')
75
+ : (value ?? undefined);
76
+ }
77
+ export function binSize({ step }) {
78
+ if (!(step > 0)) {
79
+ throw new Error(`a bin step needs a positive size (${step})`);
80
+ }
81
+ return step;
82
+ }
83
+ /**
84
+ * Each row's interval and the bins it overlaps, `first` to `last`, with each
85
+ * section's lowest and highest bin: `first` NaN where the ends are not
86
+ * numbers or run backwards, so the row is no piece. A zero-length interval
87
+ * is its position's bin alone.
88
+ */
89
+ export function intervalsOf(table, [startField, endField], size, bounds) {
90
+ const n = table.length;
91
+ const readStart = stepNumberReader(table, startField, 'a bin');
92
+ const readEnd = stepNumberReader(table, endField, 'a bin');
93
+ const start = new Float64Array(n);
94
+ const end = new Float64Array(n);
95
+ const firstBin = new Float64Array(n);
96
+ const lastBin = new Float64Array(n);
97
+ const sections = bounds.length - 1;
98
+ const lowBin = new Float64Array(sections).fill(Infinity);
99
+ const highBin = new Float64Array(sections).fill(-Infinity);
100
+ let pieces = 0;
101
+ for (let s = 0; s < sections; s++) {
102
+ let low = Infinity;
103
+ let high = -Infinity;
104
+ for (let i = bounds[s]; i < bounds[s + 1]; i++) {
105
+ const rowS = readStart(i);
106
+ const rowE = readEnd(i);
107
+ start[i] = rowS;
108
+ end[i] = rowE;
109
+ if (!(Number.isFinite(rowS) && Number.isFinite(rowE) && rowE >= rowS)) {
110
+ firstBin[i] = Number.NaN;
111
+ continue;
112
+ }
113
+ const first = Math.floor(rowS / size);
114
+ // The last bin starting before the end, found by the product the
115
+ // pieces are cut at.
116
+ let last = first;
117
+ while ((last + 1) * size < rowE) {
118
+ last++;
119
+ }
120
+ firstBin[i] = first;
121
+ lastBin[i] = last;
122
+ pieces += last - first + 1;
123
+ if (first < low) {
124
+ low = first;
125
+ }
126
+ if (last > high) {
127
+ high = last;
128
+ }
129
+ }
130
+ lowBin[s] = low;
131
+ highBin[s] = high;
132
+ }
133
+ return {
134
+ start,
135
+ end,
136
+ first: firstBin,
137
+ last: lastBin,
138
+ pieces,
139
+ lowBin,
140
+ highBin,
141
+ };
142
+ }
143
+ /**
144
+ * Rows a step made from nothing: an `aggregate`'s groups and a `coverage`'s
145
+ * runs, carrying only the fields they wrote and an id from their span, with
146
+ * no feature to hang from.
147
+ */
148
+ export class MadeTable {
149
+ length;
150
+ columns;
151
+ tags;
152
+ constructor(length, columns, tags) {
153
+ this.length = length;
154
+ this.columns = columns;
155
+ this.tags = tags;
156
+ }
157
+ column(field) {
158
+ return field === 'uniqueId'
159
+ ? { kind: 'value', read: i => this.id(i) }
160
+ : (this.columns.get(field) ?? NO_COLUMN);
161
+ }
162
+ id(i) {
163
+ const at = (field) => String(valueAt(this.column(field), i));
164
+ return `${at('refName')}:${at('start')}-${at('end')}${this.tags(i)}`;
165
+ }
166
+ parentOfRow() {
167
+ return undefined;
168
+ }
169
+ row(i) {
170
+ return new TableRow(this, i);
171
+ }
172
+ json(i) {
173
+ const out = {};
174
+ for (const [field, column] of this.columns) {
175
+ out[field] = valueAt(column, i);
176
+ }
177
+ out.uniqueId = this.id(i);
178
+ return out;
179
+ }
180
+ }
181
+ export function valueColumn(values) {
182
+ return { kind: 'value', read: i => values[i] };
183
+ }
184
+ // An aggregate's groups as rows, section by section: the groupby fields, the
185
+ // ops, and the reference name and extent each group spans.
186
+ export function madeGroups({ groups, keys, ops, step, refNames, start, end, sectionOf, sections, }) {
187
+ const columns = new Map();
188
+ for (const [field, values] of keys) {
189
+ columns.set(field, valueColumn(values));
190
+ }
191
+ for (const [k, agg] of step.ops.entries()) {
192
+ columns.set(aggregateFieldName(agg), ops[k]);
193
+ }
194
+ columns.set('refName', valueColumn(refNames));
195
+ columns.set('start', { kind: 'number', values: start, at: undefined });
196
+ columns.set('end', { kind: 'number', values: end, at: undefined });
197
+ const serial = new Uint32Array(groups);
198
+ const out = new Uint32Array(sections);
199
+ let s = 0;
200
+ for (let g = 0; g < groups; g++) {
201
+ while (s < sectionOf[g]) {
202
+ s++;
203
+ out[s] = g;
204
+ }
205
+ serial[g] = g - out[s];
206
+ }
207
+ for (s++; s < sections; s++) {
208
+ out[s] = groups;
209
+ }
210
+ return {
211
+ table: new MadeTable(groups, columns, g => `#${serial[g]}`),
212
+ bounds: out,
213
+ };
214
+ }
215
+ // Whether an op reads its `weight`: a weight moves no minimum or maximum.
216
+ export function isWeighted({ op, weight }) {
217
+ return weight !== undefined && op !== 'min' && op !== 'max';
218
+ }
219
+ /**
220
+ * One op's running sums per group, which the aggregate and the binned
221
+ * aggregate both add rows to in row order, so the two answer the same
222
+ * doubles. An unweighted row adds a weight of 1, which leaves every sum what
223
+ * it was before weights.
224
+ */
225
+ export class OpSums {
226
+ op;
227
+ readsValue;
228
+ sum;
229
+ weight;
230
+ min;
231
+ max;
232
+ constructor({ op, field }, groups) {
233
+ if (op !== 'count' && field === undefined) {
234
+ throw new Error(`an aggregate ${op} needs a field`);
235
+ }
236
+ this.op = op;
237
+ this.readsValue = op !== 'count';
238
+ this.sum = new Float64Array(groups);
239
+ this.weight = new Float64Array(groups);
240
+ this.min = new Float64Array(groups).fill(Infinity);
241
+ this.max = new Float64Array(groups).fill(-Infinity);
242
+ }
243
+ add(g, v, w) {
244
+ if ((this.readsValue && !Number.isFinite(v)) || !Number.isFinite(w)) {
245
+ return;
246
+ }
247
+ this.weight[g] += w;
248
+ if (this.readsValue) {
249
+ this.sum[g] += v * w;
250
+ if (v < this.min[g]) {
251
+ this.min[g] = v;
252
+ }
253
+ if (v > this.max[g]) {
254
+ this.max[g] = v;
255
+ }
256
+ }
257
+ }
258
+ column(groups) {
259
+ const { op } = this;
260
+ if (op === 'count' || op === 'sum') {
261
+ const values = (op === 'count' ? this.weight : this.sum).slice(0, groups);
262
+ return { kind: 'number', values, at: undefined };
263
+ }
264
+ const values = new Float64Array(groups);
265
+ for (let g = 0; g < groups; g++) {
266
+ values[g] =
267
+ this.weight[g] === 0
268
+ ? Number.NaN
269
+ : op === 'mean'
270
+ ? this.sum[g] / this.weight[g]
271
+ : op === 'min'
272
+ ? this.min[g]
273
+ : this.max[g];
274
+ }
275
+ return { kind: 'number', values, at: undefined, nanIsAbsent: true };
276
+ }
277
+ }