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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. package/README.md +1709 -390
  2. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +3 -2
  3. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +5 -5
  4. package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +3 -5
  5. package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +34 -29
  6. package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCard.js +1 -4
  7. package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.d.ts +11 -0
  8. package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.js +37 -14
  9. package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.d.ts +1 -1
  10. package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.js +15 -31
  11. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.d.ts +4 -3
  12. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.js +12 -25
  13. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.d.ts +11 -0
  14. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.js +11 -0
  15. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.d.ts +8 -0
  16. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.js +24 -0
  17. package/esm/BaseFeatureWidget/BaseFeatureDetail/Formatter.js +6 -4
  18. package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.d.ts +4 -0
  19. package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.js +17 -0
  20. package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.d.ts +3 -2
  21. package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +5 -3
  22. package/esm/BaseFeatureWidget/BaseFeatureDetail/index.d.ts +6 -2
  23. package/esm/BaseFeatureWidget/BaseFeatureDetail/index.js +7 -18
  24. package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.d.ts +16 -0
  25. package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.js +49 -0
  26. package/esm/BaseFeatureWidget/BaseFeatureDetail/util.d.ts +0 -8
  27. package/esm/BaseFeatureWidget/BaseFeatureDetail/util.js +6 -29
  28. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceContents.js +7 -34
  29. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeaturePanel.d.ts +2 -2
  30. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceName.js +2 -2
  31. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.js +3 -1
  32. package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.d.ts +12 -0
  33. package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.js +12 -5
  34. package/esm/BaseFeatureWidget/SequenceFeatureDetails/useSequenceData.js +8 -5
  35. package/esm/BaseFeatureWidget/configSchema.d.ts +1 -1
  36. package/esm/BaseFeatureWidget/formatDetails.d.ts +13 -29
  37. package/esm/BaseFeatureWidget/formatDetails.js +62 -83
  38. package/esm/BaseFeatureWidget/index.d.ts +2 -1
  39. package/esm/BaseFeatureWidget/stateModelFactory.d.ts +42 -29
  40. package/esm/BaseFeatureWidget/stateModelFactory.js +98 -98
  41. package/esm/BaseFeatureWidget/types.d.ts +12 -6
  42. package/esm/BaseFeatureWidget/util.d.ts +0 -10
  43. package/esm/BaseFeatureWidget/util.js +0 -17
  44. package/esm/CorePlugin.js +34 -3
  45. package/esm/PluginLoader.d.ts +24 -13
  46. package/esm/PluginLoader.js +167 -51
  47. package/esm/PluginManager.d.ts +130 -24
  48. package/esm/PluginManager.js +180 -32
  49. package/esm/ReExports/MuiDataGridReExports.d.ts +1 -0
  50. package/esm/ReExports/MuiDataGridReExports.js +2 -2
  51. package/esm/ReExports/coreModules.generated.d.ts +2 -0
  52. package/esm/ReExports/coreModules.generated.js +530 -0
  53. package/esm/ReExports/coreWorkerModules.generated.d.ts +2 -0
  54. package/esm/ReExports/coreWorkerModules.generated.js +490 -0
  55. package/esm/ReExports/frameworkModules.d.ts +2 -0
  56. package/esm/ReExports/frameworkModules.js +68 -0
  57. package/esm/ReExports/frameworkShared.d.ts +12 -0
  58. package/esm/ReExports/frameworkShared.js +16 -0
  59. package/esm/ReExports/frameworkWorkerModules.generated.d.ts +2 -0
  60. package/esm/ReExports/frameworkWorkerModules.generated.js +130 -0
  61. package/esm/ReExports/list.js +528 -79
  62. package/esm/ReExports/modules.d.ts +1 -1
  63. package/esm/ReExports/modules.js +10 -165
  64. package/esm/ReExports/registry.d.ts +1 -0
  65. package/esm/ReExports/registry.js +23 -5
  66. package/esm/ReExports/uiStub.d.ts +3 -0
  67. package/esm/ReExports/uiStub.js +33 -0
  68. package/esm/ReExports/workerModules.d.ts +2 -0
  69. package/esm/ReExports/workerModules.js +11 -0
  70. package/esm/TextSearch/TextSearchManager.d.ts +27 -13
  71. package/esm/TextSearch/TextSearchManager.js +77 -36
  72. package/esm/TextSearch/places.d.ts +12 -0
  73. package/esm/TextSearch/places.js +94 -0
  74. package/esm/assemblyManager/assembly.d.ts +21 -19
  75. package/esm/assemblyManager/assembly.js +28 -26
  76. package/esm/assemblyManager/assemblyAdapters.d.ts +1 -1
  77. package/esm/assemblyManager/assemblyAdapters.js +8 -2
  78. package/esm/assemblyManager/assemblyConfigSchema.d.ts +31 -90
  79. package/esm/assemblyManager/assemblyConfigSchema.js +35 -47
  80. package/esm/assemblyManager/assemblyManager.d.ts +35 -180
  81. package/esm/assemblyManager/assemblyManager.js +47 -51
  82. package/esm/assemblyManager/expandAssemblyConfigShorthand.d.ts +25 -18
  83. package/esm/assemblyManager/expandAssemblyConfigShorthand.js +78 -49
  84. package/esm/assemblyManager/geneticCodes.js +2 -5
  85. package/esm/assemblyManager/getSequenceAdapterConfig.d.ts +10 -0
  86. package/esm/assemblyManager/getSequenceAdapterConfig.js +10 -0
  87. package/esm/assemblyManager/indexAssemblyNames.d.ts +9 -0
  88. package/esm/assemblyManager/indexAssemblyNames.js +22 -0
  89. package/esm/assemblyManager/loadRefNameMap.d.ts +1 -1
  90. package/esm/assemblyManager/loadRefNameMap.js +4 -9
  91. package/esm/assemblyManager/refNameMapKey.d.ts +7 -0
  92. package/esm/assemblyManager/refNameMapKey.js +12 -0
  93. package/esm/checkPlugins.d.ts +2 -0
  94. package/esm/checkPlugins.js +38 -17
  95. package/esm/configuration/bamIndexFields.d.ts +49 -0
  96. package/esm/configuration/bamIndexFields.js +41 -0
  97. package/esm/configuration/configurationSchema.d.ts +101 -71
  98. package/esm/configuration/configurationSchema.js +207 -134
  99. package/esm/configuration/configurationSchemaUnion.d.ts +39 -0
  100. package/esm/configuration/configurationSchemaUnion.js +56 -0
  101. package/esm/configuration/configurationSlot.d.ts +150 -60
  102. package/esm/configuration/configurationSlot.js +103 -75
  103. package/esm/configuration/fillLocations.d.ts +14 -0
  104. package/esm/configuration/fillLocations.js +14 -0
  105. package/esm/configuration/formatAboutConfigSchema.d.ts +7 -21
  106. package/esm/configuration/formatDetailsConfigSchema.d.ts +11 -37
  107. package/esm/configuration/formatDetailsConfigSchema.js +10 -13
  108. package/esm/configuration/fullConfSnapshot.d.ts +4 -19
  109. package/esm/configuration/fullConfSnapshot.js +30 -52
  110. package/esm/configuration/getConf.d.ts +45 -41
  111. package/esm/configuration/getConf.js +111 -44
  112. package/esm/configuration/index.d.ts +26 -11
  113. package/esm/configuration/index.js +16 -7
  114. package/esm/configuration/indexType.d.ts +26 -0
  115. package/esm/configuration/indexType.js +38 -0
  116. package/esm/configuration/mergeFormatCallbacks.d.ts +6 -7
  117. package/esm/configuration/mergeFormatCallbacks.js +13 -10
  118. package/esm/configuration/plot.d.ts +61 -0
  119. package/esm/configuration/plot.js +142 -0
  120. package/esm/configuration/readConfObject.d.ts +2 -24
  121. package/esm/configuration/readConfObject.js +20 -63
  122. package/esm/configuration/requirements.d.ts +37 -0
  123. package/esm/configuration/requirements.js +88 -0
  124. package/esm/configuration/schemaRegistry.d.ts +32 -15
  125. package/esm/configuration/schemaRegistry.js +33 -35
  126. package/esm/configuration/schemaTypes.d.ts +21 -5
  127. package/esm/configuration/schemaTypes.js +66 -55
  128. package/esm/configuration/slotFacade.d.ts +12 -29
  129. package/esm/configuration/slotFacade.js +44 -23
  130. package/esm/configuration/snapshotPreprocess.d.ts +43 -0
  131. package/esm/configuration/snapshotPreprocess.js +161 -0
  132. package/esm/configuration/tabixIndexFields.d.ts +30 -4
  133. package/esm/configuration/tabixIndexFields.js +21 -4
  134. package/esm/configuration/tabixShorthand.d.ts +34 -17
  135. package/esm/configuration/tabixShorthand.js +49 -22
  136. package/esm/configuration/types.d.ts +182 -43
  137. package/esm/configuration/uriShorthand.d.ts +9 -0
  138. package/esm/configuration/uriShorthand.js +16 -0
  139. package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +13 -19
  140. package/esm/data_adapters/BaseAdapter/BaseAdapter.js +12 -19
  141. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +40 -2
  142. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +68 -5
  143. package/esm/data_adapters/BaseAdapter/featureDensity.d.ts +40 -0
  144. package/esm/data_adapters/BaseAdapter/featureDensity.js +31 -0
  145. package/esm/data_adapters/BaseAdapter/index.d.ts +23 -3
  146. package/esm/data_adapters/BaseAdapter/index.js +1 -0
  147. package/esm/data_adapters/BaseAdapter/rowSources.d.ts +37 -0
  148. package/esm/data_adapters/BaseAdapter/rowSources.js +7 -0
  149. package/esm/data_adapters/BaseAdapter/stats.d.ts +33 -1
  150. package/esm/data_adapters/BaseAdapter/stats.js +52 -13
  151. package/esm/data_adapters/BaseAdapter/types.d.ts +8 -12
  152. package/esm/data_adapters/BaseAdapter/zoomRange.d.ts +10 -0
  153. package/esm/data_adapters/CytobandAdapter/CytobandAdapter.js +1 -1
  154. package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +7 -11
  155. package/esm/data_adapters/CytobandAdapter/configSchema.js +3 -17
  156. package/esm/data_adapters/dataAdapterCache.d.ts +19 -2
  157. package/esm/data_adapters/dataAdapterCache.js +44 -10
  158. package/esm/data_adapters/getFeatureAdapter.d.ts +6 -4
  159. package/esm/data_adapters/getFeatureAdapter.js +8 -8
  160. package/esm/data_adapters/getSequenceSubAdapter.d.ts +7 -9
  161. package/esm/data_adapters/getSequenceSubAdapter.js +8 -10
  162. package/esm/pluggableElementTypes/AdapterType.d.ts +8 -8
  163. package/esm/pluggableElementTypes/AdapterType.js +1 -1
  164. package/esm/pluggableElementTypes/DisplayType.d.ts +53 -16
  165. package/esm/pluggableElementTypes/DisplayType.js +28 -12
  166. package/esm/pluggableElementTypes/LazyStateModelElement.d.ts +32 -0
  167. package/esm/pluggableElementTypes/LazyStateModelElement.js +77 -0
  168. package/esm/pluggableElementTypes/PluggableElementBase.d.ts +3 -5
  169. package/esm/pluggableElementTypes/PluggableElementBase.js +3 -5
  170. package/esm/pluggableElementTypes/RpcMethodType.d.ts +11 -1
  171. package/esm/pluggableElementTypes/RpcMethodType.js +25 -9
  172. package/esm/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.d.ts +1 -2
  173. package/esm/pluggableElementTypes/TextSearchAdapterType.d.ts +7 -7
  174. package/esm/pluggableElementTypes/ViewType.d.ts +20 -4
  175. package/esm/pluggableElementTypes/ViewType.js +32 -4
  176. package/esm/pluggableElementTypes/WidgetType.d.ts +6 -0
  177. package/esm/pluggableElementTypes/WidgetType.js +6 -0
  178. package/esm/pluggableElementTypes/addMenuItems.d.ts +3 -2
  179. package/esm/pluggableElementTypes/extendElementType.d.ts +1 -2
  180. package/esm/pluggableElementTypes/extendElementType.js +9 -5
  181. package/esm/pluggableElementTypes/index.d.ts +2 -1
  182. package/esm/pluggableElementTypes/index.js +2 -9
  183. package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +19 -9
  184. package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +122 -28
  185. package/esm/pluggableElementTypes/models/BaseDisplayModel.js +155 -11
  186. package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +65 -16
  187. package/esm/pluggableElementTypes/models/BaseTrackModel.js +179 -117
  188. package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +87 -18
  189. package/esm/pluggableElementTypes/models/BaseViewModel.js +54 -11
  190. package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +26 -16
  191. package/esm/pluggableElementTypes/models/assertDisplayContract.d.ts +15 -11
  192. package/esm/pluggableElementTypes/models/assertDisplayContract.js +25 -32
  193. package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +22 -18
  194. package/esm/pluggableElementTypes/models/baseConnectionConfig.js +5 -5
  195. package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +26 -31
  196. package/esm/pluggableElementTypes/models/baseTrackConfig.d.ts +108 -147
  197. package/esm/pluggableElementTypes/models/baseTrackConfig.js +96 -73
  198. package/esm/pluggableElementTypes/models/components/SaveTrackData.js +4 -6
  199. package/esm/pluggableElementTypes/models/components/fetchTrackData.d.ts +3 -4
  200. package/esm/pluggableElementTypes/models/components/fetchTrackData.js +3 -3
  201. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +23 -13
  202. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +80 -48
  203. package/esm/pluggableElementTypes/models/index.d.ts +2 -3
  204. package/esm/pluggableElementTypes/models/index.js +2 -3
  205. package/esm/pluggableElementTypes/models/migrateTrackConfig.d.ts +15 -1
  206. package/esm/pluggableElementTypes/models/migrateTrackConfig.js +85 -25
  207. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.d.ts +4 -3
  208. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.js +141 -19
  209. package/esm/pluggableElementTypes/models/saveTrackFileTypes/types.d.ts +3 -3
  210. package/esm/pluginDefinitions.d.ts +34 -7
  211. package/esm/pluginDefinitions.js +54 -20
  212. package/esm/rpc/BaseRpcDriver.d.ts +2 -2
  213. package/esm/rpc/BaseRpcDriver.js +25 -30
  214. package/esm/rpc/MainThreadRpcDriver.d.ts +2 -2
  215. package/esm/rpc/MainThreadRpcDriver.js +13 -8
  216. package/esm/rpc/RpcClient.d.ts +18 -6
  217. package/esm/rpc/RpcClient.js +51 -16
  218. package/esm/rpc/RpcManager.d.ts +14 -10
  219. package/esm/rpc/RpcManager.js +11 -1
  220. package/esm/rpc/RpcRegistry.d.ts +40 -7
  221. package/esm/rpc/RpcServer.d.ts +3 -1
  222. package/esm/rpc/RpcServer.js +19 -12
  223. package/esm/rpc/WebWorkerRpcDriver.d.ts +11 -4
  224. package/esm/rpc/WebWorkerRpcDriver.js +64 -68
  225. package/esm/rpc/byteBudget.d.ts +20 -5
  226. package/esm/rpc/byteBudget.js +16 -5
  227. package/esm/rpc/configSchema.d.ts +7 -21
  228. package/esm/rpc/coreRpcMethods.d.ts +4 -0
  229. package/esm/rpc/coreRpcMethods.js +4 -0
  230. package/esm/rpc/methods/CoreGetEncodedFeature.d.ts +13 -0
  231. package/esm/rpc/methods/CoreGetEncodedFeature.js +32 -0
  232. package/esm/rpc/methods/CoreGetEncodedLayers.d.ts +16 -0
  233. package/esm/rpc/methods/CoreGetEncodedLayers.js +59 -0
  234. package/esm/rpc/methods/CoreGetExportData.js +3 -4
  235. package/esm/rpc/methods/CoreGetFeatureDensity.d.ts +11 -0
  236. package/esm/rpc/methods/CoreGetFeatureDensity.js +22 -0
  237. package/esm/rpc/methods/CoreGetFeatures.js +3 -5
  238. package/esm/rpc/methods/CoreGetRefNames.js +2 -12
  239. package/esm/rpc/methods/CoreGetRegionByteEstimate.js +1 -1
  240. package/esm/rpc/methods/CoreGetSequence.js +2 -2
  241. package/esm/rpc/methods/CoreLoadAdapterCode.d.ts +13 -0
  242. package/esm/rpc/methods/CoreLoadAdapterCode.js +16 -0
  243. package/esm/rpc/methods/layerFeatures.d.ts +33 -0
  244. package/esm/rpc/methods/layerFeatures.js +29 -0
  245. package/esm/svg/SvgExport.js +6 -7
  246. package/esm/svg/SvgThemeProviders.d.ts +12 -0
  247. package/esm/svg/SvgThemeProviders.js +15 -0
  248. package/esm/svg/exportViewSvg.d.ts +28 -0
  249. package/esm/svg/exportViewSvg.js +13 -0
  250. package/esm/svg/normalizeSvgMarkup.d.ts +7 -0
  251. package/esm/svg/normalizeSvgMarkup.js +99 -0
  252. package/esm/svg/serializeSvg.d.ts +7 -0
  253. package/esm/svg/serializeSvg.js +11 -0
  254. package/esm/svg/svgId.d.ts +1 -1
  255. package/esm/svg/svgId.js +1 -1
  256. package/esm/svg/svgReady.d.ts +9 -7
  257. package/esm/svg/svgReady.js +8 -7
  258. package/esm/svg/trackNames.d.ts +7 -5
  259. package/esm/svg/trackNames.js +12 -9
  260. package/esm/svg/wrapSvgExport.js +6 -74
  261. package/esm/ui/AddCustomPluginDialog.js +3 -8
  262. package/esm/ui/AppReadyMarker.d.ts +45 -0
  263. package/esm/ui/AppReadyMarker.js +89 -0
  264. package/esm/ui/BaseExportSvgDialog.d.ts +1 -1
  265. package/esm/ui/CascadingMenu.js +181 -104
  266. package/esm/ui/DropDownMenu.js +2 -1
  267. package/esm/ui/ErrorBanner.js +1 -1
  268. package/esm/ui/ErrorBoundary.d.ts +2 -2
  269. package/esm/ui/ErrorMessageStackTraceContents.js +2 -1
  270. package/esm/ui/ErrorMessageStackTraceDialog.js +5 -11
  271. package/esm/ui/ExportSvgDialog.d.ts +1 -1
  272. package/esm/ui/FileDropZone.js +2 -1
  273. package/esm/ui/FileSelector/useInternetAccounts.d.ts +156 -96
  274. package/esm/ui/HoverMenu.d.ts +1 -2
  275. package/esm/ui/HoverMenu.js +6 -3
  276. package/esm/ui/JexlFilterDialog.d.ts +13 -10
  277. package/esm/ui/JexlFilterDialog.js +122 -50
  278. package/esm/ui/JexlFilterRowEditors.d.ts +15 -0
  279. package/esm/ui/JexlFilterRowEditors.js +90 -0
  280. package/esm/ui/LazyBaseTooltip.d.ts +4 -0
  281. package/esm/ui/LazyBaseTooltip.js +9 -0
  282. package/esm/ui/LegendSwatchGlyph.js +26 -21
  283. package/esm/ui/LoadingOverlay.d.ts +14 -0
  284. package/esm/ui/LoadingOverlay.js +4 -2
  285. package/esm/ui/MenuTypes.d.ts +23 -53
  286. package/esm/ui/MenuTypes.js +3 -0
  287. package/esm/ui/MonospaceTextField.d.ts +2 -1
  288. package/esm/ui/MonospaceTextField.js +23 -20
  289. package/esm/ui/PaletteContext.d.ts +10 -5
  290. package/esm/ui/PaletteContext.js +44 -6
  291. package/esm/ui/RefNameAutocomplete/SearchOption.d.ts +13 -0
  292. package/esm/ui/RefNameAutocomplete/SearchOption.js +45 -0
  293. package/esm/ui/RefNameAutocomplete/index.d.ts +1 -2
  294. package/esm/ui/RefNameAutocomplete/index.js +8 -2
  295. package/esm/ui/RefNameAutocomplete/util.d.ts +13 -0
  296. package/esm/ui/RefNameAutocomplete/util.js +42 -1
  297. package/esm/ui/ResizeHandle.d.ts +3 -1
  298. package/esm/ui/ResizeHandle.js +44 -11
  299. package/esm/ui/ScrollChrome.d.ts +13 -0
  300. package/esm/ui/ScrollChrome.js +11 -0
  301. package/esm/ui/ScrollEdgeShadow.d.ts +6 -9
  302. package/esm/ui/ScrollEdgeShadow.js +14 -35
  303. package/esm/ui/ScrollZoomToggle.d.ts +4 -27
  304. package/esm/ui/ScrollZoomToggle.js +34 -51
  305. package/esm/ui/SessionJsonPanel.d.ts +3 -0
  306. package/esm/ui/SessionJsonPanel.js +14 -0
  307. package/esm/ui/SettingsChangesTable.d.ts +1 -0
  308. package/esm/ui/SettingsChangesTable.js +49 -11
  309. package/esm/ui/ShareLinkField.d.ts +1 -3
  310. package/esm/ui/ShareLinkField.js +13 -40
  311. package/esm/ui/SizeSliderRow.d.ts +1 -3
  312. package/esm/ui/SizeSliderRow.js +4 -6
  313. package/esm/ui/SnackbarModel.js +79 -67
  314. package/esm/ui/StatusProgressBar.js +2 -2
  315. package/esm/ui/SvgColorLegend.d.ts +9 -4
  316. package/esm/ui/SvgColorLegend.js +82 -41
  317. package/esm/ui/VerticalScrollbar.d.ts +13 -34
  318. package/esm/ui/VerticalScrollbar.js +29 -83
  319. package/esm/ui/ViewLoadingScreen.d.ts +5 -4
  320. package/esm/ui/ViewLoadingScreen.js +8 -32
  321. package/esm/ui/colorScale.d.ts +92 -0
  322. package/esm/ui/colorScale.js +72 -0
  323. package/esm/ui/colors.d.ts +64 -0
  324. package/esm/ui/colors.js +230 -1
  325. package/esm/ui/hoverBoxStyle.d.ts +14 -2
  326. package/esm/ui/hoverBoxStyle.js +17 -2
  327. package/esm/ui/index.d.ts +12 -12
  328. package/esm/ui/index.js +14 -22
  329. package/esm/ui/launchViewMenu.js +15 -5
  330. package/esm/ui/legendMenuItem.d.ts +10 -32
  331. package/esm/ui/legendMenuItem.js +9 -36
  332. package/esm/ui/legendSpec.d.ts +15 -8
  333. package/esm/ui/legendSpec.js +14 -23
  334. package/esm/ui/makeSizeMenu.d.ts +0 -6
  335. package/esm/ui/makeSizeMenu.js +6 -30
  336. package/esm/ui/measureLegendText.js +1 -1
  337. package/esm/ui/menuItemAdornment.d.ts +9 -20
  338. package/esm/ui/menuItemAdornment.js +10 -32
  339. package/esm/ui/menuItems.d.ts +2 -7
  340. package/esm/ui/menuItems.js +1 -6
  341. package/esm/ui/multiTrackMenuItems.d.ts +6 -0
  342. package/esm/ui/palette.d.ts +118 -116
  343. package/esm/ui/palette.js +114 -75
  344. package/esm/ui/replaceViewAction.d.ts +1 -1
  345. package/esm/ui/replaceViewAction.js +1 -1
  346. package/esm/ui/theme.d.ts +43 -119
  347. package/esm/ui/theme.js +62 -78
  348. package/esm/ui/toggleMenuItems.d.ts +1 -3
  349. package/esm/ui/toggleMenuItems.js +6 -5
  350. package/esm/ui/useAssemblySelection.d.ts +4 -4
  351. package/esm/ui/viewHeaderHeight.d.ts +1 -0
  352. package/esm/ui/viewHeaderHeight.js +1 -0
  353. package/esm/util/Base1DUtils.d.ts +5 -3
  354. package/esm/util/Base1DUtils.js +14 -6
  355. package/esm/util/Base1DViewModel.d.ts +2 -1
  356. package/esm/util/Base1DViewModel.js +3 -2
  357. package/esm/util/SvgCanvas.d.ts +15 -13
  358. package/esm/util/SvgCanvas.js +76 -56
  359. package/esm/util/TimeTraveller.d.ts +3 -0
  360. package/esm/util/TimeTraveller.js +34 -2
  361. package/esm/util/aborting.d.ts +39 -0
  362. package/esm/util/aborting.js +88 -6
  363. package/esm/util/adapterMetadata.d.ts +1 -1
  364. package/esm/util/adapterMetadata.js +6 -5
  365. package/esm/util/addAndShowTrack.d.ts +2 -5
  366. package/esm/util/addAndShowTrack.js +5 -1
  367. package/esm/util/addRelativeUris.d.ts +17 -5
  368. package/esm/util/addRelativeUris.js +46 -10
  369. package/esm/util/addTrackFromWidget.d.ts +2 -5
  370. package/esm/util/addTrackFromWidget.js +5 -4
  371. package/esm/util/aggregateFieldName.d.ts +10 -0
  372. package/esm/util/aggregateFieldName.js +8 -0
  373. package/esm/util/analytics.js +46 -13
  374. package/esm/util/animationAllowed.d.ts +9 -0
  375. package/esm/util/animationAllowed.js +13 -0
  376. package/esm/util/applyRowResizeWheel.d.ts +10 -5
  377. package/esm/util/applyRowResizeWheel.js +10 -21
  378. package/esm/util/bandHeight.d.ts +10 -0
  379. package/esm/util/bandHeight.js +29 -0
  380. package/esm/util/bandLayout.d.ts +4 -4
  381. package/esm/util/bandLayout.js +4 -4
  382. package/esm/util/baseDisplayConfig.d.ts +8 -0
  383. package/esm/util/baseDisplayConfig.js +27 -0
  384. package/esm/util/bezierConnector.d.ts +4 -3
  385. package/esm/util/bezierConnector.js +38 -45
  386. package/esm/util/bgzfWorkerPool.d.ts +20 -74
  387. package/esm/util/bgzfWorkerPool.js +20 -74
  388. package/esm/util/binnedAggregate.d.ts +17 -0
  389. package/esm/util/binnedAggregate.js +275 -0
  390. package/esm/util/cacheBudgets.d.ts +22 -19
  391. package/esm/util/cacheBudgets.js +22 -19
  392. package/esm/util/cachedSetup.d.ts +16 -6
  393. package/esm/util/cachedSetup.js +108 -38
  394. package/esm/util/categoricalField.d.ts +56 -0
  395. package/esm/util/categoricalField.js +73 -0
  396. package/esm/util/cellMatches.d.ts +23 -0
  397. package/esm/util/cellMatches.js +264 -0
  398. package/esm/util/cellsStep.d.ts +29 -0
  399. package/esm/util/cellsStep.js +437 -0
  400. package/esm/util/clampToContig.d.ts +17 -0
  401. package/esm/util/clampToContig.js +19 -0
  402. package/esm/util/coarseStripHTML.js +1 -2
  403. package/esm/util/color/cssColorsLevel4.d.ts +1 -0
  404. package/esm/util/color/cssColorsLevel4.js +1 -0
  405. package/esm/util/color/index.d.ts +5 -3
  406. package/esm/util/color/index.js +7 -4
  407. package/esm/util/colorBits.d.ts +3 -3
  408. package/esm/util/colorBits.js +19 -44
  409. package/esm/util/colorRamp.d.ts +49 -5
  410. package/esm/util/colorRamp.js +169 -18
  411. package/esm/util/colorScale.d.ts +156 -0
  412. package/esm/util/colorScale.js +243 -0
  413. package/esm/util/colorSchemes.d.ts +21 -0
  414. package/esm/util/colorSchemes.js +30 -0
  415. package/esm/util/copyToClipboard.js +8 -1
  416. package/esm/util/{createStopTokenRotation.d.ts → createAbortRotation.d.ts} +21 -23
  417. package/esm/util/{createStopTokenRotation.js → createAbortRotation.js} +21 -52
  418. package/esm/util/createSvgRasterCanvas.d.ts +10 -0
  419. package/esm/util/cssColorParse.d.ts +15 -0
  420. package/esm/util/cssColorParse.js +53 -0
  421. package/esm/util/diagonalizeRegions.d.ts +2 -3
  422. package/esm/util/diagonalizeRegions.js +8 -13
  423. package/esm/util/expandLooseSearchIndex.d.ts +19 -0
  424. package/esm/util/expandLooseSearchIndex.js +29 -0
  425. package/esm/util/featureTable.d.ts +224 -0
  426. package/esm/util/featureTable.js +366 -0
  427. package/esm/util/featureTransforms.d.ts +81 -0
  428. package/esm/util/featureTransforms.js +1231 -0
  429. package/esm/util/featureTypes.d.ts +24 -0
  430. package/esm/util/featureTypes.js +35 -0
  431. package/esm/util/fetchAndMaybeUnzip.js +16 -9
  432. package/esm/util/fetchContext.d.ts +7 -8
  433. package/esm/util/fetchContext.js +3 -3
  434. package/esm/util/fetchHub.d.ts +4 -2
  435. package/esm/util/fetchHub.js +2 -2
  436. package/esm/util/fetchPhases.d.ts +10 -10
  437. package/esm/util/fetchSeq.d.ts +2 -3
  438. package/esm/util/fetchSeq.js +2 -2
  439. package/esm/util/fieldReader.d.ts +17 -0
  440. package/esm/util/fieldReader.js +62 -0
  441. package/esm/util/formatBytes.js +1 -1
  442. package/esm/util/formatGuessers.d.ts +25 -14
  443. package/esm/util/formatGuessers.js +42 -27
  444. package/esm/util/formatRelativeTime.js +1 -1
  445. package/esm/util/freezeDeep.d.ts +8 -10
  446. package/esm/util/freezeDeep.js +8 -10
  447. package/esm/util/getLocationUri.d.ts +2 -1
  448. package/esm/util/getLocationUri.js +8 -2
  449. package/esm/util/groupKeys.d.ts +76 -0
  450. package/esm/util/groupKeys.js +156 -0
  451. package/esm/util/highlights.d.ts +10 -6
  452. package/esm/util/highlights.js +12 -25
  453. package/esm/util/hooks.d.ts +31 -2
  454. package/esm/util/hooks.js +72 -3
  455. package/esm/util/index.d.ts +11 -11
  456. package/esm/util/index.js +11 -10
  457. package/esm/util/indexCandidates.d.ts +1 -31
  458. package/esm/util/indexCandidates.js +5 -63
  459. package/esm/util/installFetch.d.ts +77 -37
  460. package/esm/util/installFetch.js +65 -38
  461. package/esm/util/installInitAutorun.d.ts +14 -13
  462. package/esm/util/installInitAutorun.js +17 -17
  463. package/esm/util/installPrerequisiteFetch.d.ts +115 -0
  464. package/esm/util/installPrerequisiteFetch.js +111 -0
  465. package/esm/util/intervals.js +9 -4
  466. package/esm/util/io/index.js +22 -15
  467. package/esm/util/isDataCurrent.d.ts +7 -5
  468. package/esm/util/isDataCurrent.js +9 -6
  469. package/esm/util/isTextEntryFocused.d.ts +7 -0
  470. package/esm/util/isTextEntryFocused.js +16 -0
  471. package/esm/util/jexl.js +24 -21
  472. package/esm/util/jexlFilterRows.d.ts +89 -0
  473. package/esm/util/jexlFilterRows.js +252 -0
  474. package/esm/util/jexlFilters.d.ts +32 -57
  475. package/esm/util/jexlFilters.js +31 -29
  476. package/esm/util/jexlStrings.d.ts +3 -4
  477. package/esm/util/jexlStrings.js +2 -3
  478. package/esm/util/layouts/GranularRectLayout.d.ts +8 -1
  479. package/esm/util/layouts/GranularRectLayout.js +25 -8
  480. package/esm/util/lazyAfterAttach.d.ts +13 -0
  481. package/esm/util/lazyAfterAttach.js +31 -0
  482. package/esm/util/lazyWithPreload.d.ts +19 -0
  483. package/esm/util/lazyWithPreload.js +27 -0
  484. package/esm/util/legendCandidates.d.ts +72 -0
  485. package/esm/util/legendCandidates.js +138 -0
  486. package/esm/util/locString.js +5 -2
  487. package/esm/util/localStorage.js +4 -4
  488. package/esm/util/markEncoding.d.ts +150 -0
  489. package/esm/util/markEncoding.js +885 -0
  490. package/esm/util/markEncodingTypes.d.ts +595 -0
  491. package/esm/util/markEncodingTypes.js +8 -0
  492. package/esm/util/mst-reflection.d.ts +2 -20
  493. package/esm/util/mst-reflection.js +3 -53
  494. package/esm/util/mstUtils.d.ts +31 -23
  495. package/esm/util/mstUtils.js +39 -24
  496. package/esm/util/numericUtils.d.ts +7 -0
  497. package/esm/util/numericUtils.js +16 -0
  498. package/esm/util/numericValue.d.ts +14 -0
  499. package/esm/util/numericValue.js +34 -0
  500. package/esm/util/openFeatureWidget.d.ts +5 -0
  501. package/esm/util/openFeatureWidget.js +2 -2
  502. package/esm/util/openViews.d.ts +17 -0
  503. package/esm/util/openViews.js +22 -0
  504. package/esm/util/parentWalk.d.ts +1 -1
  505. package/esm/util/parentWalk.js +1 -1
  506. package/esm/util/parseLineByLine.d.ts +4 -5
  507. package/esm/util/parseLineByLine.js +8 -14
  508. package/esm/util/pluginStore.d.ts +6 -8
  509. package/esm/util/pluginStore.js +17 -16
  510. package/esm/util/preloadComponent.d.ts +5 -0
  511. package/esm/util/preloadComponent.js +11 -0
  512. package/esm/util/progress.d.ts +22 -22
  513. package/esm/util/progress.js +27 -26
  514. package/esm/util/quantileExtent.d.ts +49 -0
  515. package/esm/util/quantileExtent.js +162 -0
  516. package/esm/util/range.d.ts +13 -9
  517. package/esm/util/range.js +17 -8
  518. package/esm/util/renameRegions.d.ts +26 -6
  519. package/esm/util/renameRegions.js +68 -54
  520. package/esm/util/renderToStaticMarkup.js +24 -14
  521. package/esm/util/rxjs.d.ts +23 -8
  522. package/esm/util/rxjs.js +61 -15
  523. package/esm/util/samplesTsv.d.ts +49 -0
  524. package/esm/util/samplesTsv.js +86 -0
  525. package/esm/util/scheduleDetachedDestroy.d.ts +18 -0
  526. package/esm/util/scheduleDetachedDestroy.js +24 -0
  527. package/esm/util/scrollLatch.d.ts +1 -0
  528. package/esm/util/scrollLatch.js +8 -0
  529. package/esm/util/selectEncodedFeature.d.ts +16 -0
  530. package/esm/util/selectEncodedFeature.js +34 -0
  531. package/esm/util/sessionSharing.d.ts +7 -5
  532. package/esm/util/sessionSharing.js +23 -23
  533. package/esm/util/shapeNameList.d.ts +2 -0
  534. package/esm/util/shapeNameList.js +6 -0
  535. package/esm/util/shapeNames.d.ts +7 -0
  536. package/esm/util/shapeNames.js +11 -0
  537. package/esm/util/simpleFeature.d.ts +0 -1
  538. package/esm/util/springAnimate.js +1 -1
  539. package/esm/util/starFusion.d.ts +26 -0
  540. package/esm/util/starFusion.js +37 -0
  541. package/esm/util/stepTables.d.ts +96 -0
  542. package/esm/util/stepTables.js +277 -0
  543. package/esm/util/svAlt.d.ts +145 -0
  544. package/esm/util/svAlt.js +364 -0
  545. package/esm/util/svgColorProps.d.ts +11 -0
  546. package/esm/util/svgColorProps.js +28 -1
  547. package/esm/util/systemColorScheme.d.ts +12 -0
  548. package/esm/util/systemColorScheme.js +27 -0
  549. package/esm/util/tabix.d.ts +19 -10
  550. package/esm/util/tabix.js +19 -14
  551. package/esm/util/thresholdScale.d.ts +91 -0
  552. package/esm/util/thresholdScale.js +166 -0
  553. package/esm/util/timeGate.d.ts +4 -5
  554. package/esm/util/timeGate.js +4 -5
  555. package/esm/util/trackConfigDelta.d.ts +26 -26
  556. package/esm/util/trackConfigDelta.js +63 -47
  557. package/esm/util/tracks.d.ts +120 -66
  558. package/esm/util/tracks.js +501 -151
  559. package/esm/util/translateTranscript.d.ts +44 -0
  560. package/esm/util/translateTranscript.js +102 -0
  561. package/esm/util/types/data.d.ts +0 -2
  562. package/esm/util/types/index.d.ts +121 -22
  563. package/esm/util/types/index.js +9 -0
  564. package/esm/util/types/mst.d.ts +3 -0
  565. package/esm/util/types/mst.js +4 -0
  566. package/esm/util/types/renameIds.d.ts +1 -0
  567. package/esm/util/types/renameIds.js +29 -0
  568. package/esm/util/types/services.d.ts +1 -1
  569. package/esm/util/unknownSnapshotKeys.d.ts +53 -0
  570. package/esm/util/unknownSnapshotKeys.js +76 -0
  571. package/esm/util/useFeatureSequence.js +5 -5
  572. package/esm/util/useFetch.d.ts +3 -4
  573. package/esm/util/useFetch.js +19 -10
  574. package/esm/util/useFetchPlugins.d.ts +6 -2
  575. package/esm/util/useFetchPlugins.js +7 -3
  576. package/esm/util/usePanZoom.js +10 -3
  577. package/esm/util/usePanelVirtualScroll.d.ts +7 -35
  578. package/esm/util/usePanelVirtualScroll.js +9 -36
  579. package/esm/util/useRafCommit.js +1 -0
  580. package/esm/util/useRowVirtualScroll.d.ts +6 -29
  581. package/esm/util/useRowVirtualScroll.js +8 -49
  582. package/esm/util/useVirtualScrollWheel.d.ts +20 -4
  583. package/esm/util/useVirtualScrollWheel.js +40 -74
  584. package/esm/util/viewHighlights.d.ts +3 -0
  585. package/esm/util/viewHighlights.js +5 -0
  586. package/esm/util/viewStatus.d.ts +47 -15
  587. package/esm/util/viewStatus.js +34 -0
  588. package/esm/util/wheelZoom.d.ts +7 -1
  589. package/esm/util/wheelZoom.js +85 -19
  590. package/esm/util/whenViewSettled.d.ts +55 -8
  591. package/esm/util/whenViewSettled.js +56 -7
  592. package/esm/util/withFeatureDetails.js +4 -0
  593. package/esm/util/withLaunchInput.d.ts +174 -0
  594. package/esm/util/withLaunchInput.js +274 -0
  595. package/package.json +75 -24
  596. package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.d.ts +0 -2
  597. package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.js +0 -8
  598. package/esm/BaseFeatureWidget/BaseFeatureDetail/types.d.ts +0 -8
  599. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.d.ts +0 -80
  600. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.js +0 -583
  601. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.d.ts +0 -141
  602. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.js +0 -1116
  603. package/esm/ReExports/BaseFeatureDetails.d.ts +0 -1
  604. package/esm/ReExports/BaseFeatureDetails.js +0 -10
  605. package/esm/ReExports/index.d.ts +0 -1
  606. package/esm/ReExports/index.js +0 -1
  607. package/esm/ReExports/publicUtil.d.ts +0 -1
  608. package/esm/ReExports/publicUtil.js +0 -28
  609. package/esm/configuration/promotableDefaults.d.ts +0 -199
  610. package/esm/configuration/promotableDefaults.js +0 -326
  611. package/esm/configuration/promotablePin.d.ts +0 -55
  612. package/esm/configuration/promotablePin.js +0 -1
  613. package/esm/configuration/promotableResolve.d.ts +0 -108
  614. package/esm/configuration/promotableResolve.js +0 -117
  615. package/esm/configuration/promotableSlots.d.ts +0 -12
  616. package/esm/configuration/promotableSlots.js +0 -45
  617. package/esm/configuration/slotShape.d.ts +0 -12
  618. package/esm/configuration/slotShape.js +0 -84
  619. package/esm/pluggableElementTypes/models/HighlightsMixin.d.ts +0 -51
  620. package/esm/pluggableElementTypes/models/HighlightsMixin.js +0 -78
  621. package/esm/ui/PinAdornment.d.ts +0 -5
  622. package/esm/ui/PinAdornment.js +0 -79
  623. package/esm/ui/SvgGradientLegend.d.ts +0 -26
  624. package/esm/ui/SvgGradientLegend.js +0 -26
  625. package/esm/ui/highlightChipReveal.d.ts +0 -32
  626. package/esm/ui/highlightChipReveal.js +0 -39
  627. package/esm/ui/promotableMenuItems.d.ts +0 -19
  628. package/esm/ui/promotableMenuItems.js +0 -89
  629. package/esm/ui/promotablePinCoverage.d.ts +0 -44
  630. package/esm/ui/promotablePinCoverage.js +0 -87
  631. package/esm/util/applyInitSettings.d.ts +0 -79
  632. package/esm/util/applyInitSettings.js +0 -91
  633. package/esm/util/openDisplays.d.ts +0 -23
  634. package/esm/util/openDisplays.js +0 -79
  635. package/esm/util/stopToken.d.ts +0 -211
  636. package/esm/util/stopToken.js +0 -438
  637. /package/esm/{BaseFeatureWidget/BaseFeatureDetail/types.js → data_adapters/BaseAdapter/zoomRange.js} +0 -0
@@ -1,12 +1,11 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { createContext, use, useEffect, useRef, useState } from 'react';
2
+ import { createContext, memo, 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';
6
- import { useEventCallback } from '../util/useEventCallback.js';
7
6
  import HoverMenu from './HoverMenu.js';
8
7
  import { MenuItemTrailing } from './MenuItemTrailing.js';
9
- import { staysOpenOnClick } from './MenuTypes.js';
8
+ import { resolveSubMenu, staysOpenOnClick } from './MenuTypes.js';
10
9
  import { hasMenuItemAdornment } from './menuItemAdornment.js';
11
10
  import { isAimedAtPanel } from './submenuAim.js';
12
11
  // Compact section headers so tall menus (e.g. a display's flat "Show..."
@@ -24,6 +23,12 @@ const useStyles = makeStyles()(theme => ({
24
23
  borderTop: `1px solid ${theme.palette.divider}`,
25
24
  marginTop: 4,
26
25
  },
26
+ // a leading subHeader has no rows above it to divide from, so the rule and
27
+ // its space would float against the menu's top edge
28
+ leadingSubHeader: {
29
+ borderTopWidth: 0,
30
+ marginTop: 0,
31
+ },
27
32
  }));
28
33
  const CascadingMenuContext = createContext(undefined);
29
34
  function useCascadingMenu() {
@@ -59,57 +64,65 @@ function useCascadingMenu() {
59
64
  */
60
65
  const submenuAimGraceMs = 120;
61
66
  /**
62
- * Which submenu of ONE list is open, plus the hover intent that moves it.
67
+ * The hover intent that moves which submenu of ONE list is open.
63
68
  *
64
69
  * A click or ArrowRight says where the pointer meant to go and acts at once. A
65
70
  * hover is read against {@link isAimedAtPanel}: outside the cone it acts at
66
71
  * once too, and inside it defers, because the rows between a submenu row and
67
72
  * its panel are exactly the ones a pointer on its way there has to cross.
73
+ *
74
+ * Built once per list, so every row gets the same handlers and a row whose
75
+ * open state didn't change skips the re-render a hover triggers.
68
76
  */
69
- function useSubmenuHover() {
70
- const [openSubmenu, setOpenSubmenu] = useState();
77
+ function createSubmenuHover(setOpenSubmenu) {
78
+ let openKey;
71
79
  // the open panel's paper, so the cone has a real edge to open onto. Written
72
80
  // by whichever CascadingSubmenu is open and cleared as it closes, so at most
73
81
  // one submenu of this list ever owns it
74
- const panelRef = useRef(null);
82
+ const panelRef = { current: null };
75
83
  // where the pointer was when the open panel opened — the cone's tip
76
- const apex = useRef(undefined);
77
- const pending = useRef(undefined);
84
+ let apex;
85
+ // where the pointer last was while a panel is up. A row that slides under a
86
+ // resting pointer — the menu grew a fetch later and MUI moved it back into
87
+ // the viewport, or rows landed above — gets a mouseenter at that same point,
88
+ // and it is the layout that moved, not the pointer, so it is no hover.
89
+ let lastPoint;
90
+ let pending;
78
91
  const cancelPending = () => {
79
- if (pending.current) {
80
- clearTimeout(pending.current.timer);
81
- pending.current = undefined;
92
+ if (pending) {
93
+ clearTimeout(pending.timer);
94
+ pending = undefined;
82
95
  }
83
96
  };
84
- useEffect(() => () => {
85
- if (pending.current) {
86
- clearTimeout(pending.current.timer);
87
- }
88
- }, []);
89
97
  const commit = (key, point) => {
90
98
  cancelPending();
91
- apex.current = key === undefined ? undefined : point;
99
+ apex = key === undefined ? undefined : point;
100
+ lastPoint = point;
101
+ openKey = key;
92
102
  setOpenSubmenu(key);
93
103
  };
104
+ const restingUnderOpenPanel = (point) => openKey !== undefined &&
105
+ lastPoint !== undefined &&
106
+ point.x === lastPoint.x &&
107
+ point.y === lastPoint.y;
94
108
  // 'unmeasured' is its own answer, not a lenient 'inside': a cone pointing at
95
109
  // nothing would call every row crossed a veer-off, and a move handler that
96
110
  // re-armed on it would hold the panel open for as long as the pointer kept
97
111
  // moving anywhere at all
98
112
  const aimAt = (point) => {
99
113
  const panel = panelRef.current;
100
- const tip = apex.current;
101
- if (!panel || !tip) {
114
+ if (!panel || !apex) {
102
115
  return 'unmeasured';
103
116
  }
104
117
  const rect = panel.getBoundingClientRect();
105
118
  if (rect.width === 0 && rect.height === 0) {
106
119
  return 'unmeasured';
107
120
  }
108
- return isAimedAtPanel(point, tip, rect) ? 'inside' : 'outside';
121
+ return isAimedAtPanel(point, apex, rect) ? 'inside' : 'outside';
109
122
  };
110
123
  const defer = (key, point) => {
111
124
  cancelPending();
112
- pending.current = {
125
+ pending = {
113
126
  key,
114
127
  point,
115
128
  timer: setTimeout(() => {
@@ -117,64 +130,120 @@ function useSubmenuHover() {
117
130
  }, submenuAimGraceMs),
118
131
  };
119
132
  };
120
- // Watched only while a panel is up, and only a deferred change is waiting on
121
- // it. A row's own hover cannot answer this alone: the pointer can leave the
122
- // cone without ever crossing into another row, by turning around inside the
123
- // one it is already on.
124
- const onPointerMove = useEventCallback((event) => {
125
- const deferred = pending.current;
126
- if (!deferred) {
127
- return;
133
+ // the pointer arrived at a row wanting `key` open — undefined from a row with
134
+ // no submenu, i.e. "close whatever is"
135
+ const hoverSubmenu = (key, point) => {
136
+ if (key === openKey) {
137
+ cancelPending();
128
138
  }
129
- const aim = aimAt({ x: event.clientX, y: event.clientY });
130
- if (aim === 'outside') {
131
- commit(deferred.key, deferred.point);
139
+ else if (restingUnderOpenPanel(point)) {
140
+ return;
132
141
  }
133
- else if (aim === 'inside') {
134
- // still traveling, so the grace starts over — it is there to catch a
135
- // pointer that stops, and this one has not
136
- defer(deferred.key, deferred.point);
142
+ else if (openKey === undefined || aimAt(point) === 'outside') {
143
+ // nothing to protect, or a pointer that was never heading for the open
144
+ // panel: either way there is nothing to wait for
145
+ commit(key, point);
137
146
  }
138
- });
139
- useEffect(() => {
140
- if (openSubmenu === undefined) {
141
- return;
147
+ else {
148
+ defer(key, point);
142
149
  }
143
- document.addEventListener('mousemove', onPointerMove);
144
- return () => {
145
- document.removeEventListener('mousemove', onPointerMove);
146
- };
147
- }, [openSubmenu, onPointerMove]);
150
+ };
148
151
  return {
149
- openSubmenu,
150
152
  panelRef,
151
153
  setSubmenu: commit,
152
- // the pointer reached the open panel, so whatever was scheduled is stale
153
- keepSubmenuOpen: cancelPending,
154
- // the pointer arrived at a row wanting `key` open — undefined from a row
155
- // with no submenu, i.e. "close whatever is"
156
- hoverSubmenu: (key, point) => {
157
- if (key === openSubmenu) {
158
- cancelPending();
154
+ cancelPending,
155
+ hoverSubmenu,
156
+ // every row a pointer can rest on asks for the open panel to go away; only
157
+ // a row that owns a submenu, or the panel itself, keeps one up
158
+ closeOnHover: (event) => {
159
+ hoverSubmenu(undefined, { x: event.clientX, y: event.clientY });
160
+ },
161
+ // Watched only while a panel is up, and only a deferred change is waiting
162
+ // on it. A row's own hover cannot answer this alone: the pointer can leave
163
+ // the cone without ever crossing into another row, by turning around inside
164
+ // the one it is already on.
165
+ onPointerMove: (event) => {
166
+ lastPoint = { x: event.clientX, y: event.clientY };
167
+ const deferred = pending;
168
+ if (!deferred) {
169
+ return;
159
170
  }
160
- else if (openSubmenu === undefined || aimAt(point) === 'outside') {
161
- // nothing to protect, or a pointer that was never heading for the open
162
- // panel: either way there is nothing to wait for
163
- commit(key, point);
171
+ const aim = aimAt({ x: event.clientX, y: event.clientY });
172
+ if (aim === 'outside') {
173
+ commit(deferred.key, deferred.point);
164
174
  }
165
- else {
166
- defer(key, point);
175
+ else if (aim === 'inside') {
176
+ // still traveling, so the grace starts over — it is there to catch a
177
+ // pointer that stops, and this one has not
178
+ defer(deferred.key, deferred.point);
167
179
  }
168
180
  },
169
181
  };
170
182
  }
171
- // Identity of a submenu row, used both as its React key and to remember which
172
- // submenu is open. Deliberately not the array index: the items are re-derived on
173
- // every observable change (a checkbox toggle can add or drop a row above), so an
174
- // index-keyed "open" flag would follow the position rather than the submenu and
175
- // the open panel would jump to whichever row landed at that index.
176
- function submenuKey(label) {
177
- return `subMenu-${label}`;
183
+ function useSubmenuHover() {
184
+ const [openSubmenu, setOpenSubmenu] = useState();
185
+ const [hover] = useState(() => createSubmenuHover(setOpenSubmenu));
186
+ useEffect(() => hover.cancelPending, [hover]);
187
+ useEffect(() => {
188
+ if (openSubmenu === undefined) {
189
+ return;
190
+ }
191
+ document.addEventListener('mousemove', hover.onPointerMove);
192
+ return () => {
193
+ document.removeEventListener('mousemove', hover.onPointerMove);
194
+ };
195
+ }, [openSubmenu, hover]);
196
+ return { openSubmenu, hover };
197
+ }
198
+ // One key per row, unique WITHIN the level — the React key, and for a submenu row
199
+ // also the identity of "which submenu is open".
200
+ //
201
+ // A row is named by its `id`, or by its label where it has none. Deliberately not
202
+ // the array index: the items are re-derived on every observable change (a checkbox
203
+ // toggle can add or drop a row above), so an index-keyed "open" flag would follow
204
+ // the position rather than the submenu and the open panel would jump to whichever
205
+ // row landed at that index.
206
+ //
207
+ // A NAME THAT REPEATS TAKES AN OCCURRENCE SUFFIX, so the level's keys are unique
208
+ // whatever its rows are called. Two ways a name repeats, and both shipped: a
209
+ // `label` is a `React.ReactNode`, so an element interpolates to `[object Object]`
210
+ // and a menu of them named every row the same — the favorites and recently-used
211
+ // track dropdowns did — and a label can simply be shared, since a list may dedupe
212
+ // on something other than its text, as the recent locations dedupe on the
213
+ // location. Handling it here rather than asking every caller for an `id` means
214
+ // neither case can reach React as one key for several rows; only the rows that
215
+ // genuinely repeat depend on their order among each other, and `id` is then a way
216
+ // to keep a row's identity across a reorder rather than a correctness obligation.
217
+ //
218
+ // The kind prefix is the render branch below: a submenu row and a clickable row
219
+ // sharing a label draw different components, which must not share a key.
220
+ function rowKeys(items) {
221
+ const seen = new Map();
222
+ return items.map(item => {
223
+ const kind = 'subMenu' in item
224
+ ? 'subMenu'
225
+ : item.type === 'divider' || item.type === 'subHeader'
226
+ ? item.type
227
+ : item.type === 'custom'
228
+ ? 'custom'
229
+ : 'menuitem';
230
+ // a divider has no identity beyond its position among the other dividers.
231
+ // `'id' in item` rather than `item.id`: a divider and a subHeader are their
232
+ // own interfaces and carry neither an `id` nor, for the divider, a label
233
+ const name = item.type === 'divider'
234
+ ? ''
235
+ : ('id' in item && item.id) || `${item.label}`;
236
+ const base = `${kind}-${name}`;
237
+ const seenBefore = seen.get(base) ?? 0;
238
+ seen.set(base, seenBefore + 1);
239
+ // The count LEADS, and every row carries one. A trailing suffix is drawn
240
+ // from the same alphabet as the label it disambiguates, so `x#1` beside two
241
+ // rows called `x` collided all over again — the second `x` took the first
242
+ // one's key. Leading, the count is the digits before the first `-` and the
243
+ // base is everything after, and `kind` always starts with a letter, so no
244
+ // two (count, base) pairs can spell one key.
245
+ return `${seenBefore}-${base}`;
246
+ });
178
247
  }
179
248
  // Where the aim cone's tip goes for a submenu opened from the keyboard, which
180
249
  // has no pointer to put it at: the middle of the row, so a pointer picked up
@@ -280,12 +349,12 @@ function DisabledTooltip({ item, children, }) {
280
349
  // toggle), whose content stops its own click so using it doesn't also open the
281
350
  // submenu. Both go through `MenuItemTrailing`, so they land in the columns the
282
351
  // clickable rows reserve rather than in a hand-assembled copy of them.
283
- function CascadingSubmenu({ item, itemKey, inset, columns, hover, onNavigateBack, }) {
352
+ const CascadingSubmenu = memo(function CascadingSubmenu({ item, itemKey, inset, columns, open, hover, onNavigateBack, }) {
284
353
  const { zIndex } = useCascadingMenu();
285
354
  const [anchorEl, setAnchorEl] = useState(null);
286
355
  // a rebuild can disable the row while its panel is up, and a disabled row has
287
356
  // no way left to close it
288
- const isOpen = hover.openSubmenu === itemKey && !item.disabled;
357
+ const isOpen = open && !item.disabled;
289
358
  return (_jsxs(_Fragment, { children: [_jsx(DisabledTooltip, { item: item, children: _jsxs(MenuItem, { ref: setAnchorEl, "data-testid": makeTestId('submenu', item.label), disabled: item.disabled, "aria-haspopup": "menu", "aria-expanded": isOpen,
290
359
  // keeps the panel visually attached to the row it hangs off: that
291
360
  // row's own hover highlight is gone the moment the pointer moves
@@ -303,26 +372,41 @@ function CascadingSubmenu({ item, itemKey, inset, columns, hover, onNavigateBack
303
372
  e.stopPropagation();
304
373
  onNavigateBack?.();
305
374
  }
306
- }, children: [_jsx(MenuItemLeadingIcon, { Icon: item.icon }), _jsx(ListItemText, { primary: item.label, inset: inset }), _jsx(MenuItemTrailing, { item: item, columns: columns })] }) }), _jsx(HoverMenu, { open: isOpen, anchorEl: anchorEl, anchorOrigin: { vertical: 'top', horizontal: 'right' }, transformOrigin: { vertical: 'top', horizontal: 'left' }, zIndex: zIndex,
307
- // the pointer completed the trip, so drop the close a row it crossed on
308
- // the way scheduled
309
- onMouseEnter: hover.keepSubmenuOpen,
310
- // only while open: a panel MUI is still fading out is not something to
311
- // aim at, and this list keeps one cone target for whichever submenu is
312
- // up
313
- paperRef: isOpen ? hover.panelRef : undefined, onClose: () => {
375
+ }, children: [_jsx(MenuItemLeadingIcon, { Icon: item.icon }), _jsx(ListItemText, { primary: item.label, inset: inset }), _jsx(MenuItemTrailing, { item: item, columns: columns })] }) }), isOpen ? (_jsx(HoverMenu, { anchorEl: anchorEl, anchorOrigin: { vertical: 'top', horizontal: 'right' }, transformOrigin: { vertical: 'top', horizontal: 'left' }, zIndex: zIndex,
376
+ // the pointer completed the trip, so drop the close a row it crossed
377
+ // on the way scheduled
378
+ onMouseEnter: hover.cancelPending, paperRef: hover.panelRef, onClose: () => {
314
379
  hover.setSubmenu(undefined);
315
- }, children: _jsx(CascadingMenuList, { menuItems: item.subMenu, onNavigateBack: () => {
380
+ }, children: _jsx(SubMenuList, { item: item, onNavigateBack: () => {
316
381
  hover.setSubmenu(undefined);
317
382
  anchorEl?.focus();
318
- } }) })] }));
319
- }
383
+ } }) })) : null] }));
384
+ });
385
+ // Resolves the rows inside the panel, which mounts only while it is open:
386
+ // a function-form `subMenu` is not called by listing the parent menu. An
387
+ // observer so the observables that builder reads re-render the open panel, the
388
+ // way an array built in the root observer's render already did.
389
+ const SubMenuList = observer(function SubMenuList({ item, onNavigateBack, }) {
390
+ return (_jsx(CascadingMenuList, { menuItems: resolveSubMenu(item), onNavigateBack: onNavigateBack }));
391
+ });
320
392
  // One clickable menu row: label (with optional leading icon) plus its trailing
321
393
  // value/help/adornment decorations. The menu-wide `columns` flags let every row
322
394
  // reserve matching decoration slots so the columns line up down the menu.
323
- function CascadingMenuItem({ item, inset, columns, onNavigateBack, onHover, }) {
395
+ const CascadingMenuItem = memo(function CascadingMenuItem({ item, inset, columns, onNavigateBack, onHover, }) {
324
396
  const { closeAfterItemClick, onMenuItemClick, onCloseRoot } = useCascadingMenu();
325
- return (_jsx(DisabledTooltip, { item: item, children: _jsxs(MenuItem, { "data-testid": makeTestId('menuitem', item.label), disabled: item.disabled, onClick: () => {
397
+ return (_jsx(DisabledTooltip, { item: item, children: _jsxs(MenuItem, { "data-testid": makeTestId('menuitem', item.label), disabled: item.disabled,
398
+ // A checkbox or radio row states its own value. The glyph
399
+ // `MenuItemEndDecoration` swaps is an `aria-hidden` icon, so without
400
+ // these a screen reader reads "Curved lines" identically whether the
401
+ // setting is on or off, and a test has no way to ask but the MUI icon's
402
+ // internal testid.
403
+ role: item.type === 'checkbox'
404
+ ? 'menuitemcheckbox'
405
+ : item.type === 'radio'
406
+ ? 'menuitemradio'
407
+ : undefined, "aria-checked": item.type === 'checkbox' || item.type === 'radio'
408
+ ? item.checked
409
+ : undefined, onClick: () => {
326
410
  // onCloseRoot runs before the callback, so item.onClick must NOT read
327
411
  // model state that closing clears (e.g. a right-click menu's ephemeral
328
412
  // hit/context fields): capture that state when the menu items are
@@ -337,38 +421,31 @@ function CascadingMenuItem({ item, inset, columns, onNavigateBack, onHover, }) {
337
421
  onNavigateBack?.();
338
422
  }
339
423
  }, children: [_jsx(MenuItemLeadingIcon, { Icon: item.icon }), _jsx(ListItemText, { primary: item.label, secondary: item.subLabel, inset: inset }), _jsx(MenuItemTrailing, { item: item, columns: columns })] }) }));
340
- }
424
+ });
341
425
  function CascadingMenuList({ menuItems, onNavigateBack, }) {
342
- const { classes } = useStyles();
343
- const hover = useSubmenuHover();
344
- // every row a pointer can rest on asks for the open panel to go away; only a
345
- // row that owns a submenu, or the panel itself, keeps one up. Whether the ask
346
- // is granted now or waited out is the aim cone's call, which is why the
347
- // pointer comes with it
348
- const closeOnHover = (event) => {
349
- hover.hoverSubmenu(undefined, { x: event.clientX, y: event.clientY });
350
- };
351
- const { hasIcon, columns } = getMenuColumnFlags(menuItems);
352
- const sortedItems = menuItems.toSorted((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
426
+ const { classes, cx } = useStyles();
427
+ const { openSubmenu, hover } = useSubmenuHover();
428
+ const { closeOnHover } = hover;
429
+ const { hasIcon, columns } = useMemo(() => getMenuColumnFlags(menuItems), [menuItems]);
430
+ const sortedItems = useMemo(() => menuItems.toSorted((a, b) => (b.priority ?? 0) - (a.priority ?? 0)), [menuItems]);
431
+ // keyed after the sort, so an occurrence suffix counts up the level in the
432
+ // order it is drawn
433
+ const keys = useMemo(() => rowKeys(sortedItems), [sortedItems]);
353
434
  return (_jsx(_Fragment, { children: sortedItems.map((item, idx) => {
435
+ const key = keys[idx];
354
436
  if ('subMenu' in item) {
355
- const key = submenuKey(item.label);
356
- return (_jsx(CascadingSubmenu, { itemKey: key, item: item, inset: hasIcon && !item.icon, columns: columns, hover: hover, onNavigateBack: onNavigateBack }, key));
437
+ return (_jsx(CascadingSubmenu, { itemKey: key, item: item, inset: hasIcon && !item.icon, columns: columns, open: openSubmenu === key, hover: hover, onNavigateBack: onNavigateBack }, key));
357
438
  }
358
439
  if (item.type === 'divider') {
359
- // eslint-disable-next-line @eslint-react/no-array-index-key -- dividers have no identifying field, list order is fixed
360
- return _jsx(Divider, { component: "li" }, `divider-${idx}`);
440
+ return _jsx(Divider, { component: "li" }, key);
361
441
  }
362
442
  if (item.type === 'subHeader') {
363
- return (_jsx(ListSubheader, { className: classes.subHeader, onMouseEnter: closeOnHover,
364
- // a leading subHeader has no rows above it to divide from, so drop
365
- // the divider rule that would otherwise float at the menu's top edge
366
- sx: idx === 0 ? { borderTop: 'none', marginTop: 0 } : undefined, children: item.label }, `subHeader-${item.label}`));
443
+ return (_jsx(ListSubheader, { className: cx(classes.subHeader, idx === 0 && classes.leadingSubHeader), onMouseEnter: closeOnHover, children: item.label }, key));
367
444
  }
368
445
  if (item.type === 'custom') {
369
- return (_jsx(CustomMenuRow, { item: item, onHover: closeOnHover }, `custom-${item.label}`));
446
+ return _jsx(CustomMenuRow, { item: item, onHover: closeOnHover }, key);
370
447
  }
371
- return (_jsx(CascadingMenuItem, { item: item, inset: hasIcon && !item.icon, columns: columns, onNavigateBack: onNavigateBack, onHover: closeOnHover }, `menuitem-${item.label}`));
448
+ return (_jsx(CascadingMenuItem, { item: item, inset: hasIcon && !item.icon, columns: columns, onNavigateBack: onNavigateBack, onHover: closeOnHover }, key));
372
449
  }) }));
373
450
  }
374
451
  const CascadingMenu = observer(function CascadingMenu({ onMenuItemClick, closeAfterItemClick = true, menuItems, open, onClose, anchorEl, anchorOrigin, transformOrigin, anchorReference, anchorPosition, style, }) {
@@ -1,9 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import ArrowDropDown from '@mui/icons-material/ArrowDropDown';
3
- import { Button, alpha } from '@mui/material';
3
+ import { Button } from '@mui/material';
4
4
  import { observer } from 'mobx-react';
5
5
  import { makeStyles } from '../util/tss-react/index.js';
6
6
  import CascadingMenuButton from './CascadingMenuButton.js';
7
+ import { alpha } from './palette.js';
7
8
  const useStyles = makeStyles()(theme => ({
8
9
  buttonRoot: {
9
10
  '&:hover': {
@@ -6,7 +6,7 @@ import { parseError } from './parseError.js';
6
6
  const useStyles = makeStyles()(theme => ({
7
7
  bg: {
8
8
  background: theme.palette.divider,
9
- border: '1px solid black',
9
+ border: `1px solid ${theme.palette.text.primary}`,
10
10
  margin: 20,
11
11
  },
12
12
  message: {
@@ -11,8 +11,8 @@ interface Props {
11
11
  FallbackComponent: React.FC<FallbackProps>;
12
12
  /**
13
13
  * clear the caught error when any of these changes, compared with `Object.is`
14
- * element by element. For the cause a caller can name — the display was
15
- * swapped, the view was replaced — so a banner does not outlive it.
14
+ * element by element. For the cause a caller can name, so a banner does not
15
+ * outlive it.
16
16
  */
17
17
  resetKeys?: unknown[];
18
18
  /** runs before the error clears, on either reset path */
@@ -1,7 +1,8 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Typography, alpha } from '@mui/material';
2
+ import { Typography } from '@mui/material';
3
3
  import { makeStyles } from '../util/tss-react/index.js';
4
4
  import ExternalLink from './ExternalLink.js';
5
+ import { alpha } from './palette.js';
5
6
  const EMAIL = 'jbrowse2@berkeley.edu';
6
7
  const useStyles = makeStyles()(theme => ({
7
8
  pre: {
@@ -1,7 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { effectiveRenderer } from '@jbrowse/render-core/graphicsCapabilities';
3
3
  import { useGraphicsCapabilities } from '@jbrowse/render-core/useGraphicsCapabilities';
4
- import { hasSharedArrayBuffer } from '../util/stopToken.js';
5
4
  import { useFetch } from '../util/useFetch.js';
6
5
  import CopyToClipboardButton from './CopyToClipboardButton.js';
7
6
  import ErrorMessageStackTraceContents from './ErrorMessageStackTraceContents.js';
@@ -15,12 +14,11 @@ export default function ErrorMessageStackTraceDialog({ error, onClose, extra, })
15
14
  const errorText = error ? `${error}` : '';
16
15
  const stackTrace = formatErrorStack(error);
17
16
  const { data: mappedStackTrace, isLoading } = useFetch(['mappedStackTrace', stackTrace], () => mapStackTrace(stackTrace));
18
- // The rung actually drawing, not a list of the ones available: it already says
19
- // which rungs exist, since Canvas2D means neither and WebGL2 means no WebGPU.
20
- // It accounts for a `?renderer=` pin and for the GPU banner's "disable GPU",
21
- // which matters most in exactly this dialog — a user reporting a rendering bug
22
- // has often already clicked that button, and until this moved to render-core
23
- // the report they sent still said WebGL2.
17
+ // The rung createGpuHal built, not a list of the ones available: it already
18
+ // says which rungs exist, since Canvas2D means neither and WebGL2 means no
19
+ // WebGPU. It also honours the GPU banner's "disable GPU", which matters most
20
+ // in exactly this dialog — a user reporting a rendering bug has often already
21
+ // clicked it.
24
22
  const graphicsInfo = graphicsCapabilities
25
23
  ? `Graphics: ${effectiveRenderer(graphicsCapabilities)}`
26
24
  : '';
@@ -34,9 +32,6 @@ export default function ErrorMessageStackTraceDialog({ error, onClose, extra, })
34
32
  const glRendererInfo = graphicsCapabilities?.glRenderer
35
33
  ? `GL renderer: ${graphicsCapabilities.glRenderer}${graphicsCapabilities.softwareWebgl ? ' (SOFTWARE RASTERIZER)' : ''}`
36
34
  : '';
37
- // Both paths cancel at await boundaries by posted message; SharedArrayBuffer
38
- // additionally interrupts a synchronous worker loop mid-run.
39
- const sabInfo = `Worker abort: postMessage${hasSharedArrayBuffer ? ' + SharedArrayBuffer' : ''}`;
40
35
  const session = window
41
36
  .JBrowseSession;
42
37
  const version = session?.version;
@@ -53,7 +48,6 @@ export default function ErrorMessageStackTraceDialog({ error, onClose, extra, })
53
48
  gpuInfo,
54
49
  glRendererInfo,
55
50
  rpcInfo,
56
- sabInfo,
57
51
  `Cross-origin isolated: ${crossOriginIsolated}`,
58
52
  `CPU cores: ${navigator.hardwareConcurrency}`,
59
53
  `Device pixel ratio: ${window.devicePixelRatio}`,
@@ -1,7 +1,7 @@
1
1
  import type { BaseExportSvgOptions } from './BaseExportSvgDialog.tsx';
2
2
  export default function ExportSvgDialog({ model, handleClose, }: {
3
3
  model: {
4
- exportSvg(opts: BaseExportSvgOptions): Promise<void>;
4
+ exportSvg(opts: BaseExportSvgOptions): Promise<unknown>;
5
5
  };
6
6
  handleClose: () => void;
7
7
  }): import("react").JSX.Element;
@@ -1,8 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useRef, useState } from 'react';
3
3
  import CloudUploadIcon from '@mui/icons-material/CloudUpload';
4
- import { Typography, alpha } from '@mui/material';
4
+ import { Typography } from '@mui/material';
5
5
  import { makeStyles } from '../util/tss-react/index.js';
6
+ import { alpha } from './palette.js';
6
7
  const useStyles = makeStyles()(theme => ({
7
8
  dropZone: {
8
9
  textAlign: 'center',