@jbrowse/core 5.0.0-beta.13 → 5.0.0-beta.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +365 -69
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +4 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +4 -2
- 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 +1 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.js +10 -19
- 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/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 +2 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/featureTypeUtil.js +22 -6
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.d.ts +13 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.js +28 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/SequenceDisplay.js +2 -2
- package/esm/BaseFeatureWidget/stateModelFactory.d.ts +2 -0
- package/esm/PluginManager.d.ts +1 -0
- package/esm/PluginManager.js +6 -0
- package/esm/ReExports/coreModules.generated.js +538 -524
- package/esm/ReExports/coreWorkerModules.generated.js +454 -441
- package/esm/ReExports/lazify.js +3 -2
- package/esm/ReExports/list.js +15 -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/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 +18 -5
- package/esm/configuration/configurationSchema.js +9 -7
- package/esm/configuration/configurationSchemaUnion.d.ts +2 -1
- package/esm/configuration/configurationSchemaUnion.js +2 -1
- package/esm/configuration/configurationSlot.js +4 -4
- 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 +5 -5
- package/esm/configuration/getConf.js +13 -4
- package/esm/configuration/index.d.ts +1 -1
- package/esm/configuration/index.js +1 -1
- package/esm/configuration/plot.d.ts +2 -2
- package/esm/configuration/plot.js +32 -18
- package/esm/configuration/schemaRegistry.d.ts +0 -2
- package/esm/configuration/slotFacade.js +2 -2
- package/esm/configuration/snapshotPreprocess.d.ts +42 -18
- package/esm/configuration/snapshotPreprocess.js +94 -34
- package/esm/configuration/tabixShorthand.js +1 -3
- 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/models/BaseConnectionModelFactory.d.ts +2 -0
- package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.js +2 -0
- package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +40 -6
- package/esm/pluggableElementTypes/models/BaseDisplayModel.js +56 -8
- package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +3 -3
- package/esm/pluggableElementTypes/models/BaseTrackModel.js +7 -6
- 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 +9 -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 +0 -10
- package/esm/rpc/byteBudget.d.ts +8 -0
- package/esm/rpc/byteBudget.js +13 -0
- package/esm/rpc/configSchema.d.ts +2 -0
- package/esm/rpc/configSchema.js +3 -1
- package/esm/rpc/coreRpcMethods.d.ts +0 -1
- package/esm/rpc/coreRpcMethods.js +0 -1
- package/esm/rpc/methods/CoreGetEncodedLayers.d.ts +2 -2
- package/esm/rpc/methods/CoreGetEncodedLayers.js +7 -5
- 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/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/colorScale.d.ts +5 -1
- package/esm/ui/colorScale.js +12 -10
- package/esm/ui/colors.d.ts +3 -3
- package/esm/ui/colors.js +7 -7
- 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/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/analytics.d.ts +4 -6
- package/esm/util/analytics.js +143 -12
- package/esm/util/bezierConnector.d.ts +20 -0
- package/esm/util/bezierConnector.js +34 -100
- package/esm/util/cacheBudgets.d.ts +3 -0
- package/esm/util/cacheBudgets.js +3 -0
- package/esm/util/categoricalField.d.ts +2 -2
- package/esm/util/categoricalField.js +3 -3
- 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 +6 -6
- 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 +14 -2
- package/esm/util/colorScale.d.ts +114 -20
- package/esm/util/colorScale.js +124 -26
- package/esm/util/colorSchemes.d.ts +6 -4
- package/esm/util/colorSchemes.js +6 -3
- 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/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 +74 -20
- 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 +3 -3
- package/esm/util/quantileExtent.js +3 -3
- 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/thresholdScale.d.ts +1 -1
- package/esm/util/thresholdScale.js +1 -1
- package/esm/util/tracks.js +1 -1
- package/esm/util/usePanZoom.js +4 -10
- package/esm/util/windowStep.d.ts +6 -0
- package/esm/util/windowStep.js +153 -0
- package/package.json +23 -15
- 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
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
2
3
|
import { makeStyles } from '../util/tss-react/index.js';
|
|
3
4
|
const useStyles = makeStyles()(theme => ({
|
|
4
5
|
bg: {
|
|
@@ -16,7 +17,8 @@ const useStyles = makeStyles()(theme => ({
|
|
|
16
17
|
// that still showed either failed loudly — but an MST type error surfacing here
|
|
17
18
|
// over a view was captured and committed as if the figure were fine. Keying off
|
|
18
19
|
// `#f88` instead would break on the dark theme and on any restyle.
|
|
19
|
-
|
|
20
|
+
const RedErrorMessageBox = observer(function RedErrorMessageBox({ children, }) {
|
|
20
21
|
const { classes } = useStyles();
|
|
21
22
|
return (_jsx("div", { className: classes.bg, "data-testid": "error-message-box", children: children }));
|
|
22
|
-
}
|
|
23
|
+
});
|
|
24
|
+
export default RedErrorMessageBox;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { MenuItem } from '../Menu.tsx';
|
|
2
|
-
|
|
2
|
+
declare const EndAdornment: ({ showHelp, menuItems, }: {
|
|
3
3
|
showHelp?: boolean;
|
|
4
4
|
menuItems?: MenuItem[];
|
|
5
|
-
})
|
|
5
|
+
}) => import("react").JSX.Element;
|
|
6
|
+
export default EndAdornment;
|
|
@@ -4,12 +4,13 @@ import Help from '@mui/icons-material/Help';
|
|
|
4
4
|
import MoreVertIcon from '@mui/icons-material/MoreVert';
|
|
5
5
|
import SearchIcon from '@mui/icons-material/Search';
|
|
6
6
|
import { InputAdornment } from '@mui/material';
|
|
7
|
+
import { observer } from 'mobx-react';
|
|
7
8
|
import CascadingMenuButton from '../CascadingMenuButton.js';
|
|
8
9
|
const HelpDialog = lazy(() => import('./HelpDialog.js'));
|
|
9
10
|
// The search-box overflow (⋮) menu: consumer-supplied rows (e.g. recent
|
|
10
11
|
// locations) sit above the built-in help entry. Rendered only when there is
|
|
11
12
|
// something to show, so a bare box keeps just its search icon.
|
|
12
|
-
|
|
13
|
+
const EndAdornment = observer(function EndAdornment({ showHelp, menuItems = [], }) {
|
|
13
14
|
const [helpDialogOpen, setHelpDialogOpen] = useState(false);
|
|
14
15
|
const items = [
|
|
15
16
|
...menuItems,
|
|
@@ -28,4 +29,5 @@ export default function EndAdornment({ showHelp, menuItems = [], }) {
|
|
|
28
29
|
return (_jsxs(InputAdornment, { position: "end", style: { marginRight: 7 }, children: [_jsx(SearchIcon, { fontSize: "small" }), items.length ? (_jsx(CascadingMenuButton, { menuItems: items, size: "small", stopPropagation: true, tooltip: "Search box options", children: _jsx(MoreVertIcon, { fontSize: "small" }) })) : null, helpDialogOpen ? (_jsx(Suspense, { fallback: null, children: _jsx(HelpDialog, { handleClose: () => {
|
|
29
30
|
setHelpDialogOpen(false);
|
|
30
31
|
} }) })) : null] }));
|
|
31
|
-
}
|
|
32
|
+
});
|
|
33
|
+
export default EndAdornment;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
2
3
|
import InfoDialog from '../InfoDialog.js';
|
|
3
|
-
|
|
4
|
+
const HelpDialog = observer(function HelpDialog({ handleClose, }) {
|
|
4
5
|
return (_jsxs(InfoDialog, { open: true, maxWidth: "xl", onClose: () => {
|
|
5
6
|
handleClose();
|
|
6
7
|
}, title: "Using the search box", children: [_jsx("h3", { children: "Searching" }), _jsxs("ul", { children: [_jsx("li", { children: "Jump to a feature or reference sequence by typing its name in the location box and pressing Enter." }), _jsxs("li", { children: ["Jump to a specific region by typing the region into the location box as: ", _jsx("code", { children: "ref:start..end" }), " or ", _jsx("code", { children: "ref:start-end" }), ". Commas are allowed in the start and end coordinates. A space-separated list of locstrings can be used to open up multiple chromosomes at a time"] }), _jsxs("li", { children: ["Find a group of reference sequences by typing a pattern containing", ' ', _jsx("code", { children: "*" }), ", which stands for any run of characters. The matches appear in the dropdown, with a row at the top that opens all of them at once. Useful on a fragmented or haplotype-resolved assembly, where the useful selection is a pattern rather than a list you keep by hand."] })] }), _jsx("h3", { children: "Example Searches" }), _jsxs("ul", { children: [_jsxs("li", { children: [_jsx("code", { children: "BRCA" }), " - searches for the feature named BRCA"] }), _jsxs("li", { children: [_jsx("code", { children: "chr4" }), " - jumps to chromosome 4"] }), _jsxs("li", { children: [_jsx("code", { children: "chr4:79,500,000..80,000,000" }), " - jumps the region on chromosome 4 between 79.5Mb and 80Mb."] }), _jsxs("li", { children: [_jsx("code", { children: "chr1:1-100 chr2:1-100" }), " - create a split view of chr1:1-100 and chr2:1-100"] }), _jsxs("li", { children: [_jsx("code", { children: "chr1 chr2 chr3" }), " - open up multiple chromosomes at once"] }), _jsxs("li", { children: [_jsx("code", { children: "chr1:1-100[rev] chr2:1-100" }), " - open up the first region in the horizontally flipped orientation"] }), _jsxs("li", { children: [_jsx("code", { children: "chr1 100 200" }), " - use whitespace separated refname, start, end"] }), _jsxs("li", { children: [_jsx("code", { children: "*_hap1" }), " - list every reference sequence whose name ends in _hap1, and offer to open all of them"] })] })] }));
|
|
7
|
-
}
|
|
8
|
+
});
|
|
9
|
+
export default HelpDialog;
|
|
@@ -13,7 +13,8 @@
|
|
|
13
13
|
* Pair it with `isSessionWithViewReplacement` — a session that cannot replace a
|
|
14
14
|
* view should not be offered the choice.
|
|
15
15
|
*/
|
|
16
|
-
|
|
16
|
+
declare const ReplaceCurrentViewButton: ({ disabled, onClick, }: {
|
|
17
17
|
disabled?: boolean;
|
|
18
18
|
onClick: () => void;
|
|
19
|
-
})
|
|
19
|
+
}) => import("react").JSX.Element;
|
|
20
|
+
export default ReplaceCurrentViewButton;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { Button } from '@mui/material';
|
|
3
|
+
import { observer } from 'mobx-react';
|
|
3
4
|
/**
|
|
4
5
|
* The second way out of a launch dialog: put the view it builds in the slot the
|
|
5
6
|
* launching view occupies instead of appending it below. Offered by every launch
|
|
@@ -15,8 +16,9 @@ import { Button } from '@mui/material';
|
|
|
15
16
|
* Pair it with `isSessionWithViewReplacement` — a session that cannot replace a
|
|
16
17
|
* view should not be offered the choice.
|
|
17
18
|
*/
|
|
18
|
-
|
|
19
|
+
const ReplaceCurrentViewButton = observer(function ReplaceCurrentViewButton({ disabled, onClick, }) {
|
|
19
20
|
return (_jsx(Button, { type: "button", variant: "contained", color: "primary", disabled: disabled, onClick: () => {
|
|
20
21
|
onClick();
|
|
21
22
|
}, children: "Replace current view" }));
|
|
22
|
-
}
|
|
23
|
+
});
|
|
24
|
+
export default ReplaceCurrentViewButton;
|
package/esm/ui/ResizeHandle.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type React from 'react';
|
|
2
|
-
declare
|
|
2
|
+
declare const ResizeHandle: ({ onDrag, onDragStart, onDragEnd, vertical, bar, grip, gain, className: originalClassName, onPointerDown, ...props }: {
|
|
3
3
|
onDrag: (distance: number) => void;
|
|
4
4
|
onDragStart?: () => void;
|
|
5
5
|
onDragEnd?: () => void;
|
|
@@ -13,5 +13,5 @@ declare function ResizeHandle({ onDrag, onDragStart, onDragEnd, vertical, bar, g
|
|
|
13
13
|
* and this handle sits below more than one of them.
|
|
14
14
|
*/
|
|
15
15
|
gain?: number;
|
|
16
|
-
} & Omit<React.ComponentPropsWithoutRef<'div'>, 'onDrag' | 'onDragStart' | 'onDragEnd'>)
|
|
16
|
+
} & Omit<React.ComponentPropsWithoutRef<'div'>, 'onDrag' | 'onDragStart' | 'onDragEnd'>) => React.JSX.Element;
|
|
17
17
|
export default ResizeHandle;
|
package/esm/ui/ResizeHandle.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
2
3
|
import { cx, makeStyles } from '../util/tss-react/index.js';
|
|
3
4
|
import { useResizeDrag } from '../util/useResizeDrag.js';
|
|
4
5
|
const layer = (color) => `linear-gradient(${color}, ${color})`;
|
|
@@ -57,7 +58,7 @@ const useStyles = makeStyles()(theme => ({
|
|
|
57
58
|
borderLeft: `1px solid ${theme.palette.text.disabled}`,
|
|
58
59
|
},
|
|
59
60
|
}));
|
|
60
|
-
function ResizeHandle({ onDrag, onDragStart, onDragEnd, vertical = false, bar = false, grip = false, gain, className: originalClassName, onPointerDown, ...props }) {
|
|
61
|
+
const ResizeHandle = observer(function ResizeHandle({ onDrag, onDragStart, onDragEnd, vertical = false, bar = false, grip = false, gain, className: originalClassName, onPointerDown, ...props }) {
|
|
61
62
|
const { classes } = useStyles();
|
|
62
63
|
// The gesture, including the per-frame coalescing, the delta measurement and
|
|
63
64
|
// the `data-gesture-owner` marker that keeps ancestor drags (the LGV
|
|
@@ -83,5 +84,5 @@ function ResizeHandle({ onDrag, onDragStart, onDragEnd, vertical = false, bar =
|
|
|
83
84
|
handleProps.onPointerDown(event);
|
|
84
85
|
onPointerDown?.(event);
|
|
85
86
|
} }));
|
|
86
|
-
}
|
|
87
|
+
});
|
|
87
88
|
export default ResizeHandle;
|
|
@@ -3,7 +3,8 @@ declare global {
|
|
|
3
3
|
setHTML?(html: string): void;
|
|
4
4
|
}
|
|
5
5
|
}
|
|
6
|
-
|
|
6
|
+
declare const SanitizedHTML: ({ html: pre, className, }: {
|
|
7
7
|
className?: string;
|
|
8
8
|
html: unknown;
|
|
9
|
-
})
|
|
9
|
+
}) => import("react").JSX.Element;
|
|
10
|
+
export default SanitizedHTML;
|
package/esm/ui/SanitizedHTML.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { Suspense, lazy, useLayoutEffect, useRef } from 'react';
|
|
3
|
+
import { observer } from 'mobx-react';
|
|
3
4
|
import { escapeHTML, looksLikeHTML } from '../util/htmlText.js';
|
|
4
5
|
import { linkify } from '../util/index.js';
|
|
5
6
|
import { rewriteExternalAnchors } from './rewriteExternalAnchors.js';
|
|
@@ -7,7 +8,7 @@ const DOMPurifySanitizedHTML = lazy(() => import('./DOMPurifySanitizedHTML.js'))
|
|
|
7
8
|
function needsSanitization(str) {
|
|
8
9
|
return str.includes('<') || str.includes('://');
|
|
9
10
|
}
|
|
10
|
-
function SetHTML({ value, className }) {
|
|
11
|
+
const SetHTML = observer(function SetHTML({ value, className, }) {
|
|
11
12
|
const spanRef = useRef(null);
|
|
12
13
|
useLayoutEffect(() => {
|
|
13
14
|
const el = spanRef.current;
|
|
@@ -22,8 +23,8 @@ function SetHTML({ value, className }) {
|
|
|
22
23
|
}
|
|
23
24
|
}, [value]);
|
|
24
25
|
return _jsx("span", { ref: spanRef, className: className });
|
|
25
|
-
}
|
|
26
|
-
|
|
26
|
+
});
|
|
27
|
+
const SanitizedHTML = observer(function SanitizedHTML({ html: pre, className, }) {
|
|
27
28
|
const str = `${pre}`;
|
|
28
29
|
if (!needsSanitization(str)) {
|
|
29
30
|
return _jsx("span", { className: className, children: str });
|
|
@@ -34,4 +35,5 @@ export default function SanitizedHTML({ html: pre, className, }) {
|
|
|
34
35
|
return _jsx(SetHTML, { value: value, className: className });
|
|
35
36
|
}
|
|
36
37
|
return (_jsx(Suspense, { fallback: _jsx("span", { className: className }), children: _jsx(DOMPurifySanitizedHTML, { value: value, className: className }) }));
|
|
37
|
-
}
|
|
38
|
+
});
|
|
39
|
+
export default SanitizedHTML;
|
package/esm/ui/ScrollChrome.d.ts
CHANGED
|
@@ -4,10 +4,11 @@ import type { VirtualScrollModel } from '../util/useVirtualScrollWheel.ts';
|
|
|
4
4
|
* shadow saying content is hidden, and the scrollbar to reach it. Renders
|
|
5
5
|
* nothing when the content fits.
|
|
6
6
|
*/
|
|
7
|
-
|
|
7
|
+
declare const ScrollChrome: ({ model, controlsId, top, }: {
|
|
8
8
|
model: VirtualScrollModel;
|
|
9
9
|
/** `id` of the scrolled viewport element, for `aria-controls`. */
|
|
10
10
|
controlsId: string;
|
|
11
11
|
/** Viewport offset from the top, for a display with a sticky band above it. */
|
|
12
12
|
top?: number;
|
|
13
|
-
})
|
|
13
|
+
}) => import("react").JSX.Element;
|
|
14
|
+
export default ScrollChrome;
|
package/esm/ui/ScrollChrome.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
2
3
|
import ScrollEdgeShadow from './ScrollEdgeShadow.js';
|
|
3
4
|
import VerticalScrollbar from './VerticalScrollbar.js';
|
|
4
5
|
/**
|
|
@@ -6,6 +7,7 @@ import VerticalScrollbar from './VerticalScrollbar.js';
|
|
|
6
7
|
* shadow saying content is hidden, and the scrollbar to reach it. Renders
|
|
7
8
|
* nothing when the content fits.
|
|
8
9
|
*/
|
|
9
|
-
|
|
10
|
+
const ScrollChrome = observer(function ScrollChrome({ model, controlsId, top = 0, }) {
|
|
10
11
|
return (_jsxs(_Fragment, { children: [_jsx(ScrollEdgeShadow, { model: model, top: top }), _jsx(VerticalScrollbar, { model: model, controlsId: controlsId, top: top })] }));
|
|
11
|
-
}
|
|
12
|
+
});
|
|
13
|
+
export default ScrollChrome;
|
|
@@ -14,9 +14,9 @@ import type { VirtualScrollModel } from '../util/useVirtualScrollWheel.ts';
|
|
|
14
14
|
*
|
|
15
15
|
* - **It costs nothing when nothing is hidden.** No content past an edge, no
|
|
16
16
|
* fade at that edge; a track that fits draws neither. So it is a readout of
|
|
17
|
-
* state, not a decoration — which a
|
|
17
|
+
* state, not a decoration — which a recolored bottom border could not be
|
|
18
18
|
* (and which would also need `showTrackOutlines`, an option the user can turn
|
|
19
|
-
* off, to have a border to
|
|
19
|
+
* off, to have a border to recolor).
|
|
20
20
|
* - **It says which way.** Scrolled to the bottom, the bottom fade goes and the
|
|
21
21
|
* top one appears, so "am I at the end" is answerable without scrolling.
|
|
22
22
|
*
|
|
@@ -44,9 +44,9 @@ const useStyles = makeStyles()(theme => {
|
|
|
44
44
|
*
|
|
45
45
|
* - **It costs nothing when nothing is hidden.** No content past an edge, no
|
|
46
46
|
* fade at that edge; a track that fits draws neither. So it is a readout of
|
|
47
|
-
* state, not a decoration — which a
|
|
47
|
+
* state, not a decoration — which a recolored bottom border could not be
|
|
48
48
|
* (and which would also need `showTrackOutlines`, an option the user can turn
|
|
49
|
-
* off, to have a border to
|
|
49
|
+
* off, to have a border to recolor).
|
|
50
50
|
* - **It says which way.** Scrolled to the bottom, the bottom fade goes and the
|
|
51
51
|
* top one appears, so "am I at the end" is answerable without scrolling.
|
|
52
52
|
*
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useState } from 'react';
|
|
3
|
+
import { observer } from 'mobx-react';
|
|
3
4
|
import LabeledCheckbox from './LabeledCheckbox.js';
|
|
4
5
|
import MonospaceTextField from './MonospaceTextField.js';
|
|
5
6
|
// The session a share or export dialog is about to hand over, as indented JSON
|
|
6
7
|
// behind a checkbox, so the sender can read what they are sending whichever
|
|
7
8
|
// link carries it. Shared by jbrowse-web's ShareDialog and jbrowse-desktop's
|
|
8
9
|
// ExportToWebDialog.
|
|
9
|
-
|
|
10
|
+
const SessionJsonPanel = observer(function SessionJsonPanel({ session, }) {
|
|
10
11
|
const [show, setShow] = useState(false);
|
|
11
12
|
return (_jsxs(_Fragment, { children: [_jsx(LabeledCheckbox, { checked: show, onChange: val => {
|
|
12
13
|
setShow(val);
|
|
13
14
|
}, label: "Show readable JSON" }), show ? (_jsx(MonospaceTextField, { label: "Session JSON", value: JSON.stringify(session, null, 2), readOnly: true, fullWidth: true, maxRows: 20 })) : null] }));
|
|
14
|
-
}
|
|
15
|
+
});
|
|
16
|
+
export default SessionJsonPanel;
|
package/esm/ui/ShareLinkField.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { TextField } from '@mui/material';
|
|
3
|
+
import { observer } from 'mobx-react';
|
|
3
4
|
// Read-only single-line field for a shareable URL; clicking selects the whole
|
|
4
5
|
// value so it's easy to copy. Shared by jbrowse-web's ShareDialog and
|
|
5
6
|
// jbrowse-desktop's ExportToWebDialog.
|
|
6
|
-
|
|
7
|
+
const ShareLinkField = observer(function ShareLinkField({ value, label = 'URL', }) {
|
|
7
8
|
return (_jsx(TextField, { label: label, value: value, variant: "filled", fullWidth: true, onClick: event => {
|
|
8
9
|
const target = event.target;
|
|
9
10
|
target.select();
|
|
@@ -12,4 +13,5 @@ export default function ShareLinkField({ value, label = 'URL', }) {
|
|
|
12
13
|
readOnly: true,
|
|
13
14
|
},
|
|
14
15
|
} }));
|
|
15
|
-
}
|
|
16
|
+
});
|
|
17
|
+
export default ShareLinkField;
|
package/esm/ui/SingleSlider.d.ts
CHANGED
|
@@ -4,5 +4,5 @@ type Props = Omit<SliderProps, 'value' | 'defaultValue' | 'onChange' | 'onChange
|
|
|
4
4
|
onChange?: (value: number) => void;
|
|
5
5
|
onChangeCommitted?: (value: number) => void;
|
|
6
6
|
};
|
|
7
|
-
|
|
8
|
-
export
|
|
7
|
+
declare const SingleSlider: (props: Props) => import("react").JSX.Element;
|
|
8
|
+
export default SingleSlider;
|
package/esm/ui/SingleSlider.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { Slider } from '@mui/material';
|
|
3
|
+
import { observer } from 'mobx-react';
|
|
3
4
|
import SliderTooltip from './SliderTooltip.js';
|
|
4
|
-
|
|
5
|
+
const SingleSlider = observer(function SingleSlider(props) {
|
|
5
6
|
const { onChange, onChangeCommitted, slots, ...rest } = props;
|
|
6
7
|
return (_jsx(Slider, { ...rest, slots: { valueLabel: SliderTooltip, ...slots }, onChange: (_, value) => {
|
|
7
8
|
onChange?.(typeof value === 'number' ? value : value[0]);
|
|
8
9
|
}, onChangeCommitted: (_, value) => {
|
|
9
10
|
onChangeCommitted?.(typeof value === 'number' ? value : value[0]);
|
|
10
11
|
} }));
|
|
11
|
-
}
|
|
12
|
+
});
|
|
13
|
+
export default SingleSlider;
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import type { SliderValueLabelProps } from '@mui/material';
|
|
2
|
-
|
|
2
|
+
declare const SliderTooltip: (props: SliderValueLabelProps) => import("react").JSX.Element;
|
|
3
|
+
export default SliderTooltip;
|
package/esm/ui/SliderTooltip.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { Tooltip } from '@mui/material';
|
|
3
|
+
import { observer } from 'mobx-react';
|
|
3
4
|
// Arrow tooltip above the thumb, used as SingleSlider's default value label so
|
|
4
5
|
// every slider (inline track-menu rows, the settings menus' size submenus, the
|
|
5
6
|
// LGV zoom control) shows one consistent value affordance instead of MUI's default
|
|
@@ -11,7 +12,8 @@ import { Tooltip } from '@mui/material';
|
|
|
11
12
|
// Popper. On the LGV zoom slider, whose value tracks live `bpPerPx`, that was a
|
|
12
13
|
// Tooltip and a Popper re-rendering on every animation frame of a wheel zoom to
|
|
13
14
|
// show nothing.
|
|
14
|
-
|
|
15
|
+
const SliderTooltip = observer(function SliderTooltip(props) {
|
|
15
16
|
const { children, open, value } = props;
|
|
16
17
|
return open ? (_jsx(Tooltip, { open: true, enterTouchDelay: 0, placement: "top", title: value, arrow: true, children: children })) : (children);
|
|
17
|
-
}
|
|
18
|
+
});
|
|
19
|
+
export default SliderTooltip;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { SnackbarMessage } from './SnackbarModel.tsx';
|
|
2
|
-
|
|
2
|
+
declare const SnackbarContents: ({ onClose, contents, }: {
|
|
3
3
|
onClose: (_event: unknown, reason?: string) => void;
|
|
4
4
|
contents: SnackbarMessage;
|
|
5
|
-
})
|
|
5
|
+
}) => import("react").JSX.Element;
|
|
6
|
+
export default SnackbarContents;
|
|
@@ -5,6 +5,7 @@ import CloseIcon from '@mui/icons-material/Close';
|
|
|
5
5
|
// See https://github.com/GMOD/jbrowse-components/issues/5325
|
|
6
6
|
import Report from '@mui/icons-material/Report';
|
|
7
7
|
import { Alert, Button, IconButton, Snackbar as MUISnackbar, } from '@mui/material';
|
|
8
|
+
import { observer } from 'mobx-react';
|
|
8
9
|
import { makeStyles } from '../util/tss-react/index.js';
|
|
9
10
|
const useStyles = makeStyles()({
|
|
10
11
|
// preserve newlines in multi-line errors (e.g. MST validation dumps) while
|
|
@@ -17,7 +18,7 @@ const useStyles = makeStyles()({
|
|
|
17
18
|
overflowY: 'auto',
|
|
18
19
|
},
|
|
19
20
|
});
|
|
20
|
-
|
|
21
|
+
const SnackbarContents = observer(function SnackbarContents({ onClose, contents, }) {
|
|
21
22
|
const { classes } = useStyles();
|
|
22
23
|
const { actions } = contents;
|
|
23
24
|
return (_jsx(MUISnackbar, { open: true, onClose: onClose, anchorOrigin: { vertical: 'bottom', horizontal: 'center' }, children: _jsx(Alert, { onClose: onClose, action: actions?.length ? (_jsxs(_Fragment, { children: [actions.map((action, idx) => (_jsx(Button
|
|
@@ -26,4 +27,5 @@ export default function SnackbarContents({ onClose, contents, }) {
|
|
|
26
27
|
action.onClick();
|
|
27
28
|
onClose(e);
|
|
28
29
|
}, children: action.name === 'report' ? _jsx(Report, {}) : action.name }, idx))), _jsx(IconButton, { color: "inherit", onClick: onClose, children: _jsx(CloseIcon, {}) })] })) : null, severity: contents.level || 'warning', "data-testid": `snackbar-${contents.level || 'warning'}`, children: _jsx("div", { className: classes.message, children: contents.message }) }) }));
|
|
29
|
-
}
|
|
30
|
+
});
|
|
31
|
+
export default SnackbarContents;
|
|
@@ -11,6 +11,8 @@ export interface ErrorDialogState {
|
|
|
11
11
|
/**
|
|
12
12
|
* #stateModel SnackbarModel
|
|
13
13
|
* #category session
|
|
14
|
+
* Adds notifications to a session: the snackbar messages on screen, and the
|
|
15
|
+
* error shown in the stack-trace dialog.
|
|
14
16
|
*/
|
|
15
17
|
export default function SnackbarModel(): import("@jbrowse/mobx-state-tree").IModelType<{}, {
|
|
16
18
|
/**
|
package/esm/ui/SnackbarModel.js
CHANGED
|
@@ -3,6 +3,8 @@ import { observable } from 'mobx';
|
|
|
3
3
|
/**
|
|
4
4
|
* #stateModel SnackbarModel
|
|
5
5
|
* #category session
|
|
6
|
+
* Adds notifications to a session: the snackbar messages on screen, and the
|
|
7
|
+
* error shown in the stack-trace dialog.
|
|
6
8
|
*/
|
|
7
9
|
export default function SnackbarModel() {
|
|
8
10
|
return types
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { IconButtonProps } from '@mui/material';
|
|
2
|
-
|
|
2
|
+
declare const StackTraceButton: ({ error, color, }: {
|
|
3
3
|
error: unknown;
|
|
4
4
|
color?: IconButtonProps['color'];
|
|
5
|
-
})
|
|
5
|
+
}) => import("react").JSX.Element;
|
|
6
|
+
export default StackTraceButton;
|
|
@@ -2,15 +2,17 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
|
|
|
2
2
|
import { Suspense, lazy, useState } from 'react';
|
|
3
3
|
import ReportIcon from '@mui/icons-material/Report';
|
|
4
4
|
import { IconButton, Tooltip } from '@mui/material';
|
|
5
|
+
import { observer } from 'mobx-react';
|
|
5
6
|
const ErrorMessageStackTraceDialog = lazy(() => import('./ErrorMessageStackTraceDialog.js'));
|
|
6
7
|
// "Show stack trace" icon button that lazy-loads and opens the stack-trace
|
|
7
8
|
// dialog. Shared by ErrorBanner and ErrorBar so the lazy import and open/close
|
|
8
9
|
// state live in one place.
|
|
9
|
-
|
|
10
|
+
const StackTraceButton = observer(function StackTraceButton({ error, color, }) {
|
|
10
11
|
const [showStack, setShowStack] = useState(false);
|
|
11
12
|
return (_jsxs(_Fragment, { children: [_jsx(Tooltip, { title: "Show stack trace", children: _jsx(IconButton, { color: color, onClick: () => {
|
|
12
13
|
setShowStack(true);
|
|
13
14
|
}, children: _jsx(ReportIcon, {}) }) }), showStack ? (_jsx(Suspense, { fallback: null, children: _jsx(ErrorMessageStackTraceDialog, { error: error, onClose: () => {
|
|
14
15
|
setShowStack(false);
|
|
15
16
|
} }) })) : null] }));
|
|
16
|
-
}
|
|
17
|
+
});
|
|
18
|
+
export default StackTraceButton;
|
|
@@ -30,8 +30,9 @@
|
|
|
30
30
|
* two modules deep, and its own test asserts the rendered tree carries no `Mui*`
|
|
31
31
|
* class, which catches a Material component rendered directly.
|
|
32
32
|
*/
|
|
33
|
-
|
|
33
|
+
declare const StatusProgressBar: ({ fraction, className, style, }: {
|
|
34
34
|
fraction?: number;
|
|
35
35
|
className?: string;
|
|
36
36
|
style?: React.CSSProperties;
|
|
37
|
-
})
|
|
37
|
+
}) => import("react").JSX.Element;
|
|
38
|
+
export default StatusProgressBar;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
2
3
|
import { cx, makeStyles } from '../util/tss-react/index.js';
|
|
3
4
|
import { indeterminateSweep } from './statusProgressKeyframes.js';
|
|
4
5
|
const HEIGHT = 4;
|
|
@@ -64,7 +65,7 @@ const useStyles = makeStyles()(theme => ({
|
|
|
64
65
|
* two modules deep, and its own test asserts the rendered tree carries no `Mui*`
|
|
65
66
|
* class, which catches a Material component rendered directly.
|
|
66
67
|
*/
|
|
67
|
-
|
|
68
|
+
const StatusProgressBar = observer(function StatusProgressBar({ fraction, className, style, }) {
|
|
68
69
|
const { classes } = useStyles();
|
|
69
70
|
const determinate = fraction !== undefined;
|
|
70
71
|
// one clamp for both halves. `statusFraction` clamps its own output, but a
|
|
@@ -73,4 +74,5 @@ export default function StatusProgressBar({ fraction, className, style, }) {
|
|
|
73
74
|
// a negative announce a value below the `aria-valuemin` declared beside it.
|
|
74
75
|
const filled = Math.min(1, Math.max(0, fraction ?? 0));
|
|
75
76
|
return (_jsx("div", { className: cx(classes.track, className), style: style, role: "progressbar", "aria-valuemin": determinate ? 0 : undefined, "aria-valuemax": determinate ? 100 : undefined, "aria-valuenow": determinate ? Math.round(filled * 100) : undefined, children: _jsx("div", { className: cx(classes.bar, determinate ? undefined : classes.sweep), style: determinate ? { transform: `scaleX(${filled})` } : undefined }) }));
|
|
76
|
-
}
|
|
77
|
+
});
|
|
78
|
+
export default StatusProgressBar;
|
package/esm/ui/SubmitForm.d.ts
CHANGED
|
@@ -20,4 +20,5 @@ export interface SubmitFormProps {
|
|
|
20
20
|
* outer chrome) is shared across several tab panes uses this directly, so the
|
|
21
21
|
* panes get the same keyboard behavior without each owning a Dialog.
|
|
22
22
|
*/
|
|
23
|
-
|
|
23
|
+
declare const SubmitForm: ({ onSubmit, onCancel, cancelText, submitText, submitDisabled, submitColor, submitStartIcon, onReset, resetText, actions, contentClassName, children, }: SubmitFormProps) => import("react").JSX.Element;
|
|
24
|
+
export default SubmitForm;
|
package/esm/ui/SubmitForm.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Button, DialogActions, DialogContent } from '@mui/material';
|
|
3
|
+
import { observer } from 'mobx-react';
|
|
3
4
|
/**
|
|
4
5
|
* Content plus a Cancel/Submit footer, wrapped in a form so Enter submits.
|
|
5
6
|
* SubmitDialog is this with a Dialog around it; a dialog whose Dialog (and
|
|
6
7
|
* outer chrome) is shared across several tab panes uses this directly, so the
|
|
7
8
|
* panes get the same keyboard behavior without each owning a Dialog.
|
|
8
9
|
*/
|
|
9
|
-
|
|
10
|
+
const SubmitForm = observer(function SubmitForm({ onSubmit, onCancel, cancelText = 'Cancel', submitText = 'Submit', submitDisabled = false, submitColor = 'primary', submitStartIcon, onReset, resetText = 'Restore default', actions, contentClassName, children, }) {
|
|
10
11
|
return (_jsxs("form", { onSubmit: event => {
|
|
11
12
|
event.preventDefault();
|
|
12
13
|
if (!submitDisabled) {
|
|
@@ -20,4 +21,5 @@ export default function SubmitForm({ onSubmit, onCancel, cancelText = 'Cancel',
|
|
|
20
21
|
onCancel();
|
|
21
22
|
}
|
|
22
23
|
}, children: onReset ? resetText : cancelText }), actions, _jsx(Button, { type: "submit", color: submitColor, variant: "contained", disabled: submitDisabled, startIcon: submitStartIcon, children: submitText })] })] }));
|
|
23
|
-
}
|
|
24
|
+
});
|
|
25
|
+
export default SubmitForm;
|
|
@@ -3,11 +3,10 @@ export type { ColorLegendEntry } from './legendSpec.ts';
|
|
|
3
3
|
export declare const LEGEND_ROW_HEIGHT = 14;
|
|
4
4
|
export declare const LEGEND_SWATCH = 10;
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* row this draws for a ramp, plus a margin either side.
|
|
6
|
+
* Width of the paper `SvgColorLegend` draws for `entries` under `maxHeight`, 0
|
|
7
|
+
* when it draws nothing.
|
|
9
8
|
*/
|
|
10
|
-
export declare
|
|
9
|
+
export declare function svgColorLegendWidth(entries: ColorLegendEntry[], maxHeight?: number): number;
|
|
11
10
|
export default function SvgColorLegend({ entries, canvasWidth, x, maxHeight, testid, idPrefix, }: {
|
|
12
11
|
entries: ColorLegendEntry[];
|
|
13
12
|
canvasWidth: number;
|
package/esm/ui/SvgColorLegend.js
CHANGED
|
@@ -15,12 +15,6 @@ const GRADIENT_BAR_WIDTH = 100;
|
|
|
15
15
|
const GRADIENT_BAR_HEIGHT = 10;
|
|
16
16
|
// the bar plus the row of domain labels under it
|
|
17
17
|
const GRADIENT_ROW_HEIGHT = GRADIENT_BAR_HEIGHT + 4 + LEGEND_ROW_HEIGHT;
|
|
18
|
-
/**
|
|
19
|
-
* Horizontal space the LGV export reserves beside the plot for a display whose
|
|
20
|
-
* legend asked to sit off the plot (`LegendMixin.svgLegendWidth`): the widest
|
|
21
|
-
* row this draws for a ramp, plus a margin either side.
|
|
22
|
-
*/
|
|
23
|
-
export const LEGEND_SVG_GUTTER_WIDTH = GRADIENT_BAR_WIDTH + 40;
|
|
24
18
|
// A row's swatches, with the flat `color` shorthand read as the single
|
|
25
19
|
// square it has always drawn.
|
|
26
20
|
function entrySwatches(entry) {
|
|
@@ -59,23 +53,16 @@ function fitEntries(entries, maxHeight) {
|
|
|
59
53
|
}
|
|
60
54
|
return shown;
|
|
61
55
|
}
|
|
56
|
+
// eslint-disable-next-line no-restricted-syntax -- drawn inside a frozen SVG figure
|
|
62
57
|
function GradientRow({ entry, width, gradientId, }) {
|
|
63
58
|
const { stops, minLabel, maxLabel } = entry.gradient;
|
|
64
59
|
const barTop = (entry.label ? LEGEND_ROW_HEIGHT : 0) + 2;
|
|
65
60
|
const labelY = barTop + GRADIENT_BAR_HEIGHT + 2 + FONT_SIZE;
|
|
66
61
|
return (_jsxs(_Fragment, { children: [_jsx("rect", { x: 0, y: 0, width: width, height: rowHeight(entry), fill: "rgba(255,255,255,0.95)" }), entry.label ? (_jsx("text", { x: SWATCH_LEFT, y: 11, fontSize: FONT_SIZE, fill: "black", children: entry.label })) : null, _jsx("defs", { children: _jsx("linearGradient", { id: gradientId, x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: stops.map(stop => (_jsx("stop", { offset: stop.offset, style: { stopColor: stop.color, stopOpacity: stop.opacity ?? 1 } }, stop.offset))) }) }), _jsx("rect", { x: SWATCH_LEFT, y: barTop, width: GRADIENT_BAR_WIDTH, height: GRADIENT_BAR_HEIGHT, fill: `url(#${gradientId})`, rx: 2 }), _jsx("text", { x: SWATCH_LEFT, y: labelY, fontSize: FONT_SIZE, fill: "black", children: minLabel }), _jsx("text", { x: SWATCH_LEFT + GRADIENT_BAR_WIDTH, y: labelY, fontSize: FONT_SIZE, fill: "black", textAnchor: "end", children: maxLabel })] }));
|
|
67
62
|
}
|
|
68
|
-
//
|
|
69
|
-
//
|
|
70
|
-
|
|
71
|
-
// an on-screen SVG overlay and the export share one renderer.
|
|
72
|
-
//
|
|
73
|
-
// `maxHeight` (the display height) caps the box: entries past what fits
|
|
74
|
-
// collapse into a trailing "+N more" summary row, so the legend never overflows
|
|
75
|
-
// its display — the full list stays reachable via the track menu.
|
|
76
|
-
export default function SvgColorLegend({ entries, canvasWidth, x, maxHeight, testid, idPrefix, }) {
|
|
77
|
-
const reactId = useId();
|
|
78
|
-
const legendId = idPrefix ?? reactId;
|
|
63
|
+
// What the key draws for `entries` under `maxHeight`, and how wide its paper
|
|
64
|
+
// is, so a caller sizing a gutter measures the box this renders.
|
|
65
|
+
function legendBox(entries, maxHeight) {
|
|
79
66
|
const shown = maxHeight === undefined ? entries : fitEntries(entries, maxHeight);
|
|
80
67
|
const cutRows = entries.slice(shown.length).filter(keysAColor).length;
|
|
81
68
|
const overflowLabel = cutRows > 0 ? `+${cutRows} more` : undefined;
|
|
@@ -95,12 +82,34 @@ export default function SvgColorLegend({ entries, canvasWidth, x, maxHeight, tes
|
|
|
95
82
|
contentRight = Math.max(contentRight, textLeft + measureLegendText(overflowLabel, FONT_SIZE));
|
|
96
83
|
}
|
|
97
84
|
const totalWidth = contentRight + 6;
|
|
98
|
-
const left = x ?? Math.max(0, canvasWidth - totalWidth - 4);
|
|
99
85
|
const rowTops = [];
|
|
100
86
|
let y = 0;
|
|
101
87
|
for (const entry of shown) {
|
|
102
88
|
rowTops.push(y);
|
|
103
89
|
y += rowHeight(entry);
|
|
104
90
|
}
|
|
91
|
+
return { shown, overflowLabel, textLeft, totalWidth, rowTops, bottom: y };
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Width of the paper `SvgColorLegend` draws for `entries` under `maxHeight`, 0
|
|
95
|
+
* when it draws nothing.
|
|
96
|
+
*/
|
|
97
|
+
export function svgColorLegendWidth(entries, maxHeight) {
|
|
98
|
+
const { shown, overflowLabel, totalWidth } = legendBox(entries, maxHeight);
|
|
99
|
+
return shown.length || overflowLabel ? totalWidth : 0;
|
|
100
|
+
}
|
|
101
|
+
// Shared SVG color key: one translucent row per entry — a swatch and a label,
|
|
102
|
+
// or a ramp bar with its domain ends — right-aligned within `canvasWidth`, or
|
|
103
|
+
// at `x` when the caller places it (an export's legend gutter). A <g>, so
|
|
104
|
+
// an on-screen SVG overlay and the export share one renderer.
|
|
105
|
+
//
|
|
106
|
+
// `maxHeight` (the display height) caps the box: entries past what fits
|
|
107
|
+
// collapse into a trailing "+N more" summary row, so the legend never overflows
|
|
108
|
+
// its display — the full list stays reachable via the track menu.
|
|
109
|
+
export default function SvgColorLegend({ entries, canvasWidth, x, maxHeight, testid, idPrefix, }) {
|
|
110
|
+
const reactId = useId();
|
|
111
|
+
const legendId = idPrefix ?? reactId;
|
|
112
|
+
const { shown, overflowLabel, textLeft, totalWidth, rowTops, bottom: y, } = legendBox(entries, maxHeight);
|
|
113
|
+
const left = x ?? Math.max(0, canvasWidth - totalWidth - 4);
|
|
105
114
|
return shown.length || overflowLabel ? (_jsxs("g", { transform: `translate(${left} 0)`, "data-testid": testid, children: [shown.map((entry, idx) => (_jsx("g", { transform: `translate(0 ${rowTops[idx]})`, children: entry.gradient ? (_jsx(GradientRow, { entry: entry, width: totalWidth, gradientId: svgSafeId(`${legendId}-${entry.key}`) })) : (_jsxs(_Fragment, { children: [_jsx("rect", { x: 0, y: 0, width: totalWidth, height: LEGEND_ROW_HEIGHT, fill: "rgba(255,255,255,0.95)" }), _jsxs("g", { opacity: entry.hidden ? 0.35 : 1, children: [entrySwatches(entry).map((swatch, i) => (_jsx(LegendSwatchGlyph, { swatch: swatch, size: LEGEND_SWATCH, x: SWATCH_LEFT + i * (LEGEND_SWATCH + SWATCH_GAP), y: 2 }, `${swatch.shape}-${swatch.color}`))), _jsx("text", { x: textLeft, y: 11, fontSize: FONT_SIZE, fill: "black", textDecoration: entry.hidden ? 'line-through' : undefined, children: entry.label })] })] })) }, entry.key))), overflowLabel === undefined ? null : (_jsxs("g", { transform: `translate(0 ${y})`, children: [_jsx("rect", { x: 0, y: 0, width: totalWidth, height: LEGEND_ROW_HEIGHT, fill: "rgba(255,255,255,0.95)" }), _jsx("text", { x: textLeft, y: 11, fontSize: FONT_SIZE, fill: "#555", children: overflowLabel })] }))] })) : null;
|
|
106
115
|
}
|
package/esm/ui/TagTextField.d.ts
CHANGED
|
@@ -36,5 +36,5 @@ type Props = Omit<TextFieldProps, 'value' | 'onChange' | 'error' | 'helperText'
|
|
|
36
36
|
* error once two invalid characters are entered. Optional `quickPicks` render a
|
|
37
37
|
* chip row of common tags that fill the field on click.
|
|
38
38
|
*/
|
|
39
|
-
|
|
40
|
-
export
|
|
39
|
+
declare const TagTextField: (props: Props) => import("react").JSX.Element;
|
|
40
|
+
export default TagTextField;
|