@jbrowse/core 5.0.0-beta.1 → 5.0.0-beta.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1709 -390
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +5 -5
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +3 -5
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +34 -29
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCard.js +1 -4
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.d.ts +11 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.js +37 -14
- package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.d.ts +1 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.js +15 -31
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.d.ts +4 -3
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.js +12 -25
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.d.ts +11 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.js +11 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.d.ts +8 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.js +24 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Formatter.js +6 -4
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.d.ts +4 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.js +17 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +5 -3
- package/esm/BaseFeatureWidget/BaseFeatureDetail/index.d.ts +6 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/index.js +7 -18
- package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.d.ts +16 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.js +49 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/util.d.ts +0 -8
- package/esm/BaseFeatureWidget/BaseFeatureDetail/util.js +6 -29
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceContents.js +7 -34
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeaturePanel.d.ts +2 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceName.js +2 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.js +3 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.d.ts +12 -0
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.js +12 -5
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/useSequenceData.js +8 -5
- package/esm/BaseFeatureWidget/configSchema.d.ts +1 -1
- package/esm/BaseFeatureWidget/formatDetails.d.ts +13 -29
- package/esm/BaseFeatureWidget/formatDetails.js +62 -83
- package/esm/BaseFeatureWidget/index.d.ts +2 -1
- package/esm/BaseFeatureWidget/stateModelFactory.d.ts +42 -29
- package/esm/BaseFeatureWidget/stateModelFactory.js +98 -98
- package/esm/BaseFeatureWidget/types.d.ts +12 -6
- package/esm/BaseFeatureWidget/util.d.ts +0 -10
- package/esm/BaseFeatureWidget/util.js +0 -17
- package/esm/CorePlugin.js +34 -3
- package/esm/PluginLoader.d.ts +24 -13
- package/esm/PluginLoader.js +167 -51
- package/esm/PluginManager.d.ts +130 -24
- package/esm/PluginManager.js +180 -32
- package/esm/ReExports/MuiDataGridReExports.d.ts +1 -0
- package/esm/ReExports/MuiDataGridReExports.js +2 -2
- package/esm/ReExports/coreModules.generated.d.ts +2 -0
- package/esm/ReExports/coreModules.generated.js +530 -0
- package/esm/ReExports/coreWorkerModules.generated.d.ts +2 -0
- package/esm/ReExports/coreWorkerModules.generated.js +490 -0
- package/esm/ReExports/frameworkModules.d.ts +2 -0
- package/esm/ReExports/frameworkModules.js +68 -0
- package/esm/ReExports/frameworkShared.d.ts +12 -0
- package/esm/ReExports/frameworkShared.js +16 -0
- package/esm/ReExports/frameworkWorkerModules.generated.d.ts +2 -0
- package/esm/ReExports/frameworkWorkerModules.generated.js +130 -0
- package/esm/ReExports/list.js +528 -79
- package/esm/ReExports/modules.d.ts +1 -1
- package/esm/ReExports/modules.js +10 -165
- package/esm/ReExports/registry.d.ts +1 -0
- package/esm/ReExports/registry.js +23 -5
- package/esm/ReExports/uiStub.d.ts +3 -0
- package/esm/ReExports/uiStub.js +33 -0
- package/esm/ReExports/workerModules.d.ts +2 -0
- package/esm/ReExports/workerModules.js +11 -0
- package/esm/TextSearch/TextSearchManager.d.ts +27 -13
- package/esm/TextSearch/TextSearchManager.js +77 -36
- package/esm/TextSearch/places.d.ts +12 -0
- package/esm/TextSearch/places.js +94 -0
- package/esm/assemblyManager/assembly.d.ts +21 -19
- package/esm/assemblyManager/assembly.js +28 -26
- package/esm/assemblyManager/assemblyAdapters.d.ts +1 -1
- package/esm/assemblyManager/assemblyAdapters.js +8 -2
- package/esm/assemblyManager/assemblyConfigSchema.d.ts +31 -90
- package/esm/assemblyManager/assemblyConfigSchema.js +35 -47
- package/esm/assemblyManager/assemblyManager.d.ts +35 -180
- package/esm/assemblyManager/assemblyManager.js +47 -51
- package/esm/assemblyManager/expandAssemblyConfigShorthand.d.ts +25 -18
- package/esm/assemblyManager/expandAssemblyConfigShorthand.js +78 -49
- package/esm/assemblyManager/geneticCodes.js +2 -5
- package/esm/assemblyManager/getSequenceAdapterConfig.d.ts +10 -0
- package/esm/assemblyManager/getSequenceAdapterConfig.js +10 -0
- package/esm/assemblyManager/indexAssemblyNames.d.ts +9 -0
- package/esm/assemblyManager/indexAssemblyNames.js +22 -0
- package/esm/assemblyManager/loadRefNameMap.d.ts +1 -1
- package/esm/assemblyManager/loadRefNameMap.js +4 -9
- package/esm/assemblyManager/refNameMapKey.d.ts +7 -0
- package/esm/assemblyManager/refNameMapKey.js +12 -0
- package/esm/checkPlugins.d.ts +2 -0
- package/esm/checkPlugins.js +38 -17
- package/esm/configuration/bamIndexFields.d.ts +49 -0
- package/esm/configuration/bamIndexFields.js +41 -0
- package/esm/configuration/configurationSchema.d.ts +101 -71
- package/esm/configuration/configurationSchema.js +207 -134
- package/esm/configuration/configurationSchemaUnion.d.ts +39 -0
- package/esm/configuration/configurationSchemaUnion.js +56 -0
- package/esm/configuration/configurationSlot.d.ts +150 -60
- package/esm/configuration/configurationSlot.js +103 -75
- package/esm/configuration/fillLocations.d.ts +14 -0
- package/esm/configuration/fillLocations.js +14 -0
- package/esm/configuration/formatAboutConfigSchema.d.ts +7 -21
- package/esm/configuration/formatDetailsConfigSchema.d.ts +11 -37
- package/esm/configuration/formatDetailsConfigSchema.js +10 -13
- package/esm/configuration/fullConfSnapshot.d.ts +4 -19
- package/esm/configuration/fullConfSnapshot.js +30 -52
- package/esm/configuration/getConf.d.ts +45 -41
- package/esm/configuration/getConf.js +111 -44
- package/esm/configuration/index.d.ts +26 -11
- package/esm/configuration/index.js +16 -7
- package/esm/configuration/indexType.d.ts +26 -0
- package/esm/configuration/indexType.js +38 -0
- package/esm/configuration/mergeFormatCallbacks.d.ts +6 -7
- package/esm/configuration/mergeFormatCallbacks.js +13 -10
- package/esm/configuration/plot.d.ts +61 -0
- package/esm/configuration/plot.js +142 -0
- package/esm/configuration/readConfObject.d.ts +2 -24
- package/esm/configuration/readConfObject.js +20 -63
- package/esm/configuration/requirements.d.ts +37 -0
- package/esm/configuration/requirements.js +88 -0
- package/esm/configuration/schemaRegistry.d.ts +32 -15
- package/esm/configuration/schemaRegistry.js +33 -35
- package/esm/configuration/schemaTypes.d.ts +21 -5
- package/esm/configuration/schemaTypes.js +66 -55
- package/esm/configuration/slotFacade.d.ts +12 -29
- package/esm/configuration/slotFacade.js +44 -23
- package/esm/configuration/snapshotPreprocess.d.ts +43 -0
- package/esm/configuration/snapshotPreprocess.js +161 -0
- package/esm/configuration/tabixIndexFields.d.ts +30 -4
- package/esm/configuration/tabixIndexFields.js +21 -4
- package/esm/configuration/tabixShorthand.d.ts +34 -17
- package/esm/configuration/tabixShorthand.js +49 -22
- package/esm/configuration/types.d.ts +182 -43
- package/esm/configuration/uriShorthand.d.ts +9 -0
- package/esm/configuration/uriShorthand.js +16 -0
- package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +13 -19
- package/esm/data_adapters/BaseAdapter/BaseAdapter.js +12 -19
- package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +40 -2
- package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +68 -5
- package/esm/data_adapters/BaseAdapter/featureDensity.d.ts +40 -0
- package/esm/data_adapters/BaseAdapter/featureDensity.js +31 -0
- package/esm/data_adapters/BaseAdapter/index.d.ts +23 -3
- package/esm/data_adapters/BaseAdapter/index.js +1 -0
- package/esm/data_adapters/BaseAdapter/rowSources.d.ts +37 -0
- package/esm/data_adapters/BaseAdapter/rowSources.js +7 -0
- package/esm/data_adapters/BaseAdapter/stats.d.ts +33 -1
- package/esm/data_adapters/BaseAdapter/stats.js +52 -13
- package/esm/data_adapters/BaseAdapter/types.d.ts +8 -12
- package/esm/data_adapters/BaseAdapter/zoomRange.d.ts +10 -0
- package/esm/data_adapters/CytobandAdapter/CytobandAdapter.js +1 -1
- package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +7 -11
- package/esm/data_adapters/CytobandAdapter/configSchema.js +3 -17
- package/esm/data_adapters/dataAdapterCache.d.ts +19 -2
- package/esm/data_adapters/dataAdapterCache.js +44 -10
- package/esm/data_adapters/getFeatureAdapter.d.ts +6 -4
- package/esm/data_adapters/getFeatureAdapter.js +8 -8
- package/esm/data_adapters/getSequenceSubAdapter.d.ts +7 -9
- package/esm/data_adapters/getSequenceSubAdapter.js +8 -10
- package/esm/pluggableElementTypes/AdapterType.d.ts +8 -8
- package/esm/pluggableElementTypes/AdapterType.js +1 -1
- package/esm/pluggableElementTypes/DisplayType.d.ts +53 -16
- package/esm/pluggableElementTypes/DisplayType.js +28 -12
- package/esm/pluggableElementTypes/LazyStateModelElement.d.ts +32 -0
- package/esm/pluggableElementTypes/LazyStateModelElement.js +77 -0
- package/esm/pluggableElementTypes/PluggableElementBase.d.ts +3 -5
- package/esm/pluggableElementTypes/PluggableElementBase.js +3 -5
- package/esm/pluggableElementTypes/RpcMethodType.d.ts +11 -1
- package/esm/pluggableElementTypes/RpcMethodType.js +25 -9
- package/esm/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.d.ts +1 -2
- package/esm/pluggableElementTypes/TextSearchAdapterType.d.ts +7 -7
- package/esm/pluggableElementTypes/ViewType.d.ts +20 -4
- package/esm/pluggableElementTypes/ViewType.js +32 -4
- package/esm/pluggableElementTypes/WidgetType.d.ts +6 -0
- package/esm/pluggableElementTypes/WidgetType.js +6 -0
- package/esm/pluggableElementTypes/addMenuItems.d.ts +3 -2
- package/esm/pluggableElementTypes/extendElementType.d.ts +1 -2
- package/esm/pluggableElementTypes/extendElementType.js +9 -5
- package/esm/pluggableElementTypes/index.d.ts +2 -1
- package/esm/pluggableElementTypes/index.js +2 -9
- package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +19 -9
- package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +122 -28
- package/esm/pluggableElementTypes/models/BaseDisplayModel.js +155 -11
- package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +65 -16
- package/esm/pluggableElementTypes/models/BaseTrackModel.js +179 -117
- package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +87 -18
- package/esm/pluggableElementTypes/models/BaseViewModel.js +54 -11
- package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +26 -16
- package/esm/pluggableElementTypes/models/assertDisplayContract.d.ts +15 -11
- package/esm/pluggableElementTypes/models/assertDisplayContract.js +25 -32
- package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +22 -18
- package/esm/pluggableElementTypes/models/baseConnectionConfig.js +5 -5
- package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +26 -31
- package/esm/pluggableElementTypes/models/baseTrackConfig.d.ts +108 -147
- package/esm/pluggableElementTypes/models/baseTrackConfig.js +96 -73
- package/esm/pluggableElementTypes/models/components/SaveTrackData.js +4 -6
- package/esm/pluggableElementTypes/models/components/fetchTrackData.d.ts +3 -4
- package/esm/pluggableElementTypes/models/components/fetchTrackData.js +3 -3
- package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +23 -13
- package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +80 -48
- package/esm/pluggableElementTypes/models/index.d.ts +2 -3
- package/esm/pluggableElementTypes/models/index.js +2 -3
- package/esm/pluggableElementTypes/models/migrateTrackConfig.d.ts +15 -1
- package/esm/pluggableElementTypes/models/migrateTrackConfig.js +85 -25
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.d.ts +4 -3
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.js +141 -19
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/types.d.ts +3 -3
- package/esm/pluginDefinitions.d.ts +34 -7
- package/esm/pluginDefinitions.js +54 -20
- package/esm/rpc/BaseRpcDriver.d.ts +2 -2
- package/esm/rpc/BaseRpcDriver.js +25 -30
- package/esm/rpc/MainThreadRpcDriver.d.ts +2 -2
- package/esm/rpc/MainThreadRpcDriver.js +13 -8
- package/esm/rpc/RpcClient.d.ts +18 -6
- package/esm/rpc/RpcClient.js +51 -16
- package/esm/rpc/RpcManager.d.ts +14 -10
- package/esm/rpc/RpcManager.js +11 -1
- package/esm/rpc/RpcRegistry.d.ts +40 -7
- package/esm/rpc/RpcServer.d.ts +3 -1
- package/esm/rpc/RpcServer.js +19 -12
- package/esm/rpc/WebWorkerRpcDriver.d.ts +11 -4
- package/esm/rpc/WebWorkerRpcDriver.js +64 -68
- package/esm/rpc/byteBudget.d.ts +20 -5
- package/esm/rpc/byteBudget.js +16 -5
- package/esm/rpc/configSchema.d.ts +7 -21
- package/esm/rpc/coreRpcMethods.d.ts +4 -0
- package/esm/rpc/coreRpcMethods.js +4 -0
- package/esm/rpc/methods/CoreGetEncodedFeature.d.ts +13 -0
- package/esm/rpc/methods/CoreGetEncodedFeature.js +32 -0
- package/esm/rpc/methods/CoreGetEncodedLayers.d.ts +16 -0
- package/esm/rpc/methods/CoreGetEncodedLayers.js +59 -0
- package/esm/rpc/methods/CoreGetExportData.js +3 -4
- package/esm/rpc/methods/CoreGetFeatureDensity.d.ts +11 -0
- package/esm/rpc/methods/CoreGetFeatureDensity.js +22 -0
- package/esm/rpc/methods/CoreGetFeatures.js +3 -5
- package/esm/rpc/methods/CoreGetRefNames.js +2 -12
- package/esm/rpc/methods/CoreGetRegionByteEstimate.js +1 -1
- package/esm/rpc/methods/CoreGetSequence.js +2 -2
- package/esm/rpc/methods/CoreLoadAdapterCode.d.ts +13 -0
- package/esm/rpc/methods/CoreLoadAdapterCode.js +16 -0
- package/esm/rpc/methods/layerFeatures.d.ts +33 -0
- package/esm/rpc/methods/layerFeatures.js +29 -0
- package/esm/svg/SvgExport.js +6 -7
- package/esm/svg/SvgThemeProviders.d.ts +12 -0
- package/esm/svg/SvgThemeProviders.js +15 -0
- package/esm/svg/exportViewSvg.d.ts +28 -0
- package/esm/svg/exportViewSvg.js +13 -0
- package/esm/svg/normalizeSvgMarkup.d.ts +7 -0
- package/esm/svg/normalizeSvgMarkup.js +99 -0
- package/esm/svg/serializeSvg.d.ts +7 -0
- package/esm/svg/serializeSvg.js +11 -0
- package/esm/svg/svgId.d.ts +1 -1
- package/esm/svg/svgId.js +1 -1
- package/esm/svg/svgReady.d.ts +9 -7
- package/esm/svg/svgReady.js +8 -7
- package/esm/svg/trackNames.d.ts +7 -5
- package/esm/svg/trackNames.js +12 -9
- package/esm/svg/wrapSvgExport.js +6 -74
- package/esm/ui/AddCustomPluginDialog.js +3 -8
- package/esm/ui/AppReadyMarker.d.ts +45 -0
- package/esm/ui/AppReadyMarker.js +89 -0
- package/esm/ui/BaseExportSvgDialog.d.ts +1 -1
- package/esm/ui/CascadingMenu.js +181 -104
- package/esm/ui/DropDownMenu.js +2 -1
- package/esm/ui/ErrorBanner.js +1 -1
- package/esm/ui/ErrorBoundary.d.ts +2 -2
- package/esm/ui/ErrorMessageStackTraceContents.js +2 -1
- package/esm/ui/ErrorMessageStackTraceDialog.js +5 -11
- package/esm/ui/ExportSvgDialog.d.ts +1 -1
- package/esm/ui/FileDropZone.js +2 -1
- package/esm/ui/FileSelector/useInternetAccounts.d.ts +156 -96
- package/esm/ui/HoverMenu.d.ts +1 -2
- package/esm/ui/HoverMenu.js +6 -3
- package/esm/ui/JexlFilterDialog.d.ts +13 -10
- package/esm/ui/JexlFilterDialog.js +122 -50
- package/esm/ui/JexlFilterRowEditors.d.ts +15 -0
- package/esm/ui/JexlFilterRowEditors.js +90 -0
- package/esm/ui/LazyBaseTooltip.d.ts +4 -0
- package/esm/ui/LazyBaseTooltip.js +9 -0
- package/esm/ui/LegendSwatchGlyph.js +26 -21
- package/esm/ui/LoadingOverlay.d.ts +14 -0
- package/esm/ui/LoadingOverlay.js +4 -2
- package/esm/ui/MenuTypes.d.ts +23 -53
- package/esm/ui/MenuTypes.js +3 -0
- package/esm/ui/MonospaceTextField.d.ts +2 -1
- package/esm/ui/MonospaceTextField.js +23 -20
- package/esm/ui/PaletteContext.d.ts +10 -5
- package/esm/ui/PaletteContext.js +44 -6
- package/esm/ui/RefNameAutocomplete/SearchOption.d.ts +13 -0
- package/esm/ui/RefNameAutocomplete/SearchOption.js +45 -0
- package/esm/ui/RefNameAutocomplete/index.d.ts +1 -2
- package/esm/ui/RefNameAutocomplete/index.js +8 -2
- package/esm/ui/RefNameAutocomplete/util.d.ts +13 -0
- package/esm/ui/RefNameAutocomplete/util.js +42 -1
- package/esm/ui/ResizeHandle.d.ts +3 -1
- package/esm/ui/ResizeHandle.js +44 -11
- package/esm/ui/ScrollChrome.d.ts +13 -0
- package/esm/ui/ScrollChrome.js +11 -0
- package/esm/ui/ScrollEdgeShadow.d.ts +6 -9
- package/esm/ui/ScrollEdgeShadow.js +14 -35
- package/esm/ui/ScrollZoomToggle.d.ts +4 -27
- package/esm/ui/ScrollZoomToggle.js +34 -51
- package/esm/ui/SessionJsonPanel.d.ts +3 -0
- package/esm/ui/SessionJsonPanel.js +14 -0
- package/esm/ui/SettingsChangesTable.d.ts +1 -0
- package/esm/ui/SettingsChangesTable.js +49 -11
- package/esm/ui/ShareLinkField.d.ts +1 -3
- package/esm/ui/ShareLinkField.js +13 -40
- package/esm/ui/SizeSliderRow.d.ts +1 -3
- package/esm/ui/SizeSliderRow.js +4 -6
- package/esm/ui/SnackbarModel.js +79 -67
- package/esm/ui/StatusProgressBar.js +2 -2
- package/esm/ui/SvgColorLegend.d.ts +9 -4
- package/esm/ui/SvgColorLegend.js +82 -41
- package/esm/ui/VerticalScrollbar.d.ts +13 -34
- package/esm/ui/VerticalScrollbar.js +29 -83
- package/esm/ui/ViewLoadingScreen.d.ts +5 -4
- package/esm/ui/ViewLoadingScreen.js +8 -32
- package/esm/ui/colorScale.d.ts +92 -0
- package/esm/ui/colorScale.js +72 -0
- package/esm/ui/colors.d.ts +64 -0
- package/esm/ui/colors.js +230 -1
- package/esm/ui/hoverBoxStyle.d.ts +14 -2
- package/esm/ui/hoverBoxStyle.js +17 -2
- package/esm/ui/index.d.ts +12 -12
- package/esm/ui/index.js +14 -22
- package/esm/ui/launchViewMenu.js +15 -5
- package/esm/ui/legendMenuItem.d.ts +10 -32
- package/esm/ui/legendMenuItem.js +9 -36
- package/esm/ui/legendSpec.d.ts +15 -8
- package/esm/ui/legendSpec.js +14 -23
- package/esm/ui/makeSizeMenu.d.ts +0 -6
- package/esm/ui/makeSizeMenu.js +6 -30
- package/esm/ui/measureLegendText.js +1 -1
- package/esm/ui/menuItemAdornment.d.ts +9 -20
- package/esm/ui/menuItemAdornment.js +10 -32
- package/esm/ui/menuItems.d.ts +2 -7
- package/esm/ui/menuItems.js +1 -6
- package/esm/ui/multiTrackMenuItems.d.ts +6 -0
- package/esm/ui/palette.d.ts +118 -116
- package/esm/ui/palette.js +114 -75
- package/esm/ui/replaceViewAction.d.ts +1 -1
- package/esm/ui/replaceViewAction.js +1 -1
- package/esm/ui/theme.d.ts +43 -119
- package/esm/ui/theme.js +62 -78
- package/esm/ui/toggleMenuItems.d.ts +1 -3
- package/esm/ui/toggleMenuItems.js +6 -5
- package/esm/ui/useAssemblySelection.d.ts +4 -4
- package/esm/ui/viewHeaderHeight.d.ts +1 -0
- package/esm/ui/viewHeaderHeight.js +1 -0
- package/esm/util/Base1DUtils.d.ts +5 -3
- package/esm/util/Base1DUtils.js +14 -6
- package/esm/util/Base1DViewModel.d.ts +2 -1
- package/esm/util/Base1DViewModel.js +3 -2
- package/esm/util/SvgCanvas.d.ts +15 -13
- package/esm/util/SvgCanvas.js +76 -56
- package/esm/util/TimeTraveller.d.ts +3 -0
- package/esm/util/TimeTraveller.js +34 -2
- package/esm/util/aborting.d.ts +39 -0
- package/esm/util/aborting.js +88 -6
- package/esm/util/adapterMetadata.d.ts +1 -1
- package/esm/util/adapterMetadata.js +6 -5
- package/esm/util/addAndShowTrack.d.ts +2 -5
- package/esm/util/addAndShowTrack.js +5 -1
- package/esm/util/addRelativeUris.d.ts +17 -5
- package/esm/util/addRelativeUris.js +46 -10
- package/esm/util/addTrackFromWidget.d.ts +2 -5
- package/esm/util/addTrackFromWidget.js +5 -4
- package/esm/util/aggregateFieldName.d.ts +10 -0
- package/esm/util/aggregateFieldName.js +8 -0
- package/esm/util/analytics.js +46 -13
- package/esm/util/animationAllowed.d.ts +9 -0
- package/esm/util/animationAllowed.js +13 -0
- package/esm/util/applyRowResizeWheel.d.ts +10 -5
- package/esm/util/applyRowResizeWheel.js +10 -21
- package/esm/util/bandHeight.d.ts +10 -0
- package/esm/util/bandHeight.js +29 -0
- package/esm/util/bandLayout.d.ts +4 -4
- package/esm/util/bandLayout.js +4 -4
- package/esm/util/baseDisplayConfig.d.ts +8 -0
- package/esm/util/baseDisplayConfig.js +27 -0
- package/esm/util/bezierConnector.d.ts +4 -3
- package/esm/util/bezierConnector.js +38 -45
- package/esm/util/bgzfWorkerPool.d.ts +20 -74
- package/esm/util/bgzfWorkerPool.js +20 -74
- package/esm/util/binnedAggregate.d.ts +17 -0
- package/esm/util/binnedAggregate.js +275 -0
- package/esm/util/cacheBudgets.d.ts +22 -19
- package/esm/util/cacheBudgets.js +22 -19
- package/esm/util/cachedSetup.d.ts +16 -6
- package/esm/util/cachedSetup.js +108 -38
- package/esm/util/categoricalField.d.ts +56 -0
- package/esm/util/categoricalField.js +73 -0
- package/esm/util/cellMatches.d.ts +23 -0
- package/esm/util/cellMatches.js +264 -0
- package/esm/util/cellsStep.d.ts +29 -0
- package/esm/util/cellsStep.js +437 -0
- package/esm/util/clampToContig.d.ts +17 -0
- package/esm/util/clampToContig.js +19 -0
- package/esm/util/coarseStripHTML.js +1 -2
- package/esm/util/color/cssColorsLevel4.d.ts +1 -0
- package/esm/util/color/cssColorsLevel4.js +1 -0
- package/esm/util/color/index.d.ts +5 -3
- package/esm/util/color/index.js +7 -4
- package/esm/util/colorBits.d.ts +3 -3
- package/esm/util/colorBits.js +19 -44
- package/esm/util/colorRamp.d.ts +49 -5
- package/esm/util/colorRamp.js +169 -18
- package/esm/util/colorScale.d.ts +156 -0
- package/esm/util/colorScale.js +243 -0
- package/esm/util/colorSchemes.d.ts +21 -0
- package/esm/util/colorSchemes.js +30 -0
- package/esm/util/copyToClipboard.js +8 -1
- package/esm/util/{createStopTokenRotation.d.ts → createAbortRotation.d.ts} +21 -23
- package/esm/util/{createStopTokenRotation.js → createAbortRotation.js} +21 -52
- package/esm/util/createSvgRasterCanvas.d.ts +10 -0
- package/esm/util/cssColorParse.d.ts +15 -0
- package/esm/util/cssColorParse.js +53 -0
- package/esm/util/diagonalizeRegions.d.ts +2 -3
- package/esm/util/diagonalizeRegions.js +8 -13
- package/esm/util/expandLooseSearchIndex.d.ts +19 -0
- package/esm/util/expandLooseSearchIndex.js +29 -0
- package/esm/util/featureTable.d.ts +224 -0
- package/esm/util/featureTable.js +366 -0
- package/esm/util/featureTransforms.d.ts +81 -0
- package/esm/util/featureTransforms.js +1231 -0
- package/esm/util/featureTypes.d.ts +24 -0
- package/esm/util/featureTypes.js +35 -0
- package/esm/util/fetchAndMaybeUnzip.js +16 -9
- package/esm/util/fetchContext.d.ts +7 -8
- package/esm/util/fetchContext.js +3 -3
- package/esm/util/fetchHub.d.ts +4 -2
- package/esm/util/fetchHub.js +2 -2
- package/esm/util/fetchPhases.d.ts +10 -10
- package/esm/util/fetchSeq.d.ts +2 -3
- package/esm/util/fetchSeq.js +2 -2
- package/esm/util/fieldReader.d.ts +17 -0
- package/esm/util/fieldReader.js +62 -0
- package/esm/util/formatBytes.js +1 -1
- package/esm/util/formatGuessers.d.ts +25 -14
- package/esm/util/formatGuessers.js +42 -27
- package/esm/util/formatRelativeTime.js +1 -1
- package/esm/util/freezeDeep.d.ts +8 -10
- package/esm/util/freezeDeep.js +8 -10
- package/esm/util/getLocationUri.d.ts +2 -1
- package/esm/util/getLocationUri.js +8 -2
- package/esm/util/groupKeys.d.ts +76 -0
- package/esm/util/groupKeys.js +156 -0
- package/esm/util/highlights.d.ts +10 -6
- package/esm/util/highlights.js +12 -25
- package/esm/util/hooks.d.ts +31 -2
- package/esm/util/hooks.js +72 -3
- package/esm/util/index.d.ts +11 -11
- package/esm/util/index.js +11 -10
- package/esm/util/indexCandidates.d.ts +1 -31
- package/esm/util/indexCandidates.js +5 -63
- package/esm/util/installFetch.d.ts +77 -37
- package/esm/util/installFetch.js +65 -38
- package/esm/util/installInitAutorun.d.ts +14 -13
- package/esm/util/installInitAutorun.js +17 -17
- package/esm/util/installPrerequisiteFetch.d.ts +115 -0
- package/esm/util/installPrerequisiteFetch.js +111 -0
- package/esm/util/intervals.js +9 -4
- package/esm/util/io/index.js +22 -15
- package/esm/util/isDataCurrent.d.ts +7 -5
- package/esm/util/isDataCurrent.js +9 -6
- package/esm/util/isTextEntryFocused.d.ts +7 -0
- package/esm/util/isTextEntryFocused.js +16 -0
- package/esm/util/jexl.js +24 -21
- package/esm/util/jexlFilterRows.d.ts +89 -0
- package/esm/util/jexlFilterRows.js +252 -0
- package/esm/util/jexlFilters.d.ts +32 -57
- package/esm/util/jexlFilters.js +31 -29
- package/esm/util/jexlStrings.d.ts +3 -4
- package/esm/util/jexlStrings.js +2 -3
- package/esm/util/layouts/GranularRectLayout.d.ts +8 -1
- package/esm/util/layouts/GranularRectLayout.js +25 -8
- package/esm/util/lazyAfterAttach.d.ts +13 -0
- package/esm/util/lazyAfterAttach.js +31 -0
- package/esm/util/lazyWithPreload.d.ts +19 -0
- package/esm/util/lazyWithPreload.js +27 -0
- package/esm/util/legendCandidates.d.ts +72 -0
- package/esm/util/legendCandidates.js +138 -0
- package/esm/util/locString.js +5 -2
- package/esm/util/localStorage.js +4 -4
- package/esm/util/markEncoding.d.ts +150 -0
- package/esm/util/markEncoding.js +885 -0
- package/esm/util/markEncodingTypes.d.ts +595 -0
- package/esm/util/markEncodingTypes.js +8 -0
- package/esm/util/mst-reflection.d.ts +2 -20
- package/esm/util/mst-reflection.js +3 -53
- package/esm/util/mstUtils.d.ts +31 -23
- package/esm/util/mstUtils.js +39 -24
- package/esm/util/numericUtils.d.ts +7 -0
- package/esm/util/numericUtils.js +16 -0
- package/esm/util/numericValue.d.ts +14 -0
- package/esm/util/numericValue.js +34 -0
- package/esm/util/openFeatureWidget.d.ts +5 -0
- package/esm/util/openFeatureWidget.js +2 -2
- package/esm/util/openViews.d.ts +17 -0
- package/esm/util/openViews.js +22 -0
- package/esm/util/parentWalk.d.ts +1 -1
- package/esm/util/parentWalk.js +1 -1
- package/esm/util/parseLineByLine.d.ts +4 -5
- package/esm/util/parseLineByLine.js +8 -14
- package/esm/util/pluginStore.d.ts +6 -8
- package/esm/util/pluginStore.js +17 -16
- package/esm/util/preloadComponent.d.ts +5 -0
- package/esm/util/preloadComponent.js +11 -0
- package/esm/util/progress.d.ts +22 -22
- package/esm/util/progress.js +27 -26
- package/esm/util/quantileExtent.d.ts +49 -0
- package/esm/util/quantileExtent.js +162 -0
- package/esm/util/range.d.ts +13 -9
- package/esm/util/range.js +17 -8
- package/esm/util/renameRegions.d.ts +26 -6
- package/esm/util/renameRegions.js +68 -54
- package/esm/util/renderToStaticMarkup.js +24 -14
- package/esm/util/rxjs.d.ts +23 -8
- package/esm/util/rxjs.js +61 -15
- package/esm/util/samplesTsv.d.ts +49 -0
- package/esm/util/samplesTsv.js +86 -0
- package/esm/util/scheduleDetachedDestroy.d.ts +18 -0
- package/esm/util/scheduleDetachedDestroy.js +24 -0
- package/esm/util/scrollLatch.d.ts +1 -0
- package/esm/util/scrollLatch.js +8 -0
- package/esm/util/selectEncodedFeature.d.ts +16 -0
- package/esm/util/selectEncodedFeature.js +34 -0
- package/esm/util/sessionSharing.d.ts +7 -5
- package/esm/util/sessionSharing.js +23 -23
- package/esm/util/shapeNameList.d.ts +2 -0
- package/esm/util/shapeNameList.js +6 -0
- package/esm/util/shapeNames.d.ts +7 -0
- package/esm/util/shapeNames.js +11 -0
- package/esm/util/simpleFeature.d.ts +0 -1
- package/esm/util/springAnimate.js +1 -1
- package/esm/util/starFusion.d.ts +26 -0
- package/esm/util/starFusion.js +37 -0
- package/esm/util/stepTables.d.ts +96 -0
- package/esm/util/stepTables.js +277 -0
- package/esm/util/svAlt.d.ts +145 -0
- package/esm/util/svAlt.js +364 -0
- package/esm/util/svgColorProps.d.ts +11 -0
- package/esm/util/svgColorProps.js +28 -1
- package/esm/util/systemColorScheme.d.ts +12 -0
- package/esm/util/systemColorScheme.js +27 -0
- package/esm/util/tabix.d.ts +19 -10
- package/esm/util/tabix.js +19 -14
- package/esm/util/thresholdScale.d.ts +91 -0
- package/esm/util/thresholdScale.js +166 -0
- package/esm/util/timeGate.d.ts +4 -5
- package/esm/util/timeGate.js +4 -5
- package/esm/util/trackConfigDelta.d.ts +26 -26
- package/esm/util/trackConfigDelta.js +63 -47
- package/esm/util/tracks.d.ts +120 -66
- package/esm/util/tracks.js +501 -151
- package/esm/util/translateTranscript.d.ts +44 -0
- package/esm/util/translateTranscript.js +102 -0
- package/esm/util/types/data.d.ts +0 -2
- package/esm/util/types/index.d.ts +121 -22
- package/esm/util/types/index.js +9 -0
- package/esm/util/types/mst.d.ts +3 -0
- package/esm/util/types/mst.js +4 -0
- package/esm/util/types/renameIds.d.ts +1 -0
- package/esm/util/types/renameIds.js +29 -0
- package/esm/util/types/services.d.ts +1 -1
- package/esm/util/unknownSnapshotKeys.d.ts +53 -0
- package/esm/util/unknownSnapshotKeys.js +76 -0
- package/esm/util/useFeatureSequence.js +5 -5
- package/esm/util/useFetch.d.ts +3 -4
- package/esm/util/useFetch.js +19 -10
- package/esm/util/useFetchPlugins.d.ts +6 -2
- package/esm/util/useFetchPlugins.js +7 -3
- package/esm/util/usePanZoom.js +10 -3
- package/esm/util/usePanelVirtualScroll.d.ts +7 -35
- package/esm/util/usePanelVirtualScroll.js +9 -36
- package/esm/util/useRafCommit.js +1 -0
- package/esm/util/useRowVirtualScroll.d.ts +6 -29
- package/esm/util/useRowVirtualScroll.js +8 -49
- package/esm/util/useVirtualScrollWheel.d.ts +20 -4
- package/esm/util/useVirtualScrollWheel.js +40 -74
- package/esm/util/viewHighlights.d.ts +3 -0
- package/esm/util/viewHighlights.js +5 -0
- package/esm/util/viewStatus.d.ts +47 -15
- package/esm/util/viewStatus.js +34 -0
- package/esm/util/wheelZoom.d.ts +7 -1
- package/esm/util/wheelZoom.js +85 -19
- package/esm/util/whenViewSettled.d.ts +55 -8
- package/esm/util/whenViewSettled.js +56 -7
- package/esm/util/withFeatureDetails.js +4 -0
- package/esm/util/withLaunchInput.d.ts +174 -0
- package/esm/util/withLaunchInput.js +274 -0
- package/package.json +75 -24
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.d.ts +0 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.js +0 -8
- package/esm/BaseFeatureWidget/BaseFeatureDetail/types.d.ts +0 -8
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.d.ts +0 -80
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.js +0 -583
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.d.ts +0 -141
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.js +0 -1116
- package/esm/ReExports/BaseFeatureDetails.d.ts +0 -1
- package/esm/ReExports/BaseFeatureDetails.js +0 -10
- package/esm/ReExports/index.d.ts +0 -1
- package/esm/ReExports/index.js +0 -1
- package/esm/ReExports/publicUtil.d.ts +0 -1
- package/esm/ReExports/publicUtil.js +0 -28
- package/esm/configuration/promotableDefaults.d.ts +0 -199
- package/esm/configuration/promotableDefaults.js +0 -326
- package/esm/configuration/promotablePin.d.ts +0 -55
- package/esm/configuration/promotablePin.js +0 -1
- package/esm/configuration/promotableResolve.d.ts +0 -108
- package/esm/configuration/promotableResolve.js +0 -117
- package/esm/configuration/promotableSlots.d.ts +0 -12
- package/esm/configuration/promotableSlots.js +0 -45
- package/esm/configuration/slotShape.d.ts +0 -12
- package/esm/configuration/slotShape.js +0 -84
- package/esm/pluggableElementTypes/models/HighlightsMixin.d.ts +0 -51
- package/esm/pluggableElementTypes/models/HighlightsMixin.js +0 -78
- package/esm/ui/PinAdornment.d.ts +0 -5
- package/esm/ui/PinAdornment.js +0 -79
- package/esm/ui/SvgGradientLegend.d.ts +0 -26
- package/esm/ui/SvgGradientLegend.js +0 -26
- package/esm/ui/highlightChipReveal.d.ts +0 -32
- package/esm/ui/highlightChipReveal.js +0 -39
- package/esm/ui/promotableMenuItems.d.ts +0 -19
- package/esm/ui/promotableMenuItems.js +0 -89
- package/esm/ui/promotablePinCoverage.d.ts +0 -44
- package/esm/ui/promotablePinCoverage.js +0 -87
- package/esm/util/applyInitSettings.d.ts +0 -79
- package/esm/util/applyInitSettings.js +0 -91
- package/esm/util/openDisplays.d.ts +0 -23
- package/esm/util/openDisplays.js +0 -79
- package/esm/util/stopToken.d.ts +0 -211
- package/esm/util/stopToken.js +0 -438
- /package/esm/{BaseFeatureWidget/BaseFeatureDetail/types.js → data_adapters/BaseAdapter/zoomRange.js} +0 -0
|
@@ -1,31 +1,17 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useRef, useState } from 'react';
|
|
3
|
+
import { observer } from 'mobx-react';
|
|
3
4
|
import { clamp } from '../util/numericUtils.js';
|
|
4
5
|
import { makeStyles } from '../util/tss-react/index.js';
|
|
5
6
|
import { usePointerDrag } from '../util/usePointerDrag.js';
|
|
6
7
|
import { useRafCommit } from '../util/useRafCommit.js';
|
|
7
8
|
import { useVirtualScrollWheel } from '../util/useVirtualScrollWheel.js';
|
|
8
9
|
/**
|
|
9
|
-
* How much of a display's right edge this occupies while it is drawn
|
|
10
|
-
*
|
|
11
|
-
* Exported because the things that have to *clear* it are drawn by the displays
|
|
12
|
-
* that mount it, not by this file: the bottom-right indicator row and the
|
|
13
|
-
* alignments coverage axis label. Both kept a private copy of the number (and
|
|
14
|
-
* the alignments indicator row kept none at all, so its chips were drawn over
|
|
15
|
-
* the thumb), which is a copy that can only be checked by looking at two files
|
|
16
|
-
* at once.
|
|
10
|
+
* How much of a display's right edge this occupies while it is drawn, for the
|
|
11
|
+
* chrome the displays draw beside it.
|
|
17
12
|
*/
|
|
18
13
|
export const VERTICAL_SCROLLBAR_WIDTH = 12;
|
|
19
|
-
/**
|
|
20
|
-
* Where the right edge of anything that has to sit *beside* the thumb goes: the
|
|
21
|
-
* track's width plus a hair of air, so a chip or an axis label doesn't touch it.
|
|
22
|
-
*
|
|
23
|
-
* The four call sites all spelled `VERTICAL_SCROLLBAR_WIDTH + 2` inline, which
|
|
24
|
-
* is the same copy the width constant was exported to stop — one addition
|
|
25
|
-
* further along. The `+ 2` is a gap and belongs to the thing being cleared, not
|
|
26
|
-
* to the scrollbar's own geometry, so it is named rather than folded into the
|
|
27
|
-
* width (`right: 2` on the thumb is a different 2 and must not move with it).
|
|
28
|
-
*/
|
|
14
|
+
/** Where the right edge of something sitting beside the thumb goes. */
|
|
29
15
|
export const VERTICAL_SCROLLBAR_CLEARANCE = VERTICAL_SCROLLBAR_WIDTH + 2;
|
|
30
16
|
const MIN_THUMB_HEIGHT = 20;
|
|
31
17
|
const useStyles = makeStyles()(theme => ({
|
|
@@ -35,12 +21,8 @@ const useStyles = makeStyles()(theme => ({
|
|
|
35
21
|
width: VERTICAL_SCROLLBAR_WIDTH,
|
|
36
22
|
cursor: 'default',
|
|
37
23
|
zIndex: 10,
|
|
38
|
-
//
|
|
39
|
-
// claims a touch drag on this strip as a page scroll and no pointer stream
|
|
40
|
-
// arrives at all, so the thumb simply doesn't drag by finger.
|
|
24
|
+
// without it the browser claims a touch drag as a page scroll
|
|
41
25
|
touchAction: 'none',
|
|
42
|
-
// theme-aware so the thumb stays visible in dark mode (a hardcoded black
|
|
43
|
-
// thumb vanished against a dark canvas)
|
|
44
26
|
'&:hover > *': {
|
|
45
27
|
background: theme.palette.action.active,
|
|
46
28
|
},
|
|
@@ -55,71 +37,41 @@ const useStyles = makeStyles()(theme => ({
|
|
|
55
37
|
},
|
|
56
38
|
}));
|
|
57
39
|
/**
|
|
58
|
-
* Draggable vertical scrollbar overlay for
|
|
59
|
-
*
|
|
60
|
-
* Renders nothing when the content fits the viewport. The thumb geometry and
|
|
61
|
-
* the drag-to-scroll mapping live here so the consumers don't each re-derive
|
|
62
|
-
* them; the wheel handling stays per-display (their gesture semantics differ).
|
|
40
|
+
* Draggable vertical scrollbar overlay for a virtually scrolled display.
|
|
41
|
+
* Renders nothing when the content fits.
|
|
63
42
|
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
* `aria-value*` semantics are kept — they cost nothing and expose scroll
|
|
68
|
-
* position to pointer/voice assistive tech.
|
|
43
|
+
* Not a keyboard tab stop: the views have no keyboard navigation to reach the
|
|
44
|
+
* scrolled content, so `tabIndex` would only add noise. The `role="scrollbar"`
|
|
45
|
+
* semantics stay for pointer and voice assistive tech.
|
|
69
46
|
*/
|
|
70
|
-
|
|
47
|
+
const VerticalScrollbar = observer(function VerticalScrollbar({ model, controlsId, top = 0, }) {
|
|
71
48
|
const { classes } = useStyles();
|
|
72
|
-
// ephemeral drag anchor; null when not dragging. Pointer capture (set on the
|
|
73
|
-
// track) delivers move/up here even when the pointer leaves the thin track,
|
|
74
|
-
// and auto-releases on unmount — so no document listeners or effect cleanup.
|
|
75
49
|
const dragRef = useRef(undefined);
|
|
76
50
|
const [trackEl, setTrackEl] = useState(null);
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
const {
|
|
81
|
-
|
|
82
|
-
//
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
// handler to the containing view's scroll-zoom. A native non-passive listener
|
|
86
|
-
// here (via useVirtualScrollWheel) consumes the vertical delta into
|
|
87
|
-
// setScrollTop and stopPropagation keeps it from reaching that scroll-zoom.
|
|
88
|
-
useVirtualScrollWheel(trackEl, (e, applyScroll) => {
|
|
89
|
-
applyScroll(e, { scrollTop, viewportHeight, scrollableHeight }, n => {
|
|
90
|
-
setScrollTop(n);
|
|
91
|
-
});
|
|
51
|
+
const { schedule: scheduleScroll, flush: flushScroll } = useRafCommit((n) => {
|
|
52
|
+
model.setScrollTop(n);
|
|
53
|
+
});
|
|
54
|
+
const { scrollTop, scrollableHeight, scrollViewportHeight: viewportHeight, } = model;
|
|
55
|
+
// Wheeling the scrollbar always scrolls the panel, whatever `scrollZoom`
|
|
56
|
+
// says, and never reaches the view.
|
|
57
|
+
useVirtualScrollWheel(trackEl, model, (e, scroll) => {
|
|
58
|
+
scroll();
|
|
92
59
|
e.stopPropagation();
|
|
93
60
|
});
|
|
94
61
|
const clampedScrollTop = clamp(scrollTop, 0, scrollableHeight);
|
|
95
|
-
|
|
96
|
-
// MIN_THUMB_HEIGHT floor would otherwise exceed viewportHeight, pushing
|
|
97
|
-
// thumbTop negative (thumb drawn above the track) and making usableTrack
|
|
98
|
-
// negative (drag mapping dead)
|
|
62
|
+
const contentHeight = viewportHeight + scrollableHeight;
|
|
99
63
|
const thumbHeight = Math.min(viewportHeight, Math.max(MIN_THUMB_HEIGHT, viewportHeight * (viewportHeight / contentHeight)));
|
|
100
64
|
const usableTrack = viewportHeight - thumbHeight;
|
|
101
|
-
// clamp so a scrollTop past scrollableHeight (virtual-scroll displays don't
|
|
102
|
-
// self-correct like a native overflow container) can't draw the thumb below
|
|
103
|
-
// the track
|
|
104
65
|
const thumbTop = clamp((clampedScrollTop / scrollableHeight) * usableTrack, 0, usableTrack);
|
|
105
|
-
//
|
|
106
|
-
//
|
|
107
|
-
//
|
|
108
|
-
// existed, which cost two of the bugs it is written to prevent — a right-press
|
|
109
|
-
// started a drag that then ran underneath its own context menu, and a second
|
|
110
|
-
// finger landing mid-drag re-anchored the gesture.
|
|
66
|
+
// A press on the track above or below the thumb pages one viewport toward it
|
|
67
|
+
// rather than starting a drag; `dragRef` staying unset makes the captured
|
|
68
|
+
// moves that follow do nothing.
|
|
111
69
|
const drag = usePointerDrag({
|
|
112
|
-
// Click-to-page: a press on the track above/below the thumb jumps one
|
|
113
|
-
// viewport toward it (like a native scrollbar) rather than starting a drag.
|
|
114
|
-
// The thumb is pointerEvents:none so every press lands on the track; decide
|
|
115
|
-
// page-vs-drag from its Y relative to the thumb. `dragRef` staying undefined
|
|
116
|
-
// is what makes the paging branch ignore the moves that follow — the pointer
|
|
117
|
-
// is captured either way, and a page press simply has nothing to do with them.
|
|
118
70
|
onDragStart: e => {
|
|
119
71
|
const clickY = e.clientY - e.currentTarget.getBoundingClientRect().top;
|
|
120
72
|
if (clickY < thumbTop || clickY > thumbTop + thumbHeight) {
|
|
121
73
|
const dir = clickY < thumbTop ? -1 : 1;
|
|
122
|
-
setScrollTop(clamp(clampedScrollTop + dir * viewportHeight, 0, scrollableHeight));
|
|
74
|
+
model.setScrollTop(clamp(clampedScrollTop + dir * viewportHeight, 0, scrollableHeight));
|
|
123
75
|
}
|
|
124
76
|
else {
|
|
125
77
|
dragRef.current = { startY: e.clientY, startScroll: clampedScrollTop };
|
|
@@ -137,22 +89,16 @@ export default function VerticalScrollbar({ scrollTop, setScrollTop, viewportHei
|
|
|
137
89
|
dragRef.current = undefined;
|
|
138
90
|
},
|
|
139
91
|
});
|
|
140
|
-
//
|
|
141
|
-
// prop-driven condition that flips while mounted, so an early return above
|
|
142
|
-
// `usePointerDrag` would call a different number of hooks per render. The
|
|
143
|
-
// geometry it closes over is computed either way and simply goes unused here —
|
|
144
|
-
// nothing renders, so nothing can dispatch a pointer event at it.
|
|
92
|
+
// below every hook: "the content fits" flips while mounted
|
|
145
93
|
if (scrollableHeight <= 0) {
|
|
146
94
|
return null;
|
|
147
95
|
}
|
|
148
96
|
return (_jsx("div", { ref: setTrackEl, "data-testid": "vertical-scrollbar", "data-gesture-owner": "true", className: classes.track, style: { top, height: viewportHeight }, role: "scrollbar", "aria-label": "Vertical scrollbar", "aria-controls": controlsId, "aria-orientation": "vertical", "aria-valuemin": 0, "aria-valuemax": Math.round(scrollableHeight), "aria-valuenow": Math.round(clampedScrollTop), ...drag,
|
|
149
|
-
//
|
|
150
|
-
//
|
|
151
|
-
// a right-press the drag ignores still doesn't reach the view. No
|
|
152
|
-
// preventDefault, so the native focus shift can still close open popups
|
|
153
|
-
// and the context menu still opens.
|
|
97
|
+
// every button, so a right-press the drag ignores doesn't pan the view
|
|
98
|
+
// either; no preventDefault, so focus still moves and menus still open
|
|
154
99
|
onPointerDown: e => {
|
|
155
100
|
e.stopPropagation();
|
|
156
101
|
drag.onPointerDown(e);
|
|
157
102
|
}, children: _jsx("div", { className: classes.thumb, style: { top: thumbTop, height: thumbHeight } }) }));
|
|
158
|
-
}
|
|
103
|
+
});
|
|
104
|
+
export default VerticalScrollbar;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The "view exists but isn't ready yet" screen a view renders instead of its
|
|
3
3
|
* content — LGV, dotplot and linear synteny all show it while the assembly they
|
|
4
|
-
* name is still loading
|
|
5
|
-
* downloading and a determinate bar when that download
|
|
4
|
+
* name is still loading. A load past two seconds is labelled with which of the
|
|
5
|
+
* assembly's files is downloading, and a determinate bar when that download
|
|
6
|
+
* reports one; a faster one says only "Loading".
|
|
6
7
|
*
|
|
7
8
|
* A load that then stops reporting names the file it is waiting on. The phase
|
|
8
9
|
* label alone does not: "Downloading chromosome aliases" is a fair description
|
|
@@ -17,8 +18,8 @@
|
|
|
17
18
|
* {@link LoadingProgress} directly — bare, it renders an unconstrained
|
|
18
19
|
* full-width bar under an unaligned label.
|
|
19
20
|
*/
|
|
20
|
-
export default function ViewLoadingScreen({ message,
|
|
21
|
+
export default function ViewLoadingScreen({ message, progress, source, }: {
|
|
21
22
|
message?: string;
|
|
22
|
-
|
|
23
|
+
progress?: number;
|
|
23
24
|
source?: string;
|
|
24
25
|
}): import("react").JSX.Element;
|
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect, useState } from 'react';
|
|
3
2
|
import { Typography } from '@mui/material';
|
|
3
|
+
import { useSlowLoad, useStalled } from '../util/hooks.js';
|
|
4
4
|
import { makeStyles } from '../util/tss-react/index.js';
|
|
5
5
|
import LoadingProgress from './LoadingProgress.js';
|
|
6
|
-
// Long enough that a load which is merely slow never says it, short enough to
|
|
7
|
-
// beat the point where someone decides the app is broken. Every status write
|
|
8
|
-
// resets it, so a download that is still moving its bar never reaches it
|
|
9
|
-
const STALL_MS = 5000;
|
|
10
6
|
const useStyles = makeStyles()(theme => ({
|
|
11
7
|
root: {
|
|
12
8
|
display: 'flex',
|
|
@@ -28,33 +24,12 @@ const useStyles = makeStyles()(theme => ({
|
|
|
28
24
|
color: theme.palette.text.secondary,
|
|
29
25
|
},
|
|
30
26
|
}));
|
|
31
|
-
/**
|
|
32
|
-
* Has this load said the same thing for {@link STALL_MS}? `key` is everything
|
|
33
|
-
* the screen is showing, so any status at all — a new phase, another chunk of
|
|
34
|
-
* bytes — restarts the wait, and only a load that has genuinely stopped saying
|
|
35
|
-
* anything gets there.
|
|
36
|
-
*
|
|
37
|
-
* The timeout stores the key it fired for rather than a boolean, which is what
|
|
38
|
-
* makes the reset free: a key that has moved on is not the key that was stalled,
|
|
39
|
-
* so the notice goes away on the next status without a write to undo it.
|
|
40
|
-
*/
|
|
41
|
-
function useStalled(key) {
|
|
42
|
-
const [stalledKey, setStalledKey] = useState();
|
|
43
|
-
useEffect(() => {
|
|
44
|
-
const timer = setTimeout(() => {
|
|
45
|
-
setStalledKey(key);
|
|
46
|
-
}, STALL_MS);
|
|
47
|
-
return () => {
|
|
48
|
-
clearTimeout(timer);
|
|
49
|
-
};
|
|
50
|
-
}, [key]);
|
|
51
|
-
return stalledKey === key;
|
|
52
|
-
}
|
|
53
27
|
/**
|
|
54
28
|
* The "view exists but isn't ready yet" screen a view renders instead of its
|
|
55
29
|
* content — LGV, dotplot and linear synteny all show it while the assembly they
|
|
56
|
-
* name is still loading
|
|
57
|
-
* downloading and a determinate bar when that download
|
|
30
|
+
* name is still loading. A load past two seconds is labelled with which of the
|
|
31
|
+
* assembly's files is downloading, and a determinate bar when that download
|
|
32
|
+
* reports one; a faster one says only "Loading".
|
|
58
33
|
*
|
|
59
34
|
* A load that then stops reporting names the file it is waiting on. The phase
|
|
60
35
|
* label alone does not: "Downloading chromosome aliases" is a fair description
|
|
@@ -69,8 +44,9 @@ function useStalled(key) {
|
|
|
69
44
|
* {@link LoadingProgress} directly — bare, it renders an unconstrained
|
|
70
45
|
* full-width bar under an unaligned label.
|
|
71
46
|
*/
|
|
72
|
-
export default function ViewLoadingScreen({ message,
|
|
47
|
+
export default function ViewLoadingScreen({ message, progress, source, }) {
|
|
73
48
|
const { classes } = useStyles();
|
|
74
|
-
const
|
|
75
|
-
|
|
49
|
+
const slow = useSlowLoad();
|
|
50
|
+
const stalled = useStalled(`${message}|${progress}|${source}`);
|
|
51
|
+
return (_jsxs("div", { className: classes.root, children: [_jsx(LoadingProgress, { variant: "h6", message: slow ? message : undefined, fraction: slow ? progress : undefined, barClassName: classes.bar }), stalled && source ? (_jsxs(Typography, { variant: "body2", className: classes.stalled, children: ["still waiting on ", source] })) : null] }));
|
|
76
52
|
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import type { LegendSpec, LegendSwatch } from './legendSpec.ts';
|
|
2
|
+
/**
|
|
3
|
+
* One value a categorical scale colors. `value` is the datum the color
|
|
4
|
+
* classifies (an SV type, a sample group, an impact tier), `label` how the key
|
|
5
|
+
* names it. A row with no `color` is a note in the key rather than a swatch —
|
|
6
|
+
* "+N more", or a rule the swatches cannot state.
|
|
7
|
+
*/
|
|
8
|
+
export interface CategoricalEntry {
|
|
9
|
+
value: string;
|
|
10
|
+
/**
|
|
11
|
+
* Every value painted in this row's color where the key is derived from
|
|
12
|
+
* the painting (`derivedColorScale`), `value` being the first; the label
|
|
13
|
+
* names them all. A row declared one value at a time leaves it unset.
|
|
14
|
+
*/
|
|
15
|
+
values?: string[];
|
|
16
|
+
label: string;
|
|
17
|
+
color?: string;
|
|
18
|
+
swatches?: LegendSwatch[];
|
|
19
|
+
hidden?: boolean;
|
|
20
|
+
missing?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* A color vocabulary: a finite set of values, each drawn in one color. ADR-094's
|
|
24
|
+
* palette-index and per-instance-value cardinalities both resolve to this once
|
|
25
|
+
* the values are enumerated.
|
|
26
|
+
*/
|
|
27
|
+
export interface CategoricalScale {
|
|
28
|
+
kind: 'categorical';
|
|
29
|
+
id: string;
|
|
30
|
+
title?: string;
|
|
31
|
+
entries: CategoricalEntry[];
|
|
32
|
+
domain?: readonly string[];
|
|
33
|
+
focusesRows?: boolean;
|
|
34
|
+
note?: string;
|
|
35
|
+
}
|
|
36
|
+
/** One stop of a continuous ramp, `offset` in `[0, 1]`. */
|
|
37
|
+
export interface RampStop {
|
|
38
|
+
offset: number;
|
|
39
|
+
color: string;
|
|
40
|
+
opacity?: number;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* A scalar through a color ramp: ADR-094's scalar-through-a-scale
|
|
44
|
+
* cardinality. `stops` are what the painter samples — read them out of the
|
|
45
|
+
* same LUT the GPU uploads (`stopsFromRampLut`) so the bar is byte-identical
|
|
46
|
+
* to the plot. `format` prints the domain ends; `formatScore` by default, so
|
|
47
|
+
* a domain measured off the data prints `24.4` and not the float it was
|
|
48
|
+
* measured as.
|
|
49
|
+
*/
|
|
50
|
+
export interface RampScale {
|
|
51
|
+
kind: 'ramp';
|
|
52
|
+
id: string;
|
|
53
|
+
title?: string;
|
|
54
|
+
domain: [number, number];
|
|
55
|
+
stops: RampStop[];
|
|
56
|
+
format?: (value: number) => string;
|
|
57
|
+
/**
|
|
58
|
+
* The loaded values' extremes. An end of `domain` the data runs past prints
|
|
59
|
+
* `≤` or `≥`, since the ramp paints every value beyond it in its end colour.
|
|
60
|
+
*/
|
|
61
|
+
extent?: readonly [number, number];
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* What a display says about one of its color channels. A display declares a
|
|
65
|
+
* list of these (`LegendMixin.colorScales`) and the legend derives from it, so
|
|
66
|
+
* the key cannot list a color nothing painted.
|
|
67
|
+
*/
|
|
68
|
+
export type ColorScale = CategoricalScale | RampScale;
|
|
69
|
+
/**
|
|
70
|
+
* The one derivation of a legend from a display's color scales: a section per
|
|
71
|
+
* scale, in the order declared. On screen `FloatingLegend` renders the result
|
|
72
|
+
* and the export flattens it through `legendEntries`, so the two cannot
|
|
73
|
+
* describe different colors.
|
|
74
|
+
*
|
|
75
|
+
* A lone scale names itself: section titles draw only beside other sections,
|
|
76
|
+
* so a lone categorical scale's title becomes the box's (a field's name over
|
|
77
|
+
* its values) and a lone ramp's goes on its row. Empty scales are
|
|
78
|
+
* dropped first, so one waiting for data does not leave its sibling untitled.
|
|
79
|
+
*/
|
|
80
|
+
export declare function legendSpecOf(scales: ColorScale[]): LegendSpec;
|
|
81
|
+
/**
|
|
82
|
+
* The no-value row goes after every value a `domain` orders: the domain never
|
|
83
|
+
* lists it, so ordering by the domain alone ranks it with the values the
|
|
84
|
+
* domain leaves out.
|
|
85
|
+
*/
|
|
86
|
+
export declare function missingRowLast(a: {
|
|
87
|
+
missing?: boolean;
|
|
88
|
+
}, b: {
|
|
89
|
+
missing?: boolean;
|
|
90
|
+
}): number;
|
|
91
|
+
/** Whether a scale has anything for a key to show. */
|
|
92
|
+
export declare function colorScaleIsEmpty(scale: ColorScale): boolean;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { groupKeyComparator } from '../util/groupKeys.js';
|
|
2
|
+
import { formatScore } from '../util/numericUtils.js';
|
|
3
|
+
// A lone ramp names itself on its row: `FloatingLegend` and `legendEntries`
|
|
4
|
+
// draw a section's title only beside other sections, and a bar of numbers
|
|
5
|
+
// with nothing saying what they count is not a key.
|
|
6
|
+
function rampItem({ title, domain, stops, format = formatScore, extent }, lone) {
|
|
7
|
+
const [min, max] = domain;
|
|
8
|
+
const [lo, hi] = extent ?? domain;
|
|
9
|
+
// compared at float32 as well, since a value lane carries the extent in one
|
|
10
|
+
// and a pinned 0.3 is then a hair under the 0.3 it read
|
|
11
|
+
const below = lo < min && Math.fround(lo) < Math.fround(min);
|
|
12
|
+
const above = hi > max && Math.fround(hi) > Math.fround(max);
|
|
13
|
+
return {
|
|
14
|
+
label: lone ? (title ?? '') : '',
|
|
15
|
+
gradient: {
|
|
16
|
+
stops,
|
|
17
|
+
minLabel: `${below ? '≤' : ''}${format(min)}`,
|
|
18
|
+
maxLabel: `${above ? '≥' : ''}${format(max)}`,
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function sectionOf(scale, lone) {
|
|
23
|
+
if (scale.kind !== 'categorical') {
|
|
24
|
+
return { id: scale.id, title: scale.title, items: [rampItem(scale, lone)] };
|
|
25
|
+
}
|
|
26
|
+
// A key a display ordered itself keeps that order, rows it lists after the
|
|
27
|
+
// no-value row included.
|
|
28
|
+
const compare = scale.domain?.length
|
|
29
|
+
? groupKeyComparator(scale.domain)
|
|
30
|
+
: undefined;
|
|
31
|
+
const items = compare
|
|
32
|
+
? scale.entries.toSorted((a, b) => missingRowLast(a, b) || compare(a.value, b.value))
|
|
33
|
+
: scale.entries;
|
|
34
|
+
return {
|
|
35
|
+
id: scale.id,
|
|
36
|
+
title: scale.title,
|
|
37
|
+
note: scale.note,
|
|
38
|
+
items,
|
|
39
|
+
focusesRows: scale.focusesRows,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The one derivation of a legend from a display's color scales: a section per
|
|
44
|
+
* scale, in the order declared. On screen `FloatingLegend` renders the result
|
|
45
|
+
* and the export flattens it through `legendEntries`, so the two cannot
|
|
46
|
+
* describe different colors.
|
|
47
|
+
*
|
|
48
|
+
* A lone scale names itself: section titles draw only beside other sections,
|
|
49
|
+
* so a lone categorical scale's title becomes the box's (a field's name over
|
|
50
|
+
* its values) and a lone ramp's goes on its row. Empty scales are
|
|
51
|
+
* dropped first, so one waiting for data does not leave its sibling untitled.
|
|
52
|
+
*/
|
|
53
|
+
export function legendSpecOf(scales) {
|
|
54
|
+
const drawn = scales.filter(scale => !colorScaleIsEmpty(scale));
|
|
55
|
+
const lone = drawn.length === 1 ? drawn[0] : undefined;
|
|
56
|
+
return {
|
|
57
|
+
title: lone?.kind === 'categorical' ? lone.title : undefined,
|
|
58
|
+
sections: drawn.map(scale => sectionOf(scale, lone !== undefined)),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The no-value row goes after every value a `domain` orders: the domain never
|
|
63
|
+
* lists it, so ordering by the domain alone ranks it with the values the
|
|
64
|
+
* domain leaves out.
|
|
65
|
+
*/
|
|
66
|
+
export function missingRowLast(a, b) {
|
|
67
|
+
return Number(a.missing ?? false) - Number(b.missing ?? false);
|
|
68
|
+
}
|
|
69
|
+
/** Whether a scale has anything for a key to show. */
|
|
70
|
+
export function colorScaleIsEmpty(scale) {
|
|
71
|
+
return scale.kind === 'categorical' && scale.entries.length === 0;
|
|
72
|
+
}
|
package/esm/ui/colors.d.ts
CHANGED
|
@@ -29,8 +29,67 @@ export declare const paletteColors: {
|
|
|
29
29
|
* Past the end is the caller's problem, and the two callers answer differently
|
|
30
30
|
* on purpose: an attribute palette-by hashes the VALUE (stable across
|
|
31
31
|
* re-palettes), while a by-position painter has no value to hash and wraps.
|
|
32
|
+
*
|
|
33
|
+
* **It holds 14 pairs `similarColors` calls the same** — five schemes' blues,
|
|
34
|
+
* oranges, greens, reds and pinks — and deduping it at construction is the
|
|
35
|
+
* wrong reading of that, measured on the 38 GENCODE gene biotypes. Hashed,
|
|
36
|
+
* which is what a track with no `colorDomain` does, 30 of them land on 22
|
|
37
|
+
* colors and 38 on 26; the loss is the birthday collision on 40 slots, not the
|
|
38
|
+
* near-twins, and only 3 of the pairs they land on read alike. Pruning to the
|
|
39
|
+
* 30 distinct entries makes that 23 and 24, so it costs ten colors and buys
|
|
40
|
+
* nothing.
|
|
41
|
+
*
|
|
42
|
+
* The near-twins bite the PINNED case instead, where a `domain` spends the
|
|
43
|
+
* list in order: 30 listed values take 30 colors today and 7 of those pairs
|
|
44
|
+
* read alike. Ordering the distinct 30 first and the twins behind them fixes
|
|
45
|
+
* that outright (0 pairs at 30 listed values, 11 at 38 where the twins are
|
|
46
|
+
* reached anyway) and costs no colors — but it moves every hashed color in
|
|
47
|
+
* marks, GWAS, canvas, multi-row and the arrangement dialog, so it is a pass
|
|
48
|
+
* with a figure refresh in it.
|
|
32
49
|
*/
|
|
33
50
|
export declare const categoricalPalette: string[];
|
|
51
|
+
/**
|
|
52
|
+
* The palette color a categorical value paints, derived from the value rather
|
|
53
|
+
* than from the order it was met: values stream in as regions load, and a
|
|
54
|
+
* discovery-order slot would let one region paint `chr2` blue and the next
|
|
55
|
+
* paint it pink. A non-negative integer takes the slot it names, anchored at
|
|
56
|
+
* 1, so `1`, `2`, `3` walk the palette in order and stay distinct; anything
|
|
57
|
+
* else hashes in, stable for the same reason at the cost of an occasional
|
|
58
|
+
* collision. `categoricalScale` is the same rule with a domain.
|
|
59
|
+
*/
|
|
60
|
+
export declare function categoricalValueColor(value: string): string;
|
|
61
|
+
export declare function categoricalValueColor<T>(value: string, palette: readonly T[]): T;
|
|
62
|
+
/**
|
|
63
|
+
* The categorical rule every scaled channel resolves through. With no
|
|
64
|
+
* `domain` a value takes `categoricalValueColor`'s slot in `range`. With one,
|
|
65
|
+
* the listed values take `range` in order, continuing into the `fallback`
|
|
66
|
+
* entries `range` lacks past its end, and any other value takes a slot of the
|
|
67
|
+
* whole list derived from itself that no listed value holds, nor one
|
|
68
|
+
* `isNear` calls the same. A value's entry depends only on the value and the
|
|
69
|
+
* declaration, so every region agrees on it, and adding a listed value moves
|
|
70
|
+
* only the unlisted values on the slots it takes.
|
|
71
|
+
*/
|
|
72
|
+
export declare function categoricalScale<T>(domain: readonly (string | number)[] | undefined, range: readonly T[], { fallback, isNear, }?: {
|
|
73
|
+
fallback?: readonly T[];
|
|
74
|
+
isNear?: (a: T, b: T) => boolean;
|
|
75
|
+
}): (value: string) => T;
|
|
76
|
+
/**
|
|
77
|
+
* Whether two CSS colors read as one: under 0.05 apart in OKLab, where the
|
|
78
|
+
* wide palette's tableau and category10 oranges sit 0.003 apart.
|
|
79
|
+
*/
|
|
80
|
+
export declare function similarColors(a: string, b: string): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* `categoricalScale` for a color channel: `palette` (the wide palette when
|
|
83
|
+
* empty) spent in `domain` order and continued into the wide palette, and an
|
|
84
|
+
* unlisted value never on a listed value's color or one that reads the same.
|
|
85
|
+
*/
|
|
86
|
+
export declare function categoricalColorScale(domain: readonly (string | number)[] | undefined, palette?: readonly string[]): (value: string) => string;
|
|
87
|
+
/**
|
|
88
|
+
* The color one value of a categorical color channel paints, by
|
|
89
|
+
* `categoricalColorScale`. A value-less feature is neutral grey, and an array
|
|
90
|
+
* value joins the way a group key does.
|
|
91
|
+
*/
|
|
92
|
+
export declare function categoricalColor(value: unknown, domain?: readonly string[], palette?: readonly string[]): string;
|
|
34
93
|
/**
|
|
35
94
|
* Deterministic non-negative 32-bit hash of a string.
|
|
36
95
|
*/
|
|
@@ -60,4 +119,9 @@ export declare function refNamePaletteColorAt(position: number): string;
|
|
|
60
119
|
* it falls back to the hash.
|
|
61
120
|
*/
|
|
62
121
|
export declare function refNameColor(name: string, position: number | undefined): string;
|
|
122
|
+
/**
|
|
123
|
+
* A palette named in `namedPalettes`, or a comma-separated list of CSS
|
|
124
|
+
* colours; undefined, with a warning, for anything else.
|
|
125
|
+
*/
|
|
126
|
+
export declare function paletteFromSpec(spec: unknown): readonly string[] | undefined;
|
|
63
127
|
export { category10, set1 };
|