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

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 (439) hide show
  1. package/README.md +450 -132
  2. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +3 -2
  3. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +4 -2
  4. package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +6 -2
  5. package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +18 -3
  6. package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseAttributes.d.ts +2 -1
  7. package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseAttributes.js +4 -2
  8. package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCard.d.ts +2 -1
  9. package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCard.js +4 -2
  10. package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCoreDetails.d.ts +2 -1
  11. package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCoreDetails.js +4 -2
  12. package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.d.ts +5 -4
  13. package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.js +6 -4
  14. package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.d.ts +2 -1
  15. package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.js +4 -2
  16. package/esm/BaseFeatureWidget/BaseFeatureDetail/DataGridDetails.d.ts +3 -2
  17. package/esm/BaseFeatureWidget/BaseFeatureDetail/DataGridDetails.js +4 -2
  18. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.js +2 -2
  19. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureWash.d.ts +3 -2
  20. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureWash.js +4 -2
  21. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.d.ts +3 -2
  22. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.js +4 -2
  23. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldName.d.ts +3 -2
  24. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldName.js +4 -2
  25. package/esm/BaseFeatureWidget/BaseFeatureDetail/Formatter.d.ts +3 -2
  26. package/esm/BaseFeatureWidget/BaseFeatureDetail/Formatter.js +4 -2
  27. package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.d.ts +3 -2
  28. package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.js +4 -2
  29. package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.d.ts +3 -2
  30. package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +4 -2
  31. package/esm/BaseFeatureWidget/BaseFeatureDetail/UriField.d.ts +3 -2
  32. package/esm/BaseFeatureWidget/BaseFeatureDetail/UriField.js +4 -2
  33. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceBody.d.ts +3 -2
  34. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceBody.js +4 -2
  35. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.d.ts +3 -1
  36. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.js +15 -24
  37. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeaturePanel.js +1 -1
  38. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceLegend.d.ts +3 -2
  39. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceLegend.js +4 -2
  40. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequencePanel.js +4 -4
  41. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/FeatureSequenceDialog.d.ts +3 -1
  42. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/FeatureSequenceDialog.js +2 -2
  43. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/HelpDialog.d.ts +3 -2
  44. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/HelpDialog.js +4 -2
  45. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceDialog.d.ts +1 -2
  46. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceDialog.js +2 -2
  47. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceTypeSelector.d.ts +1 -2
  48. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceTypeSelector.js +15 -36
  49. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.d.ts +3 -2
  50. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.js +4 -2
  51. package/esm/BaseFeatureWidget/SequenceFeatureDetails/featureTypeUtil.d.ts +4 -2
  52. package/esm/BaseFeatureWidget/SequenceFeatureDetails/featureTypeUtil.js +29 -20
  53. package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.d.ts +13 -1
  54. package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.js +28 -1
  55. package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/CDNASequence.js +3 -3
  56. package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/SequenceDisplay.js +2 -2
  57. package/esm/BaseFeatureWidget/stateModelFactory.d.ts +9 -0
  58. package/esm/BaseFeatureWidget/stateModelFactory.js +11 -0
  59. package/esm/BaseFeatureWidget/types.d.ts +2 -0
  60. package/esm/PluginManager.d.ts +7 -3
  61. package/esm/PluginManager.js +12 -3
  62. package/esm/ReExports/coreModules.generated.js +538 -518
  63. package/esm/ReExports/coreWorkerModules.generated.js +456 -438
  64. package/esm/ReExports/lazify.js +3 -2
  65. package/esm/ReExports/list.js +22 -6
  66. package/esm/ReExports/names.d.ts +1 -0
  67. package/esm/ReExports/names.generated.d.ts +2 -0
  68. package/esm/ReExports/names.generated.js +566 -0
  69. package/esm/ReExports/names.js +3 -0
  70. package/esm/TextSearch/TextSearchManager.d.ts +3 -3
  71. package/esm/TextSearch/TextSearchManager.js +6 -13
  72. package/esm/assemblyManager/assembly.d.ts +9 -0
  73. package/esm/assemblyManager/assembly.js +13 -0
  74. package/esm/assemblyManager/assemblyConfigSchema.d.ts +6 -1
  75. package/esm/assemblyManager/assemblyConfigSchema.js +23 -22
  76. package/esm/assemblyManager/assemblyManager.d.ts +11 -0
  77. package/esm/assemblyManager/assemblyManager.js +2 -0
  78. package/esm/assemblyManager/expandAssemblyConfigShorthand.d.ts +9 -0
  79. package/esm/assemblyManager/expandAssemblyConfigShorthand.js +23 -0
  80. package/esm/checkPlugins.js +10 -4
  81. package/esm/configuration/configurationSchema.d.ts +51 -100
  82. package/esm/configuration/configurationSchema.js +59 -225
  83. package/esm/configuration/configurationSchemaUnion.d.ts +2 -1
  84. package/esm/configuration/configurationSchemaUnion.js +2 -1
  85. package/esm/configuration/configurationSlot.d.ts +18 -64
  86. package/esm/configuration/configurationSlot.js +32 -98
  87. package/esm/configuration/fillLocations.d.ts +4 -2
  88. package/esm/configuration/fillLocations.js +9 -3
  89. package/esm/configuration/formatAboutConfigSchema.d.ts +2 -2
  90. package/esm/configuration/formatAboutConfigSchema.js +2 -2
  91. package/esm/configuration/formatDetailsConfigSchema.d.ts +2 -2
  92. package/esm/configuration/formatDetailsConfigSchema.js +7 -5
  93. package/esm/configuration/getConf.d.ts +7 -36
  94. package/esm/configuration/getConf.js +20 -41
  95. package/esm/configuration/index.d.ts +4 -3
  96. package/esm/configuration/index.js +3 -2
  97. package/esm/configuration/partitionAdvanced.d.ts +12 -0
  98. package/esm/configuration/partitionAdvanced.js +42 -0
  99. package/esm/configuration/plot.d.ts +6 -0
  100. package/esm/configuration/plot.js +56 -9
  101. package/esm/configuration/readConfObject.d.ts +15 -17
  102. package/esm/configuration/readConfObject.js +19 -50
  103. package/esm/configuration/schemaRegistry.d.ts +0 -2
  104. package/esm/configuration/schemaTypes.js +5 -1
  105. package/esm/configuration/slotFacade.js +2 -2
  106. package/esm/configuration/snapshotPreprocess.d.ts +42 -18
  107. package/esm/configuration/snapshotPreprocess.js +95 -37
  108. package/esm/configuration/tabixShorthand.js +1 -3
  109. package/esm/configuration/types.d.ts +60 -159
  110. package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +7 -0
  111. package/esm/data_adapters/BaseAdapter/BaseAdapter.js +7 -0
  112. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +0 -22
  113. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +0 -55
  114. package/esm/data_adapters/BaseAdapter/index.d.ts +0 -1
  115. package/esm/data_adapters/BaseAdapter/index.js +0 -1
  116. package/esm/data_adapters/BaseAdapter/rowSources.d.ts +2 -2
  117. package/esm/data_adapters/BaseAdapter/types.d.ts +1 -0
  118. package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +2 -0
  119. package/esm/data_adapters/CytobandAdapter/configSchema.js +5 -0
  120. package/esm/data_adapters/dataAdapterCache.d.ts +25 -13
  121. package/esm/data_adapters/dataAdapterCache.js +68 -24
  122. package/esm/data_adapters/getFeatureAdapter.d.ts +9 -0
  123. package/esm/data_adapters/getFeatureAdapter.js +17 -0
  124. package/esm/pluggableElementTypes/DisplayType.d.ts +7 -0
  125. package/esm/pluggableElementTypes/DisplayType.js +7 -0
  126. package/esm/pluggableElementTypes/RpcMethodType.d.ts +7 -0
  127. package/esm/pluggableElementTypes/RpcMethodType.js +9 -0
  128. package/esm/pluggableElementTypes/addMenuItems.d.ts +2 -1
  129. package/esm/pluggableElementTypes/addMenuItems.js +2 -1
  130. package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +2 -0
  131. package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.js +2 -0
  132. package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +40 -5
  133. package/esm/pluggableElementTypes/models/BaseDisplayModel.js +57 -9
  134. package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +5 -7
  135. package/esm/pluggableElementTypes/models/BaseTrackModel.js +9 -10
  136. package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +2 -0
  137. package/esm/pluggableElementTypes/models/BaseViewModel.js +2 -0
  138. package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +3 -0
  139. package/esm/pluggableElementTypes/models/InternetAccountModel.js +3 -0
  140. package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +3 -0
  141. package/esm/pluggableElementTypes/models/baseConnectionConfig.js +3 -0
  142. package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +3 -1
  143. package/esm/pluggableElementTypes/models/baseInternetAccountConfig.js +3 -1
  144. package/esm/pluggableElementTypes/models/baseTrackConfig.js +12 -1
  145. package/esm/pluggableElementTypes/models/components/SaveTrackData.js +2 -2
  146. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +1 -1
  147. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +1 -1
  148. package/esm/pluginDefinitions.d.ts +7 -0
  149. package/esm/pluginDefinitions.js +20 -0
  150. package/esm/rpc/RpcRegistry.d.ts +2 -11
  151. package/esm/rpc/byteBudget.d.ts +15 -0
  152. package/esm/rpc/byteBudget.js +23 -0
  153. package/esm/rpc/configSchema.d.ts +2 -0
  154. package/esm/rpc/configSchema.js +3 -1
  155. package/esm/rpc/coreRpcMethods.d.ts +1 -2
  156. package/esm/rpc/coreRpcMethods.js +1 -2
  157. package/esm/rpc/explainTransferError.js +3 -3
  158. package/esm/rpc/methods/CoreGetEncodedLayers.d.ts +2 -2
  159. package/esm/rpc/methods/CoreGetEncodedLayers.js +7 -5
  160. package/esm/rpc/methods/CoreLoadTrackCode.d.ts +17 -0
  161. package/esm/rpc/methods/CoreLoadTrackCode.js +24 -0
  162. package/esm/rpc/methods/layerFeatures.d.ts +9 -6
  163. package/esm/rpc/methods/layerFeatures.js +21 -5
  164. package/esm/ui/ActionLink.d.ts +3 -2
  165. package/esm/ui/ActionLink.js +4 -2
  166. package/esm/ui/AddCustomPluginDialog.d.ts +3 -2
  167. package/esm/ui/AddCustomPluginDialog.js +6 -4
  168. package/esm/ui/AppLogo.js +43 -3
  169. package/esm/ui/BaseTooltip.d.ts +3 -2
  170. package/esm/ui/BaseTooltip.js +4 -2
  171. package/esm/ui/CascadingMenu.js +14 -12
  172. package/esm/ui/CascadingMenuButton.d.ts +2 -2
  173. package/esm/ui/CascadingMenuButton.js +5 -4
  174. package/esm/ui/CascadingMenuHelpDialog.d.ts +3 -2
  175. package/esm/ui/CascadingMenuHelpDialog.js +4 -2
  176. package/esm/ui/CascadingMenuHelpIconButton.d.ts +4 -3
  177. package/esm/ui/CascadingMenuHelpIconButton.js +9 -5
  178. package/esm/ui/ColorPicker.d.ts +5 -4
  179. package/esm/ui/ColorPicker.js +6 -4
  180. package/esm/ui/ContextMenu.d.ts +1 -1
  181. package/esm/ui/ContextMenu.js +1 -1
  182. package/esm/ui/CopyToClipboardButton.d.ts +3 -2
  183. package/esm/ui/CopyToClipboardButton.js +4 -2
  184. package/esm/ui/Crosshairs.js +13 -10
  185. package/esm/ui/DOMPurifySanitizedHTML.d.ts +3 -2
  186. package/esm/ui/DOMPurifySanitizedHTML.js +4 -2
  187. package/esm/ui/DataGridFlexContainer.d.ts +3 -2
  188. package/esm/ui/DataGridFlexContainer.js +4 -2
  189. package/esm/ui/Dialog.d.ts +1 -1
  190. package/esm/ui/Dialog.js +5 -4
  191. package/esm/ui/DropDownMenu.js +2 -2
  192. package/esm/ui/EditableTypography.d.ts +1 -1
  193. package/esm/ui/EditableTypography.js +3 -2
  194. package/esm/ui/ErrorActions.d.ts +3 -2
  195. package/esm/ui/ErrorActions.js +4 -2
  196. package/esm/ui/ErrorBanner.d.ts +2 -2
  197. package/esm/ui/ErrorBanner.js +3 -2
  198. package/esm/ui/ErrorBar.d.ts +3 -2
  199. package/esm/ui/ErrorBar.js +4 -2
  200. package/esm/ui/ErrorMessage.d.ts +3 -2
  201. package/esm/ui/ErrorMessage.js +4 -2
  202. package/esm/ui/ErrorMessageStackTraceContents.d.ts +3 -2
  203. package/esm/ui/ErrorMessageStackTraceContents.js +4 -2
  204. package/esm/ui/ErrorMessageStackTraceDialog.d.ts +3 -2
  205. package/esm/ui/ErrorMessageStackTraceDialog.js +4 -2
  206. package/esm/ui/ErrorOverlay.d.ts +3 -2
  207. package/esm/ui/ErrorOverlay.js +4 -2
  208. package/esm/ui/ExportSvgDialog.d.ts +3 -2
  209. package/esm/ui/ExportSvgDialog.js +4 -2
  210. package/esm/ui/ExternalLink.d.ts +2 -1
  211. package/esm/ui/ExternalLink.js +4 -2
  212. package/esm/ui/FactoryResetDialog.d.ts +3 -2
  213. package/esm/ui/FactoryResetDialog.js +4 -2
  214. package/esm/ui/FatalErrorDialog.d.ts +3 -2
  215. package/esm/ui/FatalErrorDialog.js +6 -4
  216. package/esm/ui/FileDropZone.d.ts +3 -2
  217. package/esm/ui/FileDropZone.js +4 -2
  218. package/esm/ui/FileSelector/LocalFileChooser.js +4 -4
  219. package/esm/ui/FileSelector/LocationInput.d.ts +3 -2
  220. package/esm/ui/FileSelector/LocationInput.js +4 -2
  221. package/esm/ui/FileSelector/SourceTypeSelector.d.ts +3 -2
  222. package/esm/ui/FileSelector/SourceTypeSelector.js +8 -6
  223. package/esm/ui/GpuFallbackButton.d.ts +3 -2
  224. package/esm/ui/GpuFallbackButton.js +4 -2
  225. package/esm/ui/HoverMenu.d.ts +2 -2
  226. package/esm/ui/HoverMenu.js +7 -3
  227. package/esm/ui/HoverTooltip.d.ts +3 -2
  228. package/esm/ui/HoverTooltip.js +4 -2
  229. package/esm/ui/Icons.d.ts +5 -5
  230. package/esm/ui/Icons.js +11 -10
  231. package/esm/ui/InlineMenuControls.d.ts +2 -2
  232. package/esm/ui/InlineMenuControls.js +4 -3
  233. package/esm/ui/JexlFilterRowEditors.d.ts +4 -4
  234. package/esm/ui/JexlFilterRowEditors.js +9 -8
  235. package/esm/ui/LabeledCheckbox.d.ts +3 -2
  236. package/esm/ui/LabeledCheckbox.js +4 -2
  237. package/esm/ui/LazyBaseTooltip.d.ts +12 -3
  238. package/esm/ui/LazyBaseTooltip.js +4 -2
  239. package/esm/ui/LegendSwatchGlyph.js +1 -0
  240. package/esm/ui/LoadingDots.d.ts +2 -1
  241. package/esm/ui/LoadingDots.js +4 -2
  242. package/esm/ui/LoadingEllipses.d.ts +5 -2
  243. package/esm/ui/LoadingEllipses.js +5 -3
  244. package/esm/ui/LoadingOverlay.d.ts +3 -2
  245. package/esm/ui/LoadingOverlay.js +4 -2
  246. package/esm/ui/LoadingProgress.d.ts +3 -2
  247. package/esm/ui/LoadingProgress.js +4 -2
  248. package/esm/ui/Logo.d.ts +2 -2
  249. package/esm/ui/Logo.js +9 -8
  250. package/esm/ui/MenuItemChevron.d.ts +2 -2
  251. package/esm/ui/MenuItemChevron.js +3 -2
  252. package/esm/ui/MenuItemEndDecoration.d.ts +2 -2
  253. package/esm/ui/MenuItemEndDecoration.js +3 -2
  254. package/esm/ui/MenuItemTrailing.d.ts +2 -2
  255. package/esm/ui/MenuItemTrailing.js +7 -6
  256. package/esm/ui/MenuTypes.d.ts +21 -1
  257. package/esm/ui/MenuTypes.js +20 -0
  258. package/esm/ui/MonospaceTextField.d.ts +3 -2
  259. package/esm/ui/MonospaceTextField.js +4 -2
  260. package/esm/ui/NumberTextField.d.ts +2 -2
  261. package/esm/ui/NumberTextField.js +4 -2
  262. package/esm/ui/PaletteContext.d.ts +11 -9
  263. package/esm/ui/PaletteContext.js +33 -18
  264. package/esm/ui/PluginStoreCard.d.ts +3 -2
  265. package/esm/ui/PluginStoreCard.js +4 -2
  266. package/esm/ui/PopoverPicker.d.ts +3 -2
  267. package/esm/ui/PopoverPicker.js +4 -2
  268. package/esm/ui/PrerenderedCanvas.d.ts +2 -2
  269. package/esm/ui/PrerenderedCanvas.js +3 -2
  270. package/esm/ui/RedErrorMessageBox.d.ts +3 -2
  271. package/esm/ui/RedErrorMessageBox.js +4 -2
  272. package/esm/ui/RefNameAutocomplete/EndAdornment.d.ts +3 -2
  273. package/esm/ui/RefNameAutocomplete/EndAdornment.js +4 -2
  274. package/esm/ui/RefNameAutocomplete/HelpDialog.d.ts +3 -2
  275. package/esm/ui/RefNameAutocomplete/HelpDialog.js +4 -2
  276. package/esm/ui/ReplaceCurrentViewButton.d.ts +3 -2
  277. package/esm/ui/ReplaceCurrentViewButton.js +4 -2
  278. package/esm/ui/ResizeHandle.d.ts +2 -2
  279. package/esm/ui/ResizeHandle.js +3 -2
  280. package/esm/ui/SanitizedHTML.d.ts +3 -2
  281. package/esm/ui/SanitizedHTML.js +6 -4
  282. package/esm/ui/ScrollChrome.d.ts +3 -2
  283. package/esm/ui/ScrollChrome.js +4 -2
  284. package/esm/ui/ScrollEdgeShadow.d.ts +2 -2
  285. package/esm/ui/ScrollEdgeShadow.js +2 -2
  286. package/esm/ui/SessionJsonPanel.d.ts +3 -2
  287. package/esm/ui/SessionJsonPanel.js +4 -2
  288. package/esm/ui/ShareLinkField.d.ts +3 -2
  289. package/esm/ui/ShareLinkField.js +4 -2
  290. package/esm/ui/SingleSlider.d.ts +2 -2
  291. package/esm/ui/SingleSlider.js +4 -2
  292. package/esm/ui/SliderTooltip.d.ts +2 -1
  293. package/esm/ui/SliderTooltip.js +4 -2
  294. package/esm/ui/SnackbarContents.d.ts +3 -2
  295. package/esm/ui/SnackbarContents.js +4 -2
  296. package/esm/ui/SnackbarModel.d.ts +2 -0
  297. package/esm/ui/SnackbarModel.js +2 -0
  298. package/esm/ui/StackTraceButton.d.ts +3 -2
  299. package/esm/ui/StackTraceButton.js +4 -2
  300. package/esm/ui/StatusProgressBar.d.ts +3 -2
  301. package/esm/ui/StatusProgressBar.js +4 -2
  302. package/esm/ui/SubmitForm.d.ts +2 -1
  303. package/esm/ui/SubmitForm.js +4 -2
  304. package/esm/ui/SvgColorLegend.d.ts +3 -4
  305. package/esm/ui/SvgColorLegend.js +27 -18
  306. package/esm/ui/TagTextField.d.ts +2 -2
  307. package/esm/ui/TagTextField.js +4 -2
  308. package/esm/ui/ViewLoadingScreen.d.ts +3 -2
  309. package/esm/ui/ViewLoadingScreen.js +4 -2
  310. package/esm/ui/buildExtraTrackMenuItems.d.ts +2 -2
  311. package/esm/ui/colorScale.d.ts +5 -1
  312. package/esm/ui/colorScale.js +12 -10
  313. package/esm/ui/colors.d.ts +42 -31
  314. package/esm/ui/colors.js +85 -48
  315. package/esm/ui/filterMenuItems.d.ts +10 -31
  316. package/esm/ui/filterMenuItems.js +13 -14
  317. package/esm/ui/index.d.ts +1 -1
  318. package/esm/ui/index.js +1 -1
  319. package/esm/ui/launchTargetsMenuItem.js +9 -13
  320. package/esm/ui/legendMenuItem.d.ts +4 -4
  321. package/esm/ui/legendMenuItem.js +4 -4
  322. package/esm/ui/menuItemAdornment.d.ts +1 -1
  323. package/esm/ui/menuItemAdornment.js +1 -1
  324. package/esm/ui/menuItems.d.ts +1 -1
  325. package/esm/ui/menuItems.js +1 -1
  326. package/esm/ui/menuLabels.d.ts +2 -2
  327. package/esm/ui/menuLabels.js +2 -2
  328. package/esm/ui/multiTrackMenuItems.d.ts +2 -2
  329. package/esm/ui/palette.d.ts +2 -2
  330. package/esm/ui/palette.js +10 -10
  331. package/esm/ui/radioSubMenu.d.ts +5 -3
  332. package/esm/ui/radioSubMenu.js +2 -2
  333. package/esm/ui/rampKey.d.ts +15 -0
  334. package/esm/ui/rampKey.js +17 -0
  335. package/esm/ui/showSubMenu.d.ts +0 -5
  336. package/esm/ui/showSubMenu.js +6 -15
  337. package/esm/ui/theme.d.ts +2 -2
  338. package/esm/ui/theme.js +1 -1
  339. package/esm/ui/useAssemblySelection.d.ts +2 -0
  340. package/esm/ui/useMouseTracking.d.ts +8 -20
  341. package/esm/ui/useMouseTracking.js +23 -62
  342. package/esm/ui/usePlacedMenuFocus.d.ts +19 -0
  343. package/esm/ui/usePlacedMenuFocus.js +28 -0
  344. package/esm/util/Base1DViewModel.d.ts +5 -3
  345. package/esm/util/Base1DViewModel.js +5 -3
  346. package/esm/util/SvgCanvas.js +1 -1
  347. package/esm/util/aggregateFieldName.d.ts +1 -10
  348. package/esm/util/aggregateFieldName.js +1 -8
  349. package/esm/util/alignedBytes.d.ts +19 -0
  350. package/esm/util/alignedBytes.js +37 -0
  351. package/esm/util/analytics.d.ts +6 -9
  352. package/esm/util/analytics.js +148 -15
  353. package/esm/util/bezierConnector.d.ts +20 -0
  354. package/esm/util/bezierConnector.js +34 -96
  355. package/esm/util/cacheBudgets.d.ts +3 -0
  356. package/esm/util/cacheBudgets.js +3 -0
  357. package/esm/util/categoricalField.d.ts +24 -4
  358. package/esm/util/categoricalField.js +38 -5
  359. package/esm/util/cellMatches.js +14 -14
  360. package/esm/util/cellsStep.d.ts +3 -5
  361. package/esm/util/cellsStep.js +31 -29
  362. package/esm/util/color/index.d.ts +1 -1
  363. package/esm/util/color/index.js +2 -2
  364. package/esm/util/color-bits/bit.js +1 -1
  365. package/esm/util/color-bits/parse.js +28 -17
  366. package/esm/util/colorBits.d.ts +15 -4
  367. package/esm/util/colorBits.js +38 -15
  368. package/esm/util/colorRamp.d.ts +3 -3
  369. package/esm/util/colorRamp.js +20 -2
  370. package/esm/util/colorScale.d.ts +123 -22
  371. package/esm/util/colorScale.js +157 -28
  372. package/esm/util/colorSchemes.d.ts +7 -3
  373. package/esm/util/colorSchemes.js +8 -2
  374. package/esm/util/createSvgRasterCanvas.d.ts +14 -1
  375. package/esm/util/createSvgRasterCanvas.js +36 -12
  376. package/esm/util/diagonalizeRegions.js +18 -9
  377. package/esm/util/featureTransforms.d.ts +2 -2
  378. package/esm/util/featureTransforms.js +85 -135
  379. package/esm/util/fileHandleStore.js +5 -0
  380. package/esm/util/groupKeys.d.ts +5 -4
  381. package/esm/util/groupKeys.js +15 -9
  382. package/esm/util/index.js +1 -1
  383. package/esm/util/installFetch.d.ts +2 -2
  384. package/esm/util/installPrerequisiteFetch.d.ts +8 -3
  385. package/esm/util/installPrerequisiteFetch.js +9 -7
  386. package/esm/util/io/RemoteFileWithRangeCache.d.ts +1 -1
  387. package/esm/util/io/RemoteFileWithRangeCache.js +1 -1
  388. package/esm/util/isoformRank.d.ts +39 -0
  389. package/esm/util/isoformRank.js +118 -0
  390. package/esm/util/jexl.js +1 -1
  391. package/esm/util/layouts/GranularRectLayout.d.ts +19 -3
  392. package/esm/util/layouts/GranularRectLayout.js +57 -34
  393. package/esm/util/leadingEdgeAutorun.d.ts +9 -1
  394. package/esm/util/leadingEdgeAutorun.js +5 -2
  395. package/esm/util/markEncoding.d.ts +10 -8
  396. package/esm/util/markEncoding.js +50 -12
  397. package/esm/util/markEncodingTypes.d.ts +77 -21
  398. package/esm/util/originCut.d.ts +14 -0
  399. package/esm/util/originCut.js +19 -0
  400. package/esm/util/paintLayer.d.ts +1 -1
  401. package/esm/util/paintLayer.js +4 -3
  402. package/esm/util/pathSeries.d.ts +18 -0
  403. package/esm/util/pathSeries.js +143 -0
  404. package/esm/util/pressOwner.d.ts +20 -0
  405. package/esm/util/pressOwner.js +26 -0
  406. package/esm/util/quantileExtent.d.ts +23 -1
  407. package/esm/util/quantileExtent.js +25 -2
  408. package/esm/util/rowStackGeometry.d.ts +1 -1
  409. package/esm/util/rowStackGeometry.js +1 -1
  410. package/esm/util/sessionActivity.d.ts +36 -0
  411. package/esm/util/sessionActivity.js +88 -0
  412. package/esm/util/stepOutputs.d.ts +165 -0
  413. package/esm/util/stepOutputs.js +201 -0
  414. package/esm/util/stepTables.d.ts +7 -3
  415. package/esm/util/stepTables.js +86 -3
  416. package/esm/util/systemColorScheme.d.ts +4 -0
  417. package/esm/util/systemColorScheme.js +21 -0
  418. package/esm/util/tabix.d.ts +1 -1
  419. package/esm/util/tabix.js +1 -1
  420. package/esm/util/temporaryAssembly.d.ts +2 -2
  421. package/esm/util/temporaryAssembly.js +2 -3
  422. package/esm/util/thresholdScale.d.ts +1 -1
  423. package/esm/util/thresholdScale.js +1 -1
  424. package/esm/util/trackConfigDelta.d.ts +1 -1
  425. package/esm/util/tracks.d.ts +25 -15
  426. package/esm/util/tracks.js +68 -44
  427. package/esm/util/types/index.d.ts +15 -7
  428. package/esm/util/types/index.js +21 -2
  429. package/esm/util/usePanZoom.js +4 -10
  430. package/esm/util/useRowVirtualScroll.d.ts +1 -0
  431. package/esm/util/windowStep.d.ts +6 -0
  432. package/esm/util/windowStep.js +153 -0
  433. package/package.json +27 -16
  434. package/esm/data_adapters/BaseAdapter/featureDensity.d.ts +0 -40
  435. package/esm/data_adapters/BaseAdapter/featureDensity.js +0 -31
  436. package/esm/rpc/methods/CoreGetFeatureDensity.d.ts +0 -11
  437. package/esm/rpc/methods/CoreGetFeatureDensity.js +0 -22
  438. package/esm/rpc/methods/CoreLoadAdapterCode.d.ts +0 -13
  439. package/esm/rpc/methods/CoreLoadAdapterCode.js +0 -16
@@ -7,7 +7,7 @@ import { radioItems } from './toggleMenuItems.js';
7
7
  * appended after the radios (e.g. a related checkbox) within the same submenu.
8
8
  *
9
9
  * Every display has a submenu of this shape naming the one thing it draws —
10
- * wiggle's "Plot type", MAF's "Row coloring", Hi-C's "Color scheme", the arc
10
+ * wiggle's and MAF's "Plot type", Hi-C's "Color scheme", the arc
11
11
  * display's "Display mode". The labels stay display-specific (they name
12
12
  * genuinely different choices); the construction is shared so a hand-rolled
13
13
  * copy can't forget that a settings row keeps the menu open.
@@ -25,7 +25,7 @@ export function makeRadioSubMenu(opts) {
25
25
  subMenu: [
26
26
  // via radioItems so these keep the menu open like every other
27
27
  // setting row — a plot type is usually picked by trying a couple
28
- ...radioItems(options.map(([value, label]) => ({ value, label })), value, onChange),
28
+ ...radioItems(options.map(option => 'value' in option ? option : { value: option[0], label: option[1] }), value, onChange),
29
29
  ...extraItems,
30
30
  ],
31
31
  };
@@ -0,0 +1,15 @@
1
+ import type { RampScale } from './colorScale.ts';
2
+ /**
3
+ * A ramp's bar as columns, for a host that draws the key itself, such as R
4
+ * through V8: each stop's `offset`, `#rrggbb` `color` and `opacity`, and the
5
+ * end labels the on-screen bar prints.
6
+ */
7
+ export declare function rampKeyOf(scale: RampScale): {
8
+ minLabel: string;
9
+ maxLabel: string;
10
+ id: string;
11
+ title: string;
12
+ offset: number[];
13
+ color: string[];
14
+ opacity: number[];
15
+ };
@@ -0,0 +1,17 @@
1
+ import { cssColorToHex } from '../util/colorBits.js';
2
+ import { rampLabels } from './colorScale.js';
3
+ /**
4
+ * A ramp's bar as columns, for a host that draws the key itself, such as R
5
+ * through V8: each stop's `offset`, `#rrggbb` `color` and `opacity`, and the
6
+ * end labels the on-screen bar prints.
7
+ */
8
+ export function rampKeyOf(scale) {
9
+ return {
10
+ id: scale.id,
11
+ title: scale.title ?? '',
12
+ ...rampLabels(scale),
13
+ offset: scale.stops.map(stop => stop.offset),
14
+ color: scale.stops.map(stop => cssColorToHex(stop.color)),
15
+ opacity: scale.stops.map(stop => stop.opacity ?? 1),
16
+ };
17
+ }
@@ -6,11 +6,6 @@ import type { MenuItem } from './MenuTypes.ts';
6
6
  * multi-row painting with no legend) drops the row rather than opening an empty
7
7
  * submenu.
8
8
  *
9
- * One helper because this was eleven hand-written literals that had already
10
- * drifted three ways: the wiggle family said `'Show'` where everyone else said
11
- * `'Show...'`, only some set the redundant `type: 'subMenu'`, and only the
12
- * wiggle family omitted the empty submenu.
13
- *
14
9
  * Not exported from `ui/menuItems.ts`: the icon is a value import, and that
15
10
  * entry is the React-free one (see its header). Import this module directly —
16
11
  * `@jbrowse/core/ui/showSubMenu` — which costs one icon rather than the
@@ -1,4 +1,5 @@
1
1
  import VisibilityIcon from '@mui/icons-material/Visibility';
2
+ import { subMenuIfAny } from './MenuTypes.js';
2
3
  /**
3
4
  * The "Show..." submenu every display groups its visibility toggles under, and
4
5
  * the empty-omit that goes with it: a display whose toggles are all
@@ -6,25 +7,15 @@ import VisibilityIcon from '@mui/icons-material/Visibility';
6
7
  * multi-row painting with no legend) drops the row rather than opening an empty
7
8
  * submenu.
8
9
  *
9
- * One helper because this was eleven hand-written literals that had already
10
- * drifted three ways: the wiggle family said `'Show'` where everyone else said
11
- * `'Show...'`, only some set the redundant `type: 'subMenu'`, and only the
12
- * wiggle family omitted the empty submenu.
13
- *
14
10
  * Not exported from `ui/menuItems.ts`: the icon is a value import, and that
15
11
  * entry is the React-free one (see its header). Import this module directly —
16
12
  * `@jbrowse/core/ui/showSubMenu` — which costs one icon rather than the
17
13
  * `@jbrowse/core/ui` barrel's ~80 Material components.
18
14
  */
19
15
  export function makeShowSubMenu(items) {
20
- return items.length
21
- ? [
22
- {
23
- label: 'Show...',
24
- icon: VisibilityIcon,
25
- type: 'subMenu',
26
- subMenu: items,
27
- },
28
- ]
29
- : [];
16
+ return subMenuIfAny({
17
+ label: 'Show...',
18
+ icon: VisibilityIcon,
19
+ subMenu: items,
20
+ });
30
21
  }
package/esm/ui/theme.d.ts CHANGED
@@ -14,9 +14,9 @@ type FramesOptions = FrameTuple<PaletteColorOptions>;
14
14
  declare module '@mui/material/styles' {
15
15
  interface Palette extends StringColors {
16
16
  /**
17
- * The primary colour where it marks something on the page's own ground,
17
+ * The primary color where it marks something on the page's own ground,
18
18
  * such as a checked box or a selected row. `primary.main` in light mode,
19
- * and the secondary text colour in dark mode, where a midnight primary
19
+ * and the secondary text color in dark mode, where a midnight primary
20
20
  * vanishes
21
21
  */
22
22
  accent: string;
package/esm/ui/theme.js CHANGED
@@ -67,7 +67,7 @@ const baseThemeOptions = {
67
67
  components: {
68
68
  MuiAppBar: {
69
69
  // JBrowse's header keeps its brand in dark mode; MUI's default is to
70
- // flatten it to the paper colour. A property of the app rather than of
70
+ // flatten it to the paper color. A property of the app rather than of
71
71
  // one palette — it used to sit on `darkStock` alone, so the theme a
72
72
  // reader reaches by picking Dark over the default palette lost the
73
73
  // header the old dark theme had. MUI reads this only in dark mode.
@@ -74,6 +74,7 @@ export declare function useAssemblySelection(session: AbstractSessionModel, loca
74
74
  getCanonicalRefName2(refName: string): string;
75
75
  isValidRefName(refName: string): boolean;
76
76
  } & {
77
+ isCircularRefName(refName: string): boolean;
77
78
  getRefNamePosition(refName: string): number | undefined;
78
79
  getAliasesForRefName(refName: string): string[];
79
80
  getRefNameMapForAdapter(adapterConf: {
@@ -141,6 +142,7 @@ export declare function useAssemblySelection(session: AbstractSessionModel, loca
141
142
  getCanonicalRefName2(refName: string): string;
142
143
  isValidRefName(refName: string): boolean;
143
144
  } & {
145
+ isCircularRefName(refName: string): boolean;
144
146
  getRefNamePosition(refName: string): number | undefined;
145
147
  getAliasesForRefName(refName: string): string[];
146
148
  getRefNameMapForAdapter(adapterConf: {
@@ -20,28 +20,16 @@ export declare function useClearTrackedPointer(): () => void;
20
20
  * Container-relative mouse position for the overlays that follow the pointer
21
21
  * (`Crosshairs`, tooltips), coalesced to one update per frame.
22
22
  *
23
- * The position is measured against the box of whatever element the handlers are
24
- * bound to, which is what the overlays are positioned in — off `currentTarget`,
25
- * so there is no ref to pass and no way to bind the two to different elements.
23
+ * The position is measured against the box of the element the handlers are
24
+ * bound to, off `currentTarget`, which is what the overlays are positioned in.
26
25
  * A display that also hit-tests takes `onMove`, so its hit and its guides come
27
- * off one measurement in one frame instead of two pointer paths that have to
28
- * agree.
26
+ * off one measurement in one frame.
29
27
  *
30
- * **It returns a `mouseTracker` rather than the position, and that is the
31
- * load-bearing part.** Its one caller is `DisplayChromeBase`, which owns the
32
- * container the handlers bind to — so if the position were state here, every
33
- * mouse move would re-render the chrome itself (re-running
34
- * `useRenderingBackend`), the status container with a fresh inline `style`
35
- * object, all three overlays, and only then the body that actually wanted the
36
- * coordinate. That is a whole display's chrome repainting because the cursor
37
- * moved a pixel over it; it cost a full document `Layout` plus three `Paint`s
38
- * per mousemove on the wiggle displays, back when each display called this hook
39
- * itself and every one of them had it.
40
- *
41
- * So the position is published instead, and whoever wants it calls
42
- * `useMouseState(mouseTracker)` — from inside the chrome's body, where the
43
- * overlays live. Re-rendering then starts at the component that reads it.
44
- * Passing the tracker down a prop is free; passing `mouseState` down is the bug.
28
+ * It returns a `mouseTracker` and not the position: the caller is
29
+ * `DisplayChromeBase`, and position held as state there would re-render the
30
+ * whole chrome on every mouse move. Whoever draws at the cursor calls
31
+ * `useMouseState(mouseTracker)`, so re-rendering starts at that component.
32
+ * Pass the tracker down, never the position.
45
33
  */
46
34
  export declare function useMouseTracking(onMove?: (state?: MouseState) => void): {
47
35
  mouseTracker: MouseTracker;
@@ -27,16 +27,11 @@ function createMouseStore() {
27
27
  /**
28
28
  * Drop the tracked pointer, published by whoever bound the handlers.
29
29
  *
30
- * `mouseleave` reports the pointer leaving an element, and the browser decides
31
- * that by comparing the hover chain before a move to the chain after it. A menu
32
- * portalled to the body opens under the cursor with no move at all, and closing
33
- * it detaches the chain's nodes — so hover restarts at `body` and the display
34
- * the menu covered is never told anything again. Its overlays then keep drawing
35
- * at the coordinate the pointer had when the menu opened, wherever the pointer
36
- * has since gone.
37
- *
38
- * `ContextMenu` calls this on close, which is why the default is a no-op: a menu
39
- * raised outside a display's chrome has no tracked pointer to drop.
30
+ * A menu portalled to the body opens under the cursor with no move, and
31
+ * closing it detaches the hover chain, so the display it covered never gets a
32
+ * `mouseleave` and its overlays keep drawing where the menu opened.
33
+ * `ContextMenu` calls this on close; the default is a no-op for a menu raised
34
+ * outside a display's chrome.
40
35
  */
41
36
  const ClearTrackedPointerContext = createContext(() => { });
42
37
  export const ClearTrackedPointerProvider = ClearTrackedPointerContext.Provider;
@@ -47,44 +42,25 @@ export function useClearTrackedPointer() {
47
42
  * Container-relative mouse position for the overlays that follow the pointer
48
43
  * (`Crosshairs`, tooltips), coalesced to one update per frame.
49
44
  *
50
- * The position is measured against the box of whatever element the handlers are
51
- * bound to, which is what the overlays are positioned in — off `currentTarget`,
52
- * so there is no ref to pass and no way to bind the two to different elements.
45
+ * The position is measured against the box of the element the handlers are
46
+ * bound to, off `currentTarget`, which is what the overlays are positioned in.
53
47
  * A display that also hit-tests takes `onMove`, so its hit and its guides come
54
- * off one measurement in one frame instead of two pointer paths that have to
55
- * agree.
56
- *
57
- * **It returns a `mouseTracker` rather than the position, and that is the
58
- * load-bearing part.** Its one caller is `DisplayChromeBase`, which owns the
59
- * container the handlers bind to — so if the position were state here, every
60
- * mouse move would re-render the chrome itself (re-running
61
- * `useRenderingBackend`), the status container with a fresh inline `style`
62
- * object, all three overlays, and only then the body that actually wanted the
63
- * coordinate. That is a whole display's chrome repainting because the cursor
64
- * moved a pixel over it; it cost a full document `Layout` plus three `Paint`s
65
- * per mousemove on the wiggle displays, back when each display called this hook
66
- * itself and every one of them had it.
48
+ * off one measurement in one frame.
67
49
  *
68
- * So the position is published instead, and whoever wants it calls
69
- * `useMouseState(mouseTracker)` — from inside the chrome's body, where the
70
- * overlays live. Re-rendering then starts at the component that reads it.
71
- * Passing the tracker down a prop is free; passing `mouseState` down is the bug.
50
+ * It returns a `mouseTracker` and not the position: the caller is
51
+ * `DisplayChromeBase`, and position held as state there would re-render the
52
+ * whole chrome on every mouse move. Whoever draws at the cursor calls
53
+ * `useMouseState(mouseTracker)`, so re-rendering starts at that component.
54
+ * Pass the tracker down, never the position.
72
55
  */
73
56
  export function useMouseTracking(onMove) {
74
57
  const rafRef = useRef(undefined);
75
58
  const storeRef = useRef(undefined);
76
59
  storeRef.current ??= createMouseStore();
77
60
  const store = storeRef.current;
78
- // Reached through a ref rather than captured, so `handleMouseLeave` below can
79
- // be identity-stable — one of its callers is an effect, and a handler that
80
- // changed identity every render would make that effect re-run every render.
81
- // Reading the latest is also the better answer for the frame callback, which
82
- // runs after the render whose closure scheduled it.
83
- //
84
- // Written in an effect rather than during render: a render React discards must
85
- // not leave this pointing at a callback from it. Nothing can read it before
86
- // the first commit — both users are event/effect callbacks — and `useRef`'s
87
- // initial value covers the first commit itself.
61
+ // Reached through a ref so `handleMouseLeave` is identity-stable (an effect
62
+ // depends on it), and written in an effect so a render React discards cannot
63
+ // leave it pointing at that render's callback.
88
64
  const onMoveRef = useRef(onMove);
89
65
  useEffect(() => {
90
66
  onMoveRef.current = onMove;
@@ -92,11 +68,10 @@ export function useMouseTracking(onMove) {
92
68
  /**
93
69
  * Drop the published position and tell `onMove` the pointer is gone.
94
70
  *
95
- * Bound as the container's `onMouseLeave` — and called directly for the two
96
- * cases `mouseleave` cannot report: the container being *removed* rather than
97
- * left, and a portalled menu closing over it. `DisplayChromeBase` makes both
98
- * calls, the second by publishing this on `ClearTrackedPointerProvider`.
99
- * Identity-stable for both.
71
+ * Bound as the container's `onMouseLeave`, and called directly for the three
72
+ * cases `mouseleave` cannot report: the container being removed, a portalled
73
+ * menu closing over it, and the pointer moving onto a portalled overlay.
74
+ * `DisplayChromeBase` makes all three calls. Identity-stable.
100
75
  */
101
76
  const handleMouseLeave = useCallback(() => {
102
77
  if (rafRef.current) {
@@ -107,28 +82,14 @@ export function useMouseTracking(onMove) {
107
82
  onMoveRef.current?.(undefined);
108
83
  }, [store]);
109
84
  const handleMouseMove = (event) => {
110
- // An overlay portaled out of the container still *bubbles* its React events
111
- // here, even though its DOM node is not a descendant — so the coordinate
112
- // would be measured against a box the pointer isn't in. HiC guarded this by
113
- // hand (its resolution dropdown and legend portal); it is a hazard for any
114
- // display with a portaled overlay, and several have one, so the guard lives
115
- // here and applies to all of them. Treated as a leave: the pointer is over
116
- // something else, and the guides should drop rather than freeze.
117
- const { target } = event;
118
- if (target instanceof Node && !event.currentTarget.contains(target)) {
119
- handleMouseLeave();
120
- return;
121
- }
122
85
  if (rafRef.current) {
123
86
  cancelAnimationFrame(rafRef.current);
124
87
  }
125
88
  const clientX = event.clientX;
126
89
  const clientY = event.clientY;
127
- // Captured here rather than read in the frame: React clears `currentTarget`
128
- // once the handler returns. `isConnected` then stands in for the ref check
129
- // this used to do — a display unmounted between the move and the frame
130
- // measures as a zero rect, and would publish the client point as if the
131
- // pointer were at the origin of a box that is gone.
90
+ // Captured here: React clears `currentTarget` once the handler returns. A
91
+ // display unmounted before the frame measures as a zero rect, hence the
92
+ // `isConnected` check.
132
93
  const container = event.currentTarget;
133
94
  rafRef.current = requestAnimationFrame(() => {
134
95
  if (container.isConnected) {
@@ -0,0 +1,19 @@
1
+ import type { PopoverActions } from '@mui/material';
2
+ /**
3
+ * Props that move a MUI Menu's opening focus to after the menu is placed.
4
+ *
5
+ * MUI focuses the first row while the menu mounts, before Popover writes the
6
+ * paper's position, so the focused row still sits at the viewport's top-left.
7
+ * Firefox scrolls every enclosing frame to reveal a focused element, so a page
8
+ * that embeds JBrowse in an iframe jumped to the frame's top whenever a menu
9
+ * opened with that top scrolled out of view.
10
+ *
11
+ * The `onEntering` returned here places the paper through Popover's
12
+ * `updatePosition`, then focuses the first row without scrolling anything.
13
+ */
14
+ export declare function usePlacedMenuFocus(): {
15
+ action: import("react").RefObject<PopoverActions | null>;
16
+ autoFocus: boolean;
17
+ disableAutoFocus: boolean;
18
+ onEntering: (paper: HTMLElement) => void;
19
+ };
@@ -0,0 +1,28 @@
1
+ import { useRef } from 'react';
2
+ const FIRST_ROW = '[role^="menuitem"]:not(.Mui-disabled)';
3
+ /**
4
+ * Props that move a MUI Menu's opening focus to after the menu is placed.
5
+ *
6
+ * MUI focuses the first row while the menu mounts, before Popover writes the
7
+ * paper's position, so the focused row still sits at the viewport's top-left.
8
+ * Firefox scrolls every enclosing frame to reveal a focused element, so a page
9
+ * that embeds JBrowse in an iframe jumped to the frame's top whenever a menu
10
+ * opened with that top scrolled out of view.
11
+ *
12
+ * The `onEntering` returned here places the paper through Popover's
13
+ * `updatePosition`, then focuses the first row without scrolling anything.
14
+ */
15
+ export function usePlacedMenuFocus() {
16
+ const action = useRef(null);
17
+ return {
18
+ action,
19
+ autoFocus: false,
20
+ disableAutoFocus: true,
21
+ onEntering: (paper) => {
22
+ action.current?.updatePosition();
23
+ paper
24
+ .querySelector(FIRST_ROW)
25
+ ?.focus({ preventScroll: true });
26
+ },
27
+ };
28
+ }
@@ -4,9 +4,11 @@ import type { Instance } from '@jbrowse/mobx-state-tree';
4
4
  /**
5
5
  * #stateModel Base1DView
6
6
  * #category general
7
- * used in non-lgv view representations of a 1d view e.g. the two axes of the
8
- * dotplot use this. categorized General rather than View because it is not a
9
- * pluggable view type, which the name-suffix heuristic would otherwise assume
7
+ * Holds a one-dimensional axis of displayed regions, with its zoom and scroll
8
+ * offset, for views other than the linear genome view, such as the two axes of
9
+ * the dotplot.
10
+ *
11
+ * Its page sits under General because it is not a pluggable view type.
10
12
  */
11
13
  declare const Base1DView: import("@jbrowse/mobx-state-tree").IModelType<{
12
14
  id: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<string>, [undefined]>;
@@ -7,9 +7,11 @@ import { ElementId } from './types/mst.js';
7
7
  /**
8
8
  * #stateModel Base1DView
9
9
  * #category general
10
- * used in non-lgv view representations of a 1d view e.g. the two axes of the
11
- * dotplot use this. categorized General rather than View because it is not a
12
- * pluggable view type, which the name-suffix heuristic would otherwise assume
10
+ * Holds a one-dimensional axis of displayed regions, with its zoom and scroll
11
+ * offset, for views other than the linear genome view, such as the two axes of
12
+ * the dotplot.
13
+ *
14
+ * Its page sits under General because it is not a pluggable view type.
13
15
  */
14
16
  const Base1DView = types
15
17
  .model('Base1DView', {
@@ -175,7 +175,7 @@ export class SvgCanvas {
175
175
  // treats as the same rect anchored at `x-w`) is NOT normalized here — SVG
176
176
  // would emit `width="-w"` and silently not render. Callers must pass a
177
177
  // non-negative size; spans resolve both edges and take
178
- // `left = min(x1,x2)` / `w = abs(x2-x1)` (see render-core/CLAUDE.md), the
178
+ // `left = min(x1,x2)` / `w = abs(x2-x1)`, the
179
179
  // same convention that keeps reversed blocks correct.
180
180
  transformRect(x, y, w, h) {
181
181
  const [tx, ty] = this.transformPoint(this.a < 0 ? x + w : x, this.d < 0 ? y + h : y);
@@ -1,10 +1 @@
1
- /**
2
- * The field an aggregate op writes: `as` where named, else `count` for a
3
- * count, else `<op>_<field>`. Imports nothing, so the validator's copy of the
4
- * mark rule list carries it unchanged.
5
- */
6
- export declare function aggregateFieldName({ op, field, as, }: {
7
- op: string;
8
- field?: string;
9
- as?: string;
10
- }): string;
1
+ export { aggregateFieldName } from './stepOutputs.ts';
@@ -1,8 +1 @@
1
- /**
2
- * The field an aggregate op writes: `as` where named, else `count` for a
3
- * count, else `<op>_<field>`. Imports nothing, so the validator's copy of the
4
- * mark rule list carries it unchanged.
5
- */
6
- export function aggregateFieldName({ op, field, as, }) {
7
- return as || (op === 'count' || !field ? op : `${op}_${field}`);
8
- }
1
+ export { aggregateFieldName } from './stepOutputs.js';
@@ -0,0 +1,19 @@
1
+ export declare const DASH = 45;
2
+ export declare const SPACE = 32;
3
+ export declare const LOWER_BIT = 32;
4
+ export declare const N_UPPER = 78;
5
+ /** No base at this column of a row: a gap, or the padding of a short row. */
6
+ export declare function isGapByte(b: number): b is 32 | 45;
7
+ export declare function sameBase(a: number, b: number): boolean;
8
+ /**
9
+ * An `N` reference base, which a row neither matches nor mismatches, so
10
+ * identity leaves it uncounted.
11
+ */
12
+ export declare function isUnknownBase(b: number): boolean;
13
+ /**
14
+ * The first column carrying the row's own sequence. A gap run reaching either
15
+ * end of a row measures where the block was cut, not the alignment.
16
+ */
17
+ export declare function firstDrawn(bytes: Uint8Array, at: number, len: number): number;
18
+ /** The last column carrying the row's own sequence, from `firstDrawn`'s answer. */
19
+ export declare function lastDrawn(bytes: Uint8Array, at: number, len: number, first: number): number;
@@ -0,0 +1,37 @@
1
+ export const DASH = 45;
2
+ export const SPACE = 32;
3
+ export const LOWER_BIT = 0x20;
4
+ export const N_UPPER = 78;
5
+ /** No base at this column of a row: a gap, or the padding of a short row. */
6
+ export function isGapByte(b) {
7
+ return b === DASH || b === SPACE;
8
+ }
9
+ export function sameBase(a, b) {
10
+ return (a | LOWER_BIT) === (b | LOWER_BIT);
11
+ }
12
+ /**
13
+ * An `N` reference base, which a row neither matches nor mismatches, so
14
+ * identity leaves it uncounted.
15
+ */
16
+ export function isUnknownBase(b) {
17
+ return (b & ~LOWER_BIT) === N_UPPER;
18
+ }
19
+ /**
20
+ * The first column carrying the row's own sequence. A gap run reaching either
21
+ * end of a row measures where the block was cut, not the alignment.
22
+ */
23
+ export function firstDrawn(bytes, at, len) {
24
+ let first = 0;
25
+ while (first < len && isGapByte(bytes[at + first])) {
26
+ first++;
27
+ }
28
+ return first;
29
+ }
30
+ /** The last column carrying the row's own sequence, from `firstDrawn`'s answer. */
31
+ export function lastDrawn(bytes, at, len, first) {
32
+ let last = len - 1;
33
+ while (last > first && isGapByte(bytes[at + last])) {
34
+ last--;
35
+ }
36
+ return last;
37
+ }
@@ -1,26 +1,22 @@
1
- import type { AnyConfigurationModel } from '../configuration/index.ts';
1
+ import type { AnyConfigurationModel, TrackConfigEntry } from '../configuration/index.ts';
2
+ import type { ActivitySession } from './sessionActivity.ts';
2
3
  declare global {
3
4
  interface Window {
4
5
  ga?: (...args: unknown[]) => void;
5
6
  }
6
7
  }
7
- type TrackConfig = AnyConfigurationModel & {
8
- type: string;
9
- };
10
8
  interface AnalyticsRootModel {
11
9
  jbrowse: {
12
- tracks: TrackConfig[];
10
+ tracks: TrackConfigEntry[];
13
11
  assemblies: unknown[];
14
12
  plugins?: {
15
13
  name?: string;
16
14
  }[];
17
15
  };
18
- session?: {
19
- sessionTracks: TrackConfig[];
20
- views: unknown[];
21
- };
16
+ session?: ActivitySession;
22
17
  version: string;
23
18
  }
19
+ export declare function urlParamNames(search: string): string;
24
20
  type AnalyticsRootModelWithConfig = AnalyticsRootModel & {
25
21
  jbrowse: {
26
22
  configuration: AnyConfigurationModel;
@@ -28,5 +24,6 @@ type AnalyticsRootModelWithConfig = AnalyticsRootModel & {
28
24
  };
29
25
  export declare function writeAWSAnalytics(rootModel: AnalyticsRootModel, initialTimestamp: number, sessionQuery?: string | null): Promise<void>;
30
26
  export declare function writeGAAnalytics(rootModel: AnalyticsRootModel, initialTimestamp: number): Promise<void>;
27
+ export declare function writeAWSSessionEnd(): Promise<void>;
31
28
  export declare function doAnalytics(rootModel: AnalyticsRootModelWithConfig | undefined, initialTimestamp: number, initialSessionQuery: string | null | undefined): void;
32
29
  export {};