@jbrowse/core 5.0.0-beta.11 → 5.0.0-beta.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +450 -132
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +4 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +6 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +18 -3
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseAttributes.d.ts +2 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseAttributes.js +4 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCard.d.ts +2 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCard.js +4 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCoreDetails.d.ts +2 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCoreDetails.js +4 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.d.ts +5 -4
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.js +6 -4
- package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.d.ts +2 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.js +4 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/DataGridDetails.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/DataGridDetails.js +4 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.js +2 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureWash.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureWash.js +4 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.js +4 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldName.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldName.js +4 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Formatter.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Formatter.js +4 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.js +4 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +4 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/UriField.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/UriField.js +4 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceBody.d.ts +3 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceBody.js +4 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.d.ts +3 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.js +15 -24
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeaturePanel.js +1 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceLegend.d.ts +3 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceLegend.js +4 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequencePanel.js +4 -4
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/FeatureSequenceDialog.d.ts +3 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/FeatureSequenceDialog.js +2 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/HelpDialog.d.ts +3 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/HelpDialog.js +4 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceDialog.d.ts +1 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceDialog.js +2 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceTypeSelector.d.ts +1 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceTypeSelector.js +15 -36
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.d.ts +3 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.js +4 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/featureTypeUtil.d.ts +4 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/featureTypeUtil.js +29 -20
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.d.ts +13 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.js +28 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/CDNASequence.js +3 -3
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/SequenceDisplay.js +2 -2
- package/esm/BaseFeatureWidget/stateModelFactory.d.ts +9 -0
- package/esm/BaseFeatureWidget/stateModelFactory.js +11 -0
- package/esm/BaseFeatureWidget/types.d.ts +2 -0
- package/esm/PluginManager.d.ts +7 -3
- package/esm/PluginManager.js +12 -3
- package/esm/ReExports/coreModules.generated.js +538 -518
- package/esm/ReExports/coreWorkerModules.generated.js +456 -438
- package/esm/ReExports/lazify.js +3 -2
- package/esm/ReExports/list.js +22 -6
- package/esm/ReExports/names.d.ts +1 -0
- package/esm/ReExports/names.generated.d.ts +2 -0
- package/esm/ReExports/names.generated.js +566 -0
- package/esm/ReExports/names.js +3 -0
- package/esm/TextSearch/TextSearchManager.d.ts +3 -3
- package/esm/TextSearch/TextSearchManager.js +6 -13
- package/esm/assemblyManager/assembly.d.ts +9 -0
- package/esm/assemblyManager/assembly.js +13 -0
- package/esm/assemblyManager/assemblyConfigSchema.d.ts +6 -1
- package/esm/assemblyManager/assemblyConfigSchema.js +23 -22
- package/esm/assemblyManager/assemblyManager.d.ts +11 -0
- package/esm/assemblyManager/assemblyManager.js +2 -0
- package/esm/assemblyManager/expandAssemblyConfigShorthand.d.ts +9 -0
- package/esm/assemblyManager/expandAssemblyConfigShorthand.js +23 -0
- package/esm/checkPlugins.js +10 -4
- package/esm/configuration/configurationSchema.d.ts +51 -100
- package/esm/configuration/configurationSchema.js +59 -225
- package/esm/configuration/configurationSchemaUnion.d.ts +2 -1
- package/esm/configuration/configurationSchemaUnion.js +2 -1
- package/esm/configuration/configurationSlot.d.ts +18 -64
- package/esm/configuration/configurationSlot.js +32 -98
- package/esm/configuration/fillLocations.d.ts +4 -2
- package/esm/configuration/fillLocations.js +9 -3
- package/esm/configuration/formatAboutConfigSchema.d.ts +2 -2
- package/esm/configuration/formatAboutConfigSchema.js +2 -2
- package/esm/configuration/formatDetailsConfigSchema.d.ts +2 -2
- package/esm/configuration/formatDetailsConfigSchema.js +7 -5
- package/esm/configuration/getConf.d.ts +7 -36
- package/esm/configuration/getConf.js +20 -41
- package/esm/configuration/index.d.ts +4 -3
- package/esm/configuration/index.js +3 -2
- package/esm/configuration/partitionAdvanced.d.ts +12 -0
- package/esm/configuration/partitionAdvanced.js +42 -0
- package/esm/configuration/plot.d.ts +6 -0
- package/esm/configuration/plot.js +56 -9
- package/esm/configuration/readConfObject.d.ts +15 -17
- package/esm/configuration/readConfObject.js +19 -50
- package/esm/configuration/schemaRegistry.d.ts +0 -2
- package/esm/configuration/schemaTypes.js +5 -1
- package/esm/configuration/slotFacade.js +2 -2
- package/esm/configuration/snapshotPreprocess.d.ts +42 -18
- package/esm/configuration/snapshotPreprocess.js +95 -37
- package/esm/configuration/tabixShorthand.js +1 -3
- package/esm/configuration/types.d.ts +60 -159
- package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +7 -0
- package/esm/data_adapters/BaseAdapter/BaseAdapter.js +7 -0
- package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +0 -22
- package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +0 -55
- package/esm/data_adapters/BaseAdapter/index.d.ts +0 -1
- package/esm/data_adapters/BaseAdapter/index.js +0 -1
- package/esm/data_adapters/BaseAdapter/rowSources.d.ts +2 -2
- package/esm/data_adapters/BaseAdapter/types.d.ts +1 -0
- package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +2 -0
- package/esm/data_adapters/CytobandAdapter/configSchema.js +5 -0
- package/esm/data_adapters/dataAdapterCache.d.ts +25 -13
- package/esm/data_adapters/dataAdapterCache.js +68 -24
- package/esm/data_adapters/getFeatureAdapter.d.ts +9 -0
- package/esm/data_adapters/getFeatureAdapter.js +17 -0
- package/esm/pluggableElementTypes/DisplayType.d.ts +7 -0
- package/esm/pluggableElementTypes/DisplayType.js +7 -0
- package/esm/pluggableElementTypes/RpcMethodType.d.ts +7 -0
- package/esm/pluggableElementTypes/RpcMethodType.js +9 -0
- package/esm/pluggableElementTypes/addMenuItems.d.ts +2 -1
- package/esm/pluggableElementTypes/addMenuItems.js +2 -1
- package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +2 -0
- package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.js +2 -0
- package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +40 -5
- package/esm/pluggableElementTypes/models/BaseDisplayModel.js +57 -9
- package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +5 -7
- package/esm/pluggableElementTypes/models/BaseTrackModel.js +9 -10
- package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +2 -0
- package/esm/pluggableElementTypes/models/BaseViewModel.js +2 -0
- package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +3 -0
- package/esm/pluggableElementTypes/models/InternetAccountModel.js +3 -0
- package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +3 -0
- package/esm/pluggableElementTypes/models/baseConnectionConfig.js +3 -0
- package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +3 -1
- package/esm/pluggableElementTypes/models/baseInternetAccountConfig.js +3 -1
- package/esm/pluggableElementTypes/models/baseTrackConfig.js +12 -1
- package/esm/pluggableElementTypes/models/components/SaveTrackData.js +2 -2
- package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +1 -1
- package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +1 -1
- package/esm/pluginDefinitions.d.ts +7 -0
- package/esm/pluginDefinitions.js +20 -0
- package/esm/rpc/RpcRegistry.d.ts +2 -11
- package/esm/rpc/byteBudget.d.ts +15 -0
- package/esm/rpc/byteBudget.js +23 -0
- package/esm/rpc/configSchema.d.ts +2 -0
- package/esm/rpc/configSchema.js +3 -1
- package/esm/rpc/coreRpcMethods.d.ts +1 -2
- package/esm/rpc/coreRpcMethods.js +1 -2
- package/esm/rpc/explainTransferError.js +3 -3
- package/esm/rpc/methods/CoreGetEncodedLayers.d.ts +2 -2
- package/esm/rpc/methods/CoreGetEncodedLayers.js +7 -5
- package/esm/rpc/methods/CoreLoadTrackCode.d.ts +17 -0
- package/esm/rpc/methods/CoreLoadTrackCode.js +24 -0
- package/esm/rpc/methods/layerFeatures.d.ts +9 -6
- package/esm/rpc/methods/layerFeatures.js +21 -5
- package/esm/ui/ActionLink.d.ts +3 -2
- package/esm/ui/ActionLink.js +4 -2
- package/esm/ui/AddCustomPluginDialog.d.ts +3 -2
- package/esm/ui/AddCustomPluginDialog.js +6 -4
- package/esm/ui/AppLogo.js +43 -3
- package/esm/ui/BaseTooltip.d.ts +3 -2
- package/esm/ui/BaseTooltip.js +4 -2
- package/esm/ui/CascadingMenu.js +14 -12
- package/esm/ui/CascadingMenuButton.d.ts +2 -2
- package/esm/ui/CascadingMenuButton.js +5 -4
- package/esm/ui/CascadingMenuHelpDialog.d.ts +3 -2
- package/esm/ui/CascadingMenuHelpDialog.js +4 -2
- package/esm/ui/CascadingMenuHelpIconButton.d.ts +4 -3
- package/esm/ui/CascadingMenuHelpIconButton.js +9 -5
- package/esm/ui/ColorPicker.d.ts +5 -4
- package/esm/ui/ColorPicker.js +6 -4
- package/esm/ui/ContextMenu.d.ts +1 -1
- package/esm/ui/ContextMenu.js +1 -1
- package/esm/ui/CopyToClipboardButton.d.ts +3 -2
- package/esm/ui/CopyToClipboardButton.js +4 -2
- package/esm/ui/Crosshairs.js +13 -10
- package/esm/ui/DOMPurifySanitizedHTML.d.ts +3 -2
- package/esm/ui/DOMPurifySanitizedHTML.js +4 -2
- package/esm/ui/DataGridFlexContainer.d.ts +3 -2
- package/esm/ui/DataGridFlexContainer.js +4 -2
- package/esm/ui/Dialog.d.ts +1 -1
- package/esm/ui/Dialog.js +5 -4
- package/esm/ui/DropDownMenu.js +2 -2
- package/esm/ui/EditableTypography.d.ts +1 -1
- package/esm/ui/EditableTypography.js +3 -2
- package/esm/ui/ErrorActions.d.ts +3 -2
- package/esm/ui/ErrorActions.js +4 -2
- package/esm/ui/ErrorBanner.d.ts +2 -2
- package/esm/ui/ErrorBanner.js +3 -2
- package/esm/ui/ErrorBar.d.ts +3 -2
- package/esm/ui/ErrorBar.js +4 -2
- package/esm/ui/ErrorMessage.d.ts +3 -2
- package/esm/ui/ErrorMessage.js +4 -2
- package/esm/ui/ErrorMessageStackTraceContents.d.ts +3 -2
- package/esm/ui/ErrorMessageStackTraceContents.js +4 -2
- package/esm/ui/ErrorMessageStackTraceDialog.d.ts +3 -2
- package/esm/ui/ErrorMessageStackTraceDialog.js +4 -2
- package/esm/ui/ErrorOverlay.d.ts +3 -2
- package/esm/ui/ErrorOverlay.js +4 -2
- package/esm/ui/ExportSvgDialog.d.ts +3 -2
- package/esm/ui/ExportSvgDialog.js +4 -2
- package/esm/ui/ExternalLink.d.ts +2 -1
- package/esm/ui/ExternalLink.js +4 -2
- package/esm/ui/FactoryResetDialog.d.ts +3 -2
- package/esm/ui/FactoryResetDialog.js +4 -2
- package/esm/ui/FatalErrorDialog.d.ts +3 -2
- package/esm/ui/FatalErrorDialog.js +6 -4
- package/esm/ui/FileDropZone.d.ts +3 -2
- package/esm/ui/FileDropZone.js +4 -2
- package/esm/ui/FileSelector/LocalFileChooser.js +4 -4
- package/esm/ui/FileSelector/LocationInput.d.ts +3 -2
- package/esm/ui/FileSelector/LocationInput.js +4 -2
- package/esm/ui/FileSelector/SourceTypeSelector.d.ts +3 -2
- package/esm/ui/FileSelector/SourceTypeSelector.js +8 -6
- package/esm/ui/GpuFallbackButton.d.ts +3 -2
- package/esm/ui/GpuFallbackButton.js +4 -2
- package/esm/ui/HoverMenu.d.ts +2 -2
- package/esm/ui/HoverMenu.js +7 -3
- package/esm/ui/HoverTooltip.d.ts +3 -2
- package/esm/ui/HoverTooltip.js +4 -2
- package/esm/ui/Icons.d.ts +5 -5
- package/esm/ui/Icons.js +11 -10
- package/esm/ui/InlineMenuControls.d.ts +2 -2
- package/esm/ui/InlineMenuControls.js +4 -3
- package/esm/ui/JexlFilterRowEditors.d.ts +4 -4
- package/esm/ui/JexlFilterRowEditors.js +9 -8
- package/esm/ui/LabeledCheckbox.d.ts +3 -2
- package/esm/ui/LabeledCheckbox.js +4 -2
- package/esm/ui/LazyBaseTooltip.d.ts +12 -3
- package/esm/ui/LazyBaseTooltip.js +4 -2
- package/esm/ui/LegendSwatchGlyph.js +1 -0
- package/esm/ui/LoadingDots.d.ts +2 -1
- package/esm/ui/LoadingDots.js +4 -2
- package/esm/ui/LoadingEllipses.d.ts +5 -2
- package/esm/ui/LoadingEllipses.js +5 -3
- package/esm/ui/LoadingOverlay.d.ts +3 -2
- package/esm/ui/LoadingOverlay.js +4 -2
- package/esm/ui/LoadingProgress.d.ts +3 -2
- package/esm/ui/LoadingProgress.js +4 -2
- package/esm/ui/Logo.d.ts +2 -2
- package/esm/ui/Logo.js +9 -8
- package/esm/ui/MenuItemChevron.d.ts +2 -2
- package/esm/ui/MenuItemChevron.js +3 -2
- package/esm/ui/MenuItemEndDecoration.d.ts +2 -2
- package/esm/ui/MenuItemEndDecoration.js +3 -2
- package/esm/ui/MenuItemTrailing.d.ts +2 -2
- package/esm/ui/MenuItemTrailing.js +7 -6
- package/esm/ui/MenuTypes.d.ts +21 -1
- package/esm/ui/MenuTypes.js +20 -0
- package/esm/ui/MonospaceTextField.d.ts +3 -2
- package/esm/ui/MonospaceTextField.js +4 -2
- package/esm/ui/NumberTextField.d.ts +2 -2
- package/esm/ui/NumberTextField.js +4 -2
- package/esm/ui/PaletteContext.d.ts +11 -9
- package/esm/ui/PaletteContext.js +33 -18
- package/esm/ui/PluginStoreCard.d.ts +3 -2
- package/esm/ui/PluginStoreCard.js +4 -2
- package/esm/ui/PopoverPicker.d.ts +3 -2
- package/esm/ui/PopoverPicker.js +4 -2
- package/esm/ui/PrerenderedCanvas.d.ts +2 -2
- package/esm/ui/PrerenderedCanvas.js +3 -2
- package/esm/ui/RedErrorMessageBox.d.ts +3 -2
- package/esm/ui/RedErrorMessageBox.js +4 -2
- package/esm/ui/RefNameAutocomplete/EndAdornment.d.ts +3 -2
- package/esm/ui/RefNameAutocomplete/EndAdornment.js +4 -2
- package/esm/ui/RefNameAutocomplete/HelpDialog.d.ts +3 -2
- package/esm/ui/RefNameAutocomplete/HelpDialog.js +4 -2
- package/esm/ui/ReplaceCurrentViewButton.d.ts +3 -2
- package/esm/ui/ReplaceCurrentViewButton.js +4 -2
- package/esm/ui/ResizeHandle.d.ts +2 -2
- package/esm/ui/ResizeHandle.js +3 -2
- package/esm/ui/SanitizedHTML.d.ts +3 -2
- package/esm/ui/SanitizedHTML.js +6 -4
- package/esm/ui/ScrollChrome.d.ts +3 -2
- package/esm/ui/ScrollChrome.js +4 -2
- package/esm/ui/ScrollEdgeShadow.d.ts +2 -2
- package/esm/ui/ScrollEdgeShadow.js +2 -2
- package/esm/ui/SessionJsonPanel.d.ts +3 -2
- package/esm/ui/SessionJsonPanel.js +4 -2
- package/esm/ui/ShareLinkField.d.ts +3 -2
- package/esm/ui/ShareLinkField.js +4 -2
- package/esm/ui/SingleSlider.d.ts +2 -2
- package/esm/ui/SingleSlider.js +4 -2
- package/esm/ui/SliderTooltip.d.ts +2 -1
- package/esm/ui/SliderTooltip.js +4 -2
- package/esm/ui/SnackbarContents.d.ts +3 -2
- package/esm/ui/SnackbarContents.js +4 -2
- package/esm/ui/SnackbarModel.d.ts +2 -0
- package/esm/ui/SnackbarModel.js +2 -0
- package/esm/ui/StackTraceButton.d.ts +3 -2
- package/esm/ui/StackTraceButton.js +4 -2
- package/esm/ui/StatusProgressBar.d.ts +3 -2
- package/esm/ui/StatusProgressBar.js +4 -2
- package/esm/ui/SubmitForm.d.ts +2 -1
- package/esm/ui/SubmitForm.js +4 -2
- package/esm/ui/SvgColorLegend.d.ts +3 -4
- package/esm/ui/SvgColorLegend.js +27 -18
- package/esm/ui/TagTextField.d.ts +2 -2
- package/esm/ui/TagTextField.js +4 -2
- package/esm/ui/ViewLoadingScreen.d.ts +3 -2
- package/esm/ui/ViewLoadingScreen.js +4 -2
- package/esm/ui/buildExtraTrackMenuItems.d.ts +2 -2
- package/esm/ui/colorScale.d.ts +5 -1
- package/esm/ui/colorScale.js +12 -10
- package/esm/ui/colors.d.ts +42 -31
- package/esm/ui/colors.js +85 -48
- package/esm/ui/filterMenuItems.d.ts +10 -31
- package/esm/ui/filterMenuItems.js +13 -14
- package/esm/ui/index.d.ts +1 -1
- package/esm/ui/index.js +1 -1
- package/esm/ui/launchTargetsMenuItem.js +9 -13
- package/esm/ui/legendMenuItem.d.ts +4 -4
- package/esm/ui/legendMenuItem.js +4 -4
- package/esm/ui/menuItemAdornment.d.ts +1 -1
- package/esm/ui/menuItemAdornment.js +1 -1
- package/esm/ui/menuItems.d.ts +1 -1
- package/esm/ui/menuItems.js +1 -1
- package/esm/ui/menuLabels.d.ts +2 -2
- package/esm/ui/menuLabels.js +2 -2
- package/esm/ui/multiTrackMenuItems.d.ts +2 -2
- package/esm/ui/palette.d.ts +2 -2
- package/esm/ui/palette.js +10 -10
- package/esm/ui/radioSubMenu.d.ts +5 -3
- package/esm/ui/radioSubMenu.js +2 -2
- package/esm/ui/rampKey.d.ts +15 -0
- package/esm/ui/rampKey.js +17 -0
- package/esm/ui/showSubMenu.d.ts +0 -5
- package/esm/ui/showSubMenu.js +6 -15
- package/esm/ui/theme.d.ts +2 -2
- package/esm/ui/theme.js +1 -1
- package/esm/ui/useAssemblySelection.d.ts +2 -0
- package/esm/ui/useMouseTracking.d.ts +8 -20
- package/esm/ui/useMouseTracking.js +23 -62
- package/esm/ui/usePlacedMenuFocus.d.ts +19 -0
- package/esm/ui/usePlacedMenuFocus.js +28 -0
- package/esm/util/Base1DViewModel.d.ts +5 -3
- package/esm/util/Base1DViewModel.js +5 -3
- package/esm/util/SvgCanvas.js +1 -1
- package/esm/util/aggregateFieldName.d.ts +1 -10
- package/esm/util/aggregateFieldName.js +1 -8
- package/esm/util/alignedBytes.d.ts +19 -0
- package/esm/util/alignedBytes.js +37 -0
- package/esm/util/analytics.d.ts +6 -9
- package/esm/util/analytics.js +148 -15
- package/esm/util/bezierConnector.d.ts +20 -0
- package/esm/util/bezierConnector.js +34 -96
- package/esm/util/cacheBudgets.d.ts +3 -0
- package/esm/util/cacheBudgets.js +3 -0
- package/esm/util/categoricalField.d.ts +24 -4
- package/esm/util/categoricalField.js +38 -5
- package/esm/util/cellMatches.js +14 -14
- package/esm/util/cellsStep.d.ts +3 -5
- package/esm/util/cellsStep.js +31 -29
- package/esm/util/color/index.d.ts +1 -1
- package/esm/util/color/index.js +2 -2
- package/esm/util/color-bits/bit.js +1 -1
- package/esm/util/color-bits/parse.js +28 -17
- package/esm/util/colorBits.d.ts +15 -4
- package/esm/util/colorBits.js +38 -15
- package/esm/util/colorRamp.d.ts +3 -3
- package/esm/util/colorRamp.js +20 -2
- package/esm/util/colorScale.d.ts +123 -22
- package/esm/util/colorScale.js +157 -28
- package/esm/util/colorSchemes.d.ts +7 -3
- package/esm/util/colorSchemes.js +8 -2
- package/esm/util/createSvgRasterCanvas.d.ts +14 -1
- package/esm/util/createSvgRasterCanvas.js +36 -12
- package/esm/util/diagonalizeRegions.js +18 -9
- package/esm/util/featureTransforms.d.ts +2 -2
- package/esm/util/featureTransforms.js +85 -135
- package/esm/util/fileHandleStore.js +5 -0
- package/esm/util/groupKeys.d.ts +5 -4
- package/esm/util/groupKeys.js +15 -9
- package/esm/util/index.js +1 -1
- package/esm/util/installFetch.d.ts +2 -2
- package/esm/util/installPrerequisiteFetch.d.ts +8 -3
- package/esm/util/installPrerequisiteFetch.js +9 -7
- package/esm/util/io/RemoteFileWithRangeCache.d.ts +1 -1
- package/esm/util/io/RemoteFileWithRangeCache.js +1 -1
- package/esm/util/isoformRank.d.ts +39 -0
- package/esm/util/isoformRank.js +118 -0
- package/esm/util/jexl.js +1 -1
- package/esm/util/layouts/GranularRectLayout.d.ts +19 -3
- package/esm/util/layouts/GranularRectLayout.js +57 -34
- package/esm/util/leadingEdgeAutorun.d.ts +9 -1
- package/esm/util/leadingEdgeAutorun.js +5 -2
- package/esm/util/markEncoding.d.ts +10 -8
- package/esm/util/markEncoding.js +50 -12
- package/esm/util/markEncodingTypes.d.ts +77 -21
- package/esm/util/originCut.d.ts +14 -0
- package/esm/util/originCut.js +19 -0
- package/esm/util/paintLayer.d.ts +1 -1
- package/esm/util/paintLayer.js +4 -3
- package/esm/util/pathSeries.d.ts +18 -0
- package/esm/util/pathSeries.js +143 -0
- package/esm/util/pressOwner.d.ts +20 -0
- package/esm/util/pressOwner.js +26 -0
- package/esm/util/quantileExtent.d.ts +23 -1
- package/esm/util/quantileExtent.js +25 -2
- package/esm/util/rowStackGeometry.d.ts +1 -1
- package/esm/util/rowStackGeometry.js +1 -1
- package/esm/util/sessionActivity.d.ts +36 -0
- package/esm/util/sessionActivity.js +88 -0
- package/esm/util/stepOutputs.d.ts +165 -0
- package/esm/util/stepOutputs.js +201 -0
- package/esm/util/stepTables.d.ts +7 -3
- package/esm/util/stepTables.js +86 -3
- package/esm/util/systemColorScheme.d.ts +4 -0
- package/esm/util/systemColorScheme.js +21 -0
- package/esm/util/tabix.d.ts +1 -1
- package/esm/util/tabix.js +1 -1
- package/esm/util/temporaryAssembly.d.ts +2 -2
- package/esm/util/temporaryAssembly.js +2 -3
- package/esm/util/thresholdScale.d.ts +1 -1
- package/esm/util/thresholdScale.js +1 -1
- package/esm/util/trackConfigDelta.d.ts +1 -1
- package/esm/util/tracks.d.ts +25 -15
- package/esm/util/tracks.js +68 -44
- package/esm/util/types/index.d.ts +15 -7
- package/esm/util/types/index.js +21 -2
- package/esm/util/usePanZoom.js +4 -10
- package/esm/util/useRowVirtualScroll.d.ts +1 -0
- package/esm/util/windowStep.d.ts +6 -0
- package/esm/util/windowStep.js +153 -0
- package/package.json +27 -16
- package/esm/data_adapters/BaseAdapter/featureDensity.d.ts +0 -40
- package/esm/data_adapters/BaseAdapter/featureDensity.js +0 -31
- package/esm/rpc/methods/CoreGetFeatureDensity.d.ts +0 -11
- package/esm/rpc/methods/CoreGetFeatureDensity.js +0 -22
- package/esm/rpc/methods/CoreLoadAdapterCode.d.ts +0 -13
- package/esm/rpc/methods/CoreLoadAdapterCode.js +0 -16
package/esm/util/cellsStep.js
CHANGED
|
@@ -1,38 +1,16 @@
|
|
|
1
1
|
// The `cells` step: each row's runs against the reference it was fanned out
|
|
2
2
|
// of, and the texts its walk reads, which the fused identity kernel in
|
|
3
3
|
// cellMatches.ts walks too. Imported by relative path only.
|
|
4
|
+
import { DASH, SPACE, firstDrawn, isGapByte, isUnknownBase, lastDrawn, sameBase, } from './alignedBytes.js';
|
|
4
5
|
import { DerivedTable, numberReaderOf, readerOf, valueAt, } from './featureTable.js';
|
|
5
6
|
import { FannedTable, boundsThrough } from './stepTables.js';
|
|
6
7
|
export const DEFAULT_CELLS_FIELD = 'seq';
|
|
7
|
-
export const DASH = 45;
|
|
8
|
-
export const SPACE = 32;
|
|
9
|
-
const LOWER_BIT = 0x20;
|
|
10
8
|
const CELL_STATES = ['match', 'mismatch', 'gap', 'insertion'];
|
|
11
9
|
export const MATCH = 0;
|
|
12
10
|
export const MISMATCH = 1;
|
|
13
11
|
const GAP = 2;
|
|
14
12
|
const INSERTION = 3;
|
|
15
13
|
export const NO_STATE = 255;
|
|
16
|
-
export function isGapByte(b) {
|
|
17
|
-
return b === DASH || b === SPACE;
|
|
18
|
-
}
|
|
19
|
-
// The columns carrying the row's own sequence: a gap run reaching either end
|
|
20
|
-
// of the row measures where the block was cut, not the alignment, so it is no
|
|
21
|
-
// cell either.
|
|
22
|
-
export function firstDrawn(bytes, at, len) {
|
|
23
|
-
let first = 0;
|
|
24
|
-
while (first < len && isGapByte(bytes[at + first])) {
|
|
25
|
-
first++;
|
|
26
|
-
}
|
|
27
|
-
return first;
|
|
28
|
-
}
|
|
29
|
-
export function lastDrawn(bytes, at, len, first) {
|
|
30
|
-
let last = len - 1;
|
|
31
|
-
while (last > first && isGapByte(bytes[at + last])) {
|
|
32
|
-
last--;
|
|
33
|
-
}
|
|
34
|
-
return last;
|
|
35
|
-
}
|
|
36
14
|
// A reference base's cell: no state outside the drawn columns, else the row's
|
|
37
15
|
// gap, or its base matched or not regardless of case.
|
|
38
16
|
export function cellState(refByte, rowByte, drawn) {
|
|
@@ -40,10 +18,25 @@ export function cellState(refByte, rowByte, drawn) {
|
|
|
40
18
|
? NO_STATE
|
|
41
19
|
: isGapByte(rowByte)
|
|
42
20
|
? GAP
|
|
43
|
-
: (refByte
|
|
21
|
+
: sameBase(refByte, rowByte)
|
|
44
22
|
? MATCH
|
|
45
23
|
: MISMATCH;
|
|
46
24
|
}
|
|
25
|
+
// Whether a cell counts toward identity: matched or not against a known
|
|
26
|
+
// reference base.
|
|
27
|
+
export function comparesBase(state, refByte) {
|
|
28
|
+
return state <= MISMATCH && !isUnknownBase(refByte);
|
|
29
|
+
}
|
|
30
|
+
// What the cells of one run share besides their state: whether they are
|
|
31
|
+
// compared, so a run's `match` is one value.
|
|
32
|
+
export function runKey(state, refByte) {
|
|
33
|
+
return state <= MISMATCH && isUnknownBase(refByte) ? 1 : 0;
|
|
34
|
+
}
|
|
35
|
+
// A mismatch always starts a run of its own, so each differing base is one
|
|
36
|
+
// instance and a text over `base` letters every one.
|
|
37
|
+
export function opensRun(state, key, runState, openKey) {
|
|
38
|
+
return state !== runState || key !== openKey || state === MISMATCH;
|
|
39
|
+
}
|
|
47
40
|
// The row a cell step reads against: past any table that only reordered or
|
|
48
41
|
// annotated the rows, the one they were fanned out of.
|
|
49
42
|
function containerOf(table) {
|
|
@@ -218,7 +211,11 @@ class CellTable extends DerivedTable {
|
|
|
218
211
|
const values = new Float32Array(this.length);
|
|
219
212
|
for (let i = 0; i < this.length; i++) {
|
|
220
213
|
const s = this.state[i];
|
|
221
|
-
values[i] = s
|
|
214
|
+
values[i] = comparesBase(s, this.refByte(i))
|
|
215
|
+
? s === MATCH
|
|
216
|
+
? 1
|
|
217
|
+
: 0
|
|
218
|
+
: Number.NaN;
|
|
222
219
|
}
|
|
223
220
|
return { kind: 'number', values, at: undefined, nanIsAbsent: true };
|
|
224
221
|
});
|
|
@@ -254,6 +251,11 @@ class CellTable extends DerivedTable {
|
|
|
254
251
|
}
|
|
255
252
|
}
|
|
256
253
|
}
|
|
254
|
+
refByte(i) {
|
|
255
|
+
const { reference: ref } = this.texts;
|
|
256
|
+
const f = this.texts.refOf(this.parentOf(i));
|
|
257
|
+
return ref.bytes[ref.offset[f] + this.textAt[i]];
|
|
258
|
+
}
|
|
257
259
|
mismatched(i) {
|
|
258
260
|
const { bytes, offset } = this.texts.row;
|
|
259
261
|
const k = this.texts.rowOf(this.parentOf(i));
|
|
@@ -342,7 +344,7 @@ class RunLanes {
|
|
|
342
344
|
const last = lastDrawn(rowBytes, rowAt, rowLen, first);
|
|
343
345
|
let runStart = -1;
|
|
344
346
|
let runState = NO_STATE;
|
|
345
|
-
let
|
|
347
|
+
let openKey = -1;
|
|
346
348
|
let runCol = 0;
|
|
347
349
|
let insertAt = -1;
|
|
348
350
|
for (let col = 0; col < refLen; col++) {
|
|
@@ -364,8 +366,8 @@ class RunLanes {
|
|
|
364
366
|
insertAt = -1;
|
|
365
367
|
}
|
|
366
368
|
const st = cellState(refByte, rowByte, col >= first && col <= last && col < rowLen);
|
|
367
|
-
const
|
|
368
|
-
if (st
|
|
369
|
+
const key = runKey(st, refByte);
|
|
370
|
+
if (opensRun(st, key, runState, openKey)) {
|
|
369
371
|
if (runStart >= 0) {
|
|
370
372
|
start[n] = runStart;
|
|
371
373
|
end[n] = pos;
|
|
@@ -376,7 +378,7 @@ class RunLanes {
|
|
|
376
378
|
}
|
|
377
379
|
runStart = st === NO_STATE ? -1 : pos;
|
|
378
380
|
runState = st;
|
|
379
|
-
|
|
381
|
+
openKey = key;
|
|
380
382
|
runCol = col;
|
|
381
383
|
}
|
|
382
384
|
pos++;
|
|
@@ -78,7 +78,7 @@ export declare function relight(color: string, lightnessShift: number, chromaSca
|
|
|
78
78
|
* once per feature, and what a reader saw was every unlabelled feature in one
|
|
79
79
|
* strong color: a large fake category, drawn over the real ones. Grey says the
|
|
80
80
|
* only true thing about a feature with no value for the attribute you asked to
|
|
81
|
-
*
|
|
81
|
+
* color by.
|
|
82
82
|
*
|
|
83
83
|
* @param str - The string to generate a color from
|
|
84
84
|
* @returns A CSS hex color string
|
package/esm/util/color/index.js
CHANGED
|
@@ -82,7 +82,7 @@ export { CSS_COLOR_NAMES, isNamedColor, namedColorToHex, } from './cssColorsLeve
|
|
|
82
82
|
// has to read as "not in a category" beside a palette whose every member is
|
|
83
83
|
// equally light and equally colorful, so it cannot be one more hue.
|
|
84
84
|
export const NO_CATEGORY_COLOR = '#afafaf';
|
|
85
|
-
// What a
|
|
85
|
+
// What a color declaration paints where it reads nothing it can color, so a
|
|
86
86
|
// misconfiguration surfaces rather than passing for the no-category grey.
|
|
87
87
|
export const MISCONFIGURED_COLOR = '#808080';
|
|
88
88
|
const RANDOM_COLOR_TIERS = [
|
|
@@ -185,7 +185,7 @@ export function relight(color, lightnessShift, chromaScale = 1) {
|
|
|
185
185
|
* once per feature, and what a reader saw was every unlabelled feature in one
|
|
186
186
|
* strong color: a large fake category, drawn over the real ones. Grey says the
|
|
187
187
|
* only true thing about a feature with no value for the attribute you asked to
|
|
188
|
-
*
|
|
188
|
+
* color by.
|
|
189
189
|
*
|
|
190
190
|
* @param str - The string to generate a color from
|
|
191
191
|
* @returns A CSS hex color string
|
|
@@ -32,6 +32,6 @@ export function clampByte(n) {
|
|
|
32
32
|
// against NaN is false, and an unclamped NaN shifts to 0 anyway — silently,
|
|
33
33
|
// one channel at a time. `jexl:alpha(color, get(feature,'opacity'))` on a
|
|
34
34
|
// non-numeric attribute is the reachable one, and it drew the feature at
|
|
35
|
-
// alpha 0 instead of reaching the invalid-
|
|
35
|
+
// alpha 0 instead of reaching the invalid-color sentinel.
|
|
36
36
|
return n > 0 ? (n > 255 ? 255 : n) : 0;
|
|
37
37
|
}
|
|
@@ -9,15 +9,15 @@ const E = 'e'.charCodeAt(0);
|
|
|
9
9
|
/**
|
|
10
10
|
* Approximative CSS colorspace string pattern, e.g. rgb(), color()
|
|
11
11
|
*
|
|
12
|
-
* **Anchored**, because the whole string has to be a
|
|
13
|
-
* Unanchored it matched a
|
|
12
|
+
* **Anchored**, because the whole string has to be a color for this to be one.
|
|
13
|
+
* Unanchored it matched a color sitting anywhere inside anything, so
|
|
14
14
|
* `parseCssColor('foo rgb(1,2,3) bar')` answered `[1,2,3]` — and a config slot
|
|
15
|
-
* holding prose, a jexl expression that did not evaluate, or two
|
|
16
|
-
* mistake read as a plausible
|
|
15
|
+
* holding prose, a jexl expression that did not evaluate, or two colors by
|
|
16
|
+
* mistake read as a plausible color instead of reaching the invalid-color
|
|
17
17
|
* sentinel. That sentinel is a contract (`colorBits.test.ts`: a broken config
|
|
18
|
-
* reads as magenta, never as a plausible wrong
|
|
18
|
+
* reads as magenta, never as a plausible wrong color), and it was unreachable
|
|
19
19
|
* for every such string. Surrounding whitespace is still tolerated: a slot with
|
|
20
|
-
* a trailing space is a formatting slip, not a different
|
|
20
|
+
* a trailing space is a formatting slip, not a different color.
|
|
21
21
|
*/
|
|
22
22
|
const PATTERN = (() => {
|
|
23
23
|
const NAME = String.raw `(\w+)`;
|
|
@@ -239,16 +239,27 @@ export function parseColor(color) {
|
|
|
239
239
|
}
|
|
240
240
|
throw new Error(`Color.parse(): invalid CSS color: "${color}"`);
|
|
241
241
|
}
|
|
242
|
+
/** A channel's leading number, throwing where it has none, as `rgb(a,b,1)`. */
|
|
243
|
+
function parseNumber(value) {
|
|
244
|
+
const n = Number.parseFloat(value);
|
|
245
|
+
if (Number.isNaN(n)) {
|
|
246
|
+
throw new TypeError(`Color.parse(): invalid CSS color channel: "${value}"`);
|
|
247
|
+
}
|
|
248
|
+
return n;
|
|
249
|
+
}
|
|
242
250
|
/**
|
|
243
|
-
* Accepts: "50%", "128"
|
|
251
|
+
* Accepts: "50%", "128", "none"
|
|
244
252
|
* https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/rgb#values
|
|
245
253
|
* @returns a value in the 0 to 255 range
|
|
246
254
|
*/
|
|
247
255
|
function parseColorChannel(channel) {
|
|
256
|
+
if (channel === 'none') {
|
|
257
|
+
return 0;
|
|
258
|
+
}
|
|
248
259
|
if (channel.charCodeAt(channel.length - 1) === PERCENT) {
|
|
249
|
-
return Math.round((
|
|
260
|
+
return Math.round((parseNumber(channel) / 100) * 255);
|
|
250
261
|
}
|
|
251
|
-
return Math.round(
|
|
262
|
+
return Math.round(parseNumber(channel));
|
|
252
263
|
}
|
|
253
264
|
/**
|
|
254
265
|
* Accepts: "50%", ".5", "0.5"
|
|
@@ -268,9 +279,9 @@ function parseAlphaValue(channel) {
|
|
|
268
279
|
return 0;
|
|
269
280
|
}
|
|
270
281
|
if (channel.charCodeAt(channel.length - 1) === PERCENT) {
|
|
271
|
-
return
|
|
282
|
+
return parseNumber(channel) / 100;
|
|
272
283
|
}
|
|
273
|
-
return
|
|
284
|
+
return parseNumber(channel);
|
|
274
285
|
}
|
|
275
286
|
/**
|
|
276
287
|
* Accepts: "360", "360deg", "400grad", "6.28rad", "1turn", "none"
|
|
@@ -302,7 +313,7 @@ function parseAngle(angle) {
|
|
|
302
313
|
factor = 360;
|
|
303
314
|
}
|
|
304
315
|
}
|
|
305
|
-
const turns =
|
|
316
|
+
const turns = parseNumber(angle) / factor;
|
|
306
317
|
// Hue is periodic, and every caller of this is a hue. `hueToRGB` corrects its
|
|
307
318
|
// argument by at most one turn, so it reads `hsl(-720deg)` as a hue two turns
|
|
308
319
|
// below the wheel rather than as red — folding here is what makes the three
|
|
@@ -317,7 +328,7 @@ function parsePercentage(value) {
|
|
|
317
328
|
if (value.charCodeAt(0) === N) {
|
|
318
329
|
return 0;
|
|
319
330
|
}
|
|
320
|
-
return
|
|
331
|
+
return parseNumber(value) / 100;
|
|
321
332
|
}
|
|
322
333
|
/**
|
|
323
334
|
* Accepts: "1.0", "100%", "none"
|
|
@@ -328,9 +339,9 @@ function parsePercentageOrValue(value) {
|
|
|
328
339
|
return 0;
|
|
329
340
|
}
|
|
330
341
|
if (value.charCodeAt(value.length - 1) === PERCENT) {
|
|
331
|
-
return
|
|
342
|
+
return parseNumber(value) / 100;
|
|
332
343
|
}
|
|
333
|
-
return
|
|
344
|
+
return parseNumber(value);
|
|
334
345
|
}
|
|
335
346
|
/**
|
|
336
347
|
* Accepts: "100", "100%", "none"
|
|
@@ -341,9 +352,9 @@ function parsePercentageFor(value, range) {
|
|
|
341
352
|
return 0;
|
|
342
353
|
}
|
|
343
354
|
if (value.charCodeAt(value.length - 1) === PERCENT) {
|
|
344
|
-
return (
|
|
355
|
+
return (parseNumber(value) / 100) * range;
|
|
345
356
|
}
|
|
346
|
-
return
|
|
357
|
+
return parseNumber(value);
|
|
347
358
|
}
|
|
348
359
|
// HSL functions
|
|
349
360
|
function hueToRGB(p, q, t) {
|
package/esm/util/colorBits.d.ts
CHANGED
|
@@ -13,12 +13,13 @@ export type { Color } from './color-bits/index.ts';
|
|
|
13
13
|
* rendering as the magenta invalid-color sentinel. Takes the raw value so it
|
|
14
14
|
* stays dependency-free and directly testable.
|
|
15
15
|
*/
|
|
16
|
-
export declare function featureItemRgb(raw: unknown): string | undefined;
|
|
16
|
+
export declare function featureItemRgb(raw: unknown, itemRgbOn?: boolean): string | undefined;
|
|
17
17
|
/**
|
|
18
|
-
* The BED color a feature declares for itself, under
|
|
19
|
-
* undefined if it declares none.
|
|
18
|
+
* The BED color a feature declares for itself, under any column name, or
|
|
19
|
+
* undefined if it declares none. `itemRgbOn` reads "0,0,0" as black and a
|
|
20
|
+
* packed integer as UCSC does.
|
|
20
21
|
*/
|
|
21
|
-
export declare function featureBedColor(feature: Feature): string | undefined;
|
|
22
|
+
export declare function featureBedColor(feature: Feature, itemRgbOn?: boolean): string | undefined;
|
|
22
23
|
export declare function parseCssColor(color: string | undefined | null): number;
|
|
23
24
|
export declare function cssColorToNormalizedRgb(color: string): [number, number, number];
|
|
24
25
|
export declare function cssColorToRgb(color: string): [number, number, number];
|
|
@@ -36,4 +37,14 @@ export declare function abgrRed(c: number): number;
|
|
|
36
37
|
export declare function abgrGreen(c: number): number;
|
|
37
38
|
export declare function abgrBlue(c: number): number;
|
|
38
39
|
export declare function abgrAlpha(c: number): number;
|
|
40
|
+
/** An ABGR-packed color as lowercase `#rrggbb`, its alpha dropped. */
|
|
41
|
+
export declare function abgrToHex(c: number): string;
|
|
42
|
+
/** Any CSS color as lowercase `#rrggbb`, its alpha dropped. */
|
|
43
|
+
export declare function cssColorToHex(color: string): string;
|
|
44
|
+
/** A 0..1 normalized RGB triple as lowercase `#rrggbb`. */
|
|
45
|
+
export declare function normalizedRgbToHex([r, g, b]: readonly [
|
|
46
|
+
number,
|
|
47
|
+
number,
|
|
48
|
+
number
|
|
49
|
+
]): string;
|
|
39
50
|
export declare function cssColorToNormalizedRgba(color: string): [number, number, number, number];
|
package/esm/util/colorBits.js
CHANGED
|
@@ -10,13 +10,18 @@ export { alpha, blend, darken, formatHEX, formatHEXA, formatRGBA, getAlpha, getB
|
|
|
10
10
|
// Returning magenta makes the bad slot visually obvious without breaking the
|
|
11
11
|
// rest of the render.
|
|
12
12
|
const INVALID_COLOR = newColor(255, 0, 255, 255);
|
|
13
|
-
//
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
// Plain BED12 files fill itemRgb with "0,0,0" rather than omitting it (every
|
|
14
|
+
// itemRgb in the volvox-bed12 fixture is one), and UCSC ignores the column
|
|
15
|
+
// unless trackDb says `itemRgb on`. So the triple reads as absent unless the
|
|
16
|
+
// caller passes `itemRgbOn`. Under it, UCSC also reads a comma-free value as a
|
|
17
|
+
// packed 0xRRGGBB integer, and paints 0 its track color, black by default.
|
|
18
|
+
const BED_TRIPLE_UNSET = '0,0,0';
|
|
19
|
+
function packedRgb(raw) {
|
|
20
|
+
const n = typeof raw === 'string' && /^\d+$/.test(raw.trim()) ? Number(raw) : raw;
|
|
21
|
+
return typeof n === 'number' && Number.isInteger(n) && n >= 0 && n <= 0xffffff
|
|
22
|
+
? `${n >> 16},${(n >> 8) & 255},${n & 255}`
|
|
23
|
+
: undefined;
|
|
24
|
+
}
|
|
20
25
|
/**
|
|
21
26
|
* One raw attribute value as a usable BED color, or undefined when it isn't
|
|
22
27
|
* one. Deliberately strict: this feeds an *automatic* coloring path, so a value
|
|
@@ -26,11 +31,13 @@ const BED_TRIPLE_UNSET = /^0(,0,0)?$/;
|
|
|
26
31
|
* rendering as the magenta invalid-color sentinel. Takes the raw value so it
|
|
27
32
|
* stays dependency-free and directly testable.
|
|
28
33
|
*/
|
|
29
|
-
export function featureItemRgb(raw) {
|
|
34
|
+
export function featureItemRgb(raw, itemRgbOn = false) {
|
|
30
35
|
const triple = typeof raw === 'string' ? bedTriple(raw) : undefined;
|
|
31
|
-
return
|
|
32
|
-
? triple
|
|
33
|
-
:
|
|
36
|
+
return itemRgbOn
|
|
37
|
+
? (triple ?? packedRgb(raw))
|
|
38
|
+
: triple !== BED_TRIPLE_UNSET
|
|
39
|
+
? triple
|
|
40
|
+
: undefined;
|
|
34
41
|
}
|
|
35
42
|
// The names the BED color column goes by, most specific first.
|
|
36
43
|
//
|
|
@@ -51,13 +58,14 @@ export function featureItemRgb(raw) {
|
|
|
51
58
|
// write) keeps working, and can now just be deleted.
|
|
52
59
|
const BED_COLOR_FIELDS = ['itemRgb', 'reserved', 'field8'];
|
|
53
60
|
/**
|
|
54
|
-
* The BED color a feature declares for itself, under
|
|
55
|
-
* undefined if it declares none.
|
|
61
|
+
* The BED color a feature declares for itself, under any column name, or
|
|
62
|
+
* undefined if it declares none. `itemRgbOn` reads "0,0,0" as black and a
|
|
63
|
+
* packed integer as UCSC does.
|
|
56
64
|
*/
|
|
57
|
-
export function featureBedColor(feature) {
|
|
65
|
+
export function featureBedColor(feature, itemRgbOn = false) {
|
|
58
66
|
let found;
|
|
59
67
|
for (const field of BED_COLOR_FIELDS) {
|
|
60
|
-
found ??= featureItemRgb(feature.get(field));
|
|
68
|
+
found ??= featureItemRgb(feature.get(field), itemRgbOn);
|
|
61
69
|
}
|
|
62
70
|
return found;
|
|
63
71
|
}
|
|
@@ -144,6 +152,21 @@ export function abgrBlue(c) {
|
|
|
144
152
|
export function abgrAlpha(c) {
|
|
145
153
|
return (c >>> 24) & 0xff;
|
|
146
154
|
}
|
|
155
|
+
function hexByte(n) {
|
|
156
|
+
return n.toString(16).padStart(2, '0');
|
|
157
|
+
}
|
|
158
|
+
/** An ABGR-packed color as lowercase `#rrggbb`, its alpha dropped. */
|
|
159
|
+
export function abgrToHex(c) {
|
|
160
|
+
return `#${hexByte(abgrRed(c))}${hexByte(abgrGreen(c))}${hexByte(abgrBlue(c))}`;
|
|
161
|
+
}
|
|
162
|
+
/** Any CSS color as lowercase `#rrggbb`, its alpha dropped. */
|
|
163
|
+
export function cssColorToHex(color) {
|
|
164
|
+
return abgrToHex(cssColorToABGR(color));
|
|
165
|
+
}
|
|
166
|
+
/** A 0..1 normalized RGB triple as lowercase `#rrggbb`. */
|
|
167
|
+
export function normalizedRgbToHex([r, g, b]) {
|
|
168
|
+
return abgrToHex(normalizedRgbToABGR(r, g, b));
|
|
169
|
+
}
|
|
147
170
|
export function cssColorToNormalizedRgba(color) {
|
|
148
171
|
const c = parseCssColor(color);
|
|
149
172
|
return [
|
package/esm/util/colorRamp.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export declare const VIRIDIS_STOPS: readonly ColorRampStop[];
|
|
|
17
17
|
export declare function darkAtLowEnd(scheme: ColorSchemeName): boolean;
|
|
18
18
|
/**
|
|
19
19
|
* #api
|
|
20
|
-
* The domain a continuous
|
|
20
|
+
* The domain a continuous color scale spans: each end `min` or `max` pins,
|
|
21
21
|
* else the extent's, ascending, since a span has no direction and `reverse`
|
|
22
22
|
* is the ramp's. An open end stops at a pinned one rather than crossing it,
|
|
23
23
|
* and an extent holding no value (`[Infinity, -Infinity]`) spans [0, 1].
|
|
@@ -25,7 +25,7 @@ export declare function darkAtLowEnd(scheme: ColorSchemeName): boolean;
|
|
|
25
25
|
export declare function rampDomain(min: number | undefined, max: number | undefined, extent: readonly [number, number]): [number, number];
|
|
26
26
|
/**
|
|
27
27
|
* #api
|
|
28
|
-
* The stops a continuous
|
|
28
|
+
* The stops a continuous color scale samples: `range`'s CSS colors where it
|
|
29
29
|
* lists any, else the named `scheme`, viridis while that is unset, turned
|
|
30
30
|
* round under `reverse`.
|
|
31
31
|
*/
|
|
@@ -53,7 +53,7 @@ export declare function sampleColorRamp(stops: readonly ColorRampStop[], t: numb
|
|
|
53
53
|
export declare function buildColorRampLut(stops: readonly ColorRampStop[]): Uint8Array<ArrayBuffer>;
|
|
54
54
|
/**
|
|
55
55
|
* #api
|
|
56
|
-
* A continuous
|
|
56
|
+
* A continuous color scale's ramp as a config declares it.
|
|
57
57
|
*/
|
|
58
58
|
export interface RampDeclaration {
|
|
59
59
|
range?: readonly string[];
|
package/esm/util/colorRamp.js
CHANGED
|
@@ -90,6 +90,22 @@ const PURPLEORANGE_STOPS = [
|
|
|
90
90
|
[179, 88, 6, 255],
|
|
91
91
|
[127, 59, 8, 255],
|
|
92
92
|
];
|
|
93
|
+
const REDGREYBLUE_STOPS = [
|
|
94
|
+
[199, 67, 56, 255],
|
|
95
|
+
[140, 140, 140, 255],
|
|
96
|
+
[47, 102, 176, 255],
|
|
97
|
+
];
|
|
98
|
+
const BLUEYELLOWRED_STOPS = [
|
|
99
|
+
[69, 117, 180, 255],
|
|
100
|
+
[116, 173, 209, 255],
|
|
101
|
+
[171, 217, 233, 255],
|
|
102
|
+
[224, 243, 248, 255],
|
|
103
|
+
[255, 255, 191, 255],
|
|
104
|
+
[254, 224, 144, 255],
|
|
105
|
+
[253, 174, 97, 255],
|
|
106
|
+
[244, 109, 67, 255],
|
|
107
|
+
[215, 48, 39, 255],
|
|
108
|
+
];
|
|
93
109
|
const SCHEME_STOPS = {
|
|
94
110
|
viridis: VIRIDIS_STOPS,
|
|
95
111
|
juicebox: JUICEBOX_STOPS,
|
|
@@ -101,6 +117,8 @@ const SCHEME_STOPS = {
|
|
|
101
117
|
cividis: stopsFromHex(CIVIDIS_HEX_SPEC),
|
|
102
118
|
redblue: REDBLUE_STOPS,
|
|
103
119
|
purpleorange: PURPLEORANGE_STOPS,
|
|
120
|
+
redgreyblue: REDGREYBLUE_STOPS,
|
|
121
|
+
blueyellowred: BLUEYELLOWRED_STOPS,
|
|
104
122
|
};
|
|
105
123
|
function luminanceOverWhite([r, g, b, a]) {
|
|
106
124
|
const over = (c) => 255 + (c - 255) * (a / 255);
|
|
@@ -118,7 +136,7 @@ export function darkAtLowEnd(scheme) {
|
|
|
118
136
|
const EMPTY_EXTENT_DOMAIN = [0, 1];
|
|
119
137
|
/**
|
|
120
138
|
* #api
|
|
121
|
-
* The domain a continuous
|
|
139
|
+
* The domain a continuous color scale spans: each end `min` or `max` pins,
|
|
122
140
|
* else the extent's, ascending, since a span has no direction and `reverse`
|
|
123
141
|
* is the ramp's. An open end stops at a pinned one rather than crossing it,
|
|
124
142
|
* and an extent holding no value (`[Infinity, -Infinity]`) spans [0, 1].
|
|
@@ -138,7 +156,7 @@ export function rampDomain(min, max, extent) {
|
|
|
138
156
|
}
|
|
139
157
|
/**
|
|
140
158
|
* #api
|
|
141
|
-
* The stops a continuous
|
|
159
|
+
* The stops a continuous color scale samples: `range`'s CSS colors where it
|
|
142
160
|
* lists any, else the named `scheme`, viridis while that is unset, turned
|
|
143
161
|
* round under `reverse`.
|
|
144
162
|
*/
|