@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,108 +0,0 @@
|
|
|
1
|
-
import type { AnyConfigurationModel } from './types.ts';
|
|
2
|
-
import type { IStateTreeNode } from '@jbrowse/mobx-state-tree';
|
|
3
|
-
/**
|
|
4
|
-
* Everything the cascade needs to read a promotable slot: the display type it
|
|
5
|
-
* keys the session-wide default on, and the config holding the track's own
|
|
6
|
-
* value. Every entry point takes this — `resolveConf`, the control builders,
|
|
7
|
-
* the worker snapshot, the badge diff — so each can take a display state node
|
|
8
|
-
* directly rather than through a cast.
|
|
9
|
-
*
|
|
10
|
-
* Read-only, and there is no write-capable variant. A `PromotableDisplay` used
|
|
11
|
-
* to exist for the one member the subsystem wrote (`setIgnorePromotedDefaults`,
|
|
12
|
-
* the received-session opt-out); with that flag gone the subsystem writes
|
|
13
|
-
* nothing to a display but a config slot, which `setConf` reaches through
|
|
14
|
-
* `configuration`.
|
|
15
|
-
*
|
|
16
|
-
* **`CONF` is a parameter rather than always `AnyConfigurationModel` because
|
|
17
|
-
* intersecting is not narrowing.** A caller wanting the cascade's members *and*
|
|
18
|
-
* a concrete schema — a mixin casting to reach its host — writes
|
|
19
|
-
* `ResolvableDisplay<XConfigModel>`. Spelling it
|
|
20
|
-
* `ResolvableDisplay & { configuration: XConfigModel }` instead reads identical
|
|
21
|
-
* and silently does the opposite: the intersected `configuration` is
|
|
22
|
-
* `AnyConfigurationModel & XConfigModel`, `ConfigurationSchemaForModel` infers
|
|
23
|
-
* the widened brand off it, and every slot name typechecks again. Two mixins
|
|
24
|
-
* shipped that spelling and only a sabotage found it.
|
|
25
|
-
*/
|
|
26
|
-
export type ResolvableDisplay<CONF extends AnyConfigurationModel = AnyConfigurationModel> = IStateTreeNode & {
|
|
27
|
-
type: string;
|
|
28
|
-
configuration: CONF;
|
|
29
|
-
};
|
|
30
|
-
/**
|
|
31
|
-
* Where the session-wide tier of the cascade is read from. Narrowed to the one
|
|
32
|
-
* method so the resolver doesn't depend on the whole session type — and exported
|
|
33
|
-
* for the same reason, so an entry point taking the store directly
|
|
34
|
-
* (`getTrackConfigWithPromotables`) can ask for what it uses instead of for a
|
|
35
|
-
* whole session a test then has to fake.
|
|
36
|
-
*/
|
|
37
|
-
export interface PromotedDefaultStore {
|
|
38
|
-
getDisplayTypeDefault: (displayType: string, slot: string) => unknown;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* The cascade's inputs, stated directly rather than read off a display state
|
|
42
|
-
* node. `ResolvableDisplay` is the usual way to supply them (see
|
|
43
|
-
* `cascadeContextFor`), but nothing here *needs* a state node: the About
|
|
44
|
-
* dialog's "Copy config" resolves a track's display configs directly, which is
|
|
45
|
-
* what lets it answer "what would this render as" for a track that was never
|
|
46
|
-
* opened. Reaching for the open display instead buys nothing — its
|
|
47
|
-
* `configuration` is the same node, and its `type` is that config's own.
|
|
48
|
-
*/
|
|
49
|
-
export interface CascadeContext {
|
|
50
|
-
config: AnyConfigurationModel;
|
|
51
|
-
displayType: string;
|
|
52
|
-
defaults: PromotedDefaultStore;
|
|
53
|
-
}
|
|
54
|
-
export declare function cascadeContextFor(self: ResolvableDisplay): CascadeContext;
|
|
55
|
-
/**
|
|
56
|
-
* What the slot literally holds, unevaluated — a stray `jexl:` string yields the
|
|
57
|
-
* raw string rather than running it. Both callers ask "is the slot set, and to
|
|
58
|
-
* what kind of thing?", which has to be answerable with no feature context.
|
|
59
|
-
*
|
|
60
|
-
* Deliberately not `readConfObject`: for a promotable slot this is the whole
|
|
61
|
-
* stored read, and both of that reader's extra behaviors are unwanted here — it
|
|
62
|
-
* evaluates a `jexl:` string (which `isUsableValue` refuses anyway) and it
|
|
63
|
-
* snapshots an MST-node value, which a `maybe*` slot never holds.
|
|
64
|
-
*/
|
|
65
|
-
export declare function storedSlotValue(config: AnyConfigurationModel, slot: string): unknown;
|
|
66
|
-
/**
|
|
67
|
-
* Whether `value` could actually become this slot's promoted default — the same
|
|
68
|
-
* `isUsableValue` gate the cascade puts both tiers through, asked ahead of time
|
|
69
|
-
* about a value a caller is about to offer as a pin's on-value.
|
|
70
|
-
*
|
|
71
|
-
* Exists because a pin built over a value the gate refuses is inert in a way
|
|
72
|
-
* nothing reports: `applyDefaultToggle` writes it to the session store happily,
|
|
73
|
-
* `resolveSlotIn` then drops it and every track keeps resolving to the tier
|
|
74
|
-
* below, and `isPromotableDefault` compares the *raw* stored value, so the pin
|
|
75
|
-
* draws outline forever while a dead key sits in the user's localStorage. See
|
|
76
|
-
* `makePin`, which is the one caller.
|
|
77
|
-
*/
|
|
78
|
-
export declare function isPromotableValue(config: AnyConfigurationModel, slot: string, value: unknown): boolean;
|
|
79
|
-
/**
|
|
80
|
-
* The outcome of walking the cascade for one slot: the two tiers that fed it,
|
|
81
|
-
* whether the track customized it, and the settled value.
|
|
82
|
-
*
|
|
83
|
-
* There is deliberately **no callback case** — a `jexl:` value fails
|
|
84
|
-
* `isUsableValue` like any other unusable value and degrades to the inherited
|
|
85
|
-
* one, so `value` is always readable. See `isUsableValue`.
|
|
86
|
-
*/
|
|
87
|
-
export interface SlotResolution {
|
|
88
|
-
/** value a track following the default shows with nothing promoted (CSS `initial`) */
|
|
89
|
-
base: unknown;
|
|
90
|
-
/** the raw session-wide promoted default, if any */
|
|
91
|
-
promoted: unknown;
|
|
92
|
-
/** track holds its own value rather than following the default */
|
|
93
|
-
customized: boolean;
|
|
94
|
-
/**
|
|
95
|
-
* the value came from the session-wide tier — the track follows the default
|
|
96
|
-
* *and* that default moves it off `base`. The "this display picked something
|
|
97
|
-
* up from the session" predicate, for the badge diff and the About dialog's
|
|
98
|
-
* copy-config note. A field rather than a `!customized && !deepEqual(value,
|
|
99
|
-
* base)` at each call site, because getting either half wrong is silent:
|
|
100
|
-
* dropping `customized` reports a customized track as inheriting, dropping
|
|
101
|
-
* the `base` compare flags a promoted default that changes nothing.
|
|
102
|
-
*/
|
|
103
|
-
inherited: boolean;
|
|
104
|
-
/** the final cascaded value (never the `undefined` inherit sentinel) */
|
|
105
|
-
value: unknown;
|
|
106
|
-
}
|
|
107
|
-
export declare function resolveSlot(self: ResolvableDisplay, slot: string): SlotResolution;
|
|
108
|
-
export declare function resolveSlotIn(ctx: CascadeContext, slot: string): SlotResolution;
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module
|
|
3
|
-
* The read-time resolver behind `promotable` config slots — a small CSS cascade
|
|
4
|
-
* for one slot: the track's own set value -> the session-wide default for its
|
|
5
|
-
* display type -> the slot's `promotedBase`. `resolveSlotIn` is the whole of it;
|
|
6
|
-
* `resolveConf` and the control builders in `promotableDefaults.ts` each read a
|
|
7
|
-
* field off the `SlotResolution` it returns.
|
|
8
|
-
*
|
|
9
|
-
* Mechanism: `agent-docs/reference/DISPLAY_TYPE_DEFAULTS.md`. Two decisions this
|
|
10
|
-
* file rests on: resolution is named at its call sites rather than folded into
|
|
11
|
-
* `getConf` (ADR-046), and unset is the only inherit sentinel — so declaring
|
|
12
|
-
* `promotedBase` is what makes a slot promotable (ADR-047, enforced by
|
|
13
|
-
* `ConfigSlot`).
|
|
14
|
-
*
|
|
15
|
-
* Every comparison against a promoted or base value is `deepEqual`, never `===`:
|
|
16
|
-
* an object-valued slot (`maybeFrozen`, e.g. alignments `colorBy`) reconstructs a
|
|
17
|
-
* fresh value out of MST that is never `===` its stored twin, so `===` would read
|
|
18
|
-
* it as permanently differing and no pin would ever light up.
|
|
19
|
-
*
|
|
20
|
-
* The gate a candidate value passes to count at all is `isUsableValue`, in
|
|
21
|
-
* `slotShape.ts` — shared with `ConfigSlot`, which applies it to `promotedBase`
|
|
22
|
-
* at construction so the tier this file falls back to is usable by construction.
|
|
23
|
-
*/
|
|
24
|
-
import { deepEqual } from '../util/deepEqual.js';
|
|
25
|
-
import { getSession } from '../util/mstUtils.js';
|
|
26
|
-
import { getSlotDefinition } from './slotFacade.js';
|
|
27
|
-
import { isUsableValue } from './slotShape.js';
|
|
28
|
-
export function cascadeContextFor(self) {
|
|
29
|
-
return {
|
|
30
|
-
config: self.configuration,
|
|
31
|
-
displayType: self.type,
|
|
32
|
-
defaults: getSession(self),
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* What the slot literally holds, unevaluated — a stray `jexl:` string yields the
|
|
37
|
-
* raw string rather than running it. Both callers ask "is the slot set, and to
|
|
38
|
-
* what kind of thing?", which has to be answerable with no feature context.
|
|
39
|
-
*
|
|
40
|
-
* Deliberately not `readConfObject`: for a promotable slot this is the whole
|
|
41
|
-
* stored read, and both of that reader's extra behaviors are unwanted here — it
|
|
42
|
-
* evaluates a `jexl:` string (which `isUsableValue` refuses anyway) and it
|
|
43
|
-
* snapshots an MST-node value, which a `maybe*` slot never holds.
|
|
44
|
-
*/
|
|
45
|
-
export function storedSlotValue(config, slot) {
|
|
46
|
-
return config[slot];
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Whether `value` could actually become this slot's promoted default — the same
|
|
50
|
-
* `isUsableValue` gate the cascade puts both tiers through, asked ahead of time
|
|
51
|
-
* about a value a caller is about to offer as a pin's on-value.
|
|
52
|
-
*
|
|
53
|
-
* Exists because a pin built over a value the gate refuses is inert in a way
|
|
54
|
-
* nothing reports: `applyDefaultToggle` writes it to the session store happily,
|
|
55
|
-
* `resolveSlotIn` then drops it and every track keeps resolving to the tier
|
|
56
|
-
* below, and `isPromotableDefault` compares the *raw* stored value, so the pin
|
|
57
|
-
* draws outline forever while a dead key sits in the user's localStorage. See
|
|
58
|
-
* `makePin`, which is the one caller.
|
|
59
|
-
*/
|
|
60
|
-
export function isPromotableValue(config, slot, value) {
|
|
61
|
-
return isUsableValue(getSlotDefinition(config, slot), value);
|
|
62
|
-
}
|
|
63
|
-
// The whole three-tier cascade for one slot, in one place. `resolveConf` is the
|
|
64
|
-
// public reader over it, and the control builders in `promotableDefaults.ts`
|
|
65
|
-
// read a field off it.
|
|
66
|
-
export function resolveSlot(self, slot) {
|
|
67
|
-
return resolveSlotIn(cascadeContextFor(self), slot);
|
|
68
|
-
}
|
|
69
|
-
// The cascade over explicit inputs. `resolveSlot` is the display-state spelling
|
|
70
|
-
// of this and the one nearly every consumer wants; the direct form exists for
|
|
71
|
-
// the config-only path (a track that isn't open has no display state — see
|
|
72
|
-
// `CascadeContext`).
|
|
73
|
-
export function resolveSlotIn(ctx, slot) {
|
|
74
|
-
const def = getSlotDefinition(ctx.config, slot);
|
|
75
|
-
// A plain slot would otherwise resolve silently wrong here — with no
|
|
76
|
-
// `promotedBase` every tier collapses to `undefined` — and, through a control
|
|
77
|
-
// builder, write a promoted default nothing ever reads. `getSlotDefinition`
|
|
78
|
-
// already throws on a slot name that doesn't exist at all.
|
|
79
|
-
//
|
|
80
|
-
// Declaring `promotedBase` is what makes a slot promotable, so its absence is
|
|
81
|
-
// the whole test; there is no separate flag that could disagree with it.
|
|
82
|
-
if (def.promotedBase === undefined) {
|
|
83
|
-
throw new Error(`config slot "${slot}" is not promotable`);
|
|
84
|
-
}
|
|
85
|
-
// the slot's CSS `initial`
|
|
86
|
-
const base = def.promotedBase;
|
|
87
|
-
// a session-wide fact, and `isPromotableDefault` (the pin's filled/outline
|
|
88
|
-
// state) reports on the session, not on one display's view of it
|
|
89
|
-
const promoted = ctx.defaults.getDisplayTypeDefault(ctx.displayType, slot);
|
|
90
|
-
const own = storedSlotValue(ctx.config, slot);
|
|
91
|
-
// A track is customized exactly when it holds a *usable* value — being unset
|
|
92
|
-
// is the inherit sentinel, so "set to something the slot could hold" is the
|
|
93
|
-
// whole test. Routing `own` through the same gate as a promoted default is
|
|
94
|
-
// what makes a malformed or stale own value (a saved `colorBy` naming a
|
|
95
|
-
// since-removed scheme) read as not-customized and degrade in lockstep,
|
|
96
|
-
// instead of reaching a consumer that trusts every value it sees.
|
|
97
|
-
const customized = isUsableValue(def, own);
|
|
98
|
-
const inheritedValue = isUsableValue(def, promoted) ? promoted : base;
|
|
99
|
-
// A customized value wins unconditionally, which is what makes the share bake
|
|
100
|
-
// sufficient on its own: a baked value lands in the track's config, so the
|
|
101
|
-
// recipient reads it as customized and their own promoted default never gets
|
|
102
|
-
// consulted. The one case a bake cannot cover is the sender sitting at `base`
|
|
103
|
-
// while the recipient has promoted something — nothing is baked (the value
|
|
104
|
-
// *is* base, and `stripDefault` drops it from the snapshot), so the recipient
|
|
105
|
-
// resolves it from their own cascade. That is accepted: a promoted default is
|
|
106
|
-
// personal and local, exactly like the theme a session is viewed in, and the
|
|
107
|
-
// alternative was a per-display `ignorePromotedDefaults` flag that also
|
|
108
|
-
// detached received tracks from the recipient's own pins for good.
|
|
109
|
-
const value = customized ? own : inheritedValue;
|
|
110
|
-
return {
|
|
111
|
-
base,
|
|
112
|
-
customized,
|
|
113
|
-
promoted,
|
|
114
|
-
inherited: !customized && !deepEqual(value, base),
|
|
115
|
-
value,
|
|
116
|
-
};
|
|
117
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { AnyConfigurationModel } from './types.ts';
|
|
2
|
-
import type { IAnyType } from '@jbrowse/mobx-state-tree';
|
|
3
|
-
/**
|
|
4
|
-
* Takes a live config node *or* the schema type itself, for the reason
|
|
5
|
-
* `getConfigurationSchemaDefinition` does: every resolver here holds a node,
|
|
6
|
-
* while a caller enumerating registered display types
|
|
7
|
-
* (`displayTypesWithPromotableSlots`) holds only `DisplayType.configSchema` and
|
|
8
|
-
* has nothing to create a node from. Caching under whichever handle it was
|
|
9
|
-
* given is safe — a schema registers both its outer `stripDefault` wrapper and
|
|
10
|
-
* its inner model against the same slot table, so the two entries agree.
|
|
11
|
-
*/
|
|
12
|
-
export declare function promotableSlotNames(configOrType: AnyConfigurationModel | IAnyType): ReadonlySet<string>;
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { getType, isType } from '@jbrowse/mobx-state-tree';
|
|
2
|
-
import { getConfigurationSchemaDefinition } from './schemaRegistry.js';
|
|
3
|
-
import { isSlotDefinitionEntry } from './schemaTypes.js';
|
|
4
|
-
// The `promotable` slot names of one config schema (includes slots inherited via
|
|
5
|
-
// baseConfiguration — merged into the table at construction), cached by MST type
|
|
6
|
-
// since a schema's slot table is fixed.
|
|
7
|
-
//
|
|
8
|
-
// Only the functions that genuinely *enumerate* promotable slots call this — the
|
|
9
|
-
// worker-payload resolver, the badge diff, "clear every default", and
|
|
10
|
-
// `assertNoPromotableSlots`. It is deliberately NOT on any read path:
|
|
11
|
-
// `getConf` used to consult it on all ~1300 config reads in the repo to decide
|
|
12
|
-
// whether to cascade, which cost a `getType` per read (measured at ~60% overhead
|
|
13
|
-
// over `readConfObject`) to serve the ~15 promotable ones. `resolveConf` names
|
|
14
|
-
// the cascade at the call site instead, so there is nothing to look up.
|
|
15
|
-
//
|
|
16
|
-
// Its own module, and a leaf one, because `ui/promotablePinCoverage.ts` wants
|
|
17
|
-
// the slot names and nothing else: reaching them through a module that also held
|
|
18
|
-
// `readConfObject` pulled jexl and the whole read path into the ui graph. See the
|
|
19
|
-
// note on that export in `ui/index.ts`.
|
|
20
|
-
const promotableSlotsByType = new WeakMap();
|
|
21
|
-
/**
|
|
22
|
-
* Takes a live config node *or* the schema type itself, for the reason
|
|
23
|
-
* `getConfigurationSchemaDefinition` does: every resolver here holds a node,
|
|
24
|
-
* while a caller enumerating registered display types
|
|
25
|
-
* (`displayTypesWithPromotableSlots`) holds only `DisplayType.configSchema` and
|
|
26
|
-
* has nothing to create a node from. Caching under whichever handle it was
|
|
27
|
-
* given is safe — a schema registers both its outer `stripDefault` wrapper and
|
|
28
|
-
* its inner model against the same slot table, so the two entries agree.
|
|
29
|
-
*/
|
|
30
|
-
export function promotableSlotNames(configOrType) {
|
|
31
|
-
const type = isType(configOrType) ? configOrType : getType(configOrType);
|
|
32
|
-
const cached = promotableSlotsByType.get(type);
|
|
33
|
-
if (cached) {
|
|
34
|
-
return cached;
|
|
35
|
-
}
|
|
36
|
-
const names = new Set();
|
|
37
|
-
const table = getConfigurationSchemaDefinition(configOrType);
|
|
38
|
-
for (const [name, def] of Object.entries(table ?? {})) {
|
|
39
|
-
if (isSlotDefinitionEntry(def) && def.promotedBase !== undefined) {
|
|
40
|
-
names.add(name);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
promotableSlotsByType.set(type, names);
|
|
44
|
-
return names;
|
|
45
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { ConfigSlotDefinition } from './configurationSlot.ts';
|
|
2
|
-
/**
|
|
3
|
-
* Whether a stored value could really be a value of this slot. An unusable value
|
|
4
|
-
* is dropped by the cascade, so the getter, the pin and the badge all fall back
|
|
5
|
-
* in lockstep.
|
|
6
|
-
*
|
|
7
|
-
* The `jexl:` check is the only place the subsystem handles a callback, and it
|
|
8
|
-
* handles it by refusing it — a hand-edited config or default store is untyped,
|
|
9
|
-
* and a callback string would otherwise reach a renderer as a literal value.
|
|
10
|
-
* DISPLAY_TYPE_DEFAULTS.md §"No callbacks".
|
|
11
|
-
*/
|
|
12
|
-
export declare function isUsableValue(def: ConfigSlotDefinition, value: unknown): boolean;
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module
|
|
3
|
-
* The one gate a candidate value for a `promotable` slot has to pass. Shared,
|
|
4
|
-
* deliberately, by the two places that ask the question:
|
|
5
|
-
*
|
|
6
|
-
* - `promotableResolve.ts` at read time, for both cascade tiers — a session-wide
|
|
7
|
-
* promoted default and a track's own value out of an untyped saved snapshot;
|
|
8
|
-
* - `configurationSlot.ts` at construction, for the slot's own `promotedBase`.
|
|
9
|
-
*
|
|
10
|
-
* One implementation is what makes "the base is always a usable value" true by
|
|
11
|
-
* construction rather than assumed: the resolver falls back to `promotedBase`
|
|
12
|
-
* whenever a tier fails this gate, so a base that would itself fail has nowhere
|
|
13
|
-
* left to fall.
|
|
14
|
-
*/
|
|
15
|
-
import { getEnumerationValues } from '../util/mst-reflection.js';
|
|
16
|
-
import { isCallbackValue } from './slotValueUtils.js';
|
|
17
|
-
// Per-slot-type JS shape checks, for the slot types whose value needs more than
|
|
18
|
-
// a `typeof` against `promotedBase`. Only the `maybe*` types appear, because
|
|
19
|
-
// `ConfigSlot` rejects a `promotedBase` on anything else and this table is only
|
|
20
|
-
// ever consulted for a promotable slot. Any type absent here (`maybeBoolean`,
|
|
21
|
-
// `maybeColor`, `maybeFrozen`) falls through to the `promotedBase`-derived check
|
|
22
|
-
// in `matchesSlotShape`.
|
|
23
|
-
const SHAPE_CHECKS = {
|
|
24
|
-
// a bare `typeof value === 'number'` would admit `NaN`/`±Infinity`, which no
|
|
25
|
-
// slot legitimately holds
|
|
26
|
-
maybeNumber: value => Number.isFinite(value),
|
|
27
|
-
// a `maybeStringEnum` with no `model` can't be membership-checked; reject
|
|
28
|
-
// rather than admit any string. `def.model` is the author's plain enumeration
|
|
29
|
-
// (ConfigSlot adds the nullability), so this reads the real vocabulary.
|
|
30
|
-
maybeStringEnum: (value, def) => !!def.model &&
|
|
31
|
-
typeof value === 'string' &&
|
|
32
|
-
getEnumerationValues(def.model).includes(value),
|
|
33
|
-
};
|
|
34
|
-
/**
|
|
35
|
-
* Whether `value` has a JS shape this slot could hold. Guards the untyped
|
|
36
|
-
* session store / saved snapshot against garbage; not a full validation
|
|
37
|
-
* (`validate` layers semantics on top).
|
|
38
|
-
*
|
|
39
|
-
* Module-private on purpose: `isUsableValue` is the gate, and this is only one
|
|
40
|
-
* of its four checks. A caller reaching for the shape test alone would skip the
|
|
41
|
-
* `jexl:` refusal and the slot's `validate` hook — the two checks that exist
|
|
42
|
-
* precisely because a shape-valid value can still be unusable.
|
|
43
|
-
*
|
|
44
|
-
* Keyed off `promotedBase` because that is the only concrete specimen of the
|
|
45
|
-
* slot's value space a promotable slot declares — `defaultValue` is always the
|
|
46
|
-
* inherit sentinel, so keying off it would demand `typeof value === 'undefined'`.
|
|
47
|
-
* A `promotedBase` checked against itself therefore only exercises the
|
|
48
|
-
* `SHAPE_CHECKS` entries, which is exactly the half that can be authored wrong
|
|
49
|
-
* (an enum member that isn't in the vocabulary, a non-finite number).
|
|
50
|
-
*
|
|
51
|
-
* Can't delegate to the slot's MST `model.is(value)`, which is too permissive
|
|
52
|
-
* exactly where this guard matters — `slotShape.test.ts` pins the two cases.
|
|
53
|
-
*/
|
|
54
|
-
function matchesSlotShape(def, value) {
|
|
55
|
-
const { promotedBase } = def;
|
|
56
|
-
const check = SHAPE_CHECKS[def.type];
|
|
57
|
-
return check
|
|
58
|
-
? check(value, def)
|
|
59
|
-
: typeof promotedBase === 'object' && promotedBase !== null
|
|
60
|
-
? // object/array slot (e.g. `colorBy`): match null-ness and array-ness —
|
|
61
|
-
// a bare `typeof` compare would admit `null` (typeof null === 'object')
|
|
62
|
-
// and an array against an object base
|
|
63
|
-
typeof value === 'object' &&
|
|
64
|
-
value !== null &&
|
|
65
|
-
Array.isArray(value) === Array.isArray(promotedBase)
|
|
66
|
-
: typeof value === typeof promotedBase;
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Whether a stored value could really be a value of this slot. An unusable value
|
|
70
|
-
* is dropped by the cascade, so the getter, the pin and the badge all fall back
|
|
71
|
-
* in lockstep.
|
|
72
|
-
*
|
|
73
|
-
* The `jexl:` check is the only place the subsystem handles a callback, and it
|
|
74
|
-
* handles it by refusing it — a hand-edited config or default store is untyped,
|
|
75
|
-
* and a callback string would otherwise reach a renderer as a literal value.
|
|
76
|
-
* DISPLAY_TYPE_DEFAULTS.md §"No callbacks".
|
|
77
|
-
*/
|
|
78
|
-
export function isUsableValue(def, value) {
|
|
79
|
-
const { validate } = def;
|
|
80
|
-
return (value !== undefined &&
|
|
81
|
-
!isCallbackValue(value) &&
|
|
82
|
-
matchesSlotShape(def, value) &&
|
|
83
|
-
(!validate || validate(value)));
|
|
84
|
-
}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import type { HighlightType } from '../../util/highlights.ts';
|
|
2
|
-
/**
|
|
3
|
-
* #stateModel HighlightsMixin
|
|
4
|
-
* #category view
|
|
5
|
-
*
|
|
6
|
-
* The `view.highlight` band state shared verbatim by the LinearGenomeView and
|
|
7
|
-
* DotplotView: an array of translucent highlight regions plus the
|
|
8
|
-
* `showHighlightChips` toggle for their interactive chips. Both views compose
|
|
9
|
-
* this so the props and actions stay identical by construction rather than by
|
|
10
|
-
* two hand-kept copies. Visibility across all views is the session-wide
|
|
11
|
-
* `highlightsVisible` flag (on BaseSession), not a prop here.
|
|
12
|
-
*/
|
|
13
|
-
export default function HighlightsMixin(): import("@jbrowse/mobx-state-tree").IModelType<{
|
|
14
|
-
/**
|
|
15
|
-
* #property
|
|
16
|
-
* translucent highlight bands, seeded from URL params or session JSON and
|
|
17
|
-
* added interactively via the rubber-band menu
|
|
18
|
-
*/
|
|
19
|
-
highlight: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").IArrayType<import("@jbrowse/mobx-state-tree").IType<HighlightType, HighlightType, HighlightType>>, [undefined]>;
|
|
20
|
-
/**
|
|
21
|
-
* #property
|
|
22
|
-
* pins the interactive highlight chip (link icon + context menu) to every
|
|
23
|
-
* highlight band; off by default, where a band instead reveals its chip
|
|
24
|
-
* while the pointer is in it. This is what a screenshot needs, since
|
|
25
|
-
* nothing hovers in one
|
|
26
|
-
*/
|
|
27
|
-
showHighlightChips: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
28
|
-
}, {
|
|
29
|
-
/**
|
|
30
|
-
* #action
|
|
31
|
-
*/
|
|
32
|
-
addToHighlights(highlight: HighlightType): void;
|
|
33
|
-
/**
|
|
34
|
-
* #action
|
|
35
|
-
*/
|
|
36
|
-
setHighlight(highlight?: HighlightType[]): void;
|
|
37
|
-
/**
|
|
38
|
-
* #action
|
|
39
|
-
*/
|
|
40
|
-
removeHighlight(highlight: HighlightType): void;
|
|
41
|
-
/**
|
|
42
|
-
* #action
|
|
43
|
-
*/
|
|
44
|
-
updateHighlight(old: HighlightType, updates: Partial<HighlightType>): void;
|
|
45
|
-
/**
|
|
46
|
-
* #action
|
|
47
|
-
*/
|
|
48
|
-
setShowHighlightChips(arg: boolean): void;
|
|
49
|
-
} & {
|
|
50
|
-
afterAttach(): void;
|
|
51
|
-
}, import("@jbrowse/mobx-state-tree")._NotCustomized, import("@jbrowse/mobx-state-tree")._NotCustomized>;
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { cast, types } from '@jbrowse/mobx-state-tree';
|
|
2
|
-
import { revealHighlightsOnGrowth } from '../../util/highlights.js';
|
|
3
|
-
import { getSession } from '../../util/index.js';
|
|
4
|
-
/**
|
|
5
|
-
* #stateModel HighlightsMixin
|
|
6
|
-
* #category view
|
|
7
|
-
*
|
|
8
|
-
* The `view.highlight` band state shared verbatim by the LinearGenomeView and
|
|
9
|
-
* DotplotView: an array of translucent highlight regions plus the
|
|
10
|
-
* `showHighlightChips` toggle for their interactive chips. Both views compose
|
|
11
|
-
* this so the props and actions stay identical by construction rather than by
|
|
12
|
-
* two hand-kept copies. Visibility across all views is the session-wide
|
|
13
|
-
* `highlightsVisible` flag (on BaseSession), not a prop here.
|
|
14
|
-
*/
|
|
15
|
-
export default function HighlightsMixin() {
|
|
16
|
-
return types
|
|
17
|
-
.model({
|
|
18
|
-
/**
|
|
19
|
-
* #property
|
|
20
|
-
* translucent highlight bands, seeded from URL params or session JSON and
|
|
21
|
-
* added interactively via the rubber-band menu
|
|
22
|
-
*/
|
|
23
|
-
highlight: types.stripDefault(types.array(types.frozen()), []),
|
|
24
|
-
/**
|
|
25
|
-
* #property
|
|
26
|
-
* pins the interactive highlight chip (link icon + context menu) to every
|
|
27
|
-
* highlight band; off by default, where a band instead reveals its chip
|
|
28
|
-
* while the pointer is in it. This is what a screenshot needs, since
|
|
29
|
-
* nothing hovers in one
|
|
30
|
-
*/
|
|
31
|
-
showHighlightChips: types.stripDefault(types.boolean, false),
|
|
32
|
-
})
|
|
33
|
-
.actions(self => ({
|
|
34
|
-
/**
|
|
35
|
-
* #action
|
|
36
|
-
*/
|
|
37
|
-
addToHighlights(highlight) {
|
|
38
|
-
self.highlight.push(highlight);
|
|
39
|
-
},
|
|
40
|
-
/**
|
|
41
|
-
* #action
|
|
42
|
-
*/
|
|
43
|
-
setHighlight(highlight) {
|
|
44
|
-
self.highlight = cast(highlight);
|
|
45
|
-
},
|
|
46
|
-
/**
|
|
47
|
-
* #action
|
|
48
|
-
*/
|
|
49
|
-
removeHighlight(highlight) {
|
|
50
|
-
self.highlight.remove(highlight);
|
|
51
|
-
},
|
|
52
|
-
/**
|
|
53
|
-
* #action
|
|
54
|
-
*/
|
|
55
|
-
updateHighlight(old, updates) {
|
|
56
|
-
const idx = self.highlight.indexOf(old);
|
|
57
|
-
if (idx !== -1) {
|
|
58
|
-
self.highlight[idx] = { ...old, ...updates };
|
|
59
|
-
// reachable from the highlight grid, which lists entries even with
|
|
60
|
-
// the bands off, so recoloring there would otherwise do nothing
|
|
61
|
-
// visible. Not a growth, so revealHighlightsOnGrowth can't see it
|
|
62
|
-
getSession(self).revealHighlights();
|
|
63
|
-
}
|
|
64
|
-
},
|
|
65
|
-
/**
|
|
66
|
-
* #action
|
|
67
|
-
*/
|
|
68
|
-
setShowHighlightChips(arg) {
|
|
69
|
-
self.showHighlightChips = arg;
|
|
70
|
-
},
|
|
71
|
-
}))
|
|
72
|
-
.actions(self => ({
|
|
73
|
-
afterAttach() {
|
|
74
|
-
// covers the rubber-band menu, dotplot drag and URL init alike
|
|
75
|
-
revealHighlightsOnGrowth(self, () => self.highlight.length);
|
|
76
|
-
},
|
|
77
|
-
}));
|
|
78
|
-
}
|
package/esm/ui/PinAdornment.d.ts
DELETED
package/esm/ui/PinAdornment.js
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import PushPinIcon from '@mui/icons-material/PushPin';
|
|
3
|
-
import PushPinOutlinedIcon from '@mui/icons-material/PushPinOutlined';
|
|
4
|
-
import { ToggleButton, Tooltip } from '@mui/material';
|
|
5
|
-
import { makeStyles } from '../util/tss-react/index.js';
|
|
6
|
-
const useStyles = makeStyles()(theme => ({
|
|
7
|
-
// compact enough to sit inline with the value check: drop the default
|
|
8
|
-
// ToggleButton border/padding so it's ~icon-sized, but keep the selected
|
|
9
|
-
// background tint (an unmistakable on/off signal, unlike a hollow-vs-filled
|
|
10
|
-
// icon alone)
|
|
11
|
-
button: {
|
|
12
|
-
border: 0,
|
|
13
|
-
padding: theme.spacing(0.25),
|
|
14
|
-
},
|
|
15
|
-
// the Tooltip listens on this rather than on the button, which fires no
|
|
16
|
-
// events once the row disables it
|
|
17
|
-
wrapper: {
|
|
18
|
-
display: 'inline-flex',
|
|
19
|
-
},
|
|
20
|
-
}));
|
|
21
|
-
// How the pin names what it acts on. Two shapes, decided by the on-value:
|
|
22
|
-
//
|
|
23
|
-
// - **A boolean on-value carries a state**, and the row's label names the
|
|
24
|
-
// setting rather than a value ("Show legend", "Show soft clipping"). A pin on
|
|
25
|
-
// an unchecked such row applies the setting *off*, so the value-shaped copy
|
|
26
|
-
// below stated the opposite of what the click does — and then, once filled,
|
|
27
|
-
// claimed the setting was on by default when it had just been turned off.
|
|
28
|
-
// - **Everything else IS what the label says**: a radio option ("Compact"), a
|
|
29
|
-
// size row whose caller folds the value into the label ("Line width (2px)").
|
|
30
|
-
//
|
|
31
|
-
// One `typeof` rather than a flag on the row, because the two forms of
|
|
32
|
-
// `makePin` are exactly this distinction: a symmetric pin over a `maybeBoolean`
|
|
33
|
-
// slot is the only way a pin's value and its label can disagree.
|
|
34
|
-
function pinPredicate(onValue) {
|
|
35
|
-
return typeof onValue === 'boolean'
|
|
36
|
-
? `${onValue ? 'on' : 'off'} by default`
|
|
37
|
-
: 'the default';
|
|
38
|
-
}
|
|
39
|
-
// The click, which is not the state the pin draws: an outline pin applies the
|
|
40
|
-
// value to the open tracks, a filled one clears the default it stands for.
|
|
41
|
-
function pinCopy(label, onValue, isDefault) {
|
|
42
|
-
return isDefault
|
|
43
|
-
? {
|
|
44
|
-
title: `${label} is ${pinPredicate(onValue)} for all tracks of this type (click to clear)`,
|
|
45
|
-
ariaLabel: `clear the default for ${label}`,
|
|
46
|
-
}
|
|
47
|
-
: typeof onValue === 'boolean'
|
|
48
|
-
? {
|
|
49
|
-
title: `Turn ${label} ${onValue ? 'on' : 'off'} for all open tracks of this type`,
|
|
50
|
-
ariaLabel: `turn ${label} ${onValue ? 'on' : 'off'} for all open tracks`,
|
|
51
|
-
}
|
|
52
|
-
: {
|
|
53
|
-
title: `Apply ${label} to all open tracks of this type`,
|
|
54
|
-
ariaLabel: `apply ${label} to all open tracks`,
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
// Trailing pin for a promotable setting, rendered as a menu item's
|
|
58
|
-
// `endAdornment` beside the value check. A ToggleButton (native button a11y + a
|
|
59
|
-
// clear selected tint) with a pin — distinct from the value checkbox.
|
|
60
|
-
//
|
|
61
|
-
// **The click and the state are two different things.** One click writes the
|
|
62
|
-
// value into every open track of this display type and raises a snackbar
|
|
63
|
-
// offering to keep it as the display type's default; the filled pin means that
|
|
64
|
-
// default is in place, so a click on a filled pin clears it and touches no
|
|
65
|
-
// track. A default therefore takes two deliberate clicks, which is what it costs
|
|
66
|
-
// to govern every track of the type opened later (ADR-048). Always shown so the
|
|
67
|
-
// capability is discoverable. stopPropagation keeps the click off the row value
|
|
68
|
-
// / menu dismissal. "of this type" because a promoted default is scoped to the
|
|
69
|
-
// display type (e.g. every LinearAlignmentsDisplay), not literally all tracks.
|
|
70
|
-
export function PinAdornment({ pin, disabled, }) {
|
|
71
|
-
const { classes } = useStyles();
|
|
72
|
-
const { label, control } = pin;
|
|
73
|
-
const isDefault = control.active;
|
|
74
|
-
const { title, ariaLabel } = pinCopy(label, control.onValue, isDefault);
|
|
75
|
-
return (_jsx(Tooltip, { title: title, children: _jsx("span", { className: classes.wrapper, children: _jsx(ToggleButton, { className: classes.button, value: "default", disabled: disabled, selected: isDefault, color: "primary", size: "small", "aria-label": ariaLabel, onChange: e => {
|
|
76
|
-
e.stopPropagation();
|
|
77
|
-
control.toggle();
|
|
78
|
-
}, children: isDefault ? (_jsx(PushPinIcon, { fontSize: "small" })) : (_jsx(PushPinOutlinedIcon, { fontSize: "small" })) }) }) }));
|
|
79
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
export interface GradientStop {
|
|
2
|
-
offset: string;
|
|
3
|
-
color: string;
|
|
4
|
-
opacity?: number;
|
|
5
|
-
}
|
|
6
|
-
export interface GradientLabel {
|
|
7
|
-
text: string;
|
|
8
|
-
position: 'start' | 'middle' | 'end';
|
|
9
|
-
}
|
|
10
|
-
export declare const GRADIENT_LEGEND_WIDTH = 120;
|
|
11
|
-
export declare const GRADIENT_LEGEND_HEIGHT = 40;
|
|
12
|
-
export declare const GRADIENT_LEGEND_SVG_AREA_WIDTH: number;
|
|
13
|
-
export default function SvgGradientLegend({ gradientId, stops, labels, title, x, y, width, height, barWidth, barHeight, padding, fontSize, }: {
|
|
14
|
-
gradientId: string;
|
|
15
|
-
stops: GradientStop[];
|
|
16
|
-
labels: GradientLabel[];
|
|
17
|
-
title?: string;
|
|
18
|
-
x?: number;
|
|
19
|
-
y?: number;
|
|
20
|
-
width?: number;
|
|
21
|
-
height?: number;
|
|
22
|
-
barWidth?: number;
|
|
23
|
-
barHeight?: number;
|
|
24
|
-
padding?: number;
|
|
25
|
-
fontSize?: number;
|
|
26
|
-
}): import("react").JSX.Element;
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
/* eslint-disable react-refresh/only-export-components -- layout constants belong with this leaf SVG primitive; no component state to fast-refresh */
|
|
3
|
-
import { svgSafeId } from '../svg/svgId.js';
|
|
4
|
-
// Default box/bar geometry shared by the LD and Hi-C legends. Exported so
|
|
5
|
-
// callers that size an outer container (an <svg> wrapper) or compute an offset
|
|
6
|
-
// stay in lockstep with what this component draws.
|
|
7
|
-
export const GRADIENT_LEGEND_WIDTH = 120;
|
|
8
|
-
export const GRADIENT_LEGEND_HEIGHT = 40;
|
|
9
|
-
// Horizontal space a display should reserve (via `svgLegendWidth()`) to park
|
|
10
|
-
// this legend beside the plot in an SVG export: the bar itself plus a 10px
|
|
11
|
-
// margin either side.
|
|
12
|
-
export const GRADIENT_LEGEND_SVG_AREA_WIDTH = GRADIENT_LEGEND_WIDTH + 20;
|
|
13
|
-
// Shared SVG color-ramp key: a rounded translucent box, a horizontal gradient
|
|
14
|
-
// bar, and labels below it. Used by any display that colors by a continuous
|
|
15
|
-
// scale (Hi-C contact counts, LD r²/D'). Renders a <g>; position via x/y.
|
|
16
|
-
export default function SvgGradientLegend({ gradientId, stops, labels, title, x = 0, y = 0, width = GRADIENT_LEGEND_WIDTH, height = GRADIENT_LEGEND_HEIGHT, barWidth = 100, barHeight = 12, padding = 8, fontSize = 10, }) {
|
|
17
|
-
const titleGap = title ? fontSize + 4 : 0;
|
|
18
|
-
const barY = padding + titleGap;
|
|
19
|
-
const labelY = barY + barHeight + fontSize + 2;
|
|
20
|
-
const safeGradientId = svgSafeId(gradientId);
|
|
21
|
-
return (_jsxs("g", { transform: `translate(${x}, ${y})`, children: [_jsx("defs", { children: _jsx("linearGradient", { id: safeGradientId, x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: stops.map(stop => (_jsx("stop", { offset: stop.offset, style: { stopColor: stop.color, stopOpacity: stop.opacity ?? 1 } }, stop.offset))) }) }), _jsx("rect", { x: 0, y: 0, width: width, height: height + titleGap, fill: "rgba(255,255,255,0.95)", stroke: "#ccc", strokeWidth: 1, rx: 4 }), title ? (_jsx("text", { x: padding, y: padding + fontSize, fontSize: fontSize, fill: "black", children: title })) : null, _jsx("rect", { x: padding, y: barY, width: barWidth, height: barHeight, fill: `url(#${safeGradientId})`, rx: 2 }), labels.map(label => (_jsx("text", { x: label.position === 'start'
|
|
22
|
-
? padding
|
|
23
|
-
: label.position === 'middle'
|
|
24
|
-
? padding + barWidth / 2
|
|
25
|
-
: padding + barWidth, y: labelY, fontSize: fontSize, fill: "black", textAnchor: label.position === 'start' ? undefined : label.position, children: label.text }, `${label.position}-${label.text}`)))] }));
|
|
26
|
-
}
|