@jbrowse/core 5.0.0-beta.11 → 5.0.0-beta.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +450 -132
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +4 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +6 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +18 -3
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseAttributes.d.ts +2 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseAttributes.js +4 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCard.d.ts +2 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCard.js +4 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCoreDetails.d.ts +2 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCoreDetails.js +4 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.d.ts +5 -4
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.js +6 -4
- package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.d.ts +2 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.js +4 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/DataGridDetails.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/DataGridDetails.js +4 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.js +2 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureWash.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureWash.js +4 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.js +4 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldName.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldName.js +4 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Formatter.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Formatter.js +4 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.js +4 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +4 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/UriField.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/UriField.js +4 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceBody.d.ts +3 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceBody.js +4 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.d.ts +3 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.js +15 -24
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeaturePanel.js +1 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceLegend.d.ts +3 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceLegend.js +4 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequencePanel.js +4 -4
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/FeatureSequenceDialog.d.ts +3 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/FeatureSequenceDialog.js +2 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/HelpDialog.d.ts +3 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/HelpDialog.js +4 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceDialog.d.ts +1 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceDialog.js +2 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceTypeSelector.d.ts +1 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceTypeSelector.js +15 -36
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.d.ts +3 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.js +4 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/featureTypeUtil.d.ts +4 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/featureTypeUtil.js +29 -20
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.d.ts +13 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.js +28 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/CDNASequence.js +3 -3
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/SequenceDisplay.js +2 -2
- package/esm/BaseFeatureWidget/stateModelFactory.d.ts +9 -0
- package/esm/BaseFeatureWidget/stateModelFactory.js +11 -0
- package/esm/BaseFeatureWidget/types.d.ts +2 -0
- package/esm/PluginManager.d.ts +7 -3
- package/esm/PluginManager.js +12 -3
- package/esm/ReExports/coreModules.generated.js +538 -518
- package/esm/ReExports/coreWorkerModules.generated.js +456 -438
- package/esm/ReExports/lazify.js +3 -2
- package/esm/ReExports/list.js +22 -6
- package/esm/ReExports/names.d.ts +1 -0
- package/esm/ReExports/names.generated.d.ts +2 -0
- package/esm/ReExports/names.generated.js +566 -0
- package/esm/ReExports/names.js +3 -0
- package/esm/TextSearch/TextSearchManager.d.ts +3 -3
- package/esm/TextSearch/TextSearchManager.js +6 -13
- package/esm/assemblyManager/assembly.d.ts +9 -0
- package/esm/assemblyManager/assembly.js +13 -0
- package/esm/assemblyManager/assemblyConfigSchema.d.ts +6 -1
- package/esm/assemblyManager/assemblyConfigSchema.js +23 -22
- package/esm/assemblyManager/assemblyManager.d.ts +11 -0
- package/esm/assemblyManager/assemblyManager.js +2 -0
- package/esm/assemblyManager/expandAssemblyConfigShorthand.d.ts +9 -0
- package/esm/assemblyManager/expandAssemblyConfigShorthand.js +23 -0
- package/esm/checkPlugins.js +10 -4
- package/esm/configuration/configurationSchema.d.ts +51 -100
- package/esm/configuration/configurationSchema.js +59 -225
- package/esm/configuration/configurationSchemaUnion.d.ts +2 -1
- package/esm/configuration/configurationSchemaUnion.js +2 -1
- package/esm/configuration/configurationSlot.d.ts +18 -64
- package/esm/configuration/configurationSlot.js +32 -98
- package/esm/configuration/fillLocations.d.ts +4 -2
- package/esm/configuration/fillLocations.js +9 -3
- package/esm/configuration/formatAboutConfigSchema.d.ts +2 -2
- package/esm/configuration/formatAboutConfigSchema.js +2 -2
- package/esm/configuration/formatDetailsConfigSchema.d.ts +2 -2
- package/esm/configuration/formatDetailsConfigSchema.js +7 -5
- package/esm/configuration/getConf.d.ts +7 -36
- package/esm/configuration/getConf.js +20 -41
- package/esm/configuration/index.d.ts +4 -3
- package/esm/configuration/index.js +3 -2
- package/esm/configuration/partitionAdvanced.d.ts +12 -0
- package/esm/configuration/partitionAdvanced.js +42 -0
- package/esm/configuration/plot.d.ts +6 -0
- package/esm/configuration/plot.js +56 -9
- package/esm/configuration/readConfObject.d.ts +15 -17
- package/esm/configuration/readConfObject.js +19 -50
- package/esm/configuration/schemaRegistry.d.ts +0 -2
- package/esm/configuration/schemaTypes.js +5 -1
- package/esm/configuration/slotFacade.js +2 -2
- package/esm/configuration/snapshotPreprocess.d.ts +42 -18
- package/esm/configuration/snapshotPreprocess.js +95 -37
- package/esm/configuration/tabixShorthand.js +1 -3
- package/esm/configuration/types.d.ts +60 -159
- package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +7 -0
- package/esm/data_adapters/BaseAdapter/BaseAdapter.js +7 -0
- package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +0 -22
- package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +0 -55
- package/esm/data_adapters/BaseAdapter/index.d.ts +0 -1
- package/esm/data_adapters/BaseAdapter/index.js +0 -1
- package/esm/data_adapters/BaseAdapter/rowSources.d.ts +2 -2
- package/esm/data_adapters/BaseAdapter/types.d.ts +1 -0
- package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +2 -0
- package/esm/data_adapters/CytobandAdapter/configSchema.js +5 -0
- package/esm/data_adapters/dataAdapterCache.d.ts +25 -13
- package/esm/data_adapters/dataAdapterCache.js +68 -24
- package/esm/data_adapters/getFeatureAdapter.d.ts +9 -0
- package/esm/data_adapters/getFeatureAdapter.js +17 -0
- package/esm/pluggableElementTypes/DisplayType.d.ts +7 -0
- package/esm/pluggableElementTypes/DisplayType.js +7 -0
- package/esm/pluggableElementTypes/RpcMethodType.d.ts +7 -0
- package/esm/pluggableElementTypes/RpcMethodType.js +9 -0
- package/esm/pluggableElementTypes/addMenuItems.d.ts +2 -1
- package/esm/pluggableElementTypes/addMenuItems.js +2 -1
- package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +2 -0
- package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.js +2 -0
- package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +40 -5
- package/esm/pluggableElementTypes/models/BaseDisplayModel.js +57 -9
- package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +5 -7
- package/esm/pluggableElementTypes/models/BaseTrackModel.js +9 -10
- package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +2 -0
- package/esm/pluggableElementTypes/models/BaseViewModel.js +2 -0
- package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +3 -0
- package/esm/pluggableElementTypes/models/InternetAccountModel.js +3 -0
- package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +3 -0
- package/esm/pluggableElementTypes/models/baseConnectionConfig.js +3 -0
- package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +3 -1
- package/esm/pluggableElementTypes/models/baseInternetAccountConfig.js +3 -1
- package/esm/pluggableElementTypes/models/baseTrackConfig.js +12 -1
- package/esm/pluggableElementTypes/models/components/SaveTrackData.js +2 -2
- package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +1 -1
- package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +1 -1
- package/esm/pluginDefinitions.d.ts +7 -0
- package/esm/pluginDefinitions.js +20 -0
- package/esm/rpc/RpcRegistry.d.ts +2 -11
- package/esm/rpc/byteBudget.d.ts +15 -0
- package/esm/rpc/byteBudget.js +23 -0
- package/esm/rpc/configSchema.d.ts +2 -0
- package/esm/rpc/configSchema.js +3 -1
- package/esm/rpc/coreRpcMethods.d.ts +1 -2
- package/esm/rpc/coreRpcMethods.js +1 -2
- package/esm/rpc/explainTransferError.js +3 -3
- package/esm/rpc/methods/CoreGetEncodedLayers.d.ts +2 -2
- package/esm/rpc/methods/CoreGetEncodedLayers.js +7 -5
- package/esm/rpc/methods/CoreLoadTrackCode.d.ts +17 -0
- package/esm/rpc/methods/CoreLoadTrackCode.js +24 -0
- package/esm/rpc/methods/layerFeatures.d.ts +9 -6
- package/esm/rpc/methods/layerFeatures.js +21 -5
- package/esm/ui/ActionLink.d.ts +3 -2
- package/esm/ui/ActionLink.js +4 -2
- package/esm/ui/AddCustomPluginDialog.d.ts +3 -2
- package/esm/ui/AddCustomPluginDialog.js +6 -4
- package/esm/ui/AppLogo.js +43 -3
- package/esm/ui/BaseTooltip.d.ts +3 -2
- package/esm/ui/BaseTooltip.js +4 -2
- package/esm/ui/CascadingMenu.js +14 -12
- package/esm/ui/CascadingMenuButton.d.ts +2 -2
- package/esm/ui/CascadingMenuButton.js +5 -4
- package/esm/ui/CascadingMenuHelpDialog.d.ts +3 -2
- package/esm/ui/CascadingMenuHelpDialog.js +4 -2
- package/esm/ui/CascadingMenuHelpIconButton.d.ts +4 -3
- package/esm/ui/CascadingMenuHelpIconButton.js +9 -5
- package/esm/ui/ColorPicker.d.ts +5 -4
- package/esm/ui/ColorPicker.js +6 -4
- package/esm/ui/ContextMenu.d.ts +1 -1
- package/esm/ui/ContextMenu.js +1 -1
- package/esm/ui/CopyToClipboardButton.d.ts +3 -2
- package/esm/ui/CopyToClipboardButton.js +4 -2
- package/esm/ui/Crosshairs.js +13 -10
- package/esm/ui/DOMPurifySanitizedHTML.d.ts +3 -2
- package/esm/ui/DOMPurifySanitizedHTML.js +4 -2
- package/esm/ui/DataGridFlexContainer.d.ts +3 -2
- package/esm/ui/DataGridFlexContainer.js +4 -2
- package/esm/ui/Dialog.d.ts +1 -1
- package/esm/ui/Dialog.js +5 -4
- package/esm/ui/DropDownMenu.js +2 -2
- package/esm/ui/EditableTypography.d.ts +1 -1
- package/esm/ui/EditableTypography.js +3 -2
- package/esm/ui/ErrorActions.d.ts +3 -2
- package/esm/ui/ErrorActions.js +4 -2
- package/esm/ui/ErrorBanner.d.ts +2 -2
- package/esm/ui/ErrorBanner.js +3 -2
- package/esm/ui/ErrorBar.d.ts +3 -2
- package/esm/ui/ErrorBar.js +4 -2
- package/esm/ui/ErrorMessage.d.ts +3 -2
- package/esm/ui/ErrorMessage.js +4 -2
- package/esm/ui/ErrorMessageStackTraceContents.d.ts +3 -2
- package/esm/ui/ErrorMessageStackTraceContents.js +4 -2
- package/esm/ui/ErrorMessageStackTraceDialog.d.ts +3 -2
- package/esm/ui/ErrorMessageStackTraceDialog.js +4 -2
- package/esm/ui/ErrorOverlay.d.ts +3 -2
- package/esm/ui/ErrorOverlay.js +4 -2
- package/esm/ui/ExportSvgDialog.d.ts +3 -2
- package/esm/ui/ExportSvgDialog.js +4 -2
- package/esm/ui/ExternalLink.d.ts +2 -1
- package/esm/ui/ExternalLink.js +4 -2
- package/esm/ui/FactoryResetDialog.d.ts +3 -2
- package/esm/ui/FactoryResetDialog.js +4 -2
- package/esm/ui/FatalErrorDialog.d.ts +3 -2
- package/esm/ui/FatalErrorDialog.js +6 -4
- package/esm/ui/FileDropZone.d.ts +3 -2
- package/esm/ui/FileDropZone.js +4 -2
- package/esm/ui/FileSelector/LocalFileChooser.js +4 -4
- package/esm/ui/FileSelector/LocationInput.d.ts +3 -2
- package/esm/ui/FileSelector/LocationInput.js +4 -2
- package/esm/ui/FileSelector/SourceTypeSelector.d.ts +3 -2
- package/esm/ui/FileSelector/SourceTypeSelector.js +8 -6
- package/esm/ui/GpuFallbackButton.d.ts +3 -2
- package/esm/ui/GpuFallbackButton.js +4 -2
- package/esm/ui/HoverMenu.d.ts +2 -2
- package/esm/ui/HoverMenu.js +7 -3
- package/esm/ui/HoverTooltip.d.ts +3 -2
- package/esm/ui/HoverTooltip.js +4 -2
- package/esm/ui/Icons.d.ts +5 -5
- package/esm/ui/Icons.js +11 -10
- package/esm/ui/InlineMenuControls.d.ts +2 -2
- package/esm/ui/InlineMenuControls.js +4 -3
- package/esm/ui/JexlFilterRowEditors.d.ts +4 -4
- package/esm/ui/JexlFilterRowEditors.js +9 -8
- package/esm/ui/LabeledCheckbox.d.ts +3 -2
- package/esm/ui/LabeledCheckbox.js +4 -2
- package/esm/ui/LazyBaseTooltip.d.ts +12 -3
- package/esm/ui/LazyBaseTooltip.js +4 -2
- package/esm/ui/LegendSwatchGlyph.js +1 -0
- package/esm/ui/LoadingDots.d.ts +2 -1
- package/esm/ui/LoadingDots.js +4 -2
- package/esm/ui/LoadingEllipses.d.ts +5 -2
- package/esm/ui/LoadingEllipses.js +5 -3
- package/esm/ui/LoadingOverlay.d.ts +3 -2
- package/esm/ui/LoadingOverlay.js +4 -2
- package/esm/ui/LoadingProgress.d.ts +3 -2
- package/esm/ui/LoadingProgress.js +4 -2
- package/esm/ui/Logo.d.ts +2 -2
- package/esm/ui/Logo.js +9 -8
- package/esm/ui/MenuItemChevron.d.ts +2 -2
- package/esm/ui/MenuItemChevron.js +3 -2
- package/esm/ui/MenuItemEndDecoration.d.ts +2 -2
- package/esm/ui/MenuItemEndDecoration.js +3 -2
- package/esm/ui/MenuItemTrailing.d.ts +2 -2
- package/esm/ui/MenuItemTrailing.js +7 -6
- package/esm/ui/MenuTypes.d.ts +21 -1
- package/esm/ui/MenuTypes.js +20 -0
- package/esm/ui/MonospaceTextField.d.ts +3 -2
- package/esm/ui/MonospaceTextField.js +4 -2
- package/esm/ui/NumberTextField.d.ts +2 -2
- package/esm/ui/NumberTextField.js +4 -2
- package/esm/ui/PaletteContext.d.ts +11 -9
- package/esm/ui/PaletteContext.js +33 -18
- package/esm/ui/PluginStoreCard.d.ts +3 -2
- package/esm/ui/PluginStoreCard.js +4 -2
- package/esm/ui/PopoverPicker.d.ts +3 -2
- package/esm/ui/PopoverPicker.js +4 -2
- package/esm/ui/PrerenderedCanvas.d.ts +2 -2
- package/esm/ui/PrerenderedCanvas.js +3 -2
- package/esm/ui/RedErrorMessageBox.d.ts +3 -2
- package/esm/ui/RedErrorMessageBox.js +4 -2
- package/esm/ui/RefNameAutocomplete/EndAdornment.d.ts +3 -2
- package/esm/ui/RefNameAutocomplete/EndAdornment.js +4 -2
- package/esm/ui/RefNameAutocomplete/HelpDialog.d.ts +3 -2
- package/esm/ui/RefNameAutocomplete/HelpDialog.js +4 -2
- package/esm/ui/ReplaceCurrentViewButton.d.ts +3 -2
- package/esm/ui/ReplaceCurrentViewButton.js +4 -2
- package/esm/ui/ResizeHandle.d.ts +2 -2
- package/esm/ui/ResizeHandle.js +3 -2
- package/esm/ui/SanitizedHTML.d.ts +3 -2
- package/esm/ui/SanitizedHTML.js +6 -4
- package/esm/ui/ScrollChrome.d.ts +3 -2
- package/esm/ui/ScrollChrome.js +4 -2
- package/esm/ui/ScrollEdgeShadow.d.ts +2 -2
- package/esm/ui/ScrollEdgeShadow.js +2 -2
- package/esm/ui/SessionJsonPanel.d.ts +3 -2
- package/esm/ui/SessionJsonPanel.js +4 -2
- package/esm/ui/ShareLinkField.d.ts +3 -2
- package/esm/ui/ShareLinkField.js +4 -2
- package/esm/ui/SingleSlider.d.ts +2 -2
- package/esm/ui/SingleSlider.js +4 -2
- package/esm/ui/SliderTooltip.d.ts +2 -1
- package/esm/ui/SliderTooltip.js +4 -2
- package/esm/ui/SnackbarContents.d.ts +3 -2
- package/esm/ui/SnackbarContents.js +4 -2
- package/esm/ui/SnackbarModel.d.ts +2 -0
- package/esm/ui/SnackbarModel.js +2 -0
- package/esm/ui/StackTraceButton.d.ts +3 -2
- package/esm/ui/StackTraceButton.js +4 -2
- package/esm/ui/StatusProgressBar.d.ts +3 -2
- package/esm/ui/StatusProgressBar.js +4 -2
- package/esm/ui/SubmitForm.d.ts +2 -1
- package/esm/ui/SubmitForm.js +4 -2
- package/esm/ui/SvgColorLegend.d.ts +3 -4
- package/esm/ui/SvgColorLegend.js +27 -18
- package/esm/ui/TagTextField.d.ts +2 -2
- package/esm/ui/TagTextField.js +4 -2
- package/esm/ui/ViewLoadingScreen.d.ts +3 -2
- package/esm/ui/ViewLoadingScreen.js +4 -2
- package/esm/ui/buildExtraTrackMenuItems.d.ts +2 -2
- package/esm/ui/colorScale.d.ts +5 -1
- package/esm/ui/colorScale.js +12 -10
- package/esm/ui/colors.d.ts +42 -31
- package/esm/ui/colors.js +85 -48
- package/esm/ui/filterMenuItems.d.ts +10 -31
- package/esm/ui/filterMenuItems.js +13 -14
- package/esm/ui/index.d.ts +1 -1
- package/esm/ui/index.js +1 -1
- package/esm/ui/launchTargetsMenuItem.js +9 -13
- package/esm/ui/legendMenuItem.d.ts +4 -4
- package/esm/ui/legendMenuItem.js +4 -4
- package/esm/ui/menuItemAdornment.d.ts +1 -1
- package/esm/ui/menuItemAdornment.js +1 -1
- package/esm/ui/menuItems.d.ts +1 -1
- package/esm/ui/menuItems.js +1 -1
- package/esm/ui/menuLabels.d.ts +2 -2
- package/esm/ui/menuLabels.js +2 -2
- package/esm/ui/multiTrackMenuItems.d.ts +2 -2
- package/esm/ui/palette.d.ts +2 -2
- package/esm/ui/palette.js +10 -10
- package/esm/ui/radioSubMenu.d.ts +5 -3
- package/esm/ui/radioSubMenu.js +2 -2
- package/esm/ui/rampKey.d.ts +15 -0
- package/esm/ui/rampKey.js +17 -0
- package/esm/ui/showSubMenu.d.ts +0 -5
- package/esm/ui/showSubMenu.js +6 -15
- package/esm/ui/theme.d.ts +2 -2
- package/esm/ui/theme.js +1 -1
- package/esm/ui/useAssemblySelection.d.ts +2 -0
- package/esm/ui/useMouseTracking.d.ts +8 -20
- package/esm/ui/useMouseTracking.js +23 -62
- package/esm/ui/usePlacedMenuFocus.d.ts +19 -0
- package/esm/ui/usePlacedMenuFocus.js +28 -0
- package/esm/util/Base1DViewModel.d.ts +5 -3
- package/esm/util/Base1DViewModel.js +5 -3
- package/esm/util/SvgCanvas.js +1 -1
- package/esm/util/aggregateFieldName.d.ts +1 -10
- package/esm/util/aggregateFieldName.js +1 -8
- package/esm/util/alignedBytes.d.ts +19 -0
- package/esm/util/alignedBytes.js +37 -0
- package/esm/util/analytics.d.ts +6 -9
- package/esm/util/analytics.js +148 -15
- package/esm/util/bezierConnector.d.ts +20 -0
- package/esm/util/bezierConnector.js +34 -96
- package/esm/util/cacheBudgets.d.ts +3 -0
- package/esm/util/cacheBudgets.js +3 -0
- package/esm/util/categoricalField.d.ts +24 -4
- package/esm/util/categoricalField.js +38 -5
- package/esm/util/cellMatches.js +14 -14
- package/esm/util/cellsStep.d.ts +3 -5
- package/esm/util/cellsStep.js +31 -29
- package/esm/util/color/index.d.ts +1 -1
- package/esm/util/color/index.js +2 -2
- package/esm/util/color-bits/bit.js +1 -1
- package/esm/util/color-bits/parse.js +28 -17
- package/esm/util/colorBits.d.ts +15 -4
- package/esm/util/colorBits.js +38 -15
- package/esm/util/colorRamp.d.ts +3 -3
- package/esm/util/colorRamp.js +20 -2
- package/esm/util/colorScale.d.ts +123 -22
- package/esm/util/colorScale.js +157 -28
- package/esm/util/colorSchemes.d.ts +7 -3
- package/esm/util/colorSchemes.js +8 -2
- package/esm/util/createSvgRasterCanvas.d.ts +14 -1
- package/esm/util/createSvgRasterCanvas.js +36 -12
- package/esm/util/diagonalizeRegions.js +18 -9
- package/esm/util/featureTransforms.d.ts +2 -2
- package/esm/util/featureTransforms.js +85 -135
- package/esm/util/fileHandleStore.js +5 -0
- package/esm/util/groupKeys.d.ts +5 -4
- package/esm/util/groupKeys.js +15 -9
- package/esm/util/index.js +1 -1
- package/esm/util/installFetch.d.ts +2 -2
- package/esm/util/installPrerequisiteFetch.d.ts +8 -3
- package/esm/util/installPrerequisiteFetch.js +9 -7
- package/esm/util/io/RemoteFileWithRangeCache.d.ts +1 -1
- package/esm/util/io/RemoteFileWithRangeCache.js +1 -1
- package/esm/util/isoformRank.d.ts +39 -0
- package/esm/util/isoformRank.js +118 -0
- package/esm/util/jexl.js +1 -1
- package/esm/util/layouts/GranularRectLayout.d.ts +19 -3
- package/esm/util/layouts/GranularRectLayout.js +57 -34
- package/esm/util/leadingEdgeAutorun.d.ts +9 -1
- package/esm/util/leadingEdgeAutorun.js +5 -2
- package/esm/util/markEncoding.d.ts +10 -8
- package/esm/util/markEncoding.js +50 -12
- package/esm/util/markEncodingTypes.d.ts +77 -21
- package/esm/util/originCut.d.ts +14 -0
- package/esm/util/originCut.js +19 -0
- package/esm/util/paintLayer.d.ts +1 -1
- package/esm/util/paintLayer.js +4 -3
- package/esm/util/pathSeries.d.ts +18 -0
- package/esm/util/pathSeries.js +143 -0
- package/esm/util/pressOwner.d.ts +20 -0
- package/esm/util/pressOwner.js +26 -0
- package/esm/util/quantileExtent.d.ts +23 -1
- package/esm/util/quantileExtent.js +25 -2
- package/esm/util/rowStackGeometry.d.ts +1 -1
- package/esm/util/rowStackGeometry.js +1 -1
- package/esm/util/sessionActivity.d.ts +36 -0
- package/esm/util/sessionActivity.js +88 -0
- package/esm/util/stepOutputs.d.ts +165 -0
- package/esm/util/stepOutputs.js +201 -0
- package/esm/util/stepTables.d.ts +7 -3
- package/esm/util/stepTables.js +86 -3
- package/esm/util/systemColorScheme.d.ts +4 -0
- package/esm/util/systemColorScheme.js +21 -0
- package/esm/util/tabix.d.ts +1 -1
- package/esm/util/tabix.js +1 -1
- package/esm/util/temporaryAssembly.d.ts +2 -2
- package/esm/util/temporaryAssembly.js +2 -3
- package/esm/util/thresholdScale.d.ts +1 -1
- package/esm/util/thresholdScale.js +1 -1
- package/esm/util/trackConfigDelta.d.ts +1 -1
- package/esm/util/tracks.d.ts +25 -15
- package/esm/util/tracks.js +68 -44
- package/esm/util/types/index.d.ts +15 -7
- package/esm/util/types/index.js +21 -2
- package/esm/util/usePanZoom.js +4 -10
- package/esm/util/useRowVirtualScroll.d.ts +1 -0
- package/esm/util/windowStep.d.ts +6 -0
- package/esm/util/windowStep.js +153 -0
- package/package.json +27 -16
- package/esm/data_adapters/BaseAdapter/featureDensity.d.ts +0 -40
- package/esm/data_adapters/BaseAdapter/featureDensity.js +0 -31
- package/esm/rpc/methods/CoreGetFeatureDensity.d.ts +0 -11
- package/esm/rpc/methods/CoreGetFeatureDensity.js +0 -22
- package/esm/rpc/methods/CoreLoadAdapterCode.d.ts +0 -13
- package/esm/rpc/methods/CoreLoadAdapterCode.js +0 -16
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { ConfigurationSchema } from '../../configuration/index.js';
|
|
2
2
|
/**
|
|
3
3
|
* #config BaseInternetAccount
|
|
4
|
-
*
|
|
4
|
+
* Holds an internet account's name and description, the domains it handles,
|
|
5
|
+
* and the request header it sends credentials in. Every internet account type
|
|
6
|
+
* has these slots.
|
|
5
7
|
*/
|
|
6
8
|
export const BaseInternetAccountConfig = ConfigurationSchema('InternetAccount', {
|
|
7
9
|
/**
|
|
@@ -162,7 +162,7 @@ export function createBaseTrackConfig(pluginManager) {
|
|
|
162
162
|
},
|
|
163
163
|
/**
|
|
164
164
|
* #slot
|
|
165
|
-
*
|
|
165
|
+
* The source of this track's data. Its `type` names the adapter for
|
|
166
166
|
* the file format (`BamAdapter`, `Gff3TabixAdapter`, ...) and the rest of
|
|
167
167
|
* the object is that adapter's own slots — see the adapter pages for
|
|
168
168
|
* each. Most adapters also accept a `uri` shorthand in place of writing
|
|
@@ -177,6 +177,7 @@ export function createBaseTrackConfig(pluginManager) {
|
|
|
177
177
|
type: 'stringArray',
|
|
178
178
|
description: 'list of which feature attributes to index for text searching',
|
|
179
179
|
defaultValue: ['Name', 'ID', 'symbol'],
|
|
180
|
+
advanced: true,
|
|
180
181
|
},
|
|
181
182
|
/**
|
|
182
183
|
* #slot textSearching.indexingFeatureTypesToExclude
|
|
@@ -185,6 +186,7 @@ export function createBaseTrackConfig(pluginManager) {
|
|
|
185
186
|
type: 'stringArray',
|
|
186
187
|
description: 'list of feature types to exclude in text search index',
|
|
187
188
|
defaultValue: ['CDS', 'exon'],
|
|
189
|
+
advanced: true,
|
|
188
190
|
},
|
|
189
191
|
/**
|
|
190
192
|
* #slot textSearching.indexingFeatureTypesToInclude
|
|
@@ -207,6 +209,7 @@ export function createBaseTrackConfig(pluginManager) {
|
|
|
207
209
|
type: 'stringArray',
|
|
208
210
|
description: 'the only feature types to index; empty means index every type not excluded',
|
|
209
211
|
defaultValue: [],
|
|
212
|
+
advanced: true,
|
|
210
213
|
},
|
|
211
214
|
/**
|
|
212
215
|
* #slot textSearching.textSearchAdapter
|
|
@@ -255,5 +258,13 @@ export function createBaseTrackConfig(pluginManager) {
|
|
|
255
258
|
*/
|
|
256
259
|
explicitIdentifier: 'trackId',
|
|
257
260
|
explicitlyTyped: true,
|
|
261
|
+
closed: true,
|
|
262
|
+
// v1.3 wrote the text-search adapter and its attributes on the track,
|
|
263
|
+
// before `textSearching`
|
|
264
|
+
retired: {
|
|
265
|
+
rpcDriverName: () => ({}),
|
|
266
|
+
textSearchAdapter: () => ({}),
|
|
267
|
+
textSearchIndexingAttributes: () => ({}),
|
|
268
|
+
},
|
|
258
269
|
});
|
|
259
270
|
}
|
|
@@ -56,7 +56,7 @@ function useTrackDataExport({ model, regions, regionStr, type, options, }) {
|
|
|
56
56
|
* The format picker, owning the per-format help text and the dialog that shows
|
|
57
57
|
* it — nothing above needs to know a format can carry one.
|
|
58
58
|
*/
|
|
59
|
-
function FormatSelector({ options, type, setType, usedAdapterExport, }) {
|
|
59
|
+
const FormatSelector = observer(function FormatSelector({ options, type, setType, usedAdapterExport, }) {
|
|
60
60
|
const { classes } = useStyles();
|
|
61
61
|
const [helpText, setHelpText] = useState();
|
|
62
62
|
return (_jsxs(FormControl, { children: [_jsx(FormLabel, { children: `File type${usedAdapterExport ? ' (adapter export)' : ''}` }), _jsx(RadioGroup, { value: type, onChange: e => {
|
|
@@ -66,7 +66,7 @@ function FormatSelector({ options, type, setType, usedAdapterExport, }) {
|
|
|
66
66
|
}, title: "Show help for this format", children: _jsx(HelpOutlineIcon, { fontSize: "small" }) })) : null] }, key))) }), _jsx(InfoDialog, { open: helpText !== undefined, onClose: () => {
|
|
67
67
|
setHelpText(undefined);
|
|
68
68
|
}, title: "Format Information", children: _jsx(DialogContentText, { children: helpText }) })] }));
|
|
69
|
-
}
|
|
69
|
+
});
|
|
70
70
|
/**
|
|
71
71
|
* What the preview pane says — the export itself only once there is one, and
|
|
72
72
|
* before that whichever of the four other states the dialog is in. In
|
|
@@ -8,7 +8,7 @@ export interface DisplaySnapshot {
|
|
|
8
8
|
/**
|
|
9
9
|
* Route each shorthand `displayDefaults: {...}` setting to the display types
|
|
10
10
|
* whose member of that name takes its value: `color: 'red'` reaches every
|
|
11
|
-
* display with a
|
|
11
|
+
* display with a color, `color: { field: 'type' }` only those whose color
|
|
12
12
|
* maps a field, and a spelling a display retired reaches that display as the
|
|
13
13
|
* members it became. `reached` names the displays each key went to. A key no
|
|
14
14
|
* display knows is an `unknownKeys` entry, and one every display that knows it
|
|
@@ -35,7 +35,7 @@ function verdictOf(schema, key, value) {
|
|
|
35
35
|
/**
|
|
36
36
|
* Route each shorthand `displayDefaults: {...}` setting to the display types
|
|
37
37
|
* whose member of that name takes its value: `color: 'red'` reaches every
|
|
38
|
-
* display with a
|
|
38
|
+
* display with a color, `color: { field: 'type' }` only those whose color
|
|
39
39
|
* maps a field, and a spelling a display retired reaches that display as the
|
|
40
40
|
* members it became. `reached` names the displays each key went to. A key no
|
|
41
41
|
* display knows is an `unknownKeys` entry, and one every display that knows it
|
|
@@ -129,6 +129,13 @@ export declare function pluginDescriptionString(d: PluginDefinition): string;
|
|
|
129
129
|
* the same plugin just because neither has a url.
|
|
130
130
|
*/
|
|
131
131
|
export declare function maybePluginUrl(d: PluginDefinition): string | undefined;
|
|
132
|
+
/**
|
|
133
|
+
* The absolute url PluginLoader fetches the definition from: a `umdLoc` or
|
|
134
|
+
* `esmLoc` against its own `baseUri`, any other form against the page. Trust
|
|
135
|
+
* decisions key on this rather than `maybePluginUrl`, under which one relative
|
|
136
|
+
* `plugin.js` names a different file in every config that lists it.
|
|
137
|
+
*/
|
|
138
|
+
export declare function resolvedPluginUrl(d: PluginDefinition, pageUri?: string | undefined): string | undefined;
|
|
132
139
|
export declare function pluginUrl(d: PluginDefinition): string;
|
|
133
140
|
/**
|
|
134
141
|
* Whether a definition loads from exactly `url` — the question behind "which
|
package/esm/pluginDefinitions.js
CHANGED
|
@@ -114,6 +114,26 @@ export function maybePluginUrl(d) {
|
|
|
114
114
|
return undefined;
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* The absolute url PluginLoader fetches the definition from: a `umdLoc` or
|
|
119
|
+
* `esmLoc` against its own `baseUri`, any other form against the page. Trust
|
|
120
|
+
* decisions key on this rather than `maybePluginUrl`, under which one relative
|
|
121
|
+
* `plugin.js` names a different file in every config that lists it.
|
|
122
|
+
*/
|
|
123
|
+
export function resolvedPluginUrl(d, pageUri = typeof location === 'undefined' ? undefined : location.href) {
|
|
124
|
+
const url = maybePluginUrl(d);
|
|
125
|
+
const base = 'umdLoc' in d
|
|
126
|
+
? d.umdLoc.baseUri
|
|
127
|
+
: 'esmLoc' in d
|
|
128
|
+
? d.esmLoc.baseUri
|
|
129
|
+
: pageUri;
|
|
130
|
+
try {
|
|
131
|
+
return url === undefined ? undefined : new URL(url, base).href;
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
return undefined;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
117
137
|
export function pluginUrl(d) {
|
|
118
138
|
return maybePluginUrl(d) ?? 'unknown url';
|
|
119
139
|
}
|
package/esm/rpc/RpcRegistry.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { FeatureDensity } from '../data_adapters/BaseAdapter/featureDensity.ts';
|
|
2
1
|
import type { CoreGetEncodedLayersArgs, EncodedLayersResult } from '../util/markEncodingTypes.ts';
|
|
3
2
|
import type { StatusCallback } from '../util/progress.ts';
|
|
4
3
|
import type { UnwrapRpcResult } from '../util/rpc.ts';
|
|
@@ -64,15 +63,6 @@ export interface RpcRegistry {
|
|
|
64
63
|
};
|
|
65
64
|
return: number | undefined;
|
|
66
65
|
};
|
|
67
|
-
CoreGetFeatureDensity: {
|
|
68
|
-
args: {
|
|
69
|
-
adapterConfig: Record<string, unknown>;
|
|
70
|
-
regions: RegionLike[];
|
|
71
|
-
bpPerPx: number;
|
|
72
|
-
headers?: Record<string, string>;
|
|
73
|
-
};
|
|
74
|
-
return: FeatureDensity[] | undefined;
|
|
75
|
-
};
|
|
76
66
|
CoreGetInfo: {
|
|
77
67
|
args: {
|
|
78
68
|
adapterConfig: Record<string, unknown>;
|
|
@@ -100,9 +90,10 @@ export interface RpcRegistry {
|
|
|
100
90
|
args: Record<string, unknown>;
|
|
101
91
|
return: void;
|
|
102
92
|
};
|
|
103
|
-
|
|
93
|
+
CoreLoadTrackCode: {
|
|
104
94
|
args: {
|
|
105
95
|
adapterTypes: string[];
|
|
96
|
+
rpcMethods: string[];
|
|
106
97
|
};
|
|
107
98
|
return: void;
|
|
108
99
|
};
|
package/esm/rpc/byteBudget.d.ts
CHANGED
|
@@ -33,8 +33,23 @@ export interface RegionTooLargeResult {
|
|
|
33
33
|
partial?: boolean;
|
|
34
34
|
}
|
|
35
35
|
export declare function isRegionRefused(result: unknown): result is RegionTooLargeResult;
|
|
36
|
+
/**
|
|
37
|
+
* The thrown form of the same refusal, for an adapter whose limit only a fetch
|
|
38
|
+
* can find, such as a graph's node count. Marked by an own `regionTooLarge`
|
|
39
|
+
* property, which crosses the worker boundary, so an adapter's own error class
|
|
40
|
+
* opts in without importing anything.
|
|
41
|
+
*/
|
|
42
|
+
export declare function isRegionTooLargeError(error: unknown): error is Error;
|
|
36
43
|
/** Undefined, never 0, when no region could be measured. */
|
|
37
44
|
export declare function largestRegionBytes(perRegion: (number | undefined)[]): number | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* The regions' index-only byte estimates summed, for a reader that holds
|
|
47
|
+
* every region at once; undefined, never 0, when no region could be measured.
|
|
48
|
+
*/
|
|
49
|
+
export declare function totalRegionBytes(dataAdapter: ByteMeasurableAdapter, regions: AugmentedRegion[], opts?: {
|
|
50
|
+
signal?: AbortSignal;
|
|
51
|
+
statusCallback?: StatusCallback;
|
|
52
|
+
}): Promise<number | undefined>;
|
|
38
53
|
/** A non-positive declared limit means "no opinion" (htsget reports 0). */
|
|
39
54
|
export declare function adapterByteLimit(declared: unknown, fallback: number): number;
|
|
40
55
|
export declare function overByteBudget(bytes: number | undefined, byteLimit: number | undefined): bytes is number;
|
package/esm/rpc/byteBudget.js
CHANGED
|
@@ -3,6 +3,16 @@ import { updateStatus } from '../util/progress.js';
|
|
|
3
3
|
export function isRegionRefused(result) {
|
|
4
4
|
return (typeof result === 'object' && result !== null && 'regionTooLarge' in result);
|
|
5
5
|
}
|
|
6
|
+
/**
|
|
7
|
+
* The thrown form of the same refusal, for an adapter whose limit only a fetch
|
|
8
|
+
* can find, such as a graph's node count. Marked by an own `regionTooLarge`
|
|
9
|
+
* property, which crosses the worker boundary, so an adapter's own error class
|
|
10
|
+
* opts in without importing anything.
|
|
11
|
+
*/
|
|
12
|
+
export function isRegionTooLargeError(error) {
|
|
13
|
+
return (error instanceof Error &&
|
|
14
|
+
error.regionTooLarge === true);
|
|
15
|
+
}
|
|
6
16
|
/** Undefined, never 0, when no region could be measured. */
|
|
7
17
|
export function largestRegionBytes(perRegion) {
|
|
8
18
|
let largest;
|
|
@@ -13,6 +23,19 @@ export function largestRegionBytes(perRegion) {
|
|
|
13
23
|
}
|
|
14
24
|
return largest;
|
|
15
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* The regions' index-only byte estimates summed, for a reader that holds
|
|
28
|
+
* every region at once; undefined, never 0, when no region could be measured.
|
|
29
|
+
*/
|
|
30
|
+
export async function totalRegionBytes(dataAdapter, regions, opts) {
|
|
31
|
+
let total;
|
|
32
|
+
for (const bytes of await Promise.all(regions.map(region => dataAdapter.getRegionByteSize([region], opts)))) {
|
|
33
|
+
if (bytes !== undefined) {
|
|
34
|
+
total = (total ?? 0) + bytes;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return total;
|
|
38
|
+
}
|
|
16
39
|
/** A non-positive declared limit means "no opinion" (htsget reports 0). */
|
|
17
40
|
export function adapterByteLimit(declared, fallback) {
|
|
18
41
|
return typeof declared === 'number' && declared > 0 ? declared : fallback;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* #config RpcOptions
|
|
3
3
|
* #category root
|
|
4
|
+
* Chooses whether data fetching runs on the main thread or in web workers, and
|
|
5
|
+
* how many workers to start. Found on the root config as `configuration.rpc`.
|
|
4
6
|
*/
|
|
5
7
|
declare const _default: import("../configuration/configurationSchema.ts").ConfigurationSchemaType<{
|
|
6
8
|
readonly defaultDriver: {
|
package/esm/rpc/configSchema.js
CHANGED
|
@@ -2,11 +2,13 @@ import { ConfigurationSchema } from '../configuration/index.js';
|
|
|
2
2
|
/**
|
|
3
3
|
* #config RpcOptions
|
|
4
4
|
* #category root
|
|
5
|
+
* Chooses whether data fetching runs on the main thread or in web workers, and
|
|
6
|
+
* how many workers to start. Found on the root config as `configuration.rpc`.
|
|
5
7
|
*/
|
|
6
8
|
export default ConfigurationSchema('RpcOptions', {
|
|
7
9
|
/**
|
|
8
10
|
* #slot
|
|
9
|
-
*
|
|
11
|
+
* The RPC backend. Empty means "use the host application's
|
|
10
12
|
* default" (web/desktop default to the web worker driver, embedded/headless
|
|
11
13
|
* to the main thread). Every call in the session runs on the driver this
|
|
12
14
|
* names; there is no per-track or per-call override.
|
|
@@ -6,8 +6,7 @@ export { default as CoreGetEncodedLayers } from './methods/CoreGetEncodedLayers.
|
|
|
6
6
|
export { default as CoreGetEncodedFeature } from './methods/CoreGetEncodedFeature.ts';
|
|
7
7
|
export { default as CoreGetSequence } from './methods/CoreGetSequence.ts';
|
|
8
8
|
export { default as CoreFreeResources } from './methods/CoreFreeResources.ts';
|
|
9
|
-
export { default as
|
|
9
|
+
export { default as CoreLoadTrackCode } from './methods/CoreLoadTrackCode.ts';
|
|
10
10
|
export { default as CoreGetRegionByteEstimate } from './methods/CoreGetRegionByteEstimate.ts';
|
|
11
|
-
export { default as CoreGetFeatureDensity } from './methods/CoreGetFeatureDensity.ts';
|
|
12
11
|
export { default as CoreGetRegions } from './methods/CoreGetRegions.ts';
|
|
13
12
|
export { default as CoreGetExportData } from './methods/CoreGetExportData.ts';
|
|
@@ -6,8 +6,7 @@ export { default as CoreGetEncodedLayers } from './methods/CoreGetEncodedLayers.
|
|
|
6
6
|
export { default as CoreGetEncodedFeature } from './methods/CoreGetEncodedFeature.js';
|
|
7
7
|
export { default as CoreGetSequence } from './methods/CoreGetSequence.js';
|
|
8
8
|
export { default as CoreFreeResources } from './methods/CoreFreeResources.js';
|
|
9
|
-
export { default as
|
|
9
|
+
export { default as CoreLoadTrackCode } from './methods/CoreLoadTrackCode.js';
|
|
10
10
|
export { default as CoreGetRegionByteEstimate } from './methods/CoreGetRegionByteEstimate.js';
|
|
11
|
-
export { default as CoreGetFeatureDensity } from './methods/CoreGetFeatureDensity.js';
|
|
12
11
|
export { default as CoreGetRegions } from './methods/CoreGetRegions.js';
|
|
13
12
|
export { default as CoreGetExportData } from './methods/CoreGetExportData.js';
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
// sentence this appends to.
|
|
15
15
|
//
|
|
16
16
|
// Only runs on the error path.
|
|
17
|
-
// The deepest RPC result in the tree is the
|
|
18
|
-
// `perRegionCellData.0.
|
|
19
|
-
//
|
|
17
|
+
// The deepest RPC result in the tree is the multi-sample variant one:
|
|
18
|
+
// `perRegionCellData.0.featureInfo.<index>.genotypeCodes` — four containers
|
|
19
|
+
// down. The alignments result is three (`groups.3.data.mismatchStarts`),
|
|
20
20
|
// synteny two (`instanceData.bp1`, `attributes.identity`) and most are one. The
|
|
21
21
|
// walk is capped rather than unbounded because a payload also carries plain data
|
|
22
22
|
// — a featureIds array of half a million strings — and there is no reason to
|
|
@@ -6,9 +6,9 @@ import type { RpcExecuteArgs } from '../RpcRegistry.ts';
|
|
|
6
6
|
* split them by the facet where the request names one, run each layer's own
|
|
7
7
|
* steps (per section, under a facet), and evaluate the layer's encoding over
|
|
8
8
|
* what is left in the worker, where the `Feature` objects are, filling the
|
|
9
|
-
* lanes its mark reads. The
|
|
9
|
+
* lanes its mark reads. The colors come back packed, the scale tables
|
|
10
10
|
* resolved, and the main thread reads the same table for its legend that the
|
|
11
|
-
*
|
|
11
|
+
* colors were drawn from.
|
|
12
12
|
*/
|
|
13
13
|
export default class CoreGetEncodedLayers extends RpcMethodTypeWithRenameRegion<'CoreGetEncodedLayers'> {
|
|
14
14
|
name: 'CoreGetEncodedLayers';
|
|
@@ -10,9 +10,9 @@ import { layerFeatures } from './layerFeatures.js';
|
|
|
10
10
|
* split them by the facet where the request names one, run each layer's own
|
|
11
11
|
* steps (per section, under a facet), and evaluate the layer's encoding over
|
|
12
12
|
* what is left in the worker, where the `Feature` objects are, filling the
|
|
13
|
-
* lanes its mark reads. The
|
|
13
|
+
* lanes its mark reads. The colors come back packed, the scale tables
|
|
14
14
|
* resolved, and the main thread reads the same table for its legend that the
|
|
15
|
-
*
|
|
15
|
+
* colors were drawn from.
|
|
16
16
|
*/
|
|
17
17
|
export default class CoreGetEncodedLayers extends RpcMethodTypeWithRenameRegion {
|
|
18
18
|
name = 'CoreGetEncodedLayers';
|
|
@@ -34,10 +34,10 @@ export default class CoreGetEncodedLayers extends RpcMethodTypeWithRenameRegion
|
|
|
34
34
|
return tooLarge;
|
|
35
35
|
}
|
|
36
36
|
const { jexl } = pluginManager;
|
|
37
|
-
const { layers: layered, sections, zoomRange, notices, } = await layerFeatures(dataAdapter, args, jexl);
|
|
37
|
+
const { layers: layered, sections, zoomRange, notices, facts, } = await layerFeatures(dataAdapter, args, jexl);
|
|
38
38
|
const layers = requested.map((request, i) => {
|
|
39
|
-
const { table, row } = layered[i];
|
|
40
|
-
|
|
39
|
+
const { table, row, series, gapBp } = layered[i];
|
|
40
|
+
const encoded = encodeFeatures(table, { ...request.encoding, row, series }, request.lanes, {
|
|
41
41
|
jexl,
|
|
42
42
|
report: createProgressReporter({
|
|
43
43
|
label: 'Processing features',
|
|
@@ -46,6 +46,7 @@ export default class CoreGetEncodedLayers extends RpcMethodTypeWithRenameRegion
|
|
|
46
46
|
signal,
|
|
47
47
|
}),
|
|
48
48
|
});
|
|
49
|
+
return gapBp === undefined ? encoded : { ...encoded, gapBp };
|
|
49
50
|
});
|
|
50
51
|
const result = {
|
|
51
52
|
layers,
|
|
@@ -53,6 +54,7 @@ export default class CoreGetEncodedLayers extends RpcMethodTypeWithRenameRegion
|
|
|
53
54
|
bytes,
|
|
54
55
|
zoomRange,
|
|
55
56
|
...(notices.length > 0 ? { notices } : {}),
|
|
57
|
+
...(Object.keys(facts).length > 0 ? { facts } : {}),
|
|
56
58
|
};
|
|
57
59
|
return rpcResult(result, layers.flatMap(l => encodedChannelTransferables(l)));
|
|
58
60
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import RpcMethodType from '../../pluggableElementTypes/RpcMethodType.ts';
|
|
2
|
+
import type { RpcExecuteArgs } from '../RpcRegistry.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Load the code a track's first request runs in the worker it is about to use:
|
|
5
|
+
* its adapter classes and the RPC methods its display names. Each arrives by
|
|
6
|
+
* dynamic import on that request otherwise, after the view lays out, the
|
|
7
|
+
* assembly loads and the request's refNames resolve.
|
|
8
|
+
*
|
|
9
|
+
* At launch rather than at worker boot: until `parallelizeChunkLoading` is
|
|
10
|
+
* installed a classic worker loads chunks by serial `importScripts`, and an
|
|
11
|
+
* import there delayed the first data request 360ms at 80ms RTT.
|
|
12
|
+
*/
|
|
13
|
+
export default class CoreLoadTrackCode extends RpcMethodType<'CoreLoadTrackCode'> {
|
|
14
|
+
name: 'CoreLoadTrackCode';
|
|
15
|
+
execute({ adapterTypes, rpcMethods, }: RpcExecuteArgs<'CoreLoadTrackCode'>): Promise<void>;
|
|
16
|
+
serializeArguments(args: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import RpcMethodType from '../../pluggableElementTypes/RpcMethodType.js';
|
|
2
|
+
/**
|
|
3
|
+
* Load the code a track's first request runs in the worker it is about to use:
|
|
4
|
+
* its adapter classes and the RPC methods its display names. Each arrives by
|
|
5
|
+
* dynamic import on that request otherwise, after the view lays out, the
|
|
6
|
+
* assembly loads and the request's refNames resolve.
|
|
7
|
+
*
|
|
8
|
+
* At launch rather than at worker boot: until `parallelizeChunkLoading` is
|
|
9
|
+
* installed a classic worker loads chunks by serial `importScripts`, and an
|
|
10
|
+
* import there delayed the first data request 360ms at 80ms RTT.
|
|
11
|
+
*/
|
|
12
|
+
export default class CoreLoadTrackCode extends RpcMethodType {
|
|
13
|
+
name = 'CoreLoadTrackCode';
|
|
14
|
+
async execute({ adapterTypes, rpcMethods, }) {
|
|
15
|
+
const { pluginManager } = this;
|
|
16
|
+
await Promise.all([
|
|
17
|
+
...adapterTypes.map(type => pluginManager.getAdapterType(type).getAdapterClass()),
|
|
18
|
+
...rpcMethods.map(name => pluginManager.getRpcMethodType(name).preload()),
|
|
19
|
+
]);
|
|
20
|
+
}
|
|
21
|
+
async serializeArguments(args) {
|
|
22
|
+
return args;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -11,23 +11,26 @@ import type { StatusCallback } from '../../util/progress.ts';
|
|
|
11
11
|
export interface LayerFeatures {
|
|
12
12
|
table: FeatureTable;
|
|
13
13
|
row: FieldRef | ArrayLike<number> | undefined;
|
|
14
|
+
/** Each row's series, for a layer whose request names a path. */
|
|
15
|
+
series?: Uint32Array;
|
|
16
|
+
/** The stretch a path breaks across, for a layer whose request names a path. */
|
|
17
|
+
gapBp?: number;
|
|
14
18
|
}
|
|
15
19
|
/**
|
|
16
20
|
* The table each layer of a `CoreGetEncodedLayers` request encodes: the
|
|
17
21
|
* region's features through the shared steps, split by the facet where the
|
|
18
22
|
* request names one, then through each layer's own steps, with each faceted
|
|
19
|
-
* layer's stacked rows beside it
|
|
20
|
-
* layer's table, so the same request
|
|
23
|
+
* layer's stacked rows beside it, and a path layer's rows in series order.
|
|
24
|
+
* An instance's `featureIndex` indexes its layer's table, so the same request
|
|
25
|
+
* answers which row an instance is.
|
|
21
26
|
*/
|
|
22
27
|
export declare function layerFeatures(dataAdapter: BaseFeatureDataAdapter, args: Pick<CoreGetEncodedLayersArgs, 'region' | 'layers' | 'transform' | 'facet' | 'bpPerPx' | 'opts'> & {
|
|
23
28
|
signal?: AbortSignal;
|
|
24
29
|
statusCallback?: StatusCallback;
|
|
25
30
|
}, jexl: JexlInstance): Promise<{
|
|
26
|
-
layers:
|
|
27
|
-
table: FeatureTable;
|
|
28
|
-
row: FieldRef | Uint32Array | undefined;
|
|
29
|
-
}[];
|
|
31
|
+
layers: LayerFeatures[];
|
|
30
32
|
sections: import("../../util/markEncodingTypes.ts").FacetSection[] | undefined;
|
|
31
33
|
zoomRange: import("../../data_adapters/BaseAdapter/zoomRange.ts").ZoomRange | undefined;
|
|
32
34
|
notices: string[];
|
|
35
|
+
facts: Record<string, unknown>;
|
|
33
36
|
}>;
|
|
@@ -1,23 +1,33 @@
|
|
|
1
1
|
import { checkAbortSignal } from '../../util/aborting.js';
|
|
2
2
|
import { layerTables } from '../../util/featureTransforms.js';
|
|
3
|
+
import { pathSeries } from '../../util/pathSeries.js';
|
|
3
4
|
import { updateStatus } from '../../util/progress.js';
|
|
4
5
|
/**
|
|
5
6
|
* The table each layer of a `CoreGetEncodedLayers` request encodes: the
|
|
6
7
|
* region's features through the shared steps, split by the facet where the
|
|
7
8
|
* request names one, then through each layer's own steps, with each faceted
|
|
8
|
-
* layer's stacked rows beside it
|
|
9
|
-
* layer's table, so the same request
|
|
9
|
+
* layer's stacked rows beside it, and a path layer's rows in series order.
|
|
10
|
+
* An instance's `featureIndex` indexes its layer's table, so the same request
|
|
11
|
+
* answers which row an instance is.
|
|
10
12
|
*/
|
|
11
13
|
export async function layerFeatures(dataAdapter, args, jexl) {
|
|
12
14
|
const { region, layers: requested, transform = [], facet, bpPerPx, opts, signal, statusCallback, } = args;
|
|
13
15
|
const notices = [];
|
|
14
|
-
const
|
|
16
|
+
const facts = {};
|
|
17
|
+
const fetchOpts = {
|
|
18
|
+
...opts,
|
|
19
|
+
bpPerPx,
|
|
20
|
+
statusCallback,
|
|
21
|
+
signal,
|
|
22
|
+
notices,
|
|
23
|
+
facts,
|
|
24
|
+
};
|
|
15
25
|
const [fetched, zoomRange] = await updateStatus('Downloading features', statusCallback, () => Promise.all([
|
|
16
26
|
dataAdapter.getFeatureTable(region, fetchOpts),
|
|
17
27
|
dataAdapter.getZoomRange(fetchOpts),
|
|
18
28
|
]));
|
|
19
29
|
checkAbortSignal(signal);
|
|
20
|
-
const
|
|
30
|
+
const tables = layerTables(fetched, {
|
|
21
31
|
transform,
|
|
22
32
|
facet,
|
|
23
33
|
layers: requested.map(r => ({
|
|
@@ -25,5 +35,11 @@ export async function layerFeatures(dataAdapter, args, jexl) {
|
|
|
25
35
|
row: r.encoding.row,
|
|
26
36
|
})),
|
|
27
37
|
}, jexl);
|
|
28
|
-
|
|
38
|
+
const layers = tables.layers.map((layer, i) => {
|
|
39
|
+
const { path, transform: own = [] } = requested[i];
|
|
40
|
+
return path
|
|
41
|
+
? pathSeries(layer.table, layer.row, path, [...transform, ...(facet?.transform ?? []), ...own], jexl)
|
|
42
|
+
: layer;
|
|
43
|
+
});
|
|
44
|
+
return { layers, sections: tables.sections, zoomRange, notices, facts };
|
|
29
45
|
}
|
package/esm/ui/ActionLink.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/** A Link that acts as a button — no real navigation, just calls onClick. */
|
|
2
|
-
|
|
2
|
+
declare const ActionLink: ({ onClick, children, className, title, }: {
|
|
3
3
|
onClick: () => void;
|
|
4
4
|
children: React.ReactNode;
|
|
5
5
|
className?: string;
|
|
6
6
|
title?: string;
|
|
7
|
-
})
|
|
7
|
+
}) => import("react").JSX.Element;
|
|
8
|
+
export default ActionLink;
|
package/esm/ui/ActionLink.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { Link } from '@mui/material';
|
|
3
|
+
import { observer } from 'mobx-react';
|
|
3
4
|
/** A Link that acts as a button — no real navigation, just calls onClick. */
|
|
4
|
-
|
|
5
|
+
const ActionLink = observer(function ActionLink({ onClick, children, className, title, }) {
|
|
5
6
|
return (_jsx(Link, { href: "#", className: className, title: title, onClick: (e) => {
|
|
6
7
|
e.preventDefault();
|
|
7
8
|
onClick();
|
|
8
9
|
}, children: children }));
|
|
9
|
-
}
|
|
10
|
+
});
|
|
11
|
+
export default ActionLink;
|
|
@@ -8,7 +8,8 @@ import type { PluginDefinition } from '../pluginDefinitions.ts';
|
|
|
8
8
|
* `onAdd` returns false to reject the definition and keep the dialog open (the
|
|
9
9
|
* plugin store rejects a name already installed).
|
|
10
10
|
*/
|
|
11
|
-
|
|
11
|
+
declare const AddCustomPluginDialog: ({ onClose, onAdd, }: {
|
|
12
12
|
onClose: () => void;
|
|
13
13
|
onAdd: (definition: PluginDefinition) => boolean;
|
|
14
|
-
})
|
|
14
|
+
}) => import("react").JSX.Element;
|
|
15
|
+
export default AddCustomPluginDialog;
|
|
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { useState } from 'react';
|
|
3
3
|
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
|
|
4
4
|
import { Collapse, DialogContentText, IconButton, TextField, } from '@mui/material';
|
|
5
|
+
import { observer } from 'mobx-react';
|
|
5
6
|
import { cx, makeStyles } from '../util/tss-react/index.js';
|
|
6
7
|
import SubmitDialog from './SubmitDialog.js';
|
|
7
8
|
const useStyles = makeStyles()({
|
|
@@ -28,7 +29,7 @@ const useStyles = makeStyles()({
|
|
|
28
29
|
* `onAdd` returns false to reject the definition and keep the dialog open (the
|
|
29
30
|
* plugin store rejects a name already installed).
|
|
30
31
|
*/
|
|
31
|
-
|
|
32
|
+
const AddCustomPluginDialog = observer(function AddCustomPluginDialog({ onClose, onAdd, }) {
|
|
32
33
|
const { classes } = useStyles();
|
|
33
34
|
const [umdPluginName, setUMDPluginName] = useState('');
|
|
34
35
|
const [umdPluginUrl, setUMDPluginUrl] = useState('');
|
|
@@ -44,13 +45,14 @@ export default function AddCustomPluginDialog({ onClose, onAdd, }) {
|
|
|
44
45
|
}
|
|
45
46
|
}, children: _jsxs("div", { className: classes.dialogContent, children: [_jsx(DialogContentText, { children: "Enter the name of the plugin and its URL. The name should match what is defined in the plugin's build." }), _jsx(TextField, { label: "Plugin name", variant: "outlined", fullWidth: true, margin: "dense", value: umdPluginName, onChange: event => {
|
|
46
47
|
setUMDPluginName(event.target.value);
|
|
47
|
-
} }), _jsx(TextField, { label: "Plugin URL", variant: "outlined", fullWidth: true, margin: "dense", value: umdPluginUrl, onChange: event => {
|
|
48
|
+
} }), _jsx(TextField, { label: "Plugin URL", "data-testid": "custom-plugin-url", variant: "outlined", fullWidth: true, margin: "dense", value: umdPluginUrl, onChange: event => {
|
|
48
49
|
setUMDPluginUrl(event.target.value);
|
|
49
50
|
} }), _jsxs(DialogContentText, { onClick: () => {
|
|
50
51
|
setAdvancedOptionsOpen(!advancedOptionsOpen);
|
|
51
52
|
}, children: [_jsx(IconButton, { className: cx(classes.expand, {
|
|
52
53
|
[classes.expandOpen]: advancedOptionsOpen,
|
|
53
|
-
}), "aria-expanded": advancedOptionsOpen, "aria-label": "show more", children: _jsx(ExpandMoreIcon, {}) }), "Advanced options"] }), _jsx(Collapse, { in: advancedOptionsOpen, children: _jsxs("div", { className: classes.dialogContent, children: [_jsx(DialogContentText, { children: "The above fields assume that the plugin is built in UMD format. For an ESM build, enter its URL here instead; it carries its own name, so the fields above stay empty." }), _jsx(TextField, { label: "ESM build URL", variant: "outlined", fullWidth: true, margin: "dense", value: esmPluginUrl, onChange: event => {
|
|
54
|
+
}), "aria-expanded": advancedOptionsOpen, "aria-label": "show more", children: _jsx(ExpandMoreIcon, {}) }), "Advanced options"] }), _jsx(Collapse, { in: advancedOptionsOpen, children: _jsxs("div", { className: classes.dialogContent, children: [_jsx(DialogContentText, { children: "The above fields assume that the plugin is built in UMD format. For an ESM build, enter its URL here instead; it carries its own name, so the fields above stay empty." }), _jsx(TextField, { label: "ESM build URL", "data-testid": "custom-plugin-esm-url", variant: "outlined", fullWidth: true, margin: "dense", value: esmPluginUrl, onChange: event => {
|
|
54
55
|
setESMPluginUrl(event.target.value);
|
|
55
56
|
} })] }) })] }) }));
|
|
56
|
-
}
|
|
57
|
+
});
|
|
58
|
+
export default AddCustomPluginDialog;
|
package/esm/ui/AppLogo.js
CHANGED
|
@@ -1,10 +1,50 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
2
3
|
import { observer } from 'mobx-react';
|
|
3
4
|
import { readConfObject } from '../configuration/index.js';
|
|
5
|
+
import { isUriLocation } from '../util/types/data.js';
|
|
4
6
|
import { LogoFull } from './Logo.js';
|
|
7
|
+
function resolvedUri(location) {
|
|
8
|
+
return location.baseUri
|
|
9
|
+
? new URL(location.uri, location.baseUri).href
|
|
10
|
+
: location.uri;
|
|
11
|
+
}
|
|
12
|
+
// A URI goes straight to the <img>, which needs no CORS; a local path, a
|
|
13
|
+
// blob or a file handle is read into an object URL.
|
|
14
|
+
function useLogoSrc(location) {
|
|
15
|
+
const [objectUrl, setObjectUrl] = useState();
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
if (!location || isUriLocation(location)) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
let url;
|
|
21
|
+
let cancelled = false;
|
|
22
|
+
import('../util/io/index.js')
|
|
23
|
+
.then(({ openLocation }) => openLocation(location).readFile())
|
|
24
|
+
.then(bytes => {
|
|
25
|
+
if (!cancelled) {
|
|
26
|
+
url = URL.createObjectURL(new Blob([bytes]));
|
|
27
|
+
setObjectUrl(url);
|
|
28
|
+
}
|
|
29
|
+
})
|
|
30
|
+
.catch((e) => {
|
|
31
|
+
console.error(e);
|
|
32
|
+
});
|
|
33
|
+
return () => {
|
|
34
|
+
cancelled = true;
|
|
35
|
+
if (url) {
|
|
36
|
+
URL.revokeObjectURL(url);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}, [location]);
|
|
40
|
+
return location && isUriLocation(location)
|
|
41
|
+
? resolvedUri(location)
|
|
42
|
+
: location
|
|
43
|
+
? objectUrl
|
|
44
|
+
: undefined;
|
|
45
|
+
}
|
|
5
46
|
const Logo = observer(function Logo({ session, }) {
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
return logoPath?.uri ? (_jsx("img", { src: logoPath.uri, alt: "Custom logo" })) : (_jsx(LogoFull, { variant: "white" }));
|
|
47
|
+
const src = useLogoSrc(readConfObject(session.configuration, 'logoPath'));
|
|
48
|
+
return src ? (_jsx("img", { src: src, alt: "Custom logo" })) : (_jsx(LogoFull, { variant: "white" }));
|
|
9
49
|
});
|
|
10
50
|
export default Logo;
|
package/esm/ui/BaseTooltip.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type TooltipPlacement = 'top' | 'top-start' | 'top-end' | 'right' | 'right-start' | 'right-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end';
|
|
2
|
-
|
|
2
|
+
declare const BaseTooltip: ({ clientPoint: clientPointCoords, anchor, id, children, placement, }: {
|
|
3
3
|
placement?: TooltipPlacement;
|
|
4
4
|
/** Follow the pointer. The cursor-anchored mode, and the older of the two. */
|
|
5
5
|
clientPoint?: {
|
|
@@ -16,4 +16,5 @@ export default function BaseTooltip({ clientPoint: clientPointCoords, anchor, id
|
|
|
16
16
|
/** For a trigger pointing at this with `aria-describedby`. */
|
|
17
17
|
id?: string;
|
|
18
18
|
children: React.ReactNode;
|
|
19
|
-
})
|
|
19
|
+
}) => import("react").ReactPortal | null;
|
|
20
|
+
export default BaseTooltip;
|