@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
package/esm/ui/colors.js
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as convert from '../util/color-bits/convert.js';
|
|
2
|
+
import { NO_CATEGORY_COLOR, relight } from '../util/color/index.js';
|
|
3
|
+
import { cssColorToNormalizedRgb } from '../util/colorBits.js';
|
|
4
|
+
import { isCssColor } from '../util/cssColorParse.js';
|
|
5
|
+
import { valueText } from '../util/groupKeys.js';
|
|
2
6
|
const category10 = [
|
|
3
7
|
'#1f77b4',
|
|
4
8
|
'#ff7f0e',
|
|
@@ -108,10 +112,149 @@ export const paletteColors = {
|
|
|
108
112
|
* Past the end is the caller's problem, and the two callers answer differently
|
|
109
113
|
* on purpose: an attribute palette-by hashes the VALUE (stable across
|
|
110
114
|
* re-palettes), while a by-position painter has no value to hash and wraps.
|
|
115
|
+
*
|
|
116
|
+
* **It holds 14 pairs `similarColors` calls the same** — five schemes' blues,
|
|
117
|
+
* oranges, greens, reds and pinks — and deduping it at construction is the
|
|
118
|
+
* wrong reading of that, measured on the 38 GENCODE gene biotypes. Hashed,
|
|
119
|
+
* which is what a track with no `colorDomain` does, 30 of them land on 22
|
|
120
|
+
* colors and 38 on 26; the loss is the birthday collision on 40 slots, not the
|
|
121
|
+
* near-twins, and only 3 of the pairs they land on read alike. Pruning to the
|
|
122
|
+
* 30 distinct entries makes that 23 and 24, so it costs ten colors and buys
|
|
123
|
+
* nothing.
|
|
124
|
+
*
|
|
125
|
+
* The near-twins bite the PINNED case instead, where a `domain` spends the
|
|
126
|
+
* list in order: 30 listed values take 30 colors today and 7 of those pairs
|
|
127
|
+
* read alike. Ordering the distinct 30 first and the twins behind them fixes
|
|
128
|
+
* that outright (0 pairs at 30 listed values, 11 at 38 where the twins are
|
|
129
|
+
* reached anyway) and costs no colors — but it moves every hashed color in
|
|
130
|
+
* marks, GWAS, canvas, multi-row and the arrangement dialog, so it is a pass
|
|
131
|
+
* with a figure refresh in it.
|
|
111
132
|
*/
|
|
112
133
|
export const categoricalPalette = [
|
|
113
134
|
...new Set([...tableau10, ...set1, ...dark2, ...set2, ...category10].filter(hex => !NEUTRALS.has(hex.toLowerCase()))),
|
|
114
135
|
];
|
|
136
|
+
export function categoricalValueColor(value, palette = categoricalPalette) {
|
|
137
|
+
return palette[valueSlot(value, palette.length)];
|
|
138
|
+
}
|
|
139
|
+
function valueSlot(value, n) {
|
|
140
|
+
const num = Number(value);
|
|
141
|
+
return value !== '' && Number.isInteger(num) && num >= 0
|
|
142
|
+
? (num + n - 1) % n
|
|
143
|
+
: hashString(value) % n;
|
|
144
|
+
}
|
|
145
|
+
function entryKey(entry) {
|
|
146
|
+
return typeof entry === 'string' ? entry.toLowerCase() : entry;
|
|
147
|
+
}
|
|
148
|
+
// The first slot derived from the value that `taken` does not hold, trying
|
|
149
|
+
// rehashes before walking, so the values landing on a taken slot spread over
|
|
150
|
+
// the free ones instead of piling onto the next.
|
|
151
|
+
function freeSlot(value, size, taken) {
|
|
152
|
+
let slot = valueSlot(value, size);
|
|
153
|
+
for (let salt = 1; taken.has(slot) && salt <= size; salt++) {
|
|
154
|
+
slot = hashString(`${salt}:${value}`) % size;
|
|
155
|
+
}
|
|
156
|
+
for (let step = 0; taken.has(slot) && step < size; step++) {
|
|
157
|
+
slot = (slot + 1) % size;
|
|
158
|
+
}
|
|
159
|
+
return slot;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* The categorical rule every scaled channel resolves through. With no
|
|
163
|
+
* `domain` a value takes `categoricalValueColor`'s slot in `range`. With one,
|
|
164
|
+
* the listed values take `range` in order, continuing into the `fallback`
|
|
165
|
+
* entries `range` lacks past its end, and any other value takes a slot of the
|
|
166
|
+
* whole list derived from itself that no listed value holds, nor one
|
|
167
|
+
* `isNear` calls the same. A value's entry depends only on the value and the
|
|
168
|
+
* declaration, so every region agrees on it, and adding a listed value moves
|
|
169
|
+
* only the unlisted values on the slots it takes.
|
|
170
|
+
*/
|
|
171
|
+
export function categoricalScale(domain, range, { fallback = [], isNear, } = {}) {
|
|
172
|
+
const base = range.length ? range : fallback;
|
|
173
|
+
const listed = [...new Set((domain ?? []).map(String))].filter(v => v !== '');
|
|
174
|
+
if (listed.length === 0) {
|
|
175
|
+
return value => base[valueSlot(value, base.length)];
|
|
176
|
+
}
|
|
177
|
+
const seen = new Set(base.map(entryKey));
|
|
178
|
+
const entries = [
|
|
179
|
+
...base,
|
|
180
|
+
...fallback.filter(entry => {
|
|
181
|
+
const key = entryKey(entry);
|
|
182
|
+
return seen.has(key) ? false : (seen.add(key), true);
|
|
183
|
+
}),
|
|
184
|
+
];
|
|
185
|
+
const size = entries.length;
|
|
186
|
+
const rank = new Map(listed.map((value, i) => [value, i]));
|
|
187
|
+
const listedSlots = new Set(listed.map((_, i) => i % size));
|
|
188
|
+
const taken = new Set(entries.flatMap((entry, i) => listedSlots.has(i) ||
|
|
189
|
+
(isNear && [...listedSlots].some(j => isNear(entries[j], entry)))
|
|
190
|
+
? [i]
|
|
191
|
+
: []));
|
|
192
|
+
return value => {
|
|
193
|
+
const i = rank.get(value);
|
|
194
|
+
return entries[i !== undefined
|
|
195
|
+
? i % size
|
|
196
|
+
: taken.size < size
|
|
197
|
+
? freeSlot(value, size, taken)
|
|
198
|
+
: valueSlot(value, size)];
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
const oklabByColor = new Map();
|
|
202
|
+
function oklabOf(color) {
|
|
203
|
+
let lab = oklabByColor.get(color);
|
|
204
|
+
if (lab === undefined) {
|
|
205
|
+
lab = convert.xyzd65ToOklab(...convert.xyzd50ToD65(...convert.srgbToXyzd50(...cssColorToNormalizedRgb(color))));
|
|
206
|
+
oklabByColor.set(color, lab);
|
|
207
|
+
}
|
|
208
|
+
return lab;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Whether two CSS colors read as one: under 0.05 apart in OKLab, where the
|
|
212
|
+
* wide palette's tableau and category10 oranges sit 0.003 apart.
|
|
213
|
+
*/
|
|
214
|
+
export function similarColors(a, b) {
|
|
215
|
+
const [l1, a1, b1] = oklabOf(a);
|
|
216
|
+
const [l2, a2, b2] = oklabOf(b);
|
|
217
|
+
return Math.hypot(l1 - l2, a1 - a2, b1 - b2) < 0.05;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* `categoricalScale` for a color channel: `palette` (the wide palette when
|
|
221
|
+
* empty) spent in `domain` order and continued into the wide palette, and an
|
|
222
|
+
* unlisted value never on a listed value's color or one that reads the same.
|
|
223
|
+
*/
|
|
224
|
+
export function categoricalColorScale(domain, palette = []) {
|
|
225
|
+
return categoricalScale(domain, palette, {
|
|
226
|
+
fallback: categoricalPalette,
|
|
227
|
+
isNear: similarColors,
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
const MAX_CACHED_SCALES = 16;
|
|
231
|
+
const scaleCache = new Map();
|
|
232
|
+
function cachedColorScale(domain, palette) {
|
|
233
|
+
const key = `${domain.join('\u001F')}\u001E${palette.join('\u001F')}`;
|
|
234
|
+
let scale = scaleCache.get(key);
|
|
235
|
+
if (scale === undefined) {
|
|
236
|
+
if (scaleCache.size >= MAX_CACHED_SCALES) {
|
|
237
|
+
scaleCache.delete(scaleCache.keys().next().value);
|
|
238
|
+
}
|
|
239
|
+
scale = categoricalColorScale(domain, palette);
|
|
240
|
+
scaleCache.set(key, scale);
|
|
241
|
+
}
|
|
242
|
+
return scale;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* The color one value of a categorical color channel paints, by
|
|
246
|
+
* `categoricalColorScale`. A value-less feature is neutral grey, and an array
|
|
247
|
+
* value joins the way a group key does.
|
|
248
|
+
*/
|
|
249
|
+
export function categoricalColor(value, domain = [], palette = []) {
|
|
250
|
+
const label = valueText(value);
|
|
251
|
+
if (label === '') {
|
|
252
|
+
return NO_CATEGORY_COLOR;
|
|
253
|
+
}
|
|
254
|
+
return domain.length === 0 && palette.length === 0
|
|
255
|
+
? categoricalValueColor(label)
|
|
256
|
+
: cachedColorScale(domain, palette)(label);
|
|
257
|
+
}
|
|
115
258
|
// only category10 and set1 are imported by name; the rest are reached through
|
|
116
259
|
// paletteColors above
|
|
117
260
|
/**
|
|
@@ -198,4 +341,90 @@ export function refNameColor(name, position) {
|
|
|
198
341
|
? refNameColorHexes[hashString(name) % refNameColorHexes.length]
|
|
199
342
|
: refNamePaletteColorAt(position);
|
|
200
343
|
}
|
|
344
|
+
// The four below are as their sources publish them less the black or grey,
|
|
345
|
+
// which reads as "no value" on a fill (see NEUTRALS).
|
|
346
|
+
// Okabe & Ito, "Color Universal Design" (2008), jfly.uni-koeln.de/color
|
|
347
|
+
const okabeIto = [
|
|
348
|
+
'#e69f00',
|
|
349
|
+
'#56b4e9',
|
|
350
|
+
'#009e73',
|
|
351
|
+
'#f0e442',
|
|
352
|
+
'#0072b2',
|
|
353
|
+
'#d55e00',
|
|
354
|
+
'#cc79a7',
|
|
355
|
+
];
|
|
356
|
+
// Paul Tol, "Colour Schemes", SRON/EPS/TN/09-002 (2021), the bright scheme
|
|
357
|
+
const tolBright = [
|
|
358
|
+
'#4477aa',
|
|
359
|
+
'#ee6677',
|
|
360
|
+
'#228833',
|
|
361
|
+
'#ccbb44',
|
|
362
|
+
'#66ccee',
|
|
363
|
+
'#aa3377',
|
|
364
|
+
];
|
|
365
|
+
// Paul Tol, "Colour Schemes", SRON/EPS/TN/09-002 (2021), the muted scheme
|
|
366
|
+
const tolMuted = [
|
|
367
|
+
'#cc6677',
|
|
368
|
+
'#332288',
|
|
369
|
+
'#ddcc77',
|
|
370
|
+
'#117733',
|
|
371
|
+
'#88ccee',
|
|
372
|
+
'#882255',
|
|
373
|
+
'#44aa99',
|
|
374
|
+
'#999933',
|
|
375
|
+
'#aa4499',
|
|
376
|
+
];
|
|
377
|
+
// Tableau 20, Tableau 10.0's paired palette (Maureen Stone, 2016)
|
|
378
|
+
const tableau20 = [
|
|
379
|
+
'#4e79a7',
|
|
380
|
+
'#a0cbe8',
|
|
381
|
+
'#f28e2b',
|
|
382
|
+
'#ffbe7d',
|
|
383
|
+
'#59a14f',
|
|
384
|
+
'#8cd17d',
|
|
385
|
+
'#b6992d',
|
|
386
|
+
'#f1ce63',
|
|
387
|
+
'#499894',
|
|
388
|
+
'#86bcb6',
|
|
389
|
+
'#e15759',
|
|
390
|
+
'#ff9d9a',
|
|
391
|
+
'#d37295',
|
|
392
|
+
'#fabfd2',
|
|
393
|
+
'#b07aa1',
|
|
394
|
+
'#d4a6c8',
|
|
395
|
+
'#9d7660',
|
|
396
|
+
'#d7b5a6',
|
|
397
|
+
];
|
|
398
|
+
/** The palettes a capture run can deal the rows from by name (`paletteFromSpec`). */
|
|
399
|
+
const namedPalettes = {
|
|
400
|
+
set1: () => set1,
|
|
401
|
+
categoricalPalette: () => categoricalPalette,
|
|
402
|
+
tableau10: () => tableau10,
|
|
403
|
+
// ColorBrewer Set2, which d3-scale-chromatic publishes as schemeSet2
|
|
404
|
+
schemeSet2: () => set2,
|
|
405
|
+
okabeIto: () => okabeIto,
|
|
406
|
+
tolBright: () => tolBright,
|
|
407
|
+
tolMuted: () => tolMuted,
|
|
408
|
+
tableau20: () => tableau20,
|
|
409
|
+
// every lap `refNamePaletteColorAt` re-lights category10 through
|
|
410
|
+
relit: () => Array.from({ length: refNameColorHexes.length * PALETTE_LAP_TONES.length }, (_, i) => refNamePaletteColorAt(i)),
|
|
411
|
+
};
|
|
412
|
+
/**
|
|
413
|
+
* A palette named in `namedPalettes`, or a comma-separated list of CSS
|
|
414
|
+
* colours; undefined, with a warning, for anything else.
|
|
415
|
+
*/
|
|
416
|
+
export function paletteFromSpec(spec) {
|
|
417
|
+
if (typeof spec !== 'string' || spec === '') {
|
|
418
|
+
return undefined;
|
|
419
|
+
}
|
|
420
|
+
if (Object.hasOwn(namedPalettes, spec)) {
|
|
421
|
+
return namedPalettes[spec]();
|
|
422
|
+
}
|
|
423
|
+
const colors = spec.split(/,(?![^(]*\))/).map(c => c.trim());
|
|
424
|
+
if (colors.every(isCssColor)) {
|
|
425
|
+
return colors;
|
|
426
|
+
}
|
|
427
|
+
console.warn(`palette "${spec}" is neither one of ${Object.keys(namedPalettes).join(', ')} nor a comma-separated list of CSS colours`);
|
|
428
|
+
return undefined;
|
|
429
|
+
}
|
|
201
430
|
export { category10, set1 };
|
|
@@ -5,7 +5,19 @@ import type { CSSProperties } from 'react';
|
|
|
5
5
|
* washes them out.
|
|
6
6
|
*
|
|
7
7
|
* One definition because the alternative was proven to fail: `highlightBoxColors`
|
|
8
|
-
* exists for the same reason, after two backends drifted apart on their own
|
|
9
|
-
* literals kept in step by a comment.
|
|
8
|
+
* below exists for the same reason, after two backends drifted apart on their own
|
|
9
|
+
* alpha literals kept in step by a comment.
|
|
10
10
|
*/
|
|
11
11
|
export declare const hoverBoxStyle: CSSProperties;
|
|
12
|
+
/**
|
|
13
|
+
* The border and fill of a pinned highlight box, off the palette's highlight
|
|
14
|
+
* hue. The chrome draws it on screen and `renderDisplaySvg` bakes it into the
|
|
15
|
+
* export, so both reach one definition.
|
|
16
|
+
*
|
|
17
|
+
* JBrowse's own `alpha`, not Material UI's: the SVG export reaches this module
|
|
18
|
+
* and should not drag @mui/material along.
|
|
19
|
+
*/
|
|
20
|
+
export declare function highlightBoxColors(highlightMain: string): {
|
|
21
|
+
border: string;
|
|
22
|
+
fill: string;
|
|
23
|
+
};
|
package/esm/ui/hoverBoxStyle.js
CHANGED
|
@@ -1,13 +1,28 @@
|
|
|
1
|
+
import { alpha } from './palette.js';
|
|
1
2
|
/**
|
|
2
3
|
* The hover mark for a cell or block on a canvas display: a white wash plus a
|
|
3
4
|
* dark border, never a color tint — the cell colors are the data, and a tint
|
|
4
5
|
* washes them out.
|
|
5
6
|
*
|
|
6
7
|
* One definition because the alternative was proven to fail: `highlightBoxColors`
|
|
7
|
-
* exists for the same reason, after two backends drifted apart on their own
|
|
8
|
-
* literals kept in step by a comment.
|
|
8
|
+
* below exists for the same reason, after two backends drifted apart on their own
|
|
9
|
+
* alpha literals kept in step by a comment.
|
|
9
10
|
*/
|
|
10
11
|
export const hoverBoxStyle = {
|
|
11
12
|
border: '1px solid rgba(0,0,0,0.5)',
|
|
12
13
|
background: 'rgba(255,255,255,0.3)',
|
|
13
14
|
};
|
|
15
|
+
/**
|
|
16
|
+
* The border and fill of a pinned highlight box, off the palette's highlight
|
|
17
|
+
* hue. The chrome draws it on screen and `renderDisplaySvg` bakes it into the
|
|
18
|
+
* export, so both reach one definition.
|
|
19
|
+
*
|
|
20
|
+
* JBrowse's own `alpha`, not Material UI's: the SVG export reaches this module
|
|
21
|
+
* and should not drag @mui/material along.
|
|
22
|
+
*/
|
|
23
|
+
export function highlightBoxColors(highlightMain) {
|
|
24
|
+
return {
|
|
25
|
+
border: alpha(highlightMain, 0.9),
|
|
26
|
+
fill: alpha(highlightMain, 0.25),
|
|
27
|
+
};
|
|
28
|
+
}
|
package/esm/ui/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { type JBrowseTheme, type SerializableThemeArgs, type ThemeMap, colorFwdStrand, colorInterchrom, colorLongInsert, colorLongreadInv,
|
|
1
|
+
export { type JBrowseTheme, type SerializableThemeArgs, type ThemeMap, colorFwdStrand, colorInterchrom, colorLongInsert, colorLongreadInv, colorPairLL, colorPairLR, colorPairLRDark, colorPairRL, colorPairRR, colorRevStrand, colorShortInsert, colorSplitReadInversion, colorSupplementary, colorUnmappedMate, colorUnmappedMateDark, createJBrowseBaseTheme, createJBrowseTheme, createJBrowseThemeFromArgs, defaultThemes, methylated5hmC, methylated5mC, tagColorPalette, unmethylated5mC, } from './theme.ts';
|
|
2
2
|
export { default as BaseExportSvgDialog } from './BaseExportSvgDialog.tsx';
|
|
3
3
|
export type { BaseExportSvgOptions } from './BaseExportSvgDialog.tsx';
|
|
4
4
|
export { default as ExportSvgDialog } from './ExportSvgDialog.tsx';
|
|
@@ -8,7 +8,8 @@ export { default as AssemblySelector } from './AssemblySelector.tsx';
|
|
|
8
8
|
export { useAssemblySelection } from './useAssemblySelection.ts';
|
|
9
9
|
export { useRecentLocations } from './useRecentLocations.ts';
|
|
10
10
|
export type { RecentLocation } from './useRecentLocations.ts';
|
|
11
|
-
export { RefNameAutocompleteEndAdornment,
|
|
11
|
+
export { RefNameAutocompleteEndAdornment, default as RefNameAutocomplete, } from './RefNameAutocomplete/index.tsx';
|
|
12
|
+
export { adornmentReservePx, getInputWidth, } from './RefNameAutocomplete/util.ts';
|
|
12
13
|
export { default as CascadingMenu } from './CascadingMenu.tsx';
|
|
13
14
|
export { default as CascadingMenuButton } from './CascadingMenuButton.tsx';
|
|
14
15
|
export { default as ContextMenu } from './ContextMenu.tsx';
|
|
@@ -37,7 +38,7 @@ export { default as MonospaceTextField } from './MonospaceTextField.tsx';
|
|
|
37
38
|
export { default as ShareLinkField } from './ShareLinkField.tsx';
|
|
38
39
|
export { default as SingleSlider } from './SingleSlider.tsx';
|
|
39
40
|
export { default as SliderTooltip } from './SliderTooltip.tsx';
|
|
40
|
-
export {
|
|
41
|
+
export { makeSizeMenu, makeSizeSubMenu } from './makeSizeMenu.tsx';
|
|
41
42
|
export { INLINE_MENU_ROW_WIDTH, ResetToDefaultButton, } from './InlineMenuControls.tsx';
|
|
42
43
|
export { sliderScale } from './sliderScale.ts';
|
|
43
44
|
export type { SliderScale } from './sliderScale.ts';
|
|
@@ -48,6 +49,7 @@ export { default as StatusProgressBar } from './StatusProgressBar.tsx';
|
|
|
48
49
|
export { default as Menu } from './Menu.tsx';
|
|
49
50
|
export { default as PrerenderedCanvas } from './PrerenderedCanvas.tsx';
|
|
50
51
|
export { default as ResizeHandle } from './ResizeHandle.tsx';
|
|
52
|
+
export { default as ScrollChrome } from './ScrollChrome.tsx';
|
|
51
53
|
export { default as ScrollEdgeShadow } from './ScrollEdgeShadow.tsx';
|
|
52
54
|
export { default as VerticalScrollbar } from './VerticalScrollbar.tsx';
|
|
53
55
|
export { default as SubmitDialog } from './SubmitDialog.tsx';
|
|
@@ -59,6 +61,7 @@ export { default as SettingsChangesTable } from './SettingsChangesTable.tsx';
|
|
|
59
61
|
export { default as ActionLink } from './ActionLink.tsx';
|
|
60
62
|
export { default as ExternalLink } from './ExternalLink.tsx';
|
|
61
63
|
export { default as SanitizedHTML } from './SanitizedHTML.tsx';
|
|
64
|
+
export { default as BaseTooltip } from './LazyBaseTooltip.tsx';
|
|
62
65
|
export { default as PluggableComponent } from './PluggableComponent.tsx';
|
|
63
66
|
export { default as PluggableComponents } from './PluggableComponents.tsx';
|
|
64
67
|
export type { ComponentExtensionPointName } from './PluggableComponents.tsx';
|
|
@@ -70,23 +73,20 @@ export type { SlotExtensionPointName, SlotProps, WrapperProps, } from './wrapCom
|
|
|
70
73
|
export { matchesTrackSelector } from './extensionSelectors.ts';
|
|
71
74
|
export type { TrackSelector } from './extensionSelectors.ts';
|
|
72
75
|
export type { BaseMenuItem, CheckboxMenuItem, ClickableMenuItem, CustomMenuItem, MenuDivider, MenuItem, MenuItemClickHandler, MenuItemsGetter, MenuSubHeader, NormalMenuItem, RadioMenuItem, SubMenuItem, } from './MenuTypes.ts';
|
|
73
|
-
export { staysOpenOnClick } from './MenuTypes.ts';
|
|
76
|
+
export { resolveSubMenu, staysOpenOnClick } from './MenuTypes.ts';
|
|
74
77
|
export { LAUNCH_LABEL, pushIntoSubMenu, pushLaunchViewMenuItem, } from './launchViewMenu.ts';
|
|
75
78
|
export { launchTargetsMenuItem } from './launchTargetsMenuItem.ts';
|
|
76
79
|
export { default as Crosshairs } from './Crosshairs.tsx';
|
|
77
80
|
export { hoverBoxStyle } from './hoverBoxStyle.ts';
|
|
78
81
|
export { useMouseState, useMouseTracking } from './useMouseTracking.ts';
|
|
79
82
|
export type { MouseState, MouseTracker } from './useMouseTracking.ts';
|
|
80
|
-
export {
|
|
81
|
-
export {
|
|
82
|
-
export { displayTypesWithPromotableSlots, promotableSlotsWithoutPin, } from './promotablePinCoverage.ts';
|
|
83
|
-
export declare const VIEW_HEADER_HEIGHT = 28;
|
|
84
|
-
export { GRADIENT_LEGEND_HEIGHT, GRADIENT_LEGEND_SVG_AREA_WIDTH, GRADIENT_LEGEND_WIDTH, default as SvgGradientLegend, } from './SvgGradientLegend.tsx';
|
|
85
|
-
export type { GradientLabel, GradientStop } from './SvgGradientLegend.tsx';
|
|
86
|
-
export { LEGEND_ROW_HEIGHT, LEGEND_SWATCH, default as SvgColorLegend, } from './SvgColorLegend.tsx';
|
|
83
|
+
export { VIEW_HEADER_HEIGHT } from './viewHeaderHeight.ts';
|
|
84
|
+
export { LEGEND_ROW_HEIGHT, LEGEND_SVG_GUTTER_WIDTH, LEGEND_SWATCH, default as SvgColorLegend, } from './SvgColorLegend.tsx';
|
|
87
85
|
export type { ColorLegendEntry } from './SvgColorLegend.tsx';
|
|
88
86
|
export { measureLegendText } from './measureLegendText.ts';
|
|
89
87
|
export { LegendSwatchGlyph } from './LegendSwatchGlyph.tsx';
|
|
90
88
|
export { MAX_LEGEND_ITEMS, legendEntries, legendIsReadable, legendSwatches, nonEmptyLegendSections, } from './legendSpec.ts';
|
|
91
|
-
export type {
|
|
89
|
+
export type { LegendGradient, LegendItem, LegendSection, LegendSpec, LegendSwatch, } from './legendSpec.ts';
|
|
90
|
+
export { colorScaleIsEmpty, legendSpecOf } from './colorScale.ts';
|
|
91
|
+
export type { CategoricalEntry, CategoricalScale, ColorScale, RampScale, RampStop, } from './colorScale.ts';
|
|
92
92
|
export { checkboxItem, radioItems } from './toggleMenuItems.ts';
|
package/esm/ui/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { colorFwdStrand, colorInterchrom, colorLongInsert, colorLongreadInv,
|
|
1
|
+
export { colorFwdStrand, colorInterchrom, colorLongInsert, colorLongreadInv, colorPairLL, colorPairLR, colorPairLRDark, colorPairRL, colorPairRR, colorRevStrand, colorShortInsert, colorSplitReadInversion, colorSupplementary, colorUnmappedMate, colorUnmappedMateDark, createJBrowseBaseTheme, createJBrowseTheme, createJBrowseThemeFromArgs, defaultThemes, methylated5hmC, methylated5mC, tagColorPalette, unmethylated5mC, } from './theme.js';
|
|
2
2
|
export { default as BaseExportSvgDialog } from './BaseExportSvgDialog.js';
|
|
3
3
|
export { default as ExportSvgDialog } from './ExportSvgDialog.js';
|
|
4
4
|
export { useExportSvgPreference } from './useExportSvgPreference.js';
|
|
@@ -6,7 +6,8 @@ export { LogoFull, Logomark } from './Logo.js';
|
|
|
6
6
|
export { default as AssemblySelector } from './AssemblySelector.js';
|
|
7
7
|
export { useAssemblySelection } from './useAssemblySelection.js';
|
|
8
8
|
export { useRecentLocations } from './useRecentLocations.js';
|
|
9
|
-
export { RefNameAutocompleteEndAdornment,
|
|
9
|
+
export { RefNameAutocompleteEndAdornment, default as RefNameAutocomplete, } from './RefNameAutocomplete/index.js';
|
|
10
|
+
export { adornmentReservePx, getInputWidth, } from './RefNameAutocomplete/util.js';
|
|
10
11
|
export { default as CascadingMenu } from './CascadingMenu.js';
|
|
11
12
|
export { default as CascadingMenuButton } from './CascadingMenuButton.js';
|
|
12
13
|
export { default as ContextMenu } from './ContextMenu.js';
|
|
@@ -34,7 +35,7 @@ export { default as MonospaceTextField } from './MonospaceTextField.js';
|
|
|
34
35
|
export { default as ShareLinkField } from './ShareLinkField.js';
|
|
35
36
|
export { default as SingleSlider } from './SingleSlider.js';
|
|
36
37
|
export { default as SliderTooltip } from './SliderTooltip.js';
|
|
37
|
-
export {
|
|
38
|
+
export { makeSizeMenu, makeSizeSubMenu } from './makeSizeMenu.js';
|
|
38
39
|
export { INLINE_MENU_ROW_WIDTH, ResetToDefaultButton, } from './InlineMenuControls.js';
|
|
39
40
|
export { sliderScale } from './sliderScale.js';
|
|
40
41
|
export { default as ErrorBar } from './ErrorBar.js';
|
|
@@ -44,6 +45,7 @@ export { default as StatusProgressBar } from './StatusProgressBar.js';
|
|
|
44
45
|
export { default as Menu } from './Menu.js';
|
|
45
46
|
export { default as PrerenderedCanvas } from './PrerenderedCanvas.js';
|
|
46
47
|
export { default as ResizeHandle } from './ResizeHandle.js';
|
|
48
|
+
export { default as ScrollChrome } from './ScrollChrome.js';
|
|
47
49
|
export { default as ScrollEdgeShadow } from './ScrollEdgeShadow.js';
|
|
48
50
|
export { default as VerticalScrollbar } from './VerticalScrollbar.js';
|
|
49
51
|
export { default as SubmitDialog } from './SubmitDialog.js';
|
|
@@ -55,37 +57,27 @@ export { default as SettingsChangesTable } from './SettingsChangesTable.js';
|
|
|
55
57
|
export { default as ActionLink } from './ActionLink.js';
|
|
56
58
|
export { default as ExternalLink } from './ExternalLink.js';
|
|
57
59
|
export { default as SanitizedHTML } from './SanitizedHTML.js';
|
|
58
|
-
//
|
|
59
|
-
//
|
|
60
|
-
//
|
|
61
|
-
// deep-
|
|
60
|
+
// The eager BaseTooltip reaches @floating-ui (~266KB), and this barrel is
|
|
61
|
+
// imported by eager plugin entries, so the barrel serves the lazy wrapper:
|
|
62
|
+
// published apollo reads `BaseTooltip` off the served ui namespace. In-tree
|
|
63
|
+
// consumers deep-import '@jbrowse/core/ui/BaseTooltip'.
|
|
64
|
+
export { default as BaseTooltip } from './LazyBaseTooltip.js';
|
|
62
65
|
export { default as PluggableComponent } from './PluggableComponent.js';
|
|
63
66
|
export { default as PluggableComponents } from './PluggableComponents.js';
|
|
64
67
|
export { default as PluggableElements } from './PluggableElements.js';
|
|
65
68
|
export { addExtensionElement } from './addExtensionElement.js';
|
|
66
69
|
export { wrapComponent } from './wrapComponent.js';
|
|
67
70
|
export { matchesTrackSelector } from './extensionSelectors.js';
|
|
68
|
-
export { staysOpenOnClick } from './MenuTypes.js';
|
|
71
|
+
export { resolveSubMenu, staysOpenOnClick } from './MenuTypes.js';
|
|
69
72
|
export { LAUNCH_LABEL, pushIntoSubMenu, pushLaunchViewMenuItem, } from './launchViewMenu.js';
|
|
70
73
|
export { launchTargetsMenuItem } from './launchTargetsMenuItem.js';
|
|
71
74
|
export { default as Crosshairs } from './Crosshairs.js';
|
|
72
75
|
export { hoverBoxStyle } from './hoverBoxStyle.js';
|
|
73
76
|
export { useMouseState, useMouseTracking } from './useMouseTracking.js';
|
|
74
|
-
export {
|
|
75
|
-
export {
|
|
76
|
-
// Not on the React-free `menuItems.ts` entry beside the two builders above: this
|
|
77
|
-
// reads a config's slot table, so it pulls `configuration/promotableSlots.ts`
|
|
78
|
-
// in, and that entry exists precisely to stay out of every plugin's eager graph.
|
|
79
|
-
//
|
|
80
|
-
// `pinnedSlots`, the walk underneath it, stays module-private: the question a
|
|
81
|
-
// caller has is "which promotable slots does this menu miss", and answering the
|
|
82
|
-
// half of it that lists what a menu *does* offer needs the schema's slot table
|
|
83
|
-
// to mean anything.
|
|
84
|
-
export { displayTypesWithPromotableSlots, promotableSlotsWithoutPin, } from './promotablePinCoverage.js';
|
|
85
|
-
export const VIEW_HEADER_HEIGHT = 28;
|
|
86
|
-
export { GRADIENT_LEGEND_HEIGHT, GRADIENT_LEGEND_SVG_AREA_WIDTH, GRADIENT_LEGEND_WIDTH, default as SvgGradientLegend, } from './SvgGradientLegend.js';
|
|
87
|
-
export { LEGEND_ROW_HEIGHT, LEGEND_SWATCH, default as SvgColorLegend, } from './SvgColorLegend.js';
|
|
77
|
+
export { VIEW_HEADER_HEIGHT } from './viewHeaderHeight.js';
|
|
78
|
+
export { LEGEND_ROW_HEIGHT, LEGEND_SVG_GUTTER_WIDTH, LEGEND_SWATCH, default as SvgColorLegend, } from './SvgColorLegend.js';
|
|
88
79
|
export { measureLegendText } from './measureLegendText.js';
|
|
89
80
|
export { LegendSwatchGlyph } from './LegendSwatchGlyph.js';
|
|
90
81
|
export { MAX_LEGEND_ITEMS, legendEntries, legendIsReadable, legendSwatches, nonEmptyLegendSections, } from './legendSpec.js';
|
|
82
|
+
export { colorScaleIsEmpty, legendSpecOf } from './colorScale.js';
|
|
91
83
|
export { checkboxItem, radioItems } from './toggleMenuItems.js';
|
package/esm/ui/launchViewMenu.js
CHANGED
|
@@ -8,9 +8,19 @@ export const LAUNCH_LABEL = 'Launch';
|
|
|
8
8
|
// first time. What makes several plugins' contributions collect in one place
|
|
9
9
|
// instead of each becoming its own top-level row, whatever order they ran in.
|
|
10
10
|
export function pushIntoSubMenu(items, label, item) {
|
|
11
|
-
|
|
11
|
+
// `'subMenu' in i`, not `i.type === 'subMenu'`: `type` is OPTIONAL on a
|
|
12
|
+
// submenu row and most of the tree omits it, so the type test would miss an
|
|
13
|
+
// existing group and push a second top-level row under the same label — two
|
|
14
|
+
// rows that then share a React key and an open/closed state.
|
|
15
|
+
const existing = items.find((i) => 'subMenu' in i && i.label === label);
|
|
12
16
|
if (existing) {
|
|
13
|
-
existing
|
|
17
|
+
const { subMenu } = existing;
|
|
18
|
+
if (typeof subMenu === 'function') {
|
|
19
|
+
existing.subMenu = () => [...subMenu(), item];
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
subMenu.push(item);
|
|
23
|
+
}
|
|
14
24
|
}
|
|
15
25
|
else {
|
|
16
26
|
items.push({ label, type: 'subMenu', subMenu: [item] });
|
|
@@ -28,9 +38,9 @@ export function pushIntoSubMenu(items, label, item) {
|
|
|
28
38
|
// `rubberBandLaunchMenuItems()` on the linear genome view — because there the
|
|
29
39
|
// grouping is the model's, not each contributor's, to do.
|
|
30
40
|
//
|
|
31
|
-
// Keeps its name while the label loses a word:
|
|
32
|
-
//
|
|
33
|
-
//
|
|
41
|
+
// Keeps its name while the label loses a word: `@jbrowse/core/ui` serves it, so
|
|
42
|
+
// a published plugin bundle reads it off the host at module scope and a rename
|
|
43
|
+
// is `undefined` inside an already-shipped UMD.
|
|
34
44
|
export function pushLaunchViewMenuItem(items, item) {
|
|
35
45
|
pushIntoSubMenu(items, LAUNCH_LABEL, item);
|
|
36
46
|
}
|
|
@@ -1,38 +1,16 @@
|
|
|
1
|
-
import type { Pin } from '../configuration/promotablePin.ts';
|
|
2
1
|
import type { MenuItem } from './MenuTypes.ts';
|
|
2
|
+
import type { SettingRowOptions } from './toggleMenuItems.ts';
|
|
3
3
|
/**
|
|
4
|
-
* The "Show legend" checkbox
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* The "Show legend" checkbox behind `LegendMixin`'s row and the circular
|
|
5
|
+
* view's. Takes the value and the toggle, in `checkboxItem`'s order, which is
|
|
6
|
+
* all this adds a label to.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* order as `checkboxItem`, which is all this adds a label to.
|
|
8
|
+
* The `showLegend` **config slots** stay per display: their default values
|
|
9
|
+
* legitimately differ (a Hi-C color scale is off by default, a variant genotype
|
|
10
|
+
* key on), and their descriptions describe genuinely different legends.
|
|
12
11
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* genotype key on), and their descriptions describe genuinely different legends.
|
|
16
|
-
* What they now share is being *promotable* — pass `opts.pin` and the row gains
|
|
17
|
-
* the pin that makes the current state this display type's session-wide
|
|
18
|
-
* default. Every display whose legend is backed by a config slot passes one,
|
|
19
|
-
* and gets it from `LegendMixin`'s `showLegendDisplayTypeDefault` rather than
|
|
20
|
-
* calling `makePin` itself: the slot is the per-display half, the accessors
|
|
21
|
-
* over it are not.
|
|
22
|
-
*
|
|
23
|
-
* `pin` is optional because two callers have no slot to promote: the Manhattan
|
|
24
|
-
* plot's LD legend and `LinearBasicDisplay`'s color key are a volatile and a
|
|
25
|
-
* per-legend `dismissed` flag respectively, neither of which is config at all.
|
|
26
|
-
* They get the plain row, which is what `checkboxItem` builds either way — the
|
|
27
|
-
* promotable form is that same row plus the pin, per `promotableToggleItem`.
|
|
28
|
-
*
|
|
29
|
-
* Deliberately not used by `synteny-core`'s "Show color legend", which sits
|
|
30
|
-
* inside a "Color by..." submenu where the bare word would not say which legend.
|
|
12
|
+
* `synteny-core`'s color-by legend has no toggle at all: it comes up with the
|
|
13
|
+
* modes that have a key and is dismissed from its own close button.
|
|
31
14
|
*/
|
|
32
15
|
/** #menuBuilder showLegendCheckboxItem | the shared "Show legend" checkbox */
|
|
33
|
-
export declare function showLegendCheckboxItem(checked: boolean, onToggle: () => void, opts?:
|
|
34
|
-
helpText?: string;
|
|
35
|
-
disabled?: boolean;
|
|
36
|
-
disabledHelpText?: string;
|
|
37
|
-
pin?: Pin;
|
|
38
|
-
}): MenuItem;
|
|
16
|
+
export declare function showLegendCheckboxItem(checked: boolean, onToggle: () => void, opts?: SettingRowOptions): MenuItem;
|
package/esm/ui/legendMenuItem.js
CHANGED
|
@@ -1,44 +1,17 @@
|
|
|
1
|
-
import { promotableToggleItem } from './promotableMenuItems.js';
|
|
2
1
|
import { checkboxItem } from './toggleMenuItems.js';
|
|
3
2
|
/**
|
|
4
|
-
* The "Show legend" checkbox
|
|
5
|
-
*
|
|
6
|
-
*
|
|
3
|
+
* The "Show legend" checkbox behind `LegendMixin`'s row and the circular
|
|
4
|
+
* view's. Takes the value and the toggle, in `checkboxItem`'s order, which is
|
|
5
|
+
* all this adds a label to.
|
|
7
6
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* order as `checkboxItem`, which is all this adds a label to.
|
|
7
|
+
* The `showLegend` **config slots** stay per display: their default values
|
|
8
|
+
* legitimately differ (a Hi-C color scale is off by default, a variant genotype
|
|
9
|
+
* key on), and their descriptions describe genuinely different legends.
|
|
12
10
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* genotype key on), and their descriptions describe genuinely different legends.
|
|
16
|
-
* What they now share is being *promotable* — pass `opts.pin` and the row gains
|
|
17
|
-
* the pin that makes the current state this display type's session-wide
|
|
18
|
-
* default. Every display whose legend is backed by a config slot passes one,
|
|
19
|
-
* and gets it from `LegendMixin`'s `showLegendDisplayTypeDefault` rather than
|
|
20
|
-
* calling `makePin` itself: the slot is the per-display half, the accessors
|
|
21
|
-
* over it are not.
|
|
22
|
-
*
|
|
23
|
-
* `pin` is optional because two callers have no slot to promote: the Manhattan
|
|
24
|
-
* plot's LD legend and `LinearBasicDisplay`'s color key are a volatile and a
|
|
25
|
-
* per-legend `dismissed` flag respectively, neither of which is config at all.
|
|
26
|
-
* They get the plain row, which is what `checkboxItem` builds either way — the
|
|
27
|
-
* promotable form is that same row plus the pin, per `promotableToggleItem`.
|
|
28
|
-
*
|
|
29
|
-
* Deliberately not used by `synteny-core`'s "Show color legend", which sits
|
|
30
|
-
* inside a "Color by..." submenu where the bare word would not say which legend.
|
|
11
|
+
* `synteny-core`'s color-by legend has no toggle at all: it comes up with the
|
|
12
|
+
* modes that have a key and is dismissed from its own close button.
|
|
31
13
|
*/
|
|
32
14
|
/** #menuBuilder showLegendCheckboxItem | the shared "Show legend" checkbox */
|
|
33
15
|
export function showLegendCheckboxItem(checked, onToggle, opts) {
|
|
34
|
-
|
|
35
|
-
return pin
|
|
36
|
-
? promotableToggleItem({
|
|
37
|
-
label: 'Show legend',
|
|
38
|
-
checked,
|
|
39
|
-
onToggle,
|
|
40
|
-
pin,
|
|
41
|
-
...rest,
|
|
42
|
-
})
|
|
43
|
-
: checkboxItem('Show legend', checked, onToggle, rest);
|
|
16
|
+
return checkboxItem('Show legend', checked, onToggle, opts);
|
|
44
17
|
}
|
package/esm/ui/legendSpec.d.ts
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
1
|
+
import type { ShapeName } from '../util/markEncodingTypes.ts';
|
|
2
|
+
import type { RampStop } from './colorScale.ts';
|
|
3
3
|
export interface LegendSwatch {
|
|
4
4
|
color: string;
|
|
5
|
-
|
|
5
|
+
shape?: ShapeName;
|
|
6
|
+
}
|
|
7
|
+
export interface LegendGradient {
|
|
8
|
+
stops: RampStop[];
|
|
9
|
+
minLabel: string;
|
|
10
|
+
maxLabel: string;
|
|
6
11
|
}
|
|
7
12
|
export interface ColorLegendEntry {
|
|
8
13
|
key: string;
|
|
@@ -10,12 +15,13 @@ export interface ColorLegendEntry {
|
|
|
10
15
|
color?: string;
|
|
11
16
|
swatches?: LegendSwatch[];
|
|
12
17
|
hidden?: boolean;
|
|
13
|
-
|
|
18
|
+
gradient?: LegendGradient;
|
|
14
19
|
}
|
|
15
20
|
export interface LegendItem {
|
|
21
|
+
value?: string;
|
|
16
22
|
color?: string;
|
|
17
|
-
mark?: LegendMark;
|
|
18
23
|
swatches?: LegendSwatch[];
|
|
24
|
+
gradient?: LegendGradient;
|
|
19
25
|
label: string;
|
|
20
26
|
hidden?: boolean;
|
|
21
27
|
}
|
|
@@ -23,14 +29,15 @@ export declare function legendSwatches(item: LegendItem): LegendSwatch[];
|
|
|
23
29
|
export interface LegendSection {
|
|
24
30
|
id: string;
|
|
25
31
|
title?: string;
|
|
32
|
+
note?: string;
|
|
26
33
|
items: LegendItem[];
|
|
34
|
+
focusesRows?: boolean;
|
|
27
35
|
}
|
|
28
36
|
export interface LegendSpec {
|
|
29
37
|
title?: string;
|
|
30
|
-
|
|
31
|
-
sections?: LegendSection[];
|
|
38
|
+
sections: LegendSection[];
|
|
32
39
|
}
|
|
33
|
-
export declare function nonEmptyLegendSections(
|
|
40
|
+
export declare function nonEmptyLegendSections(sections: readonly LegendSection[]): LegendSection[];
|
|
34
41
|
export declare function legendEntries(spec: LegendSpec): ColorLegendEntry[];
|
|
35
42
|
/**
|
|
36
43
|
* How many rows a color key may have and still be one. Past this it is a list
|