@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.
- package/README.md +1709 -390
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +5 -5
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +3 -5
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +34 -29
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCard.js +1 -4
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.d.ts +11 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.js +37 -14
- package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.d.ts +1 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.js +15 -31
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.d.ts +4 -3
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.js +12 -25
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.d.ts +11 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.js +11 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.d.ts +8 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.js +24 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Formatter.js +6 -4
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.d.ts +4 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.js +17 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +5 -3
- package/esm/BaseFeatureWidget/BaseFeatureDetail/index.d.ts +6 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/index.js +7 -18
- package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.d.ts +16 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.js +49 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/util.d.ts +0 -8
- package/esm/BaseFeatureWidget/BaseFeatureDetail/util.js +6 -29
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceContents.js +7 -34
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeaturePanel.d.ts +2 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceName.js +2 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.js +3 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.d.ts +12 -0
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.js +12 -5
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/useSequenceData.js +8 -5
- package/esm/BaseFeatureWidget/configSchema.d.ts +1 -1
- package/esm/BaseFeatureWidget/formatDetails.d.ts +13 -29
- package/esm/BaseFeatureWidget/formatDetails.js +62 -83
- package/esm/BaseFeatureWidget/index.d.ts +2 -1
- package/esm/BaseFeatureWidget/stateModelFactory.d.ts +42 -29
- package/esm/BaseFeatureWidget/stateModelFactory.js +98 -98
- package/esm/BaseFeatureWidget/types.d.ts +12 -6
- package/esm/BaseFeatureWidget/util.d.ts +0 -10
- package/esm/BaseFeatureWidget/util.js +0 -17
- package/esm/CorePlugin.js +34 -3
- package/esm/PluginLoader.d.ts +24 -13
- package/esm/PluginLoader.js +167 -51
- package/esm/PluginManager.d.ts +130 -24
- package/esm/PluginManager.js +180 -32
- package/esm/ReExports/MuiDataGridReExports.d.ts +1 -0
- package/esm/ReExports/MuiDataGridReExports.js +2 -2
- package/esm/ReExports/coreModules.generated.d.ts +2 -0
- package/esm/ReExports/coreModules.generated.js +530 -0
- package/esm/ReExports/coreWorkerModules.generated.d.ts +2 -0
- package/esm/ReExports/coreWorkerModules.generated.js +490 -0
- package/esm/ReExports/frameworkModules.d.ts +2 -0
- package/esm/ReExports/frameworkModules.js +68 -0
- package/esm/ReExports/frameworkShared.d.ts +12 -0
- package/esm/ReExports/frameworkShared.js +16 -0
- package/esm/ReExports/frameworkWorkerModules.generated.d.ts +2 -0
- package/esm/ReExports/frameworkWorkerModules.generated.js +130 -0
- package/esm/ReExports/list.js +528 -79
- package/esm/ReExports/modules.d.ts +1 -1
- package/esm/ReExports/modules.js +10 -165
- package/esm/ReExports/registry.d.ts +1 -0
- package/esm/ReExports/registry.js +23 -5
- package/esm/ReExports/uiStub.d.ts +3 -0
- package/esm/ReExports/uiStub.js +33 -0
- package/esm/ReExports/workerModules.d.ts +2 -0
- package/esm/ReExports/workerModules.js +11 -0
- package/esm/TextSearch/TextSearchManager.d.ts +27 -13
- package/esm/TextSearch/TextSearchManager.js +77 -36
- package/esm/TextSearch/places.d.ts +12 -0
- package/esm/TextSearch/places.js +94 -0
- package/esm/assemblyManager/assembly.d.ts +21 -19
- package/esm/assemblyManager/assembly.js +28 -26
- package/esm/assemblyManager/assemblyAdapters.d.ts +1 -1
- package/esm/assemblyManager/assemblyAdapters.js +8 -2
- package/esm/assemblyManager/assemblyConfigSchema.d.ts +31 -90
- package/esm/assemblyManager/assemblyConfigSchema.js +35 -47
- package/esm/assemblyManager/assemblyManager.d.ts +35 -180
- package/esm/assemblyManager/assemblyManager.js +47 -51
- package/esm/assemblyManager/expandAssemblyConfigShorthand.d.ts +25 -18
- package/esm/assemblyManager/expandAssemblyConfigShorthand.js +78 -49
- package/esm/assemblyManager/geneticCodes.js +2 -5
- package/esm/assemblyManager/getSequenceAdapterConfig.d.ts +10 -0
- package/esm/assemblyManager/getSequenceAdapterConfig.js +10 -0
- package/esm/assemblyManager/indexAssemblyNames.d.ts +9 -0
- package/esm/assemblyManager/indexAssemblyNames.js +22 -0
- package/esm/assemblyManager/loadRefNameMap.d.ts +1 -1
- package/esm/assemblyManager/loadRefNameMap.js +4 -9
- package/esm/assemblyManager/refNameMapKey.d.ts +7 -0
- package/esm/assemblyManager/refNameMapKey.js +12 -0
- package/esm/checkPlugins.d.ts +2 -0
- package/esm/checkPlugins.js +38 -17
- package/esm/configuration/bamIndexFields.d.ts +49 -0
- package/esm/configuration/bamIndexFields.js +41 -0
- package/esm/configuration/configurationSchema.d.ts +101 -71
- package/esm/configuration/configurationSchema.js +207 -134
- package/esm/configuration/configurationSchemaUnion.d.ts +39 -0
- package/esm/configuration/configurationSchemaUnion.js +56 -0
- package/esm/configuration/configurationSlot.d.ts +150 -60
- package/esm/configuration/configurationSlot.js +103 -75
- package/esm/configuration/fillLocations.d.ts +14 -0
- package/esm/configuration/fillLocations.js +14 -0
- package/esm/configuration/formatAboutConfigSchema.d.ts +7 -21
- package/esm/configuration/formatDetailsConfigSchema.d.ts +11 -37
- package/esm/configuration/formatDetailsConfigSchema.js +10 -13
- package/esm/configuration/fullConfSnapshot.d.ts +4 -19
- package/esm/configuration/fullConfSnapshot.js +30 -52
- package/esm/configuration/getConf.d.ts +45 -41
- package/esm/configuration/getConf.js +111 -44
- package/esm/configuration/index.d.ts +26 -11
- package/esm/configuration/index.js +16 -7
- package/esm/configuration/indexType.d.ts +26 -0
- package/esm/configuration/indexType.js +38 -0
- package/esm/configuration/mergeFormatCallbacks.d.ts +6 -7
- package/esm/configuration/mergeFormatCallbacks.js +13 -10
- package/esm/configuration/plot.d.ts +61 -0
- package/esm/configuration/plot.js +142 -0
- package/esm/configuration/readConfObject.d.ts +2 -24
- package/esm/configuration/readConfObject.js +20 -63
- package/esm/configuration/requirements.d.ts +37 -0
- package/esm/configuration/requirements.js +88 -0
- package/esm/configuration/schemaRegistry.d.ts +32 -15
- package/esm/configuration/schemaRegistry.js +33 -35
- package/esm/configuration/schemaTypes.d.ts +21 -5
- package/esm/configuration/schemaTypes.js +66 -55
- package/esm/configuration/slotFacade.d.ts +12 -29
- package/esm/configuration/slotFacade.js +44 -23
- package/esm/configuration/snapshotPreprocess.d.ts +43 -0
- package/esm/configuration/snapshotPreprocess.js +161 -0
- package/esm/configuration/tabixIndexFields.d.ts +30 -4
- package/esm/configuration/tabixIndexFields.js +21 -4
- package/esm/configuration/tabixShorthand.d.ts +34 -17
- package/esm/configuration/tabixShorthand.js +49 -22
- package/esm/configuration/types.d.ts +182 -43
- package/esm/configuration/uriShorthand.d.ts +9 -0
- package/esm/configuration/uriShorthand.js +16 -0
- package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +13 -19
- package/esm/data_adapters/BaseAdapter/BaseAdapter.js +12 -19
- package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +40 -2
- package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +68 -5
- package/esm/data_adapters/BaseAdapter/featureDensity.d.ts +40 -0
- package/esm/data_adapters/BaseAdapter/featureDensity.js +31 -0
- package/esm/data_adapters/BaseAdapter/index.d.ts +23 -3
- package/esm/data_adapters/BaseAdapter/index.js +1 -0
- package/esm/data_adapters/BaseAdapter/rowSources.d.ts +37 -0
- package/esm/data_adapters/BaseAdapter/rowSources.js +7 -0
- package/esm/data_adapters/BaseAdapter/stats.d.ts +33 -1
- package/esm/data_adapters/BaseAdapter/stats.js +52 -13
- package/esm/data_adapters/BaseAdapter/types.d.ts +8 -12
- package/esm/data_adapters/BaseAdapter/zoomRange.d.ts +10 -0
- package/esm/data_adapters/CytobandAdapter/CytobandAdapter.js +1 -1
- package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +7 -11
- package/esm/data_adapters/CytobandAdapter/configSchema.js +3 -17
- package/esm/data_adapters/dataAdapterCache.d.ts +19 -2
- package/esm/data_adapters/dataAdapterCache.js +44 -10
- package/esm/data_adapters/getFeatureAdapter.d.ts +6 -4
- package/esm/data_adapters/getFeatureAdapter.js +8 -8
- package/esm/data_adapters/getSequenceSubAdapter.d.ts +7 -9
- package/esm/data_adapters/getSequenceSubAdapter.js +8 -10
- package/esm/pluggableElementTypes/AdapterType.d.ts +8 -8
- package/esm/pluggableElementTypes/AdapterType.js +1 -1
- package/esm/pluggableElementTypes/DisplayType.d.ts +53 -16
- package/esm/pluggableElementTypes/DisplayType.js +28 -12
- package/esm/pluggableElementTypes/LazyStateModelElement.d.ts +32 -0
- package/esm/pluggableElementTypes/LazyStateModelElement.js +77 -0
- package/esm/pluggableElementTypes/PluggableElementBase.d.ts +3 -5
- package/esm/pluggableElementTypes/PluggableElementBase.js +3 -5
- package/esm/pluggableElementTypes/RpcMethodType.d.ts +11 -1
- package/esm/pluggableElementTypes/RpcMethodType.js +25 -9
- package/esm/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.d.ts +1 -2
- package/esm/pluggableElementTypes/TextSearchAdapterType.d.ts +7 -7
- package/esm/pluggableElementTypes/ViewType.d.ts +20 -4
- package/esm/pluggableElementTypes/ViewType.js +32 -4
- package/esm/pluggableElementTypes/WidgetType.d.ts +6 -0
- package/esm/pluggableElementTypes/WidgetType.js +6 -0
- package/esm/pluggableElementTypes/addMenuItems.d.ts +3 -2
- package/esm/pluggableElementTypes/extendElementType.d.ts +1 -2
- package/esm/pluggableElementTypes/extendElementType.js +9 -5
- package/esm/pluggableElementTypes/index.d.ts +2 -1
- package/esm/pluggableElementTypes/index.js +2 -9
- package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +19 -9
- package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +122 -28
- package/esm/pluggableElementTypes/models/BaseDisplayModel.js +155 -11
- package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +65 -16
- package/esm/pluggableElementTypes/models/BaseTrackModel.js +179 -117
- package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +87 -18
- package/esm/pluggableElementTypes/models/BaseViewModel.js +54 -11
- package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +26 -16
- package/esm/pluggableElementTypes/models/assertDisplayContract.d.ts +15 -11
- package/esm/pluggableElementTypes/models/assertDisplayContract.js +25 -32
- package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +22 -18
- package/esm/pluggableElementTypes/models/baseConnectionConfig.js +5 -5
- package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +26 -31
- package/esm/pluggableElementTypes/models/baseTrackConfig.d.ts +108 -147
- package/esm/pluggableElementTypes/models/baseTrackConfig.js +96 -73
- package/esm/pluggableElementTypes/models/components/SaveTrackData.js +4 -6
- package/esm/pluggableElementTypes/models/components/fetchTrackData.d.ts +3 -4
- package/esm/pluggableElementTypes/models/components/fetchTrackData.js +3 -3
- package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +23 -13
- package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +80 -48
- package/esm/pluggableElementTypes/models/index.d.ts +2 -3
- package/esm/pluggableElementTypes/models/index.js +2 -3
- package/esm/pluggableElementTypes/models/migrateTrackConfig.d.ts +15 -1
- package/esm/pluggableElementTypes/models/migrateTrackConfig.js +85 -25
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.d.ts +4 -3
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.js +141 -19
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/types.d.ts +3 -3
- package/esm/pluginDefinitions.d.ts +34 -7
- package/esm/pluginDefinitions.js +54 -20
- package/esm/rpc/BaseRpcDriver.d.ts +2 -2
- package/esm/rpc/BaseRpcDriver.js +25 -30
- package/esm/rpc/MainThreadRpcDriver.d.ts +2 -2
- package/esm/rpc/MainThreadRpcDriver.js +13 -8
- package/esm/rpc/RpcClient.d.ts +18 -6
- package/esm/rpc/RpcClient.js +51 -16
- package/esm/rpc/RpcManager.d.ts +14 -10
- package/esm/rpc/RpcManager.js +11 -1
- package/esm/rpc/RpcRegistry.d.ts +40 -7
- package/esm/rpc/RpcServer.d.ts +3 -1
- package/esm/rpc/RpcServer.js +19 -12
- package/esm/rpc/WebWorkerRpcDriver.d.ts +11 -4
- package/esm/rpc/WebWorkerRpcDriver.js +64 -68
- package/esm/rpc/byteBudget.d.ts +20 -5
- package/esm/rpc/byteBudget.js +16 -5
- package/esm/rpc/configSchema.d.ts +7 -21
- package/esm/rpc/coreRpcMethods.d.ts +4 -0
- package/esm/rpc/coreRpcMethods.js +4 -0
- package/esm/rpc/methods/CoreGetEncodedFeature.d.ts +13 -0
- package/esm/rpc/methods/CoreGetEncodedFeature.js +32 -0
- package/esm/rpc/methods/CoreGetEncodedLayers.d.ts +16 -0
- package/esm/rpc/methods/CoreGetEncodedLayers.js +59 -0
- package/esm/rpc/methods/CoreGetExportData.js +3 -4
- package/esm/rpc/methods/CoreGetFeatureDensity.d.ts +11 -0
- package/esm/rpc/methods/CoreGetFeatureDensity.js +22 -0
- package/esm/rpc/methods/CoreGetFeatures.js +3 -5
- package/esm/rpc/methods/CoreGetRefNames.js +2 -12
- package/esm/rpc/methods/CoreGetRegionByteEstimate.js +1 -1
- package/esm/rpc/methods/CoreGetSequence.js +2 -2
- package/esm/rpc/methods/CoreLoadAdapterCode.d.ts +13 -0
- package/esm/rpc/methods/CoreLoadAdapterCode.js +16 -0
- package/esm/rpc/methods/layerFeatures.d.ts +33 -0
- package/esm/rpc/methods/layerFeatures.js +29 -0
- package/esm/svg/SvgExport.js +6 -7
- package/esm/svg/SvgThemeProviders.d.ts +12 -0
- package/esm/svg/SvgThemeProviders.js +15 -0
- package/esm/svg/exportViewSvg.d.ts +28 -0
- package/esm/svg/exportViewSvg.js +13 -0
- package/esm/svg/normalizeSvgMarkup.d.ts +7 -0
- package/esm/svg/normalizeSvgMarkup.js +99 -0
- package/esm/svg/serializeSvg.d.ts +7 -0
- package/esm/svg/serializeSvg.js +11 -0
- package/esm/svg/svgId.d.ts +1 -1
- package/esm/svg/svgId.js +1 -1
- package/esm/svg/svgReady.d.ts +9 -7
- package/esm/svg/svgReady.js +8 -7
- package/esm/svg/trackNames.d.ts +7 -5
- package/esm/svg/trackNames.js +12 -9
- package/esm/svg/wrapSvgExport.js +6 -74
- package/esm/ui/AddCustomPluginDialog.js +3 -8
- package/esm/ui/AppReadyMarker.d.ts +45 -0
- package/esm/ui/AppReadyMarker.js +89 -0
- package/esm/ui/BaseExportSvgDialog.d.ts +1 -1
- package/esm/ui/CascadingMenu.js +181 -104
- package/esm/ui/DropDownMenu.js +2 -1
- package/esm/ui/ErrorBanner.js +1 -1
- package/esm/ui/ErrorBoundary.d.ts +2 -2
- package/esm/ui/ErrorMessageStackTraceContents.js +2 -1
- package/esm/ui/ErrorMessageStackTraceDialog.js +5 -11
- package/esm/ui/ExportSvgDialog.d.ts +1 -1
- package/esm/ui/FileDropZone.js +2 -1
- package/esm/ui/FileSelector/useInternetAccounts.d.ts +156 -96
- package/esm/ui/HoverMenu.d.ts +1 -2
- package/esm/ui/HoverMenu.js +6 -3
- package/esm/ui/JexlFilterDialog.d.ts +13 -10
- package/esm/ui/JexlFilterDialog.js +122 -50
- package/esm/ui/JexlFilterRowEditors.d.ts +15 -0
- package/esm/ui/JexlFilterRowEditors.js +90 -0
- package/esm/ui/LazyBaseTooltip.d.ts +4 -0
- package/esm/ui/LazyBaseTooltip.js +9 -0
- package/esm/ui/LegendSwatchGlyph.js +26 -21
- package/esm/ui/LoadingOverlay.d.ts +14 -0
- package/esm/ui/LoadingOverlay.js +4 -2
- package/esm/ui/MenuTypes.d.ts +23 -53
- package/esm/ui/MenuTypes.js +3 -0
- package/esm/ui/MonospaceTextField.d.ts +2 -1
- package/esm/ui/MonospaceTextField.js +23 -20
- package/esm/ui/PaletteContext.d.ts +10 -5
- package/esm/ui/PaletteContext.js +44 -6
- package/esm/ui/RefNameAutocomplete/SearchOption.d.ts +13 -0
- package/esm/ui/RefNameAutocomplete/SearchOption.js +45 -0
- package/esm/ui/RefNameAutocomplete/index.d.ts +1 -2
- package/esm/ui/RefNameAutocomplete/index.js +8 -2
- package/esm/ui/RefNameAutocomplete/util.d.ts +13 -0
- package/esm/ui/RefNameAutocomplete/util.js +42 -1
- package/esm/ui/ResizeHandle.d.ts +3 -1
- package/esm/ui/ResizeHandle.js +44 -11
- package/esm/ui/ScrollChrome.d.ts +13 -0
- package/esm/ui/ScrollChrome.js +11 -0
- package/esm/ui/ScrollEdgeShadow.d.ts +6 -9
- package/esm/ui/ScrollEdgeShadow.js +14 -35
- package/esm/ui/ScrollZoomToggle.d.ts +4 -27
- package/esm/ui/ScrollZoomToggle.js +34 -51
- package/esm/ui/SessionJsonPanel.d.ts +3 -0
- package/esm/ui/SessionJsonPanel.js +14 -0
- package/esm/ui/SettingsChangesTable.d.ts +1 -0
- package/esm/ui/SettingsChangesTable.js +49 -11
- package/esm/ui/ShareLinkField.d.ts +1 -3
- package/esm/ui/ShareLinkField.js +13 -40
- package/esm/ui/SizeSliderRow.d.ts +1 -3
- package/esm/ui/SizeSliderRow.js +4 -6
- package/esm/ui/SnackbarModel.js +79 -67
- package/esm/ui/StatusProgressBar.js +2 -2
- package/esm/ui/SvgColorLegend.d.ts +9 -4
- package/esm/ui/SvgColorLegend.js +82 -41
- package/esm/ui/VerticalScrollbar.d.ts +13 -34
- package/esm/ui/VerticalScrollbar.js +29 -83
- package/esm/ui/ViewLoadingScreen.d.ts +5 -4
- package/esm/ui/ViewLoadingScreen.js +8 -32
- package/esm/ui/colorScale.d.ts +92 -0
- package/esm/ui/colorScale.js +72 -0
- package/esm/ui/colors.d.ts +64 -0
- package/esm/ui/colors.js +230 -1
- package/esm/ui/hoverBoxStyle.d.ts +14 -2
- package/esm/ui/hoverBoxStyle.js +17 -2
- package/esm/ui/index.d.ts +12 -12
- package/esm/ui/index.js +14 -22
- package/esm/ui/launchViewMenu.js +15 -5
- package/esm/ui/legendMenuItem.d.ts +10 -32
- package/esm/ui/legendMenuItem.js +9 -36
- package/esm/ui/legendSpec.d.ts +15 -8
- package/esm/ui/legendSpec.js +14 -23
- package/esm/ui/makeSizeMenu.d.ts +0 -6
- package/esm/ui/makeSizeMenu.js +6 -30
- package/esm/ui/measureLegendText.js +1 -1
- package/esm/ui/menuItemAdornment.d.ts +9 -20
- package/esm/ui/menuItemAdornment.js +10 -32
- package/esm/ui/menuItems.d.ts +2 -7
- package/esm/ui/menuItems.js +1 -6
- package/esm/ui/multiTrackMenuItems.d.ts +6 -0
- package/esm/ui/palette.d.ts +118 -116
- package/esm/ui/palette.js +114 -75
- package/esm/ui/replaceViewAction.d.ts +1 -1
- package/esm/ui/replaceViewAction.js +1 -1
- package/esm/ui/theme.d.ts +43 -119
- package/esm/ui/theme.js +62 -78
- package/esm/ui/toggleMenuItems.d.ts +1 -3
- package/esm/ui/toggleMenuItems.js +6 -5
- package/esm/ui/useAssemblySelection.d.ts +4 -4
- package/esm/ui/viewHeaderHeight.d.ts +1 -0
- package/esm/ui/viewHeaderHeight.js +1 -0
- package/esm/util/Base1DUtils.d.ts +5 -3
- package/esm/util/Base1DUtils.js +14 -6
- package/esm/util/Base1DViewModel.d.ts +2 -1
- package/esm/util/Base1DViewModel.js +3 -2
- package/esm/util/SvgCanvas.d.ts +15 -13
- package/esm/util/SvgCanvas.js +76 -56
- package/esm/util/TimeTraveller.d.ts +3 -0
- package/esm/util/TimeTraveller.js +34 -2
- package/esm/util/aborting.d.ts +39 -0
- package/esm/util/aborting.js +88 -6
- package/esm/util/adapterMetadata.d.ts +1 -1
- package/esm/util/adapterMetadata.js +6 -5
- package/esm/util/addAndShowTrack.d.ts +2 -5
- package/esm/util/addAndShowTrack.js +5 -1
- package/esm/util/addRelativeUris.d.ts +17 -5
- package/esm/util/addRelativeUris.js +46 -10
- package/esm/util/addTrackFromWidget.d.ts +2 -5
- package/esm/util/addTrackFromWidget.js +5 -4
- package/esm/util/aggregateFieldName.d.ts +10 -0
- package/esm/util/aggregateFieldName.js +8 -0
- package/esm/util/analytics.js +46 -13
- package/esm/util/animationAllowed.d.ts +9 -0
- package/esm/util/animationAllowed.js +13 -0
- package/esm/util/applyRowResizeWheel.d.ts +10 -5
- package/esm/util/applyRowResizeWheel.js +10 -21
- package/esm/util/bandHeight.d.ts +10 -0
- package/esm/util/bandHeight.js +29 -0
- package/esm/util/bandLayout.d.ts +4 -4
- package/esm/util/bandLayout.js +4 -4
- package/esm/util/baseDisplayConfig.d.ts +8 -0
- package/esm/util/baseDisplayConfig.js +27 -0
- package/esm/util/bezierConnector.d.ts +4 -3
- package/esm/util/bezierConnector.js +38 -45
- package/esm/util/bgzfWorkerPool.d.ts +20 -74
- package/esm/util/bgzfWorkerPool.js +20 -74
- package/esm/util/binnedAggregate.d.ts +17 -0
- package/esm/util/binnedAggregate.js +275 -0
- package/esm/util/cacheBudgets.d.ts +22 -19
- package/esm/util/cacheBudgets.js +22 -19
- package/esm/util/cachedSetup.d.ts +16 -6
- package/esm/util/cachedSetup.js +108 -38
- package/esm/util/categoricalField.d.ts +56 -0
- package/esm/util/categoricalField.js +73 -0
- package/esm/util/cellMatches.d.ts +23 -0
- package/esm/util/cellMatches.js +264 -0
- package/esm/util/cellsStep.d.ts +29 -0
- package/esm/util/cellsStep.js +437 -0
- package/esm/util/clampToContig.d.ts +17 -0
- package/esm/util/clampToContig.js +19 -0
- package/esm/util/coarseStripHTML.js +1 -2
- package/esm/util/color/cssColorsLevel4.d.ts +1 -0
- package/esm/util/color/cssColorsLevel4.js +1 -0
- package/esm/util/color/index.d.ts +5 -3
- package/esm/util/color/index.js +7 -4
- package/esm/util/colorBits.d.ts +3 -3
- package/esm/util/colorBits.js +19 -44
- package/esm/util/colorRamp.d.ts +49 -5
- package/esm/util/colorRamp.js +169 -18
- package/esm/util/colorScale.d.ts +156 -0
- package/esm/util/colorScale.js +243 -0
- package/esm/util/colorSchemes.d.ts +21 -0
- package/esm/util/colorSchemes.js +30 -0
- package/esm/util/copyToClipboard.js +8 -1
- package/esm/util/{createStopTokenRotation.d.ts → createAbortRotation.d.ts} +21 -23
- package/esm/util/{createStopTokenRotation.js → createAbortRotation.js} +21 -52
- package/esm/util/createSvgRasterCanvas.d.ts +10 -0
- package/esm/util/cssColorParse.d.ts +15 -0
- package/esm/util/cssColorParse.js +53 -0
- package/esm/util/diagonalizeRegions.d.ts +2 -3
- package/esm/util/diagonalizeRegions.js +8 -13
- package/esm/util/expandLooseSearchIndex.d.ts +19 -0
- package/esm/util/expandLooseSearchIndex.js +29 -0
- package/esm/util/featureTable.d.ts +224 -0
- package/esm/util/featureTable.js +366 -0
- package/esm/util/featureTransforms.d.ts +81 -0
- package/esm/util/featureTransforms.js +1231 -0
- package/esm/util/featureTypes.d.ts +24 -0
- package/esm/util/featureTypes.js +35 -0
- package/esm/util/fetchAndMaybeUnzip.js +16 -9
- package/esm/util/fetchContext.d.ts +7 -8
- package/esm/util/fetchContext.js +3 -3
- package/esm/util/fetchHub.d.ts +4 -2
- package/esm/util/fetchHub.js +2 -2
- package/esm/util/fetchPhases.d.ts +10 -10
- package/esm/util/fetchSeq.d.ts +2 -3
- package/esm/util/fetchSeq.js +2 -2
- package/esm/util/fieldReader.d.ts +17 -0
- package/esm/util/fieldReader.js +62 -0
- package/esm/util/formatBytes.js +1 -1
- package/esm/util/formatGuessers.d.ts +25 -14
- package/esm/util/formatGuessers.js +42 -27
- package/esm/util/formatRelativeTime.js +1 -1
- package/esm/util/freezeDeep.d.ts +8 -10
- package/esm/util/freezeDeep.js +8 -10
- package/esm/util/getLocationUri.d.ts +2 -1
- package/esm/util/getLocationUri.js +8 -2
- package/esm/util/groupKeys.d.ts +76 -0
- package/esm/util/groupKeys.js +156 -0
- package/esm/util/highlights.d.ts +10 -6
- package/esm/util/highlights.js +12 -25
- package/esm/util/hooks.d.ts +31 -2
- package/esm/util/hooks.js +72 -3
- package/esm/util/index.d.ts +11 -11
- package/esm/util/index.js +11 -10
- package/esm/util/indexCandidates.d.ts +1 -31
- package/esm/util/indexCandidates.js +5 -63
- package/esm/util/installFetch.d.ts +77 -37
- package/esm/util/installFetch.js +65 -38
- package/esm/util/installInitAutorun.d.ts +14 -13
- package/esm/util/installInitAutorun.js +17 -17
- package/esm/util/installPrerequisiteFetch.d.ts +115 -0
- package/esm/util/installPrerequisiteFetch.js +111 -0
- package/esm/util/intervals.js +9 -4
- package/esm/util/io/index.js +22 -15
- package/esm/util/isDataCurrent.d.ts +7 -5
- package/esm/util/isDataCurrent.js +9 -6
- package/esm/util/isTextEntryFocused.d.ts +7 -0
- package/esm/util/isTextEntryFocused.js +16 -0
- package/esm/util/jexl.js +24 -21
- package/esm/util/jexlFilterRows.d.ts +89 -0
- package/esm/util/jexlFilterRows.js +252 -0
- package/esm/util/jexlFilters.d.ts +32 -57
- package/esm/util/jexlFilters.js +31 -29
- package/esm/util/jexlStrings.d.ts +3 -4
- package/esm/util/jexlStrings.js +2 -3
- package/esm/util/layouts/GranularRectLayout.d.ts +8 -1
- package/esm/util/layouts/GranularRectLayout.js +25 -8
- package/esm/util/lazyAfterAttach.d.ts +13 -0
- package/esm/util/lazyAfterAttach.js +31 -0
- package/esm/util/lazyWithPreload.d.ts +19 -0
- package/esm/util/lazyWithPreload.js +27 -0
- package/esm/util/legendCandidates.d.ts +72 -0
- package/esm/util/legendCandidates.js +138 -0
- package/esm/util/locString.js +5 -2
- package/esm/util/localStorage.js +4 -4
- package/esm/util/markEncoding.d.ts +150 -0
- package/esm/util/markEncoding.js +885 -0
- package/esm/util/markEncodingTypes.d.ts +595 -0
- package/esm/util/markEncodingTypes.js +8 -0
- package/esm/util/mst-reflection.d.ts +2 -20
- package/esm/util/mst-reflection.js +3 -53
- package/esm/util/mstUtils.d.ts +31 -23
- package/esm/util/mstUtils.js +39 -24
- package/esm/util/numericUtils.d.ts +7 -0
- package/esm/util/numericUtils.js +16 -0
- package/esm/util/numericValue.d.ts +14 -0
- package/esm/util/numericValue.js +34 -0
- package/esm/util/openFeatureWidget.d.ts +5 -0
- package/esm/util/openFeatureWidget.js +2 -2
- package/esm/util/openViews.d.ts +17 -0
- package/esm/util/openViews.js +22 -0
- package/esm/util/parentWalk.d.ts +1 -1
- package/esm/util/parentWalk.js +1 -1
- package/esm/util/parseLineByLine.d.ts +4 -5
- package/esm/util/parseLineByLine.js +8 -14
- package/esm/util/pluginStore.d.ts +6 -8
- package/esm/util/pluginStore.js +17 -16
- package/esm/util/preloadComponent.d.ts +5 -0
- package/esm/util/preloadComponent.js +11 -0
- package/esm/util/progress.d.ts +22 -22
- package/esm/util/progress.js +27 -26
- package/esm/util/quantileExtent.d.ts +49 -0
- package/esm/util/quantileExtent.js +162 -0
- package/esm/util/range.d.ts +13 -9
- package/esm/util/range.js +17 -8
- package/esm/util/renameRegions.d.ts +26 -6
- package/esm/util/renameRegions.js +68 -54
- package/esm/util/renderToStaticMarkup.js +24 -14
- package/esm/util/rxjs.d.ts +23 -8
- package/esm/util/rxjs.js +61 -15
- package/esm/util/samplesTsv.d.ts +49 -0
- package/esm/util/samplesTsv.js +86 -0
- package/esm/util/scheduleDetachedDestroy.d.ts +18 -0
- package/esm/util/scheduleDetachedDestroy.js +24 -0
- package/esm/util/scrollLatch.d.ts +1 -0
- package/esm/util/scrollLatch.js +8 -0
- package/esm/util/selectEncodedFeature.d.ts +16 -0
- package/esm/util/selectEncodedFeature.js +34 -0
- package/esm/util/sessionSharing.d.ts +7 -5
- package/esm/util/sessionSharing.js +23 -23
- package/esm/util/shapeNameList.d.ts +2 -0
- package/esm/util/shapeNameList.js +6 -0
- package/esm/util/shapeNames.d.ts +7 -0
- package/esm/util/shapeNames.js +11 -0
- package/esm/util/simpleFeature.d.ts +0 -1
- package/esm/util/springAnimate.js +1 -1
- package/esm/util/starFusion.d.ts +26 -0
- package/esm/util/starFusion.js +37 -0
- package/esm/util/stepTables.d.ts +96 -0
- package/esm/util/stepTables.js +277 -0
- package/esm/util/svAlt.d.ts +145 -0
- package/esm/util/svAlt.js +364 -0
- package/esm/util/svgColorProps.d.ts +11 -0
- package/esm/util/svgColorProps.js +28 -1
- package/esm/util/systemColorScheme.d.ts +12 -0
- package/esm/util/systemColorScheme.js +27 -0
- package/esm/util/tabix.d.ts +19 -10
- package/esm/util/tabix.js +19 -14
- package/esm/util/thresholdScale.d.ts +91 -0
- package/esm/util/thresholdScale.js +166 -0
- package/esm/util/timeGate.d.ts +4 -5
- package/esm/util/timeGate.js +4 -5
- package/esm/util/trackConfigDelta.d.ts +26 -26
- package/esm/util/trackConfigDelta.js +63 -47
- package/esm/util/tracks.d.ts +120 -66
- package/esm/util/tracks.js +501 -151
- package/esm/util/translateTranscript.d.ts +44 -0
- package/esm/util/translateTranscript.js +102 -0
- package/esm/util/types/data.d.ts +0 -2
- package/esm/util/types/index.d.ts +121 -22
- package/esm/util/types/index.js +9 -0
- package/esm/util/types/mst.d.ts +3 -0
- package/esm/util/types/mst.js +4 -0
- package/esm/util/types/renameIds.d.ts +1 -0
- package/esm/util/types/renameIds.js +29 -0
- package/esm/util/types/services.d.ts +1 -1
- package/esm/util/unknownSnapshotKeys.d.ts +53 -0
- package/esm/util/unknownSnapshotKeys.js +76 -0
- package/esm/util/useFeatureSequence.js +5 -5
- package/esm/util/useFetch.d.ts +3 -4
- package/esm/util/useFetch.js +19 -10
- package/esm/util/useFetchPlugins.d.ts +6 -2
- package/esm/util/useFetchPlugins.js +7 -3
- package/esm/util/usePanZoom.js +10 -3
- package/esm/util/usePanelVirtualScroll.d.ts +7 -35
- package/esm/util/usePanelVirtualScroll.js +9 -36
- package/esm/util/useRafCommit.js +1 -0
- package/esm/util/useRowVirtualScroll.d.ts +6 -29
- package/esm/util/useRowVirtualScroll.js +8 -49
- package/esm/util/useVirtualScrollWheel.d.ts +20 -4
- package/esm/util/useVirtualScrollWheel.js +40 -74
- package/esm/util/viewHighlights.d.ts +3 -0
- package/esm/util/viewHighlights.js +5 -0
- package/esm/util/viewStatus.d.ts +47 -15
- package/esm/util/viewStatus.js +34 -0
- package/esm/util/wheelZoom.d.ts +7 -1
- package/esm/util/wheelZoom.js +85 -19
- package/esm/util/whenViewSettled.d.ts +55 -8
- package/esm/util/whenViewSettled.js +56 -7
- package/esm/util/withFeatureDetails.js +4 -0
- package/esm/util/withLaunchInput.d.ts +174 -0
- package/esm/util/withLaunchInput.js +274 -0
- package/package.json +75 -24
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.d.ts +0 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.js +0 -8
- package/esm/BaseFeatureWidget/BaseFeatureDetail/types.d.ts +0 -8
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.d.ts +0 -80
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.js +0 -583
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.d.ts +0 -141
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.js +0 -1116
- package/esm/ReExports/BaseFeatureDetails.d.ts +0 -1
- package/esm/ReExports/BaseFeatureDetails.js +0 -10
- package/esm/ReExports/index.d.ts +0 -1
- package/esm/ReExports/index.js +0 -1
- package/esm/ReExports/publicUtil.d.ts +0 -1
- package/esm/ReExports/publicUtil.js +0 -28
- package/esm/configuration/promotableDefaults.d.ts +0 -199
- package/esm/configuration/promotableDefaults.js +0 -326
- package/esm/configuration/promotablePin.d.ts +0 -55
- package/esm/configuration/promotablePin.js +0 -1
- package/esm/configuration/promotableResolve.d.ts +0 -108
- package/esm/configuration/promotableResolve.js +0 -117
- package/esm/configuration/promotableSlots.d.ts +0 -12
- package/esm/configuration/promotableSlots.js +0 -45
- package/esm/configuration/slotShape.d.ts +0 -12
- package/esm/configuration/slotShape.js +0 -84
- package/esm/pluggableElementTypes/models/HighlightsMixin.d.ts +0 -51
- package/esm/pluggableElementTypes/models/HighlightsMixin.js +0 -78
- package/esm/ui/PinAdornment.d.ts +0 -5
- package/esm/ui/PinAdornment.js +0 -79
- package/esm/ui/SvgGradientLegend.d.ts +0 -26
- package/esm/ui/SvgGradientLegend.js +0 -26
- package/esm/ui/highlightChipReveal.d.ts +0 -32
- package/esm/ui/highlightChipReveal.js +0 -39
- package/esm/ui/promotableMenuItems.d.ts +0 -19
- package/esm/ui/promotableMenuItems.js +0 -89
- package/esm/ui/promotablePinCoverage.d.ts +0 -44
- package/esm/ui/promotablePinCoverage.js +0 -87
- package/esm/util/applyInitSettings.d.ts +0 -79
- package/esm/util/applyInitSettings.js +0 -91
- package/esm/util/openDisplays.d.ts +0 -23
- package/esm/util/openDisplays.js +0 -79
- package/esm/util/stopToken.d.ts +0 -211
- package/esm/util/stopToken.js +0 -438
- /package/esm/{BaseFeatureWidget/BaseFeatureDetail/types.js → data_adapters/BaseAdapter/zoomRange.js} +0 -0
package/esm/rpc/byteBudget.d.ts
CHANGED
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
import type { StatusCallback } from '../util/progress.ts';
|
|
2
|
-
import type { StopToken, StopTokenChecker } from '../util/stopToken.ts';
|
|
3
2
|
import type { AugmentedRegion } from '../util/types/data.ts';
|
|
4
3
|
/**
|
|
5
4
|
* Which question a byte budget asks of a region set: the gate's per-region
|
|
6
5
|
* budget, or the save dialog's bound on the whole download.
|
|
7
6
|
*/
|
|
8
7
|
export type ByteEstimateScope = 'largestRegion' | 'wholeRequest';
|
|
8
|
+
/**
|
|
9
|
+
* The one spelling of a gated feature RPC's budget argument: the number the
|
|
10
|
+
* worker measures against, undefined when the gate declined to act and nothing
|
|
11
|
+
* is measured. A call-site argument, never part of `rpcProps`, because it
|
|
12
|
+
* swings at 20kb and on force-load.
|
|
13
|
+
*/
|
|
14
|
+
export interface GatedFetchArgs {
|
|
15
|
+
byteLimit?: number;
|
|
16
|
+
}
|
|
9
17
|
export interface ByteMeasurableAdapter {
|
|
10
18
|
getRegionByteSize: (regions: AugmentedRegion[], opts?: {
|
|
11
|
-
|
|
19
|
+
signal?: AbortSignal;
|
|
12
20
|
statusCallback?: StatusCallback;
|
|
13
21
|
}) => Promise<number | undefined>;
|
|
14
22
|
}
|
|
@@ -21,6 +29,8 @@ export interface RegionTooLargeResult {
|
|
|
21
29
|
regionTooLarge: true;
|
|
22
30
|
featureCount?: number;
|
|
23
31
|
bytes?: number;
|
|
32
|
+
/** `bytes` is the max over the regions that reported — {@link measurementPartial} */
|
|
33
|
+
partial?: boolean;
|
|
24
34
|
}
|
|
25
35
|
export declare function isRegionRefused(result: unknown): result is RegionTooLargeResult;
|
|
26
36
|
/** Undefined, never 0, when no region could be measured. */
|
|
@@ -30,19 +40,24 @@ export declare function adapterByteLimit(declared: unknown, fallback: number): n
|
|
|
30
40
|
export declare function overByteBudget(bytes: number | undefined, byteLimit: number | undefined): bytes is number;
|
|
31
41
|
/** The bytes a fetch result reports, payload or refusal; absent means unmeasured. */
|
|
32
42
|
export declare function measuredBytes(result: unknown): number | undefined;
|
|
43
|
+
/**
|
|
44
|
+
* Whether a result's `bytes` covers the whole region set it was asked about. A
|
|
45
|
+
* fan-out that stops at its first refusal reports whichever regions won the
|
|
46
|
+
* race, and `nextByteEstimate` takes no zoom evidence from one.
|
|
47
|
+
*/
|
|
48
|
+
export declare function measurementPartial(result: unknown): boolean;
|
|
33
49
|
/**
|
|
34
50
|
* The first await of every gated feature fetch: each region's index-only byte
|
|
35
51
|
* estimate, judged by the largest because the budget is per region. `bytes`
|
|
36
52
|
* comes back either way; when `tooLarge` is set the caller returns it and
|
|
37
53
|
* fetches nothing. No budget means no measurement.
|
|
38
54
|
*/
|
|
39
|
-
export declare function measureRegionBytes({ dataAdapter, regions, byteLimit,
|
|
55
|
+
export declare function measureRegionBytes({ dataAdapter, regions, byteLimit, signal, statusCallback, }: {
|
|
40
56
|
dataAdapter: ByteMeasurableAdapter;
|
|
41
57
|
regions: AugmentedRegion[];
|
|
42
58
|
byteLimit: number | undefined;
|
|
43
|
-
|
|
59
|
+
signal?: AbortSignal;
|
|
44
60
|
statusCallback?: StatusCallback;
|
|
45
|
-
stopTokenCheck?: StopTokenChecker;
|
|
46
61
|
}): Promise<{
|
|
47
62
|
bytes?: number;
|
|
48
63
|
tooLarge?: RegionTooLargeResult;
|
package/esm/rpc/byteBudget.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { checkAbortSignal } from '../util/aborting.js';
|
|
1
2
|
import { updateStatus } from '../util/progress.js';
|
|
2
|
-
import { checkStopTokenThrottled } from '../util/stopToken.js';
|
|
3
3
|
export function isRegionRefused(result) {
|
|
4
4
|
return (typeof result === 'object' && result !== null && 'regionTooLarge' in result);
|
|
5
5
|
}
|
|
@@ -29,21 +29,32 @@ export function measuredBytes(result) {
|
|
|
29
29
|
? result.bytes
|
|
30
30
|
: undefined;
|
|
31
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Whether a result's `bytes` covers the whole region set it was asked about. A
|
|
34
|
+
* fan-out that stops at its first refusal reports whichever regions won the
|
|
35
|
+
* race, and `nextByteEstimate` takes no zoom evidence from one.
|
|
36
|
+
*/
|
|
37
|
+
export function measurementPartial(result) {
|
|
38
|
+
return (typeof result === 'object' &&
|
|
39
|
+
result !== null &&
|
|
40
|
+
'partial' in result &&
|
|
41
|
+
result.partial === true);
|
|
42
|
+
}
|
|
32
43
|
/**
|
|
33
44
|
* The first await of every gated feature fetch: each region's index-only byte
|
|
34
45
|
* estimate, judged by the largest because the budget is per region. `bytes`
|
|
35
46
|
* comes back either way; when `tooLarge` is set the caller returns it and
|
|
36
47
|
* fetches nothing. No budget means no measurement.
|
|
37
48
|
*/
|
|
38
|
-
export async function measureRegionBytes({ dataAdapter, regions, byteLimit,
|
|
49
|
+
export async function measureRegionBytes({ dataAdapter, regions, byteLimit, signal, statusCallback, }) {
|
|
39
50
|
if (byteLimit === undefined) {
|
|
40
51
|
return {};
|
|
41
52
|
}
|
|
42
|
-
const bytes = largestRegionBytes(await updateStatus('
|
|
43
|
-
|
|
53
|
+
const bytes = largestRegionBytes(await updateStatus('Downloading index', statusCallback, () => Promise.all(regions.map(region => dataAdapter.getRegionByteSize([region], {
|
|
54
|
+
signal,
|
|
44
55
|
statusCallback,
|
|
45
56
|
})))));
|
|
46
|
-
|
|
57
|
+
checkAbortSignal(signal);
|
|
47
58
|
return overByteBudget(bytes, byteLimit)
|
|
48
59
|
? { bytes, tooLarge: { regionTooLarge: true, bytes } }
|
|
49
60
|
: { bytes };
|
|
@@ -3,29 +3,15 @@
|
|
|
3
3
|
* #category root
|
|
4
4
|
*/
|
|
5
5
|
declare const _default: import("../configuration/configurationSchema.ts").ConfigurationSchemaType<{
|
|
6
|
-
/**
|
|
7
|
-
* #slot
|
|
8
|
-
* which RPC backend to use. Empty means "use the host application's
|
|
9
|
-
* default" (web/desktop default to the web worker driver, embedded/headless
|
|
10
|
-
* to the main thread). Every call in the session runs on the driver this
|
|
11
|
-
* names; there is no per-track or per-call override.
|
|
12
|
-
*/
|
|
13
6
|
readonly defaultDriver: {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
readonly advanced: true;
|
|
7
|
+
type: "string";
|
|
8
|
+
} & {
|
|
9
|
+
defaultValue: string;
|
|
18
10
|
};
|
|
19
|
-
/**
|
|
20
|
-
* #slot
|
|
21
|
-
* number of web workers to spawn for the web worker RPC driver. 0 lets
|
|
22
|
-
* JBrowse pick based on hardware concurrency.
|
|
23
|
-
*/
|
|
24
11
|
readonly workerCount: {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
readonly advanced: true;
|
|
12
|
+
type: "number";
|
|
13
|
+
} & {
|
|
14
|
+
defaultValue: number;
|
|
29
15
|
};
|
|
30
|
-
}, import("../configuration/configurationSchema.ts").ConfigurationSchemaOptions<undefined, undefined>>;
|
|
16
|
+
}, import("../configuration/configurationSchema.ts").ConfigurationSchemaOptions<undefined, undefined, undefined, import("../configuration/requirements.ts").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>, any>>;
|
|
31
17
|
export default _default;
|
|
@@ -2,8 +2,12 @@ export { default as CoreGetRefNames } from './methods/CoreGetRefNames.ts';
|
|
|
2
2
|
export { default as CoreGetMetadata } from './methods/CoreGetMetadata.ts';
|
|
3
3
|
export { default as CoreGetInfo } from './methods/CoreGetInfo.ts';
|
|
4
4
|
export { default as CoreGetFeatures } from './methods/CoreGetFeatures.ts';
|
|
5
|
+
export { default as CoreGetEncodedLayers } from './methods/CoreGetEncodedLayers.ts';
|
|
6
|
+
export { default as CoreGetEncodedFeature } from './methods/CoreGetEncodedFeature.ts';
|
|
5
7
|
export { default as CoreGetSequence } from './methods/CoreGetSequence.ts';
|
|
6
8
|
export { default as CoreFreeResources } from './methods/CoreFreeResources.ts';
|
|
9
|
+
export { default as CoreLoadAdapterCode } from './methods/CoreLoadAdapterCode.ts';
|
|
7
10
|
export { default as CoreGetRegionByteEstimate } from './methods/CoreGetRegionByteEstimate.ts';
|
|
11
|
+
export { default as CoreGetFeatureDensity } from './methods/CoreGetFeatureDensity.ts';
|
|
8
12
|
export { default as CoreGetRegions } from './methods/CoreGetRegions.ts';
|
|
9
13
|
export { default as CoreGetExportData } from './methods/CoreGetExportData.ts';
|
|
@@ -2,8 +2,12 @@ export { default as CoreGetRefNames } from './methods/CoreGetRefNames.js';
|
|
|
2
2
|
export { default as CoreGetMetadata } from './methods/CoreGetMetadata.js';
|
|
3
3
|
export { default as CoreGetInfo } from './methods/CoreGetInfo.js';
|
|
4
4
|
export { default as CoreGetFeatures } from './methods/CoreGetFeatures.js';
|
|
5
|
+
export { default as CoreGetEncodedLayers } from './methods/CoreGetEncodedLayers.js';
|
|
6
|
+
export { default as CoreGetEncodedFeature } from './methods/CoreGetEncodedFeature.js';
|
|
5
7
|
export { default as CoreGetSequence } from './methods/CoreGetSequence.js';
|
|
6
8
|
export { default as CoreFreeResources } from './methods/CoreFreeResources.js';
|
|
9
|
+
export { default as CoreLoadAdapterCode } from './methods/CoreLoadAdapterCode.js';
|
|
7
10
|
export { default as CoreGetRegionByteEstimate } from './methods/CoreGetRegionByteEstimate.js';
|
|
11
|
+
export { default as CoreGetFeatureDensity } from './methods/CoreGetFeatureDensity.js';
|
|
8
12
|
export { default as CoreGetRegions } from './methods/CoreGetRegions.js';
|
|
9
13
|
export { default as CoreGetExportData } from './methods/CoreGetExportData.js';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import RpcMethodTypeWithRenameRegion from '../../pluggableElementTypes/RpcMethodTypeWithRenameRegion.ts';
|
|
2
|
+
import type { RpcExecuteArgs } from '../RpcRegistry.ts';
|
|
3
|
+
/**
|
|
4
|
+
* The feature behind one instance of a `CoreGetEncodedLayers` answer: the same
|
|
5
|
+
* request run again, and the row of `layer`'s table the instance's
|
|
6
|
+
* `featureIndex` names. A display holds channels and no records, and two reads
|
|
7
|
+
* sharing a span, a run counted inside one facet section or a mark whose `x` is
|
|
8
|
+
* not `start` are each a feature no coordinate lookup finds.
|
|
9
|
+
*/
|
|
10
|
+
export default class CoreGetEncodedFeature extends RpcMethodTypeWithRenameRegion<'CoreGetEncodedFeature'> {
|
|
11
|
+
name: 'CoreGetEncodedFeature';
|
|
12
|
+
execute(args: RpcExecuteArgs<'CoreGetEncodedFeature'>): Promise<import("../../util/simpleFeature.ts").SimpleFeatureSerialized | undefined>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { getFeatureAdapterOrThrow } from '../../data_adapters/getFeatureAdapter.js';
|
|
2
|
+
import RpcMethodTypeWithRenameRegion from '../../pluggableElementTypes/RpcMethodTypeWithRenameRegion.js';
|
|
3
|
+
import { layerFeatures } from './layerFeatures.js';
|
|
4
|
+
/**
|
|
5
|
+
* The feature behind one instance of a `CoreGetEncodedLayers` answer: the same
|
|
6
|
+
* request run again, and the row of `layer`'s table the instance's
|
|
7
|
+
* `featureIndex` names. A display holds channels and no records, and two reads
|
|
8
|
+
* sharing a span, a run counted inside one facet section or a mark whose `x` is
|
|
9
|
+
* not `start` are each a feature no coordinate lookup finds.
|
|
10
|
+
*/
|
|
11
|
+
export default class CoreGetEncodedFeature extends RpcMethodTypeWithRenameRegion {
|
|
12
|
+
name = 'CoreGetEncodedFeature';
|
|
13
|
+
async execute(args) {
|
|
14
|
+
const { layer, featureIndex } = args;
|
|
15
|
+
const asked = args.layers[layer];
|
|
16
|
+
if (!asked) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
const { pluginManager } = this;
|
|
20
|
+
const dataAdapter = await getFeatureAdapterOrThrow({
|
|
21
|
+
...args,
|
|
22
|
+
pluginManager,
|
|
23
|
+
});
|
|
24
|
+
// A layer's list does not depend on its neighbours, so only the one asked
|
|
25
|
+
// about runs its steps.
|
|
26
|
+
const { layers } = await layerFeatures(dataAdapter, { ...args, layers: [asked] }, pluginManager.jexl);
|
|
27
|
+
const table = layers[0]?.table;
|
|
28
|
+
return table && featureIndex < table.length
|
|
29
|
+
? table.row(featureIndex).toJSON()
|
|
30
|
+
: undefined;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import RpcMethodTypeWithRenameRegion from '../../pluggableElementTypes/RpcMethodTypeWithRenameRegion.ts';
|
|
2
|
+
import type { EncodedLayersResult } from '../../util/markEncoding.ts';
|
|
3
|
+
import type { RpcExecuteArgs } from '../RpcRegistry.ts';
|
|
4
|
+
/**
|
|
5
|
+
* Fetch a region's features once, run the shared transform steps over them,
|
|
6
|
+
* split them by the facet where the request names one, run each layer's own
|
|
7
|
+
* steps (per section, under a facet), and evaluate the layer's encoding over
|
|
8
|
+
* what is left in the worker, where the `Feature` objects are, filling the
|
|
9
|
+
* lanes its mark reads. The colours come back packed, the scale tables
|
|
10
|
+
* resolved, and the main thread reads the same table for its legend that the
|
|
11
|
+
* colours were drawn from.
|
|
12
|
+
*/
|
|
13
|
+
export default class CoreGetEncodedLayers extends RpcMethodTypeWithRenameRegion<'CoreGetEncodedLayers'> {
|
|
14
|
+
name: 'CoreGetEncodedLayers';
|
|
15
|
+
execute(args: RpcExecuteArgs<'CoreGetEncodedLayers'>): Promise<import("../byteBudget.ts").RegionTooLargeResult | import("../RpcServer.ts").RpcResult<EncodedLayersResult>>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { getFeatureAdapterOrThrow } from '../../data_adapters/getFeatureAdapter.js';
|
|
2
|
+
import RpcMethodTypeWithRenameRegion from '../../pluggableElementTypes/RpcMethodTypeWithRenameRegion.js';
|
|
3
|
+
import { rpcResult } from '../../util/librpc.js';
|
|
4
|
+
import { encodeFeatures, encodedChannelTransferables, } from '../../util/markEncoding.js';
|
|
5
|
+
import { createProgressReporter } from '../../util/progress.js';
|
|
6
|
+
import { measureRegionBytes } from '../byteBudget.js';
|
|
7
|
+
import { layerFeatures } from './layerFeatures.js';
|
|
8
|
+
/**
|
|
9
|
+
* Fetch a region's features once, run the shared transform steps over them,
|
|
10
|
+
* split them by the facet where the request names one, run each layer's own
|
|
11
|
+
* steps (per section, under a facet), and evaluate the layer's encoding over
|
|
12
|
+
* what is left in the worker, where the `Feature` objects are, filling the
|
|
13
|
+
* lanes its mark reads. The colours come back packed, the scale tables
|
|
14
|
+
* resolved, and the main thread reads the same table for its legend that the
|
|
15
|
+
* colours were drawn from.
|
|
16
|
+
*/
|
|
17
|
+
export default class CoreGetEncodedLayers extends RpcMethodTypeWithRenameRegion {
|
|
18
|
+
name = 'CoreGetEncodedLayers';
|
|
19
|
+
async execute(args) {
|
|
20
|
+
const { region, layers: requested, byteLimit, signal, statusCallback, } = args;
|
|
21
|
+
const { pluginManager } = this;
|
|
22
|
+
const dataAdapter = await getFeatureAdapterOrThrow({
|
|
23
|
+
...args,
|
|
24
|
+
pluginManager,
|
|
25
|
+
});
|
|
26
|
+
const { bytes, tooLarge } = await measureRegionBytes({
|
|
27
|
+
dataAdapter,
|
|
28
|
+
regions: [region],
|
|
29
|
+
byteLimit,
|
|
30
|
+
signal,
|
|
31
|
+
statusCallback,
|
|
32
|
+
});
|
|
33
|
+
if (tooLarge) {
|
|
34
|
+
return tooLarge;
|
|
35
|
+
}
|
|
36
|
+
const { jexl } = pluginManager;
|
|
37
|
+
const { layers: layered, sections, zoomRange, notices, } = await layerFeatures(dataAdapter, args, jexl);
|
|
38
|
+
const layers = requested.map((request, i) => {
|
|
39
|
+
const { table, row } = layered[i];
|
|
40
|
+
return encodeFeatures(table, { ...request.encoding, row }, request.lanes, {
|
|
41
|
+
jexl,
|
|
42
|
+
report: createProgressReporter({
|
|
43
|
+
label: 'Processing features',
|
|
44
|
+
total: table.length,
|
|
45
|
+
statusCallback,
|
|
46
|
+
signal,
|
|
47
|
+
}),
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
const result = {
|
|
51
|
+
layers,
|
|
52
|
+
facet: sections,
|
|
53
|
+
bytes,
|
|
54
|
+
zoomRange,
|
|
55
|
+
...(notices.length > 0 ? { notices } : {}),
|
|
56
|
+
};
|
|
57
|
+
return rpcResult(result, layers.flatMap(l => encodedChannelTransferables(l)));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -3,11 +3,10 @@ import RpcMethodTypeWithRenameRegions from '../../pluggableElementTypes/RpcMetho
|
|
|
3
3
|
export default class CoreGetExportData extends RpcMethodTypeWithRenameRegions {
|
|
4
4
|
name = 'CoreGetExportData';
|
|
5
5
|
async execute(args) {
|
|
6
|
-
const {
|
|
6
|
+
const { regions, formatType, opts, signal, statusCallback } = args;
|
|
7
7
|
const dataAdapter = await getFeatureAdapterOrThrow({
|
|
8
|
+
...args,
|
|
8
9
|
pluginManager: this.pluginManager,
|
|
9
|
-
sessionId,
|
|
10
|
-
adapterConfig,
|
|
11
10
|
});
|
|
12
11
|
// The handles go down to the adapter, which is the whole point of the
|
|
13
12
|
// Save-track-data dialog having a cancel button and a progress label: an
|
|
@@ -22,7 +21,7 @@ export default class CoreGetExportData extends RpcMethodTypeWithRenameRegions {
|
|
|
22
21
|
// empty file instead.
|
|
23
22
|
return dataAdapter.getExportData(regions, formatType, {
|
|
24
23
|
...opts,
|
|
25
|
-
|
|
24
|
+
signal,
|
|
26
25
|
statusCallback,
|
|
27
26
|
});
|
|
28
27
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import RpcMethodTypeWithRenameRegions from '../../pluggableElementTypes/RpcMethodTypeWithRenameRegions.ts';
|
|
2
|
+
import type { RpcExecuteArgs } from '../RpcRegistry.ts';
|
|
3
|
+
/**
|
|
4
|
+
* The density tier's read: features per bin at the view's bp/px for regions the
|
|
5
|
+
* region-too-large gate refused. Answers `undefined` for an adapter with no
|
|
6
|
+
* density source, and the display keeps the banner.
|
|
7
|
+
*/
|
|
8
|
+
export default class CoreGetFeatureDensity extends RpcMethodTypeWithRenameRegions<'CoreGetFeatureDensity'> {
|
|
9
|
+
name: 'CoreGetFeatureDensity';
|
|
10
|
+
execute(args: RpcExecuteArgs<'CoreGetFeatureDensity'>): Promise<import("../../data_adapters/BaseAdapter/featureDensity.ts").FeatureDensity[] | undefined>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { isFeatureAdapter } from '../../data_adapters/BaseAdapter/index.js';
|
|
2
|
+
import { getAdapter } from '../../data_adapters/dataAdapterCache.js';
|
|
3
|
+
import RpcMethodTypeWithRenameRegions from '../../pluggableElementTypes/RpcMethodTypeWithRenameRegions.js';
|
|
4
|
+
/**
|
|
5
|
+
* The density tier's read: features per bin at the view's bp/px for regions the
|
|
6
|
+
* region-too-large gate refused. Answers `undefined` for an adapter with no
|
|
7
|
+
* density source, and the display keeps the banner.
|
|
8
|
+
*/
|
|
9
|
+
export default class CoreGetFeatureDensity extends RpcMethodTypeWithRenameRegions {
|
|
10
|
+
name = 'CoreGetFeatureDensity';
|
|
11
|
+
async execute(args) {
|
|
12
|
+
const { adapterConfig, sessionId, regions, bpPerPx, signal } = args;
|
|
13
|
+
const { dataAdapter } = await getAdapter(this.pluginManager, sessionId, adapterConfig, args.sequenceAdapter);
|
|
14
|
+
return isFeatureAdapter(dataAdapter)
|
|
15
|
+
? dataAdapter.getFeatureDensity(regions, {
|
|
16
|
+
bpPerPx,
|
|
17
|
+
signal,
|
|
18
|
+
statusCallback: args.statusCallback,
|
|
19
|
+
})
|
|
20
|
+
: undefined;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -10,18 +10,16 @@ export default class CoreGetFeatures extends RpcMethodTypeWithRenameRegions {
|
|
|
10
10
|
return unwrapRpcResult(feats).map(feat => new SimpleFeature(feat));
|
|
11
11
|
}
|
|
12
12
|
async execute(args) {
|
|
13
|
-
const {
|
|
13
|
+
const { signal, statusCallback, regions, opts } = args;
|
|
14
14
|
const dataAdapter = await getFeatureAdapterOrThrow({
|
|
15
|
+
...args,
|
|
15
16
|
pluginManager: this.pluginManager,
|
|
16
|
-
sessionId,
|
|
17
|
-
adapterConfig,
|
|
18
|
-
sequenceAdapter,
|
|
19
17
|
});
|
|
20
18
|
const r = await firstValueFrom(dataAdapter
|
|
21
19
|
.getFeaturesInMultipleRegions(regions, {
|
|
22
20
|
...opts,
|
|
23
21
|
statusCallback,
|
|
24
|
-
|
|
22
|
+
signal,
|
|
25
23
|
})
|
|
26
24
|
.pipe(toArray()));
|
|
27
25
|
return r.map(f => f.toJSON());
|
|
@@ -1,21 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isRefNameSource } from '../../data_adapters/BaseAdapter/util.js';
|
|
2
2
|
import { getAdapter } from '../../data_adapters/dataAdapterCache.js';
|
|
3
3
|
import RpcMethodType from '../../pluggableElementTypes/RpcMethodType.js';
|
|
4
4
|
export default class CoreGetRefNames extends RpcMethodType {
|
|
5
5
|
name = 'CoreGetRefNames';
|
|
6
6
|
async execute(args) {
|
|
7
7
|
const { sessionId, adapterConfig, sequenceAdapter } = args;
|
|
8
|
-
const { dataAdapter } = await getAdapter(this.pluginManager, sessionId, adapterConfig);
|
|
9
|
-
// Primes BEFORE it asks: a ReferenceScanAdapter answers `getRefNames` by
|
|
10
|
-
// asking the reference, and this line is what tells it where that is.
|
|
11
|
-
// Pinned by sequenceAdapterPriming.test.ts, because reversing the two left
|
|
12
|
-
// 3,015 tests green.
|
|
13
|
-
//
|
|
14
|
-
// The one call that still passes `sequenceAdapter` by hand — it is what
|
|
15
|
-
// `renameRegionsIfNeeded` CALLS, so the derivation cannot reach it.
|
|
16
|
-
if (isFeatureAdapter(dataAdapter)) {
|
|
17
|
-
dataAdapter.setSequenceAdapterConfig(sequenceAdapter);
|
|
18
|
-
}
|
|
8
|
+
const { dataAdapter } = await getAdapter(this.pluginManager, sessionId, adapterConfig, sequenceAdapter);
|
|
19
9
|
// Gated on isRefNameSource rather than isFeatureAdapter: any adapter that
|
|
20
10
|
// can name its own contigs needs them reconciled with the assembly's,
|
|
21
11
|
// whether or not it serves features. PlinkLDTabixAdapter serves precomputed
|
|
@@ -6,7 +6,7 @@ export default class CoreGetRegionByteEstimate extends RpcMethodTypeWithRenameRe
|
|
|
6
6
|
name = 'CoreGetRegionByteEstimate';
|
|
7
7
|
async execute(args) {
|
|
8
8
|
const { adapterConfig, sessionId, regions, scope } = args;
|
|
9
|
-
const { dataAdapter } = await getAdapter(this.pluginManager, sessionId, adapterConfig);
|
|
9
|
+
const { dataAdapter } = await getAdapter(this.pluginManager, sessionId, adapterConfig, args.sequenceAdapter);
|
|
10
10
|
// "Unmeasurable", not an error: the gate reads undefined as "no byte axis".
|
|
11
11
|
if (!isFeatureAdapter(dataAdapter)) {
|
|
12
12
|
return undefined;
|
|
@@ -6,11 +6,11 @@ import RpcMethodType from '../../pluggableElementTypes/RpcMethodType.js';
|
|
|
6
6
|
export default class CoreGetSequence extends RpcMethodType {
|
|
7
7
|
name = 'CoreGetSequence';
|
|
8
8
|
async execute(args) {
|
|
9
|
-
const {
|
|
9
|
+
const { signal, statusCallback, sessionId, adapterConfig, region } = args;
|
|
10
10
|
const { dataAdapter } = await getAdapter(this.pluginManager, sessionId, adapterConfig);
|
|
11
11
|
if (!isSequenceAdapter(dataAdapter)) {
|
|
12
12
|
throw new Error('Adapter does not support retrieving sequences');
|
|
13
13
|
}
|
|
14
|
-
return dataAdapter.getSequence(region, {
|
|
14
|
+
return dataAdapter.getSequence(region, { signal, statusCallback });
|
|
15
15
|
}
|
|
16
16
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import RpcMethodType from '../../pluggableElementTypes/RpcMethodType.ts';
|
|
2
|
+
import type { RpcExecuteArgs } from '../RpcRegistry.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Load these adapter types' code in the worker a track is about to use. An
|
|
5
|
+
* adapter's class arrives by dynamic import on the track's first request
|
|
6
|
+
* otherwise, and that download waits for the view to lay out and the assembly
|
|
7
|
+
* to load.
|
|
8
|
+
*/
|
|
9
|
+
export default class CoreLoadAdapterCode extends RpcMethodType<'CoreLoadAdapterCode'> {
|
|
10
|
+
name: 'CoreLoadAdapterCode';
|
|
11
|
+
execute({ adapterTypes }: RpcExecuteArgs<'CoreLoadAdapterCode'>): Promise<void>;
|
|
12
|
+
serializeArguments(args: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import RpcMethodType from '../../pluggableElementTypes/RpcMethodType.js';
|
|
2
|
+
/**
|
|
3
|
+
* Load these adapter types' code in the worker a track is about to use. An
|
|
4
|
+
* adapter's class arrives by dynamic import on the track's first request
|
|
5
|
+
* otherwise, and that download waits for the view to lay out and the assembly
|
|
6
|
+
* to load.
|
|
7
|
+
*/
|
|
8
|
+
export default class CoreLoadAdapterCode extends RpcMethodType {
|
|
9
|
+
name = 'CoreLoadAdapterCode';
|
|
10
|
+
async execute({ adapterTypes }) {
|
|
11
|
+
await Promise.all(adapterTypes.map(type => this.pluginManager.getAdapterType(type).getAdapterClass()));
|
|
12
|
+
}
|
|
13
|
+
async serializeArguments(args) {
|
|
14
|
+
return args;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { BaseFeatureDataAdapter } from '../../data_adapters/BaseAdapter/index.ts';
|
|
2
|
+
import type { FeatureTable } from '../../util/featureTable.ts';
|
|
3
|
+
import type { JexlInstance } from '../../util/jexlStrings.ts';
|
|
4
|
+
import type { CoreGetEncodedLayersArgs, FieldRef } from '../../util/markEncodingTypes.ts';
|
|
5
|
+
import type { StatusCallback } from '../../util/progress.ts';
|
|
6
|
+
/**
|
|
7
|
+
* One layer of a request as the encoder takes it: its rows, and the row of the
|
|
8
|
+
* plot each stands in — the field the layer reads, or under a facet each
|
|
9
|
+
* row's stacked row.
|
|
10
|
+
*/
|
|
11
|
+
export interface LayerFeatures {
|
|
12
|
+
table: FeatureTable;
|
|
13
|
+
row: FieldRef | ArrayLike<number> | undefined;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The table each layer of a `CoreGetEncodedLayers` request encodes: the
|
|
17
|
+
* region's features through the shared steps, split by the facet where the
|
|
18
|
+
* request names one, then through each layer's own steps, with each faceted
|
|
19
|
+
* layer's stacked rows beside it. An instance's `featureIndex` indexes its
|
|
20
|
+
* layer's table, so the same request answers which row an instance is.
|
|
21
|
+
*/
|
|
22
|
+
export declare function layerFeatures(dataAdapter: BaseFeatureDataAdapter, args: Pick<CoreGetEncodedLayersArgs, 'region' | 'layers' | 'transform' | 'facet' | 'bpPerPx' | 'opts'> & {
|
|
23
|
+
signal?: AbortSignal;
|
|
24
|
+
statusCallback?: StatusCallback;
|
|
25
|
+
}, jexl: JexlInstance): Promise<{
|
|
26
|
+
layers: {
|
|
27
|
+
table: FeatureTable;
|
|
28
|
+
row: FieldRef | Uint32Array | undefined;
|
|
29
|
+
}[];
|
|
30
|
+
sections: import("../../util/markEncodingTypes.ts").FacetSection[] | undefined;
|
|
31
|
+
zoomRange: import("../../data_adapters/BaseAdapter/zoomRange.ts").ZoomRange | undefined;
|
|
32
|
+
notices: string[];
|
|
33
|
+
}>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { checkAbortSignal } from '../../util/aborting.js';
|
|
2
|
+
import { layerTables } from '../../util/featureTransforms.js';
|
|
3
|
+
import { updateStatus } from '../../util/progress.js';
|
|
4
|
+
/**
|
|
5
|
+
* The table each layer of a `CoreGetEncodedLayers` request encodes: the
|
|
6
|
+
* region's features through the shared steps, split by the facet where the
|
|
7
|
+
* request names one, then through each layer's own steps, with each faceted
|
|
8
|
+
* layer's stacked rows beside it. An instance's `featureIndex` indexes its
|
|
9
|
+
* layer's table, so the same request answers which row an instance is.
|
|
10
|
+
*/
|
|
11
|
+
export async function layerFeatures(dataAdapter, args, jexl) {
|
|
12
|
+
const { region, layers: requested, transform = [], facet, bpPerPx, opts, signal, statusCallback, } = args;
|
|
13
|
+
const notices = [];
|
|
14
|
+
const fetchOpts = { ...opts, bpPerPx, statusCallback, signal, notices };
|
|
15
|
+
const [fetched, zoomRange] = await updateStatus('Downloading features', statusCallback, () => Promise.all([
|
|
16
|
+
dataAdapter.getFeatureTable(region, fetchOpts),
|
|
17
|
+
dataAdapter.getZoomRange(fetchOpts),
|
|
18
|
+
]));
|
|
19
|
+
checkAbortSignal(signal);
|
|
20
|
+
const { layers, sections } = layerTables(fetched, {
|
|
21
|
+
transform,
|
|
22
|
+
facet,
|
|
23
|
+
layers: requested.map(r => ({
|
|
24
|
+
transform: r.transform,
|
|
25
|
+
row: r.encoding.row,
|
|
26
|
+
})),
|
|
27
|
+
}, jexl);
|
|
28
|
+
return { layers, sections, zoomRange, notices };
|
|
29
|
+
}
|
package/esm/svg/SvgExport.js
CHANGED
|
@@ -3,14 +3,14 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
|
|
|
3
3
|
// the linear-genome-view plugin. Non-component members live in sibling files
|
|
4
4
|
// (`constants.ts`, `svgReady.ts`) so this stays component-only for
|
|
5
5
|
// react-refresh.
|
|
6
|
-
import {
|
|
7
|
-
import { stripAlpha } from '../util/
|
|
6
|
+
import { usePalette } from '../ui/PaletteContext.js';
|
|
7
|
+
import { stripAlpha } from '../util/svgColorProps.js';
|
|
8
8
|
import { exportMargin } from './constants.js';
|
|
9
9
|
import { svgSafeId } from './svgId.js';
|
|
10
10
|
// Full-bleed background rect. `width`/`height` are the *total* SVG dimensions.
|
|
11
11
|
export function SVGBackground({ width, height, }) {
|
|
12
|
-
const
|
|
13
|
-
return (_jsx("rect", { width: width, height: height, fill: stripAlpha(
|
|
12
|
+
const palette = usePalette();
|
|
13
|
+
return (_jsx("rect", { width: width, height: height, fill: stripAlpha(palette.background.default) }));
|
|
14
14
|
}
|
|
15
15
|
// Root <svg> for an image export. Owns the xmlns/viewBox boilerplate, widens
|
|
16
16
|
// the canvas by `margin` on each side, and paints the themed background.
|
|
@@ -36,9 +36,8 @@ export function SVGMessageBox({ message, width, height, }) {
|
|
|
36
36
|
// terminal state itself — a "region too large" message — and only paints the
|
|
37
37
|
// children when the display has renderable data. The body is an ordinary child
|
|
38
38
|
// component, so it never runs in a terminal state and no `renderSvg` re-detects
|
|
39
|
-
// one from empty/absent data. The readiness wait
|
|
40
|
-
// `
|
|
41
|
-
// step), so this component is sync.
|
|
39
|
+
// one from empty/absent data. The readiness wait happens before it, in
|
|
40
|
+
// `renderDisplaySvg` (the one genuinely async step), so this component is sync.
|
|
42
41
|
//
|
|
43
42
|
// One terminal, not two, and the asymmetry is the point: over-budget is a state
|
|
44
43
|
// the user navigated to on purpose, and a figure saying so is the honest export
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ThemeOptions } from '@mui/material';
|
|
2
|
+
/**
|
|
3
|
+
* Both theme providers, from the export's theme options. An export renders
|
|
4
|
+
* outside every React tree the app mounted, so without them a `useTheme` body
|
|
5
|
+
* gets MUI's default theme and a `usePalette` or `makeStyles` one JBrowse's
|
|
6
|
+
* default light style theme — whatever theme the user picked. Every place an
|
|
7
|
+
* export tree is rendered mounts this: the file, a live figure, a ring strip.
|
|
8
|
+
*/
|
|
9
|
+
export declare function SvgThemeProviders({ theme, children, }: {
|
|
10
|
+
theme: ThemeOptions | undefined;
|
|
11
|
+
children: React.ReactNode;
|
|
12
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,15 @@
|
|
|
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
|
+
/**
|
|
7
|
+
* Both theme providers, from the export's theme options. An export renders
|
|
8
|
+
* outside every React tree the app mounted, so without them a `useTheme` body
|
|
9
|
+
* gets MUI's default theme and a `usePalette` or `makeStyles` one JBrowse's
|
|
10
|
+
* default light style theme — whatever theme the user picked. Every place an
|
|
11
|
+
* export tree is rendered mounts this: the file, a live figure, a ring strip.
|
|
12
|
+
*/
|
|
13
|
+
export function SvgThemeProviders({ theme, children, }) {
|
|
14
|
+
return (_jsx(ThemeProvider, { theme: createJBrowseTheme(theme), children: _jsx(StyleThemeProvider, { theme: resolveStyleTheme({ configTheme: theme }), children: children }) }));
|
|
15
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { SvgRasterCanvasOpts } from '../util/createSvgRasterCanvas.ts';
|
|
2
|
+
import type React from 'react';
|
|
3
|
+
/** What every view's `exportSvg` accepts. A view with more extends it. */
|
|
4
|
+
export interface ViewExportSvgOptions extends SvgRasterCanvasOpts {
|
|
5
|
+
rasterizeLayers?: boolean;
|
|
6
|
+
format?: 'svg' | 'png';
|
|
7
|
+
filename?: string;
|
|
8
|
+
/**
|
|
9
|
+
* Whether to hand the result to the browser's download path. Default true,
|
|
10
|
+
* which is the dialog. False returns the markup and writes nothing — the
|
|
11
|
+
* caller has somewhere of its own to put it, and a download it did not ask
|
|
12
|
+
* for would land beside that under a name it did not choose.
|
|
13
|
+
*/
|
|
14
|
+
save?: boolean;
|
|
15
|
+
Wrapper?: React.FC<{
|
|
16
|
+
children: React.ReactNode;
|
|
17
|
+
}>;
|
|
18
|
+
/** a named theme; the session's active one when absent */
|
|
19
|
+
themeName?: string;
|
|
20
|
+
fontFamily?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The body of every view's `exportSvg` action: load the view's lazy
|
|
24
|
+
* `renderToSvg`, render, save unless `save: false`, and return the markup.
|
|
25
|
+
*/
|
|
26
|
+
export declare function exportViewSvg<V, O extends ViewExportSvgOptions>(view: V, opts: O, load: () => Promise<{
|
|
27
|
+
renderToSvg: (view: V, opts: O) => Promise<string>;
|
|
28
|
+
}>): 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
|
+
}
|