@jbrowse/core 5.0.0-beta.1 → 5.0.0-beta.10
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 +1476 -265
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +5 -3
- 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 +16 -9
- 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 +50 -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/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 +2 -2
- 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 +528 -0
- package/esm/ReExports/coreWorkerModules.generated.d.ts +2 -0
- package/esm/ReExports/coreWorkerModules.generated.js +488 -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 +527 -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 +24 -11
- package/esm/configuration/index.js +15 -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/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 +46 -16
- package/esm/pluggableElementTypes/DisplayType.js +22 -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/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 +1 -1
- package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +19 -9
- package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +65 -27
- package/esm/pluggableElementTypes/models/BaseDisplayModel.js +72 -10
- package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +65 -16
- package/esm/pluggableElementTypes/models/BaseTrackModel.js +179 -117
- package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +85 -16
- package/esm/pluggableElementTypes/models/BaseViewModel.js +53 -10
- 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 -49
- 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/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/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 +1 -1
- package/esm/util/cachedSetup.js +2 -2
- package/esm/util/categoricalField.d.ts +56 -0
- package/esm/util/categoricalField.js +73 -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/{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 +80 -0
- package/esm/util/featureTransforms.js +1579 -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/freezeDeep.d.ts +8 -10
- package/esm/util/freezeDeep.js +8 -10
- package/esm/util/groupKeys.d.ts +77 -0
- package/esm/util/groupKeys.js +155 -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/io/index.js +19 -14
- 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 +20 -27
- package/esm/util/jexlFilters.js +23 -11
- 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/localStorage.js +4 -4
- package/esm/util/markEncoding.d.ts +150 -0
- package/esm/util/markEncoding.js +845 -0
- package/esm/util/markEncodingTypes.d.ts +588 -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/starFusion.d.ts +26 -0
- package/esm/util/starFusion.js +37 -0
- package/esm/util/stepTables.d.ts +82 -0
- package/esm/util/stepTables.js +243 -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 +13 -8
- package/esm/util/tabix.js +17 -12
- 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 +121 -40
- package/esm/util/tracks.js +497 -112
- 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 +51 -0
- package/esm/util/unknownSnapshotKeys.js +82 -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/usePanelVirtualScroll.d.ts +7 -35
- package/esm/util/usePanelVirtualScroll.js +9 -36
- 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/withLaunchInput.d.ts +174 -0
- package/esm/util/withLaunchInput.js +274 -0
- package/package.json +70 -20
- 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,32 +0,0 @@
|
|
|
1
|
-
import type { MouseTracker } from './useMouseTracking.ts';
|
|
2
|
-
export declare const OverlayPointerProvider: import("react").Provider<MouseTracker | undefined>;
|
|
3
|
-
/**
|
|
4
|
-
* The stripe a band occupies: an x span across a full-height band, a y span
|
|
5
|
-
* across a full-width one. The other axis is the whole overlay, which is why it
|
|
6
|
-
* isn't here.
|
|
7
|
-
*/
|
|
8
|
-
export type HighlightStripe = {
|
|
9
|
-
left: number;
|
|
10
|
-
width: number;
|
|
11
|
-
} | {
|
|
12
|
-
top: number;
|
|
13
|
-
height: number;
|
|
14
|
-
};
|
|
15
|
-
/**
|
|
16
|
-
* Whether a band should be drawing its chip, and the `setOpen` that keeps it
|
|
17
|
-
* drawn while its menu is up.
|
|
18
|
-
*
|
|
19
|
-
* A band reveals its chip while the pointer is in its stripe, so the highlight's
|
|
20
|
-
* menu is reachable where the highlight is rather than only from the view menu,
|
|
21
|
-
* and a view full of bands is not also a view full of link icons. `persistent`
|
|
22
|
-
* is the `showHighlightChips` pin, which a screenshot needs because nothing
|
|
23
|
-
* hovers in one.
|
|
24
|
-
*
|
|
25
|
-
* The menu is the reason this owns state at all: it is portalled out of the
|
|
26
|
-
* band, so opening it moves the pointer off the stripe that revealed it, and
|
|
27
|
-
* unmounting the chip under an open menu takes the menu's own anchor with it.
|
|
28
|
-
*/
|
|
29
|
-
export declare function useHighlightChip(stripe: HighlightStripe | undefined, persistent: boolean): {
|
|
30
|
-
chipVisible: boolean;
|
|
31
|
-
setMenuOpen: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
32
|
-
};
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { createContext, use, useState } from 'react';
|
|
2
|
-
import { useMouseSelector } from './useMouseTracking.js';
|
|
3
|
-
/**
|
|
4
|
-
* The pointer over the surface a view's highlight bands are positioned in — the
|
|
5
|
-
* LinearGenomeView's tracks container, the DotplotView's plot area. Published by
|
|
6
|
-
* whichever of those bound the handlers.
|
|
7
|
-
*
|
|
8
|
-
* A context rather than a prop because a band is often drawn by another plugin
|
|
9
|
-
* through an extension point (grid-bookmark's bookmark bands), and those carry
|
|
10
|
-
* only their `{ model }` props bag — the band families are siblings on screen
|
|
11
|
-
* and would otherwise reach the pointer two different ways.
|
|
12
|
-
*/
|
|
13
|
-
const OverlayPointerContext = createContext(undefined);
|
|
14
|
-
export const OverlayPointerProvider = OverlayPointerContext.Provider;
|
|
15
|
-
function pointerInStripe(stripe, state) {
|
|
16
|
-
return 'left' in stripe
|
|
17
|
-
? state.x >= stripe.left && state.x < stripe.left + stripe.width
|
|
18
|
-
: state.y >= stripe.top && state.y < stripe.top + stripe.height;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Whether a band should be drawing its chip, and the `setOpen` that keeps it
|
|
22
|
-
* drawn while its menu is up.
|
|
23
|
-
*
|
|
24
|
-
* A band reveals its chip while the pointer is in its stripe, so the highlight's
|
|
25
|
-
* menu is reachable where the highlight is rather than only from the view menu,
|
|
26
|
-
* and a view full of bands is not also a view full of link icons. `persistent`
|
|
27
|
-
* is the `showHighlightChips` pin, which a screenshot needs because nothing
|
|
28
|
-
* hovers in one.
|
|
29
|
-
*
|
|
30
|
-
* The menu is the reason this owns state at all: it is portalled out of the
|
|
31
|
-
* band, so opening it moves the pointer off the stripe that revealed it, and
|
|
32
|
-
* unmounting the chip under an open menu takes the menu's own anchor with it.
|
|
33
|
-
*/
|
|
34
|
-
export function useHighlightChip(stripe, persistent) {
|
|
35
|
-
const tracker = use(OverlayPointerContext);
|
|
36
|
-
const [menuOpen, setMenuOpen] = useState(false);
|
|
37
|
-
const hovered = useMouseSelector(tracker, state => !!state && !!stripe && pointerInStripe(stripe, state));
|
|
38
|
-
return { chipVisible: persistent || hovered || menuOpen, setMenuOpen };
|
|
39
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { Pin } from '../configuration/promotablePin.ts';
|
|
2
|
-
import type { CheckboxMenuItem, RadioMenuItem } from './MenuTypes.ts';
|
|
3
|
-
import type { RadioOption, SettingRowOptions } from './toggleMenuItems.ts';
|
|
4
|
-
/** #menuBuilder promotableToggleItem | `checkboxItem` plus an apply-to-open-tracks pin */
|
|
5
|
-
export declare function promotableToggleItem({ label, checked, onToggle, pin, ...opts }: {
|
|
6
|
-
label: string;
|
|
7
|
-
checked: boolean;
|
|
8
|
-
onToggle: () => void;
|
|
9
|
-
pin: Pin;
|
|
10
|
-
} & SettingRowOptions): CheckboxMenuItem;
|
|
11
|
-
/** #menuBuilder promotableRadioItem | `radioItem` plus an apply-to-open-tracks pin */
|
|
12
|
-
export declare function promotableRadioItem({ label, checked, onClick, pin, ...opts }: {
|
|
13
|
-
label: string;
|
|
14
|
-
checked: boolean;
|
|
15
|
-
onClick: () => void;
|
|
16
|
-
pin?: Pin;
|
|
17
|
-
} & SettingRowOptions): RadioMenuItem;
|
|
18
|
-
/** #menuBuilder promotableRadioItems | `radioItems` plus a pin per option, from a factory over the value */
|
|
19
|
-
export declare function promotableRadioItems<T extends string>(options: readonly RadioOption<T>[], current: T | undefined, setMode: (m: T) => void, pin: (value: T) => Pin): RadioMenuItem[];
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import { checkboxItem, radioItem, radioItems } from './toggleMenuItems.js';
|
|
2
|
-
// Every builder here describes the trailing pin (`pin`) rather than
|
|
3
|
-
// rendering it. That is what keeps this module — and therefore every state
|
|
4
|
-
// model and menu file that calls it — free of React and of MUI's
|
|
5
|
-
// ToggleButton/Tooltip. `menuItemAdornment.tsx` turns the description into
|
|
6
|
-
// `PinAdornment` at the point the menu is drawn. See
|
|
7
|
-
// reference/EAGER_BUNDLE.md; `menuItems.purity.test.ts` holds it.
|
|
8
|
-
//
|
|
9
|
-
// Each is the plain builder in `toggleMenuItems.ts` plus a pin, and each is
|
|
10
|
-
// written that way — `checkboxItem` / `radioItems` build the row — so the
|
|
11
|
-
// promotable and plain forms of a row can differ only by the pin.
|
|
12
|
-
// A promotable setting as one native checkbox menu row: the value toggles the
|
|
13
|
-
// track (inheriting native hover/sizing/keyboard), and a trailing pin
|
|
14
|
-
// (endAdornment) applies this value to every open track of the display type,
|
|
15
|
-
// offering the display-type default as its snackbar's one action. Always shown
|
|
16
|
-
// so the capability is discoverable.
|
|
17
|
-
//
|
|
18
|
-
// **The row itself is `checkboxItem`'s**, so the two builders can only ever
|
|
19
|
-
// differ by the pin. They used to be two literals, and had already drifted: this
|
|
20
|
-
// one accepted `helpText` and `keepMenuOpen` while silently dropping `disabled`
|
|
21
|
-
// and `disabledHelpText`, so a promotable row could not be greyed out the way
|
|
22
|
-
// its plain sibling could. Sharing the body is also what makes a future
|
|
23
|
-
// change to what a checkbox row *is* reach both — the failure `checkboxItem`'s
|
|
24
|
-
// own comment records is a menu regressing by omission.
|
|
25
|
-
//
|
|
26
|
-
// `keepMenuOpen` is left unset by default, so `CascadingMenu` keeps the row open
|
|
27
|
-
// by its checkbox type: these rows only write a setting, users flip several in
|
|
28
|
-
// one visit, and the menu is an observer so the ticks and pins move live. A row
|
|
29
|
-
// whose click opens a dialog instead (colorBy's "Tag...") passes false.
|
|
30
|
-
/** #menuBuilder promotableToggleItem | `checkboxItem` plus an apply-to-open-tracks pin */
|
|
31
|
-
export function promotableToggleItem({ label, checked, onToggle, pin, ...opts }) {
|
|
32
|
-
return {
|
|
33
|
-
...checkboxItem(label, checked, onToggle, opts),
|
|
34
|
-
pin: { control: pin, label },
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
// ONE radio row of a promotable-value group — the escape hatch, for a group the
|
|
38
|
-
// plural builder below can't express. **Reach for `promotableRadioItems` first**:
|
|
39
|
-
// every option in a group has to get a pin, and hand-naming the rows is what
|
|
40
|
-
// leaves one without.
|
|
41
|
-
//
|
|
42
|
-
// The rows that genuinely need this: `pin` is optional here, for a row with no
|
|
43
|
-
// single value to promote yet (the colorBy "Tag..." row before a tag is picked)
|
|
44
|
-
// or a display whose slot isn't promotable at all (the shared colorBy menu on
|
|
45
|
-
// gwas/variants); and the alignments size presets, whose group is gated row by
|
|
46
|
-
// row (`needsContent`) and mixes in a non-promotable "Custom..." peer.
|
|
47
|
-
//
|
|
48
|
-
// **The row itself is `radioItem`'s**, for the reason `promotableToggleItem`'s
|
|
49
|
-
// is `checkboxItem`'s: it was a second literal, and it had drifted the same way
|
|
50
|
-
// its checkbox sibling had — naming `helpText`/`keepMenuOpen` by hand and so
|
|
51
|
-
// silently dropping `disabled` and `disabledHelpText`, which the
|
|
52
|
-
// alignments size presets have to bolt back on afterwards (`needsContent`).
|
|
53
|
-
/** #menuBuilder promotableRadioItem | `radioItem` plus an apply-to-open-tracks pin */
|
|
54
|
-
export function promotableRadioItem({ label, checked, onClick, pin, ...opts }) {
|
|
55
|
-
return {
|
|
56
|
-
...radioItem(label, checked, onClick, opts),
|
|
57
|
-
...(pin && {
|
|
58
|
-
pin: { control: pin, label },
|
|
59
|
-
}),
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
// A whole promotable radio group: `radioItems` plus one pin per option. The
|
|
63
|
-
// plural form of the builder above, and the one to reach for on a group whose
|
|
64
|
-
// options differ only in their value — which is all four of them today
|
|
65
|
-
// (`heightMode`, `displayMode`, `subfeatureLabels`, `sashimiArcsMode`).
|
|
66
|
-
//
|
|
67
|
-
// **Every option in a group gets a pin, the `promotedBase` value included** —
|
|
68
|
-
// once a non-base value is promoted, pinning the base back is the only per-value
|
|
69
|
-
// way to undo it from its own row, and a radio group with one row silently
|
|
70
|
-
// missing its trailing control reads as a bug. Building the group here is what
|
|
71
|
-
// makes that structural instead of a rule to remember: `sashimiArcsMode`'s base
|
|
72
|
-
// looked unpinnable precisely because each row had been named by hand. Prefer
|
|
73
|
-
// this over `.map(promotableRadioItem)` whenever the pin is a function of the
|
|
74
|
-
// option's value.
|
|
75
|
-
//
|
|
76
|
-
// `pin` is a factory rather than an array so it can't be a row short. Pass
|
|
77
|
-
// `value => makePin(self, slot, value)`, or a model member of that shape where
|
|
78
|
-
// the menu module is handed a duck-typed model (alignments).
|
|
79
|
-
//
|
|
80
|
-
// The rows are `radioItems`' own, so the promotable and plain groups can't drift
|
|
81
|
-
// on anything but the pin. `radioItems` maps `options` in order, which is what
|
|
82
|
-
// lets each row be paired back to the option that built it.
|
|
83
|
-
/** #menuBuilder promotableRadioItems | `radioItems` plus a pin per option, from a factory over the value */
|
|
84
|
-
export function promotableRadioItems(options, current, setMode, pin) {
|
|
85
|
-
return radioItems(options, current, setMode).map((item, i) => {
|
|
86
|
-
const { value, label } = options[i];
|
|
87
|
-
return { ...item, pin: { control: pin(value), label } };
|
|
88
|
-
});
|
|
89
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import type { ResolvableDisplay } from '../configuration/promotableResolve.ts';
|
|
2
|
-
import type { MenuItem } from './MenuTypes.ts';
|
|
3
|
-
import type { IAnyType } from '@jbrowse/mobx-state-tree';
|
|
4
|
-
/**
|
|
5
|
-
* The registered display types whose config schema declares a promotable slot,
|
|
6
|
-
* sorted — the set a pin-coverage check has to reach, answered off the
|
|
7
|
-
* `DisplayType`s themselves before anything is opened.
|
|
8
|
-
*
|
|
9
|
-
* The other half of the same gap `promotableSlotsWithoutPin` covers, and the
|
|
10
|
-
* half that has no symptom at all: that function reports on a display it was
|
|
11
|
-
* *given*, so a display type no fixture ever opens is not checked and does not
|
|
12
|
-
* say so. Six display types declaring `showLegend` sat outside the check's
|
|
13
|
-
* reach with nothing recording it.
|
|
14
|
-
*
|
|
15
|
-
* Takes the display types rather than a `PluginManager`, so core doesn't have
|
|
16
|
-
* to name a plugin registry to answer a question about config schemas.
|
|
17
|
-
*/
|
|
18
|
-
export declare function displayTypesWithPromotableSlots(displayTypes: readonly {
|
|
19
|
-
name: string;
|
|
20
|
-
configSchema: IAnyType;
|
|
21
|
-
}[]): string[];
|
|
22
|
-
/**
|
|
23
|
-
* Every promotable slot some row of `items` carries a pin for, submenus
|
|
24
|
-
* included.
|
|
25
|
-
*
|
|
26
|
-
* Reads `pin.control.slot` and nothing else. A raw `endAdornment` is
|
|
27
|
-
* deliberately not counted: it is an arbitrary element (synteny's colour
|
|
28
|
-
* swatch), so it cannot say which slot it promotes, and a pin built by hand
|
|
29
|
-
* rather than through `promotableToggleItem`/`promotableRadioItem` is a thing to
|
|
30
|
-
* find, not to accept.
|
|
31
|
-
*/
|
|
32
|
-
export declare function pinnedSlots(items: MenuItem[]): Set<string>;
|
|
33
|
-
/**
|
|
34
|
-
* A display's promotable slots that its own track menu offers no pin for,
|
|
35
|
-
* sorted. Empty is the healthy answer.
|
|
36
|
-
*
|
|
37
|
-
* Takes the built menu rather than calling `trackMenuItems()` itself, because
|
|
38
|
-
* what a menu contains depends on the display's current state — a row can be
|
|
39
|
-
* gated on a rendering type (wiggle line width), on a parent toggle (the sashimi
|
|
40
|
-
* options), or on data having arrived. A caller that wants the whole surface has
|
|
41
|
-
* to drive the display into the states that reveal it, and that is a decision
|
|
42
|
-
* this function should not make silently.
|
|
43
|
-
*/
|
|
44
|
-
export declare function promotableSlotsWithoutPin(display: ResolvableDisplay, menuItems: MenuItem[]): string[];
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module
|
|
3
|
-
* The read side of the promotable pin: given a display, which of its promotable
|
|
4
|
-
* slots its track menu actually offers a pin for.
|
|
5
|
-
*
|
|
6
|
-
* This exists because the two halves of the feature are declared in different
|
|
7
|
-
* places and nothing joins them. Declaring `promotedBase` is a **schema** fact
|
|
8
|
-
* that travels down `baseConfiguration` to every subclass; the pin is a **menu**
|
|
9
|
-
* fact, built by whichever `trackMenuItems()` happens to construct a row for that
|
|
10
|
-
* slot. A display that inherits the slot and curates its own menu therefore ends
|
|
11
|
-
* up with a promotable slot that has no pin anywhere — and since a promoted default
|
|
12
|
-
* is keyed by *display type*, no other display's pin can write its key either, so
|
|
13
|
-
* the slot resolves to `promotedBase` forever unless a track customizes it.
|
|
14
|
-
*
|
|
15
|
-
* Nothing throws, nothing renders differently, and the config docs go on
|
|
16
|
-
* advertising the setting as having a session-wide default. The state was tracked
|
|
17
|
-
* by hand in `agent-docs/reference/DISPLAY_TYPE_DEFAULTS.md` and drifted twice
|
|
18
|
-
* before this was written — once gaining a row for a slot that had been deleted,
|
|
19
|
-
* once missing a slot that had been added.
|
|
20
|
-
*
|
|
21
|
-
* `products/jbrowse-web/src/tests/PromotablePinCoverage.test.ts` is the guard: it
|
|
22
|
-
* opens one display of every type that declares a promotable slot and holds the
|
|
23
|
-
* result against a baseline.
|
|
24
|
-
*/
|
|
25
|
-
import { promotableSlotNames } from '../configuration/promotableSlots.js';
|
|
26
|
-
/**
|
|
27
|
-
* The registered display types whose config schema declares a promotable slot,
|
|
28
|
-
* sorted — the set a pin-coverage check has to reach, answered off the
|
|
29
|
-
* `DisplayType`s themselves before anything is opened.
|
|
30
|
-
*
|
|
31
|
-
* The other half of the same gap `promotableSlotsWithoutPin` covers, and the
|
|
32
|
-
* half that has no symptom at all: that function reports on a display it was
|
|
33
|
-
* *given*, so a display type no fixture ever opens is not checked and does not
|
|
34
|
-
* say so. Six display types declaring `showLegend` sat outside the check's
|
|
35
|
-
* reach with nothing recording it.
|
|
36
|
-
*
|
|
37
|
-
* Takes the display types rather than a `PluginManager`, so core doesn't have
|
|
38
|
-
* to name a plugin registry to answer a question about config schemas.
|
|
39
|
-
*/
|
|
40
|
-
export function displayTypesWithPromotableSlots(displayTypes) {
|
|
41
|
-
return displayTypes
|
|
42
|
-
.filter(d => promotableSlotNames(d.configSchema).size > 0)
|
|
43
|
-
.map(d => d.name)
|
|
44
|
-
.sort((a, b) => a.localeCompare(b));
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Every promotable slot some row of `items` carries a pin for, submenus
|
|
48
|
-
* included.
|
|
49
|
-
*
|
|
50
|
-
* Reads `pin.control.slot` and nothing else. A raw `endAdornment` is
|
|
51
|
-
* deliberately not counted: it is an arbitrary element (synteny's colour
|
|
52
|
-
* swatch), so it cannot say which slot it promotes, and a pin built by hand
|
|
53
|
-
* rather than through `promotableToggleItem`/`promotableRadioItem` is a thing to
|
|
54
|
-
* find, not to accept.
|
|
55
|
-
*/
|
|
56
|
-
export function pinnedSlots(items) {
|
|
57
|
-
const found = new Set();
|
|
58
|
-
const walk = (list) => {
|
|
59
|
-
for (const item of list) {
|
|
60
|
-
if ('pin' in item && item.pin) {
|
|
61
|
-
found.add(item.pin.control.slot);
|
|
62
|
-
}
|
|
63
|
-
if ('subMenu' in item) {
|
|
64
|
-
walk(item.subMenu);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
walk(items);
|
|
69
|
-
return found;
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* A display's promotable slots that its own track menu offers no pin for,
|
|
73
|
-
* sorted. Empty is the healthy answer.
|
|
74
|
-
*
|
|
75
|
-
* Takes the built menu rather than calling `trackMenuItems()` itself, because
|
|
76
|
-
* what a menu contains depends on the display's current state — a row can be
|
|
77
|
-
* gated on a rendering type (wiggle line width), on a parent toggle (the sashimi
|
|
78
|
-
* options), or on data having arrived. A caller that wants the whole surface has
|
|
79
|
-
* to drive the display into the states that reveal it, and that is a decision
|
|
80
|
-
* this function should not make silently.
|
|
81
|
-
*/
|
|
82
|
-
export function promotableSlotsWithoutPin(display, menuItems) {
|
|
83
|
-
const pinned = pinnedSlots(menuItems);
|
|
84
|
-
return [...promotableSlotNames(display.configuration)]
|
|
85
|
-
.filter(slot => !pinned.has(slot))
|
|
86
|
-
.sort((a, b) => a.localeCompare(b));
|
|
87
|
-
}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import type { IAnyModelType, IStateTreeNode, SnapshotIn } from '@jbrowse/mobx-state-tree';
|
|
2
|
-
/**
|
|
3
|
-
* A view's init type, derived: the keys its launcher interprets (`Commands`)
|
|
4
|
-
* plus every declared property of its state model, optional, in the property's
|
|
5
|
-
* own snapshot type. Nothing is restated, so a property is authorable — and
|
|
6
|
-
* TYPED — from the line that declares it.
|
|
7
|
-
*
|
|
8
|
-
* ```ts
|
|
9
|
-
* export type LinearSyntenyViewInit = ViewInit<
|
|
10
|
-
* LinearSyntenyViewStateModel,
|
|
11
|
-
* LinearSyntenyViewCommands
|
|
12
|
-
* >
|
|
13
|
-
* ```
|
|
14
|
-
*
|
|
15
|
-
* THE ONE RULE THIS DEPENDS ON: the model's own `init` property must be typed
|
|
16
|
-
* as the `Commands`, not as this. `init` is a property, so an `init` typed as
|
|
17
|
-
* the whole thing makes the whole thing depend on itself — TS7023 on the
|
|
18
|
-
* factory, then implicit-any across every file that touches the view (ADR-055,
|
|
19
|
-
* same failure the view/display instance pair has). Commands never mention the
|
|
20
|
-
* model, so typing `init` as those breaks the loop, and it costs nothing: the
|
|
21
|
-
* view's own code reads the commands out of `self.init`, and the settings half
|
|
22
|
-
* is read only by `applyInitSettings`, which asks the model rather than a type.
|
|
23
|
-
*/
|
|
24
|
-
export type ViewInit<M extends IAnyModelType, Commands> = Commands & Partial<Omit<SnapshotIn<M>, keyof Commands | (typeof RESERVED_KEYS)[number]>>;
|
|
25
|
-
export declare const RESERVED_KEYS: readonly ['id', 'type', 'init'];
|
|
26
|
-
export interface InitSettingsReport {
|
|
27
|
-
/** keys applied, in the order they were found */
|
|
28
|
-
applied: string[];
|
|
29
|
-
/** keys naming no declared property — a typo, or a prop that never existed */
|
|
30
|
-
unknown: string[];
|
|
31
|
-
/** declared keys whose value the property's own type rejected */
|
|
32
|
-
invalid: string[];
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Apply the plain-settings half of an `init` blob: every key naming a declared
|
|
36
|
-
* MST property of `self` is written straight to it, and the caller handles only
|
|
37
|
-
* the keys it names in `commands`.
|
|
38
|
-
*
|
|
39
|
-
* THE POINT IS THAT THERE IS NO PER-SETTING CODE. A view used to need a
|
|
40
|
-
* hand-written `if (init.x !== undefined) self.setX(init.x)` arm per property,
|
|
41
|
-
* so a new toggle worked from its menu the moment it was declared and was
|
|
42
|
-
* dropped in silence from every authored surface — a session spec, a share
|
|
43
|
-
* link, a config `defaultSession` — until someone remembered the second edit.
|
|
44
|
-
* Nobody did: `drawLocationMarkers` shipped unauthorable, and DotplotView's
|
|
45
|
-
* `alpha`/`drawCigar`/`lineWidth`/`lockAspectRatio` never had an arm at all.
|
|
46
|
-
* Reading the property list off the model at runtime means declaring the
|
|
47
|
-
* property IS declaring it authorable, including properties a composed mixin
|
|
48
|
-
* brings in (colorBy, showColorLegend), and there is nothing left to keep in
|
|
49
|
-
* sync.
|
|
50
|
-
*
|
|
51
|
-
* `commands` is what a launcher genuinely has to interpret: keys with no
|
|
52
|
-
* property behind them (`loc`, `autoDiagonalize`), keys whose name collides
|
|
53
|
-
* with a property meaning something else (a spec's `views` is a list of
|
|
54
|
-
* assemblies to open; the model's `views` is the built rows), and keys with an
|
|
55
|
-
* ordering constraint (`levelHeights` must land after the auto-scale pass).
|
|
56
|
-
* Listing one is a decision to write code for it; everything else needs none.
|
|
57
|
-
*
|
|
58
|
-
* WRITTEN AS A PATCH, not through `setX`. Applying init is state restoration,
|
|
59
|
-
* and the authority on that is MST: `applyPatch` validates each value against
|
|
60
|
-
* the property's own type and touches nothing else, where `applySnapshot`
|
|
61
|
-
* would rebuild the view's children. That it skips the setters is correct
|
|
62
|
-
* rather than a shortcut — a session reload restores the same state from a
|
|
63
|
-
* snapshot and calls no setters either, so a property needing a setter's side
|
|
64
|
-
* effect to be correct is already broken on reload, and the effect belongs in a
|
|
65
|
-
* reaction on the property.
|
|
66
|
-
*
|
|
67
|
-
* A value the property's type rejects is dropped and reported rather than
|
|
68
|
-
* thrown: init blobs come from URLs, and one bad number should not cost the
|
|
69
|
-
* reader the whole view.
|
|
70
|
-
*/
|
|
71
|
-
export declare function applyInitSettings(self: IStateTreeNode, init: object | undefined, { commands }?: {
|
|
72
|
-
commands?: readonly string[];
|
|
73
|
-
}): InitSettingsReport;
|
|
74
|
-
/**
|
|
75
|
-
* Say what `applyInitSettings` refused, naming the surface. Split from the
|
|
76
|
-
* apply so a caller under test can assert the report without a console, and so
|
|
77
|
-
* the two messages read the same wherever they come from.
|
|
78
|
-
*/
|
|
79
|
-
export declare function warnInitSettings(surface: string, report: InitSettingsReport): void;
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { applyPatch, getPropertyMembers } from '@jbrowse/mobx-state-tree';
|
|
2
|
-
// Keys that are a view's identity or its plumbing rather than a setting. A
|
|
3
|
-
// launch spec never gets to write these: `type` picks the view, `id` is passed
|
|
4
|
-
// top-level so MST's optional identifier honors it, and `init` inside `init` is
|
|
5
|
-
// the nesting mistake loadSessionSpec already reports.
|
|
6
|
-
export const RESERVED_KEYS = ['id', 'type', 'init'];
|
|
7
|
-
const RESERVED = new Set(RESERVED_KEYS);
|
|
8
|
-
/**
|
|
9
|
-
* Apply the plain-settings half of an `init` blob: every key naming a declared
|
|
10
|
-
* MST property of `self` is written straight to it, and the caller handles only
|
|
11
|
-
* the keys it names in `commands`.
|
|
12
|
-
*
|
|
13
|
-
* THE POINT IS THAT THERE IS NO PER-SETTING CODE. A view used to need a
|
|
14
|
-
* hand-written `if (init.x !== undefined) self.setX(init.x)` arm per property,
|
|
15
|
-
* so a new toggle worked from its menu the moment it was declared and was
|
|
16
|
-
* dropped in silence from every authored surface — a session spec, a share
|
|
17
|
-
* link, a config `defaultSession` — until someone remembered the second edit.
|
|
18
|
-
* Nobody did: `drawLocationMarkers` shipped unauthorable, and DotplotView's
|
|
19
|
-
* `alpha`/`drawCigar`/`lineWidth`/`lockAspectRatio` never had an arm at all.
|
|
20
|
-
* Reading the property list off the model at runtime means declaring the
|
|
21
|
-
* property IS declaring it authorable, including properties a composed mixin
|
|
22
|
-
* brings in (colorBy, showColorLegend), and there is nothing left to keep in
|
|
23
|
-
* sync.
|
|
24
|
-
*
|
|
25
|
-
* `commands` is what a launcher genuinely has to interpret: keys with no
|
|
26
|
-
* property behind them (`loc`, `autoDiagonalize`), keys whose name collides
|
|
27
|
-
* with a property meaning something else (a spec's `views` is a list of
|
|
28
|
-
* assemblies to open; the model's `views` is the built rows), and keys with an
|
|
29
|
-
* ordering constraint (`levelHeights` must land after the auto-scale pass).
|
|
30
|
-
* Listing one is a decision to write code for it; everything else needs none.
|
|
31
|
-
*
|
|
32
|
-
* WRITTEN AS A PATCH, not through `setX`. Applying init is state restoration,
|
|
33
|
-
* and the authority on that is MST: `applyPatch` validates each value against
|
|
34
|
-
* the property's own type and touches nothing else, where `applySnapshot`
|
|
35
|
-
* would rebuild the view's children. That it skips the setters is correct
|
|
36
|
-
* rather than a shortcut — a session reload restores the same state from a
|
|
37
|
-
* snapshot and calls no setters either, so a property needing a setter's side
|
|
38
|
-
* effect to be correct is already broken on reload, and the effect belongs in a
|
|
39
|
-
* reaction on the property.
|
|
40
|
-
*
|
|
41
|
-
* A value the property's type rejects is dropped and reported rather than
|
|
42
|
-
* thrown: init blobs come from URLs, and one bad number should not cost the
|
|
43
|
-
* reader the whole view.
|
|
44
|
-
*/
|
|
45
|
-
export function applyInitSettings(self,
|
|
46
|
-
// `object` rather than a keyed record: an init blob's static type is the
|
|
47
|
-
// view's own `ViewInit`, which has named members and no index signature — by
|
|
48
|
-
// design, so a typo is a compile error there — and that is not assignable to
|
|
49
|
-
// `Record<string, unknown>`. This reads it by enumeration anyway.
|
|
50
|
-
init, { commands = [] } = {}) {
|
|
51
|
-
const report = { applied: [], unknown: [], invalid: [] };
|
|
52
|
-
if (!init) {
|
|
53
|
-
return report;
|
|
54
|
-
}
|
|
55
|
-
const skip = new Set(commands);
|
|
56
|
-
const { properties } = getPropertyMembers(self);
|
|
57
|
-
const patch = [];
|
|
58
|
-
for (const [key, value] of Object.entries(init)) {
|
|
59
|
-
if (skip.has(key) || RESERVED.has(key) || value === undefined) {
|
|
60
|
-
continue;
|
|
61
|
-
}
|
|
62
|
-
const propType = properties[key];
|
|
63
|
-
if (!propType) {
|
|
64
|
-
report.unknown.push(key);
|
|
65
|
-
}
|
|
66
|
-
else if (!propType.is(value)) {
|
|
67
|
-
report.invalid.push(key);
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
patch.push({ op: 'replace', path: `/${key}`, value });
|
|
71
|
-
report.applied.push(key);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
if (patch.length) {
|
|
75
|
-
applyPatch(self, patch);
|
|
76
|
-
}
|
|
77
|
-
return report;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Say what `applyInitSettings` refused, naming the surface. Split from the
|
|
81
|
-
* apply so a caller under test can assert the report without a console, and so
|
|
82
|
-
* the two messages read the same wherever they come from.
|
|
83
|
-
*/
|
|
84
|
-
export function warnInitSettings(surface, report) {
|
|
85
|
-
if (report.unknown.length) {
|
|
86
|
-
console.warn(`${surface} ignored unknown key(s): ${report.unknown.join(', ')}`);
|
|
87
|
-
}
|
|
88
|
-
if (report.invalid.length) {
|
|
89
|
-
console.warn(`${surface} ignored key(s) with an invalid value: ${report.invalid.join(', ')}`);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { ResolvableDisplay } from '../configuration/promotableResolve.ts';
|
|
2
|
-
import type { AbstractSessionModel } from './types/index.ts';
|
|
3
|
-
/**
|
|
4
|
-
* #api core/util
|
|
5
|
-
* Every display on an open track, across all open views — the reach of anything
|
|
6
|
-
* that acts on "the tracks the user is looking at": a promoted default's "apply
|
|
7
|
-
* to open tracks", and the share/export bake. One walk so those can't drift
|
|
8
|
-
* apart.
|
|
9
|
-
*
|
|
10
|
-
* Recurses into composite views. A display nested in one resolves the cascade
|
|
11
|
-
* like any other but was invisible to both callers, so the share/export bake
|
|
12
|
-
* didn't bake its inherited values and a shared session containing a
|
|
13
|
-
* breakpoint-split or synteny view rendered differently for the recipient.
|
|
14
|
-
* `LGVSyntenyDisplay` is only ever reached through this branch, so don't flatten
|
|
15
|
-
* the recursion away. `hasChildViews` names the one composite shape it does not
|
|
16
|
-
* cover.
|
|
17
|
-
*
|
|
18
|
-
* A view holding neither (e.g. spreadsheet) drops out via the structural guards.
|
|
19
|
-
* A view whose displays declare no promotable slot (e.g. dotplot, which does
|
|
20
|
-
* hold tracks) is walked and contributes nothing — harmless, and cheaper than
|
|
21
|
-
* asking each display whether it has anything to promote.
|
|
22
|
-
*/
|
|
23
|
-
export declare function openPromotableDisplays(session: AbstractSessionModel): ResolvableDisplay[];
|
package/esm/util/openDisplays.js
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module
|
|
3
|
-
* One walk of "every display on an open track, across all open views".
|
|
4
|
-
*
|
|
5
|
-
* Lives here rather than in `configuration/promotableDefaults.ts`, where it grew:
|
|
6
|
-
* nothing about it is a cascade concern — it answers "the tracks the user is
|
|
7
|
-
* looking at", and its two callers want that for different reasons (the promoted
|
|
8
|
-
* default's "apply to open tracks", and `product-core`'s share/export bake). It
|
|
9
|
-
* cannot move next to either one: `product-core` imports `@jbrowse/core`, never
|
|
10
|
-
* the reverse.
|
|
11
|
-
*
|
|
12
|
-
* The displays are typed `ResolvableDisplay` because both callers immediately
|
|
13
|
-
* resolve config off them, and that shape (`IStateTreeNode` + `type` +
|
|
14
|
-
* `configuration`) is the smallest thing either needs.
|
|
15
|
-
*/
|
|
16
|
-
import { isObject } from './objectUtils.js';
|
|
17
|
-
import { isViewContainer } from './types/index.js';
|
|
18
|
-
// A view whose open tracks we can enumerate. The generic view interface doesn't
|
|
19
|
-
// surface `tracks`, so narrow structurally — the declared display shape is the
|
|
20
|
-
// same ResolvableDisplay the cascade already operates on.
|
|
21
|
-
//
|
|
22
|
-
// Checks the elements, not just that `tracks` is an array: this narrowing is
|
|
23
|
-
// what every consumer downstream trusts, and an element without `displays`
|
|
24
|
-
// would put `undefined` in the walk and throw at the first `display.type` —
|
|
25
|
-
// inside a share/export bake, i.e. as far from the cause as it gets. Every
|
|
26
|
-
// `tracks`-bearing view today holds real track models, so this only ever
|
|
27
|
-
// confirms what is already true.
|
|
28
|
-
function hasOpenTracks(view) {
|
|
29
|
-
return ('tracks' in view &&
|
|
30
|
-
Array.isArray(view.tracks) &&
|
|
31
|
-
view.tracks.every(t => isObject(t) && Array.isArray(t.displays)));
|
|
32
|
-
}
|
|
33
|
-
// A composite view holding child views in a `views` array: breakpoint-split and
|
|
34
|
-
// the linear-comparative family incl. synteny. Not exclusive with
|
|
35
|
-
// `hasOpenTracks`: LinearComparativeView has both its own synteny tracks and two
|
|
36
|
-
// child LGVs.
|
|
37
|
-
//
|
|
38
|
-
// A view that holds its children under *named* props instead (SvInspectorView's
|
|
39
|
-
// `spreadsheetView`/`circularView`) is NOT reached. Enumerating a view's own
|
|
40
|
-
// properties to find them isn't an option — reading every key of an MST node
|
|
41
|
-
// invokes every computed view on it, several of which throw before the view is
|
|
42
|
-
// initialized. No display reachable that way declares a promotable slot today,
|
|
43
|
-
// so nothing is currently missed; if one ever does, give that view a `views`
|
|
44
|
-
// getter returning its children rather than duck-typing harder here.
|
|
45
|
-
function hasChildViews(view) {
|
|
46
|
-
return ('views' in view &&
|
|
47
|
-
Array.isArray(view.views) &&
|
|
48
|
-
view.views.every(v => typeof v === 'object' && v !== null));
|
|
49
|
-
}
|
|
50
|
-
function displaysInView(view) {
|
|
51
|
-
return [
|
|
52
|
-
...(hasOpenTracks(view) ? view.tracks.flatMap(t => t.displays) : []),
|
|
53
|
-
...(hasChildViews(view) ? view.views.flatMap(displaysInView) : []),
|
|
54
|
-
];
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* #api core/util
|
|
58
|
-
* Every display on an open track, across all open views — the reach of anything
|
|
59
|
-
* that acts on "the tracks the user is looking at": a promoted default's "apply
|
|
60
|
-
* to open tracks", and the share/export bake. One walk so those can't drift
|
|
61
|
-
* apart.
|
|
62
|
-
*
|
|
63
|
-
* Recurses into composite views. A display nested in one resolves the cascade
|
|
64
|
-
* like any other but was invisible to both callers, so the share/export bake
|
|
65
|
-
* didn't bake its inherited values and a shared session containing a
|
|
66
|
-
* breakpoint-split or synteny view rendered differently for the recipient.
|
|
67
|
-
* `LGVSyntenyDisplay` is only ever reached through this branch, so don't flatten
|
|
68
|
-
* the recursion away. `hasChildViews` names the one composite shape it does not
|
|
69
|
-
* cover.
|
|
70
|
-
*
|
|
71
|
-
* A view holding neither (e.g. spreadsheet) drops out via the structural guards.
|
|
72
|
-
* A view whose displays declare no promotable slot (e.g. dotplot, which does
|
|
73
|
-
* hold tracks) is walked and contributes nothing — harmless, and cheaper than
|
|
74
|
-
* asking each display whether it has anything to promote.
|
|
75
|
-
*/
|
|
76
|
-
export function openPromotableDisplays(session) {
|
|
77
|
-
const views = isViewContainer(session) ? session.views : [];
|
|
78
|
-
return views.flatMap(displaysInView);
|
|
79
|
-
}
|