@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
@@ -162,7 +162,7 @@ export function createBaseTrackConfig(pluginManager) {
162
162
  },
163
163
  /**
164
164
  * #slot
165
- * where this track's data comes from. Its `type` names the adapter for
165
+ * The source of this track's data. Its `type` names the adapter for
166
166
  * the file format (`BamAdapter`, `Gff3TabixAdapter`, ...) and the rest of
167
167
  * the object is that adapter's own slots — see the adapter pages for
168
168
  * each. Most adapters also accept a `uri` shorthand in place of writing
@@ -258,5 +258,13 @@ export function createBaseTrackConfig(pluginManager) {
258
258
  */
259
259
  explicitIdentifier: 'trackId',
260
260
  explicitlyTyped: true,
261
+ closed: true,
262
+ // v1.3 wrote the text-search adapter and its attributes on the track,
263
+ // before `textSearching`
264
+ retired: {
265
+ rpcDriverName: () => ({}),
266
+ textSearchAdapter: () => ({}),
267
+ textSearchIndexingAttributes: () => ({}),
268
+ },
261
269
  });
262
270
  }
@@ -56,7 +56,7 @@ function useTrackDataExport({ model, regions, regionStr, type, options, }) {
56
56
  * The format picker, owning the per-format help text and the dialog that shows
57
57
  * it — nothing above needs to know a format can carry one.
58
58
  */
59
- function FormatSelector({ options, type, setType, usedAdapterExport, }) {
59
+ const FormatSelector = observer(function FormatSelector({ options, type, setType, usedAdapterExport, }) {
60
60
  const { classes } = useStyles();
61
61
  const [helpText, setHelpText] = useState();
62
62
  return (_jsxs(FormControl, { children: [_jsx(FormLabel, { children: `File type${usedAdapterExport ? ' (adapter export)' : ''}` }), _jsx(RadioGroup, { value: type, onChange: e => {
@@ -66,7 +66,7 @@ function FormatSelector({ options, type, setType, usedAdapterExport, }) {
66
66
  }, title: "Show help for this format", children: _jsx(HelpOutlineIcon, { fontSize: "small" }) })) : null] }, key))) }), _jsx(InfoDialog, { open: helpText !== undefined, onClose: () => {
67
67
  setHelpText(undefined);
68
68
  }, title: "Format Information", children: _jsx(DialogContentText, { children: helpText }) })] }));
69
- }
69
+ });
70
70
  /**
71
71
  * What the preview pane says — the export itself only once there is one, and
72
72
  * before that whichever of the four other states the dialog is in. In
@@ -8,7 +8,7 @@ export interface DisplaySnapshot {
8
8
  /**
9
9
  * Route each shorthand `displayDefaults: {...}` setting to the display types
10
10
  * whose member of that name takes its value: `color: 'red'` reaches every
11
- * display with a colour, `color: { field: 'type' }` only those whose colour
11
+ * display with a color, `color: { field: 'type' }` only those whose color
12
12
  * maps a field, and a spelling a display retired reaches that display as the
13
13
  * members it became. `reached` names the displays each key went to. A key no
14
14
  * display knows is an `unknownKeys` entry, and one every display that knows it
@@ -35,7 +35,7 @@ function verdictOf(schema, key, value) {
35
35
  /**
36
36
  * Route each shorthand `displayDefaults: {...}` setting to the display types
37
37
  * whose member of that name takes its value: `color: 'red'` reaches every
38
- * display with a colour, `color: { field: 'type' }` only those whose colour
38
+ * display with a color, `color: { field: 'type' }` only those whose color
39
39
  * maps a field, and a spelling a display retired reaches that display as the
40
40
  * members it became. `reached` names the displays each key went to. A key no
41
41
  * display knows is an `unknownKeys` entry, and one every display that knows it
@@ -129,6 +129,13 @@ export declare function pluginDescriptionString(d: PluginDefinition): string;
129
129
  * the same plugin just because neither has a url.
130
130
  */
131
131
  export declare function maybePluginUrl(d: PluginDefinition): string | undefined;
132
+ /**
133
+ * The absolute url PluginLoader fetches the definition from: a `umdLoc` or
134
+ * `esmLoc` against its own `baseUri`, any other form against the page. Trust
135
+ * decisions key on this rather than `maybePluginUrl`, under which one relative
136
+ * `plugin.js` names a different file in every config that lists it.
137
+ */
138
+ export declare function resolvedPluginUrl(d: PluginDefinition, pageUri?: string | undefined): string | undefined;
132
139
  export declare function pluginUrl(d: PluginDefinition): string;
133
140
  /**
134
141
  * Whether a definition loads from exactly `url` — the question behind "which
@@ -114,6 +114,26 @@ export function maybePluginUrl(d) {
114
114
  return undefined;
115
115
  }
116
116
  }
117
+ /**
118
+ * The absolute url PluginLoader fetches the definition from: a `umdLoc` or
119
+ * `esmLoc` against its own `baseUri`, any other form against the page. Trust
120
+ * decisions key on this rather than `maybePluginUrl`, under which one relative
121
+ * `plugin.js` names a different file in every config that lists it.
122
+ */
123
+ export function resolvedPluginUrl(d, pageUri = typeof location === 'undefined' ? undefined : location.href) {
124
+ const url = maybePluginUrl(d);
125
+ const base = 'umdLoc' in d
126
+ ? d.umdLoc.baseUri
127
+ : 'esmLoc' in d
128
+ ? d.esmLoc.baseUri
129
+ : pageUri;
130
+ try {
131
+ return url === undefined ? undefined : new URL(url, base).href;
132
+ }
133
+ catch {
134
+ return undefined;
135
+ }
136
+ }
117
137
  export function pluginUrl(d) {
118
138
  return maybePluginUrl(d) ?? 'unknown url';
119
139
  }
@@ -1,4 +1,3 @@
1
- import type { FeatureDensity } from '../data_adapters/BaseAdapter/featureDensity.ts';
2
1
  import type { CoreGetEncodedLayersArgs, EncodedLayersResult } from '../util/markEncodingTypes.ts';
3
2
  import type { StatusCallback } from '../util/progress.ts';
4
3
  import type { UnwrapRpcResult } from '../util/rpc.ts';
@@ -64,15 +63,6 @@ export interface RpcRegistry {
64
63
  };
65
64
  return: number | undefined;
66
65
  };
67
- CoreGetFeatureDensity: {
68
- args: {
69
- adapterConfig: Record<string, unknown>;
70
- regions: RegionLike[];
71
- bpPerPx: number;
72
- headers?: Record<string, string>;
73
- };
74
- return: FeatureDensity[] | undefined;
75
- };
76
66
  CoreGetInfo: {
77
67
  args: {
78
68
  adapterConfig: Record<string, unknown>;
@@ -42,6 +42,14 @@ export declare function isRegionRefused(result: unknown): result is RegionTooLar
42
42
  export declare function isRegionTooLargeError(error: unknown): error is Error;
43
43
  /** Undefined, never 0, when no region could be measured. */
44
44
  export declare function largestRegionBytes(perRegion: (number | undefined)[]): number | undefined;
45
+ /**
46
+ * The regions' index-only byte estimates summed, for a reader that holds
47
+ * every region at once; undefined, never 0, when no region could be measured.
48
+ */
49
+ export declare function totalRegionBytes(dataAdapter: ByteMeasurableAdapter, regions: AugmentedRegion[], opts?: {
50
+ signal?: AbortSignal;
51
+ statusCallback?: StatusCallback;
52
+ }): Promise<number | undefined>;
45
53
  /** A non-positive declared limit means "no opinion" (htsget reports 0). */
46
54
  export declare function adapterByteLimit(declared: unknown, fallback: number): number;
47
55
  export declare function overByteBudget(bytes: number | undefined, byteLimit: number | undefined): bytes is number;
@@ -23,6 +23,19 @@ export function largestRegionBytes(perRegion) {
23
23
  }
24
24
  return largest;
25
25
  }
26
+ /**
27
+ * The regions' index-only byte estimates summed, for a reader that holds
28
+ * every region at once; undefined, never 0, when no region could be measured.
29
+ */
30
+ export async function totalRegionBytes(dataAdapter, regions, opts) {
31
+ let total;
32
+ for (const bytes of await Promise.all(regions.map(region => dataAdapter.getRegionByteSize([region], opts)))) {
33
+ if (bytes !== undefined) {
34
+ total = (total ?? 0) + bytes;
35
+ }
36
+ }
37
+ return total;
38
+ }
26
39
  /** A non-positive declared limit means "no opinion" (htsget reports 0). */
27
40
  export function adapterByteLimit(declared, fallback) {
28
41
  return typeof declared === 'number' && declared > 0 ? declared : fallback;
@@ -1,6 +1,8 @@
1
1
  /**
2
2
  * #config RpcOptions
3
3
  * #category root
4
+ * Chooses whether data fetching runs on the main thread or in web workers, and
5
+ * how many workers to start. Found on the root config as `configuration.rpc`.
4
6
  */
5
7
  declare const _default: import("../configuration/configurationSchema.ts").ConfigurationSchemaType<{
6
8
  readonly defaultDriver: {
@@ -2,11 +2,13 @@ import { ConfigurationSchema } from '../configuration/index.js';
2
2
  /**
3
3
  * #config RpcOptions
4
4
  * #category root
5
+ * Chooses whether data fetching runs on the main thread or in web workers, and
6
+ * how many workers to start. Found on the root config as `configuration.rpc`.
5
7
  */
6
8
  export default ConfigurationSchema('RpcOptions', {
7
9
  /**
8
10
  * #slot
9
- * which RPC backend to use. Empty means "use the host application's
11
+ * The RPC backend. Empty means "use the host application's
10
12
  * default" (web/desktop default to the web worker driver, embedded/headless
11
13
  * to the main thread). Every call in the session runs on the driver this
12
14
  * names; there is no per-track or per-call override.
@@ -8,6 +8,5 @@ export { default as CoreGetSequence } from './methods/CoreGetSequence.ts';
8
8
  export { default as CoreFreeResources } from './methods/CoreFreeResources.ts';
9
9
  export { default as CoreLoadTrackCode } from './methods/CoreLoadTrackCode.ts';
10
10
  export { default as CoreGetRegionByteEstimate } from './methods/CoreGetRegionByteEstimate.ts';
11
- export { default as CoreGetFeatureDensity } from './methods/CoreGetFeatureDensity.ts';
12
11
  export { default as CoreGetRegions } from './methods/CoreGetRegions.ts';
13
12
  export { default as CoreGetExportData } from './methods/CoreGetExportData.ts';
@@ -8,6 +8,5 @@ export { default as CoreGetSequence } from './methods/CoreGetSequence.js';
8
8
  export { default as CoreFreeResources } from './methods/CoreFreeResources.js';
9
9
  export { default as CoreLoadTrackCode } from './methods/CoreLoadTrackCode.js';
10
10
  export { default as CoreGetRegionByteEstimate } from './methods/CoreGetRegionByteEstimate.js';
11
- export { default as CoreGetFeatureDensity } from './methods/CoreGetFeatureDensity.js';
12
11
  export { default as CoreGetRegions } from './methods/CoreGetRegions.js';
13
12
  export { default as CoreGetExportData } from './methods/CoreGetExportData.js';
@@ -6,9 +6,9 @@ import type { RpcExecuteArgs } from '../RpcRegistry.ts';
6
6
  * split them by the facet where the request names one, run each layer's own
7
7
  * steps (per section, under a facet), and evaluate the layer's encoding over
8
8
  * what is left in the worker, where the `Feature` objects are, filling the
9
- * lanes its mark reads. The colours come back packed, the scale tables
9
+ * lanes its mark reads. The colors come back packed, the scale tables
10
10
  * resolved, and the main thread reads the same table for its legend that the
11
- * colours were drawn from.
11
+ * colors were drawn from.
12
12
  */
13
13
  export default class CoreGetEncodedLayers extends RpcMethodTypeWithRenameRegion<'CoreGetEncodedLayers'> {
14
14
  name: 'CoreGetEncodedLayers';
@@ -10,9 +10,9 @@ import { layerFeatures } from './layerFeatures.js';
10
10
  * split them by the facet where the request names one, run each layer's own
11
11
  * steps (per section, under a facet), and evaluate the layer's encoding over
12
12
  * what is left in the worker, where the `Feature` objects are, filling the
13
- * lanes its mark reads. The colours come back packed, the scale tables
13
+ * lanes its mark reads. The colors come back packed, the scale tables
14
14
  * resolved, and the main thread reads the same table for its legend that the
15
- * colours were drawn from.
15
+ * colors were drawn from.
16
16
  */
17
17
  export default class CoreGetEncodedLayers extends RpcMethodTypeWithRenameRegion {
18
18
  name = 'CoreGetEncodedLayers';
@@ -34,10 +34,10 @@ export default class CoreGetEncodedLayers extends RpcMethodTypeWithRenameRegion
34
34
  return tooLarge;
35
35
  }
36
36
  const { jexl } = pluginManager;
37
- const { layers: layered, sections, zoomRange, notices, } = await layerFeatures(dataAdapter, args, jexl);
37
+ const { layers: layered, sections, zoomRange, notices, facts, } = await layerFeatures(dataAdapter, args, jexl);
38
38
  const layers = requested.map((request, i) => {
39
- const { table, row } = layered[i];
40
- return encodeFeatures(table, { ...request.encoding, row }, request.lanes, {
39
+ const { table, row, series, gapBp } = layered[i];
40
+ const encoded = encodeFeatures(table, { ...request.encoding, row, series }, request.lanes, {
41
41
  jexl,
42
42
  report: createProgressReporter({
43
43
  label: 'Processing features',
@@ -46,6 +46,7 @@ export default class CoreGetEncodedLayers extends RpcMethodTypeWithRenameRegion
46
46
  signal,
47
47
  }),
48
48
  });
49
+ return gapBp === undefined ? encoded : { ...encoded, gapBp };
49
50
  });
50
51
  const result = {
51
52
  layers,
@@ -53,6 +54,7 @@ export default class CoreGetEncodedLayers extends RpcMethodTypeWithRenameRegion
53
54
  bytes,
54
55
  zoomRange,
55
56
  ...(notices.length > 0 ? { notices } : {}),
57
+ ...(Object.keys(facts).length > 0 ? { facts } : {}),
56
58
  };
57
59
  return rpcResult(result, layers.flatMap(l => encodedChannelTransferables(l)));
58
60
  }
@@ -11,23 +11,26 @@ import type { StatusCallback } from '../../util/progress.ts';
11
11
  export interface LayerFeatures {
12
12
  table: FeatureTable;
13
13
  row: FieldRef | ArrayLike<number> | undefined;
14
+ /** Each row's series, for a layer whose request names a path. */
15
+ series?: Uint32Array;
16
+ /** The stretch a path breaks across, for a layer whose request names a path. */
17
+ gapBp?: number;
14
18
  }
15
19
  /**
16
20
  * The table each layer of a `CoreGetEncodedLayers` request encodes: the
17
21
  * region's features through the shared steps, split by the facet where the
18
22
  * request names one, then through each layer's own steps, with each faceted
19
- * layer's stacked rows beside it. An instance's `featureIndex` indexes its
20
- * layer's table, so the same request answers which row an instance is.
23
+ * layer's stacked rows beside it, and a path layer's rows in series order.
24
+ * An instance's `featureIndex` indexes its layer's table, so the same request
25
+ * answers which row an instance is.
21
26
  */
22
27
  export declare function layerFeatures(dataAdapter: BaseFeatureDataAdapter, args: Pick<CoreGetEncodedLayersArgs, 'region' | 'layers' | 'transform' | 'facet' | 'bpPerPx' | 'opts'> & {
23
28
  signal?: AbortSignal;
24
29
  statusCallback?: StatusCallback;
25
30
  }, jexl: JexlInstance): Promise<{
26
- layers: {
27
- table: FeatureTable;
28
- row: FieldRef | Uint32Array | undefined;
29
- }[];
31
+ layers: LayerFeatures[];
30
32
  sections: import("../../util/markEncodingTypes.ts").FacetSection[] | undefined;
31
33
  zoomRange: import("../../data_adapters/BaseAdapter/zoomRange.ts").ZoomRange | undefined;
32
34
  notices: string[];
35
+ facts: Record<string, unknown>;
33
36
  }>;
@@ -1,23 +1,33 @@
1
1
  import { checkAbortSignal } from '../../util/aborting.js';
2
2
  import { layerTables } from '../../util/featureTransforms.js';
3
+ import { pathSeries } from '../../util/pathSeries.js';
3
4
  import { updateStatus } from '../../util/progress.js';
4
5
  /**
5
6
  * The table each layer of a `CoreGetEncodedLayers` request encodes: the
6
7
  * region's features through the shared steps, split by the facet where the
7
8
  * request names one, then through each layer's own steps, with each faceted
8
- * layer's stacked rows beside it. An instance's `featureIndex` indexes its
9
- * layer's table, so the same request answers which row an instance is.
9
+ * layer's stacked rows beside it, and a path layer's rows in series order.
10
+ * An instance's `featureIndex` indexes its layer's table, so the same request
11
+ * answers which row an instance is.
10
12
  */
11
13
  export async function layerFeatures(dataAdapter, args, jexl) {
12
14
  const { region, layers: requested, transform = [], facet, bpPerPx, opts, signal, statusCallback, } = args;
13
15
  const notices = [];
14
- const fetchOpts = { ...opts, bpPerPx, statusCallback, signal, notices };
16
+ const facts = {};
17
+ const fetchOpts = {
18
+ ...opts,
19
+ bpPerPx,
20
+ statusCallback,
21
+ signal,
22
+ notices,
23
+ facts,
24
+ };
15
25
  const [fetched, zoomRange] = await updateStatus('Downloading features', statusCallback, () => Promise.all([
16
26
  dataAdapter.getFeatureTable(region, fetchOpts),
17
27
  dataAdapter.getZoomRange(fetchOpts),
18
28
  ]));
19
29
  checkAbortSignal(signal);
20
- const { layers, sections } = layerTables(fetched, {
30
+ const tables = layerTables(fetched, {
21
31
  transform,
22
32
  facet,
23
33
  layers: requested.map(r => ({
@@ -25,5 +35,11 @@ export async function layerFeatures(dataAdapter, args, jexl) {
25
35
  row: r.encoding.row,
26
36
  })),
27
37
  }, jexl);
28
- return { layers, sections, zoomRange, notices };
38
+ const layers = tables.layers.map((layer, i) => {
39
+ const { path, transform: own = [] } = requested[i];
40
+ return path
41
+ ? pathSeries(layer.table, layer.row, path, [...transform, ...(facet?.transform ?? []), ...own], jexl)
42
+ : layer;
43
+ });
44
+ return { layers, sections: tables.sections, zoomRange, notices, facts };
29
45
  }
@@ -1,7 +1,8 @@
1
1
  /** A Link that acts as a button — no real navigation, just calls onClick. */
2
- export default function ActionLink({ onClick, children, className, title, }: {
2
+ declare const ActionLink: ({ onClick, children, className, title, }: {
3
3
  onClick: () => void;
4
4
  children: React.ReactNode;
5
5
  className?: string;
6
6
  title?: string;
7
- }): import("react").JSX.Element;
7
+ }) => import("react").JSX.Element;
8
+ export default ActionLink;
@@ -1,9 +1,11 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Link } from '@mui/material';
3
+ import { observer } from 'mobx-react';
3
4
  /** A Link that acts as a button — no real navigation, just calls onClick. */
4
- export default function ActionLink({ onClick, children, className, title, }) {
5
+ const ActionLink = observer(function ActionLink({ onClick, children, className, title, }) {
5
6
  return (_jsx(Link, { href: "#", className: className, title: title, onClick: (e) => {
6
7
  e.preventDefault();
7
8
  onClick();
8
9
  }, children: children }));
9
- }
10
+ });
11
+ export default ActionLink;
@@ -8,7 +8,8 @@ import type { PluginDefinition } from '../pluginDefinitions.ts';
8
8
  * `onAdd` returns false to reject the definition and keep the dialog open (the
9
9
  * plugin store rejects a name already installed).
10
10
  */
11
- export default function AddCustomPluginDialog({ onClose, onAdd, }: {
11
+ declare const AddCustomPluginDialog: ({ onClose, onAdd, }: {
12
12
  onClose: () => void;
13
13
  onAdd: (definition: PluginDefinition) => boolean;
14
- }): import("react").JSX.Element;
14
+ }) => import("react").JSX.Element;
15
+ export default AddCustomPluginDialog;
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useState } from 'react';
3
3
  import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
4
4
  import { Collapse, DialogContentText, IconButton, TextField, } from '@mui/material';
5
+ import { observer } from 'mobx-react';
5
6
  import { cx, makeStyles } from '../util/tss-react/index.js';
6
7
  import SubmitDialog from './SubmitDialog.js';
7
8
  const useStyles = makeStyles()({
@@ -28,7 +29,7 @@ const useStyles = makeStyles()({
28
29
  * `onAdd` returns false to reject the definition and keep the dialog open (the
29
30
  * plugin store rejects a name already installed).
30
31
  */
31
- export default function AddCustomPluginDialog({ onClose, onAdd, }) {
32
+ const AddCustomPluginDialog = observer(function AddCustomPluginDialog({ onClose, onAdd, }) {
32
33
  const { classes } = useStyles();
33
34
  const [umdPluginName, setUMDPluginName] = useState('');
34
35
  const [umdPluginUrl, setUMDPluginUrl] = useState('');
@@ -44,13 +45,14 @@ export default function AddCustomPluginDialog({ onClose, onAdd, }) {
44
45
  }
45
46
  }, children: _jsxs("div", { className: classes.dialogContent, children: [_jsx(DialogContentText, { children: "Enter the name of the plugin and its URL. The name should match what is defined in the plugin's build." }), _jsx(TextField, { label: "Plugin name", variant: "outlined", fullWidth: true, margin: "dense", value: umdPluginName, onChange: event => {
46
47
  setUMDPluginName(event.target.value);
47
- } }), _jsx(TextField, { label: "Plugin URL", variant: "outlined", fullWidth: true, margin: "dense", value: umdPluginUrl, onChange: event => {
48
+ } }), _jsx(TextField, { label: "Plugin URL", "data-testid": "custom-plugin-url", variant: "outlined", fullWidth: true, margin: "dense", value: umdPluginUrl, onChange: event => {
48
49
  setUMDPluginUrl(event.target.value);
49
50
  } }), _jsxs(DialogContentText, { onClick: () => {
50
51
  setAdvancedOptionsOpen(!advancedOptionsOpen);
51
52
  }, children: [_jsx(IconButton, { className: cx(classes.expand, {
52
53
  [classes.expandOpen]: advancedOptionsOpen,
53
- }), "aria-expanded": advancedOptionsOpen, "aria-label": "show more", children: _jsx(ExpandMoreIcon, {}) }), "Advanced options"] }), _jsx(Collapse, { in: advancedOptionsOpen, children: _jsxs("div", { className: classes.dialogContent, children: [_jsx(DialogContentText, { children: "The above fields assume that the plugin is built in UMD format. For an ESM build, enter its URL here instead; it carries its own name, so the fields above stay empty." }), _jsx(TextField, { label: "ESM build URL", variant: "outlined", fullWidth: true, margin: "dense", value: esmPluginUrl, onChange: event => {
54
+ }), "aria-expanded": advancedOptionsOpen, "aria-label": "show more", children: _jsx(ExpandMoreIcon, {}) }), "Advanced options"] }), _jsx(Collapse, { in: advancedOptionsOpen, children: _jsxs("div", { className: classes.dialogContent, children: [_jsx(DialogContentText, { children: "The above fields assume that the plugin is built in UMD format. For an ESM build, enter its URL here instead; it carries its own name, so the fields above stay empty." }), _jsx(TextField, { label: "ESM build URL", "data-testid": "custom-plugin-esm-url", variant: "outlined", fullWidth: true, margin: "dense", value: esmPluginUrl, onChange: event => {
54
55
  setESMPluginUrl(event.target.value);
55
56
  } })] }) })] }) }));
56
- }
57
+ });
58
+ export default AddCustomPluginDialog;
@@ -1,5 +1,5 @@
1
1
  export type TooltipPlacement = 'top' | 'top-start' | 'top-end' | 'right' | 'right-start' | 'right-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end';
2
- export default function BaseTooltip({ clientPoint: clientPointCoords, anchor, id, children, placement, }: {
2
+ declare const BaseTooltip: ({ clientPoint: clientPointCoords, anchor, id, children, placement, }: {
3
3
  placement?: TooltipPlacement;
4
4
  /** Follow the pointer. The cursor-anchored mode, and the older of the two. */
5
5
  clientPoint?: {
@@ -16,4 +16,5 @@ export default function BaseTooltip({ clientPoint: clientPointCoords, anchor, id
16
16
  /** For a trigger pointing at this with `aria-describedby`. */
17
17
  id?: string;
18
18
  children: React.ReactNode;
19
- }): import("react").ReactPortal | null;
19
+ }) => import("react").ReactPortal | null;
20
+ export default BaseTooltip;
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useEffect, useState } from 'react';
3
3
  import { autoUpdate, flip, offset, shift, useClientPoint, useFloating, useInteractions, } from '@floating-ui/react';
4
+ import { observer } from 'mobx-react';
4
5
  import { createPortal } from 'react-dom';
5
6
  import { useStyleTheme } from './PaletteContext.js';
6
7
  import { alpha, grey } from './palette.js';
@@ -76,7 +77,7 @@ if (typeof window !== 'undefined') {
76
77
  // from a point the pointer happens to be at. 15px off a button reads as a
77
78
  // tooltip belonging to nothing in particular.
78
79
  const ANCHOR_GAP_PX = 6;
79
- export default function BaseTooltip({ clientPoint: clientPointCoords, anchor, id, children, placement = anchor ? 'top' : 'right', }) {
80
+ const BaseTooltip = observer(function BaseTooltip({ clientPoint: clientPointCoords, anchor, id, children, placement = anchor ? 'top' : 'right', }) {
80
81
  // The style theme is read for two things and neither is a Material import:
81
82
  // the colors below, and the portal container a shadow-DOM embed configures
82
83
  // through `MuiPopper.defaultProps.container` — the same slot every other
@@ -156,4 +157,5 @@ export default function BaseTooltip({ clientPoint: clientPointCoords, anchor, id
156
157
  ? 'hidden'
157
158
  : undefined,
158
159
  }, ...getFloatingProps(), children: children }), target);
159
- }
160
+ });
161
+ export default BaseTooltip;
@@ -1,5 +1,5 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { createContext, memo, use, useEffect, useMemo, useState } from 'react';
2
+ import { createContext, use, useEffect, useMemo, useState } from 'react';
3
3
  import { Divider, ListItemIcon, ListItemText, ListSubheader, Menu, MenuItem, Tooltip, } from '@mui/material';
4
4
  import { observer } from 'mobx-react';
5
5
  import { makeStyles } from '../util/tss-react/index.js';
@@ -8,6 +8,7 @@ import { MenuItemTrailing } from './MenuItemTrailing.js';
8
8
  import { resolveSubMenu, staysOpenOnClick } from './MenuTypes.js';
9
9
  import { hasMenuItemAdornment } from './menuItemAdornment.js';
10
10
  import { isAimedAtPanel } from './submenuAim.js';
11
+ import { usePlacedMenuFocus } from './usePlacedMenuFocus.js';
11
12
  // Compact section headers so tall menus (e.g. a display's flat "Show..."
12
13
  // settings list with several subHeader-separated radio groups) stay short.
13
14
  // Row heights are left at the MUI default.
@@ -266,9 +267,9 @@ function makeTestId(kind, label) {
266
267
  }
267
268
  // Leading icon slot shared by submenu rows and clickable rows; renders nothing
268
269
  // when the item has no icon (the row insets instead to stay column-aligned).
269
- function MenuItemLeadingIcon({ Icon, }) {
270
+ const MenuItemLeadingIcon = observer(function MenuItemLeadingIcon({ Icon, }) {
270
271
  return Icon ? (_jsx(ListItemIcon, { children: _jsx(Icon, {}) })) : null;
271
- }
272
+ });
272
273
  // Which decoration columns the menu needs, computed menu-wide (true if ANY row
273
274
  // needs it) so every row reserves matching slots and the decorations stack into
274
275
  // aligned columns down the menu. Per list, so a submenu's own rows answer it for
@@ -322,7 +323,7 @@ function getMenuColumnFlags(menuItems) {
322
323
  // Escape is the exception, and has to be: MUI's Modal reads it off the same
323
324
  // React tree, so a row that swallowed every key left the menu with no way out
324
325
  // for anyone whose focus was inside the slider.
325
- function CustomMenuRow({ item, onHover, }) {
326
+ const CustomMenuRow = observer(function CustomMenuRow({ item, onHover, }) {
326
327
  const { onCloseRoot } = useCascadingMenu();
327
328
  return (_jsx("li", { style: { padding: '4px 16px' }, onMouseEnter: onHover, onMouseDown: e => {
328
329
  e.stopPropagation();
@@ -331,15 +332,15 @@ function CustomMenuRow({ item, onHover, }) {
331
332
  e.stopPropagation();
332
333
  }
333
334
  }, children: item.render(onCloseRoot) }));
334
- }
335
+ });
335
336
  // A disabled MenuItem has pointer-events:none, so a Tooltip placed directly on
336
337
  // it never fires; the span wrapper (per MUI guidance) restores hover. Disabled
337
338
  // rows aren't keyboard-focusable, so the extra wrapper doesn't affect menu
338
339
  // navigation. Renders children untouched unless the item is disabled and has
339
340
  // disabledHelpText.
340
- function DisabledTooltip({ item, children, }) {
341
+ const DisabledTooltip = observer(function DisabledTooltip({ item, children, }) {
341
342
  return item.disabled && item.disabledHelpText ? (_jsx(Tooltip, { title: item.disabledHelpText, placement: "left", children: _jsx("span", { children: children }) })) : (children);
342
- }
343
+ });
343
344
  // One submenu row: label (with optional leading icon), the same trailing
344
345
  // decorations a clickable row draws, and the panel it opens.
345
346
  //
@@ -349,7 +350,7 @@ function DisabledTooltip({ item, children, }) {
349
350
  // toggle), whose content stops its own click so using it doesn't also open the
350
351
  // submenu. Both go through `MenuItemTrailing`, so they land in the columns the
351
352
  // clickable rows reserve rather than in a hand-assembled copy of them.
352
- const CascadingSubmenu = memo(function CascadingSubmenu({ item, itemKey, inset, columns, open, hover, onNavigateBack, }) {
353
+ const CascadingSubmenu = observer(function CascadingSubmenu({ item, itemKey, inset, columns, open, hover, onNavigateBack, }) {
353
354
  const { zIndex } = useCascadingMenu();
354
355
  const [anchorEl, setAnchorEl] = useState(null);
355
356
  // a rebuild can disable the row while its panel is up, and a disabled row has
@@ -392,7 +393,7 @@ const SubMenuList = observer(function SubMenuList({ item, onNavigateBack, }) {
392
393
  // One clickable menu row: label (with optional leading icon) plus its trailing
393
394
  // value/help/adornment decorations. The menu-wide `columns` flags let every row
394
395
  // reserve matching decoration slots so the columns line up down the menu.
395
- const CascadingMenuItem = memo(function CascadingMenuItem({ item, inset, columns, onNavigateBack, onHover, }) {
396
+ const CascadingMenuItem = observer(function CascadingMenuItem({ item, inset, columns, onNavigateBack, onHover, }) {
396
397
  const { closeAfterItemClick, onMenuItemClick, onCloseRoot } = useCascadingMenu();
397
398
  return (_jsx(DisabledTooltip, { item: item, children: _jsxs(MenuItem, { "data-testid": makeTestId('menuitem', item.label), disabled: item.disabled,
398
399
  // A checkbox or radio row states its own value. The glyph
@@ -422,7 +423,7 @@ const CascadingMenuItem = memo(function CascadingMenuItem({ item, inset, columns
422
423
  }
423
424
  }, children: [_jsx(MenuItemLeadingIcon, { Icon: item.icon }), _jsx(ListItemText, { primary: item.label, secondary: item.subLabel, inset: inset }), _jsx(MenuItemTrailing, { item: item, columns: columns })] }) }));
424
425
  });
425
- function CascadingMenuList({ menuItems, onNavigateBack, }) {
426
+ const CascadingMenuList = observer(function CascadingMenuList({ menuItems, onNavigateBack, }) {
426
427
  const { classes, cx } = useStyles();
427
428
  const { openSubmenu, hover } = useSubmenuHover();
428
429
  const { closeOnHover } = hover;
@@ -447,10 +448,11 @@ function CascadingMenuList({ menuItems, onNavigateBack, }) {
447
448
  }
448
449
  return (_jsx(CascadingMenuItem, { item: item, inset: hasIcon && !item.icon, columns: columns, onNavigateBack: onNavigateBack, onHover: closeOnHover }, key));
449
450
  }) }));
450
- }
451
+ });
451
452
  const CascadingMenu = observer(function CascadingMenu({ onMenuItemClick, closeAfterItemClick = true, menuItems, open, onClose, anchorEl, anchorOrigin, transformOrigin, anchorReference, anchorPosition, style, }) {
452
453
  const items = Array.isArray(menuItems) ? menuItems : menuItems();
453
- return (_jsx(Menu, { anchorEl: anchorEl, open: open, onClose: onClose, anchorOrigin: anchorOrigin, transformOrigin: transformOrigin, anchorReference: anchorReference, anchorPosition: anchorPosition, style: style, children: _jsx(CascadingMenuContext, { value: {
454
+ const { onEntering, ...focus } = usePlacedMenuFocus();
455
+ return (_jsx(Menu, { ...focus, anchorEl: anchorEl, open: open, onClose: onClose, anchorOrigin: anchorOrigin, transformOrigin: transformOrigin, anchorReference: anchorReference, anchorPosition: anchorPosition, style: style, slotProps: { transition: { onEntering } }, children: _jsx(CascadingMenuContext, { value: {
454
456
  closeAfterItemClick,
455
457
  onMenuItemClick,
456
458
  onCloseRoot: onClose,
@@ -1,7 +1,7 @@
1
1
  import type { MenuItemsGetter } from './CascadingMenu.tsx';
2
2
  import type { MenuItemClickHandler } from './MenuTypes.ts';
3
3
  import type { PopoverOrigin } from '@mui/material';
4
- declare function CascadingMenuButton({ children, menuItems, closeAfterItemClick, stopPropagation, disabled, setOpen, ButtonComponent, onClick: onClickExtra, onMenuItemClick, anchorOrigin, transformOrigin, tooltip, ...rest }: {
4
+ declare const CascadingMenuButton: ({ children, menuItems, closeAfterItemClick, stopPropagation, disabled, setOpen, ButtonComponent, onClick: onClickExtra, onMenuItemClick, anchorOrigin, transformOrigin, tooltip, ...rest }: {
5
5
  children?: React.ReactNode;
6
6
  menuItems: MenuItemsGetter;
7
7
  closeAfterItemClick?: boolean;
@@ -20,5 +20,5 @@ declare function CascadingMenuButton({ children, menuItems, closeAfterItemClick,
20
20
  transformOrigin?: PopoverOrigin;
21
21
  tooltip?: string;
22
22
  [key: string]: unknown;
23
- }): import("react").JSX.Element;
23
+ }) => import("react").JSX.Element;
24
24
  export default CascadingMenuButton;
@@ -2,6 +2,7 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
2
2
  import { useState } from 'react';
3
3
  import IconButton from '@mui/material/IconButton';
4
4
  import Tooltip from '@mui/material/Tooltip';
5
+ import { observer } from 'mobx-react';
5
6
  import CascadingMenu from './CascadingMenu.js';
6
7
  // drop the menu below the trigger icon rather than overlapping it (MUI's
7
8
  // default top/left anchor)
@@ -10,10 +11,10 @@ const dropdownTransformOrigin = { vertical: 'top', horizontal: 'left' };
10
11
  // A disabled button has pointer-events:none, so a Tooltip placed directly on it
11
12
  // never fires; wrap it in a span (per MUI guidance) to restore the hover. The
12
13
  // wrapper is only added when disabled, so enabled buttons keep their layout.
13
- function MaybeTooltip({ title, disabled, children, }) {
14
+ const MaybeTooltip = observer(function MaybeTooltip({ title, disabled, children, }) {
14
15
  return title ? (_jsx(Tooltip, { title: title, children: disabled ? _jsx("span", { children: children }) : children })) : (children);
15
- }
16
- function CascadingMenuButton({ children, menuItems, closeAfterItemClick = true, stopPropagation, disabled, setOpen, ButtonComponent = IconButton, onClick: onClickExtra, onMenuItemClick = callback => {
16
+ });
17
+ const CascadingMenuButton = observer(function CascadingMenuButton({ children, menuItems, closeAfterItemClick = true, stopPropagation, disabled, setOpen, ButtonComponent = IconButton, onClick: onClickExtra, onMenuItemClick = callback => {
17
18
  callback();
18
19
  }, anchorOrigin = dropdownAnchorOrigin, transformOrigin = dropdownTransformOrigin, tooltip, ...rest }) {
19
20
  const [anchorEl, setAnchorEl] = useState(null);
@@ -38,5 +39,5 @@ function CascadingMenuButton({ children, menuItems, closeAfterItemClick = true,
38
39
  setAnchorEl(null);
39
40
  setOpen?.(false);
40
41
  }, anchorEl: anchorEl, anchorOrigin: anchorOrigin, transformOrigin: transformOrigin, menuItems: menuItems, closeAfterItemClick: closeAfterItemClick, onMenuItemClick: onMenuItemClick })) : null] }));
41
- }
42
+ });
42
43
  export default CascadingMenuButton;
@@ -1,5 +1,6 @@
1
- export default function CascadingMenuHelpDialog({ onClose, helpText, label, }: {
1
+ declare const CascadingMenuHelpDialog: ({ onClose, helpText, label, }: {
2
2
  onClose: () => void;
3
3
  helpText: React.ReactNode;
4
4
  label?: React.ReactNode;
5
- }): import("react").JSX.Element;
5
+ }) => import("react").JSX.Element;
6
+ export default CascadingMenuHelpDialog;
@@ -1,9 +1,11 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { observer } from 'mobx-react';
2
3
  import InfoDialog from './InfoDialog.js';
3
- export default function CascadingMenuHelpDialog({ onClose, helpText, label, }) {
4
+ const CascadingMenuHelpDialog = observer(function CascadingMenuHelpDialog({ onClose, helpText, label, }) {
4
5
  return (_jsx(InfoDialog, { open: true, onClose: onClose, title: "Help", titleNode: label ? _jsxs(_Fragment, { children: ["Help: ", label] }) : undefined, onClick: e => {
5
6
  e.stopPropagation();
6
7
  }, onMouseDown: e => {
7
8
  e.stopPropagation();
8
9
  }, children: helpText }));
9
- }
10
+ });
11
+ export default CascadingMenuHelpDialog;