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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. package/README.md +1709 -390
  2. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +3 -2
  3. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +5 -5
  4. package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +3 -5
  5. package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +34 -29
  6. package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCard.js +1 -4
  7. package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.d.ts +11 -0
  8. package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.js +37 -14
  9. package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.d.ts +1 -1
  10. package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.js +15 -31
  11. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.d.ts +4 -3
  12. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.js +12 -25
  13. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.d.ts +11 -0
  14. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.js +11 -0
  15. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.d.ts +8 -0
  16. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.js +24 -0
  17. package/esm/BaseFeatureWidget/BaseFeatureDetail/Formatter.js +6 -4
  18. package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.d.ts +4 -0
  19. package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.js +17 -0
  20. package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.d.ts +3 -2
  21. package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +5 -3
  22. package/esm/BaseFeatureWidget/BaseFeatureDetail/index.d.ts +6 -2
  23. package/esm/BaseFeatureWidget/BaseFeatureDetail/index.js +7 -18
  24. package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.d.ts +16 -0
  25. package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.js +49 -0
  26. package/esm/BaseFeatureWidget/BaseFeatureDetail/util.d.ts +0 -8
  27. package/esm/BaseFeatureWidget/BaseFeatureDetail/util.js +6 -29
  28. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceContents.js +7 -34
  29. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeaturePanel.d.ts +2 -2
  30. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceName.js +2 -2
  31. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.js +3 -1
  32. package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.d.ts +12 -0
  33. package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.js +12 -5
  34. package/esm/BaseFeatureWidget/SequenceFeatureDetails/useSequenceData.js +8 -5
  35. package/esm/BaseFeatureWidget/configSchema.d.ts +1 -1
  36. package/esm/BaseFeatureWidget/formatDetails.d.ts +13 -29
  37. package/esm/BaseFeatureWidget/formatDetails.js +62 -83
  38. package/esm/BaseFeatureWidget/index.d.ts +2 -1
  39. package/esm/BaseFeatureWidget/stateModelFactory.d.ts +42 -29
  40. package/esm/BaseFeatureWidget/stateModelFactory.js +98 -98
  41. package/esm/BaseFeatureWidget/types.d.ts +12 -6
  42. package/esm/BaseFeatureWidget/util.d.ts +0 -10
  43. package/esm/BaseFeatureWidget/util.js +0 -17
  44. package/esm/CorePlugin.js +34 -3
  45. package/esm/PluginLoader.d.ts +24 -13
  46. package/esm/PluginLoader.js +167 -51
  47. package/esm/PluginManager.d.ts +130 -24
  48. package/esm/PluginManager.js +180 -32
  49. package/esm/ReExports/MuiDataGridReExports.d.ts +1 -0
  50. package/esm/ReExports/MuiDataGridReExports.js +2 -2
  51. package/esm/ReExports/coreModules.generated.d.ts +2 -0
  52. package/esm/ReExports/coreModules.generated.js +530 -0
  53. package/esm/ReExports/coreWorkerModules.generated.d.ts +2 -0
  54. package/esm/ReExports/coreWorkerModules.generated.js +490 -0
  55. package/esm/ReExports/frameworkModules.d.ts +2 -0
  56. package/esm/ReExports/frameworkModules.js +68 -0
  57. package/esm/ReExports/frameworkShared.d.ts +12 -0
  58. package/esm/ReExports/frameworkShared.js +16 -0
  59. package/esm/ReExports/frameworkWorkerModules.generated.d.ts +2 -0
  60. package/esm/ReExports/frameworkWorkerModules.generated.js +130 -0
  61. package/esm/ReExports/list.js +528 -79
  62. package/esm/ReExports/modules.d.ts +1 -1
  63. package/esm/ReExports/modules.js +10 -165
  64. package/esm/ReExports/registry.d.ts +1 -0
  65. package/esm/ReExports/registry.js +23 -5
  66. package/esm/ReExports/uiStub.d.ts +3 -0
  67. package/esm/ReExports/uiStub.js +33 -0
  68. package/esm/ReExports/workerModules.d.ts +2 -0
  69. package/esm/ReExports/workerModules.js +11 -0
  70. package/esm/TextSearch/TextSearchManager.d.ts +27 -13
  71. package/esm/TextSearch/TextSearchManager.js +77 -36
  72. package/esm/TextSearch/places.d.ts +12 -0
  73. package/esm/TextSearch/places.js +94 -0
  74. package/esm/assemblyManager/assembly.d.ts +21 -19
  75. package/esm/assemblyManager/assembly.js +28 -26
  76. package/esm/assemblyManager/assemblyAdapters.d.ts +1 -1
  77. package/esm/assemblyManager/assemblyAdapters.js +8 -2
  78. package/esm/assemblyManager/assemblyConfigSchema.d.ts +31 -90
  79. package/esm/assemblyManager/assemblyConfigSchema.js +35 -47
  80. package/esm/assemblyManager/assemblyManager.d.ts +35 -180
  81. package/esm/assemblyManager/assemblyManager.js +47 -51
  82. package/esm/assemblyManager/expandAssemblyConfigShorthand.d.ts +25 -18
  83. package/esm/assemblyManager/expandAssemblyConfigShorthand.js +78 -49
  84. package/esm/assemblyManager/geneticCodes.js +2 -5
  85. package/esm/assemblyManager/getSequenceAdapterConfig.d.ts +10 -0
  86. package/esm/assemblyManager/getSequenceAdapterConfig.js +10 -0
  87. package/esm/assemblyManager/indexAssemblyNames.d.ts +9 -0
  88. package/esm/assemblyManager/indexAssemblyNames.js +22 -0
  89. package/esm/assemblyManager/loadRefNameMap.d.ts +1 -1
  90. package/esm/assemblyManager/loadRefNameMap.js +4 -9
  91. package/esm/assemblyManager/refNameMapKey.d.ts +7 -0
  92. package/esm/assemblyManager/refNameMapKey.js +12 -0
  93. package/esm/checkPlugins.d.ts +2 -0
  94. package/esm/checkPlugins.js +38 -17
  95. package/esm/configuration/bamIndexFields.d.ts +49 -0
  96. package/esm/configuration/bamIndexFields.js +41 -0
  97. package/esm/configuration/configurationSchema.d.ts +101 -71
  98. package/esm/configuration/configurationSchema.js +207 -134
  99. package/esm/configuration/configurationSchemaUnion.d.ts +39 -0
  100. package/esm/configuration/configurationSchemaUnion.js +56 -0
  101. package/esm/configuration/configurationSlot.d.ts +150 -60
  102. package/esm/configuration/configurationSlot.js +103 -75
  103. package/esm/configuration/fillLocations.d.ts +14 -0
  104. package/esm/configuration/fillLocations.js +14 -0
  105. package/esm/configuration/formatAboutConfigSchema.d.ts +7 -21
  106. package/esm/configuration/formatDetailsConfigSchema.d.ts +11 -37
  107. package/esm/configuration/formatDetailsConfigSchema.js +10 -13
  108. package/esm/configuration/fullConfSnapshot.d.ts +4 -19
  109. package/esm/configuration/fullConfSnapshot.js +30 -52
  110. package/esm/configuration/getConf.d.ts +45 -41
  111. package/esm/configuration/getConf.js +111 -44
  112. package/esm/configuration/index.d.ts +26 -11
  113. package/esm/configuration/index.js +16 -7
  114. package/esm/configuration/indexType.d.ts +26 -0
  115. package/esm/configuration/indexType.js +38 -0
  116. package/esm/configuration/mergeFormatCallbacks.d.ts +6 -7
  117. package/esm/configuration/mergeFormatCallbacks.js +13 -10
  118. package/esm/configuration/plot.d.ts +61 -0
  119. package/esm/configuration/plot.js +142 -0
  120. package/esm/configuration/readConfObject.d.ts +2 -24
  121. package/esm/configuration/readConfObject.js +20 -63
  122. package/esm/configuration/requirements.d.ts +37 -0
  123. package/esm/configuration/requirements.js +88 -0
  124. package/esm/configuration/schemaRegistry.d.ts +32 -15
  125. package/esm/configuration/schemaRegistry.js +33 -35
  126. package/esm/configuration/schemaTypes.d.ts +21 -5
  127. package/esm/configuration/schemaTypes.js +66 -55
  128. package/esm/configuration/slotFacade.d.ts +12 -29
  129. package/esm/configuration/slotFacade.js +44 -23
  130. package/esm/configuration/snapshotPreprocess.d.ts +43 -0
  131. package/esm/configuration/snapshotPreprocess.js +161 -0
  132. package/esm/configuration/tabixIndexFields.d.ts +30 -4
  133. package/esm/configuration/tabixIndexFields.js +21 -4
  134. package/esm/configuration/tabixShorthand.d.ts +34 -17
  135. package/esm/configuration/tabixShorthand.js +49 -22
  136. package/esm/configuration/types.d.ts +182 -43
  137. package/esm/configuration/uriShorthand.d.ts +9 -0
  138. package/esm/configuration/uriShorthand.js +16 -0
  139. package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +13 -19
  140. package/esm/data_adapters/BaseAdapter/BaseAdapter.js +12 -19
  141. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +40 -2
  142. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +68 -5
  143. package/esm/data_adapters/BaseAdapter/featureDensity.d.ts +40 -0
  144. package/esm/data_adapters/BaseAdapter/featureDensity.js +31 -0
  145. package/esm/data_adapters/BaseAdapter/index.d.ts +23 -3
  146. package/esm/data_adapters/BaseAdapter/index.js +1 -0
  147. package/esm/data_adapters/BaseAdapter/rowSources.d.ts +37 -0
  148. package/esm/data_adapters/BaseAdapter/rowSources.js +7 -0
  149. package/esm/data_adapters/BaseAdapter/stats.d.ts +33 -1
  150. package/esm/data_adapters/BaseAdapter/stats.js +52 -13
  151. package/esm/data_adapters/BaseAdapter/types.d.ts +8 -12
  152. package/esm/data_adapters/BaseAdapter/zoomRange.d.ts +10 -0
  153. package/esm/data_adapters/CytobandAdapter/CytobandAdapter.js +1 -1
  154. package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +7 -11
  155. package/esm/data_adapters/CytobandAdapter/configSchema.js +3 -17
  156. package/esm/data_adapters/dataAdapterCache.d.ts +19 -2
  157. package/esm/data_adapters/dataAdapterCache.js +44 -10
  158. package/esm/data_adapters/getFeatureAdapter.d.ts +6 -4
  159. package/esm/data_adapters/getFeatureAdapter.js +8 -8
  160. package/esm/data_adapters/getSequenceSubAdapter.d.ts +7 -9
  161. package/esm/data_adapters/getSequenceSubAdapter.js +8 -10
  162. package/esm/pluggableElementTypes/AdapterType.d.ts +8 -8
  163. package/esm/pluggableElementTypes/AdapterType.js +1 -1
  164. package/esm/pluggableElementTypes/DisplayType.d.ts +53 -16
  165. package/esm/pluggableElementTypes/DisplayType.js +28 -12
  166. package/esm/pluggableElementTypes/LazyStateModelElement.d.ts +32 -0
  167. package/esm/pluggableElementTypes/LazyStateModelElement.js +77 -0
  168. package/esm/pluggableElementTypes/PluggableElementBase.d.ts +3 -5
  169. package/esm/pluggableElementTypes/PluggableElementBase.js +3 -5
  170. package/esm/pluggableElementTypes/RpcMethodType.d.ts +11 -1
  171. package/esm/pluggableElementTypes/RpcMethodType.js +25 -9
  172. package/esm/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.d.ts +1 -2
  173. package/esm/pluggableElementTypes/TextSearchAdapterType.d.ts +7 -7
  174. package/esm/pluggableElementTypes/ViewType.d.ts +20 -4
  175. package/esm/pluggableElementTypes/ViewType.js +32 -4
  176. package/esm/pluggableElementTypes/WidgetType.d.ts +6 -0
  177. package/esm/pluggableElementTypes/WidgetType.js +6 -0
  178. package/esm/pluggableElementTypes/addMenuItems.d.ts +3 -2
  179. package/esm/pluggableElementTypes/extendElementType.d.ts +1 -2
  180. package/esm/pluggableElementTypes/extendElementType.js +9 -5
  181. package/esm/pluggableElementTypes/index.d.ts +2 -1
  182. package/esm/pluggableElementTypes/index.js +2 -9
  183. package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +19 -9
  184. package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +122 -28
  185. package/esm/pluggableElementTypes/models/BaseDisplayModel.js +155 -11
  186. package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +65 -16
  187. package/esm/pluggableElementTypes/models/BaseTrackModel.js +179 -117
  188. package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +87 -18
  189. package/esm/pluggableElementTypes/models/BaseViewModel.js +54 -11
  190. package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +26 -16
  191. package/esm/pluggableElementTypes/models/assertDisplayContract.d.ts +15 -11
  192. package/esm/pluggableElementTypes/models/assertDisplayContract.js +25 -32
  193. package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +22 -18
  194. package/esm/pluggableElementTypes/models/baseConnectionConfig.js +5 -5
  195. package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +26 -31
  196. package/esm/pluggableElementTypes/models/baseTrackConfig.d.ts +108 -147
  197. package/esm/pluggableElementTypes/models/baseTrackConfig.js +96 -73
  198. package/esm/pluggableElementTypes/models/components/SaveTrackData.js +4 -6
  199. package/esm/pluggableElementTypes/models/components/fetchTrackData.d.ts +3 -4
  200. package/esm/pluggableElementTypes/models/components/fetchTrackData.js +3 -3
  201. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +23 -13
  202. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +80 -48
  203. package/esm/pluggableElementTypes/models/index.d.ts +2 -3
  204. package/esm/pluggableElementTypes/models/index.js +2 -3
  205. package/esm/pluggableElementTypes/models/migrateTrackConfig.d.ts +15 -1
  206. package/esm/pluggableElementTypes/models/migrateTrackConfig.js +85 -25
  207. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.d.ts +4 -3
  208. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.js +141 -19
  209. package/esm/pluggableElementTypes/models/saveTrackFileTypes/types.d.ts +3 -3
  210. package/esm/pluginDefinitions.d.ts +34 -7
  211. package/esm/pluginDefinitions.js +54 -20
  212. package/esm/rpc/BaseRpcDriver.d.ts +2 -2
  213. package/esm/rpc/BaseRpcDriver.js +25 -30
  214. package/esm/rpc/MainThreadRpcDriver.d.ts +2 -2
  215. package/esm/rpc/MainThreadRpcDriver.js +13 -8
  216. package/esm/rpc/RpcClient.d.ts +18 -6
  217. package/esm/rpc/RpcClient.js +51 -16
  218. package/esm/rpc/RpcManager.d.ts +14 -10
  219. package/esm/rpc/RpcManager.js +11 -1
  220. package/esm/rpc/RpcRegistry.d.ts +40 -7
  221. package/esm/rpc/RpcServer.d.ts +3 -1
  222. package/esm/rpc/RpcServer.js +19 -12
  223. package/esm/rpc/WebWorkerRpcDriver.d.ts +11 -4
  224. package/esm/rpc/WebWorkerRpcDriver.js +64 -68
  225. package/esm/rpc/byteBudget.d.ts +20 -5
  226. package/esm/rpc/byteBudget.js +16 -5
  227. package/esm/rpc/configSchema.d.ts +7 -21
  228. package/esm/rpc/coreRpcMethods.d.ts +4 -0
  229. package/esm/rpc/coreRpcMethods.js +4 -0
  230. package/esm/rpc/methods/CoreGetEncodedFeature.d.ts +13 -0
  231. package/esm/rpc/methods/CoreGetEncodedFeature.js +32 -0
  232. package/esm/rpc/methods/CoreGetEncodedLayers.d.ts +16 -0
  233. package/esm/rpc/methods/CoreGetEncodedLayers.js +59 -0
  234. package/esm/rpc/methods/CoreGetExportData.js +3 -4
  235. package/esm/rpc/methods/CoreGetFeatureDensity.d.ts +11 -0
  236. package/esm/rpc/methods/CoreGetFeatureDensity.js +22 -0
  237. package/esm/rpc/methods/CoreGetFeatures.js +3 -5
  238. package/esm/rpc/methods/CoreGetRefNames.js +2 -12
  239. package/esm/rpc/methods/CoreGetRegionByteEstimate.js +1 -1
  240. package/esm/rpc/methods/CoreGetSequence.js +2 -2
  241. package/esm/rpc/methods/CoreLoadAdapterCode.d.ts +13 -0
  242. package/esm/rpc/methods/CoreLoadAdapterCode.js +16 -0
  243. package/esm/rpc/methods/layerFeatures.d.ts +33 -0
  244. package/esm/rpc/methods/layerFeatures.js +29 -0
  245. package/esm/svg/SvgExport.js +6 -7
  246. package/esm/svg/SvgThemeProviders.d.ts +12 -0
  247. package/esm/svg/SvgThemeProviders.js +15 -0
  248. package/esm/svg/exportViewSvg.d.ts +28 -0
  249. package/esm/svg/exportViewSvg.js +13 -0
  250. package/esm/svg/normalizeSvgMarkup.d.ts +7 -0
  251. package/esm/svg/normalizeSvgMarkup.js +99 -0
  252. package/esm/svg/serializeSvg.d.ts +7 -0
  253. package/esm/svg/serializeSvg.js +11 -0
  254. package/esm/svg/svgId.d.ts +1 -1
  255. package/esm/svg/svgId.js +1 -1
  256. package/esm/svg/svgReady.d.ts +9 -7
  257. package/esm/svg/svgReady.js +8 -7
  258. package/esm/svg/trackNames.d.ts +7 -5
  259. package/esm/svg/trackNames.js +12 -9
  260. package/esm/svg/wrapSvgExport.js +6 -74
  261. package/esm/ui/AddCustomPluginDialog.js +3 -8
  262. package/esm/ui/AppReadyMarker.d.ts +45 -0
  263. package/esm/ui/AppReadyMarker.js +89 -0
  264. package/esm/ui/BaseExportSvgDialog.d.ts +1 -1
  265. package/esm/ui/CascadingMenu.js +181 -104
  266. package/esm/ui/DropDownMenu.js +2 -1
  267. package/esm/ui/ErrorBanner.js +1 -1
  268. package/esm/ui/ErrorBoundary.d.ts +2 -2
  269. package/esm/ui/ErrorMessageStackTraceContents.js +2 -1
  270. package/esm/ui/ErrorMessageStackTraceDialog.js +5 -11
  271. package/esm/ui/ExportSvgDialog.d.ts +1 -1
  272. package/esm/ui/FileDropZone.js +2 -1
  273. package/esm/ui/FileSelector/useInternetAccounts.d.ts +156 -96
  274. package/esm/ui/HoverMenu.d.ts +1 -2
  275. package/esm/ui/HoverMenu.js +6 -3
  276. package/esm/ui/JexlFilterDialog.d.ts +13 -10
  277. package/esm/ui/JexlFilterDialog.js +122 -50
  278. package/esm/ui/JexlFilterRowEditors.d.ts +15 -0
  279. package/esm/ui/JexlFilterRowEditors.js +90 -0
  280. package/esm/ui/LazyBaseTooltip.d.ts +4 -0
  281. package/esm/ui/LazyBaseTooltip.js +9 -0
  282. package/esm/ui/LegendSwatchGlyph.js +26 -21
  283. package/esm/ui/LoadingOverlay.d.ts +14 -0
  284. package/esm/ui/LoadingOverlay.js +4 -2
  285. package/esm/ui/MenuTypes.d.ts +23 -53
  286. package/esm/ui/MenuTypes.js +3 -0
  287. package/esm/ui/MonospaceTextField.d.ts +2 -1
  288. package/esm/ui/MonospaceTextField.js +23 -20
  289. package/esm/ui/PaletteContext.d.ts +10 -5
  290. package/esm/ui/PaletteContext.js +44 -6
  291. package/esm/ui/RefNameAutocomplete/SearchOption.d.ts +13 -0
  292. package/esm/ui/RefNameAutocomplete/SearchOption.js +45 -0
  293. package/esm/ui/RefNameAutocomplete/index.d.ts +1 -2
  294. package/esm/ui/RefNameAutocomplete/index.js +8 -2
  295. package/esm/ui/RefNameAutocomplete/util.d.ts +13 -0
  296. package/esm/ui/RefNameAutocomplete/util.js +42 -1
  297. package/esm/ui/ResizeHandle.d.ts +3 -1
  298. package/esm/ui/ResizeHandle.js +44 -11
  299. package/esm/ui/ScrollChrome.d.ts +13 -0
  300. package/esm/ui/ScrollChrome.js +11 -0
  301. package/esm/ui/ScrollEdgeShadow.d.ts +6 -9
  302. package/esm/ui/ScrollEdgeShadow.js +14 -35
  303. package/esm/ui/ScrollZoomToggle.d.ts +4 -27
  304. package/esm/ui/ScrollZoomToggle.js +34 -51
  305. package/esm/ui/SessionJsonPanel.d.ts +3 -0
  306. package/esm/ui/SessionJsonPanel.js +14 -0
  307. package/esm/ui/SettingsChangesTable.d.ts +1 -0
  308. package/esm/ui/SettingsChangesTable.js +49 -11
  309. package/esm/ui/ShareLinkField.d.ts +1 -3
  310. package/esm/ui/ShareLinkField.js +13 -40
  311. package/esm/ui/SizeSliderRow.d.ts +1 -3
  312. package/esm/ui/SizeSliderRow.js +4 -6
  313. package/esm/ui/SnackbarModel.js +79 -67
  314. package/esm/ui/StatusProgressBar.js +2 -2
  315. package/esm/ui/SvgColorLegend.d.ts +9 -4
  316. package/esm/ui/SvgColorLegend.js +82 -41
  317. package/esm/ui/VerticalScrollbar.d.ts +13 -34
  318. package/esm/ui/VerticalScrollbar.js +29 -83
  319. package/esm/ui/ViewLoadingScreen.d.ts +5 -4
  320. package/esm/ui/ViewLoadingScreen.js +8 -32
  321. package/esm/ui/colorScale.d.ts +92 -0
  322. package/esm/ui/colorScale.js +72 -0
  323. package/esm/ui/colors.d.ts +64 -0
  324. package/esm/ui/colors.js +230 -1
  325. package/esm/ui/hoverBoxStyle.d.ts +14 -2
  326. package/esm/ui/hoverBoxStyle.js +17 -2
  327. package/esm/ui/index.d.ts +12 -12
  328. package/esm/ui/index.js +14 -22
  329. package/esm/ui/launchViewMenu.js +15 -5
  330. package/esm/ui/legendMenuItem.d.ts +10 -32
  331. package/esm/ui/legendMenuItem.js +9 -36
  332. package/esm/ui/legendSpec.d.ts +15 -8
  333. package/esm/ui/legendSpec.js +14 -23
  334. package/esm/ui/makeSizeMenu.d.ts +0 -6
  335. package/esm/ui/makeSizeMenu.js +6 -30
  336. package/esm/ui/measureLegendText.js +1 -1
  337. package/esm/ui/menuItemAdornment.d.ts +9 -20
  338. package/esm/ui/menuItemAdornment.js +10 -32
  339. package/esm/ui/menuItems.d.ts +2 -7
  340. package/esm/ui/menuItems.js +1 -6
  341. package/esm/ui/multiTrackMenuItems.d.ts +6 -0
  342. package/esm/ui/palette.d.ts +118 -116
  343. package/esm/ui/palette.js +114 -75
  344. package/esm/ui/replaceViewAction.d.ts +1 -1
  345. package/esm/ui/replaceViewAction.js +1 -1
  346. package/esm/ui/theme.d.ts +43 -119
  347. package/esm/ui/theme.js +62 -78
  348. package/esm/ui/toggleMenuItems.d.ts +1 -3
  349. package/esm/ui/toggleMenuItems.js +6 -5
  350. package/esm/ui/useAssemblySelection.d.ts +4 -4
  351. package/esm/ui/viewHeaderHeight.d.ts +1 -0
  352. package/esm/ui/viewHeaderHeight.js +1 -0
  353. package/esm/util/Base1DUtils.d.ts +5 -3
  354. package/esm/util/Base1DUtils.js +14 -6
  355. package/esm/util/Base1DViewModel.d.ts +2 -1
  356. package/esm/util/Base1DViewModel.js +3 -2
  357. package/esm/util/SvgCanvas.d.ts +15 -13
  358. package/esm/util/SvgCanvas.js +76 -56
  359. package/esm/util/TimeTraveller.d.ts +3 -0
  360. package/esm/util/TimeTraveller.js +34 -2
  361. package/esm/util/aborting.d.ts +39 -0
  362. package/esm/util/aborting.js +88 -6
  363. package/esm/util/adapterMetadata.d.ts +1 -1
  364. package/esm/util/adapterMetadata.js +6 -5
  365. package/esm/util/addAndShowTrack.d.ts +2 -5
  366. package/esm/util/addAndShowTrack.js +5 -1
  367. package/esm/util/addRelativeUris.d.ts +17 -5
  368. package/esm/util/addRelativeUris.js +46 -10
  369. package/esm/util/addTrackFromWidget.d.ts +2 -5
  370. package/esm/util/addTrackFromWidget.js +5 -4
  371. package/esm/util/aggregateFieldName.d.ts +10 -0
  372. package/esm/util/aggregateFieldName.js +8 -0
  373. package/esm/util/analytics.js +46 -13
  374. package/esm/util/animationAllowed.d.ts +9 -0
  375. package/esm/util/animationAllowed.js +13 -0
  376. package/esm/util/applyRowResizeWheel.d.ts +10 -5
  377. package/esm/util/applyRowResizeWheel.js +10 -21
  378. package/esm/util/bandHeight.d.ts +10 -0
  379. package/esm/util/bandHeight.js +29 -0
  380. package/esm/util/bandLayout.d.ts +4 -4
  381. package/esm/util/bandLayout.js +4 -4
  382. package/esm/util/baseDisplayConfig.d.ts +8 -0
  383. package/esm/util/baseDisplayConfig.js +27 -0
  384. package/esm/util/bezierConnector.d.ts +4 -3
  385. package/esm/util/bezierConnector.js +38 -45
  386. package/esm/util/bgzfWorkerPool.d.ts +20 -74
  387. package/esm/util/bgzfWorkerPool.js +20 -74
  388. package/esm/util/binnedAggregate.d.ts +17 -0
  389. package/esm/util/binnedAggregate.js +275 -0
  390. package/esm/util/cacheBudgets.d.ts +22 -19
  391. package/esm/util/cacheBudgets.js +22 -19
  392. package/esm/util/cachedSetup.d.ts +16 -6
  393. package/esm/util/cachedSetup.js +108 -38
  394. package/esm/util/categoricalField.d.ts +56 -0
  395. package/esm/util/categoricalField.js +73 -0
  396. package/esm/util/cellMatches.d.ts +23 -0
  397. package/esm/util/cellMatches.js +264 -0
  398. package/esm/util/cellsStep.d.ts +29 -0
  399. package/esm/util/cellsStep.js +437 -0
  400. package/esm/util/clampToContig.d.ts +17 -0
  401. package/esm/util/clampToContig.js +19 -0
  402. package/esm/util/coarseStripHTML.js +1 -2
  403. package/esm/util/color/cssColorsLevel4.d.ts +1 -0
  404. package/esm/util/color/cssColorsLevel4.js +1 -0
  405. package/esm/util/color/index.d.ts +5 -3
  406. package/esm/util/color/index.js +7 -4
  407. package/esm/util/colorBits.d.ts +3 -3
  408. package/esm/util/colorBits.js +19 -44
  409. package/esm/util/colorRamp.d.ts +49 -5
  410. package/esm/util/colorRamp.js +169 -18
  411. package/esm/util/colorScale.d.ts +156 -0
  412. package/esm/util/colorScale.js +243 -0
  413. package/esm/util/colorSchemes.d.ts +21 -0
  414. package/esm/util/colorSchemes.js +30 -0
  415. package/esm/util/copyToClipboard.js +8 -1
  416. package/esm/util/{createStopTokenRotation.d.ts → createAbortRotation.d.ts} +21 -23
  417. package/esm/util/{createStopTokenRotation.js → createAbortRotation.js} +21 -52
  418. package/esm/util/createSvgRasterCanvas.d.ts +10 -0
  419. package/esm/util/cssColorParse.d.ts +15 -0
  420. package/esm/util/cssColorParse.js +53 -0
  421. package/esm/util/diagonalizeRegions.d.ts +2 -3
  422. package/esm/util/diagonalizeRegions.js +8 -13
  423. package/esm/util/expandLooseSearchIndex.d.ts +19 -0
  424. package/esm/util/expandLooseSearchIndex.js +29 -0
  425. package/esm/util/featureTable.d.ts +224 -0
  426. package/esm/util/featureTable.js +366 -0
  427. package/esm/util/featureTransforms.d.ts +81 -0
  428. package/esm/util/featureTransforms.js +1231 -0
  429. package/esm/util/featureTypes.d.ts +24 -0
  430. package/esm/util/featureTypes.js +35 -0
  431. package/esm/util/fetchAndMaybeUnzip.js +16 -9
  432. package/esm/util/fetchContext.d.ts +7 -8
  433. package/esm/util/fetchContext.js +3 -3
  434. package/esm/util/fetchHub.d.ts +4 -2
  435. package/esm/util/fetchHub.js +2 -2
  436. package/esm/util/fetchPhases.d.ts +10 -10
  437. package/esm/util/fetchSeq.d.ts +2 -3
  438. package/esm/util/fetchSeq.js +2 -2
  439. package/esm/util/fieldReader.d.ts +17 -0
  440. package/esm/util/fieldReader.js +62 -0
  441. package/esm/util/formatBytes.js +1 -1
  442. package/esm/util/formatGuessers.d.ts +25 -14
  443. package/esm/util/formatGuessers.js +42 -27
  444. package/esm/util/formatRelativeTime.js +1 -1
  445. package/esm/util/freezeDeep.d.ts +8 -10
  446. package/esm/util/freezeDeep.js +8 -10
  447. package/esm/util/getLocationUri.d.ts +2 -1
  448. package/esm/util/getLocationUri.js +8 -2
  449. package/esm/util/groupKeys.d.ts +76 -0
  450. package/esm/util/groupKeys.js +156 -0
  451. package/esm/util/highlights.d.ts +10 -6
  452. package/esm/util/highlights.js +12 -25
  453. package/esm/util/hooks.d.ts +31 -2
  454. package/esm/util/hooks.js +72 -3
  455. package/esm/util/index.d.ts +11 -11
  456. package/esm/util/index.js +11 -10
  457. package/esm/util/indexCandidates.d.ts +1 -31
  458. package/esm/util/indexCandidates.js +5 -63
  459. package/esm/util/installFetch.d.ts +77 -37
  460. package/esm/util/installFetch.js +65 -38
  461. package/esm/util/installInitAutorun.d.ts +14 -13
  462. package/esm/util/installInitAutorun.js +17 -17
  463. package/esm/util/installPrerequisiteFetch.d.ts +115 -0
  464. package/esm/util/installPrerequisiteFetch.js +111 -0
  465. package/esm/util/intervals.js +9 -4
  466. package/esm/util/io/index.js +22 -15
  467. package/esm/util/isDataCurrent.d.ts +7 -5
  468. package/esm/util/isDataCurrent.js +9 -6
  469. package/esm/util/isTextEntryFocused.d.ts +7 -0
  470. package/esm/util/isTextEntryFocused.js +16 -0
  471. package/esm/util/jexl.js +24 -21
  472. package/esm/util/jexlFilterRows.d.ts +89 -0
  473. package/esm/util/jexlFilterRows.js +252 -0
  474. package/esm/util/jexlFilters.d.ts +32 -57
  475. package/esm/util/jexlFilters.js +31 -29
  476. package/esm/util/jexlStrings.d.ts +3 -4
  477. package/esm/util/jexlStrings.js +2 -3
  478. package/esm/util/layouts/GranularRectLayout.d.ts +8 -1
  479. package/esm/util/layouts/GranularRectLayout.js +25 -8
  480. package/esm/util/lazyAfterAttach.d.ts +13 -0
  481. package/esm/util/lazyAfterAttach.js +31 -0
  482. package/esm/util/lazyWithPreload.d.ts +19 -0
  483. package/esm/util/lazyWithPreload.js +27 -0
  484. package/esm/util/legendCandidates.d.ts +72 -0
  485. package/esm/util/legendCandidates.js +138 -0
  486. package/esm/util/locString.js +5 -2
  487. package/esm/util/localStorage.js +4 -4
  488. package/esm/util/markEncoding.d.ts +150 -0
  489. package/esm/util/markEncoding.js +885 -0
  490. package/esm/util/markEncodingTypes.d.ts +595 -0
  491. package/esm/util/markEncodingTypes.js +8 -0
  492. package/esm/util/mst-reflection.d.ts +2 -20
  493. package/esm/util/mst-reflection.js +3 -53
  494. package/esm/util/mstUtils.d.ts +31 -23
  495. package/esm/util/mstUtils.js +39 -24
  496. package/esm/util/numericUtils.d.ts +7 -0
  497. package/esm/util/numericUtils.js +16 -0
  498. package/esm/util/numericValue.d.ts +14 -0
  499. package/esm/util/numericValue.js +34 -0
  500. package/esm/util/openFeatureWidget.d.ts +5 -0
  501. package/esm/util/openFeatureWidget.js +2 -2
  502. package/esm/util/openViews.d.ts +17 -0
  503. package/esm/util/openViews.js +22 -0
  504. package/esm/util/parentWalk.d.ts +1 -1
  505. package/esm/util/parentWalk.js +1 -1
  506. package/esm/util/parseLineByLine.d.ts +4 -5
  507. package/esm/util/parseLineByLine.js +8 -14
  508. package/esm/util/pluginStore.d.ts +6 -8
  509. package/esm/util/pluginStore.js +17 -16
  510. package/esm/util/preloadComponent.d.ts +5 -0
  511. package/esm/util/preloadComponent.js +11 -0
  512. package/esm/util/progress.d.ts +22 -22
  513. package/esm/util/progress.js +27 -26
  514. package/esm/util/quantileExtent.d.ts +49 -0
  515. package/esm/util/quantileExtent.js +162 -0
  516. package/esm/util/range.d.ts +13 -9
  517. package/esm/util/range.js +17 -8
  518. package/esm/util/renameRegions.d.ts +26 -6
  519. package/esm/util/renameRegions.js +68 -54
  520. package/esm/util/renderToStaticMarkup.js +24 -14
  521. package/esm/util/rxjs.d.ts +23 -8
  522. package/esm/util/rxjs.js +61 -15
  523. package/esm/util/samplesTsv.d.ts +49 -0
  524. package/esm/util/samplesTsv.js +86 -0
  525. package/esm/util/scheduleDetachedDestroy.d.ts +18 -0
  526. package/esm/util/scheduleDetachedDestroy.js +24 -0
  527. package/esm/util/scrollLatch.d.ts +1 -0
  528. package/esm/util/scrollLatch.js +8 -0
  529. package/esm/util/selectEncodedFeature.d.ts +16 -0
  530. package/esm/util/selectEncodedFeature.js +34 -0
  531. package/esm/util/sessionSharing.d.ts +7 -5
  532. package/esm/util/sessionSharing.js +23 -23
  533. package/esm/util/shapeNameList.d.ts +2 -0
  534. package/esm/util/shapeNameList.js +6 -0
  535. package/esm/util/shapeNames.d.ts +7 -0
  536. package/esm/util/shapeNames.js +11 -0
  537. package/esm/util/simpleFeature.d.ts +0 -1
  538. package/esm/util/springAnimate.js +1 -1
  539. package/esm/util/starFusion.d.ts +26 -0
  540. package/esm/util/starFusion.js +37 -0
  541. package/esm/util/stepTables.d.ts +96 -0
  542. package/esm/util/stepTables.js +277 -0
  543. package/esm/util/svAlt.d.ts +145 -0
  544. package/esm/util/svAlt.js +364 -0
  545. package/esm/util/svgColorProps.d.ts +11 -0
  546. package/esm/util/svgColorProps.js +28 -1
  547. package/esm/util/systemColorScheme.d.ts +12 -0
  548. package/esm/util/systemColorScheme.js +27 -0
  549. package/esm/util/tabix.d.ts +19 -10
  550. package/esm/util/tabix.js +19 -14
  551. package/esm/util/thresholdScale.d.ts +91 -0
  552. package/esm/util/thresholdScale.js +166 -0
  553. package/esm/util/timeGate.d.ts +4 -5
  554. package/esm/util/timeGate.js +4 -5
  555. package/esm/util/trackConfigDelta.d.ts +26 -26
  556. package/esm/util/trackConfigDelta.js +63 -47
  557. package/esm/util/tracks.d.ts +120 -66
  558. package/esm/util/tracks.js +501 -151
  559. package/esm/util/translateTranscript.d.ts +44 -0
  560. package/esm/util/translateTranscript.js +102 -0
  561. package/esm/util/types/data.d.ts +0 -2
  562. package/esm/util/types/index.d.ts +121 -22
  563. package/esm/util/types/index.js +9 -0
  564. package/esm/util/types/mst.d.ts +3 -0
  565. package/esm/util/types/mst.js +4 -0
  566. package/esm/util/types/renameIds.d.ts +1 -0
  567. package/esm/util/types/renameIds.js +29 -0
  568. package/esm/util/types/services.d.ts +1 -1
  569. package/esm/util/unknownSnapshotKeys.d.ts +53 -0
  570. package/esm/util/unknownSnapshotKeys.js +76 -0
  571. package/esm/util/useFeatureSequence.js +5 -5
  572. package/esm/util/useFetch.d.ts +3 -4
  573. package/esm/util/useFetch.js +19 -10
  574. package/esm/util/useFetchPlugins.d.ts +6 -2
  575. package/esm/util/useFetchPlugins.js +7 -3
  576. package/esm/util/usePanZoom.js +10 -3
  577. package/esm/util/usePanelVirtualScroll.d.ts +7 -35
  578. package/esm/util/usePanelVirtualScroll.js +9 -36
  579. package/esm/util/useRafCommit.js +1 -0
  580. package/esm/util/useRowVirtualScroll.d.ts +6 -29
  581. package/esm/util/useRowVirtualScroll.js +8 -49
  582. package/esm/util/useVirtualScrollWheel.d.ts +20 -4
  583. package/esm/util/useVirtualScrollWheel.js +40 -74
  584. package/esm/util/viewHighlights.d.ts +3 -0
  585. package/esm/util/viewHighlights.js +5 -0
  586. package/esm/util/viewStatus.d.ts +47 -15
  587. package/esm/util/viewStatus.js +34 -0
  588. package/esm/util/wheelZoom.d.ts +7 -1
  589. package/esm/util/wheelZoom.js +85 -19
  590. package/esm/util/whenViewSettled.d.ts +55 -8
  591. package/esm/util/whenViewSettled.js +56 -7
  592. package/esm/util/withFeatureDetails.js +4 -0
  593. package/esm/util/withLaunchInput.d.ts +174 -0
  594. package/esm/util/withLaunchInput.js +274 -0
  595. package/package.json +75 -24
  596. package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.d.ts +0 -2
  597. package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.js +0 -8
  598. package/esm/BaseFeatureWidget/BaseFeatureDetail/types.d.ts +0 -8
  599. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.d.ts +0 -80
  600. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.js +0 -583
  601. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.d.ts +0 -141
  602. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.js +0 -1116
  603. package/esm/ReExports/BaseFeatureDetails.d.ts +0 -1
  604. package/esm/ReExports/BaseFeatureDetails.js +0 -10
  605. package/esm/ReExports/index.d.ts +0 -1
  606. package/esm/ReExports/index.js +0 -1
  607. package/esm/ReExports/publicUtil.d.ts +0 -1
  608. package/esm/ReExports/publicUtil.js +0 -28
  609. package/esm/configuration/promotableDefaults.d.ts +0 -199
  610. package/esm/configuration/promotableDefaults.js +0 -326
  611. package/esm/configuration/promotablePin.d.ts +0 -55
  612. package/esm/configuration/promotablePin.js +0 -1
  613. package/esm/configuration/promotableResolve.d.ts +0 -108
  614. package/esm/configuration/promotableResolve.js +0 -117
  615. package/esm/configuration/promotableSlots.d.ts +0 -12
  616. package/esm/configuration/promotableSlots.js +0 -45
  617. package/esm/configuration/slotShape.d.ts +0 -12
  618. package/esm/configuration/slotShape.js +0 -84
  619. package/esm/pluggableElementTypes/models/HighlightsMixin.d.ts +0 -51
  620. package/esm/pluggableElementTypes/models/HighlightsMixin.js +0 -78
  621. package/esm/ui/PinAdornment.d.ts +0 -5
  622. package/esm/ui/PinAdornment.js +0 -79
  623. package/esm/ui/SvgGradientLegend.d.ts +0 -26
  624. package/esm/ui/SvgGradientLegend.js +0 -26
  625. package/esm/ui/highlightChipReveal.d.ts +0 -32
  626. package/esm/ui/highlightChipReveal.js +0 -39
  627. package/esm/ui/promotableMenuItems.d.ts +0 -19
  628. package/esm/ui/promotableMenuItems.js +0 -89
  629. package/esm/ui/promotablePinCoverage.d.ts +0 -44
  630. package/esm/ui/promotablePinCoverage.js +0 -87
  631. package/esm/util/applyInitSettings.d.ts +0 -79
  632. package/esm/util/applyInitSettings.js +0 -91
  633. package/esm/util/openDisplays.d.ts +0 -23
  634. package/esm/util/openDisplays.js +0 -79
  635. package/esm/util/stopToken.d.ts +0 -211
  636. package/esm/util/stopToken.js +0 -438
  637. /package/esm/{BaseFeatureWidget/BaseFeatureDetail/types.js → data_adapters/BaseAdapter/zoomRange.js} +0 -0
@@ -1,6 +1,12 @@
1
1
  import type { BaseOptions } from '../data_adapters/BaseAdapter/types.ts';
2
2
  /** byte-granularity progress reporter to hand an index reader's `onProgress` */
3
3
  type OnProgress = (current: number, total?: number) => void;
4
+ /**
5
+ * How long a setup with no live waiter keeps running before its signal aborts:
6
+ * `createAbortRotation.begin()` aborts the superseded call before it posts the
7
+ * replacement, which joins within this window instead of restarting from byte 0.
8
+ */
9
+ export declare const ABANDONED_SETUP_GRACE_MS = 100;
4
10
  /**
5
11
  * Memoize an adapter's one-time setup (open the file, read the header, build a
6
12
  * parser, download and parse a whole file) into a loader every method can
@@ -17,11 +23,13 @@ type OnProgress = (current: number, total?: number) => void;
17
23
  * moment that fetch was superseded — the display's latest-wins guard gates the
18
24
  * old callback off — so the fetch replacing it awaited a multi-GB parse behind
19
25
  * a blank loading overlay.
20
- * - **`stopToken` is withheld from the shared work.** Honoring one caller's
21
- * cancel would abort a parse the caller replacing it is already waiting on,
22
- * and reject them both. A superseded fetch just stops listening. Cancellation
23
- * stays with the per-call work (indexed range queries), which no one else is
24
- * waiting on.
26
+ * - **Cancellation is shared, not per caller.** The setup gets one signal that
27
+ * aborts once its last live waiter has aborted and nobody rejoins within
28
+ * {@link ABANDONED_SETUP_GRACE_MS}, so a superseded fetch cannot cancel a
29
+ * parse its replacement is waiting on, yet a download nobody awaits stops.
30
+ * Each caller's own await rejects the moment its own signal aborts. An
31
+ * abandoned setup leaves the memo first, so the next call starts afresh and
32
+ * an abandoned run's late statuses reach no one.
25
33
  * - **`label` is shown only while the *first* attempt is in flight.** Re-entry
26
34
  * on pan/zoom (every getFeatures and byte estimate awaits the loader) would
27
35
  * otherwise re-flash "Downloading index" over an index that is already
@@ -32,7 +40,9 @@ type OnProgress = (current: number, total?: number) => void;
32
40
  * a whole-file fetch driving its own download bar — since two labels for one
33
41
  * download is worse than one, and phases nest (see `openPhase` in progress.ts).
34
42
  * `onProgress` is for handing to an index reader that can upgrade the label to a
35
- * determinate bar.
43
+ * determinate bar; like the status, it fans out to every live waiter. It is
44
+ * undefined without a `label`, so a setup that narrates itself never opts its
45
+ * reads into streamed progress.
36
46
  */
37
47
  export declare function cachedSetup<T>({ setup, label, }: {
38
48
  setup: (opts: BaseOptions, onProgress?: OnProgress) => Promise<T>;
@@ -1,4 +1,11 @@
1
+ import { checkAbortSignal, makeAbortError } from './aborting.js';
1
2
  import { downloadStatus } from './progress.js';
3
+ /**
4
+ * How long a setup with no live waiter keeps running before its signal aborts:
5
+ * `createAbortRotation.begin()` aborts the superseded call before it posts the
6
+ * replacement, which joins within this window instead of restarting from byte 0.
7
+ */
8
+ export const ABANDONED_SETUP_GRACE_MS = 100;
2
9
  /**
3
10
  * Memoize an adapter's one-time setup (open the file, read the header, build a
4
11
  * parser, download and parse a whole file) into a loader every method can
@@ -15,11 +22,13 @@ import { downloadStatus } from './progress.js';
15
22
  * moment that fetch was superseded — the display's latest-wins guard gates the
16
23
  * old callback off — so the fetch replacing it awaited a multi-GB parse behind
17
24
  * a blank loading overlay.
18
- * - **`stopToken` is withheld from the shared work.** Honoring one caller's
19
- * cancel would abort a parse the caller replacing it is already waiting on,
20
- * and reject them both. A superseded fetch just stops listening. Cancellation
21
- * stays with the per-call work (indexed range queries), which no one else is
22
- * waiting on.
25
+ * - **Cancellation is shared, not per caller.** The setup gets one signal that
26
+ * aborts once its last live waiter has aborted and nobody rejoins within
27
+ * {@link ABANDONED_SETUP_GRACE_MS}, so a superseded fetch cannot cancel a
28
+ * parse its replacement is waiting on, yet a download nobody awaits stops.
29
+ * Each caller's own await rejects the moment its own signal aborts. An
30
+ * abandoned setup leaves the memo first, so the next call starts afresh and
31
+ * an abandoned run's late statuses reach no one.
23
32
  * - **`label` is shown only while the *first* attempt is in flight.** Re-entry
24
33
  * on pan/zoom (every getFeatures and byte estimate awaits the loader) would
25
34
  * otherwise re-flash "Downloading index" over an index that is already
@@ -30,48 +39,109 @@ import { downloadStatus } from './progress.js';
30
39
  * a whole-file fetch driving its own download bar — since two labels for one
31
40
  * download is worse than one, and phases nest (see `openPhase` in progress.ts).
32
41
  * `onProgress` is for handing to an index reader that can upgrade the label to a
33
- * determinate bar.
42
+ * determinate bar; like the status, it fans out to every live waiter. It is
43
+ * undefined without a `label`, so a setup that narrates itself never opts its
44
+ * reads into streamed progress.
34
45
  */
35
46
  export function cachedSetup({ setup, label, }) {
36
- const waiting = new Set();
37
- let cached;
38
- let ready = false;
39
- const run = (opts, onProgress) => {
40
- cached ??= setup({
41
- ...opts,
42
- stopToken: undefined,
43
- statusCallback: status => {
44
- for (const cb of waiting) {
45
- cb(status);
47
+ let flight;
48
+ let resident;
49
+ const launch = (started, opts) => setup({
50
+ ...opts,
51
+ signal: started.controller.signal,
52
+ statusCallback: status => {
53
+ for (const cb of started.waiting.keys()) {
54
+ cb(status);
55
+ }
56
+ },
57
+ }, label === undefined
58
+ ? undefined
59
+ : (current, total) => {
60
+ for (const report of started.reporters.keys()) {
61
+ report(current, total);
62
+ }
63
+ }).then(value => {
64
+ clearTimeout(started.grace);
65
+ if (flight === started) {
66
+ resident = { value };
67
+ }
68
+ return value;
69
+ }, (e) => {
70
+ clearTimeout(started.grace);
71
+ if (flight === started) {
72
+ flight = undefined;
73
+ }
74
+ throw e;
75
+ });
76
+ const abandon = (started) => {
77
+ if (flight === started) {
78
+ flight = undefined;
79
+ started.controller.abort();
80
+ }
81
+ };
82
+ const join = (opts, onProgress) => {
83
+ const { signal, statusCallback } = opts;
84
+ const started = (flight ??= {
85
+ controller: new AbortController(),
86
+ waiting: new Map(),
87
+ reporters: new Map(),
88
+ live: 0,
89
+ });
90
+ clearTimeout(started.grace);
91
+ started.live++;
92
+ count(started.waiting, statusCallback);
93
+ count(started.reporters, onProgress);
94
+ const promise = (started.promise ??= launch(started, opts));
95
+ return new Promise((resolve, reject) => {
96
+ let joined = true;
97
+ const leave = () => {
98
+ if (joined) {
99
+ joined = false;
100
+ signal?.removeEventListener('abort', onAbort);
101
+ started.live--;
102
+ uncount(started.waiting, statusCallback);
103
+ uncount(started.reporters, onProgress);
104
+ }
105
+ };
106
+ const onAbort = () => {
107
+ leave();
108
+ reject(makeAbortError());
109
+ if (started.live === 0) {
110
+ started.grace = setTimeout(() => {
111
+ abandon(started);
112
+ }, ABANDONED_SETUP_GRACE_MS);
46
113
  }
47
- },
48
- }, onProgress)
49
- .then(result => {
50
- ready = true;
51
- return result;
52
- })
53
- .catch((e) => {
54
- cached = undefined;
55
- throw e;
114
+ };
115
+ signal?.addEventListener('abort', onAbort, { once: true });
116
+ promise.finally(leave).then(resolve, reject);
56
117
  });
57
- return cached;
58
118
  };
59
119
  return async (opts = {}) => {
60
- const { statusCallback } = opts;
61
- if (statusCallback) {
62
- waiting.add(statusCallback);
120
+ if (resident) {
121
+ return resident.value;
63
122
  }
64
- try {
65
- return await (label === undefined || ready
66
- ? run(opts)
67
- : downloadStatus(label, statusCallback, onProgress => run(opts, onProgress)));
123
+ checkAbortSignal(opts.signal);
124
+ const wait = (onProgress) => join(opts, onProgress);
125
+ return label === undefined
126
+ ? wait()
127
+ : downloadStatus(label, opts.statusCallback, wait);
128
+ };
129
+ }
130
+ function count(counts, key) {
131
+ if (key) {
132
+ counts.set(key, (counts.get(key) ?? 0) + 1);
133
+ }
134
+ }
135
+ function uncount(counts, key) {
136
+ if (key) {
137
+ const left = counts.get(key) - 1;
138
+ if (left > 0) {
139
+ counts.set(key, left);
68
140
  }
69
- finally {
70
- if (statusCallback) {
71
- waiting.delete(statusCallback);
72
- }
141
+ else {
142
+ counts.delete(key);
73
143
  }
74
- };
144
+ }
75
145
  }
76
146
  /**
77
147
  * {@link cachedSetup} taking a bare function instead of an options object.
@@ -0,0 +1,56 @@
1
+ /** #api */
2
+ export declare const STRAND_FIELD = "strand";
3
+ /**
4
+ * #api
5
+ * The structural-variant class `svClassOf` names. A VCF record and a BEDPE
6
+ * row carry it, and the mark display's `mate` step writes it per allele.
7
+ */
8
+ export declare const SV_TYPE_FIELD = "svType";
9
+ /**
10
+ * #api
11
+ * The row a feature with nothing in a categorical field lands on, so a key
12
+ * says why a mark is grey rather than listing a blank value.
13
+ */
14
+ export declare const NO_VALUE_LABEL = "(no value)";
15
+ /**
16
+ * #api
17
+ * One categorical field as every channel reads it — a facet's sections, a
18
+ * color's range entries, a key's rows. `key` files a value, `compare`
19
+ * orders keys (the `domain` first, the rest by `compareGroupKeys`, `''`
20
+ * after them), `label` names a key in a legend, `sectionLabel` on a chip, and
21
+ * `color` paints it. A key's color depends only on the key and the
22
+ * declaration, so every region agrees on it.
23
+ */
24
+ export interface CategoricalField {
25
+ field: string;
26
+ /** The declared order, or the field's own where none is declared. */
27
+ domain: readonly string[];
28
+ /**
29
+ * Every key a value can file under is in `domain`, as a threshold scale's
30
+ * bins are, so a key lists all of them whether or not anything painted one.
31
+ */
32
+ closed?: boolean;
33
+ key: (value: unknown) => string;
34
+ compare: (a: string, b: string) => number;
35
+ label: (key: string) => string;
36
+ sectionLabel: (key: string) => string;
37
+ color: (key: string) => string;
38
+ }
39
+ /**
40
+ * #api
41
+ * What a key names each of `keys`, from a colour object's `labels`: one each in
42
+ * order, an empty or missing entry leaving that key its own name. Every key
43
+ * that takes `labels` reads them through this, so a config means one thing by
44
+ * them everywhere.
45
+ */
46
+ export declare function keyNames(keys: readonly unknown[], labels?: readonly string[]): ReadonlyMap<string, string>;
47
+ /**
48
+ * #api
49
+ * `labels` names the `domain`'s values in a key, one each in order, where a
50
+ * config spells them for a reader rather than as the data does.
51
+ */
52
+ export declare function categoricalField(field: string, { domain, range, labels, }?: {
53
+ domain?: readonly string[];
54
+ range?: readonly string[];
55
+ labels?: readonly string[];
56
+ }): CategoricalField;
@@ -0,0 +1,73 @@
1
+ import { categoricalColorScale } from '../ui/colors.js';
2
+ import { NO_CATEGORY_COLOR } from './color/index.js';
3
+ import { universalPresetOf } from './colorScale.js';
4
+ import { groupKeyComparator, valueText } from './groupKeys.js';
5
+ /** #api */
6
+ export const STRAND_FIELD = 'strand';
7
+ /**
8
+ * #api
9
+ * The structural-variant class `svClassOf` names. A VCF record and a BEDPE
10
+ * row carry it, and the mark display's `mate` step writes it per allele.
11
+ */
12
+ export const SV_TYPE_FIELD = 'svType';
13
+ /**
14
+ * #api
15
+ * The row a feature with nothing in a categorical field lands on, so a key
16
+ * says why a mark is grey rather than listing a blank value.
17
+ */
18
+ export const NO_VALUE_LABEL = '(no value)';
19
+ /**
20
+ * #api
21
+ * What a key names each of `keys`, from a colour object's `labels`: one each in
22
+ * order, an empty or missing entry leaving that key its own name. Every key
23
+ * that takes `labels` reads them through this, so a config means one thing by
24
+ * them everywhere.
25
+ */
26
+ export function keyNames(keys, labels = []) {
27
+ const names = new Map();
28
+ keys.forEach((key, i) => {
29
+ const name = labels[i];
30
+ const text = String(key);
31
+ if (name && !names.has(text)) {
32
+ names.set(text, name);
33
+ }
34
+ });
35
+ return names;
36
+ }
37
+ /**
38
+ * #api
39
+ * `labels` names the `domain`'s values in a key, one each in order, where a
40
+ * config spells them for a reader rather than as the data does.
41
+ */
42
+ export function categoricalField(field, { domain = [], range = [], labels = [], } = {}) {
43
+ // a field with a vocabulary of its own reads it on every channel, a facet's
44
+ // sections as well as a colour's key
45
+ const vocabulary = universalPresetOf(field);
46
+ const ownOrder = vocabulary?.domain ?? [];
47
+ const order = domain.length > 0 ? domain : ownOrder;
48
+ const [paired, colors] = range.length > 0 || !vocabulary
49
+ ? [order, range]
50
+ : [ownOrder, vocabulary.range ?? []];
51
+ const declared = keyNames(order, labels);
52
+ const own = vocabulary && keyNames(ownOrder, vocabulary.labels);
53
+ const named = (key) => declared.get(key) ?? own?.get(key);
54
+ let colorOf;
55
+ return {
56
+ field,
57
+ domain: order,
58
+ key: value => {
59
+ const key = valueText(value);
60
+ return key === '' ? (vocabulary?.missing ?? key) : key;
61
+ },
62
+ compare: groupKeyComparator(order),
63
+ label: key => named(key) ?? (key === '' ? NO_VALUE_LABEL : key),
64
+ sectionLabel: key => named(key) ?? `${field}: ${key === '' ? 'none' : key}`,
65
+ color: key => {
66
+ if (key === '') {
67
+ return NO_CATEGORY_COLOR;
68
+ }
69
+ colorOf ??= categoricalColorScale(paired, colors);
70
+ return colorOf(key);
71
+ },
72
+ };
73
+ }
@@ -0,0 +1,23 @@
1
+ import type { AggregateStep, BinStep, CellsStep, TransformStep } from './markEncodingTypes.ts';
2
+ import type { Staged } from './stepTables.ts';
3
+ /**
4
+ * Whether a `cells` step, an interval `bin` and an `aggregate` run as one
5
+ * walk: the bin cuts the runs' own extents at whole-base edges it writes as
6
+ * `start` and `end`, the aggregate groups by those, and every op is the sum or
7
+ * mean of `match` weighted by `overlap`, so a bin's answer is its bases
8
+ * matched and compared.
9
+ */
10
+ export declare function fusesCellMatches(_cells: CellsStep, bin: BinStep, agg: AggregateStep): boolean;
11
+ /** Whether a step list starts with the bin and aggregate a `cells` fuses with. */
12
+ export declare function fusesAfterCells(cells: CellsStep, steps: readonly TransformStep[] | undefined): boolean;
13
+ /**
14
+ * `cells`, then a `bin` over the runs' extents and the `aggregate` of their
15
+ * `match` weighted by `overlap`, in one walk with no run table: each bin's
16
+ * bases matched and compared, counted straight off the texts. Every run
17
+ * meets its bins in the order its lanes would hold it, so the groups come out
18
+ * where the three steps put them, and a weighted sum of 0s and 1s is an
19
+ * integer, so each sum is theirs to the bit. Undefined where a row's start is
20
+ * not a whole base inside a Uint32 or the bins spread too thinly for a dense
21
+ * index, and the steps run as written.
22
+ */
23
+ export declare function binnedCellMatches({ table, bounds }: Staged, cells: CellsStep, bin: BinStep, agg: AggregateStep): Staged | undefined;
@@ -0,0 +1,264 @@
1
+ // A `cells` step, the interval `bin` behind it and the `aggregate` of its
2
+ // matches as one walk over the rows' bytes, which `runSteps` in
3
+ // featureTransforms.ts reaches by relative path only.
4
+ import { fusesBinAggregate } from './binnedAggregate.js';
5
+ import { DASH, DEFAULT_CELLS_FIELD, MATCH, MISMATCH, NO_STATE, SPACE, cellState, firstDrawn, isGapByte, lastDrawn, walkedTexts, } from './cellsStep.js';
6
+ import { numberReaderOf, readerOf } from './featureTable.js';
7
+ import { BIN_OVERLAP_FIELD, DEFAULT_BIN_AS, OpSums, groupKey, madeGroups, } from './stepTables.js';
8
+ const isEdges = (pair) => pair?.length === 2 && pair[0] === 'start' && pair[1] === 'end';
9
+ /**
10
+ * Whether a `cells` step, an interval `bin` and an `aggregate` run as one
11
+ * walk: the bin cuts the runs' own extents at whole-base edges it writes as
12
+ * `start` and `end`, the aggregate groups by those, and every op is the sum or
13
+ * mean of `match` weighted by `overlap`, so a bin's answer is its bases
14
+ * matched and compared.
15
+ */
16
+ export function fusesCellMatches(_cells, bin, agg) {
17
+ return (fusesBinAggregate(bin, agg) &&
18
+ isEdges(bin.fields) &&
19
+ isEdges(bin.as ?? DEFAULT_BIN_AS) &&
20
+ Number.isInteger(bin.step) &&
21
+ bin.step > 0 &&
22
+ agg.ops.length > 0 &&
23
+ agg.ops.every(op => (op.op === 'mean' || op.op === 'sum') &&
24
+ op.field === 'match' &&
25
+ op.weight === BIN_OVERLAP_FIELD));
26
+ }
27
+ /** Whether a step list starts with the bin and aggregate a `cells` fuses with. */
28
+ export function fusesAfterCells(cells, steps) {
29
+ const [bin, agg] = steps ?? [];
30
+ return (bin?.type === 'bin' &&
31
+ agg?.type === 'aggregate' &&
32
+ fusesCellMatches(cells, bin, agg));
33
+ }
34
+ // Where the widest section spans more bins than this over the bins all the
35
+ // rows could reach, its dense index costs more than the runs would, and the
36
+ // steps run as written.
37
+ const SPARSE_BINS_SLACK = 65536;
38
+ // A run's start is a Uint32 lane in the unfused `cells`.
39
+ const MAX_POSITION = 2 ** 32;
40
+ /**
41
+ * The groups the pieces of a section's runs meet, numbered in the order they
42
+ * meet them, over one dense index of the section's bins that each section
43
+ * reuses; with each bin's bases matched and compared.
44
+ */
45
+ class SectionBins {
46
+ groupOfBin;
47
+ matched;
48
+ compared;
49
+ groupRow;
50
+ groupBin;
51
+ groupSection;
52
+ groupMatched;
53
+ groupCompared;
54
+ groups = 0;
55
+ low = 0;
56
+ section = 0;
57
+ sectionStart = 0;
58
+ constructor(span, capacity) {
59
+ this.groupOfBin = new Int32Array(span).fill(-1);
60
+ this.matched = new Float64Array(span);
61
+ this.compared = new Float64Array(span);
62
+ this.groupRow = new Uint32Array(capacity);
63
+ this.groupBin = new Float64Array(capacity);
64
+ this.groupSection = new Uint32Array(capacity);
65
+ this.groupMatched = new Float64Array(capacity);
66
+ this.groupCompared = new Float64Array(capacity);
67
+ }
68
+ open(section, low) {
69
+ this.section = section;
70
+ this.low = low;
71
+ this.sectionStart = this.groups;
72
+ }
73
+ // A piece's bin from `from` to `to`, a new group where no piece met it.
74
+ touch(from, to, r) {
75
+ const { groupOfBin, low } = this;
76
+ for (let b = from; b <= to; b++) {
77
+ if (groupOfBin[b - low] < 0) {
78
+ const g = this.groups++;
79
+ groupOfBin[b - low] = g;
80
+ this.groupRow[g] = r;
81
+ this.groupBin[g] = b;
82
+ this.groupSection[g] = this.section;
83
+ }
84
+ }
85
+ }
86
+ // The section's counts onto its groups, and its bins cleared for the next.
87
+ close() {
88
+ const { groupOfBin, matched, compared, low } = this;
89
+ for (let g = this.sectionStart; g < this.groups; g++) {
90
+ const k = this.groupBin[g] - low;
91
+ this.groupMatched[g] = matched[k];
92
+ this.groupCompared[g] = compared[k];
93
+ matched[k] = 0;
94
+ compared[k] = 0;
95
+ groupOfBin[k] = -1;
96
+ }
97
+ }
98
+ /**
99
+ * One row's runs as `cells` writes them, each met by its bins as the bin
100
+ * step cuts it and in the order the lanes hold them: a run when the next
101
+ * column's state differs, an insertion at the reference base after it,
102
+ * ahead of the run still open. The bases a run of matches or mismatches
103
+ * holds are counted in their bins as the walk passes them.
104
+ */
105
+ walk(r, startPos, size, rowBytes, rowAt, rowLen, refBytes, refAt, refLen) {
106
+ const { matched, compared, low } = this;
107
+ const first = firstDrawn(rowBytes, rowAt, rowLen);
108
+ const last = lastDrawn(rowBytes, rowAt, rowLen, first);
109
+ let pos = startPos;
110
+ let bin = Math.floor(pos / size);
111
+ let edge = bin * size + size;
112
+ let m = 0;
113
+ let c = 0;
114
+ let runOpen = false;
115
+ let runBin = 0;
116
+ let runState = NO_STATE;
117
+ let runBase = -1;
118
+ let inserting = false;
119
+ for (let col = 0; col < refLen; col++) {
120
+ const refByte = refBytes[refAt + col];
121
+ const rowByte = col < rowLen ? rowBytes[rowAt + col] : SPACE;
122
+ if (refByte === DASH) {
123
+ if (!inserting && col < rowLen && !isGapByte(rowByte)) {
124
+ inserting = true;
125
+ }
126
+ continue;
127
+ }
128
+ if (inserting) {
129
+ this.touch(bin, bin, r);
130
+ inserting = false;
131
+ }
132
+ const st = cellState(refByte, rowByte, col >= first && col <= last && col < rowLen);
133
+ const base = st === MISMATCH ? rowByte : -1;
134
+ if (st !== runState || base !== runBase) {
135
+ if (runOpen) {
136
+ this.touch(runBin, pos > edge - size ? bin : bin - 1, r);
137
+ }
138
+ runOpen = st !== NO_STATE;
139
+ runBin = bin;
140
+ runState = st;
141
+ runBase = base;
142
+ }
143
+ if (st === MATCH) {
144
+ m++;
145
+ c++;
146
+ }
147
+ else if (st === MISMATCH) {
148
+ c++;
149
+ }
150
+ pos++;
151
+ if (pos === edge) {
152
+ if (c > 0) {
153
+ matched[bin - low] += m;
154
+ compared[bin - low] += c;
155
+ m = 0;
156
+ c = 0;
157
+ }
158
+ bin++;
159
+ edge += size;
160
+ }
161
+ }
162
+ if (runOpen) {
163
+ this.touch(runBin, pos > edge - size ? bin : bin - 1, r);
164
+ }
165
+ if (c > 0) {
166
+ matched[bin - low] += m;
167
+ compared[bin - low] += c;
168
+ }
169
+ }
170
+ }
171
+ /**
172
+ * `cells`, then a `bin` over the runs' extents and the `aggregate` of their
173
+ * `match` weighted by `overlap`, in one walk with no run table: each bin's
174
+ * bases matched and compared, counted straight off the texts. Every run
175
+ * meets its bins in the order its lanes would hold it, so the groups come out
176
+ * where the three steps put them, and a weighted sum of 0s and 1s is an
177
+ * integer, so each sum is theirs to the bit. Undefined where a row's start is
178
+ * not a whole base inside a Uint32 or the bins spread too thinly for a dense
179
+ * index, and the steps run as written.
180
+ */
181
+ export function binnedCellMatches({ table, bounds }, cells, bin, agg) {
182
+ const { field = DEFAULT_CELLS_FIELD } = cells;
183
+ const texts = walkedTexts(table, field);
184
+ const readStart = numberReaderOf(table.column('start'));
185
+ const size = bin.step;
186
+ const sections = bounds.length - 1;
187
+ const lowBin = new Float64Array(sections);
188
+ let widest = 0;
189
+ let reach = 0;
190
+ let spans = 0;
191
+ for (let s = 0; s < sections; s++) {
192
+ let low = Infinity;
193
+ let high = -Infinity;
194
+ for (let r = bounds[s]; r < bounds[s + 1]; r++) {
195
+ const refLen = texts.reference.length[texts.refOf(r)];
196
+ const pos = readStart(r);
197
+ if (refLen > 0 && pos >= 0) {
198
+ if (!Number.isInteger(pos) || pos + refLen >= MAX_POSITION) {
199
+ return undefined;
200
+ }
201
+ const lo = Math.floor(pos / size);
202
+ const hi = Math.floor((pos + refLen) / size);
203
+ low = Math.min(low, lo);
204
+ high = Math.max(high, hi);
205
+ reach += hi - lo + 1;
206
+ }
207
+ }
208
+ lowBin[s] = low;
209
+ const span = high >= low ? high - low + 1 : 0;
210
+ widest = Math.max(widest, span);
211
+ spans += span;
212
+ }
213
+ if (widest > 2 * reach + SPARSE_BINS_SLACK) {
214
+ return undefined;
215
+ }
216
+ const { bytes: rowBytes, offset: rowOffset, length: rowLength } = texts.row;
217
+ const { bytes: refBytes, offset: refOffset, length: refLength, } = texts.reference;
218
+ const walk = new SectionBins(widest, Math.min(spans, reach));
219
+ for (let s = 0; s < sections; s++) {
220
+ walk.open(s, lowBin[s]);
221
+ for (let r = bounds[s]; r < bounds[s + 1]; r++) {
222
+ const f = texts.refOf(r);
223
+ const refLen = refLength[f];
224
+ const pos = readStart(r);
225
+ if (refLen > 0 && pos >= 0) {
226
+ const k = texts.rowOf(r);
227
+ walk.walk(r, pos, size, rowBytes, rowOffset[k], rowLength[k], refBytes, refOffset[f], refLen);
228
+ }
229
+ }
230
+ walk.close();
231
+ }
232
+ const { groups, groupRow, groupBin, groupSection } = walk;
233
+ const ops = agg.ops.map(op => {
234
+ const sums = new OpSums(op, groups);
235
+ sums.sum.set(walk.groupMatched.subarray(0, groups));
236
+ sums.weight.set(walk.groupCompared.subarray(0, groups));
237
+ return sums.column(groups);
238
+ });
239
+ const start = new Float64Array(groups);
240
+ const end = new Float64Array(groups);
241
+ for (let g = 0; g < groups; g++) {
242
+ start[g] = groupBin[g] * size;
243
+ end[g] = start[g] + size;
244
+ }
245
+ const readRef = readerOf(table.column('refName'));
246
+ const refNames = new Array(groups);
247
+ for (let g = 0; g < groups; g++) {
248
+ refNames[g] = readRef(groupRow[g]);
249
+ }
250
+ return madeGroups({
251
+ groups,
252
+ keys: (agg.groupby ?? []).map((field) => [
253
+ field,
254
+ Array.from(field === 'start' ? start : end, groupKey),
255
+ ]),
256
+ ops,
257
+ step: agg,
258
+ refNames,
259
+ start,
260
+ end,
261
+ sectionOf: groupSection,
262
+ sections: bounds.length,
263
+ });
264
+ }
@@ -0,0 +1,29 @@
1
+ import type { FeatureTable, TextColumn } from './featureTable.ts';
2
+ import type { CellsStep } from './markEncodingTypes.ts';
3
+ import type { Staged } from './stepTables.ts';
4
+ export declare const DEFAULT_CELLS_FIELD = "seq";
5
+ export declare const DASH = 45;
6
+ export declare const SPACE = 32;
7
+ export declare const MATCH = 0;
8
+ export declare const MISMATCH = 1;
9
+ export declare const NO_STATE = 255;
10
+ export declare function isGapByte(b: number): b is 32 | 45;
11
+ export declare function firstDrawn(bytes: Uint8Array, at: number, len: number): number;
12
+ export declare function lastDrawn(bytes: Uint8Array, at: number, len: number, first: number): number;
13
+ export declare function cellState(refByte: number, rowByte: number, drawn: boolean): 0 | 1 | 2 | 255;
14
+ /**
15
+ * The texts a `cells` walk reads, by the row of the table it walked: each
16
+ * row's own, and the reference it is read against, which a row fanned out of
17
+ * a container reads off the container.
18
+ */
19
+ declare class WalkedTexts {
20
+ readonly row: TextColumn;
21
+ readonly reference: TextColumn;
22
+ private readonly refRow;
23
+ constructor(row: TextColumn, ref: TextColumn, refRow?: Uint32Array);
24
+ rowOf(r: number): number;
25
+ refOf(r: number): number;
26
+ }
27
+ export declare function walkedTexts(table: FeatureTable, field: string): WalkedTexts;
28
+ export declare function cells({ table, bounds }: Staged, step: CellsStep): Staged;
29
+ export {};