@jbrowse/core 5.0.0-beta.8 → 5.0.0-beta.9

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 (379) hide show
  1. package/README.md +427 -130
  2. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +3 -2
  3. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +5 -3
  4. package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +3 -5
  5. package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +8 -9
  6. package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.js +8 -13
  7. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.d.ts +2 -1
  8. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.js +3 -3
  9. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.d.ts +8 -0
  10. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.js +24 -0
  11. package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.d.ts +3 -2
  12. package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +5 -3
  13. package/esm/BaseFeatureWidget/BaseFeatureDetail/index.d.ts +1 -0
  14. package/esm/BaseFeatureWidget/BaseFeatureDetail/index.js +1 -4
  15. package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.d.ts +16 -0
  16. package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.js +53 -0
  17. package/esm/BaseFeatureWidget/BaseFeatureDetail/util.d.ts +0 -8
  18. package/esm/BaseFeatureWidget/BaseFeatureDetail/util.js +0 -16
  19. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceContents.js +7 -34
  20. package/esm/BaseFeatureWidget/configSchema.d.ts +1 -1
  21. package/esm/BaseFeatureWidget/formatDetails.d.ts +13 -29
  22. package/esm/BaseFeatureWidget/formatDetails.js +46 -79
  23. package/esm/BaseFeatureWidget/index.d.ts +1 -0
  24. package/esm/BaseFeatureWidget/stateModelFactory.d.ts +35 -28
  25. package/esm/BaseFeatureWidget/stateModelFactory.js +94 -102
  26. package/esm/BaseFeatureWidget/types.d.ts +3 -0
  27. package/esm/BaseFeatureWidget/util.d.ts +0 -3
  28. package/esm/BaseFeatureWidget/util.js +0 -17
  29. package/esm/PluginLoader.d.ts +14 -9
  30. package/esm/PluginLoader.js +34 -26
  31. package/esm/PluginManager.d.ts +4 -4
  32. package/esm/PluginManager.js +1 -1
  33. package/esm/ReExports/coreModules.generated.d.ts +2 -0
  34. package/esm/ReExports/coreModules.generated.js +492 -0
  35. package/esm/ReExports/coreWorkerModules.generated.d.ts +2 -0
  36. package/esm/ReExports/coreWorkerModules.generated.js +453 -0
  37. package/esm/ReExports/frameworkModules.d.ts +2 -0
  38. package/esm/ReExports/frameworkModules.js +67 -0
  39. package/esm/ReExports/frameworkShared.d.ts +12 -0
  40. package/esm/ReExports/frameworkShared.js +16 -0
  41. package/esm/ReExports/frameworkWorkerModules.generated.d.ts +2 -0
  42. package/esm/ReExports/frameworkWorkerModules.generated.js +130 -0
  43. package/esm/ReExports/list.js +493 -79
  44. package/esm/ReExports/modules.d.ts +1 -1
  45. package/esm/ReExports/modules.js +10 -87
  46. package/esm/ReExports/registry.d.ts +1 -0
  47. package/esm/ReExports/registry.js +23 -5
  48. package/esm/ReExports/uiStub.d.ts +2 -1
  49. package/esm/ReExports/uiStub.js +24 -2
  50. package/esm/ReExports/workerModules.js +8 -12
  51. package/esm/TextSearch/TextSearchManager.d.ts +3 -12
  52. package/esm/TextSearch/TextSearchManager.js +22 -10
  53. package/esm/assemblyManager/assembly.d.ts +10 -14
  54. package/esm/assemblyManager/assembly.js +10 -14
  55. package/esm/assemblyManager/assemblyConfigSchema.d.ts +23 -81
  56. package/esm/assemblyManager/assemblyManager.d.ts +10 -16
  57. package/esm/assemblyManager/assemblyManager.js +7 -10
  58. package/esm/assemblyManager/loadRefNameMap.js +3 -3
  59. package/esm/configuration/configurationSchema.d.ts +75 -31
  60. package/esm/configuration/configurationSchema.js +74 -40
  61. package/esm/configuration/configurationSchemaUnion.d.ts +39 -0
  62. package/esm/configuration/configurationSchemaUnion.js +59 -0
  63. package/esm/configuration/configurationSlot.d.ts +37 -12
  64. package/esm/configuration/configurationSlot.js +83 -22
  65. package/esm/configuration/formatAboutConfigSchema.d.ts +7 -21
  66. package/esm/configuration/formatDetailsConfigSchema.d.ts +11 -37
  67. package/esm/configuration/formatDetailsConfigSchema.js +10 -13
  68. package/esm/configuration/getConf.d.ts +17 -9
  69. package/esm/configuration/getConf.js +52 -7
  70. package/esm/configuration/index.d.ts +11 -4
  71. package/esm/configuration/index.js +7 -4
  72. package/esm/configuration/mergeFormatCallbacks.d.ts +6 -7
  73. package/esm/configuration/mergeFormatCallbacks.js +13 -10
  74. package/esm/configuration/readConfObject.d.ts +2 -22
  75. package/esm/configuration/readConfObject.js +15 -49
  76. package/esm/configuration/requirements.d.ts +37 -0
  77. package/esm/configuration/requirements.js +88 -0
  78. package/esm/configuration/schemaRegistry.d.ts +21 -1
  79. package/esm/configuration/schemaRegistry.js +11 -0
  80. package/esm/configuration/schemaTypes.d.ts +3 -0
  81. package/esm/configuration/schemaTypes.js +10 -0
  82. package/esm/configuration/slotFacade.d.ts +35 -4
  83. package/esm/configuration/slotFacade.js +96 -9
  84. package/esm/configuration/snapshotPreprocess.d.ts +27 -0
  85. package/esm/configuration/snapshotPreprocess.js +102 -0
  86. package/esm/configuration/types.d.ts +161 -22
  87. package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +2 -2
  88. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +11 -2
  89. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +12 -1
  90. package/esm/data_adapters/BaseAdapter/featureDensity.d.ts +2 -3
  91. package/esm/data_adapters/BaseAdapter/featureDensity.js +2 -3
  92. package/esm/data_adapters/BaseAdapter/index.d.ts +22 -3
  93. package/esm/data_adapters/BaseAdapter/types.d.ts +3 -4
  94. package/esm/data_adapters/BaseAdapter/zoomRange.d.ts +10 -0
  95. package/esm/data_adapters/BaseAdapter/zoomRange.js +1 -0
  96. package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +9 -11
  97. package/esm/data_adapters/getSequenceSubAdapter.d.ts +1 -3
  98. package/esm/data_adapters/getSequenceSubAdapter.js +1 -3
  99. package/esm/pluggableElementTypes/AdapterType.d.ts +7 -7
  100. package/esm/pluggableElementTypes/RpcMethodType.d.ts +1 -1
  101. package/esm/pluggableElementTypes/RpcMethodType.js +3 -8
  102. package/esm/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.d.ts +1 -2
  103. package/esm/pluggableElementTypes/TextSearchAdapterType.d.ts +7 -7
  104. package/esm/pluggableElementTypes/index.d.ts +1 -1
  105. package/esm/pluggableElementTypes/index.js +1 -1
  106. package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +17 -7
  107. package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +45 -48
  108. package/esm/pluggableElementTypes/models/BaseDisplayModel.js +40 -36
  109. package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +10 -13
  110. package/esm/pluggableElementTypes/models/BaseTrackModel.js +6 -6
  111. package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +37 -17
  112. package/esm/pluggableElementTypes/models/BaseViewModel.js +25 -10
  113. package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +26 -16
  114. package/esm/pluggableElementTypes/models/assertDisplayContract.d.ts +1 -1
  115. package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +22 -18
  116. package/esm/pluggableElementTypes/models/baseConnectionConfig.js +5 -5
  117. package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +26 -31
  118. package/esm/pluggableElementTypes/models/baseTrackConfig.d.ts +57 -141
  119. package/esm/pluggableElementTypes/models/baseTrackConfig.js +22 -26
  120. package/esm/pluggableElementTypes/models/components/SaveTrackData.js +2 -2
  121. package/esm/pluggableElementTypes/models/components/fetchTrackData.d.ts +3 -4
  122. package/esm/pluggableElementTypes/models/components/fetchTrackData.js +3 -3
  123. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +15 -7
  124. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +38 -29
  125. package/esm/pluggableElementTypes/models/index.d.ts +1 -2
  126. package/esm/pluggableElementTypes/models/index.js +1 -2
  127. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.d.ts +3 -3
  128. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.js +4 -4
  129. package/esm/pluggableElementTypes/models/saveTrackFileTypes/types.d.ts +3 -3
  130. package/esm/rpc/BaseRpcDriver.d.ts +1 -2
  131. package/esm/rpc/BaseRpcDriver.js +23 -30
  132. package/esm/rpc/MainThreadRpcDriver.d.ts +2 -2
  133. package/esm/rpc/MainThreadRpcDriver.js +13 -8
  134. package/esm/rpc/RpcClient.d.ts +17 -6
  135. package/esm/rpc/RpcClient.js +42 -12
  136. package/esm/rpc/RpcManager.d.ts +8 -10
  137. package/esm/rpc/RpcManager.js +1 -1
  138. package/esm/rpc/RpcRegistry.d.ts +8 -2
  139. package/esm/rpc/RpcServer.d.ts +3 -1
  140. package/esm/rpc/RpcServer.js +19 -12
  141. package/esm/rpc/WebWorkerRpcDriver.d.ts +3 -3
  142. package/esm/rpc/WebWorkerRpcDriver.js +9 -47
  143. package/esm/rpc/byteBudget.d.ts +3 -5
  144. package/esm/rpc/byteBudget.js +4 -4
  145. package/esm/rpc/configSchema.d.ts +7 -21
  146. package/esm/rpc/coreRpcMethods.d.ts +1 -0
  147. package/esm/rpc/coreRpcMethods.js +1 -0
  148. package/esm/rpc/methods/CoreEncodeFeatures.d.ts +6 -5
  149. package/esm/rpc/methods/CoreEncodeFeatures.js +26 -31
  150. package/esm/rpc/methods/CoreGetEncodedFeature.d.ts +13 -0
  151. package/esm/rpc/methods/CoreGetEncodedFeature.js +31 -0
  152. package/esm/rpc/methods/CoreGetExportData.js +2 -2
  153. package/esm/rpc/methods/CoreGetFeatureDensity.js +2 -2
  154. package/esm/rpc/methods/CoreGetFeatures.js +2 -2
  155. package/esm/rpc/methods/CoreGetSequence.js +2 -2
  156. package/esm/rpc/methods/layerFeatures.d.ts +26 -0
  157. package/esm/rpc/methods/layerFeatures.js +40 -0
  158. package/esm/svg/SvgExport.js +3 -4
  159. package/esm/svg/SvgThemeProviders.d.ts +12 -0
  160. package/esm/svg/SvgThemeProviders.js +15 -0
  161. package/esm/svg/exportViewSvg.d.ts +32 -0
  162. package/esm/svg/exportViewSvg.js +13 -0
  163. package/esm/svg/normalizeSvgMarkup.d.ts +7 -0
  164. package/esm/svg/normalizeSvgMarkup.js +99 -0
  165. package/esm/svg/serializeSvg.d.ts +7 -0
  166. package/esm/svg/serializeSvg.js +11 -0
  167. package/esm/svg/svgReady.d.ts +8 -7
  168. package/esm/svg/svgReady.js +8 -7
  169. package/esm/svg/trackNames.d.ts +5 -5
  170. package/esm/svg/trackNames.js +6 -6
  171. package/esm/svg/wrapSvgExport.js +6 -74
  172. package/esm/ui/CascadingMenu.js +83 -86
  173. package/esm/ui/ErrorMessageStackTraceDialog.js +0 -5
  174. package/esm/ui/FileSelector/useInternetAccounts.d.ts +156 -96
  175. package/esm/ui/HoverMenu.d.ts +1 -2
  176. package/esm/ui/HoverMenu.js +6 -3
  177. package/esm/ui/JexlFilterDialog.d.ts +13 -10
  178. package/esm/ui/JexlFilterDialog.js +122 -49
  179. package/esm/ui/JexlFilterRowEditors.d.ts +15 -0
  180. package/esm/ui/JexlFilterRowEditors.js +90 -0
  181. package/esm/ui/LazyBaseTooltip.d.ts +4 -0
  182. package/esm/ui/LazyBaseTooltip.js +9 -0
  183. package/esm/ui/LoadingOverlay.js +3 -1
  184. package/esm/ui/MonospaceTextField.d.ts +2 -1
  185. package/esm/ui/MonospaceTextField.js +21 -19
  186. package/esm/ui/PaletteContext.d.ts +7 -9
  187. package/esm/ui/PaletteContext.js +24 -10
  188. package/esm/ui/RefNameAutocomplete/index.d.ts +1 -2
  189. package/esm/ui/RefNameAutocomplete/index.js +1 -1
  190. package/esm/ui/ScrollChrome.d.ts +6 -9
  191. package/esm/ui/ScrollChrome.js +5 -6
  192. package/esm/ui/ScrollEdgeShadow.d.ts +6 -9
  193. package/esm/ui/ScrollEdgeShadow.js +9 -24
  194. package/esm/ui/SettingsChangesTable.js +3 -3
  195. package/esm/ui/VerticalScrollbar.d.ts +13 -34
  196. package/esm/ui/VerticalScrollbar.js +29 -83
  197. package/esm/ui/ViewLoadingScreen.d.ts +2 -2
  198. package/esm/ui/ViewLoadingScreen.js +3 -3
  199. package/esm/ui/colorScale.d.ts +26 -1
  200. package/esm/ui/colorScale.js +28 -5
  201. package/esm/ui/colors.d.ts +49 -1
  202. package/esm/ui/colors.js +139 -4
  203. package/esm/ui/hoverBoxStyle.d.ts +14 -2
  204. package/esm/ui/hoverBoxStyle.js +17 -2
  205. package/esm/ui/index.d.ts +5 -3
  206. package/esm/ui/index.js +9 -7
  207. package/esm/ui/launchViewMenu.js +3 -3
  208. package/esm/ui/legendSpec.d.ts +2 -0
  209. package/esm/ui/legendSpec.js +3 -0
  210. package/esm/ui/palette.d.ts +0 -1
  211. package/esm/ui/palette.js +3 -27
  212. package/esm/ui/replaceViewAction.d.ts +1 -1
  213. package/esm/ui/replaceViewAction.js +1 -1
  214. package/esm/ui/theme.d.ts +1 -1
  215. package/esm/ui/theme.js +6 -40
  216. package/esm/ui/viewHeaderHeight.d.ts +1 -0
  217. package/esm/ui/viewHeaderHeight.js +1 -0
  218. package/esm/util/Base1DUtils.d.ts +1 -1
  219. package/esm/util/Base1DUtils.js +2 -2
  220. package/esm/util/SvgCanvas.d.ts +15 -13
  221. package/esm/util/SvgCanvas.js +72 -53
  222. package/esm/util/aborting.d.ts +39 -0
  223. package/esm/util/aborting.js +84 -0
  224. package/esm/util/adapterMetadata.d.ts +1 -1
  225. package/esm/util/adapterMetadata.js +6 -6
  226. package/esm/util/addAndShowTrack.d.ts +1 -4
  227. package/esm/util/addRelativeUris.d.ts +10 -2
  228. package/esm/util/addRelativeUris.js +22 -7
  229. package/esm/util/addTrackFromWidget.d.ts +2 -5
  230. package/esm/util/animationAllowed.d.ts +9 -0
  231. package/esm/util/animationAllowed.js +13 -0
  232. package/esm/util/applyRowResizeWheel.d.ts +10 -5
  233. package/esm/util/applyRowResizeWheel.js +10 -21
  234. package/esm/util/bandLayout.d.ts +4 -4
  235. package/esm/util/bandLayout.js +4 -4
  236. package/esm/util/bezierConnector.js +5 -4
  237. package/esm/util/bgzfWorkerPool.d.ts +20 -74
  238. package/esm/util/bgzfWorkerPool.js +20 -74
  239. package/esm/util/cachedSetup.d.ts +1 -1
  240. package/esm/util/cachedSetup.js +2 -2
  241. package/esm/util/categoricalField.d.ts +37 -0
  242. package/esm/util/categoricalField.js +52 -0
  243. package/esm/util/color/cssColorsLevel4.d.ts +1 -0
  244. package/esm/util/color/cssColorsLevel4.js +1 -0
  245. package/esm/util/color/index.d.ts +5 -3
  246. package/esm/util/color/index.js +7 -4
  247. package/esm/util/colorBits.d.ts +1 -2
  248. package/esm/util/colorBits.js +17 -39
  249. package/esm/util/colorRamp.d.ts +27 -1
  250. package/esm/util/colorRamp.js +56 -2
  251. package/esm/util/colorSchemes.d.ts +9 -0
  252. package/esm/util/colorSchemes.js +7 -0
  253. package/esm/util/{createStopTokenRotation.d.ts → createAbortRotation.d.ts} +11 -14
  254. package/esm/util/{createStopTokenRotation.js → createAbortRotation.js} +14 -26
  255. package/esm/util/cssColorParse.d.ts +15 -0
  256. package/esm/util/cssColorParse.js +53 -0
  257. package/esm/util/diagonalizeRegions.d.ts +2 -3
  258. package/esm/util/diagonalizeRegions.js +7 -12
  259. package/esm/util/expandLooseSearchIndex.d.ts +7 -0
  260. package/esm/util/expandLooseSearchIndex.js +25 -0
  261. package/esm/util/featureTransforms.d.ts +30 -3
  262. package/esm/util/featureTransforms.js +233 -36
  263. package/esm/util/fetchAndMaybeUnzip.js +5 -6
  264. package/esm/util/fetchContext.d.ts +5 -6
  265. package/esm/util/fetchContext.js +1 -1
  266. package/esm/util/fetchHub.d.ts +3 -1
  267. package/esm/util/fetchHub.js +2 -2
  268. package/esm/util/fetchSeq.d.ts +2 -3
  269. package/esm/util/fetchSeq.js +2 -2
  270. package/esm/util/fieldReader.d.ts +17 -0
  271. package/esm/util/fieldReader.js +62 -0
  272. package/esm/util/groupKeys.d.ts +75 -0
  273. package/esm/util/groupKeys.js +152 -0
  274. package/esm/util/highlights.d.ts +6 -4
  275. package/esm/util/highlights.js +12 -25
  276. package/esm/util/hooks.d.ts +1 -2
  277. package/esm/util/hooks.js +1 -2
  278. package/esm/util/index.d.ts +3 -3
  279. package/esm/util/index.js +4 -3
  280. package/esm/util/indexCandidates.js +1 -1
  281. package/esm/util/installFetch.d.ts +13 -10
  282. package/esm/util/installFetch.js +11 -10
  283. package/esm/util/installPrerequisiteFetch.d.ts +5 -3
  284. package/esm/util/installPrerequisiteFetch.js +3 -4
  285. package/esm/util/io/index.js +12 -12
  286. package/esm/util/isDataCurrent.d.ts +7 -5
  287. package/esm/util/isDataCurrent.js +9 -6
  288. package/esm/util/jexl.js +24 -21
  289. package/esm/util/jexlFilterRows.d.ts +89 -0
  290. package/esm/util/jexlFilterRows.js +252 -0
  291. package/esm/util/jexlFilters.d.ts +7 -5
  292. package/esm/util/jexlStrings.d.ts +3 -4
  293. package/esm/util/jexlStrings.js +2 -3
  294. package/esm/util/legendCandidates.d.ts +31 -27
  295. package/esm/util/legendCandidates.js +79 -53
  296. package/esm/util/localStorage.js +4 -4
  297. package/esm/util/markEncoding.d.ts +32 -16
  298. package/esm/util/markEncoding.js +177 -150
  299. package/esm/util/markEncodingTypes.d.ts +137 -66
  300. package/esm/util/mstUtils.d.ts +19 -22
  301. package/esm/util/mstUtils.js +19 -22
  302. package/esm/util/numericUtils.d.ts +7 -0
  303. package/esm/util/numericUtils.js +16 -0
  304. package/esm/util/numericValue.d.ts +14 -0
  305. package/esm/util/numericValue.js +34 -0
  306. package/esm/util/openFeatureWidget.js +1 -2
  307. package/esm/util/openViews.d.ts +1 -0
  308. package/esm/util/openViews.js +3 -3
  309. package/esm/util/parseLineByLine.d.ts +3 -4
  310. package/esm/util/parseLineByLine.js +7 -13
  311. package/esm/util/progress.d.ts +21 -21
  312. package/esm/util/progress.js +27 -26
  313. package/esm/util/renameRegions.d.ts +1 -2
  314. package/esm/util/renderToStaticMarkup.js +16 -16
  315. package/esm/util/rxjs.d.ts +7 -8
  316. package/esm/util/rxjs.js +12 -15
  317. package/esm/util/simpleFeature.d.ts +0 -1
  318. package/esm/util/svgColorProps.d.ts +11 -0
  319. package/esm/util/svgColorProps.js +28 -1
  320. package/esm/util/tabix.d.ts +3 -4
  321. package/esm/util/tabix.js +6 -7
  322. package/esm/util/thresholdScale.d.ts +54 -0
  323. package/esm/util/thresholdScale.js +112 -0
  324. package/esm/util/timeGate.d.ts +4 -5
  325. package/esm/util/timeGate.js +4 -5
  326. package/esm/util/trackConfigDelta.d.ts +22 -18
  327. package/esm/util/trackConfigDelta.js +40 -38
  328. package/esm/util/tracks.d.ts +27 -4
  329. package/esm/util/tracks.js +116 -43
  330. package/esm/util/translateTranscript.d.ts +44 -0
  331. package/esm/util/translateTranscript.js +102 -0
  332. package/esm/util/types/index.d.ts +19 -7
  333. package/esm/util/types/services.d.ts +1 -1
  334. package/esm/util/unknownSnapshotKeys.d.ts +15 -0
  335. package/esm/util/unknownSnapshotKeys.js +13 -0
  336. package/esm/util/useFeatureSequence.js +4 -4
  337. package/esm/util/useFetch.d.ts +3 -4
  338. package/esm/util/useFetch.js +5 -6
  339. package/esm/util/usePanelVirtualScroll.d.ts +7 -39
  340. package/esm/util/usePanelVirtualScroll.js +9 -40
  341. package/esm/util/useRowVirtualScroll.d.ts +6 -29
  342. package/esm/util/useRowVirtualScroll.js +8 -49
  343. package/esm/util/useVirtualScrollWheel.d.ts +20 -4
  344. package/esm/util/useVirtualScrollWheel.js +40 -84
  345. package/esm/util/viewHighlights.d.ts +3 -0
  346. package/esm/util/viewHighlights.js +5 -0
  347. package/esm/util/viewStatus.d.ts +24 -15
  348. package/esm/util/viewStatus.js +17 -0
  349. package/esm/util/withLaunchInput.d.ts +1 -1
  350. package/esm/util/withLaunchInput.js +0 -4
  351. package/package.json +26 -12
  352. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.d.ts +0 -80
  353. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.js +0 -583
  354. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.d.ts +0 -141
  355. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.js +0 -1116
  356. package/esm/ReExports/BaseFeatureDetails.d.ts +0 -1
  357. package/esm/ReExports/BaseFeatureDetails.js +0 -10
  358. package/esm/ReExports/barrelOnlyNames.d.ts +0 -5
  359. package/esm/ReExports/barrelOnlyNames.js +0 -63
  360. package/esm/ReExports/index.d.ts +0 -1
  361. package/esm/ReExports/index.js +0 -1
  362. package/esm/ReExports/publicTracks.d.ts +0 -1
  363. package/esm/ReExports/publicTracks.js +0 -14
  364. package/esm/ReExports/publicUi.d.ts +0 -4
  365. package/esm/ReExports/publicUi.js +0 -33
  366. package/esm/ReExports/publicUtil.d.ts +0 -1
  367. package/esm/ReExports/publicUtil.js +0 -32
  368. package/esm/ReExports/sharedModules.d.ts +0 -96
  369. package/esm/ReExports/sharedModules.js +0 -66
  370. package/esm/ReExports/workerNamespaceNames.d.ts +0 -11
  371. package/esm/ReExports/workerNamespaceNames.js +0 -275
  372. package/esm/pluggableElementTypes/models/HighlightsMixin.d.ts +0 -51
  373. package/esm/pluggableElementTypes/models/HighlightsMixin.js +0 -78
  374. package/esm/ui/highlightChipReveal.d.ts +0 -32
  375. package/esm/ui/highlightChipReveal.js +0 -39
  376. package/esm/util/adapterConfigKey.d.ts +0 -12
  377. package/esm/util/adapterConfigKey.js +0 -14
  378. package/esm/util/stopToken.d.ts +0 -212
  379. package/esm/util/stopToken.js +0 -438
@@ -0,0 +1,32 @@
1
+ import type React from 'react';
2
+ /** What every view's `exportSvg` accepts. A view with more extends it. */
3
+ export interface ViewExportSvgOptions {
4
+ rasterizeLayers?: boolean;
5
+ format?: 'svg' | 'png';
6
+ filename?: string;
7
+ /**
8
+ * Whether to hand the result to the browser's download path. Default true,
9
+ * which is the dialog. False returns the markup and writes nothing — the
10
+ * caller has somewhere of its own to put it, and a download it did not ask
11
+ * for would land beside that under a name it did not choose.
12
+ */
13
+ save?: boolean;
14
+ Wrapper?: React.FC<{
15
+ children: React.ReactNode;
16
+ }>;
17
+ /** a named theme; the session's active one when absent */
18
+ themeName?: string;
19
+ fontFamily?: string;
20
+ /**
21
+ * headless canvas factory for `rasterizeLayers` (jbrowse-img passes
22
+ * node-canvas); without it the raster path needs a DOM canvas
23
+ */
24
+ createCanvas?: (width: number, height: number) => HTMLCanvasElement;
25
+ }
26
+ /**
27
+ * The body of every view's `exportSvg` action: load the view's lazy
28
+ * `renderToSvg`, render, save unless `save: false`, and return the markup.
29
+ */
30
+ export declare function exportViewSvg<V, O extends ViewExportSvgOptions>(view: V, opts: O, load: () => Promise<{
31
+ renderToSvg: (view: V, opts: O) => Promise<string>;
32
+ }>): Promise<string>;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * The body of every view's `exportSvg` action: load the view's lazy
3
+ * `renderToSvg`, render, save unless `save: false`, and return the markup.
4
+ */
5
+ export async function exportViewSvg(view, opts, load) {
6
+ const { renderToSvg } = await load();
7
+ const html = await renderToSvg(view, opts);
8
+ if (opts.save !== false) {
9
+ const { saveSvgAsImage } = await import('./saveSvgAsImage.js');
10
+ await saveSvgAsImage(html, opts);
11
+ }
12
+ return html;
13
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * The markup rules an SVG file has to meet that a React render into an HTML
3
+ * container does not: XML entities only (HTML serialization writes U+00A0 as
4
+ * `&nbsp;`, which XML does not define, so one no-break space in a feature label
5
+ * made the whole file unparsable), SVG 1.1 colors, and rounded numbers.
6
+ */
7
+ export declare function normalizeSvgMarkup(html: string): string;
@@ -0,0 +1,99 @@
1
+ import { splitPaintAlpha } from '../util/svgColorProps.js';
2
+ // Coordinates computed as bp/bpPerPx land in attributes as long floats
3
+ // (`-32.4816`) or floating-point noise (`242.23839999999998`), bloating exports
4
+ // with sub-pixel precision no renderer needs. Round numbers inside a fixed
5
+ // whitelist of numeric attributes, so a track label or id that happens to look
6
+ // numeric is never a candidate for rewriting. Geometry gets 2 decimals
7
+ // (sub-pixel); opacity keeps 3 so a faint 0.01 mark can't collapse to 0.
8
+ const COORD_ATTRS = [
9
+ 'x',
10
+ 'y',
11
+ 'x1',
12
+ 'y1',
13
+ 'x2',
14
+ 'y2',
15
+ 'cx',
16
+ 'cy',
17
+ 'r',
18
+ 'rx',
19
+ 'ry',
20
+ 'dx',
21
+ 'dy',
22
+ 'width',
23
+ 'height',
24
+ 'd',
25
+ 'points',
26
+ 'transform',
27
+ 'gradientTransform',
28
+ 'offset',
29
+ 'viewBox',
30
+ 'font-size',
31
+ 'stroke-width',
32
+ 'stroke-dashoffset',
33
+ 'stroke-dasharray',
34
+ ];
35
+ const OPACITY_ATTRS = [
36
+ 'opacity',
37
+ 'fill-opacity',
38
+ 'stroke-opacity',
39
+ 'stop-opacity',
40
+ 'flood-opacity',
41
+ ];
42
+ function makeRounder(attrs, digits) {
43
+ const re = new RegExp(`\\b(${attrs.join('|')})="([^"]*)"`, 'g');
44
+ return (svg) => svg.replaceAll(re, (_, name, value) => {
45
+ const rounded = value.replaceAll(/-?\d+\.\d{3,}(?:e-?\d+)?/gi, n => String(Number.parseFloat(Number(n).toFixed(digits))));
46
+ return `${name}="${rounded}"`;
47
+ });
48
+ }
49
+ const roundCoords = makeRounder(COORD_ATTRS, 2);
50
+ const roundOpacity = makeRounder(OPACITY_ATTRS, 3);
51
+ const OPACITY_OF = {
52
+ fill: 'fill-opacity',
53
+ stroke: 'stroke-opacity',
54
+ 'stop-color': 'stop-opacity',
55
+ 'flood-color': 'flood-opacity',
56
+ };
57
+ // a start tag, attribute by attribute, so a `>` inside a quoted value (which
58
+ // HTML serialization leaves unescaped) cannot end it early
59
+ const START_TAG = /<[a-zA-Z][^\s/>]*(?:\s+[^\s"'/=>]+="[^"]*")*\s*\/?>/g;
60
+ const PAINT_ATTR = /\s(fill|stroke|stop-color|flood-color)="([^"]*)"/g;
61
+ const MAY_NEED_SPLIT = /(?:fill|stroke|stop-color|flood-color)="(?:rgba|hsl|#[\da-f]{4}"|#[\da-f]{8}"|transparent)/i;
62
+ // A JSX color reaches the file as React wrote it, and theme palette entries are
63
+ // routinely `rgba()` (`divider`, `text.secondary`) — see `splitPaintAlpha` for
64
+ // why that can't stay. Scoped to one start tag so an alpha folds into an
65
+ // opacity attribute the element already carries instead of duplicating it,
66
+ // which would not parse as XML.
67
+ function splitTagPaintAlpha(tag) {
68
+ const alphas = [];
69
+ let out = tag.replaceAll(PAINT_ATTR, (whole, name, value) => {
70
+ const split = splitPaintAlpha(value);
71
+ if (!split) {
72
+ return whole;
73
+ }
74
+ if (split.opacity < 1) {
75
+ alphas.push([OPACITY_OF[name], split.opacity]);
76
+ }
77
+ return ` ${name}="${split.color}"`;
78
+ });
79
+ for (const [opacityName, alpha] of alphas) {
80
+ const existing = new RegExp(`\\s${opacityName}="([^"]*)"`);
81
+ out = existing.test(out)
82
+ ? out.replace(existing, (_, v) => ` ${opacityName}="${Number(v) * alpha}"`)
83
+ : out.replace(/\s*(\/?>)$/, ` ${opacityName}="${alpha}"$1`);
84
+ }
85
+ return out;
86
+ }
87
+ /**
88
+ * The markup rules an SVG file has to meet that a React render into an HTML
89
+ * container does not: XML entities only (HTML serialization writes U+00A0 as
90
+ * `&nbsp;`, which XML does not define, so one no-break space in a feature label
91
+ * made the whole file unparsable), SVG 1.1 colors, and rounded numbers.
92
+ */
93
+ export function normalizeSvgMarkup(html) {
94
+ const xml = html.replaceAll('&nbsp;', '&#160;');
95
+ const split = MAY_NEED_SPLIT.test(xml)
96
+ ? xml.replaceAll(START_TAG, splitTagPaintAlpha)
97
+ : xml;
98
+ return roundOpacity(roundCoords(split));
99
+ }
@@ -0,0 +1,7 @@
1
+ import type React from 'react';
2
+ export { normalizeSvgMarkup } from './normalizeSvgMarkup.ts';
3
+ /**
4
+ * Serialize one standalone SVG document: its own clip-id numbering run (see
5
+ * `withFreshSvgClipIds`) and the file rules in `normalizeSvgMarkup`.
6
+ */
7
+ export declare function serializeSvg(node: React.ReactElement): string;
@@ -0,0 +1,11 @@
1
+ import { withFreshSvgClipIds } from '../util/SvgCanvas.js';
2
+ import { renderToStaticMarkup } from '../util/renderToStaticMarkup.js';
3
+ import { normalizeSvgMarkup } from './normalizeSvgMarkup.js';
4
+ export { normalizeSvgMarkup } from './normalizeSvgMarkup.js';
5
+ /**
6
+ * Serialize one standalone SVG document: its own clip-id numbering run (see
7
+ * `withFreshSvgClipIds`) and the file rules in `normalizeSvgMarkup`.
8
+ */
9
+ export function serializeSvg(node) {
10
+ return normalizeSvgMarkup(withFreshSvgClipIds(() => renderToStaticMarkup(node)));
11
+ }
@@ -37,9 +37,9 @@ export interface SvgReadyTerminals {
37
37
  * data is current for what is on screen, or the fetch reached a terminal state.
38
38
  *
39
39
  * Single-sourced for the same reason as `computeDisplayPhase`: every display
40
- * family expresses freshness differently — spatial coverage (per-region),
41
- * viewport-snapshot compare (global), signature compare (arc / dotplot /
42
- * synteny) — but the *policy* wrapping it is identical, and each of the five
40
+ * family expresses freshness differently — spatial coverage (per-region), a
41
+ * signature compare (global, dotplot, synteny) — but the *policy* wrapping it
42
+ * is identical, and each of the five
43
43
  * hand-written copies this replaced was one place to forget a terminal and hang
44
44
  * the export, or to forget freshness and capture a stale viewport (both have
45
45
  * shipped; see agent-docs/reference/SVG_EXPORT.md).
@@ -55,10 +55,11 @@ export declare function computeSvgReady({ error, regionTooLarge, extraTerminal,
55
55
  * Off-screen renderers (SVG export, headless jbrowse-img) must wait until the
56
56
  * display reaches a terminal state before reading its data. That whole policy
57
57
  * lives in `svgReady`; this is the one shared way to await it, so renderers
58
- * never re-inline `data != null || error || …`. No time bound: `svgReady` is a
59
- * terminal state (data loaded, or error / too-large), so it resolves once the
60
- * fetch it observes settles. If a throwing `svgReady` getter rejects the wait,
61
- * that error propagates faithfully rather than being masked.
58
+ * never re-inline `data != null || error || …`. `svgReady` is a terminal state
59
+ * (data loaded, or error / too-large / canceled), so it resolves once the fetch
60
+ * it observes settles; the half-hour `timeoutMs` is only a backstop for a gate
61
+ * that cannot converge. If a throwing `svgReady` getter rejects the wait, that
62
+ * error propagates faithfully rather than being masked.
62
63
  *
63
64
  * It then fails the export if the terminal it settled on was the error
64
65
  * (`throwOnExportErrors`, below, for why that is fatal), making this the exact
@@ -17,9 +17,9 @@ const SVG_READY_TIMEOUT_MS = 1_800_000;
17
17
  * data is current for what is on screen, or the fetch reached a terminal state.
18
18
  *
19
19
  * Single-sourced for the same reason as `computeDisplayPhase`: every display
20
- * family expresses freshness differently — spatial coverage (per-region),
21
- * viewport-snapshot compare (global), signature compare (arc / dotplot /
22
- * synteny) — but the *policy* wrapping it is identical, and each of the five
20
+ * family expresses freshness differently — spatial coverage (per-region), a
21
+ * signature compare (global, dotplot, synteny) — but the *policy* wrapping it
22
+ * is identical, and each of the five
23
23
  * hand-written copies this replaced was one place to forget a terminal and hang
24
24
  * the export, or to forget freshness and capture a stale viewport (both have
25
25
  * shipped; see agent-docs/reference/SVG_EXPORT.md).
@@ -37,10 +37,11 @@ export function computeSvgReady({ error, regionTooLarge, extraTerminal, fetchCan
37
37
  * Off-screen renderers (SVG export, headless jbrowse-img) must wait until the
38
38
  * display reaches a terminal state before reading its data. That whole policy
39
39
  * lives in `svgReady`; this is the one shared way to await it, so renderers
40
- * never re-inline `data != null || error || …`. No time bound: `svgReady` is a
41
- * terminal state (data loaded, or error / too-large), so it resolves once the
42
- * fetch it observes settles. If a throwing `svgReady` getter rejects the wait,
43
- * that error propagates faithfully rather than being masked.
40
+ * never re-inline `data != null || error || …`. `svgReady` is a terminal state
41
+ * (data loaded, or error / too-large / canceled), so it resolves once the fetch
42
+ * it observes settles; the half-hour `timeoutMs` is only a backstop for a gate
43
+ * that cannot converge. If a throwing `svgReady` getter rejects the wait, that
44
+ * error propagates faithfully rather than being masked.
44
45
  *
45
46
  * It then fails the export if the terminal it settled on was the error
46
47
  * (`throwOnExportErrors`, below, for why that is fatal), making this the exact
@@ -12,10 +12,10 @@ export declare function svgTrackName(track: {
12
12
  configuration: AnyConfigurationModel;
13
13
  }, session: TrackCatalog): string;
14
14
  /**
15
- * Tell the user which visible tracks the export left out because their display
16
- * type implements no `renderSvg`. Called once per export, after the renders —
17
- * the stacked views flatten every row's `skippedTracks` into one call rather
18
- * than notifying per row.
15
+ * Tell the user which visible tracks the export left out, by default because
16
+ * their display type implements no `renderSvg`. Called once per reason per
17
+ * export, after the renders — the stacked views flatten every row's
18
+ * `skippedTracks` into one call rather than notifying per row.
19
19
  *
20
20
  * Skipping is deliberate (see `SvgExportTrack.renderSvg`), so this is
21
21
  * informational rather than an error. But it is not silent: a figure that is
@@ -24,4 +24,4 @@ export declare function svgTrackName(track: {
24
24
  */
25
25
  export declare function notifySkippedSvgTracks(session: NotificationSink & TrackCatalog, skipped: {
26
26
  configuration: AnyConfigurationModel;
27
- }[]): void;
27
+ }[], reason?: string): void;
@@ -12,20 +12,20 @@ export function svgTrackName(track, session) {
12
12
  return coarseStripHTML(getTrackName(track.configuration, session));
13
13
  }
14
14
  /**
15
- * Tell the user which visible tracks the export left out because their display
16
- * type implements no `renderSvg`. Called once per export, after the renders —
17
- * the stacked views flatten every row's `skippedTracks` into one call rather
18
- * than notifying per row.
15
+ * Tell the user which visible tracks the export left out, by default because
16
+ * their display type implements no `renderSvg`. Called once per reason per
17
+ * export, after the renders — the stacked views flatten every row's
18
+ * `skippedTracks` into one call rather than notifying per row.
19
19
  *
20
20
  * Skipping is deliberate (see `SvgExportTrack.renderSvg`), so this is
21
21
  * informational rather than an error. But it is not silent: a figure that is
22
22
  * quietly short a track is worse than one whose author was told why, and the
23
23
  * reader of the file has no way to tell the difference afterwards.
24
24
  */
25
- export function notifySkippedSvgTracks(session, skipped) {
25
+ export function notifySkippedSvgTracks(session, skipped, reason = `${skipped.length === 1 ? 'Its display type does' : 'Their display types do'} not support SVG export.`) {
26
26
  if (skipped.length === 0) {
27
27
  return;
28
28
  }
29
29
  const names = skipped.map(t => svgTrackName(t, session)).join(', ');
30
- session.notify(`Not included in the SVG: ${names}. ${skipped.length === 1 ? 'Its display type does' : 'Their display types do'} not support SVG export.`, 'info');
30
+ session.notify(`Not included in the SVG: ${names}. ${reason}`, 'info');
31
31
  }
@@ -1,78 +1,10 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { ThemeProvider } from '@mui/material';
3
- import { StyleThemeProvider } from '../ui/PaletteContext.js';
4
- import { resolveStyleTheme } from '../ui/styleTheme.js';
5
- import { createJBrowseTheme } from '../ui/theme.js';
6
- import { resetSvgClipIds } from '../util/SvgCanvas.js';
7
- import { renderToStaticMarkup } from '../util/renderToStaticMarkup.js';
8
2
  import { SVGExportRoot } from './SvgExport.js';
9
- // Coordinates computed as bp/bpPerPx land in attributes as long floats
10
- // (`-32.4816`) or floating-point noise (`242.23839999999998`), bloating exports
11
- // with sub-pixel precision no renderer needs. Round numbers inside a fixed
12
- // whitelist of numeric attributes, so a track label or id that happens to look
13
- // numeric is never a candidate for rewriting. Geometry gets 2 decimals
14
- // (sub-pixel); opacity keeps 3 so a faint 0.01 mark can't collapse to 0.
15
- const COORD_ATTRS = [
16
- 'x',
17
- 'y',
18
- 'x1',
19
- 'y1',
20
- 'x2',
21
- 'y2',
22
- 'cx',
23
- 'cy',
24
- 'r',
25
- 'rx',
26
- 'ry',
27
- 'dx',
28
- 'dy',
29
- 'width',
30
- 'height',
31
- 'd',
32
- 'points',
33
- 'transform',
34
- 'gradientTransform',
35
- 'offset',
36
- 'viewBox',
37
- 'font-size',
38
- 'stroke-width',
39
- 'stroke-dashoffset',
40
- 'stroke-dasharray',
41
- ];
42
- const OPACITY_ATTRS = [
43
- 'opacity',
44
- 'fill-opacity',
45
- 'stroke-opacity',
46
- 'stop-opacity',
47
- 'flood-opacity',
48
- ];
49
- function makeRounder(attrs, digits) {
50
- const re = new RegExp(`\\b(${attrs.join('|')})="([^"]*)"`, 'g');
51
- return (svg) => svg.replaceAll(re, (_, name, value) => {
52
- const rounded = value.replaceAll(/-?\d+\.\d{3,}(?:e-?\d+)?/gi, n => String(Number.parseFloat(Number(n).toFixed(digits))));
53
- return `${name}="${rounded}"`;
54
- });
55
- }
56
- const roundCoords = makeRounder(COORD_ATTRS, 2);
57
- const roundOpacity = makeRounder(OPACITY_ATTRS, 3);
58
- function roundSvgNumbers(svg) {
59
- return roundOpacity(roundCoords(svg));
60
- }
61
- // The identical tail every view's `renderToSvg` ends in: resolve the export
62
- // theme into a provider, apply the caller-supplied Wrapper, wrap the content in
63
- // the root <svg>, and serialize to a markup string. Callers keep their own
64
- // layout math and children — only this boilerplate lives here.
3
+ import { SvgThemeProviders } from './SvgThemeProviders.js';
4
+ import { serializeSvg } from './serializeSvg.js';
5
+ // The identical tail every view's `renderToSvg` ends in: the export theme's
6
+ // providers, the caller-supplied Wrapper, the root <svg>, and serialization to
7
+ // a file's markup. Callers keep their own layout math and children.
65
8
  export function wrapSvgExport({ theme, width, height, margin, fontFamily, Wrapper = ({ children }) => children, children, }) {
66
- // One document, one clip-id numbering run. The counter SvgCanvas draws from is
67
- // document-global because SVG ids are, so left alone it also spans documents
68
- // and numbers each export from wherever the last one stopped — see
69
- // resetSvgClipIds. This is the only place that can reset it: the render below
70
- // is synchronous, so it is the one moment a whole document's ids are minted
71
- // with no other export able to interleave.
72
- resetSvgClipIds();
73
- // Both providers, from the same options — the export renders outside every
74
- // React tree the app mounted, so a `makeStyles` component here would
75
- // otherwise style itself from the *default* style theme and quietly ignore
76
- // the theme the user picked in the export dialog.
77
- return roundSvgNumbers(renderToStaticMarkup(_jsx(ThemeProvider, { theme: createJBrowseTheme(theme), children: _jsx(StyleThemeProvider, { theme: resolveStyleTheme({ configTheme: theme }), children: _jsx(Wrapper, { children: _jsx(SVGExportRoot, { width: width, height: height, margin: margin, fontFamily: fontFamily, children: children }) }) }) })));
9
+ return serializeSvg(_jsx(SvgThemeProviders, { theme: theme, children: _jsx(Wrapper, { children: _jsx(SVGExportRoot, { width: width, height: height, margin: margin, fontFamily: fontFamily, children: children }) }) }));
78
10
  }