@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
|
@@ -7,7 +7,7 @@ import type { FeatureFormatter, FieldActions } from '../types.tsx';
|
|
|
7
7
|
* to make the same call.
|
|
8
8
|
*/
|
|
9
9
|
export declare function isObjectArray(value: unknown[]): value is Record<string, unknown>[];
|
|
10
|
-
|
|
10
|
+
declare const ArrayValue: ({ name, value, description, formatter, fieldActions, prefix, width, }: {
|
|
11
11
|
description?: React.ReactNode;
|
|
12
12
|
name: string;
|
|
13
13
|
value: unknown[];
|
|
@@ -15,4 +15,5 @@ export default function ArrayValue({ name, value, description, formatter, fieldA
|
|
|
15
15
|
fieldActions?: FieldActions;
|
|
16
16
|
prefix?: string[];
|
|
17
17
|
width?: number;
|
|
18
|
-
})
|
|
18
|
+
}) => import("react").JSX.Element;
|
|
19
|
+
export default ArrayValue;
|
|
@@ -1,5 +1,6 @@
|
|
|
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 { isObject } from '../../util/index.js';
|
|
4
5
|
import { makeStyles } from '../../util/tss-react/index.js';
|
|
5
6
|
import Attributes from './Attributes.js';
|
|
@@ -33,7 +34,7 @@ const useStyles = makeStyles()(theme => ({
|
|
|
33
34
|
export function isObjectArray(value) {
|
|
34
35
|
return value.every(isObject);
|
|
35
36
|
}
|
|
36
|
-
|
|
37
|
+
const ArrayValue = observer(function ArrayValue({ name, value, description, formatter, fieldActions, prefix = [], width, }) {
|
|
37
38
|
const { classes, cx } = useStyles();
|
|
38
39
|
const reveal = useRevealFieldActions();
|
|
39
40
|
const [showAll, setShowAll] = useState(false);
|
|
@@ -49,4 +50,5 @@ export default function ArrayValue({ name, value, description, formatter, fieldA
|
|
|
49
50
|
}, children: showAll
|
|
50
51
|
? 'Show less'
|
|
51
52
|
: `Showing ${limit} of ${value.length}. Show all...` })) : null] }))] }));
|
|
52
|
-
}
|
|
53
|
+
});
|
|
54
|
+
export default ArrayValue;
|
|
@@ -2,7 +2,7 @@ import type { Descriptors, FeatureFormatter, FieldActions } from '../types.tsx';
|
|
|
2
2
|
export declare function withoutLocations(attributes: Record<string, unknown>): Record<string, unknown>;
|
|
3
3
|
/** Whether `Attributes` given these `attributes` and `omit` draws any row. */
|
|
4
4
|
export declare function hasAttributeRows(attributes: Record<string, unknown>, omit?: string[]): boolean;
|
|
5
|
-
|
|
5
|
+
declare const Attributes: (props: {
|
|
6
6
|
attributes: Record<string, unknown>;
|
|
7
7
|
omit?: string[];
|
|
8
8
|
omitSingleLevel?: string[];
|
|
@@ -16,4 +16,5 @@ export default function Attributes(props: {
|
|
|
16
16
|
* down the recursion. Set by `Attributes` itself; a caller leaves it alone.
|
|
17
17
|
*/
|
|
18
18
|
labelWidth?: number;
|
|
19
|
-
})
|
|
19
|
+
}) => import("react").JSX.Element;
|
|
20
|
+
export default Attributes;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { Suspense, lazy } from 'react';
|
|
3
|
+
import { observer } from 'mobx-react';
|
|
3
4
|
import { isLocalPathLocation, isObject, isUriLocation, measureText, } from '../../util/index.js';
|
|
4
5
|
import ArrayValue, { isObjectArray } from './ArrayValue.js';
|
|
5
6
|
import SimpleField from './SimpleField.js';
|
|
@@ -119,7 +120,7 @@ export function hasAttributeRows(attributes, omit = []) {
|
|
|
119
120
|
function widestLabel(attributes, opts) {
|
|
120
121
|
return Math.ceil(measureLabels(attributes, opts)) + FIELD_NAME_PADDING;
|
|
121
122
|
}
|
|
122
|
-
|
|
123
|
+
const Attributes = observer(function Attributes(props) {
|
|
123
124
|
const { omit = [], omitSingleLevel = [], descriptions, formatter, fieldActions, hideUris, prefix = [], labelWidth, } = props;
|
|
124
125
|
const attributes = hideUris
|
|
125
126
|
? withoutLocations(props.attributes)
|
|
@@ -156,4 +157,5 @@ export default function Attributes(props) {
|
|
|
156
157
|
return (_jsx(SimpleField, { name: key, formatter: formatter, fieldActions: fieldActions, value: value, description: description, prefix: prefix, width: width }, key));
|
|
157
158
|
}
|
|
158
159
|
}) }));
|
|
159
|
-
}
|
|
160
|
+
});
|
|
161
|
+
export default Attributes;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
2
3
|
import Attributes from './Attributes.js';
|
|
3
4
|
import BaseCard from './BaseCard.js';
|
|
4
|
-
|
|
5
|
+
const BaseAttributes = observer(function BaseAttributes(props) {
|
|
5
6
|
const { title = 'Attributes', defaultExpanded, feature } = props;
|
|
6
7
|
return (_jsx(BaseCard, { title: title, defaultExpanded: defaultExpanded, children: _jsx(Attributes, { ...props, attributes: feature }) }));
|
|
7
|
-
}
|
|
8
|
+
});
|
|
9
|
+
export default BaseAttributes;
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import type { BaseCardProps } from '../types.tsx';
|
|
2
|
-
|
|
2
|
+
declare const BaseCard: ({ children, title, defaultExpanded, }: BaseCardProps) => import("react").JSX.Element;
|
|
3
|
+
export default BaseCard;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import ExpandMore from '@mui/icons-material/ExpandMore';
|
|
3
3
|
import { Accordion, AccordionDetails, AccordionSummary, Typography, } from '@mui/material';
|
|
4
|
+
import { observer } from 'mobx-react';
|
|
4
5
|
import { makeStyles } from '../../util/tss-react/index.js';
|
|
5
6
|
const useStyles = makeStyles()(theme => ({
|
|
6
7
|
expansionPanelDetails: {
|
|
@@ -8,7 +9,8 @@ const useStyles = makeStyles()(theme => ({
|
|
|
8
9
|
padding: theme.spacing(1),
|
|
9
10
|
},
|
|
10
11
|
}));
|
|
11
|
-
|
|
12
|
+
const BaseCard = observer(function BaseCard({ children, title, defaultExpanded = true, }) {
|
|
12
13
|
const { classes } = useStyles();
|
|
13
14
|
return (_jsxs(Accordion, { defaultExpanded: defaultExpanded, slotProps: { transition: { unmountOnExit: true } }, "data-testid": `BaseCard-${title}`, children: [_jsx(AccordionSummary, { expandIcon: _jsx(ExpandMore, {}), children: _jsx(Typography, { variant: "button", children: title }) }), _jsx(AccordionDetails, { className: classes.expansionPanelDetails, children: children })] }));
|
|
14
|
-
}
|
|
15
|
+
});
|
|
16
|
+
export default BaseCard;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
2
3
|
import BaseCard from './BaseCard.js';
|
|
3
4
|
import CoreDetails from './CoreDetails.js';
|
|
4
|
-
|
|
5
|
+
const BaseCoreDetails = observer(function BaseCoreDetails(props) {
|
|
5
6
|
const { title = 'Primary data', defaultExpanded } = props;
|
|
6
7
|
return (_jsx(BaseCard, { title: title, defaultExpanded: defaultExpanded, children: _jsx(CoreDetails, { ...props }) }));
|
|
7
|
-
}
|
|
8
|
+
});
|
|
9
|
+
export default BaseCoreDetails;
|
|
@@ -6,9 +6,10 @@ export declare function valueText(value: unknown): string;
|
|
|
6
6
|
* open in a new tab: navigating in place discards the session, and in an
|
|
7
7
|
* embedded JBrowse it takes the host page with it.
|
|
8
8
|
*/
|
|
9
|
-
export declare
|
|
9
|
+
export declare const ValueText: ({ text, }: {
|
|
10
10
|
text: string;
|
|
11
|
-
})
|
|
12
|
-
|
|
11
|
+
}) => import("react").JSX.Element;
|
|
12
|
+
declare const BasicValue: ({ value }: {
|
|
13
13
|
value: unknown;
|
|
14
|
-
})
|
|
14
|
+
}) => import("react").JSX.Element;
|
|
15
|
+
export default BasicValue;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { isValidElement, useState } from 'react';
|
|
3
3
|
import { Link } from '@mui/material';
|
|
4
|
+
import { observer } from 'mobx-react';
|
|
4
5
|
import { SanitizedHTML } from '../../ui/index.js';
|
|
5
6
|
import { isObject } from '../../util/index.js';
|
|
6
7
|
import { makeStyles } from '../../util/tss-react/index.js';
|
|
@@ -36,10 +37,10 @@ export function valueText(value) {
|
|
|
36
37
|
* open in a new tab: navigating in place discards the session, and in an
|
|
37
38
|
* embedded JBrowse it takes the host page with it.
|
|
38
39
|
*/
|
|
39
|
-
export function ValueText({ text }) {
|
|
40
|
+
export const ValueText = observer(function ValueText({ text, }) {
|
|
40
41
|
return isBareUrl(text) ? (_jsx(Link, { href: text, target: "_blank", rel: "noopener noreferrer", children: text })) : (_jsx(SanitizedHTML, { html: text }));
|
|
41
|
-
}
|
|
42
|
-
|
|
42
|
+
});
|
|
43
|
+
const BasicValue = observer(function BasicValue({ value }) {
|
|
43
44
|
const { classes, cx } = useStyles();
|
|
44
45
|
const [expanded, setExpanded] = useState(false);
|
|
45
46
|
const [ref, { height }] = useMeasure('height');
|
|
@@ -47,4 +48,5 @@ export default function BasicValue({ value }) {
|
|
|
47
48
|
return (_jsxs("div", { className: classes.fieldValue, children: [_jsx("div", { className: cx(classes.clip, !expanded && classes.clamped, !expanded && overflows && classes.faded), children: _jsx("div", { ref: ref, children: isValidElement(value) ? (value) : (_jsx(ValueText, { text: valueText(value) })) }) }), overflows ? (_jsx(Link, { component: "button", variant: "caption", onClick: () => {
|
|
48
49
|
setExpanded(v => !v);
|
|
49
50
|
}, children: expanded ? 'Show less' : 'Show more' })) : null] }));
|
|
50
|
-
}
|
|
51
|
+
});
|
|
52
|
+
export default BasicValue;
|
|
@@ -1,8 +1,9 @@
|
|
|
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 { assembleLocString, toLocale } from '../../util/index.js';
|
|
3
4
|
import { getStrandStr } from '../util.js';
|
|
4
5
|
import SimpleField from './SimpleField.js';
|
|
5
|
-
|
|
6
|
+
const CoreDetails = observer(function CoreDetails({ feature }) {
|
|
6
7
|
const { name, description, type, start, end, strand } = feature;
|
|
7
8
|
// only a formatDetails callback sets `length`, to rewrite or hide the row:
|
|
8
9
|
// an adapter's own field of that name is in Attributes' globalOmit
|
|
@@ -16,4 +17,5 @@ export default function CoreDetails({ feature }) {
|
|
|
16
17
|
return (_jsxs(_Fragment, { children: [_jsx(SimpleField, { name: "Position", value: [assembleLocString(feature), getStrandStr(strand)]
|
|
17
18
|
.filter(Boolean)
|
|
18
19
|
.join(' ') }), rows.map(([label, value]) => (_jsx(SimpleField, { name: label, value: Array.isArray(value) ? value.join(', ') : value }, label)))] }));
|
|
19
|
-
}
|
|
20
|
+
});
|
|
21
|
+
export default CoreDetails;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
declare const DataGridDetails: ({ value, prefix, name, }: {
|
|
2
2
|
name: string;
|
|
3
3
|
prefix?: string[];
|
|
4
4
|
value: Record<string, unknown>[];
|
|
5
|
-
})
|
|
5
|
+
}) => import("react").JSX.Element;
|
|
6
|
+
export default DataGridDetails;
|
|
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { useState } from 'react';
|
|
3
3
|
import { Typography } from '@mui/material';
|
|
4
4
|
import { DataGrid } from '@mui/x-data-grid';
|
|
5
|
+
import { observer } from 'mobx-react';
|
|
5
6
|
import DataGridFlexContainer from '../../ui/DataGridFlexContainer.js';
|
|
6
7
|
import { LabeledCheckbox, SanitizedHTML } from '../../ui/index.js';
|
|
7
8
|
import { getStr, measureGridWidth } from '../../util/index.js';
|
|
@@ -17,7 +18,7 @@ const useStyles = makeStyles()(theme => ({
|
|
|
17
18
|
textOverflow: 'ellipsis',
|
|
18
19
|
},
|
|
19
20
|
}));
|
|
20
|
-
|
|
21
|
+
const DataGridDetails = observer(function DataGridDetails({ value, prefix, name, }) {
|
|
21
22
|
const { classes } = useStyles();
|
|
22
23
|
const [checked, setChecked] = useState(false);
|
|
23
24
|
// DataGrid needs a unique row id; rather than commandeering any 'id' field
|
|
@@ -33,4 +34,5 @@ export default function DataGridDetails({ value, prefix, name, }) {
|
|
|
33
34
|
width: widths[index],
|
|
34
35
|
renderCell: ({ value }) => (_jsx("div", { className: classes.cell, children: _jsx(SanitizedHTML, { html: getStr(value ?? '') }) })),
|
|
35
36
|
})) }) })] }));
|
|
36
|
-
}
|
|
37
|
+
});
|
|
38
|
+
export default DataGridDetails;
|
|
@@ -10,9 +10,9 @@ import Attributes from './Attributes.js';
|
|
|
10
10
|
import BaseCard from './BaseCard.js';
|
|
11
11
|
import CoreDetails from './CoreDetails.js';
|
|
12
12
|
import { generateTitle } from './util.js';
|
|
13
|
-
function SectionHeader({ title }) {
|
|
13
|
+
const SectionHeader = observer(function SectionHeader({ title, }) {
|
|
14
14
|
return _jsx(Typography, { variant: "overline", children: title });
|
|
15
|
-
}
|
|
15
|
+
});
|
|
16
16
|
const shownByCoreDetails = [
|
|
17
17
|
'name',
|
|
18
18
|
'start',
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
* sample grid); inside such a key this remounts on every swap and its counter
|
|
15
15
|
* never leaves zero, so it silently never plays.
|
|
16
16
|
*/
|
|
17
|
-
|
|
17
|
+
declare const FeatureWash: ({ uniqueId, children, }: {
|
|
18
18
|
uniqueId: string | undefined;
|
|
19
19
|
children: React.ReactNode;
|
|
20
|
-
})
|
|
20
|
+
}) => import("react").JSX.Element;
|
|
21
|
+
export default FeatureWash;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { 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 { alpha } from '../../ui/palette.js';
|
|
4
5
|
import { keyframes, makeStyles } from '../../util/tss-react/index.js';
|
|
5
6
|
// Long enough to register out of the corner of an eye that was on the track,
|
|
@@ -43,7 +44,7 @@ const useStyles = makeStyles()(theme => {
|
|
|
43
44
|
* sample grid); inside such a key this remounts on every swap and its counter
|
|
44
45
|
* never leaves zero, so it silently never plays.
|
|
45
46
|
*/
|
|
46
|
-
|
|
47
|
+
const FeatureWash = observer(function FeatureWash({ uniqueId, children, }) {
|
|
47
48
|
const { classes } = useStyles();
|
|
48
49
|
// Keyed on the feature's identity, not on the feature object: a widget's
|
|
49
50
|
// formatDetails callbacks re-resolve into a fresh object, and a re-format of
|
|
@@ -63,4 +64,5 @@ export default function FeatureWash({ uniqueId, children, }) {
|
|
|
63
64
|
});
|
|
64
65
|
}
|
|
65
66
|
return (_jsxs("div", { className: classes.root, children: [children, wash.count ? (_jsx("span", { className: classes.wash, "data-testid": "feature-details-wash" }, wash.count)) : null] }));
|
|
66
|
-
}
|
|
67
|
+
});
|
|
68
|
+
export default FeatureWash;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { FieldActions } from '../types.tsx';
|
|
2
2
|
/** A class for a field row that shows its FieldActionsButton on hover or focus. */
|
|
3
3
|
export declare function useRevealFieldActions(): string;
|
|
4
|
-
|
|
4
|
+
declare const FieldActionsButton: ({ path, value, fieldActions, }: {
|
|
5
5
|
path: string[];
|
|
6
6
|
value: unknown;
|
|
7
7
|
fieldActions?: FieldActions;
|
|
8
|
-
})
|
|
8
|
+
}) => import("react").JSX.Element | null;
|
|
9
|
+
export default FieldActionsButton;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import FilterListIcon from '@mui/icons-material/FilterList';
|
|
3
|
+
import { observer } from 'mobx-react';
|
|
3
4
|
import CascadingMenuButton from '../../ui/CascadingMenuButton.js';
|
|
4
5
|
import { makeStyles } from '../../util/tss-react/index.js';
|
|
5
6
|
// on a wrapper because MUI folds an Emotion class handed to one of its
|
|
@@ -17,8 +18,9 @@ export function useRevealFieldActions() {
|
|
|
17
18
|
[`&:hover .${reveal}, &:focus-within .${reveal}`]: { opacity: 1 },
|
|
18
19
|
});
|
|
19
20
|
}
|
|
20
|
-
|
|
21
|
+
const FieldActionsButton = observer(function FieldActionsButton({ path, value, fieldActions, }) {
|
|
21
22
|
const { classes } = useStyles();
|
|
22
23
|
const items = fieldActions?.(path, value) ?? [];
|
|
23
24
|
return items.length > 0 ? (_jsx("span", { className: classes.reveal, children: _jsx(CascadingMenuButton, { menuItems: items, size: "small", tooltip: "Filter by this value", style: { padding: 0 }, children: _jsx(FilterListIcon, { fontSize: "small" }) }) })) : null;
|
|
24
|
-
}
|
|
25
|
+
});
|
|
26
|
+
export default FieldActionsButton;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
declare const FieldName: ({ description, name, width, prefix, }: {
|
|
2
2
|
description?: React.ReactNode;
|
|
3
3
|
name: string;
|
|
4
4
|
prefix?: string[];
|
|
5
5
|
width?: number;
|
|
6
|
-
})
|
|
6
|
+
}) => import("react").JSX.Element;
|
|
7
|
+
export default FieldName;
|
|
@@ -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
|
import { cx, makeStyles } from '../../util/tss-react/index.js';
|
|
4
5
|
const useStyles = makeStyles()(theme => ({
|
|
5
6
|
fieldDescription: {
|
|
@@ -17,8 +18,9 @@ const useStyles = makeStyles()(theme => ({
|
|
|
17
18
|
padding: theme.spacing(0.5),
|
|
18
19
|
},
|
|
19
20
|
}));
|
|
20
|
-
|
|
21
|
+
const FieldName = observer(function FieldName({ description, name, width, prefix = [], }) {
|
|
21
22
|
const { classes } = useStyles();
|
|
22
23
|
const val = [...prefix, name].join('.');
|
|
23
24
|
return description ? (_jsx(Tooltip, { title: description, placement: "left", children: _jsx("div", { className: cx(classes.fieldDescription, classes.fieldName), style: { width }, children: val }) })) : (_jsx("div", { className: classes.fieldName, style: { width }, children: val }));
|
|
24
|
-
}
|
|
25
|
+
});
|
|
26
|
+
export default FieldName;
|
|
@@ -1,5 +1,6 @@
|
|
|
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 { useCopyToClipboard } from '../../ui/useCopyToClipboard.js';
|
|
4
5
|
import { ValueText, isBareUrl, valueText } from './BasicValue.js';
|
|
5
6
|
const TRUNCATE_LENGTH = 100;
|
|
@@ -7,7 +8,7 @@ const TRUNCATE_LENGTH = 100;
|
|
|
7
8
|
// (e.g. a SEQ/CRAM string, or a long read's worth of data in a single div) can
|
|
8
9
|
// slow down the rest of the app, so they are truncated until expanded. A URL
|
|
9
10
|
// is left whole, since a truncated one links nowhere
|
|
10
|
-
|
|
11
|
+
const Formatter = observer(function Formatter({ value }) {
|
|
11
12
|
const [show, setShow] = useState(false);
|
|
12
13
|
const { copied, copy } = useCopyToClipboard(700);
|
|
13
14
|
const display = valueText(value);
|
|
@@ -16,4 +17,5 @@ export default function Formatter({ value }) {
|
|
|
16
17
|
}, children: copied ? 'Copied to clipboard' : 'Copy' }), _jsx("button", { type: "button", onClick: () => {
|
|
17
18
|
setShow(val => !val);
|
|
18
19
|
}, children: show ? 'Show less' : 'Show more' }), _jsx("div", { children: show ? (_jsx(ValueText, { text: display })) : (`${display.slice(0, TRUNCATE_LENGTH)}...`) })] })) : (_jsx(ValueText, { text: display }));
|
|
19
|
-
}
|
|
20
|
+
});
|
|
21
|
+
export default Formatter;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ParentFeatureSummary } from '../../util/index.ts';
|
|
2
|
-
|
|
2
|
+
declare const ParentFeatureLine: ({ parentFeature, }: {
|
|
3
3
|
parentFeature: ParentFeatureSummary;
|
|
4
|
-
})
|
|
4
|
+
}) => import("react").JSX.Element;
|
|
5
|
+
export default ParentFeatureLine;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Typography } from '@mui/material';
|
|
3
|
+
import { observer } from 'mobx-react';
|
|
3
4
|
import { makeStyles } from '../../util/tss-react/index.js';
|
|
4
5
|
const useStyles = makeStyles()(theme => ({
|
|
5
6
|
line: {
|
|
@@ -10,8 +11,9 @@ const useStyles = makeStyles()(theme => ({
|
|
|
10
11
|
// The panel is opened on the exact isoform the click resolved to, and that
|
|
11
12
|
// isoform's own record is regularly the only place its accession appears --
|
|
12
13
|
// nothing in `NM_004006.2 - mRNA` says DMD.
|
|
13
|
-
|
|
14
|
+
const ParentFeatureLine = observer(function ParentFeatureLine({ parentFeature, }) {
|
|
14
15
|
const { classes } = useStyles();
|
|
15
16
|
const { name, type } = parentFeature;
|
|
16
17
|
return (_jsxs(Typography, { variant: "body2", color: "textSecondary", className: classes.line, "data-testid": "parent-feature-line", children: ["in ", type ? `${type} ` : '', name] }));
|
|
17
|
-
}
|
|
18
|
+
});
|
|
19
|
+
export default ParentFeatureLine;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { FeatureFormatter, FieldActions } from '../types.tsx';
|
|
2
|
-
|
|
2
|
+
declare const SimpleField: ({ name, value, description, prefix, width, formatter, fieldActions, }: {
|
|
3
3
|
description?: React.ReactNode;
|
|
4
4
|
name: string;
|
|
5
5
|
value: unknown;
|
|
@@ -7,4 +7,5 @@ export default function SimpleField({ name, value, description, prefix, width, f
|
|
|
7
7
|
width?: number;
|
|
8
8
|
formatter?: FeatureFormatter;
|
|
9
9
|
fieldActions?: FieldActions;
|
|
10
|
-
})
|
|
10
|
+
}) => import("react").JSX.Element | null;
|
|
11
|
+
export default SimpleField;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
2
3
|
import { makeStyles } from '../../util/tss-react/index.js';
|
|
3
4
|
import BasicValue from './BasicValue.js';
|
|
4
5
|
import FieldActionsButton, { useRevealFieldActions, } from './FieldActionsButton.js';
|
|
@@ -9,8 +10,9 @@ const useStyles = makeStyles()({
|
|
|
9
10
|
flexWrap: 'wrap',
|
|
10
11
|
},
|
|
11
12
|
});
|
|
12
|
-
|
|
13
|
+
const SimpleField = observer(function SimpleField({ name, value, description, prefix, width, formatter, fieldActions, }) {
|
|
13
14
|
const { classes, cx } = useStyles();
|
|
14
15
|
const reveal = useRevealFieldActions();
|
|
15
16
|
return value != null ? (_jsxs("div", { className: cx(classes.field, reveal), children: [_jsx(FieldName, { prefix: prefix, description: description, name: name, width: width }), _jsx(BasicValue, { value: formatter ? formatter(value, name) : value }), _jsx(FieldActionsButton, { path: [...(prefix ?? []), name], value: value, fieldActions: fieldActions })] })) : null;
|
|
16
|
-
}
|
|
17
|
+
});
|
|
18
|
+
export default SimpleField;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
declare const UriField: ({ value, prefix, name, width, }: {
|
|
2
2
|
value: {
|
|
3
3
|
uri: string;
|
|
4
4
|
baseUri?: string;
|
|
@@ -6,4 +6,5 @@ export default function UriField({ value, prefix, name, width, }: {
|
|
|
6
6
|
name: string;
|
|
7
7
|
prefix: string[];
|
|
8
8
|
width?: number;
|
|
9
|
-
})
|
|
9
|
+
}) => import("react").JSX.Element;
|
|
10
|
+
export default UriField;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
2
3
|
import SimpleField from './SimpleField.js';
|
|
3
|
-
|
|
4
|
+
const UriField = observer(function UriField({ value, prefix, name, width, }) {
|
|
4
5
|
const { uri, baseUri = '' } = value;
|
|
5
6
|
let href;
|
|
6
7
|
try {
|
|
@@ -12,4 +13,5 @@ export default function UriField({ value, prefix, name, width, }) {
|
|
|
12
13
|
// width forwarded like any other field's: without it a URI row sized its own
|
|
13
14
|
// label to content and sat out of the column every row beside it shares
|
|
14
15
|
return _jsx(SimpleField, { name: name, prefix: prefix, value: href, width: width });
|
|
15
|
-
}
|
|
16
|
+
});
|
|
17
|
+
export default UriField;
|
|
@@ -2,7 +2,7 @@ import type { RpcStatus, SimpleFeatureSerialized } from '../../util/index.ts';
|
|
|
2
2
|
import type { ErrorState, SeqState } from '../util.tsx';
|
|
3
3
|
import type { SequenceDisplayMode, SequenceFeatureDetailsModel, SequenceHoverTarget } from './model.ts';
|
|
4
4
|
import type { RefObject } from 'react';
|
|
5
|
-
|
|
5
|
+
declare const SequenceBody: ({ error, sequence, status, feature, seqPanelRef, model, mode, revcomp, assemblyGeneticCodeId, assemblyName, hoverTarget, onForceLoad, }: {
|
|
6
6
|
error: unknown;
|
|
7
7
|
sequence: SeqState | ErrorState | undefined;
|
|
8
8
|
status?: RpcStatus;
|
|
@@ -15,4 +15,5 @@ export default function SequenceBody({ error, sequence, status, feature, seqPane
|
|
|
15
15
|
assemblyName?: string;
|
|
16
16
|
hoverTarget?: SequenceHoverTarget;
|
|
17
17
|
onForceLoad: () => void;
|
|
18
|
-
})
|
|
18
|
+
}) => import("react").JSX.Element;
|
|
19
|
+
export default SequenceBody;
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Button, Typography } from '@mui/material';
|
|
3
|
+
import { observer } from 'mobx-react';
|
|
3
4
|
import { ErrorBanner, LoadingEllipses } from '../../ui/index.js';
|
|
4
5
|
import { statusProgressLabel } from '../../util/progress.js';
|
|
5
6
|
import SequencePanel from './SequencePanel.js';
|
|
6
|
-
|
|
7
|
+
const SequenceBody = observer(function SequenceBody({ error, sequence, status, feature, seqPanelRef, model, mode, revcomp, assemblyGeneticCodeId, assemblyName, hoverTarget, onForceLoad, }) {
|
|
7
8
|
return (_jsx("div", { children: error ? (_jsx(ErrorBanner, { error: error })) : !sequence ? (_jsx(LoadingEllipses, { message: statusProgressLabel(status) })) : 'error' in sequence ? (_jsxs(_Fragment, { children: [_jsx(Typography, { color: "error", children: sequence.error }), _jsx(Button, { onClick: () => {
|
|
8
9
|
onForceLoad();
|
|
9
10
|
}, children: "Force load" })] })) : (_jsx(SequencePanel, { ref: seqPanelRef, feature: feature, sequence: sequence, model: model, mode: mode, revcomp: revcomp, assemblyGeneticCodeId: assemblyGeneticCodeId, assemblyName: assemblyName, hoverTarget: hoverTarget })) }));
|
|
10
|
-
}
|
|
11
|
+
});
|
|
12
|
+
export default SequenceBody;
|
|
@@ -10,5 +10,5 @@ interface SequenceFeatureDetailsProps {
|
|
|
10
10
|
showOpenInDialog?: boolean;
|
|
11
11
|
canonicalTranscripts?: CanonicalTranscripts;
|
|
12
12
|
}
|
|
13
|
-
declare
|
|
13
|
+
declare const SequenceFeatureDetails: (props: SequenceFeatureDetailsProps) => import("react").JSX.Element;
|
|
14
14
|
export default SequenceFeatureDetails;
|
|
@@ -5,7 +5,7 @@ import { LoadingEllipses } from '../../ui/index.js';
|
|
|
5
5
|
import SequenceFeatureMenu from './dialogs/SequenceFeatureMenu.js';
|
|
6
6
|
import SequenceTypeSelector from './dialogs/SequenceTypeSelector.js';
|
|
7
7
|
import TranscriptSelector from './dialogs/TranscriptSelector.js';
|
|
8
|
-
import {
|
|
8
|
+
import { getTranscripts, pickDefaultTranscriptIndex, resolveMode, } from './featureTypeUtil.js';
|
|
9
9
|
import { useSequenceFetch } from './useSequenceFetch.js';
|
|
10
10
|
// lazies
|
|
11
11
|
const SequenceBody = lazy(() => import('./SequenceBody.js'));
|
|
@@ -20,10 +20,7 @@ const SequenceFeatureDetailsPanel = observer(function SequenceFeatureDetailsPane
|
|
|
20
20
|
const transcripts = getTranscripts(feature);
|
|
21
21
|
const [transcriptIndex, setTranscriptIndex] = useState(() => pickDefaultTranscriptIndex(transcripts, canonicalTranscripts));
|
|
22
22
|
const effectiveFeature = transcripts[transcriptIndex] ?? feature;
|
|
23
|
-
|
|
24
|
-
// subfeature panel (e.g. coding vs noncoding transcripts of one gene) picks
|
|
25
|
-
// its own sequence type and strand
|
|
26
|
-
const [mode, setMode] = useState(() => getDefaultMode(effectiveFeature));
|
|
23
|
+
const mode = resolveMode(model.recentModes, effectiveFeature);
|
|
27
24
|
const [revcomp, setRevcomp] = useState(false);
|
|
28
25
|
const [openInDialog, setOpenInDialog] = useState(false);
|
|
29
26
|
// spread into whichever readout is mounted, rather than forwarded field by
|
|
@@ -40,11 +37,8 @@ const SequenceFeatureDetailsPanel = observer(function SequenceFeatureDetailsPane
|
|
|
40
37
|
// transcript lives in this component's state, so a dialog without the
|
|
41
38
|
// selector strands a multi-transcript gene on whichever one was picked
|
|
42
39
|
// before it opened (the inline copy is behind the modal and unclickable)
|
|
43
|
-
const transcriptSelector = transcripts.length > 1 ? (_jsx(TranscriptSelector, { transcripts: transcripts, transcriptIndex: transcriptIndex, setTranscriptIndex:
|
|
44
|
-
|
|
45
|
-
setMode(getDefaultMode(transcripts[index]));
|
|
46
|
-
} })) : null;
|
|
47
|
-
return (_jsxs(_Fragment, { children: [_jsxs("div", { children: [transcriptSelector, _jsx(SequenceTypeSelector, { model: model, feature: effectiveFeature, mode: mode, setMode: setMode }), _jsx(SequenceFeatureMenu, { ref: seqPanelRef, model: model, session: session, mode: mode, revcomp: revcomp, setRevcomp: setRevcomp, extraItems: showOpenInDialog
|
|
40
|
+
const transcriptSelector = transcripts.length > 1 ? (_jsx(TranscriptSelector, { transcripts: transcripts, transcriptIndex: transcriptIndex, setTranscriptIndex: setTranscriptIndex })) : null;
|
|
41
|
+
return (_jsxs(_Fragment, { children: [_jsxs("div", { children: [transcriptSelector, _jsx(SequenceTypeSelector, { model: model, feature: effectiveFeature, mode: mode }), _jsx(SequenceFeatureMenu, { ref: seqPanelRef, model: model, session: session, mode: mode, revcomp: revcomp, setRevcomp: setRevcomp, extraItems: showOpenInDialog
|
|
48
42
|
? [
|
|
49
43
|
{
|
|
50
44
|
label: 'Open in dialog',
|
|
@@ -53,7 +47,7 @@ const SequenceFeatureDetailsPanel = observer(function SequenceFeatureDetailsPane
|
|
|
53
47
|
},
|
|
54
48
|
},
|
|
55
49
|
]
|
|
56
|
-
: [] })] }), openInDialog ? (_jsx(Suspense, { fallback: _jsx(LoadingEllipses, {}), children: _jsx(SequenceDialog, { ...fetched, sequenceFeatureDetails: model, session: session, transcriptSelector: transcriptSelector, feature: effectiveFeature, mode: mode,
|
|
50
|
+
: [] })] }), openInDialog ? (_jsx(Suspense, { fallback: _jsx(LoadingEllipses, {}), children: _jsx(SequenceDialog, { ...fetched, sequenceFeatureDetails: model, session: session, transcriptSelector: transcriptSelector, feature: effectiveFeature, mode: mode, revcomp: revcomp, setRevcomp: setRevcomp, assemblyName: assemblyName, hoverTarget: hoverTarget, handleClose: () => {
|
|
57
51
|
setOpenInDialog(false);
|
|
58
52
|
} }) })) : (_jsx(Suspense, { fallback: _jsx(LoadingEllipses, {}), children: _jsx(SequenceBody, { ...fetched, feature: effectiveFeature, seqPanelRef: seqPanelRef, model: model, mode: mode, revcomp: revcomp, assemblyName: assemblyName, hoverTarget: hoverTarget }) }))] }));
|
|
59
53
|
});
|
|
@@ -61,13 +55,10 @@ const SequenceFeatureDetailsPanel = observer(function SequenceFeatureDetailsPane
|
|
|
61
55
|
// a feature-detail widget, so anything holding a SequenceFeatureDetails model
|
|
62
56
|
// (the widget, a track's right-click dialog) renders the same readout.
|
|
63
57
|
//
|
|
64
|
-
// The panel's
|
|
65
|
-
//
|
|
66
|
-
//
|
|
67
|
-
|
|
68
|
-
// feature that doesn't offer it, which renders the wrong sequence and puts an
|
|
69
|
-
// out-of-range value in the sequence type selector.
|
|
70
|
-
function SequenceFeatureDetails(props) {
|
|
58
|
+
// The panel's transcript and revcomp are initialized from the feature, and the
|
|
59
|
+
// widget is reused (not remounted) when the user clicks a different feature —
|
|
60
|
+
// so key the panel on the feature to reinitialize them.
|
|
61
|
+
const SequenceFeatureDetails = observer(function SequenceFeatureDetails(props) {
|
|
71
62
|
return _jsx(SequenceFeatureDetailsPanel, { ...props }, props.feature.uniqueId);
|
|
72
|
-
}
|
|
63
|
+
});
|
|
73
64
|
export default SequenceFeatureDetails;
|