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

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 (611) hide show
  1. package/README.md +1476 -265
  2. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +3 -2
  3. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +5 -3
  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 +16 -9
  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 +50 -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/configSchema.d.ts +1 -1
  35. package/esm/BaseFeatureWidget/formatDetails.d.ts +13 -29
  36. package/esm/BaseFeatureWidget/formatDetails.js +62 -83
  37. package/esm/BaseFeatureWidget/index.d.ts +2 -1
  38. package/esm/BaseFeatureWidget/stateModelFactory.d.ts +42 -29
  39. package/esm/BaseFeatureWidget/stateModelFactory.js +98 -98
  40. package/esm/BaseFeatureWidget/types.d.ts +12 -6
  41. package/esm/BaseFeatureWidget/util.d.ts +0 -10
  42. package/esm/BaseFeatureWidget/util.js +0 -17
  43. package/esm/CorePlugin.js +2 -2
  44. package/esm/PluginLoader.d.ts +24 -13
  45. package/esm/PluginLoader.js +167 -51
  46. package/esm/PluginManager.d.ts +130 -24
  47. package/esm/PluginManager.js +180 -32
  48. package/esm/ReExports/MuiDataGridReExports.d.ts +1 -0
  49. package/esm/ReExports/MuiDataGridReExports.js +2 -2
  50. package/esm/ReExports/coreModules.generated.d.ts +2 -0
  51. package/esm/ReExports/coreModules.generated.js +528 -0
  52. package/esm/ReExports/coreWorkerModules.generated.d.ts +2 -0
  53. package/esm/ReExports/coreWorkerModules.generated.js +488 -0
  54. package/esm/ReExports/frameworkModules.d.ts +2 -0
  55. package/esm/ReExports/frameworkModules.js +68 -0
  56. package/esm/ReExports/frameworkShared.d.ts +12 -0
  57. package/esm/ReExports/frameworkShared.js +16 -0
  58. package/esm/ReExports/frameworkWorkerModules.generated.d.ts +2 -0
  59. package/esm/ReExports/frameworkWorkerModules.generated.js +130 -0
  60. package/esm/ReExports/list.js +527 -79
  61. package/esm/ReExports/modules.d.ts +1 -1
  62. package/esm/ReExports/modules.js +10 -165
  63. package/esm/ReExports/registry.d.ts +1 -0
  64. package/esm/ReExports/registry.js +23 -5
  65. package/esm/ReExports/uiStub.d.ts +3 -0
  66. package/esm/ReExports/uiStub.js +33 -0
  67. package/esm/ReExports/workerModules.d.ts +2 -0
  68. package/esm/ReExports/workerModules.js +11 -0
  69. package/esm/TextSearch/TextSearchManager.d.ts +27 -13
  70. package/esm/TextSearch/TextSearchManager.js +77 -36
  71. package/esm/TextSearch/places.d.ts +12 -0
  72. package/esm/TextSearch/places.js +94 -0
  73. package/esm/assemblyManager/assembly.d.ts +21 -19
  74. package/esm/assemblyManager/assembly.js +28 -26
  75. package/esm/assemblyManager/assemblyAdapters.d.ts +1 -1
  76. package/esm/assemblyManager/assemblyAdapters.js +8 -2
  77. package/esm/assemblyManager/assemblyConfigSchema.d.ts +31 -90
  78. package/esm/assemblyManager/assemblyConfigSchema.js +35 -47
  79. package/esm/assemblyManager/assemblyManager.d.ts +35 -180
  80. package/esm/assemblyManager/assemblyManager.js +47 -51
  81. package/esm/assemblyManager/expandAssemblyConfigShorthand.d.ts +25 -18
  82. package/esm/assemblyManager/expandAssemblyConfigShorthand.js +78 -49
  83. package/esm/assemblyManager/geneticCodes.js +2 -5
  84. package/esm/assemblyManager/getSequenceAdapterConfig.d.ts +10 -0
  85. package/esm/assemblyManager/getSequenceAdapterConfig.js +10 -0
  86. package/esm/assemblyManager/indexAssemblyNames.d.ts +9 -0
  87. package/esm/assemblyManager/indexAssemblyNames.js +22 -0
  88. package/esm/assemblyManager/loadRefNameMap.d.ts +1 -1
  89. package/esm/assemblyManager/loadRefNameMap.js +4 -9
  90. package/esm/assemblyManager/refNameMapKey.d.ts +7 -0
  91. package/esm/assemblyManager/refNameMapKey.js +12 -0
  92. package/esm/checkPlugins.d.ts +2 -0
  93. package/esm/checkPlugins.js +38 -17
  94. package/esm/configuration/bamIndexFields.d.ts +49 -0
  95. package/esm/configuration/bamIndexFields.js +41 -0
  96. package/esm/configuration/configurationSchema.d.ts +101 -71
  97. package/esm/configuration/configurationSchema.js +207 -134
  98. package/esm/configuration/configurationSchemaUnion.d.ts +39 -0
  99. package/esm/configuration/configurationSchemaUnion.js +56 -0
  100. package/esm/configuration/configurationSlot.d.ts +150 -60
  101. package/esm/configuration/configurationSlot.js +103 -75
  102. package/esm/configuration/fillLocations.d.ts +14 -0
  103. package/esm/configuration/fillLocations.js +14 -0
  104. package/esm/configuration/formatAboutConfigSchema.d.ts +7 -21
  105. package/esm/configuration/formatDetailsConfigSchema.d.ts +11 -37
  106. package/esm/configuration/formatDetailsConfigSchema.js +10 -13
  107. package/esm/configuration/fullConfSnapshot.d.ts +4 -19
  108. package/esm/configuration/fullConfSnapshot.js +30 -52
  109. package/esm/configuration/getConf.d.ts +45 -41
  110. package/esm/configuration/getConf.js +111 -44
  111. package/esm/configuration/index.d.ts +24 -11
  112. package/esm/configuration/index.js +15 -7
  113. package/esm/configuration/indexType.d.ts +26 -0
  114. package/esm/configuration/indexType.js +38 -0
  115. package/esm/configuration/mergeFormatCallbacks.d.ts +6 -7
  116. package/esm/configuration/mergeFormatCallbacks.js +13 -10
  117. package/esm/configuration/readConfObject.d.ts +2 -24
  118. package/esm/configuration/readConfObject.js +20 -63
  119. package/esm/configuration/requirements.d.ts +37 -0
  120. package/esm/configuration/requirements.js +88 -0
  121. package/esm/configuration/schemaRegistry.d.ts +32 -15
  122. package/esm/configuration/schemaRegistry.js +33 -35
  123. package/esm/configuration/schemaTypes.d.ts +21 -5
  124. package/esm/configuration/schemaTypes.js +66 -55
  125. package/esm/configuration/slotFacade.d.ts +12 -29
  126. package/esm/configuration/slotFacade.js +44 -23
  127. package/esm/configuration/snapshotPreprocess.d.ts +43 -0
  128. package/esm/configuration/snapshotPreprocess.js +161 -0
  129. package/esm/configuration/tabixIndexFields.d.ts +30 -4
  130. package/esm/configuration/tabixIndexFields.js +21 -4
  131. package/esm/configuration/tabixShorthand.d.ts +34 -17
  132. package/esm/configuration/tabixShorthand.js +49 -22
  133. package/esm/configuration/types.d.ts +182 -43
  134. package/esm/configuration/uriShorthand.d.ts +9 -0
  135. package/esm/configuration/uriShorthand.js +16 -0
  136. package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +13 -19
  137. package/esm/data_adapters/BaseAdapter/BaseAdapter.js +12 -19
  138. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +40 -2
  139. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +68 -5
  140. package/esm/data_adapters/BaseAdapter/featureDensity.d.ts +40 -0
  141. package/esm/data_adapters/BaseAdapter/featureDensity.js +31 -0
  142. package/esm/data_adapters/BaseAdapter/index.d.ts +23 -3
  143. package/esm/data_adapters/BaseAdapter/index.js +1 -0
  144. package/esm/data_adapters/BaseAdapter/rowSources.d.ts +37 -0
  145. package/esm/data_adapters/BaseAdapter/rowSources.js +7 -0
  146. package/esm/data_adapters/BaseAdapter/stats.d.ts +33 -1
  147. package/esm/data_adapters/BaseAdapter/stats.js +52 -13
  148. package/esm/data_adapters/BaseAdapter/types.d.ts +8 -12
  149. package/esm/data_adapters/BaseAdapter/zoomRange.d.ts +10 -0
  150. package/esm/data_adapters/CytobandAdapter/CytobandAdapter.js +1 -1
  151. package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +7 -11
  152. package/esm/data_adapters/CytobandAdapter/configSchema.js +3 -17
  153. package/esm/data_adapters/dataAdapterCache.d.ts +19 -2
  154. package/esm/data_adapters/dataAdapterCache.js +44 -10
  155. package/esm/data_adapters/getFeatureAdapter.d.ts +6 -4
  156. package/esm/data_adapters/getFeatureAdapter.js +8 -8
  157. package/esm/data_adapters/getSequenceSubAdapter.d.ts +7 -9
  158. package/esm/data_adapters/getSequenceSubAdapter.js +8 -10
  159. package/esm/pluggableElementTypes/AdapterType.d.ts +8 -8
  160. package/esm/pluggableElementTypes/AdapterType.js +1 -1
  161. package/esm/pluggableElementTypes/DisplayType.d.ts +46 -16
  162. package/esm/pluggableElementTypes/DisplayType.js +22 -12
  163. package/esm/pluggableElementTypes/LazyStateModelElement.d.ts +32 -0
  164. package/esm/pluggableElementTypes/LazyStateModelElement.js +77 -0
  165. package/esm/pluggableElementTypes/PluggableElementBase.d.ts +3 -5
  166. package/esm/pluggableElementTypes/PluggableElementBase.js +3 -5
  167. package/esm/pluggableElementTypes/RpcMethodType.d.ts +11 -1
  168. package/esm/pluggableElementTypes/RpcMethodType.js +25 -9
  169. package/esm/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.d.ts +1 -2
  170. package/esm/pluggableElementTypes/TextSearchAdapterType.d.ts +7 -7
  171. package/esm/pluggableElementTypes/ViewType.d.ts +20 -4
  172. package/esm/pluggableElementTypes/ViewType.js +32 -4
  173. package/esm/pluggableElementTypes/addMenuItems.d.ts +3 -2
  174. package/esm/pluggableElementTypes/extendElementType.d.ts +1 -2
  175. package/esm/pluggableElementTypes/extendElementType.js +9 -5
  176. package/esm/pluggableElementTypes/index.d.ts +2 -1
  177. package/esm/pluggableElementTypes/index.js +1 -1
  178. package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +19 -9
  179. package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +65 -27
  180. package/esm/pluggableElementTypes/models/BaseDisplayModel.js +72 -10
  181. package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +65 -16
  182. package/esm/pluggableElementTypes/models/BaseTrackModel.js +179 -117
  183. package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +85 -16
  184. package/esm/pluggableElementTypes/models/BaseViewModel.js +53 -10
  185. package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +26 -16
  186. package/esm/pluggableElementTypes/models/assertDisplayContract.d.ts +15 -11
  187. package/esm/pluggableElementTypes/models/assertDisplayContract.js +25 -32
  188. package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +22 -18
  189. package/esm/pluggableElementTypes/models/baseConnectionConfig.js +5 -5
  190. package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +26 -31
  191. package/esm/pluggableElementTypes/models/baseTrackConfig.d.ts +108 -147
  192. package/esm/pluggableElementTypes/models/baseTrackConfig.js +96 -73
  193. package/esm/pluggableElementTypes/models/components/SaveTrackData.js +4 -6
  194. package/esm/pluggableElementTypes/models/components/fetchTrackData.d.ts +3 -4
  195. package/esm/pluggableElementTypes/models/components/fetchTrackData.js +3 -3
  196. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +23 -13
  197. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +80 -48
  198. package/esm/pluggableElementTypes/models/index.d.ts +2 -3
  199. package/esm/pluggableElementTypes/models/index.js +2 -3
  200. package/esm/pluggableElementTypes/models/migrateTrackConfig.d.ts +15 -1
  201. package/esm/pluggableElementTypes/models/migrateTrackConfig.js +85 -25
  202. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.d.ts +4 -3
  203. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.js +141 -19
  204. package/esm/pluggableElementTypes/models/saveTrackFileTypes/types.d.ts +3 -3
  205. package/esm/pluginDefinitions.d.ts +34 -7
  206. package/esm/pluginDefinitions.js +54 -20
  207. package/esm/rpc/BaseRpcDriver.d.ts +2 -2
  208. package/esm/rpc/BaseRpcDriver.js +25 -30
  209. package/esm/rpc/MainThreadRpcDriver.d.ts +2 -2
  210. package/esm/rpc/MainThreadRpcDriver.js +13 -8
  211. package/esm/rpc/RpcClient.d.ts +18 -6
  212. package/esm/rpc/RpcClient.js +51 -16
  213. package/esm/rpc/RpcManager.d.ts +14 -10
  214. package/esm/rpc/RpcManager.js +11 -1
  215. package/esm/rpc/RpcRegistry.d.ts +40 -7
  216. package/esm/rpc/RpcServer.d.ts +3 -1
  217. package/esm/rpc/RpcServer.js +19 -12
  218. package/esm/rpc/WebWorkerRpcDriver.d.ts +11 -4
  219. package/esm/rpc/WebWorkerRpcDriver.js +64 -68
  220. package/esm/rpc/byteBudget.d.ts +20 -5
  221. package/esm/rpc/byteBudget.js +16 -5
  222. package/esm/rpc/configSchema.d.ts +7 -21
  223. package/esm/rpc/coreRpcMethods.d.ts +4 -0
  224. package/esm/rpc/coreRpcMethods.js +4 -0
  225. package/esm/rpc/methods/CoreGetEncodedFeature.d.ts +13 -0
  226. package/esm/rpc/methods/CoreGetEncodedFeature.js +32 -0
  227. package/esm/rpc/methods/CoreGetEncodedLayers.d.ts +16 -0
  228. package/esm/rpc/methods/CoreGetEncodedLayers.js +59 -0
  229. package/esm/rpc/methods/CoreGetExportData.js +3 -4
  230. package/esm/rpc/methods/CoreGetFeatureDensity.d.ts +11 -0
  231. package/esm/rpc/methods/CoreGetFeatureDensity.js +22 -0
  232. package/esm/rpc/methods/CoreGetFeatures.js +3 -5
  233. package/esm/rpc/methods/CoreGetRefNames.js +2 -12
  234. package/esm/rpc/methods/CoreGetRegionByteEstimate.js +1 -1
  235. package/esm/rpc/methods/CoreGetSequence.js +2 -2
  236. package/esm/rpc/methods/CoreLoadAdapterCode.d.ts +13 -0
  237. package/esm/rpc/methods/CoreLoadAdapterCode.js +16 -0
  238. package/esm/rpc/methods/layerFeatures.d.ts +33 -0
  239. package/esm/rpc/methods/layerFeatures.js +29 -0
  240. package/esm/svg/SvgExport.js +6 -7
  241. package/esm/svg/SvgThemeProviders.d.ts +12 -0
  242. package/esm/svg/SvgThemeProviders.js +15 -0
  243. package/esm/svg/exportViewSvg.d.ts +28 -0
  244. package/esm/svg/exportViewSvg.js +13 -0
  245. package/esm/svg/normalizeSvgMarkup.d.ts +7 -0
  246. package/esm/svg/normalizeSvgMarkup.js +99 -0
  247. package/esm/svg/serializeSvg.d.ts +7 -0
  248. package/esm/svg/serializeSvg.js +11 -0
  249. package/esm/svg/svgId.d.ts +1 -1
  250. package/esm/svg/svgId.js +1 -1
  251. package/esm/svg/svgReady.d.ts +9 -7
  252. package/esm/svg/svgReady.js +8 -7
  253. package/esm/svg/trackNames.d.ts +7 -5
  254. package/esm/svg/trackNames.js +12 -9
  255. package/esm/svg/wrapSvgExport.js +6 -74
  256. package/esm/ui/AddCustomPluginDialog.js +3 -8
  257. package/esm/ui/AppReadyMarker.d.ts +45 -0
  258. package/esm/ui/AppReadyMarker.js +89 -0
  259. package/esm/ui/BaseExportSvgDialog.d.ts +1 -1
  260. package/esm/ui/CascadingMenu.js +181 -104
  261. package/esm/ui/DropDownMenu.js +2 -1
  262. package/esm/ui/ErrorBanner.js +1 -1
  263. package/esm/ui/ErrorBoundary.d.ts +2 -2
  264. package/esm/ui/ErrorMessageStackTraceContents.js +2 -1
  265. package/esm/ui/ErrorMessageStackTraceDialog.js +5 -11
  266. package/esm/ui/ExportSvgDialog.d.ts +1 -1
  267. package/esm/ui/FileDropZone.js +2 -1
  268. package/esm/ui/FileSelector/useInternetAccounts.d.ts +156 -96
  269. package/esm/ui/HoverMenu.d.ts +1 -2
  270. package/esm/ui/HoverMenu.js +6 -3
  271. package/esm/ui/JexlFilterDialog.d.ts +13 -10
  272. package/esm/ui/JexlFilterDialog.js +122 -49
  273. package/esm/ui/JexlFilterRowEditors.d.ts +15 -0
  274. package/esm/ui/JexlFilterRowEditors.js +90 -0
  275. package/esm/ui/LazyBaseTooltip.d.ts +4 -0
  276. package/esm/ui/LazyBaseTooltip.js +9 -0
  277. package/esm/ui/LegendSwatchGlyph.js +26 -21
  278. package/esm/ui/LoadingOverlay.d.ts +14 -0
  279. package/esm/ui/LoadingOverlay.js +4 -2
  280. package/esm/ui/MenuTypes.d.ts +23 -53
  281. package/esm/ui/MenuTypes.js +3 -0
  282. package/esm/ui/MonospaceTextField.d.ts +2 -1
  283. package/esm/ui/MonospaceTextField.js +23 -20
  284. package/esm/ui/PaletteContext.d.ts +10 -5
  285. package/esm/ui/PaletteContext.js +44 -6
  286. package/esm/ui/RefNameAutocomplete/SearchOption.d.ts +13 -0
  287. package/esm/ui/RefNameAutocomplete/SearchOption.js +45 -0
  288. package/esm/ui/RefNameAutocomplete/index.d.ts +1 -2
  289. package/esm/ui/RefNameAutocomplete/index.js +8 -2
  290. package/esm/ui/RefNameAutocomplete/util.d.ts +13 -0
  291. package/esm/ui/RefNameAutocomplete/util.js +42 -1
  292. package/esm/ui/ResizeHandle.d.ts +3 -1
  293. package/esm/ui/ResizeHandle.js +44 -11
  294. package/esm/ui/ScrollChrome.d.ts +13 -0
  295. package/esm/ui/ScrollChrome.js +11 -0
  296. package/esm/ui/ScrollEdgeShadow.d.ts +6 -9
  297. package/esm/ui/ScrollEdgeShadow.js +14 -35
  298. package/esm/ui/ScrollZoomToggle.d.ts +4 -27
  299. package/esm/ui/ScrollZoomToggle.js +34 -51
  300. package/esm/ui/SessionJsonPanel.d.ts +3 -0
  301. package/esm/ui/SessionJsonPanel.js +14 -0
  302. package/esm/ui/SettingsChangesTable.d.ts +1 -0
  303. package/esm/ui/SettingsChangesTable.js +49 -11
  304. package/esm/ui/ShareLinkField.d.ts +1 -3
  305. package/esm/ui/ShareLinkField.js +13 -40
  306. package/esm/ui/SizeSliderRow.d.ts +1 -3
  307. package/esm/ui/SizeSliderRow.js +4 -6
  308. package/esm/ui/SnackbarModel.js +79 -67
  309. package/esm/ui/StatusProgressBar.js +2 -2
  310. package/esm/ui/SvgColorLegend.d.ts +9 -4
  311. package/esm/ui/SvgColorLegend.js +82 -41
  312. package/esm/ui/VerticalScrollbar.d.ts +13 -34
  313. package/esm/ui/VerticalScrollbar.js +29 -83
  314. package/esm/ui/ViewLoadingScreen.d.ts +5 -4
  315. package/esm/ui/ViewLoadingScreen.js +8 -32
  316. package/esm/ui/colorScale.d.ts +92 -0
  317. package/esm/ui/colorScale.js +72 -0
  318. package/esm/ui/colors.d.ts +64 -0
  319. package/esm/ui/colors.js +230 -1
  320. package/esm/ui/hoverBoxStyle.d.ts +14 -2
  321. package/esm/ui/hoverBoxStyle.js +17 -2
  322. package/esm/ui/index.d.ts +12 -12
  323. package/esm/ui/index.js +14 -22
  324. package/esm/ui/launchViewMenu.js +15 -5
  325. package/esm/ui/legendMenuItem.d.ts +10 -32
  326. package/esm/ui/legendMenuItem.js +9 -36
  327. package/esm/ui/legendSpec.d.ts +15 -8
  328. package/esm/ui/legendSpec.js +14 -23
  329. package/esm/ui/makeSizeMenu.d.ts +0 -6
  330. package/esm/ui/makeSizeMenu.js +6 -30
  331. package/esm/ui/measureLegendText.js +1 -1
  332. package/esm/ui/menuItemAdornment.d.ts +9 -20
  333. package/esm/ui/menuItemAdornment.js +10 -32
  334. package/esm/ui/menuItems.d.ts +2 -7
  335. package/esm/ui/menuItems.js +1 -6
  336. package/esm/ui/multiTrackMenuItems.d.ts +6 -0
  337. package/esm/ui/palette.d.ts +118 -116
  338. package/esm/ui/palette.js +114 -75
  339. package/esm/ui/replaceViewAction.d.ts +1 -1
  340. package/esm/ui/replaceViewAction.js +1 -1
  341. package/esm/ui/theme.d.ts +43 -119
  342. package/esm/ui/theme.js +62 -78
  343. package/esm/ui/toggleMenuItems.d.ts +1 -3
  344. package/esm/ui/toggleMenuItems.js +6 -5
  345. package/esm/ui/useAssemblySelection.d.ts +4 -4
  346. package/esm/ui/viewHeaderHeight.d.ts +1 -0
  347. package/esm/ui/viewHeaderHeight.js +1 -0
  348. package/esm/util/Base1DUtils.d.ts +5 -3
  349. package/esm/util/Base1DUtils.js +14 -6
  350. package/esm/util/Base1DViewModel.d.ts +2 -1
  351. package/esm/util/Base1DViewModel.js +3 -2
  352. package/esm/util/SvgCanvas.d.ts +15 -13
  353. package/esm/util/SvgCanvas.js +76 -56
  354. package/esm/util/aborting.d.ts +39 -0
  355. package/esm/util/aborting.js +88 -6
  356. package/esm/util/adapterMetadata.d.ts +1 -1
  357. package/esm/util/adapterMetadata.js +6 -5
  358. package/esm/util/addAndShowTrack.d.ts +2 -5
  359. package/esm/util/addAndShowTrack.js +5 -1
  360. package/esm/util/addRelativeUris.d.ts +17 -5
  361. package/esm/util/addRelativeUris.js +46 -10
  362. package/esm/util/addTrackFromWidget.d.ts +2 -5
  363. package/esm/util/addTrackFromWidget.js +5 -4
  364. package/esm/util/aggregateFieldName.d.ts +10 -0
  365. package/esm/util/aggregateFieldName.js +8 -0
  366. package/esm/util/analytics.js +46 -13
  367. package/esm/util/animationAllowed.d.ts +9 -0
  368. package/esm/util/animationAllowed.js +13 -0
  369. package/esm/util/applyRowResizeWheel.d.ts +10 -5
  370. package/esm/util/applyRowResizeWheel.js +10 -21
  371. package/esm/util/bandHeight.d.ts +10 -0
  372. package/esm/util/bandHeight.js +29 -0
  373. package/esm/util/bandLayout.d.ts +4 -4
  374. package/esm/util/bandLayout.js +4 -4
  375. package/esm/util/bezierConnector.d.ts +4 -3
  376. package/esm/util/bezierConnector.js +38 -45
  377. package/esm/util/bgzfWorkerPool.d.ts +20 -74
  378. package/esm/util/bgzfWorkerPool.js +20 -74
  379. package/esm/util/binnedAggregate.d.ts +17 -0
  380. package/esm/util/binnedAggregate.js +275 -0
  381. package/esm/util/cacheBudgets.d.ts +22 -19
  382. package/esm/util/cacheBudgets.js +22 -19
  383. package/esm/util/cachedSetup.d.ts +1 -1
  384. package/esm/util/cachedSetup.js +2 -2
  385. package/esm/util/categoricalField.d.ts +56 -0
  386. package/esm/util/categoricalField.js +73 -0
  387. package/esm/util/clampToContig.d.ts +17 -0
  388. package/esm/util/clampToContig.js +19 -0
  389. package/esm/util/coarseStripHTML.js +1 -2
  390. package/esm/util/color/cssColorsLevel4.d.ts +1 -0
  391. package/esm/util/color/cssColorsLevel4.js +1 -0
  392. package/esm/util/color/index.d.ts +5 -3
  393. package/esm/util/color/index.js +7 -4
  394. package/esm/util/colorBits.d.ts +3 -3
  395. package/esm/util/colorBits.js +19 -44
  396. package/esm/util/colorRamp.d.ts +49 -5
  397. package/esm/util/colorRamp.js +169 -18
  398. package/esm/util/colorScale.d.ts +156 -0
  399. package/esm/util/colorScale.js +243 -0
  400. package/esm/util/colorSchemes.d.ts +21 -0
  401. package/esm/util/colorSchemes.js +30 -0
  402. package/esm/util/{createStopTokenRotation.d.ts → createAbortRotation.d.ts} +21 -23
  403. package/esm/util/{createStopTokenRotation.js → createAbortRotation.js} +21 -52
  404. package/esm/util/createSvgRasterCanvas.d.ts +10 -0
  405. package/esm/util/cssColorParse.d.ts +15 -0
  406. package/esm/util/cssColorParse.js +53 -0
  407. package/esm/util/diagonalizeRegions.d.ts +2 -3
  408. package/esm/util/diagonalizeRegions.js +8 -13
  409. package/esm/util/expandLooseSearchIndex.d.ts +19 -0
  410. package/esm/util/expandLooseSearchIndex.js +29 -0
  411. package/esm/util/featureTable.d.ts +224 -0
  412. package/esm/util/featureTable.js +366 -0
  413. package/esm/util/featureTransforms.d.ts +80 -0
  414. package/esm/util/featureTransforms.js +1579 -0
  415. package/esm/util/featureTypes.d.ts +24 -0
  416. package/esm/util/featureTypes.js +35 -0
  417. package/esm/util/fetchAndMaybeUnzip.js +16 -9
  418. package/esm/util/fetchContext.d.ts +7 -8
  419. package/esm/util/fetchContext.js +3 -3
  420. package/esm/util/fetchHub.d.ts +4 -2
  421. package/esm/util/fetchHub.js +2 -2
  422. package/esm/util/fetchPhases.d.ts +10 -10
  423. package/esm/util/fetchSeq.d.ts +2 -3
  424. package/esm/util/fetchSeq.js +2 -2
  425. package/esm/util/fieldReader.d.ts +17 -0
  426. package/esm/util/fieldReader.js +62 -0
  427. package/esm/util/freezeDeep.d.ts +8 -10
  428. package/esm/util/freezeDeep.js +8 -10
  429. package/esm/util/groupKeys.d.ts +77 -0
  430. package/esm/util/groupKeys.js +155 -0
  431. package/esm/util/highlights.d.ts +10 -6
  432. package/esm/util/highlights.js +12 -25
  433. package/esm/util/hooks.d.ts +31 -2
  434. package/esm/util/hooks.js +72 -3
  435. package/esm/util/index.d.ts +11 -11
  436. package/esm/util/index.js +11 -10
  437. package/esm/util/indexCandidates.d.ts +1 -31
  438. package/esm/util/indexCandidates.js +5 -63
  439. package/esm/util/installFetch.d.ts +77 -37
  440. package/esm/util/installFetch.js +65 -38
  441. package/esm/util/installInitAutorun.d.ts +14 -13
  442. package/esm/util/installInitAutorun.js +17 -17
  443. package/esm/util/installPrerequisiteFetch.d.ts +115 -0
  444. package/esm/util/installPrerequisiteFetch.js +111 -0
  445. package/esm/util/io/index.js +19 -14
  446. package/esm/util/isDataCurrent.d.ts +7 -5
  447. package/esm/util/isDataCurrent.js +9 -6
  448. package/esm/util/isTextEntryFocused.d.ts +7 -0
  449. package/esm/util/isTextEntryFocused.js +16 -0
  450. package/esm/util/jexl.js +24 -21
  451. package/esm/util/jexlFilterRows.d.ts +89 -0
  452. package/esm/util/jexlFilterRows.js +252 -0
  453. package/esm/util/jexlFilters.d.ts +20 -27
  454. package/esm/util/jexlFilters.js +23 -11
  455. package/esm/util/jexlStrings.d.ts +3 -4
  456. package/esm/util/jexlStrings.js +2 -3
  457. package/esm/util/layouts/GranularRectLayout.d.ts +8 -1
  458. package/esm/util/layouts/GranularRectLayout.js +25 -8
  459. package/esm/util/lazyAfterAttach.d.ts +13 -0
  460. package/esm/util/lazyAfterAttach.js +31 -0
  461. package/esm/util/lazyWithPreload.d.ts +19 -0
  462. package/esm/util/lazyWithPreload.js +27 -0
  463. package/esm/util/legendCandidates.d.ts +72 -0
  464. package/esm/util/legendCandidates.js +138 -0
  465. package/esm/util/localStorage.js +4 -4
  466. package/esm/util/markEncoding.d.ts +150 -0
  467. package/esm/util/markEncoding.js +845 -0
  468. package/esm/util/markEncodingTypes.d.ts +588 -0
  469. package/esm/util/markEncodingTypes.js +8 -0
  470. package/esm/util/mst-reflection.d.ts +2 -20
  471. package/esm/util/mst-reflection.js +3 -53
  472. package/esm/util/mstUtils.d.ts +31 -23
  473. package/esm/util/mstUtils.js +39 -24
  474. package/esm/util/numericUtils.d.ts +7 -0
  475. package/esm/util/numericUtils.js +16 -0
  476. package/esm/util/numericValue.d.ts +14 -0
  477. package/esm/util/numericValue.js +34 -0
  478. package/esm/util/openFeatureWidget.d.ts +5 -0
  479. package/esm/util/openFeatureWidget.js +2 -2
  480. package/esm/util/openViews.d.ts +17 -0
  481. package/esm/util/openViews.js +22 -0
  482. package/esm/util/parentWalk.d.ts +1 -1
  483. package/esm/util/parentWalk.js +1 -1
  484. package/esm/util/parseLineByLine.d.ts +4 -5
  485. package/esm/util/parseLineByLine.js +8 -14
  486. package/esm/util/pluginStore.d.ts +6 -8
  487. package/esm/util/pluginStore.js +17 -16
  488. package/esm/util/preloadComponent.d.ts +5 -0
  489. package/esm/util/preloadComponent.js +11 -0
  490. package/esm/util/progress.d.ts +22 -22
  491. package/esm/util/progress.js +27 -26
  492. package/esm/util/quantileExtent.d.ts +49 -0
  493. package/esm/util/quantileExtent.js +162 -0
  494. package/esm/util/range.d.ts +13 -9
  495. package/esm/util/range.js +17 -8
  496. package/esm/util/renameRegions.d.ts +26 -6
  497. package/esm/util/renameRegions.js +68 -54
  498. package/esm/util/renderToStaticMarkup.js +24 -14
  499. package/esm/util/rxjs.d.ts +23 -8
  500. package/esm/util/rxjs.js +61 -15
  501. package/esm/util/samplesTsv.d.ts +49 -0
  502. package/esm/util/samplesTsv.js +86 -0
  503. package/esm/util/scheduleDetachedDestroy.d.ts +18 -0
  504. package/esm/util/scheduleDetachedDestroy.js +24 -0
  505. package/esm/util/scrollLatch.d.ts +1 -0
  506. package/esm/util/scrollLatch.js +8 -0
  507. package/esm/util/selectEncodedFeature.d.ts +16 -0
  508. package/esm/util/selectEncodedFeature.js +34 -0
  509. package/esm/util/sessionSharing.d.ts +7 -5
  510. package/esm/util/sessionSharing.js +23 -23
  511. package/esm/util/shapeNameList.d.ts +2 -0
  512. package/esm/util/shapeNameList.js +6 -0
  513. package/esm/util/shapeNames.d.ts +7 -0
  514. package/esm/util/shapeNames.js +11 -0
  515. package/esm/util/simpleFeature.d.ts +0 -1
  516. package/esm/util/starFusion.d.ts +26 -0
  517. package/esm/util/starFusion.js +37 -0
  518. package/esm/util/stepTables.d.ts +82 -0
  519. package/esm/util/stepTables.js +243 -0
  520. package/esm/util/svAlt.d.ts +145 -0
  521. package/esm/util/svAlt.js +364 -0
  522. package/esm/util/svgColorProps.d.ts +11 -0
  523. package/esm/util/svgColorProps.js +28 -1
  524. package/esm/util/systemColorScheme.d.ts +12 -0
  525. package/esm/util/systemColorScheme.js +27 -0
  526. package/esm/util/tabix.d.ts +13 -8
  527. package/esm/util/tabix.js +17 -12
  528. package/esm/util/thresholdScale.d.ts +91 -0
  529. package/esm/util/thresholdScale.js +166 -0
  530. package/esm/util/timeGate.d.ts +4 -5
  531. package/esm/util/timeGate.js +4 -5
  532. package/esm/util/trackConfigDelta.d.ts +26 -26
  533. package/esm/util/trackConfigDelta.js +63 -47
  534. package/esm/util/tracks.d.ts +121 -40
  535. package/esm/util/tracks.js +497 -112
  536. package/esm/util/translateTranscript.d.ts +44 -0
  537. package/esm/util/translateTranscript.js +102 -0
  538. package/esm/util/types/data.d.ts +0 -2
  539. package/esm/util/types/index.d.ts +121 -22
  540. package/esm/util/types/index.js +9 -0
  541. package/esm/util/types/mst.d.ts +3 -0
  542. package/esm/util/types/mst.js +4 -0
  543. package/esm/util/types/renameIds.d.ts +1 -0
  544. package/esm/util/types/renameIds.js +29 -0
  545. package/esm/util/types/services.d.ts +1 -1
  546. package/esm/util/unknownSnapshotKeys.d.ts +51 -0
  547. package/esm/util/unknownSnapshotKeys.js +82 -0
  548. package/esm/util/useFeatureSequence.js +5 -5
  549. package/esm/util/useFetch.d.ts +3 -4
  550. package/esm/util/useFetch.js +19 -10
  551. package/esm/util/useFetchPlugins.d.ts +6 -2
  552. package/esm/util/useFetchPlugins.js +7 -3
  553. package/esm/util/usePanelVirtualScroll.d.ts +7 -35
  554. package/esm/util/usePanelVirtualScroll.js +9 -36
  555. package/esm/util/useRowVirtualScroll.d.ts +6 -29
  556. package/esm/util/useRowVirtualScroll.js +8 -49
  557. package/esm/util/useVirtualScrollWheel.d.ts +20 -4
  558. package/esm/util/useVirtualScrollWheel.js +40 -74
  559. package/esm/util/viewHighlights.d.ts +3 -0
  560. package/esm/util/viewHighlights.js +5 -0
  561. package/esm/util/viewStatus.d.ts +47 -15
  562. package/esm/util/viewStatus.js +34 -0
  563. package/esm/util/wheelZoom.d.ts +7 -1
  564. package/esm/util/wheelZoom.js +85 -19
  565. package/esm/util/whenViewSettled.d.ts +55 -8
  566. package/esm/util/whenViewSettled.js +56 -7
  567. package/esm/util/withLaunchInput.d.ts +174 -0
  568. package/esm/util/withLaunchInput.js +274 -0
  569. package/package.json +70 -20
  570. package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.d.ts +0 -2
  571. package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.js +0 -8
  572. package/esm/BaseFeatureWidget/BaseFeatureDetail/types.d.ts +0 -8
  573. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.d.ts +0 -80
  574. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.js +0 -583
  575. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.d.ts +0 -141
  576. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.js +0 -1116
  577. package/esm/ReExports/BaseFeatureDetails.d.ts +0 -1
  578. package/esm/ReExports/BaseFeatureDetails.js +0 -10
  579. package/esm/ReExports/index.d.ts +0 -1
  580. package/esm/ReExports/index.js +0 -1
  581. package/esm/ReExports/publicUtil.d.ts +0 -1
  582. package/esm/ReExports/publicUtil.js +0 -28
  583. package/esm/configuration/promotableDefaults.d.ts +0 -199
  584. package/esm/configuration/promotableDefaults.js +0 -326
  585. package/esm/configuration/promotablePin.d.ts +0 -55
  586. package/esm/configuration/promotablePin.js +0 -1
  587. package/esm/configuration/promotableResolve.d.ts +0 -108
  588. package/esm/configuration/promotableResolve.js +0 -117
  589. package/esm/configuration/promotableSlots.d.ts +0 -12
  590. package/esm/configuration/promotableSlots.js +0 -45
  591. package/esm/configuration/slotShape.d.ts +0 -12
  592. package/esm/configuration/slotShape.js +0 -84
  593. package/esm/pluggableElementTypes/models/HighlightsMixin.d.ts +0 -51
  594. package/esm/pluggableElementTypes/models/HighlightsMixin.js +0 -78
  595. package/esm/ui/PinAdornment.d.ts +0 -5
  596. package/esm/ui/PinAdornment.js +0 -79
  597. package/esm/ui/SvgGradientLegend.d.ts +0 -26
  598. package/esm/ui/SvgGradientLegend.js +0 -26
  599. package/esm/ui/highlightChipReveal.d.ts +0 -32
  600. package/esm/ui/highlightChipReveal.js +0 -39
  601. package/esm/ui/promotableMenuItems.d.ts +0 -19
  602. package/esm/ui/promotableMenuItems.js +0 -89
  603. package/esm/ui/promotablePinCoverage.d.ts +0 -44
  604. package/esm/ui/promotablePinCoverage.js +0 -87
  605. package/esm/util/applyInitSettings.d.ts +0 -79
  606. package/esm/util/applyInitSettings.js +0 -91
  607. package/esm/util/openDisplays.d.ts +0 -23
  608. package/esm/util/openDisplays.js +0 -79
  609. package/esm/util/stopToken.d.ts +0 -211
  610. package/esm/util/stopToken.js +0 -438
  611. /package/esm/{BaseFeatureWidget/BaseFeatureDetail/types.js → data_adapters/BaseAdapter/zoomRange.js} +0 -0
@@ -0,0 +1,275 @@
1
+ // The interval `bin` and the `aggregate` behind it as one kernel, which
2
+ // `runSteps` in featureTransforms.ts reaches by relative path only.
3
+ import { readerOf } from './featureTable.js';
4
+ import { isPlainFieldRef } from './fieldReader.js';
5
+ import { isJexl } from './jexlStrings.js';
6
+ import { BIN_OVERLAP_FIELD, DEFAULT_BIN_AS, OpSums, binSize, groupKey, intervalsOf, isWeighted, madeGroups, stepNumberReader, } from './stepTables.js';
7
+ /**
8
+ * The bin's edges and `overlap` a piece carries, where an `aggregate` reads a
9
+ * field off a piece: the row's own field where the bin wrote none. A later
10
+ * entry of the bin's written fields shadows an earlier one of the same name,
11
+ * as the piece table's columns do.
12
+ */
13
+ const FROM_ROW = 0;
14
+ const FROM_BIN_START = 1;
15
+ const FROM_BIN_END = 2;
16
+ const FROM_OVERLAP = 3;
17
+ function pieceSource(field, [asStart, asEnd]) {
18
+ return field === BIN_OVERLAP_FIELD
19
+ ? FROM_OVERLAP
20
+ : field === asEnd
21
+ ? FROM_BIN_END
22
+ : field === asStart
23
+ ? FROM_BIN_START
24
+ : FROM_ROW;
25
+ }
26
+ function pick(source, row, lo, hi, overlap) {
27
+ return source === FROM_ROW
28
+ ? row
29
+ : source === FROM_BIN_START
30
+ ? lo
31
+ : source === FROM_BIN_END
32
+ ? hi
33
+ : overlap;
34
+ }
35
+ /**
36
+ * Whether an interval `bin` and the `aggregate` behind it run as one kernel:
37
+ * the aggregate groups by the bin's two edges, and every field it reads is a
38
+ * plain name, so a piece's value is its row's or one the bin wrote.
39
+ */
40
+ export function fusesBinAggregate(bin, agg) {
41
+ const as = bin.as ?? DEFAULT_BIN_AS;
42
+ const groupby = agg.groupby ?? [];
43
+ const plain = (field) => field === undefined || (isPlainFieldRef(field) && !isJexl(field));
44
+ return (bin.fields !== undefined &&
45
+ as[0] !== as[1] &&
46
+ groupby.length === 2 &&
47
+ as.every(edge => groupby.includes(edge)) &&
48
+ as.every(plain) &&
49
+ agg.ops.every(op => plain(op.field) && plain(op.weight)));
50
+ }
51
+ // Beyond this many bins over the pieces a dense bin index costs more than the
52
+ // pieces would, and the two steps run as written.
53
+ const SPARSE_BINS_PER_PIECE = 2;
54
+ const SPARSE_BINS_SLACK = 65536;
55
+ /**
56
+ * An interval `bin` and the `aggregate` grouped by its edges as one walk: each
57
+ * row's bins accumulate straight into their group's sums, with no piece table,
58
+ * the way `binRawRegion` bins a BigWig's raw section. The groups come out in
59
+ * the order the pieces would have met them and each sum adds its pieces in
60
+ * the pieces' order, so the answer is the two steps' to the bit. Undefined
61
+ * where the bins spread too thinly over the region for a dense index.
62
+ */
63
+ export function binnedAggregate({ table, bounds }, bin, agg) {
64
+ const size = binSize(bin);
65
+ const as = bin.as ?? DEFAULT_BIN_AS;
66
+ const iv = intervalsOf(table, bin.fields, size, bounds);
67
+ const { lowBin, highBin } = iv;
68
+ const sections = bounds.length - 1;
69
+ // Each section's bins from its lowest, at `offset[s]` in one index.
70
+ const offset = new Float64Array(sections + 1);
71
+ for (let s = 0; s < sections; s++) {
72
+ const span = highBin[s] - lowBin[s] + 1;
73
+ offset[s + 1] = offset[s] + (span > 0 ? span : 0);
74
+ }
75
+ const spans = offset[sections];
76
+ if (spans > SPARSE_BINS_PER_PIECE * iv.pieces + SPARSE_BINS_SLACK) {
77
+ return undefined;
78
+ }
79
+ const capacity = Math.min(spans, iv.pieces);
80
+ const groupOfBin = new Int32Array(spans).fill(-1);
81
+ const groupRow = new Uint32Array(capacity);
82
+ const groupBin = new Float64Array(capacity);
83
+ const groupSection = new Uint32Array(capacity);
84
+ const start = new Float64Array(capacity);
85
+ const end = new Float64Array(capacity);
86
+ const startSource = pieceSource('start', as);
87
+ const endSource = pieceSource('end', as);
88
+ // A group's extent is its bin's where the pieces' start and end are the
89
+ // bin's edges, the least and greatest of its pieces' otherwise.
90
+ const binExtent = startSource === FROM_BIN_START && endSource === FROM_BIN_END;
91
+ const readRowStart = readerOf(table.column('start'));
92
+ const readRowEnd = readerOf(table.column('end'));
93
+ const groups = numberGroups({ iv, bounds, size, lowBin, offset, groupOfBin }, { groupRow, groupBin, groupSection, start, end }, binExtent
94
+ ? undefined
95
+ : { startSource, endSource, readRowStart, readRowEnd });
96
+ const walk = { iv, bounds, size, lowBin, offset, groupOfBin };
97
+ const ops = agg.ops.map(op => {
98
+ const sums = new OpSums(op, groups);
99
+ const valueSource = op.op === 'count' || op.field === undefined
100
+ ? undefined
101
+ : pieceSource(op.field, as);
102
+ const weightSource = op.weight !== undefined && isWeighted(op)
103
+ ? pieceSource(op.weight, as)
104
+ : undefined;
105
+ const rowNumbers = (field, source) => field !== undefined && source === FROM_ROW
106
+ ? stepNumberReader(table, field, 'an aggregate')
107
+ : undefined;
108
+ const readValue = rowNumbers(op.field, valueSource);
109
+ const readWeight = rowNumbers(op.weight, weightSource);
110
+ if ((valueSource === undefined || readValue) &&
111
+ (weightSource === undefined ||
112
+ readWeight ||
113
+ weightSource === FROM_OVERLAP)) {
114
+ addByRow(walk, sums, readValue, readWeight, weightSource === FROM_OVERLAP);
115
+ }
116
+ else {
117
+ addByPiece(walk, sums, valueSource, weightSource, readValue, readWeight);
118
+ }
119
+ return sums.column(groups);
120
+ });
121
+ // A field's value on each group's first piece.
122
+ const each = (field) => {
123
+ const source = pieceSource(field, as);
124
+ const read = readerOf(table.column(field));
125
+ const out = new Array(groups);
126
+ for (let g = 0; g < groups; g++) {
127
+ const i = groupRow[g];
128
+ const lo = groupBin[g] * size;
129
+ const hi = lo + size;
130
+ out[g] =
131
+ source === FROM_ROW
132
+ ? read(i)
133
+ : pick(source, 0, lo, hi, Math.min(iv.end[i], hi) - Math.max(iv.start[i], lo));
134
+ }
135
+ return out;
136
+ };
137
+ return madeGroups({
138
+ groups,
139
+ keys: (agg.groupby ?? []).map((field) => [
140
+ field,
141
+ each(field).map(groupKey),
142
+ ]),
143
+ ops,
144
+ step: agg,
145
+ refNames: each('refName'),
146
+ start: start.slice(0, groups),
147
+ end: end.slice(0, groups),
148
+ sectionOf: groupSection,
149
+ sections: bounds.length,
150
+ });
151
+ }
152
+ /**
153
+ * Each bin's group, numbered in the order the pieces meet them, with the
154
+ * first piece's row, the bin and the section, and each group's extent: its
155
+ * bin's, or the least start and greatest end its pieces read where `extent`
156
+ * says where they read them. Answers how many groups there are.
157
+ */
158
+ function numberGroups({ iv, bounds, size, lowBin, offset, groupOfBin }, out, extent) {
159
+ const { groupRow, groupBin, groupSection, start, end } = out;
160
+ let groups = 0;
161
+ for (let s = 0; s + 1 < bounds.length; s++) {
162
+ const base = offset[s] - lowBin[s];
163
+ for (let i = bounds[s]; i < bounds[s + 1]; i++) {
164
+ const first = iv.first[i];
165
+ if (Number.isNaN(first)) {
166
+ continue;
167
+ }
168
+ const last = iv.last[i];
169
+ for (let b = first; b <= last; b++) {
170
+ let g = groupOfBin[base + b];
171
+ if (g < 0) {
172
+ g = groups++;
173
+ groupOfBin[base + b] = g;
174
+ groupRow[g] = i;
175
+ groupBin[g] = b;
176
+ groupSection[g] = s;
177
+ start[g] = b * size;
178
+ end[g] = b * size + size;
179
+ }
180
+ }
181
+ }
182
+ }
183
+ if (extent) {
184
+ start.fill(Infinity);
185
+ end.fill(-Infinity);
186
+ const { startSource, endSource, readRowStart, readRowEnd } = extent;
187
+ for (let s = 0; s + 1 < bounds.length; s++) {
188
+ const base = offset[s] - lowBin[s];
189
+ for (let i = bounds[s]; i < bounds[s + 1]; i++) {
190
+ const first = iv.first[i];
191
+ if (Number.isNaN(first)) {
192
+ continue;
193
+ }
194
+ const ownStart = readRowStart(i);
195
+ const ownEnd = readRowEnd(i);
196
+ for (let b = first; b <= iv.last[i]; b++) {
197
+ const g = groupOfBin[base + b];
198
+ const lo = b * size;
199
+ const hi = lo + size;
200
+ const overlap = Math.min(iv.end[i], hi) - Math.max(iv.start[i], lo);
201
+ start[g] = Math.min(start[g], pick(startSource, ownStart, lo, hi, overlap));
202
+ end[g] = Math.max(end[g], pick(endSource, ownEnd, lo, hi, overlap));
203
+ }
204
+ }
205
+ }
206
+ }
207
+ return groups;
208
+ }
209
+ /**
210
+ * One op's sums where its value is its row's and its weight its row's, its
211
+ * piece's overlap or none: a row whose value or weight is not a number adds
212
+ * nothing to any bin, so it is skipped whole. A piece's overlap is always a
213
+ * number, since the row's ends are.
214
+ */
215
+ function addByRow({ iv, bounds, size, lowBin, offset, groupOfBin }, { sum, weight, min, max, op }, readValue, readWeight, byOverlap) {
216
+ const readsValue = op !== 'count';
217
+ for (let s = 0; s + 1 < bounds.length; s++) {
218
+ const base = offset[s] - lowBin[s];
219
+ for (let i = bounds[s]; i < bounds[s + 1]; i++) {
220
+ const first = iv.first[i];
221
+ const v = readValue ? readValue(i) : Number.NaN;
222
+ const rowWeight = readWeight ? readWeight(i) : 1;
223
+ if (Number.isNaN(first) ||
224
+ (readsValue && !Number.isFinite(v)) ||
225
+ !Number.isFinite(rowWeight)) {
226
+ continue;
227
+ }
228
+ const rowS = iv.start[i];
229
+ const rowE = iv.end[i];
230
+ const last = iv.last[i];
231
+ for (let b = first; b <= last; b++) {
232
+ const g = groupOfBin[base + b];
233
+ const lo = b * size;
234
+ const w = byOverlap
235
+ ? Math.min(rowE, lo + size) - Math.max(rowS, lo)
236
+ : rowWeight;
237
+ weight[g] += w;
238
+ if (readsValue) {
239
+ sum[g] += v * w;
240
+ if (v < min[g]) {
241
+ min[g] = v;
242
+ }
243
+ if (v > max[g]) {
244
+ max[g] = v;
245
+ }
246
+ }
247
+ }
248
+ }
249
+ }
250
+ }
251
+ /** One op's sums where its value or weight is a field the bin wrote. */
252
+ function addByPiece({ iv, bounds, size, lowBin, offset, groupOfBin }, sums, valueSource, weightSource, readValue, readWeight) {
253
+ for (let s = 0; s + 1 < bounds.length; s++) {
254
+ const base = offset[s] - lowBin[s];
255
+ for (let i = bounds[s]; i < bounds[s + 1]; i++) {
256
+ const first = iv.first[i];
257
+ if (Number.isNaN(first)) {
258
+ continue;
259
+ }
260
+ const rowV = readValue ? readValue(i) : Number.NaN;
261
+ const rowW = readWeight ? readWeight(i) : 1;
262
+ const last = iv.last[i];
263
+ for (let b = first; b <= last; b++) {
264
+ const lo = b * size;
265
+ const hi = lo + size;
266
+ const overlap = Math.min(iv.end[i], hi) - Math.max(iv.start[i], lo);
267
+ sums.add(groupOfBin[base + b], valueSource === undefined
268
+ ? Number.NaN
269
+ : pick(valueSource, rowV, lo, hi, overlap), weightSource === undefined
270
+ ? 1
271
+ : pick(weightSource, rowW, lo, hi, overlap));
272
+ }
273
+ }
274
+ }
275
+ }
@@ -1,10 +1,10 @@
1
1
  import { SharedBudget } from '@gmod/shared-read-cache';
2
2
  /**
3
- * Ceilings on what the indexed-format libraries retain, shared by every adapter
4
- * in this JS context — so one per RPC worker, plus one on the main thread,
5
- * which is the scope that actually runs out of memory.
3
+ * The ceiling on what the indexed-format libraries retain, shared by every
4
+ * adapter in this JS context — so one per RPC worker, plus one on the main
5
+ * thread, which is the scope that actually runs out of memory.
6
6
  *
7
- * ## Why these are not per file
7
+ * ## Why this is not per file
8
8
  *
9
9
  * `@gmod/bam`, `@gmod/tabix` and `@gmod/cram` each take a per-file budget,
10
10
  * sized so that a single track panning never falls off the cliff where a cache
@@ -29,24 +29,27 @@ import { SharedBudget } from '@gmod/shared-read-cache';
29
29
  * at hand their space to the one being panned, so the active track keeps a
30
30
  * whole working set however many are open.
31
31
  *
32
- * ## The numbers are not new
32
+ * ## The number is not new
33
33
  *
34
- * Both are the libraries' own per-file defaults, moved from per-file to
35
- * per-context. That makes this a strict tightening — retention can only fall —
36
- * and avoids inventing a number that would need its own justification. The
37
- * budget still has to clear one query's working set or the cliff returns, and
38
- * on that workload 512 MB shared across three tracks already cost 43 refills
39
- * where 1 GB cost 4.
34
+ * 1 GB is the libraries' own per-file default (`DEFAULT_MAX_CACHE_BYTES` in
35
+ * both `@gmod/bam` and `@gmod/cram`), moved from per-file to per-context. That
36
+ * makes this a strict tightening — retention can only fall — and avoids
37
+ * inventing a number that would need its own justification. With one file open
38
+ * the two ceilings coincide; from the second file on, this one is the one that
39
+ * binds. The budget still has to clear one query's working set or the cliff
40
+ * returns, and on that workload 512 MB shared across three tracks already cost
41
+ * 43 refills where 1 GB cost 4.
40
42
  *
41
- * ## Two budgets, because units cannot mix
43
+ * ## One budget, because every member weighs bytes
42
44
  *
43
45
  * `SharedBudget.total` is a sum over its members, so they must all weigh in the
44
- * same unit. `@gmod/bam` and `@gmod/tabix` weigh decompressed bytes;
45
- * `@gmod/cram` weighs decoded records, because a decoded record has no cheap
46
- * size. A single budget spanning them would add records to bytes and bound
47
- * neither. `sizeOf` is opaque, so nothing can catch that at runtime — hence two
48
- * budgets named for their units.
46
+ * same unit, and `sizeOf` is opaque, so nothing could catch a mismatch at
47
+ * runtime. `@gmod/bam` and `@gmod/tabix` weigh decompressed bytes, and since 14
48
+ * `@gmod/cram` weighs a decoded slice by `DecodedSlice.byteLength` — its typed
49
+ * columns exactly and its strings by estimate, within 1–8% of the measured heap
50
+ * (its ADR 0013). Before that a CRAM slice weighed its record count, which is
51
+ * why this used to be two budgets named for their units: a million records
52
+ * could not be added to bytes, and never bound long-read data either, where a
53
+ * 6 MB slice counted as 37.
49
54
  */
50
55
  export declare const decompressedBytesBudget: SharedBudget;
51
- /** See {@link decompressedBytesBudget}. Records, not bytes — CRAM only. */
52
- export declare const decodedRecordsBudget: SharedBudget;
@@ -1,10 +1,10 @@
1
1
  import { SharedBudget } from '@gmod/shared-read-cache';
2
2
  /**
3
- * Ceilings on what the indexed-format libraries retain, shared by every adapter
4
- * in this JS context — so one per RPC worker, plus one on the main thread,
5
- * which is the scope that actually runs out of memory.
3
+ * The ceiling on what the indexed-format libraries retain, shared by every
4
+ * adapter in this JS context — so one per RPC worker, plus one on the main
5
+ * thread, which is the scope that actually runs out of memory.
6
6
  *
7
- * ## Why these are not per file
7
+ * ## Why this is not per file
8
8
  *
9
9
  * `@gmod/bam`, `@gmod/tabix` and `@gmod/cram` each take a per-file budget,
10
10
  * sized so that a single track panning never falls off the cliff where a cache
@@ -29,24 +29,27 @@ import { SharedBudget } from '@gmod/shared-read-cache';
29
29
  * at hand their space to the one being panned, so the active track keeps a
30
30
  * whole working set however many are open.
31
31
  *
32
- * ## The numbers are not new
32
+ * ## The number is not new
33
33
  *
34
- * Both are the libraries' own per-file defaults, moved from per-file to
35
- * per-context. That makes this a strict tightening — retention can only fall —
36
- * and avoids inventing a number that would need its own justification. The
37
- * budget still has to clear one query's working set or the cliff returns, and
38
- * on that workload 512 MB shared across three tracks already cost 43 refills
39
- * where 1 GB cost 4.
34
+ * 1 GB is the libraries' own per-file default (`DEFAULT_MAX_CACHE_BYTES` in
35
+ * both `@gmod/bam` and `@gmod/cram`), moved from per-file to per-context. That
36
+ * makes this a strict tightening — retention can only fall — and avoids
37
+ * inventing a number that would need its own justification. With one file open
38
+ * the two ceilings coincide; from the second file on, this one is the one that
39
+ * binds. The budget still has to clear one query's working set or the cliff
40
+ * returns, and on that workload 512 MB shared across three tracks already cost
41
+ * 43 refills where 1 GB cost 4.
40
42
  *
41
- * ## Two budgets, because units cannot mix
43
+ * ## One budget, because every member weighs bytes
42
44
  *
43
45
  * `SharedBudget.total` is a sum over its members, so they must all weigh in the
44
- * same unit. `@gmod/bam` and `@gmod/tabix` weigh decompressed bytes;
45
- * `@gmod/cram` weighs decoded records, because a decoded record has no cheap
46
- * size. A single budget spanning them would add records to bytes and bound
47
- * neither. `sizeOf` is opaque, so nothing can catch that at runtime — hence two
48
- * budgets named for their units.
46
+ * same unit, and `sizeOf` is opaque, so nothing could catch a mismatch at
47
+ * runtime. `@gmod/bam` and `@gmod/tabix` weigh decompressed bytes, and since 14
48
+ * `@gmod/cram` weighs a decoded slice by `DecodedSlice.byteLength` — its typed
49
+ * columns exactly and its strings by estimate, within 1–8% of the measured heap
50
+ * (its ADR 0013). Before that a CRAM slice weighed its record count, which is
51
+ * why this used to be two budgets named for their units: a million records
52
+ * could not be added to bytes, and never bound long-read data either, where a
53
+ * 6 MB slice counted as 37.
49
54
  */
50
55
  export const decompressedBytesBudget = new SharedBudget(1024 * 2 ** 20);
51
- /** See {@link decompressedBytesBudget}. Records, not bytes — CRAM only. */
52
- export const decodedRecordsBudget = new SharedBudget(1_000_000);
@@ -17,7 +17,7 @@ type OnProgress = (current: number, total?: number) => void;
17
17
  * moment that fetch was superseded — the display's latest-wins guard gates the
18
18
  * old callback off — so the fetch replacing it awaited a multi-GB parse behind
19
19
  * a blank loading overlay.
20
- * - **`stopToken` is withheld from the shared work.** Honoring one caller's
20
+ * - **`signal` is withheld from the shared work.** Honoring one caller's
21
21
  * cancel would abort a parse the caller replacing it is already waiting on,
22
22
  * and reject them both. A superseded fetch just stops listening. Cancellation
23
23
  * stays with the per-call work (indexed range queries), which no one else is
@@ -15,7 +15,7 @@ import { downloadStatus } from './progress.js';
15
15
  * moment that fetch was superseded — the display's latest-wins guard gates the
16
16
  * old callback off — so the fetch replacing it awaited a multi-GB parse behind
17
17
  * a blank loading overlay.
18
- * - **`stopToken` is withheld from the shared work.** Honoring one caller's
18
+ * - **`signal` is withheld from the shared work.** Honoring one caller's
19
19
  * cancel would abort a parse the caller replacing it is already waiting on,
20
20
  * and reject them both. A superseded fetch just stops listening. Cancellation
21
21
  * stays with the per-call work (indexed range queries), which no one else is
@@ -39,7 +39,7 @@ export function cachedSetup({ setup, label, }) {
39
39
  const run = (opts, onProgress) => {
40
40
  cached ??= setup({
41
41
  ...opts,
42
- stopToken: undefined,
42
+ signal: undefined,
43
43
  statusCallback: status => {
44
44
  for (const cb of waiting) {
45
45
  cb(status);
@@ -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
+ }
@@ -24,3 +24,20 @@ export declare function clampToContig(assembly: Assembly, region: {
24
24
  start: number;
25
25
  end: number;
26
26
  }): Region | undefined;
27
+ /**
28
+ * `clampToContig` for a refName that may not be on the assembly at all, which
29
+ * is the shape a location nobody requested arrives in — a BAM's `nextRef`, an
30
+ * SA record's contig (REFNAME_NAMESPACES.md). `clampToContig` alone passes an
31
+ * unknown name through with nothing to clamp against, so it cannot tell "past
32
+ * the end of a contig we have" from "a contig we do not have", and both callers
33
+ * need that apart to say which happened.
34
+ */
35
+ export declare function clampToListedContig(assembly: Assembly, region: {
36
+ refName: string;
37
+ start: number;
38
+ end: number;
39
+ }): {
40
+ refName: string;
41
+ onAssembly: boolean;
42
+ region: Region | undefined;
43
+ };
@@ -26,3 +26,22 @@ export function clampToContig(assembly, region) {
26
26
  ? { ...region, assemblyName: assembly.name, refName, start, end }
27
27
  : undefined;
28
28
  }
29
+ /**
30
+ * `clampToContig` for a refName that may not be on the assembly at all, which
31
+ * is the shape a location nobody requested arrives in — a BAM's `nextRef`, an
32
+ * SA record's contig (REFNAME_NAMESPACES.md). `clampToContig` alone passes an
33
+ * unknown name through with nothing to clamp against, so it cannot tell "past
34
+ * the end of a contig we have" from "a contig we do not have", and both callers
35
+ * need that apart to say which happened.
36
+ */
37
+ export function clampToListedContig(assembly, region) {
38
+ const refName = assembly.getCanonicalRefName2(region.refName);
39
+ const onAssembly = assembly.getRegionForRefName(refName) !== undefined;
40
+ return {
41
+ refName,
42
+ onAssembly,
43
+ region: onAssembly
44
+ ? clampToContig(assembly, { ...region, refName })
45
+ : undefined,
46
+ };
47
+ }
@@ -1,5 +1,4 @@
1
- // not a sanitizer, this just removes html tags for use in measureText-based
2
- // element width calculations
1
+ // not a sanitizer, this just removes html tags where only the text is shown
3
2
  export function coarseStripHTML(s) {
4
3
  return s.replaceAll(/<[^<>]*>/g, '');
5
4
  }
@@ -1,2 +1,3 @@
1
1
  export declare function namedColorToHex(name: string): string | undefined;
2
2
  export declare function isNamedColor(name: string): boolean;
3
+ export declare const CSS_COLOR_NAMES: readonly string[];
@@ -158,3 +158,4 @@ export function namedColorToHex(name) {
158
158
  export function isNamedColor(name) {
159
159
  return Object.hasOwn(colors, name);
160
160
  }
161
+ export const CSS_COLOR_NAMES = Object.keys(colors);
@@ -20,7 +20,9 @@ export declare function emphasize(color: string, coefficient?: number): string;
20
20
  * default refName colors.
21
21
  */
22
22
  export declare function makeContrasting(foreground: string, background?: string, minContrastRatio?: number): string;
23
- export { isNamedColor, namedColorToHex } from './cssColorsLevel4.ts';
23
+ export { CSS_COLOR_NAMES, isNamedColor, namedColorToHex, } from './cssColorsLevel4.ts';
24
+ export declare const NO_CATEGORY_COLOR = "#afafaf";
25
+ export declare const MISCONFIGURED_COLOR = "#808080";
24
26
  /**
25
27
  * #api
26
28
  * Move a color's OKLCH lightness by `lightnessShift` and scale its chroma,
@@ -69,8 +71,8 @@ export declare function relight(color: string, lightnessShift: number, chromaSca
69
71
  *
70
72
  * A value that is absent gets NO_CATEGORY_COLOR rather than a hue, and that is
71
73
  * the difference between this being usable on real data and not. The everyday
72
- * caller is the Color-by-attribute dialog, which writes
73
- * `jexl:randomColor(get(feature,'<attr>'))` over a whole track — and most files
74
+ * caller is a `jexl:randomColor(get(feature,'<attr>'))` color slot over a
75
+ * whole track — and most files
74
76
  * have the attribute on some features and not others, so most of the time this
75
77
  * is handed `undefined`. It used to throw on that (`str.length` of undefined),
76
78
  * once per feature, and what a reader saw was every unlabelled feature in one