@jbrowse/core 5.0.0-beta.13 → 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 (391) hide show
  1. package/README.md +365 -69
  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 +3 -2
  5. package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +4 -2
  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 +1 -1
  36. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.js +10 -19
  37. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceLegend.d.ts +3 -2
  38. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceLegend.js +4 -2
  39. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequencePanel.js +4 -4
  40. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/HelpDialog.d.ts +3 -2
  41. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/HelpDialog.js +4 -2
  42. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceDialog.d.ts +1 -2
  43. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceDialog.js +2 -2
  44. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceTypeSelector.d.ts +1 -2
  45. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceTypeSelector.js +15 -36
  46. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.d.ts +3 -2
  47. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.js +4 -2
  48. package/esm/BaseFeatureWidget/SequenceFeatureDetails/featureTypeUtil.d.ts +2 -1
  49. package/esm/BaseFeatureWidget/SequenceFeatureDetails/featureTypeUtil.js +22 -6
  50. package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.d.ts +13 -1
  51. package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.js +28 -1
  52. package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/SequenceDisplay.js +2 -2
  53. package/esm/BaseFeatureWidget/stateModelFactory.d.ts +2 -0
  54. package/esm/PluginManager.d.ts +1 -0
  55. package/esm/PluginManager.js +6 -0
  56. package/esm/ReExports/coreModules.generated.js +538 -524
  57. package/esm/ReExports/coreWorkerModules.generated.js +454 -441
  58. package/esm/ReExports/lazify.js +3 -2
  59. package/esm/ReExports/list.js +15 -6
  60. package/esm/ReExports/names.d.ts +1 -0
  61. package/esm/ReExports/names.generated.d.ts +2 -0
  62. package/esm/ReExports/names.generated.js +566 -0
  63. package/esm/ReExports/names.js +3 -0
  64. package/esm/assemblyManager/assembly.d.ts +9 -0
  65. package/esm/assemblyManager/assembly.js +13 -0
  66. package/esm/assemblyManager/assemblyConfigSchema.d.ts +6 -1
  67. package/esm/assemblyManager/assemblyConfigSchema.js +23 -22
  68. package/esm/assemblyManager/assemblyManager.d.ts +11 -0
  69. package/esm/assemblyManager/assemblyManager.js +2 -0
  70. package/esm/assemblyManager/expandAssemblyConfigShorthand.d.ts +9 -0
  71. package/esm/assemblyManager/expandAssemblyConfigShorthand.js +23 -0
  72. package/esm/checkPlugins.js +10 -4
  73. package/esm/configuration/configurationSchema.d.ts +18 -5
  74. package/esm/configuration/configurationSchema.js +9 -7
  75. package/esm/configuration/configurationSchemaUnion.d.ts +2 -1
  76. package/esm/configuration/configurationSchemaUnion.js +2 -1
  77. package/esm/configuration/configurationSlot.js +4 -4
  78. package/esm/configuration/fillLocations.d.ts +4 -2
  79. package/esm/configuration/fillLocations.js +9 -3
  80. package/esm/configuration/formatAboutConfigSchema.d.ts +2 -2
  81. package/esm/configuration/formatAboutConfigSchema.js +2 -2
  82. package/esm/configuration/formatDetailsConfigSchema.d.ts +2 -2
  83. package/esm/configuration/formatDetailsConfigSchema.js +5 -5
  84. package/esm/configuration/getConf.js +13 -4
  85. package/esm/configuration/index.d.ts +1 -1
  86. package/esm/configuration/index.js +1 -1
  87. package/esm/configuration/plot.d.ts +2 -2
  88. package/esm/configuration/plot.js +32 -18
  89. package/esm/configuration/schemaRegistry.d.ts +0 -2
  90. package/esm/configuration/slotFacade.js +2 -2
  91. package/esm/configuration/snapshotPreprocess.d.ts +42 -18
  92. package/esm/configuration/snapshotPreprocess.js +94 -34
  93. package/esm/configuration/tabixShorthand.js +1 -3
  94. package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +7 -0
  95. package/esm/data_adapters/BaseAdapter/BaseAdapter.js +7 -0
  96. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +0 -22
  97. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +0 -55
  98. package/esm/data_adapters/BaseAdapter/index.d.ts +0 -1
  99. package/esm/data_adapters/BaseAdapter/index.js +0 -1
  100. package/esm/data_adapters/BaseAdapter/rowSources.d.ts +2 -2
  101. package/esm/data_adapters/BaseAdapter/types.d.ts +1 -0
  102. package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +2 -0
  103. package/esm/data_adapters/CytobandAdapter/configSchema.js +5 -0
  104. package/esm/data_adapters/dataAdapterCache.d.ts +25 -13
  105. package/esm/data_adapters/dataAdapterCache.js +68 -24
  106. package/esm/data_adapters/getFeatureAdapter.d.ts +9 -0
  107. package/esm/data_adapters/getFeatureAdapter.js +17 -0
  108. package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +2 -0
  109. package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.js +2 -0
  110. package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +40 -6
  111. package/esm/pluggableElementTypes/models/BaseDisplayModel.js +56 -8
  112. package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +3 -3
  113. package/esm/pluggableElementTypes/models/BaseTrackModel.js +7 -6
  114. package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +2 -0
  115. package/esm/pluggableElementTypes/models/BaseViewModel.js +2 -0
  116. package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +3 -0
  117. package/esm/pluggableElementTypes/models/InternetAccountModel.js +3 -0
  118. package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +3 -0
  119. package/esm/pluggableElementTypes/models/baseConnectionConfig.js +3 -0
  120. package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +3 -1
  121. package/esm/pluggableElementTypes/models/baseInternetAccountConfig.js +3 -1
  122. package/esm/pluggableElementTypes/models/baseTrackConfig.js +9 -1
  123. package/esm/pluggableElementTypes/models/components/SaveTrackData.js +2 -2
  124. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +1 -1
  125. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +1 -1
  126. package/esm/pluginDefinitions.d.ts +7 -0
  127. package/esm/pluginDefinitions.js +20 -0
  128. package/esm/rpc/RpcRegistry.d.ts +0 -10
  129. package/esm/rpc/byteBudget.d.ts +8 -0
  130. package/esm/rpc/byteBudget.js +13 -0
  131. package/esm/rpc/configSchema.d.ts +2 -0
  132. package/esm/rpc/configSchema.js +3 -1
  133. package/esm/rpc/coreRpcMethods.d.ts +0 -1
  134. package/esm/rpc/coreRpcMethods.js +0 -1
  135. package/esm/rpc/methods/CoreGetEncodedLayers.d.ts +2 -2
  136. package/esm/rpc/methods/CoreGetEncodedLayers.js +7 -5
  137. package/esm/rpc/methods/layerFeatures.d.ts +9 -6
  138. package/esm/rpc/methods/layerFeatures.js +21 -5
  139. package/esm/ui/ActionLink.d.ts +3 -2
  140. package/esm/ui/ActionLink.js +4 -2
  141. package/esm/ui/AddCustomPluginDialog.d.ts +3 -2
  142. package/esm/ui/AddCustomPluginDialog.js +6 -4
  143. package/esm/ui/BaseTooltip.d.ts +3 -2
  144. package/esm/ui/BaseTooltip.js +4 -2
  145. package/esm/ui/CascadingMenu.js +14 -12
  146. package/esm/ui/CascadingMenuButton.d.ts +2 -2
  147. package/esm/ui/CascadingMenuButton.js +5 -4
  148. package/esm/ui/CascadingMenuHelpDialog.d.ts +3 -2
  149. package/esm/ui/CascadingMenuHelpDialog.js +4 -2
  150. package/esm/ui/CascadingMenuHelpIconButton.d.ts +4 -3
  151. package/esm/ui/CascadingMenuHelpIconButton.js +9 -5
  152. package/esm/ui/ColorPicker.d.ts +5 -4
  153. package/esm/ui/ColorPicker.js +6 -4
  154. package/esm/ui/ContextMenu.d.ts +1 -1
  155. package/esm/ui/ContextMenu.js +1 -1
  156. package/esm/ui/CopyToClipboardButton.d.ts +3 -2
  157. package/esm/ui/CopyToClipboardButton.js +4 -2
  158. package/esm/ui/Crosshairs.js +13 -10
  159. package/esm/ui/DOMPurifySanitizedHTML.d.ts +3 -2
  160. package/esm/ui/DOMPurifySanitizedHTML.js +4 -2
  161. package/esm/ui/DataGridFlexContainer.d.ts +3 -2
  162. package/esm/ui/DataGridFlexContainer.js +4 -2
  163. package/esm/ui/Dialog.d.ts +1 -1
  164. package/esm/ui/Dialog.js +5 -4
  165. package/esm/ui/DropDownMenu.js +2 -2
  166. package/esm/ui/EditableTypography.d.ts +1 -1
  167. package/esm/ui/EditableTypography.js +3 -2
  168. package/esm/ui/ErrorActions.d.ts +3 -2
  169. package/esm/ui/ErrorActions.js +4 -2
  170. package/esm/ui/ErrorBanner.d.ts +2 -2
  171. package/esm/ui/ErrorBanner.js +3 -2
  172. package/esm/ui/ErrorBar.d.ts +3 -2
  173. package/esm/ui/ErrorBar.js +4 -2
  174. package/esm/ui/ErrorMessage.d.ts +3 -2
  175. package/esm/ui/ErrorMessage.js +4 -2
  176. package/esm/ui/ErrorMessageStackTraceContents.d.ts +3 -2
  177. package/esm/ui/ErrorMessageStackTraceContents.js +4 -2
  178. package/esm/ui/ErrorMessageStackTraceDialog.d.ts +3 -2
  179. package/esm/ui/ErrorMessageStackTraceDialog.js +4 -2
  180. package/esm/ui/ErrorOverlay.d.ts +3 -2
  181. package/esm/ui/ErrorOverlay.js +4 -2
  182. package/esm/ui/ExportSvgDialog.d.ts +3 -2
  183. package/esm/ui/ExportSvgDialog.js +4 -2
  184. package/esm/ui/ExternalLink.d.ts +2 -1
  185. package/esm/ui/ExternalLink.js +4 -2
  186. package/esm/ui/FactoryResetDialog.d.ts +3 -2
  187. package/esm/ui/FactoryResetDialog.js +4 -2
  188. package/esm/ui/FatalErrorDialog.d.ts +3 -2
  189. package/esm/ui/FatalErrorDialog.js +6 -4
  190. package/esm/ui/FileDropZone.d.ts +3 -2
  191. package/esm/ui/FileDropZone.js +4 -2
  192. package/esm/ui/FileSelector/LocalFileChooser.js +4 -4
  193. package/esm/ui/FileSelector/LocationInput.d.ts +3 -2
  194. package/esm/ui/FileSelector/LocationInput.js +4 -2
  195. package/esm/ui/FileSelector/SourceTypeSelector.d.ts +3 -2
  196. package/esm/ui/FileSelector/SourceTypeSelector.js +8 -6
  197. package/esm/ui/GpuFallbackButton.d.ts +3 -2
  198. package/esm/ui/GpuFallbackButton.js +4 -2
  199. package/esm/ui/HoverMenu.d.ts +2 -2
  200. package/esm/ui/HoverMenu.js +7 -3
  201. package/esm/ui/HoverTooltip.d.ts +3 -2
  202. package/esm/ui/HoverTooltip.js +4 -2
  203. package/esm/ui/Icons.d.ts +5 -5
  204. package/esm/ui/Icons.js +11 -10
  205. package/esm/ui/InlineMenuControls.d.ts +2 -2
  206. package/esm/ui/InlineMenuControls.js +4 -3
  207. package/esm/ui/JexlFilterRowEditors.d.ts +4 -4
  208. package/esm/ui/JexlFilterRowEditors.js +9 -8
  209. package/esm/ui/LabeledCheckbox.d.ts +3 -2
  210. package/esm/ui/LabeledCheckbox.js +4 -2
  211. package/esm/ui/LazyBaseTooltip.d.ts +12 -3
  212. package/esm/ui/LazyBaseTooltip.js +4 -2
  213. package/esm/ui/LegendSwatchGlyph.js +1 -0
  214. package/esm/ui/LoadingDots.d.ts +2 -1
  215. package/esm/ui/LoadingDots.js +4 -2
  216. package/esm/ui/LoadingEllipses.d.ts +5 -2
  217. package/esm/ui/LoadingEllipses.js +5 -3
  218. package/esm/ui/LoadingOverlay.d.ts +3 -2
  219. package/esm/ui/LoadingOverlay.js +4 -2
  220. package/esm/ui/LoadingProgress.d.ts +3 -2
  221. package/esm/ui/LoadingProgress.js +4 -2
  222. package/esm/ui/Logo.d.ts +2 -2
  223. package/esm/ui/Logo.js +9 -8
  224. package/esm/ui/MenuItemChevron.d.ts +2 -2
  225. package/esm/ui/MenuItemChevron.js +3 -2
  226. package/esm/ui/MenuItemEndDecoration.d.ts +2 -2
  227. package/esm/ui/MenuItemEndDecoration.js +3 -2
  228. package/esm/ui/MenuItemTrailing.d.ts +2 -2
  229. package/esm/ui/MenuItemTrailing.js +7 -6
  230. package/esm/ui/MenuTypes.d.ts +21 -1
  231. package/esm/ui/MenuTypes.js +20 -0
  232. package/esm/ui/MonospaceTextField.d.ts +3 -2
  233. package/esm/ui/MonospaceTextField.js +4 -2
  234. package/esm/ui/NumberTextField.d.ts +2 -2
  235. package/esm/ui/NumberTextField.js +4 -2
  236. package/esm/ui/PaletteContext.d.ts +11 -9
  237. package/esm/ui/PaletteContext.js +33 -18
  238. package/esm/ui/PluginStoreCard.d.ts +3 -2
  239. package/esm/ui/PluginStoreCard.js +4 -2
  240. package/esm/ui/PopoverPicker.d.ts +3 -2
  241. package/esm/ui/PopoverPicker.js +4 -2
  242. package/esm/ui/PrerenderedCanvas.d.ts +2 -2
  243. package/esm/ui/PrerenderedCanvas.js +3 -2
  244. package/esm/ui/RedErrorMessageBox.d.ts +3 -2
  245. package/esm/ui/RedErrorMessageBox.js +4 -2
  246. package/esm/ui/RefNameAutocomplete/EndAdornment.d.ts +3 -2
  247. package/esm/ui/RefNameAutocomplete/EndAdornment.js +4 -2
  248. package/esm/ui/RefNameAutocomplete/HelpDialog.d.ts +3 -2
  249. package/esm/ui/RefNameAutocomplete/HelpDialog.js +4 -2
  250. package/esm/ui/ReplaceCurrentViewButton.d.ts +3 -2
  251. package/esm/ui/ReplaceCurrentViewButton.js +4 -2
  252. package/esm/ui/ResizeHandle.d.ts +2 -2
  253. package/esm/ui/ResizeHandle.js +3 -2
  254. package/esm/ui/SanitizedHTML.d.ts +3 -2
  255. package/esm/ui/SanitizedHTML.js +6 -4
  256. package/esm/ui/ScrollChrome.d.ts +3 -2
  257. package/esm/ui/ScrollChrome.js +4 -2
  258. package/esm/ui/ScrollEdgeShadow.d.ts +2 -2
  259. package/esm/ui/ScrollEdgeShadow.js +2 -2
  260. package/esm/ui/SessionJsonPanel.d.ts +3 -2
  261. package/esm/ui/SessionJsonPanel.js +4 -2
  262. package/esm/ui/ShareLinkField.d.ts +3 -2
  263. package/esm/ui/ShareLinkField.js +4 -2
  264. package/esm/ui/SingleSlider.d.ts +2 -2
  265. package/esm/ui/SingleSlider.js +4 -2
  266. package/esm/ui/SliderTooltip.d.ts +2 -1
  267. package/esm/ui/SliderTooltip.js +4 -2
  268. package/esm/ui/SnackbarContents.d.ts +3 -2
  269. package/esm/ui/SnackbarContents.js +4 -2
  270. package/esm/ui/SnackbarModel.d.ts +2 -0
  271. package/esm/ui/SnackbarModel.js +2 -0
  272. package/esm/ui/StackTraceButton.d.ts +3 -2
  273. package/esm/ui/StackTraceButton.js +4 -2
  274. package/esm/ui/StatusProgressBar.d.ts +3 -2
  275. package/esm/ui/StatusProgressBar.js +4 -2
  276. package/esm/ui/SubmitForm.d.ts +2 -1
  277. package/esm/ui/SubmitForm.js +4 -2
  278. package/esm/ui/SvgColorLegend.d.ts +3 -4
  279. package/esm/ui/SvgColorLegend.js +27 -18
  280. package/esm/ui/TagTextField.d.ts +2 -2
  281. package/esm/ui/TagTextField.js +4 -2
  282. package/esm/ui/ViewLoadingScreen.d.ts +3 -2
  283. package/esm/ui/ViewLoadingScreen.js +4 -2
  284. package/esm/ui/colorScale.d.ts +5 -1
  285. package/esm/ui/colorScale.js +12 -10
  286. package/esm/ui/colors.d.ts +3 -3
  287. package/esm/ui/colors.js +7 -7
  288. package/esm/ui/filterMenuItems.d.ts +10 -31
  289. package/esm/ui/filterMenuItems.js +13 -14
  290. package/esm/ui/index.d.ts +1 -1
  291. package/esm/ui/index.js +1 -1
  292. package/esm/ui/launchTargetsMenuItem.js +9 -13
  293. package/esm/ui/legendMenuItem.d.ts +4 -4
  294. package/esm/ui/legendMenuItem.js +4 -4
  295. package/esm/ui/menuItemAdornment.d.ts +1 -1
  296. package/esm/ui/menuItemAdornment.js +1 -1
  297. package/esm/ui/menuItems.d.ts +1 -1
  298. package/esm/ui/menuItems.js +1 -1
  299. package/esm/ui/menuLabels.d.ts +2 -2
  300. package/esm/ui/menuLabels.js +2 -2
  301. package/esm/ui/palette.d.ts +2 -2
  302. package/esm/ui/palette.js +10 -10
  303. package/esm/ui/radioSubMenu.d.ts +5 -3
  304. package/esm/ui/radioSubMenu.js +2 -2
  305. package/esm/ui/rampKey.d.ts +15 -0
  306. package/esm/ui/rampKey.js +17 -0
  307. package/esm/ui/showSubMenu.d.ts +0 -5
  308. package/esm/ui/showSubMenu.js +6 -15
  309. package/esm/ui/theme.d.ts +2 -2
  310. package/esm/ui/theme.js +1 -1
  311. package/esm/ui/useAssemblySelection.d.ts +2 -0
  312. package/esm/ui/useMouseTracking.d.ts +8 -20
  313. package/esm/ui/useMouseTracking.js +23 -62
  314. package/esm/ui/usePlacedMenuFocus.d.ts +19 -0
  315. package/esm/ui/usePlacedMenuFocus.js +28 -0
  316. package/esm/util/Base1DViewModel.d.ts +5 -3
  317. package/esm/util/Base1DViewModel.js +5 -3
  318. package/esm/util/SvgCanvas.js +1 -1
  319. package/esm/util/aggregateFieldName.d.ts +1 -10
  320. package/esm/util/aggregateFieldName.js +1 -8
  321. package/esm/util/analytics.d.ts +4 -6
  322. package/esm/util/analytics.js +143 -12
  323. package/esm/util/bezierConnector.d.ts +20 -0
  324. package/esm/util/bezierConnector.js +34 -100
  325. package/esm/util/cacheBudgets.d.ts +3 -0
  326. package/esm/util/cacheBudgets.js +3 -0
  327. package/esm/util/categoricalField.d.ts +2 -2
  328. package/esm/util/categoricalField.js +3 -3
  329. package/esm/util/color/index.d.ts +1 -1
  330. package/esm/util/color/index.js +2 -2
  331. package/esm/util/color-bits/bit.js +1 -1
  332. package/esm/util/color-bits/parse.js +6 -6
  333. package/esm/util/colorBits.d.ts +15 -4
  334. package/esm/util/colorBits.js +38 -15
  335. package/esm/util/colorRamp.d.ts +3 -3
  336. package/esm/util/colorRamp.js +14 -2
  337. package/esm/util/colorScale.d.ts +114 -20
  338. package/esm/util/colorScale.js +124 -26
  339. package/esm/util/colorSchemes.d.ts +6 -4
  340. package/esm/util/colorSchemes.js +6 -3
  341. package/esm/util/createSvgRasterCanvas.d.ts +14 -1
  342. package/esm/util/createSvgRasterCanvas.js +36 -12
  343. package/esm/util/diagonalizeRegions.js +18 -9
  344. package/esm/util/featureTransforms.d.ts +2 -2
  345. package/esm/util/featureTransforms.js +85 -135
  346. package/esm/util/fileHandleStore.js +5 -0
  347. package/esm/util/groupKeys.d.ts +5 -4
  348. package/esm/util/groupKeys.js +15 -9
  349. package/esm/util/index.js +1 -1
  350. package/esm/util/installFetch.d.ts +2 -2
  351. package/esm/util/installPrerequisiteFetch.d.ts +8 -3
  352. package/esm/util/installPrerequisiteFetch.js +9 -7
  353. package/esm/util/io/RemoteFileWithRangeCache.d.ts +1 -1
  354. package/esm/util/io/RemoteFileWithRangeCache.js +1 -1
  355. package/esm/util/jexl.js +1 -1
  356. package/esm/util/layouts/GranularRectLayout.d.ts +19 -3
  357. package/esm/util/layouts/GranularRectLayout.js +57 -34
  358. package/esm/util/leadingEdgeAutorun.d.ts +9 -1
  359. package/esm/util/leadingEdgeAutorun.js +5 -2
  360. package/esm/util/markEncoding.d.ts +10 -8
  361. package/esm/util/markEncoding.js +50 -12
  362. package/esm/util/markEncodingTypes.d.ts +74 -20
  363. package/esm/util/originCut.d.ts +14 -0
  364. package/esm/util/originCut.js +19 -0
  365. package/esm/util/paintLayer.d.ts +1 -1
  366. package/esm/util/paintLayer.js +4 -3
  367. package/esm/util/pathSeries.d.ts +18 -0
  368. package/esm/util/pathSeries.js +143 -0
  369. package/esm/util/pressOwner.d.ts +20 -0
  370. package/esm/util/pressOwner.js +26 -0
  371. package/esm/util/quantileExtent.d.ts +3 -3
  372. package/esm/util/quantileExtent.js +3 -3
  373. package/esm/util/rowStackGeometry.d.ts +1 -1
  374. package/esm/util/rowStackGeometry.js +1 -1
  375. package/esm/util/sessionActivity.d.ts +36 -0
  376. package/esm/util/sessionActivity.js +88 -0
  377. package/esm/util/stepOutputs.d.ts +165 -0
  378. package/esm/util/stepOutputs.js +201 -0
  379. package/esm/util/stepTables.d.ts +7 -3
  380. package/esm/util/stepTables.js +86 -3
  381. package/esm/util/thresholdScale.d.ts +1 -1
  382. package/esm/util/thresholdScale.js +1 -1
  383. package/esm/util/tracks.js +1 -1
  384. package/esm/util/usePanZoom.js +4 -10
  385. package/esm/util/windowStep.d.ts +6 -0
  386. package/esm/util/windowStep.js +153 -0
  387. package/package.json +23 -15
  388. package/esm/data_adapters/BaseAdapter/featureDensity.d.ts +0 -40
  389. package/esm/data_adapters/BaseAdapter/featureDensity.js +0 -31
  390. package/esm/rpc/methods/CoreGetFeatureDensity.d.ts +0 -11
  391. package/esm/rpc/methods/CoreGetFeatureDensity.js +0 -22
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useState } from 'react';
3
3
  import { Chip, Stack, TextField } from '@mui/material';
4
+ import { observer } from 'mobx-react';
4
5
  import { isValidTag } from '../util/tags.js';
5
6
  /**
6
7
  * Uncontrolled-style TextField for a two-character SAM tag (e.g. HP, RG, XS).
@@ -9,7 +10,7 @@ import { isValidTag } from '../util/tags.js';
9
10
  * error once two invalid characters are entered. Optional `quickPicks` render a
10
11
  * chip row of common tags that fill the field on click.
11
12
  */
12
- export default function TagTextField(props) {
13
+ const TagTextField = observer(function TagTextField(props) {
13
14
  const { defaultValue = '', onValueChange, helperText, inputTestId, quickPicks, ...rest } = props;
14
15
  const [text, setText] = useState(defaultValue);
15
16
  const showError = text.length === 2 && !isValidTag(text);
@@ -29,4 +30,5 @@ export default function TagTextField(props) {
29
30
  }, onChange: event => {
30
31
  setValue(event.target.value);
31
32
  } })] }));
32
- }
33
+ });
34
+ export default TagTextField;
@@ -18,8 +18,9 @@
18
18
  * {@link LoadingProgress} directly — bare, it renders an unconstrained
19
19
  * full-width bar under an unaligned label.
20
20
  */
21
- export default function ViewLoadingScreen({ message, progress, source, }: {
21
+ declare const ViewLoadingScreen: ({ message, progress, source, }: {
22
22
  message?: string;
23
23
  progress?: number;
24
24
  source?: string;
25
- }): import("react").JSX.Element;
25
+ }) => import("react").JSX.Element;
26
+ export default ViewLoadingScreen;
@@ -1,5 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Typography } from '@mui/material';
3
+ import { observer } from 'mobx-react';
3
4
  import { useSlowLoad, useStalled } from '../util/hooks.js';
4
5
  import { makeStyles } from '../util/tss-react/index.js';
5
6
  import LoadingProgress from './LoadingProgress.js';
@@ -44,9 +45,10 @@ const useStyles = makeStyles()(theme => ({
44
45
  * {@link LoadingProgress} directly — bare, it renders an unconstrained
45
46
  * full-width bar under an unaligned label.
46
47
  */
47
- export default function ViewLoadingScreen({ message, progress, source, }) {
48
+ const ViewLoadingScreen = observer(function ViewLoadingScreen({ message, progress, source, }) {
48
49
  const { classes } = useStyles();
49
50
  const slow = useSlowLoad();
50
51
  const stalled = useStalled(`${message}|${progress}|${source}`);
51
52
  return (_jsxs("div", { className: classes.root, children: [_jsx(LoadingProgress, { variant: "h6", message: slow ? message : undefined, fraction: slow ? progress : undefined, barClassName: classes.bar }), stalled && source ? (_jsxs(Typography, { variant: "body2", className: classes.stalled, children: ["still waiting on ", source] })) : null] }));
52
- }
53
+ });
54
+ export default ViewLoadingScreen;
@@ -56,7 +56,7 @@ export interface RampScale {
56
56
  format?: (value: number) => string;
57
57
  /**
58
58
  * The loaded values' extremes. An end of `domain` the data runs past prints
59
- * `≤` or `≥`, since the ramp paints every value beyond it in its end colour.
59
+ * `≤` or `≥`, since the ramp paints every value beyond it in its end color.
60
60
  */
61
61
  extent?: readonly [number, number];
62
62
  }
@@ -66,6 +66,10 @@ export interface RampScale {
66
66
  * the key cannot list a color nothing painted.
67
67
  */
68
68
  export type ColorScale = CategoricalScale | RampScale;
69
+ export declare function rampLabels({ domain, format, extent, }: RampScale): {
70
+ minLabel: string;
71
+ maxLabel: string;
72
+ };
69
73
  /**
70
74
  * The one derivation of a legend from a display's color scales: a section per
71
75
  * scale, in the order declared. On screen `FloatingLegend` renders the result
@@ -1,9 +1,6 @@
1
1
  import { groupKeyComparator } from '../util/groupKeys.js';
2
2
  import { formatScore } from '../util/numericUtils.js';
3
- // A lone ramp names itself on its row: `FloatingLegend` and `legendEntries`
4
- // draw a section's title only beside other sections, and a bar of numbers
5
- // with nothing saying what they count is not a key.
6
- function rampItem({ title, domain, stops, format = formatScore, extent }, lone) {
3
+ export function rampLabels({ domain, format = formatScore, extent, }) {
7
4
  const [min, max] = domain;
8
5
  const [lo, hi] = extent ?? domain;
9
6
  // compared at float32 as well, since a value lane carries the extent in one
@@ -11,12 +8,17 @@ function rampItem({ title, domain, stops, format = formatScore, extent }, lone)
11
8
  const below = lo < min && Math.fround(lo) < Math.fround(min);
12
9
  const above = hi > max && Math.fround(hi) > Math.fround(max);
13
10
  return {
14
- label: lone ? (title ?? '') : '',
15
- gradient: {
16
- stops,
17
- minLabel: `${below ? '≤' : ''}${format(min)}`,
18
- maxLabel: `${above ? '≥' : ''}${format(max)}`,
19
- },
11
+ minLabel: `${below ? '≤' : ''}${format(min)}`,
12
+ maxLabel: `${above ? '≥' : ''}${format(max)}`,
13
+ };
14
+ }
15
+ // A lone ramp names itself on its row: `FloatingLegend` and `legendEntries`
16
+ // draw a section's title only beside other sections, and a bar of numbers
17
+ // with nothing saying what they count is not a key.
18
+ function rampItem(scale, lone) {
19
+ return {
20
+ label: lone ? (scale.title ?? '') : '',
21
+ gradient: { stops: scale.stops, ...rampLabels(scale) },
20
22
  };
21
23
  }
22
24
  function sectionOf(scale, lone) {
@@ -15,7 +15,7 @@ export declare const paletteColors: {
15
15
  * The wide qualitative palette: every scheme above, in order, deduped and with
16
16
  * the neutrals dropped. ~40 entries.
17
17
  *
18
- * A feature's categorical colour deals from it; a row's deals from
18
+ * A feature's categorical color deals from it; a row's deals from
19
19
  * `rowPaletteColorAt`, which re-lights tableau10 rather than reaching for
20
20
  * another scheme's hues.
21
21
  *
@@ -111,7 +111,7 @@ export declare function getQueryColor(queryName: string): string;
111
111
  /** The palette color for a chromosome at `position` in its assembly. */
112
112
  export declare function refNamePaletteColorAt(position: number): string;
113
113
  /**
114
- * The colour the row palette deals the row or value at `position`: tableau10
114
+ * The color the row palette deals the row or value at `position`: tableau10
115
115
  * less its grey, then re-lit laps of it, as a karyotype's are.
116
116
  */
117
117
  export declare function rowPaletteColorAt(position: number): string;
@@ -132,7 +132,7 @@ export declare function rowPaletteColorAt(position: number): string;
132
132
  export declare function refNameColor(name: string, position: number | undefined): string;
133
133
  /**
134
134
  * A palette named in `namedPalettes`, or a comma-separated list of CSS
135
- * colours; undefined, with a warning, for anything else.
135
+ * colors; undefined, with a warning, for anything else.
136
136
  */
137
137
  export declare function paletteFromSpec(spec: unknown): readonly string[] | undefined;
138
138
  export { category10, set1 };
package/esm/ui/colors.js CHANGED
@@ -98,7 +98,7 @@ export const paletteColors = {
98
98
  * The wide qualitative palette: every scheme above, in order, deduped and with
99
99
  * the neutrals dropped. ~40 entries.
100
100
  *
101
- * A feature's categorical colour deals from it; a row's deals from
101
+ * A feature's categorical color deals from it; a row's deals from
102
102
  * `rowPaletteColorAt`, which re-lights tableau10 rather than reaching for
103
103
  * another scheme's hues.
104
104
  *
@@ -341,7 +341,7 @@ const PALETTE_LAP_TONES = [
341
341
  // and pinks all pin against the top of the sRGB gamut and converge there.
342
342
  { lightnessShift: 0.18, chromaScale: 0.8 },
343
343
  ];
344
- // The colour at `position` in `hexes`, each lap past the end re-lit.
344
+ // The color at `position` in `hexes`, each lap past the end re-lit.
345
345
  function lapColorAt(hexes, position) {
346
346
  const hex = hexes[position % hexes.length];
347
347
  const lap = PALETTE_LAP_TONES[Math.floor(position / hexes.length) % PALETTE_LAP_TONES.length];
@@ -353,7 +353,7 @@ export function refNamePaletteColorAt(position) {
353
353
  }
354
354
  const rowColorHexes = tableau10.filter(hex => !NEUTRALS.has(hex));
355
355
  /**
356
- * The colour the row palette deals the row or value at `position`: tableau10
356
+ * The color the row palette deals the row or value at `position`: tableau10
357
357
  * less its grey, then re-lit laps of it, as a karyotype's are.
358
358
  */
359
359
  export function rowPaletteColorAt(position) {
@@ -390,7 +390,7 @@ const okabeIto = [
390
390
  '#d55e00',
391
391
  '#cc79a7',
392
392
  ];
393
- // Paul Tol, "Colour Schemes", SRON/EPS/TN/09-002 (2021), the bright scheme
393
+ // Paul Tol, "Color Schemes", SRON/EPS/TN/09-002 (2021), the bright scheme
394
394
  const tolBright = [
395
395
  '#4477aa',
396
396
  '#ee6677',
@@ -399,7 +399,7 @@ const tolBright = [
399
399
  '#66ccee',
400
400
  '#aa3377',
401
401
  ];
402
- // Paul Tol, "Colour Schemes", SRON/EPS/TN/09-002 (2021), the muted scheme
402
+ // Paul Tol, "Color Schemes", SRON/EPS/TN/09-002 (2021), the muted scheme
403
403
  const tolMuted = [
404
404
  '#cc6677',
405
405
  '#332288',
@@ -448,7 +448,7 @@ const namedPalettes = {
448
448
  };
449
449
  /**
450
450
  * A palette named in `namedPalettes`, or a comma-separated list of CSS
451
- * colours; undefined, with a warning, for anything else.
451
+ * colors; undefined, with a warning, for anything else.
452
452
  */
453
453
  export function paletteFromSpec(spec) {
454
454
  if (typeof spec !== 'string' || spec === '') {
@@ -461,7 +461,7 @@ export function paletteFromSpec(spec) {
461
461
  if (colors.every(isCssColor)) {
462
462
  return colors;
463
463
  }
464
- console.warn(`palette "${spec}" is neither one of ${Object.keys(namedPalettes).join(', ')} nor a comma-separated list of CSS colours`);
464
+ console.warn(`palette "${spec}" is neither one of ${Object.keys(namedPalettes).join(', ')} nor a comma-separated list of CSS colors`);
465
465
  return undefined;
466
466
  }
467
467
  export { category10, set1 };
@@ -13,7 +13,7 @@ import type { MenuItem } from './MenuTypes.ts';
13
13
  * layout-affecting, and reachable only from the pinned feature's own
14
14
  * right-click menu, so a pin left on another chromosome could not be reached);
15
15
  * - an undo derived from the state's ABSENCE, so it vanished with the thing it
16
- * undid (the canvas colour key's "×" was a one-way door for the session);
16
+ * undid (the canvas color key's "×" was a one-way door for the session);
17
17
  * - a count derived from a different predicate than the state's actual effect
18
18
  * ("Filter by... (1)" for opening the filter dialog and pressing Submit).
19
19
  *
@@ -57,41 +57,20 @@ export declare function clearAll(items: Reversibles): void;
57
57
  export declare function undoItems(items: Reversibles, priority?: number): MenuItem[];
58
58
  export interface FilterMenuOpts {
59
59
  /**
60
- * The display's narrowings, declared once (see {@link Reversible}). Supplying
61
- * this derives `activeCount`, `recoveryItems` and `onClear` together, so the
62
- * count in the label, the rows inside the submenu and what "Clear all filters"
63
- * actually clears cannot disagree. Prefer it to spelling the three out.
60
+ * The display's narrowings, declared once (see {@link Reversible}). The count
61
+ * in the label, the undo rows inside the submenu and what "Clear all filters"
62
+ * clears all derive from it, so they cannot disagree. Count a narrowing when
63
+ * its value is not its **no-op** value, which is not always its config
64
+ * default: the alignments flag masks default non-zero and are the
65
+ * no-filtering state.
64
66
  */
65
- narrowings?: Reversibles;
66
- /**
67
- * How many independent filters are narrowing the view right now, so the label
68
- * can say that something is hiding data. Count a filter when its value is not
69
- * its **no-op** value, which is not always its config default: the LD
70
- * display's `minorAlleleFrequencyFilter` ships at 0.1 and is genuinely
71
- * dropping variants, while the alignments flag masks default non-zero and are
72
- * the no-filtering state, so they count only when edited away from it.
73
- *
74
- * This is usually the only affordance telling the user a filter is silently
75
- * hiding rows — nothing else in the track chrome says so.
76
- *
77
- * Ignored when `narrowings` is given.
78
- */
79
- activeCount?: number;
67
+ narrowings: Reversibles;
80
68
  /** Opens the display's filter dialog, where it has a single one. */
81
69
  onEdit?: () => void;
82
70
  /** Controls that belong inside the submenu (inline sliders, further dialogs). */
83
71
  subItems?: MenuItem[];
84
- /**
85
- * Recovery rows offered alongside "Clear all filters" once something is
86
- * filtering — the canvas display's "Show N hidden features", for one.
87
- */
88
- recoveryItems?: MenuItem[];
89
- /** Turn every filter off. Offered only while `activeCount` is non-zero. */
90
- onClear?: () => void;
91
- /** Rides the top-level row; see the canvas display's RECOVERY_PRIORITY. */
72
+ /** Rides the top-level row, `TRACK_MENU_PRIORITY.recovery` on the canvas display. */
92
73
  priority?: number;
93
- /** Label for the dialog opener inside the submenu. */
94
- editLabel?: string;
95
74
  }
96
75
  /**
97
76
  * The "Filter by..." family, in the one shape every display uses.
@@ -109,4 +88,4 @@ export interface FilterMenuOpts {
109
88
  * multi-sample variant track said nothing, anywhere, about the rows it was
110
89
  * dropping.
111
90
  */
112
- export declare function filterMenuItems({ narrowings, activeCount: explicitCount, onEdit, subItems, recoveryItems: explicitRecovery, onClear: explicitClear, priority, editLabel, }: FilterMenuOpts): MenuItem[];
91
+ export declare function filterMenuItems({ narrowings, onEdit, subItems, priority, }: FilterMenuOpts): MenuItem[];
@@ -46,36 +46,35 @@ export function undoItems(items, priority) {
46
46
  * multi-sample variant track said nothing, anywhere, about the rows it was
47
47
  * dropping.
48
48
  */
49
- export function filterMenuItems({ narrowings, activeCount: explicitCount = 0, onEdit, subItems = [], recoveryItems: explicitRecovery = [], onClear: explicitClear, priority, editLabel = 'Edit filters...', }) {
50
- // One declaration drives all three, or the caller supplies them separately —
51
- // the pre-`Reversible` shape, kept for the displays that haven't adopted it.
52
- const count = narrowings ? activeCount(narrowings) : explicitCount;
53
- const recoveryItems = narrowings ? undoItems(narrowings) : explicitRecovery;
54
- const onClear = narrowings
55
- ? () => {
56
- clearAll(narrowings);
57
- }
58
- : explicitClear;
49
+ export function filterMenuItems({ narrowings, onEdit, subItems = [], priority, }) {
50
+ const count = activeCount(narrowings);
59
51
  const label = count > 0 ? `Filter by... (${count})` : 'Filter by...';
60
52
  const editItem = onEdit
61
53
  ? [
62
54
  {
63
- label: editLabel,
55
+ label: 'Edit filters...',
64
56
  icon: FilterAltIcon,
65
57
  onClick: onEdit,
66
58
  },
67
59
  ]
68
60
  : [];
69
- const clearItem = onClear && count > 0
61
+ const clearItem = count > 0
70
62
  ? [
71
63
  {
72
64
  label: 'Clear all filters',
73
65
  icon: FilterAltOffIcon,
74
- onClick: onClear,
66
+ onClick: () => {
67
+ clearAll(narrowings);
68
+ },
75
69
  },
76
70
  ]
77
71
  : [];
78
- const rows = [...editItem, ...subItems, ...recoveryItems, ...clearItem];
72
+ const rows = [
73
+ ...editItem,
74
+ ...subItems,
75
+ ...undoItems(narrowings),
76
+ ...clearItem,
77
+ ];
79
78
  if (!rows.length) {
80
79
  return [];
81
80
  }
package/esm/ui/index.d.ts CHANGED
@@ -81,7 +81,7 @@ export { hoverBoxStyle } from './hoverBoxStyle.ts';
81
81
  export { useMouseState, useMouseTracking } from './useMouseTracking.ts';
82
82
  export type { MouseState, MouseTracker } from './useMouseTracking.ts';
83
83
  export { VIEW_HEADER_HEIGHT } from './viewHeaderHeight.ts';
84
- export { LEGEND_ROW_HEIGHT, LEGEND_SVG_GUTTER_WIDTH, LEGEND_SWATCH, default as SvgColorLegend, } from './SvgColorLegend.tsx';
84
+ export { LEGEND_ROW_HEIGHT, LEGEND_SWATCH, default as SvgColorLegend, } from './SvgColorLegend.tsx';
85
85
  export type { ColorLegendEntry } from './SvgColorLegend.tsx';
86
86
  export { measureLegendText } from './measureLegendText.ts';
87
87
  export { LegendSwatchGlyph } from './LegendSwatchGlyph.tsx';
package/esm/ui/index.js CHANGED
@@ -75,7 +75,7 @@ export { default as Crosshairs } from './Crosshairs.js';
75
75
  export { hoverBoxStyle } from './hoverBoxStyle.js';
76
76
  export { useMouseState, useMouseTracking } from './useMouseTracking.js';
77
77
  export { VIEW_HEADER_HEIGHT } from './viewHeaderHeight.js';
78
- export { LEGEND_ROW_HEIGHT, LEGEND_SVG_GUTTER_WIDTH, LEGEND_SWATCH, default as SvgColorLegend, } from './SvgColorLegend.js';
78
+ export { LEGEND_ROW_HEIGHT, LEGEND_SWATCH, default as SvgColorLegend, } from './SvgColorLegend.js';
79
79
  export { measureLegendText } from './measureLegendText.js';
80
80
  export { LegendSwatchGlyph } from './LegendSwatchGlyph.js';
81
81
  export { MAX_LEGEND_ITEMS, legendEntries, legendIsReadable, legendSwatches, nonEmptyLegendSections, } from './legendSpec.js';
@@ -1,3 +1,4 @@
1
+ import { subMenuIfAny } from './MenuTypes.js';
1
2
  /**
2
3
  * One launch offer, over the datasets that can serve it: nothing at all when
3
4
  * none can, otherwise a submenu naming each. Which dataset a launch reads from
@@ -8,17 +9,12 @@
8
9
  * data.
9
10
  */
10
11
  export function launchTargetsMenuItem({ label, icon, entries, entryLabel, onSelect, }) {
11
- return entries.length
12
- ? [
13
- {
14
- label,
15
- icon,
16
- type: 'subMenu',
17
- subMenu: entries.map(entry => ({
18
- label: entryLabel(entry),
19
- onClick: onSelect(entry),
20
- })),
21
- },
22
- ]
23
- : [];
12
+ return subMenuIfAny({
13
+ label,
14
+ icon,
15
+ subMenu: entries.map(entry => ({
16
+ label: entryLabel(entry),
17
+ onClick: onSelect(entry),
18
+ })),
19
+ });
24
20
  }
@@ -1,9 +1,9 @@
1
1
  import type { MenuItem } from './MenuTypes.ts';
2
2
  import type { SettingRowOptions } from './toggleMenuItems.ts';
3
3
  /**
4
- * The "Show legend" checkbox behind `LegendMixin`'s row and the circular
5
- * view's. Takes the value and the toggle, in `checkboxItem`'s order, which is
6
- * all this adds a label to.
4
+ * The "Show legend" checkbox for a menu with no "Show..." submenu, such as the
5
+ * circular view's. Inside "Show..." the row reads "Legend"
6
+ * (`legendCheckboxItem` in `@jbrowse/display-kit/LegendMixin`).
7
7
  *
8
8
  * The `showLegend` **config slots** stay per display: their default values
9
9
  * legitimately differ (a Hi-C color scale is off by default, a variant genotype
@@ -12,5 +12,5 @@ import type { SettingRowOptions } from './toggleMenuItems.ts';
12
12
  * `synteny-core`'s color-by legend has no toggle at all: it comes up with the
13
13
  * modes that have a key and is dismissed from its own close button.
14
14
  */
15
- /** #menuBuilder showLegendCheckboxItem | the shared "Show legend" checkbox */
15
+ /** #menuBuilder showLegendCheckboxItem | a "Show legend" checkbox outside a "Show..." submenu */
16
16
  export declare function showLegendCheckboxItem(checked: boolean, onToggle: () => void, opts?: SettingRowOptions): MenuItem;
@@ -1,8 +1,8 @@
1
1
  import { checkboxItem } from './toggleMenuItems.js';
2
2
  /**
3
- * The "Show legend" checkbox behind `LegendMixin`'s row and the circular
4
- * view's. Takes the value and the toggle, in `checkboxItem`'s order, which is
5
- * all this adds a label to.
3
+ * The "Show legend" checkbox for a menu with no "Show..." submenu, such as the
4
+ * circular view's. Inside "Show..." the row reads "Legend"
5
+ * (`legendCheckboxItem` in `@jbrowse/display-kit/LegendMixin`).
6
6
  *
7
7
  * The `showLegend` **config slots** stay per display: their default values
8
8
  * legitimately differ (a Hi-C color scale is off by default, a variant genotype
@@ -11,7 +11,7 @@ import { checkboxItem } from './toggleMenuItems.js';
11
11
  * `synteny-core`'s color-by legend has no toggle at all: it comes up with the
12
12
  * modes that have a key and is dismissed from its own close button.
13
13
  */
14
- /** #menuBuilder showLegendCheckboxItem | the shared "Show legend" checkbox */
14
+ /** #menuBuilder showLegendCheckboxItem | a "Show legend" checkbox outside a "Show..." submenu */
15
15
  export function showLegendCheckboxItem(checked, onToggle, opts) {
16
16
  return checkboxItem('Show legend', checked, onToggle, opts);
17
17
  }
@@ -3,7 +3,7 @@ import type { MenuItem } from './MenuTypes.ts';
3
3
  * The trailing control a menu row draws, resolved at the point of drawing.
4
4
  *
5
5
  * `endAdornment` is an element the builder already made — synteny's and
6
- * wiggle's colour swatches — so the row hands it straight through.
6
+ * wiggle's color swatches — so the row hands it straight through.
7
7
  *
8
8
  * Lives in one place rather than at each of the four render sites, because the
9
9
  * "does any row have one?" predicate and the rendering have to agree — a row
@@ -2,7 +2,7 @@
2
2
  * The trailing control a menu row draws, resolved at the point of drawing.
3
3
  *
4
4
  * `endAdornment` is an element the builder already made — synteny's and
5
- * wiggle's colour swatches — so the row hands it straight through.
5
+ * wiggle's color swatches — so the row hands it straight through.
6
6
  *
7
7
  * Lives in one place rather than at each of the four render sites, because the
8
8
  * "does any row have one?" predicate and the rendering have to agree — a row
@@ -19,5 +19,5 @@ export { withHint } from './menuLabels.ts';
19
19
  export { makeRadioSubMenu } from './radioSubMenu.ts';
20
20
  export { showLegendCheckboxItem } from './legendMenuItem.ts';
21
21
  export type { RadioOption, SettingRowOptions } from './toggleMenuItems.ts';
22
- export { resolveSubMenu, staysOpenOnClick } from './MenuTypes.ts';
22
+ export { TRACK_MENU_PRIORITY, resolveSubMenu, staysOpenOnClick, subMenuIfAny, } from './MenuTypes.ts';
23
23
  export type { BaseMenuItem, CheckboxMenuItem, ClickableMenuItem, CustomMenuItem, MenuDivider, MenuItem, MenuItemClickHandler, MenuItemsGetter, MenuSubHeader, NormalMenuItem, RadioMenuItem, SubMenuItem, } from './MenuTypes.ts';
@@ -18,4 +18,4 @@ export { checkboxItem, radioItem, radioItems, toggleItem, withSubHeader, } from
18
18
  export { withHint } from './menuLabels.js';
19
19
  export { makeRadioSubMenu } from './radioSubMenu.js';
20
20
  export { showLegendCheckboxItem } from './legendMenuItem.js';
21
- export { resolveSubMenu, staysOpenOnClick } from './MenuTypes.js';
21
+ export { TRACK_MENU_PRIORITY, resolveSubMenu, staysOpenOnClick, subMenuIfAny, } from './MenuTypes.js';
@@ -14,7 +14,7 @@
14
14
  /**
15
15
  * #menuBuilder withHint | a row label carrying an aside that is only sometimes there
16
16
  *
17
- * `withHint('Show row separators', tooShort ? 'needs rows 4px or taller' :
17
+ * `withHint('Row separators', tooShort ? 'needs rows 4px or taller' :
18
18
  * undefined)`.
19
19
  *
20
20
  * The rows that want this are the ones that can be on, correctly on, and doing
@@ -29,7 +29,7 @@
29
29
  * has no reason to hover, since from the tick it looks like it already works.
30
30
  *
31
31
  * AN EM DASH, NOT PARENTHESES. Two of these labels already end in a
32
- * parenthetical of their own ("Show conservation (% identity)", "Codon changes
32
+ * parenthetical of their own ("Conservation (% identity)", "Codon changes
33
33
  * (amino acids)"), and a second pair straight after the first reads as a typo.
34
34
  * It also keeps the aside distinct from the ` - ` that names a permanent half of
35
35
  * a label ("Square view - average bp per pixel").
@@ -14,7 +14,7 @@
14
14
  /**
15
15
  * #menuBuilder withHint | a row label carrying an aside that is only sometimes there
16
16
  *
17
- * `withHint('Show row separators', tooShort ? 'needs rows 4px or taller' :
17
+ * `withHint('Row separators', tooShort ? 'needs rows 4px or taller' :
18
18
  * undefined)`.
19
19
  *
20
20
  * The rows that want this are the ones that can be on, correctly on, and doing
@@ -29,7 +29,7 @@
29
29
  * has no reason to hover, since from the tick it looks like it already works.
30
30
  *
31
31
  * AN EM DASH, NOT PARENTHESES. Two of these labels already end in a
32
- * parenthetical of their own ("Show conservation (% identity)", "Codon changes
32
+ * parenthetical of their own ("Conservation (% identity)", "Codon changes
33
33
  * (amino acids)"), and a second pair straight after the first reads as a typo.
34
34
  * It also keeps the aside distinct from the ` - ` that names a permanent half of
35
35
  * a label ("Square view - average bp per pixel").
@@ -253,10 +253,10 @@ export interface JBrowsePalette extends StringColors, NeutralTokens, SemanticCol
253
253
  mode: 'light' | 'dark';
254
254
  primary: ColorQuad;
255
255
  /**
256
- * The primary colour where it marks something on the page's own ground,
256
+ * The primary color where it marks something on the page's own ground,
257
257
  * such as a checked box or a selected row. `primary.main` in light mode. In
258
258
  * dark mode a primary as deep as midnight vanishes against the background,
259
- * so it is the secondary text colour, which the Material controls take there
259
+ * so it is the secondary text color, which the Material controls take there
260
260
  * too.
261
261
  */
262
262
  accent: string;
package/esm/ui/palette.js CHANGED
@@ -264,7 +264,7 @@ export const colorPairRR = '#5555bb';
264
264
  // the dullest (C* 20.4 against 34.6), which together is what "reads as a smudge"
265
265
  // means. Reported on `cancer_sv/k562_bcr_abl_split`: "the arcs for the
266
266
  // interchromosomal reads are very dark". The tell is a 2 px stroke — at that
267
- // weight it was the only colour in either scheme that disappeared, while as a
267
+ // weight it was the only color in either scheme that disappeared, while as a
268
268
  // large flat read fill it was merely dull. This slot has to survive both.
269
269
  //
270
270
  // The fix is that unmappedMate left the warm family (see its own note), which
@@ -330,7 +330,7 @@ export const colorShortInsert = '#f582c0';
330
330
  * #color alignments-pair-orientation | Mate unmapped | Mate aligned nowhere
331
331
  * #color alignments-insert-size | Mate unmapped | Mate aligned nowhere
332
332
  */
333
- // A NON-COLOUR, at the dark end of the neutral scale on BOTH themes. It takes
333
+ // A NON-COLOR, at the dark end of the neutral scale on BOTH themes. It takes
334
334
  // the first half of the `readOverlap` pattern and not the second, and that split
335
335
  // is the thing to understand here.
336
336
  //
@@ -371,7 +371,7 @@ export const colorShortInsert = '#f582c0';
371
371
  // has to survive, not a 40 px square.
372
372
  //
373
373
  // White was the previous dark value, and it reads as the loudest thing in a dark
374
- // pileup — louder than the coloured categories it is meant to be quieter than —
374
+ // pileup — louder than the colored categories it is meant to be quieter than —
375
375
  // which is the "glaring near-white blocks" failure `colorPairLRDark` already
376
376
  // exists to avoid. Going dark also drops the one real cost white carried, dE 9.4
377
377
  // to `readOverlap`'s dark #e4e4e4 — which the note that shipped it called dE 7,
@@ -385,10 +385,10 @@ export const colorShortInsert = '#f582c0';
385
385
  //
386
386
  // IGV goes further than any of this: `setPairOrientation` requires
387
387
  // `mate.isMapped()`, so an unmapped mate falls through every branch and takes
388
- // the default read colour. Going that far loses the one thing the category is
388
+ // the default read color. Going that far loses the one thing the category is
389
389
  // for — under insert size, tlen is 0 and would otherwise paint
390
390
  // `colorShortInsert`, a false claim — so it keeps a mark, and makes the mark a
391
- // non-colour.
391
+ // non-color.
392
392
  export const colorUnmappedMate = '#000000';
393
393
  // See colorUnmappedMate: the same dark neutral, lifted off the #121212 ground by
394
394
  // the least that still reads as a read rather than as a hole.
@@ -594,12 +594,12 @@ const defaultBases = {
594
594
  };
595
595
  const defaultFramesCDS = [
596
596
  null,
597
- { main: '#FF8080' },
598
- { main: '#80FF80' },
597
+ { main: '#F46868' },
598
+ { main: '#2EAA2E' },
599
599
  { main: '#8080FF' },
600
600
  { main: '#8080FF' },
601
- { main: '#80FF80' },
602
- { main: '#FF8080' },
601
+ { main: '#2EAA2E' },
602
+ { main: '#F46868' },
603
603
  ];
604
604
  const defaultFrames = [
605
605
  null,
@@ -726,7 +726,7 @@ export function resolvePalette(args = {}) {
726
726
  const preset = presets[themeName] ?? presets.default ?? {};
727
727
  const declared = themeName === 'default' ? { ...preset, ...configTheme?.palette } : preset;
728
728
  // A palette that declares a `mode` is pinned to it: an admin who registers a
729
- // dark `extraThemes` entry picked its colours for dark, and the light half
729
+ // dark `extraThemes` entry picked its colors for dark, and the light half
730
730
  // they never wrote is not JBrowse's to invent. A `mode` in the config `theme`
731
731
  // slot is the opposite — the site's starting point for the one palette that
732
732
  // merges it — so a reader's own pick wins over that.
@@ -1,4 +1,5 @@
1
1
  import type { MenuItem } from './MenuTypes.ts';
2
+ import type { RadioOption } from './toggleMenuItems.ts';
2
3
  import type React from 'react';
3
4
  /**
4
5
  * Build a radio submenu from a `[value, label]` option table keyed on the
@@ -8,7 +9,7 @@ import type React from 'react';
8
9
  * appended after the radios (e.g. a related checkbox) within the same submenu.
9
10
  *
10
11
  * Every display has a submenu of this shape naming the one thing it draws —
11
- * wiggle's "Plot type", MAF's "Row coloring", Hi-C's "Color scheme", the arc
12
+ * wiggle's and MAF's "Plot type", Hi-C's "Color scheme", the arc
12
13
  * display's "Display mode". The labels stay display-specific (they name
13
14
  * genuinely different choices); the construction is shared so a hand-rolled
14
15
  * copy can't forget that a settings row keeps the menu open.
@@ -20,9 +21,10 @@ import type React from 'react';
20
21
  export declare function makeRadioSubMenu<T extends string>(opts: {
21
22
  label: string;
22
23
  icon?: React.ElementType;
23
- value: T;
24
+ value: T | undefined;
24
25
  onChange: (value: T) => void;
25
- options: readonly (readonly [T, string])[];
26
+ /** `[value, label]` pairs, or `RadioOption`s for rows gated one by one */
27
+ options: readonly (readonly [T, string] | RadioOption<T>)[];
26
28
  extraItems?: MenuItem[];
27
29
  /**
28
30
  * Prose for the group, on the row that opens it. One "?" here rather than one
@@ -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
+ };