@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
@@ -0,0 +1,145 @@
1
+ import type { Feature } from './simpleFeature.ts';
2
+ import type { Breakend } from '@gmod/vcf';
3
+ export declare const SV_SYMBOLIC_ALLELES: string[];
4
+ /**
5
+ * #api
6
+ * parseBreakend, honoring its `Breakend | undefined` signature. ALT strings are
7
+ * user data and malformed breakends do occur; @gmod/vcf <=7.0.10 throws on them
8
+ * instead of returning undefined, which would otherwise fail a whole render or
9
+ * feature-parse pass over one bad allele. Use this everywhere rather than
10
+ * importing parseBreakend directly; it can become a plain re-export once the
11
+ * upstream fix ships.
12
+ */
13
+ export declare function safeParseBreakend(alt: string): Breakend | undefined;
14
+ /**
15
+ * #api
16
+ * The mate locString ("chr2:100") of a parsed breakend, or undefined when it
17
+ * names no navigable position. Two ALT forms reach here without one: a single
18
+ * breakend (`.A` / `G.`) has no mate at all, and the symbolic-mate forms
19
+ * (`G<DEL>`, `<DEL>G`) get a placeholder `<DEL>:1` from parseBreakend, which
20
+ * puts a symbolic allele id where a contig name belongs. Callers that navigate
21
+ * or split-view a mate must drop both rather than treat `<DEL>` as a refName.
22
+ */
23
+ export declare function getBreakendMateLocString(breakend?: Breakend): string | undefined;
24
+ /**
25
+ * #api
26
+ * Parse raw (non-assembly-resolved) mate coordinates from a VCF SV feature+alt.
27
+ * Returns undefined when no mate coordinate info is found. `alleleIndex` is
28
+ * the alt's place in `ALT`, which a record repeating one symbolic allele with
29
+ * several lengths needs; it defaults to the first place `alt` appears.
30
+ */
31
+ export declare function parseSvAlt(feature: Feature, alt?: string, alleleIndex?: number): {
32
+ mateRefName: string;
33
+ matePos: number;
34
+ mateDirection?: number;
35
+ joinDirection?: number;
36
+ } | undefined;
37
+ /**
38
+ * #api
39
+ * Which way the sequence each end of a breakend KEEPS runs from its breakpoint,
40
+ * as `+1 = right` / `-1 = left` — the convention `StarFusionAdapter`'s
41
+ * `tickDirection` states and the one every producer in the tree emits.
42
+ *
43
+ * The two halves read their strings with OPPOSITE polarity, which is the whole
44
+ * reason to state them together. `Join: 'right'` says the mate piece is joined
45
+ * to the RIGHT of the ref base, so this end keeps the sequence to its left:
46
+ * negated. `MateDirection: 'right'` says the mate's own piece extends to the
47
+ * right of the mate position, which is already the direction it keeps: taken as
48
+ * read. So `N[chr2:2000[` is `{ joinDirection: -1, mateDirection: 1 }`, and that
49
+ * is the same pair `StarFusionAdapter` emits for the fusion it describes — the
50
+ * donor keeps the sequence below its breakpoint (-1) and the acceptor the
51
+ * sequence above its own (+1).
52
+ *
53
+ * Split out of `parseSvAlt` because a consumer holding an already-parsed
54
+ * `Breakend` was re-deriving it by hand, in two adjacent ternaries of opposite
55
+ * polarity — the shape that produced 78bb7b84f9.
56
+ */
57
+ export declare function breakendKeepsDirections(bnd: Breakend): {
58
+ mateDirection: number;
59
+ joinDirection: number;
60
+ };
61
+ /**
62
+ * #api
63
+ * Breakend notation, without parsing it: bracket forms (`G[chr2:100[`), single
64
+ * breakends (`.A` / `G.`), and the symbolic-mate form (`G<DEL>`, an angle
65
+ * bracket past position 0; a leading `<` is a plain symbolic allele).
66
+ */
67
+ export declare function isBreakend(alt: string): boolean;
68
+ /**
69
+ * #api
70
+ * The conventional size floor for calling a sequence indel structural.
71
+ */
72
+ export declare const SV_MIN_LENGTH = 50;
73
+ /**
74
+ * #api
75
+ * The class a symbolic allele id, `SVTYPE` or `EVENTTYPE` names. A subtype folds
76
+ * into its first level (`DEL:ME:ALU` is DEL, `DUP:TANDEM` DUP), except the
77
+ * tandem repeats VCF 4.4 spells `CNV:TR` and ExpansionHunter `STRn`, and the
78
+ * inverted duplication `INV:DUP`. 1000 Genomes' `CNn` counts one haplotype's
79
+ * copies, so none is a deletion and two or more a duplication. `''` for an
80
+ * empty or missing token.
81
+ */
82
+ export declare function svClassOfToken(raw: string): string;
83
+ /**
84
+ * #api
85
+ * The structural-variant class one ALT allele states, `''` for one that is not
86
+ * structural. A symbolic allele's own id wins. Otherwise VCF 4.4's `EVENTTYPE`
87
+ * does; then a breakend is the class its `SVTYPE` declares where that says more
88
+ * than BND, and a sequence allele is an insertion or deletion by its length
89
+ * against REF, else its `SVTYPE`'s class.
90
+ */
91
+ export declare function svClassOfAlt(alt: string, { ref, info, alleleIndex, }?: {
92
+ ref?: string;
93
+ info?: Record<string, unknown>;
94
+ alleleIndex?: number;
95
+ }): string;
96
+ /**
97
+ * #api
98
+ * The structural-variant class of a VCF record as a whole: the one class its
99
+ * alleles state, CNV where they are losses and gains of one segment, OTHER
100
+ * where they otherwise disagree, and `''` for a record with no structural
101
+ * allele.
102
+ */
103
+ export declare function svClassOf(feature: Feature): string;
104
+ export declare function readTranslocationMate(info: {
105
+ CHR2?: string[];
106
+ END?: number[];
107
+ STRANDS?: string[];
108
+ }): {
109
+ chr: string;
110
+ pos: number;
111
+ myDir: string;
112
+ mateDir: string;
113
+ myKeepsDir: number;
114
+ mateKeepsDir: number;
115
+ } | undefined;
116
+ /**
117
+ * One end of a junction: the base beside the join on the side this end keeps,
118
+ * 0-based.
119
+ */
120
+ export interface JunctionEnd {
121
+ refName: string;
122
+ pos: number;
123
+ /** which way the sequence this end keeps runs from it: 1 right, -1 left, 0 unknown */
124
+ keeps: number;
125
+ }
126
+ /**
127
+ * #api
128
+ * Where a paired record's junction is at each of its two ends, and which side
129
+ * of it each end keeps — the one answer every launcher, the row menu and the
130
+ * chain walk take, whether the record is a VCF breakend, a symbolic SV or a
131
+ * paired adapter's row (BEDPE, STAR-Fusion). Refnames are as the record spells
132
+ * them. `undefined` for a record naming no other end. A VCF record is read
133
+ * through `alt`, its first ALT unless the caller names another.
134
+ *
135
+ * A VCF end is its own position. A paired adapter's end is a block, and the
136
+ * junction is the block's edge on the side the end keeps: stated by
137
+ * `mateDirection` where the adapter knows it, read off the strands where the
138
+ * record states one for each end as BEDPE does, and with neither the two
139
+ * blocks face each other. A PAF row's strand is the query's orientation and
140
+ * states none for the target, so it names no side.
141
+ */
142
+ export declare function junctionEnds(feature: Feature, alt?: string | undefined, alleleIndex?: number): {
143
+ own: JunctionEnd;
144
+ mate: JunctionEnd;
145
+ } | undefined;
@@ -0,0 +1,364 @@
1
+ import { parseBreakend } from '@gmod/vcf';
2
+ export const SV_SYMBOLIC_ALLELES = [
3
+ '<TRA',
4
+ '<DEL',
5
+ '<INV',
6
+ '<INS',
7
+ '<DUP',
8
+ '<CNV',
9
+ ];
10
+ /**
11
+ * #api
12
+ * parseBreakend, honoring its `Breakend | undefined` signature. ALT strings are
13
+ * user data and malformed breakends do occur; @gmod/vcf <=7.0.10 throws on them
14
+ * instead of returning undefined, which would otherwise fail a whole render or
15
+ * feature-parse pass over one bad allele. Use this everywhere rather than
16
+ * importing parseBreakend directly; it can become a plain re-export once the
17
+ * upstream fix ships.
18
+ */
19
+ export function safeParseBreakend(alt) {
20
+ try {
21
+ return parseBreakend(alt);
22
+ }
23
+ catch {
24
+ return undefined;
25
+ }
26
+ }
27
+ /**
28
+ * #api
29
+ * The mate locString ("chr2:100") of a parsed breakend, or undefined when it
30
+ * names no navigable position. Two ALT forms reach here without one: a single
31
+ * breakend (`.A` / `G.`) has no mate at all, and the symbolic-mate forms
32
+ * (`G<DEL>`, `<DEL>G`) get a placeholder `<DEL>:1` from parseBreakend, which
33
+ * puts a symbolic allele id where a contig name belongs. Callers that navigate
34
+ * or split-view a mate must drop both rather than treat `<DEL>` as a refName.
35
+ */
36
+ export function getBreakendMateLocString(breakend) {
37
+ const matePosition = breakend?.MatePosition;
38
+ return matePosition === undefined || matePosition.startsWith('<')
39
+ ? undefined
40
+ : matePosition;
41
+ }
42
+ // VCF 4.5 computes END rather than storing it: a DEL, DUP, INV or CNV allele
43
+ // ends |SVLEN| bases past POS, SVLEN one value per ALT (one for all in files
44
+ // older than 4.4)
45
+ function spannedEnd(feature, alt, svlen, alleleIndex) {
46
+ if (!/^<(DEL|DUP|INV|CNV)[:>]/.test(alt) || !Array.isArray(svlen)) {
47
+ return undefined;
48
+ }
49
+ const len = Math.abs(Number(svlen.length === 1 ? svlen[0] : svlen[alleleIndex]));
50
+ return len > 0 ? feature.get('start') + 1 + len : undefined;
51
+ }
52
+ /**
53
+ * #api
54
+ * Parse raw (non-assembly-resolved) mate coordinates from a VCF SV feature+alt.
55
+ * Returns undefined when no mate coordinate info is found. `alleleIndex` is
56
+ * the alt's place in `ALT`, which a record repeating one symbolic allele with
57
+ * several lengths needs; it defaults to the first place `alt` appears.
58
+ */
59
+ export function parseSvAlt(feature, alt, alleleIndex = Math.max(0, feature.get('ALT')?.indexOf(alt ?? '') ?? 0)) {
60
+ const bnd = alt !== undefined ? safeParseBreakend(alt) : undefined;
61
+ const mateLocString = getBreakendMateLocString(bnd);
62
+ const refName = feature.get('refName');
63
+ if (alt !== undefined && SV_SYMBOLIC_ALLELES.some(a => alt.startsWith(a))) {
64
+ // An insertion has one end: its END, where a caller writes one, is POS.
65
+ if (alt.startsWith('<INS')) {
66
+ return undefined;
67
+ }
68
+ const info = feature.get('INFO');
69
+ const matePos = info?.END?.[0] ??
70
+ spannedEnd(feature, alt, info?.SVLEN, alleleIndex);
71
+ if (matePos === undefined) {
72
+ return undefined;
73
+ }
74
+ return {
75
+ mateRefName: info?.CHR2?.[0] ?? refName,
76
+ matePos,
77
+ };
78
+ }
79
+ else if (bnd !== undefined && mateLocString !== undefined) {
80
+ // Split at the LAST colon, the same rule `parseLocString` applies and for
81
+ // the same reason: a refName may contain one. GRCh38's full analysis set
82
+ // names its HLA contigs `HLA-A*01:01:01:01`, so a mate on one arrives here
83
+ // as `HLA-A*01:01:01:01:1000` and splitting at the first colon read the
84
+ // chromosome as `HLA-A*01` and the position as 1.
85
+ const colon = mateLocString.lastIndexOf(':');
86
+ const mateRefName = mateLocString.slice(0, colon);
87
+ const matePosStr = mateLocString.slice(colon + 1);
88
+ const matePos = Number(matePosStr);
89
+ // A position that is not a 1-based coordinate is not a location. Returning
90
+ // one anyway put it through `svMateLocus` into a fetch region and a panel's
91
+ // `centerAt`, neither of which reports anything. `Number` alone is too
92
+ // generous to screen on: it reads `''` as 0 and `'0x10'` as 16.
93
+ if (colon <= 0 || !/^\d+$/.test(matePosStr) || matePos < 1) {
94
+ return undefined;
95
+ }
96
+ return { mateRefName, matePos, ...breakendKeepsDirections(bnd) };
97
+ }
98
+ return undefined;
99
+ }
100
+ /**
101
+ * #api
102
+ * Which way the sequence each end of a breakend KEEPS runs from its breakpoint,
103
+ * as `+1 = right` / `-1 = left` — the convention `StarFusionAdapter`'s
104
+ * `tickDirection` states and the one every producer in the tree emits.
105
+ *
106
+ * The two halves read their strings with OPPOSITE polarity, which is the whole
107
+ * reason to state them together. `Join: 'right'` says the mate piece is joined
108
+ * to the RIGHT of the ref base, so this end keeps the sequence to its left:
109
+ * negated. `MateDirection: 'right'` says the mate's own piece extends to the
110
+ * right of the mate position, which is already the direction it keeps: taken as
111
+ * read. So `N[chr2:2000[` is `{ joinDirection: -1, mateDirection: 1 }`, and that
112
+ * is the same pair `StarFusionAdapter` emits for the fusion it describes — the
113
+ * donor keeps the sequence below its breakpoint (-1) and the acceptor the
114
+ * sequence above its own (+1).
115
+ *
116
+ * Split out of `parseSvAlt` because a consumer holding an already-parsed
117
+ * `Breakend` was re-deriving it by hand, in two adjacent ternaries of opposite
118
+ * polarity — the shape that produced 78bb7b84f9.
119
+ */
120
+ export function breakendKeepsDirections(bnd) {
121
+ return {
122
+ mateDirection: bnd.MateDirection === 'left' ? -1 : 1,
123
+ joinDirection: bnd.Join === 'left' ? 1 : -1,
124
+ };
125
+ }
126
+ /**
127
+ * #api
128
+ * Breakend notation, without parsing it: bracket forms (`G[chr2:100[`), single
129
+ * breakends (`.A` / `G.`), and the symbolic-mate form (`G<DEL>`, an angle
130
+ * bracket past position 0; a leading `<` is a plain symbolic allele).
131
+ */
132
+ export function isBreakend(alt) {
133
+ return (alt.includes('[') ||
134
+ alt.includes(']') ||
135
+ alt.startsWith('.') ||
136
+ alt.endsWith('.') ||
137
+ alt.lastIndexOf('<') > 0);
138
+ }
139
+ /**
140
+ * #api
141
+ * The conventional size floor for calling a sequence indel structural.
142
+ */
143
+ export const SV_MIN_LENGTH = 50;
144
+ const CLASS_OF_TOKEN = {
145
+ DEL: 'DEL',
146
+ DUP: 'DUP',
147
+ INS: 'INS',
148
+ INV: 'INV',
149
+ CNV: 'CNV',
150
+ TR: 'TR',
151
+ VNTR: 'TR',
152
+ BND: 'BND',
153
+ TRA: 'BND',
154
+ CTX: 'BND',
155
+ CPX: 'CPX',
156
+ INVDUP: 'CPX',
157
+ CHROMOTHRIPSIS: 'CPX',
158
+ CHROMOPLEXY: 'CPX',
159
+ BFB: 'CPX',
160
+ DOUBLEMINUTE: 'CPX',
161
+ };
162
+ // gVCF's `<NON_REF>` and bcftools mpileup's `<*>` stand for whatever allele
163
+ // the caller did not name, not for a structure.
164
+ const ANY_OTHER_ALLELE = new Set(['<NON_REF>', '<*>']);
165
+ /**
166
+ * #api
167
+ * The class a symbolic allele id, `SVTYPE` or `EVENTTYPE` names. A subtype folds
168
+ * into its first level (`DEL:ME:ALU` is DEL, `DUP:TANDEM` DUP), except the
169
+ * tandem repeats VCF 4.4 spells `CNV:TR` and ExpansionHunter `STRn`, and the
170
+ * inverted duplication `INV:DUP`. 1000 Genomes' `CNn` counts one haplotype's
171
+ * copies, so none is a deletion and two or more a duplication. `''` for an
172
+ * empty or missing token.
173
+ */
174
+ export function svClassOfToken(raw) {
175
+ const token = raw.trim().toUpperCase();
176
+ if (token === '' || token === '.') {
177
+ return '';
178
+ }
179
+ if (token === 'CNV:TR') {
180
+ return 'TR';
181
+ }
182
+ if (token === 'INV:DUP') {
183
+ return 'CPX';
184
+ }
185
+ const first = token.split(':')[0];
186
+ const copies = /^CN(\d+)$/.exec(first);
187
+ if (copies) {
188
+ const n = Number(copies[1]);
189
+ return n === 0 ? 'DEL' : n === 1 ? 'CNV' : 'DUP';
190
+ }
191
+ return /^STR\d*$/.test(first) ? 'TR' : (CLASS_OF_TOKEN[first] ?? 'OTHER');
192
+ }
193
+ // an INFO token one allele states: its own entry of a Number=A field, or the
194
+ // one entry a record-wide field has
195
+ function alleleToken(info, key, alleleIndex) {
196
+ const value = info?.[key];
197
+ const list = Array.isArray(value) ? value : [value];
198
+ const token = list.length === 1 ? list[0] : list[alleleIndex];
199
+ return typeof token === 'string' ? token : '';
200
+ }
201
+ /**
202
+ * #api
203
+ * The structural-variant class one ALT allele states, `''` for one that is not
204
+ * structural. A symbolic allele's own id wins. Otherwise VCF 4.4's `EVENTTYPE`
205
+ * does; then a breakend is the class its `SVTYPE` declares where that says more
206
+ * than BND, and a sequence allele is an insertion or deletion by its length
207
+ * against REF, else its `SVTYPE`'s class.
208
+ */
209
+ export function svClassOfAlt(alt, { ref, info, alleleIndex = 0, } = {}) {
210
+ if (ANY_OTHER_ALLELE.has(alt)) {
211
+ return '';
212
+ }
213
+ if (alt.startsWith('<') && alt.endsWith('>')) {
214
+ return svClassOfToken(alt.slice(1, -1));
215
+ }
216
+ const event = svClassOfToken(alleleToken(info, 'EVENTTYPE', alleleIndex));
217
+ if (event) {
218
+ return event;
219
+ }
220
+ const declared = svClassOfToken(alleleToken(info, 'SVTYPE', alleleIndex));
221
+ if (isBreakend(alt)) {
222
+ return declared && declared !== 'BND' && declared !== 'OTHER'
223
+ ? declared
224
+ : 'BND';
225
+ }
226
+ const diff = alt.length - (ref?.length ?? alt.length);
227
+ return diff >= SV_MIN_LENGTH
228
+ ? 'INS'
229
+ : diff <= -SV_MIN_LENGTH
230
+ ? 'DEL'
231
+ : declared;
232
+ }
233
+ /**
234
+ * #api
235
+ * The structural-variant class of a VCF record as a whole: the one class its
236
+ * alleles state, CNV where they are losses and gains of one segment, OTHER
237
+ * where they otherwise disagree, and `''` for a record with no structural
238
+ * allele.
239
+ */
240
+ export function svClassOf(feature) {
241
+ const alts = feature.get('ALT');
242
+ const ref = feature.get('REF');
243
+ const info = feature.get('INFO');
244
+ if (!alts?.length) {
245
+ return svClassOfToken(alleleToken(info, 'SVTYPE', 0));
246
+ }
247
+ const classes = new Set();
248
+ for (const [alleleIndex, alt] of alts.entries()) {
249
+ const found = svClassOfAlt(alt, { ref, info, alleleIndex });
250
+ if (found) {
251
+ classes.add(found);
252
+ }
253
+ }
254
+ const [only, ...rest] = classes;
255
+ return rest.length === 0
256
+ ? (only ?? '')
257
+ : [...classes].every(c => c === 'DEL' || c === 'DUP' || c === 'CNV')
258
+ ? 'CNV'
259
+ : 'OTHER';
260
+ }
261
+ // Read the mate destination from a VCF translocation INFO record. CHR2/END
262
+ // give the mate ref+position; STRANDS[0] is a two-char code (e.g. "+-") where
263
+ // the first char is this side's strand and the second is the mate's. Returns
264
+ // undefined when CHR2/END aren't both present.
265
+ export function readTranslocationMate(info) {
266
+ const chr = info.CHR2?.[0];
267
+ const pos = info.END?.[0];
268
+ if (chr === undefined || pos === undefined) {
269
+ return undefined;
270
+ }
271
+ const [myDir, mateDir] = info.STRANDS?.[0]?.split('') ?? ['.', '.'];
272
+ // A STRANDS char names the strand the record is ON, and an end on `+` keeps
273
+ // the sequence to its LEFT — so the keeps-direction (`breakendKeepsDirections`,
274
+ // +1 = right) is its negation. Resolved here so the one consumer that draws
275
+ // these as ticks does not have to know that, which is how the two conventions
276
+ // came to sit a negation apart in the first place.
277
+ const sign = (s) => (s === '+' ? -1 : s === '-' ? 1 : 0);
278
+ return {
279
+ chr,
280
+ pos,
281
+ myDir: myDir ?? '.',
282
+ mateDir: mateDir ?? '.',
283
+ myKeepsDir: sign(myDir ?? '.'),
284
+ mateKeepsDir: sign(mateDir ?? '.'),
285
+ };
286
+ }
287
+ // A BEDPE strand names the side of the block the junction is on: `+` its end,
288
+ // so the block keeps the sequence to its left.
289
+ function keepsOf(mateDirection, strand) {
290
+ if (typeof mateDirection === 'number') {
291
+ return mateDirection;
292
+ }
293
+ return strand === 1 ? -1 : strand === -1 ? 1 : 0;
294
+ }
295
+ function joinBase(self, other) {
296
+ const keeps = self.keeps || (self.start + self.end <= other.start + other.end ? -1 : 1);
297
+ return keeps === -1 ? self.end - 1 : self.start;
298
+ }
299
+ function symbolicKeeps(feature, alt) {
300
+ if (alt.startsWith('<DEL')) {
301
+ return [-1, 1];
302
+ }
303
+ if (alt.startsWith('<DUP')) {
304
+ return [1, -1];
305
+ }
306
+ const tra = readTranslocationMate(feature.get('INFO') ?? {});
307
+ return [tra?.myKeepsDir ?? 0, tra?.mateKeepsDir ?? 0];
308
+ }
309
+ /**
310
+ * #api
311
+ * Where a paired record's junction is at each of its two ends, and which side
312
+ * of it each end keeps — the one answer every launcher, the row menu and the
313
+ * chain walk take, whether the record is a VCF breakend, a symbolic SV or a
314
+ * paired adapter's row (BEDPE, STAR-Fusion). Refnames are as the record spells
315
+ * them. `undefined` for a record naming no other end. A VCF record is read
316
+ * through `alt`, its first ALT unless the caller names another.
317
+ *
318
+ * A VCF end is its own position. A paired adapter's end is a block, and the
319
+ * junction is the block's edge on the side the end keeps: stated by
320
+ * `mateDirection` where the adapter knows it, read off the strands where the
321
+ * record states one for each end as BEDPE does, and with neither the two
322
+ * blocks face each other. A PAF row's strand is the query's orientation and
323
+ * states none for the target, so it names no side.
324
+ */
325
+ export function junctionEnds(feature, alt = feature.get('ALT')?.[0], alleleIndex) {
326
+ const refName = feature.get('refName');
327
+ const mate = feature.get('mate');
328
+ if (mate?.refName !== undefined && mate.start !== undefined) {
329
+ const sided = mate.strand !== undefined;
330
+ const self = {
331
+ start: feature.get('start'),
332
+ end: feature.get('end'),
333
+ keeps: keepsOf(feature.get('mateDirection'), sided ? feature.get('strand') : undefined),
334
+ };
335
+ const far = {
336
+ start: mate.start,
337
+ end: mate.end ?? mate.start + 1,
338
+ keeps: keepsOf(mate.mateDirection, mate.strand),
339
+ };
340
+ return {
341
+ own: { refName, pos: joinBase(self, far), keeps: self.keeps },
342
+ mate: {
343
+ refName: mate.refName,
344
+ pos: joinBase(far, self),
345
+ keeps: far.keeps,
346
+ },
347
+ };
348
+ }
349
+ const parsed = parseSvAlt(feature, alt, alleleIndex);
350
+ if (!parsed || alt === undefined) {
351
+ return undefined;
352
+ }
353
+ const [ownKeeps, mateKeeps] = parsed.joinDirection === undefined
354
+ ? symbolicKeeps(feature, alt)
355
+ : [parsed.joinDirection, parsed.mateDirection ?? 0];
356
+ return {
357
+ own: { refName, pos: feature.get('start'), keeps: ownKeeps },
358
+ mate: {
359
+ refName: parsed.mateRefName,
360
+ pos: parsed.matePos - 1,
361
+ keeps: mateKeeps,
362
+ },
363
+ };
364
+ }
@@ -5,3 +5,14 @@ export declare function getStrokeProps(str: string): {
5
5
  export declare function getFillProps(str: string): {
6
6
  [x: string]: string | number;
7
7
  };
8
+ /**
9
+ * A paint value split into the `rgb()` an SVG 1.1 `<color>` can carry and the
10
+ * alpha it cannot, for a separate `*-opacity`. Illustrator and older Inkscape
11
+ * drop an element whose fill they cannot parse, so `rgba()`, `hsl()`, `#rgba`
12
+ * and `transparent` have to be split before they reach a file. Undefined for a
13
+ * value that is already an SVG color, `none` or a `url()`.
14
+ */
15
+ export declare function splitPaintAlpha(value: string): {
16
+ color: string;
17
+ opacity: number;
18
+ } | undefined;
@@ -1,4 +1,4 @@
1
- import { formatHEX, getAlpha, newColor, parseCssColorOr } from './colorBits.js';
1
+ import { formatHEX, getAlpha, getBlue, getGreen, getRed, newColor, parseCssColorOr, } from './colorBits.js';
2
2
  // Matches colord()'s fallback for unparsable input.
3
3
  const FALLBACK = newColor(0, 0, 0, 255);
4
4
  // Works on the packed Color directly rather than via colord(): these run per
@@ -26,3 +26,30 @@ export function getStrokeProps(str) {
26
26
  export function getFillProps(str) {
27
27
  return svgColorProps(str, 'fill', 'fillOpacity');
28
28
  }
29
+ // four channels, comma- or slash-separated, so a three-channel `rgb(4,5,6)`
30
+ // never reads its blue as an alpha
31
+ const FUNCTIONAL_ALPHA = /^(?:rgb|hsl)a?\((?:[^,/)]+,){3}\s*([\d.]+)(%?)\s*\)$|^(?:rgb|hsl)a?\([^,/)]+\/\s*([\d.]+)(%?)\s*\)$/i;
32
+ const HEX_ALPHA = /^#(?:[\da-f]{4}|[\da-f]{8})$/i;
33
+ const NOT_SVG_COLOR = /^(?:rgba|hsla?)\(|^transparent$/i;
34
+ /**
35
+ * A paint value split into the `rgb()` an SVG 1.1 `<color>` can carry and the
36
+ * alpha it cannot, for a separate `*-opacity`. Illustrator and older Inkscape
37
+ * drop an element whose fill they cannot parse, so `rgba()`, `hsl()`, `#rgba`
38
+ * and `transparent` have to be split before they reach a file. Undefined for a
39
+ * value that is already an SVG color, `none` or a `url()`.
40
+ */
41
+ export function splitPaintAlpha(value) {
42
+ const m = FUNCTIONAL_ALPHA.exec(value);
43
+ if (!m && !HEX_ALPHA.test(value) && !NOT_SVG_COLOR.test(value)) {
44
+ return undefined;
45
+ }
46
+ const c = parseCssColorOr(value, FALLBACK);
47
+ const digits = m?.[1] ?? m?.[3];
48
+ const percent = (m?.[2] ?? m?.[4]) === '%';
49
+ return {
50
+ color: `rgb(${getRed(c)},${getGreen(c)},${getBlue(c)})`,
51
+ opacity: digits === undefined
52
+ ? getAlpha(c) / 255
53
+ : Math.min(1, Number(digits) / (percent ? 100 : 1)),
54
+ };
55
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Whether the OS asks for a dark UI. False wherever `matchMedia` is missing — a
3
+ * worker, jsdom, node — which is the light theme JBrowse has always started in.
4
+ */
5
+ export declare function prefersDarkColorScheme(): boolean;
6
+ /**
7
+ * Call `listener` whenever the OS preference flips, and return the unsubscribe.
8
+ * Both halves live here rather than beside either caller because the session's
9
+ * `system` theme and the embedding hook `useSessionPalette` are two readers of
10
+ * one preference, and a second spelling of the query is a second answer.
11
+ */
12
+ export declare function onColorSchemeChange(listener: () => void): () => void;
@@ -0,0 +1,27 @@
1
+ const DARK_SCHEME = '(prefers-color-scheme: dark)';
2
+ function darkSchemeQuery() {
3
+ return typeof window !== 'undefined' &&
4
+ typeof window.matchMedia === 'function'
5
+ ? window.matchMedia(DARK_SCHEME)
6
+ : undefined;
7
+ }
8
+ /**
9
+ * Whether the OS asks for a dark UI. False wherever `matchMedia` is missing — a
10
+ * worker, jsdom, node — which is the light theme JBrowse has always started in.
11
+ */
12
+ export function prefersDarkColorScheme() {
13
+ return darkSchemeQuery()?.matches ?? false;
14
+ }
15
+ /**
16
+ * Call `listener` whenever the OS preference flips, and return the unsubscribe.
17
+ * Both halves live here rather than beside either caller because the session's
18
+ * `system` theme and the embedding hook `useSessionPalette` are two readers of
19
+ * one preference, and a second spelling of the query is a second answer.
20
+ */
21
+ export function onColorSchemeChange(listener) {
22
+ const media = darkSchemeQuery();
23
+ media?.addEventListener('change', listener);
24
+ return () => {
25
+ media?.removeEventListener('change', listener);
26
+ };
27
+ }
@@ -1,5 +1,4 @@
1
1
  import type { StatusCallback } from './progress.ts';
2
- import type { StopToken } from './stopToken.ts';
3
2
  /**
4
3
  * A raw tabix line paired with the metadata the GFF3/GTF adapters need before
5
4
  * parsing: `offset` (the tabix byte offset) mints a stable per-feature id that
@@ -34,20 +33,26 @@ interface TabixLineSource {
34
33
  * label, capturing each line's byte offset, indexed start/end, and feature type
35
34
  * into a {@link TabixLine}. Shared by the GFF3 and GTF tabix adapters.
36
35
  *
37
- * The stop token becomes the read's `AbortSignal`, so a cancelled fetch drops
36
+ * The signal becomes the read's `AbortSignal`, so a cancelled fetch drops
38
37
  * its block reads at the socket instead of downloading them and discarding the
39
38
  * lines. @gmod/tabix aborts a block shared between callers only once every
40
39
  * joined caller has aborted (`AggregateAbortController`), so this can't cancel a
41
40
  * chunk another region still needs.
42
41
  */
43
- export declare function readTabixLines(gff: TabixLineSource, refName: string, start: number, end: number, statusCallback?: StatusCallback, stopToken?: StopToken): Promise<TabixLine[]>;
42
+ export declare function readTabixLines(gff: TabixLineSource, refName: string, start: number, end: number, statusCallback?: StatusCallback, signal?: AbortSignal): Promise<TabixLine[]>;
44
43
  /**
45
44
  * Read a region's tabix lines, then — if any feature found there extends past
46
45
  * the query — read the overhang on either side, so a parent line's children (a
47
46
  * gene's exons, a transcript's CDS) outside the original window are pulled in
48
- * and the parent/child tree resolves fully. Types in `dontRedispatchSet` are
49
- * excluded from the bounds, so one chromosome-spanning record can't force a
50
- * whole-chromosome refetch.
47
+ * and the parent/child tree resolves fully. `expands` decides which lines widen
48
+ * the bound, so one chromosome-spanning record can't force a whole-chromosome
49
+ * refetch; {@link calculateRedispatchRange} says why that is a predicate.
50
+ *
51
+ * **There is one control, and skipping the expansion is a value of it**: an
52
+ * `expands` that admits nothing reads the query and stops. A caller that wants
53
+ * that says so to its adapter, which is the layer that knows whether its format
54
+ * can honour it — see `Gff3TabixAdapter`, and `GtfTabixAdapter` for a format
55
+ * that cannot.
51
56
  *
52
57
  * **The flanks, not the union.** Re-reading `[minStart, maxEnd]` returns
53
58
  * everything the first read already had — a second full read of the query range
@@ -76,16 +81,18 @@ export declare function readTabixLinesRedispatched(file: TabixLineSource, query:
76
81
  refName: string;
77
82
  start: number;
78
83
  end: number;
79
- }, dontRedispatchSet: Set<string>, opts?: {
84
+ }, expands: (line: TabixLine) => boolean, opts?: {
80
85
  statusCallback?: StatusCallback;
81
- stopToken?: StopToken;
86
+ signal?: AbortSignal;
82
87
  }): Promise<TabixLine[]>;
83
88
  /**
84
89
  * Minimal structural view of the `@gmod/tabix` call a header read needs, kept
85
90
  * structural for the same reason as {@link TabixLineSource}.
86
91
  */
87
92
  interface TabixHeaderSource {
88
- getHeaderLines(): Promise<string[]>;
93
+ getHeaderLines(opts?: {
94
+ signal?: AbortSignal;
95
+ }): Promise<string[]>;
89
96
  }
90
97
  /**
91
98
  * The header lines of a tabix-indexed file, however that file kept them.
@@ -116,5 +123,7 @@ interface TabixHeaderSource {
116
123
  * commented block and then the counted rows used to fetch and decompress the
117
124
  * same bytes twice, which every bare-header file did on every call.
118
125
  */
119
- export declare function readTabixHeaderLines(file: TabixHeaderSource): Promise<string[]>;
126
+ export declare function readTabixHeaderLines(file: TabixHeaderSource, opts?: {
127
+ signal?: AbortSignal;
128
+ }): Promise<string[]>;
120
129
  export {};