@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,6 +1,6 @@
|
|
|
1
1
|
import type PluginManager from '../../PluginManager.ts';
|
|
2
2
|
import type { RefNameMismatch } from '../../assemblyManager/refNameMismatch.ts';
|
|
3
|
-
import type { AnyConfigurationSchemaType } from '../../configuration/index.ts';
|
|
3
|
+
import type { AnyConfigurationModel, AnyConfigurationSchemaType } from '../../configuration/index.ts';
|
|
4
4
|
import type { MenuItem } from '../../ui/index.ts';
|
|
5
5
|
import type { DisplayModel } from './BaseDisplayModel.tsx';
|
|
6
6
|
import type { FileTypeExporter } from './saveTrackFileTypes/types.ts';
|
|
@@ -97,8 +97,17 @@ export declare function createBaseTrackModel(pm: PluginManager, trackType: strin
|
|
|
97
97
|
readonly activeDisplay: DisplayModel & import("@jbrowse/mobx-state-tree").IStateTreeNode<IType<unknown, unknown, DisplayModel>>;
|
|
98
98
|
/**
|
|
99
99
|
* #getter
|
|
100
|
+
* the configured displays the CONTAINING VIEW can draw and the track's
|
|
101
|
+
* adapter feeds, which is the set `replaceDisplay` will accept
|
|
102
|
+
*
|
|
103
|
+
* `configuration.displays` is not that set: baseTrackConfig injects one
|
|
104
|
+
* entry per display type registered for the track TYPE, across every
|
|
105
|
+
* view type, so a VariantTrack carries a ChordVariantDisplay a linear
|
|
106
|
+
* view cannot draw. The track menu's own "Display types" submenu has
|
|
107
|
+
* always filtered them; this exposes the same list to code, because the
|
|
108
|
+
* alternative is every caller re-deriving it from the plugin manager.
|
|
100
109
|
*/
|
|
101
|
-
readonly
|
|
110
|
+
readonly compatibleDisplays: AnyConfigurationModel[];
|
|
102
111
|
} & {
|
|
103
112
|
/**
|
|
104
113
|
* #getter
|
|
@@ -130,8 +139,14 @@ export declare function createBaseTrackModel(pm: PluginManager, trackType: strin
|
|
|
130
139
|
/**
|
|
131
140
|
* #getter
|
|
132
141
|
*/
|
|
133
|
-
readonly adapterType: import("../AdapterType.ts").default
|
|
142
|
+
readonly adapterType: import("../AdapterType.ts").default<any>;
|
|
134
143
|
} & {
|
|
144
|
+
/**
|
|
145
|
+
* #action
|
|
146
|
+
* Write the config to the session now rather than after the 400 ms
|
|
147
|
+
* wait, for an edit that has to be undoable the moment it lands.
|
|
148
|
+
*/
|
|
149
|
+
persistConfigurationNow(): void;
|
|
135
150
|
/**
|
|
136
151
|
* #action
|
|
137
152
|
*/
|
|
@@ -144,6 +159,27 @@ export declare function createBaseTrackModel(pm: PluginManager, trackType: strin
|
|
|
144
159
|
* #action
|
|
145
160
|
*/
|
|
146
161
|
setResizing(flag: boolean): void;
|
|
162
|
+
/**
|
|
163
|
+
* #action
|
|
164
|
+
* `applyDisplaySettings` on the display being drawn (`activeDisplay`,
|
|
165
|
+
* which a shown track always has — this is not meaningful on a bare
|
|
166
|
+
* config node) — the track-level entry for "restyle this track in
|
|
167
|
+
* place" (a session spec's inline keys, an agent's settings bag). Only
|
|
168
|
+
* that one display: settings vocabularies are per display type, so
|
|
169
|
+
* broadcasting one bag across a track's other displays would mis-route
|
|
170
|
+
* keys; address a non-active display directly if that is what you mean.
|
|
171
|
+
* See BaseDisplayModel for the routing and the `allowSetters` opt-in.
|
|
172
|
+
*/
|
|
173
|
+
applyDisplaySettings(settings: Record<string, unknown>, options?: {
|
|
174
|
+
allowSetters?: boolean;
|
|
175
|
+
}): {
|
|
176
|
+
applied: string[];
|
|
177
|
+
unapplied: import("../../util/unknownSnapshotKeys.ts").UnappliedSetting[];
|
|
178
|
+
failed: {
|
|
179
|
+
key: string;
|
|
180
|
+
error: string;
|
|
181
|
+
}[];
|
|
182
|
+
};
|
|
147
183
|
/**
|
|
148
184
|
* #action
|
|
149
185
|
*/
|
|
@@ -165,15 +201,28 @@ export declare function createBaseTrackModel(pm: PluginManager, trackType: strin
|
|
|
165
201
|
*
|
|
166
202
|
* `equals: compareStructural` is load-bearing, not an optimization:
|
|
167
203
|
* `self.configuration` is a re-resolving reference, and persisting a save
|
|
168
|
-
*
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
* comparison would treat every such swap as a fresh change
|
|
172
|
-
*
|
|
173
|
-
*
|
|
174
|
-
* stops changing.
|
|
204
|
+
* can swap the resolved node identity (the delta path reconciles in place
|
|
205
|
+
* but still churns once, and a session without deltas replaces the frozen
|
|
206
|
+
* `jbrowse.tracks` entry, rehydrating a brand-new MST node every write).
|
|
207
|
+
* Referential comparison would treat every such swap as a fresh change
|
|
208
|
+
* and re-fire the save, an unbounded debounced loop. Structural
|
|
209
|
+
* comparison settles once the content stops changing.
|
|
175
210
|
*/
|
|
176
211
|
afterAttach(): void;
|
|
212
|
+
} & {
|
|
213
|
+
/**
|
|
214
|
+
* #action
|
|
215
|
+
* The awaitable sibling of `replaceDisplay`: loads the target display's
|
|
216
|
+
* state model, then swaps to it carrying whatever settings the outgoing
|
|
217
|
+
* display can hand over.
|
|
218
|
+
*
|
|
219
|
+
* `replaceDisplay` stays a plain sync action and ASSERTS the model is
|
|
220
|
+
* loaded, and every display state model in this tree is a dynamic import
|
|
221
|
+
* until something shows one — so a caller that has not already shown the
|
|
222
|
+
* target needs this. Named like `launchTrack`, which is the same problem
|
|
223
|
+
* one level up.
|
|
224
|
+
*/
|
|
225
|
+
launchDisplay(displayId: string): Promise<void>;
|
|
177
226
|
} & {
|
|
178
227
|
/**
|
|
179
228
|
* #getter
|
|
@@ -185,12 +234,12 @@ export declare function createBaseTrackModel(pm: PluginManager, trackType: strin
|
|
|
185
234
|
readonly exportsDataViaAdapter: boolean;
|
|
186
235
|
/**
|
|
187
236
|
* #getter
|
|
188
|
-
*
|
|
189
|
-
* `fetchSizeLimit` where it declares
|
|
190
|
-
*
|
|
191
|
-
* otherwise a default.
|
|
192
|
-
*
|
|
193
|
-
*
|
|
237
|
+
* The size in bytes above which "Save track data" asks for confirmation
|
|
238
|
+
* before fetching. Uses the adapter's `fetchSizeLimit` where it declares
|
|
239
|
+
* one, so a save asks at the same size at which the track's display
|
|
240
|
+
* refuses to render; otherwise a default. The default is generous
|
|
241
|
+
* because exceeding it only prompts for confirmation, and the user
|
|
242
|
+
* explicitly requested the data.
|
|
194
243
|
*/
|
|
195
244
|
readonly exportByteLimit: number;
|
|
196
245
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { lazy } from 'react';
|
|
2
|
-
import { addDisposer, getSnapshot, types } from '@jbrowse/mobx-state-tree';
|
|
2
|
+
import { addDisposer, getSnapshot, isAlive, types, } from '@jbrowse/mobx-state-tree';
|
|
3
3
|
import Save from '@mui/icons-material/Save';
|
|
4
4
|
import { compareStructural, reaction } from 'mobx';
|
|
5
5
|
import { ConfigurationReference, getConf } from '../../configuration/index.js';
|
|
@@ -10,6 +10,7 @@ import { getContainingView, getDialogHost, getEnv, getSession, } from '../../uti
|
|
|
10
10
|
import { getConfAssemblyNamesOrNone, viewDisplayNames, } from '../../util/tracks.js';
|
|
11
11
|
import { isSessionModelWithConfigEditing } from '../../util/types/index.js';
|
|
12
12
|
import { ElementId } from '../../util/types/mst.js';
|
|
13
|
+
import { displayTypesFedBy } from './baseTrackConfig.js';
|
|
13
14
|
import { stringifyBED } from './saveTrackFileTypes/bed.js';
|
|
14
15
|
import { stringifyGBK } from './saveTrackFileTypes/genbank.js';
|
|
15
16
|
import { stringifyGFF3 } from './saveTrackFileTypes/gff3.js';
|
|
@@ -18,12 +19,11 @@ const DEFAULT_EXPORT_BYTE_LIMIT = 5_000_000;
|
|
|
18
19
|
function getCompatibleDisplays(self) {
|
|
19
20
|
const { pluginManager } = getEnv(self);
|
|
20
21
|
const view = getContainingView(self);
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
return displays.filter(d => compatTypes.has(d.type));
|
|
22
|
+
const { configuration } = self;
|
|
23
|
+
const viewDisplays = viewDisplayNames(pluginManager, view.type);
|
|
24
|
+
const fed = new Set(displayTypesFedBy(pluginManager, configuration.type, configuration.adapter));
|
|
25
|
+
const displays = configuration.displays;
|
|
26
|
+
return displays.filter(d => viewDisplays.has(d.type) && fed.has(d.type));
|
|
27
27
|
}
|
|
28
28
|
function getDisplayConf(displays, displayId) {
|
|
29
29
|
const displayConf = displays.find(d => d.displayId === displayId);
|
|
@@ -158,14 +158,18 @@ export function createBaseTrackModel(pm, trackType, baseTrackConfig) {
|
|
|
158
158
|
},
|
|
159
159
|
/**
|
|
160
160
|
* #getter
|
|
161
|
+
* the configured displays the CONTAINING VIEW can draw and the track's
|
|
162
|
+
* adapter feeds, which is the set `replaceDisplay` will accept
|
|
163
|
+
*
|
|
164
|
+
* `configuration.displays` is not that set: baseTrackConfig injects one
|
|
165
|
+
* entry per display type registered for the track TYPE, across every
|
|
166
|
+
* view type, so a VariantTrack carries a ChordVariantDisplay a linear
|
|
167
|
+
* view cannot draw. The track menu's own "Display types" submenu has
|
|
168
|
+
* always filtered them; this exposes the same list to code, because the
|
|
169
|
+
* alternative is every caller re-deriving it from the plugin manager.
|
|
161
170
|
*/
|
|
162
|
-
get
|
|
163
|
-
|
|
164
|
-
const { sessionTracks, trackConfigDeltas, adminMode } = session;
|
|
165
|
-
return (isSessionModelWithConfigEditing(session) &&
|
|
166
|
-
(adminMode ||
|
|
167
|
-
!!sessionTracks?.find(t => t.trackId === this.trackId) ||
|
|
168
|
-
this.trackId in (trackConfigDeltas ?? {})));
|
|
171
|
+
get compatibleDisplays() {
|
|
172
|
+
return getCompatibleDisplays(self);
|
|
169
173
|
},
|
|
170
174
|
}))
|
|
171
175
|
.views(self => ({
|
|
@@ -232,106 +236,158 @@ export function createBaseTrackModel(pm, trackType, baseTrackConfig) {
|
|
|
232
236
|
return pm.getAdapterType(type);
|
|
233
237
|
},
|
|
234
238
|
}))
|
|
235
|
-
.actions(self =>
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
setMinimized(flag) {
|
|
246
|
-
self.minimized = flag;
|
|
247
|
-
},
|
|
248
|
-
/**
|
|
249
|
-
* #action
|
|
250
|
-
*/
|
|
251
|
-
setResizing(flag) {
|
|
252
|
-
self.resizing = flag;
|
|
253
|
-
},
|
|
254
|
-
/**
|
|
255
|
-
* #action
|
|
256
|
-
*/
|
|
257
|
-
replaceDisplay(oldDisplayId, newDisplayId, initialSnapshot = {}) {
|
|
258
|
-
const idx = self.displays.findIndex(d => d.configuration.displayId === oldDisplayId);
|
|
259
|
-
if (idx === -1) {
|
|
260
|
-
throw new Error(`could not find display id ${oldDisplayId} to replace`);
|
|
239
|
+
.actions(self => {
|
|
240
|
+
let persistTimeout;
|
|
241
|
+
// Reads the config when it fires rather than when it was scheduled, so
|
|
242
|
+
// what reaches the session is the config as it stands, whatever swapped
|
|
243
|
+
// the resolved node inside the wait.
|
|
244
|
+
function persistConfiguration() {
|
|
245
|
+
persistTimeout = undefined;
|
|
246
|
+
const session = getSession(self);
|
|
247
|
+
if (isSessionModelWithConfigEditing(session)) {
|
|
248
|
+
session.updateTrackConfiguration(getSnapshot(self.configuration));
|
|
261
249
|
}
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
250
|
+
}
|
|
251
|
+
return {
|
|
252
|
+
/**
|
|
253
|
+
* #action
|
|
254
|
+
* Write the config to the session now rather than after the 400 ms
|
|
255
|
+
* wait, for an edit that has to be undoable the moment it lands.
|
|
256
|
+
*/
|
|
257
|
+
persistConfigurationNow() {
|
|
258
|
+
clearTimeout(persistTimeout);
|
|
259
|
+
persistConfiguration();
|
|
260
|
+
},
|
|
261
|
+
/**
|
|
262
|
+
* #action
|
|
263
|
+
*/
|
|
264
|
+
setPinned(flag) {
|
|
265
|
+
self.pinned = flag;
|
|
266
|
+
},
|
|
267
|
+
/**
|
|
268
|
+
* #action
|
|
269
|
+
*/
|
|
270
|
+
setMinimized(flag) {
|
|
271
|
+
self.minimized = flag;
|
|
272
|
+
},
|
|
273
|
+
/**
|
|
274
|
+
* #action
|
|
275
|
+
*/
|
|
276
|
+
setResizing(flag) {
|
|
277
|
+
self.resizing = flag;
|
|
278
|
+
},
|
|
279
|
+
/**
|
|
280
|
+
* #action
|
|
281
|
+
* `applyDisplaySettings` on the display being drawn (`activeDisplay`,
|
|
282
|
+
* which a shown track always has — this is not meaningful on a bare
|
|
283
|
+
* config node) — the track-level entry for "restyle this track in
|
|
284
|
+
* place" (a session spec's inline keys, an agent's settings bag). Only
|
|
285
|
+
* that one display: settings vocabularies are per display type, so
|
|
286
|
+
* broadcasting one bag across a track's other displays would mis-route
|
|
287
|
+
* keys; address a non-active display directly if that is what you mean.
|
|
288
|
+
* See BaseDisplayModel for the routing and the `allowSetters` opt-in.
|
|
289
|
+
*/
|
|
290
|
+
applyDisplaySettings(settings, options) {
|
|
291
|
+
return self.activeDisplay.applyDisplaySettings(settings, options);
|
|
292
|
+
},
|
|
293
|
+
/**
|
|
294
|
+
* #action
|
|
295
|
+
*/
|
|
296
|
+
replaceDisplay(oldDisplayId, newDisplayId, initialSnapshot = {}) {
|
|
297
|
+
const idx = self.displays.findIndex(d => d.configuration.displayId === oldDisplayId);
|
|
298
|
+
if (idx === -1) {
|
|
299
|
+
throw new Error(`could not find display id ${oldDisplayId} to replace`);
|
|
300
|
+
}
|
|
301
|
+
const displayConf = getDisplayConf(self.configuration.displays, newDisplayId);
|
|
302
|
+
// same interception showTrackGeneric makes: a registered-but-unloaded
|
|
303
|
+
// display would otherwise fail as an opaque union mismatch below
|
|
304
|
+
pm.resolveDisplayTypeRecord(displayConf.type)?.assertStateModelLoaded();
|
|
305
|
+
self.displays[idx] = {
|
|
306
|
+
...initialSnapshot,
|
|
307
|
+
type: displayConf.type,
|
|
308
|
+
configuration: newDisplayId,
|
|
309
|
+
};
|
|
310
|
+
},
|
|
311
|
+
/**
|
|
312
|
+
* #action
|
|
313
|
+
* Persist any config-schema mutation (quick track-menu edits calling
|
|
314
|
+
* `setSlot` directly, or the full Settings dialog) back to the session,
|
|
315
|
+
* debounced, mirroring ConfigurationEditorWidget's own save. Both savers
|
|
316
|
+
* intentionally coexist — this one covers direct setSlot edits on a shown
|
|
317
|
+
* track, the widget covers an unshown track edited from the selector (no
|
|
318
|
+
* BaseTrackModel). When both fire they compute an identical delta, deduped
|
|
319
|
+
* in updateTrackConfiguration; don't drop one to "simplify". `reaction`
|
|
320
|
+
* (not `autorun`) on purpose: `self.configuration` is defined
|
|
321
|
+
* immediately on attach, unlike ConfigurationEditorWidget's `target`
|
|
322
|
+
* (which starts undefined), so an autorun's guaranteed first run would
|
|
323
|
+
* otherwise schedule a spurious flush for every track ever shown, even
|
|
324
|
+
* completely untouched ones — `reaction` only fires on an actual change.
|
|
325
|
+
*
|
|
326
|
+
* `equals: compareStructural` is load-bearing, not an optimization:
|
|
327
|
+
* `self.configuration` is a re-resolving reference, and persisting a save
|
|
328
|
+
* can swap the resolved node identity (the delta path reconciles in place
|
|
329
|
+
* but still churns once, and a session without deltas replaces the frozen
|
|
330
|
+
* `jbrowse.tracks` entry, rehydrating a brand-new MST node every write).
|
|
331
|
+
* Referential comparison would treat every such swap as a fresh change
|
|
332
|
+
* and re-fire the save, an unbounded debounced loop. Structural
|
|
333
|
+
* comparison settles once the content stops changing.
|
|
334
|
+
*/
|
|
335
|
+
afterAttach() {
|
|
336
|
+
addDisposer(self, reaction(() => getSnapshot(self.configuration), () => {
|
|
337
|
+
clearTimeout(persistTimeout);
|
|
338
|
+
persistTimeout = setTimeout(persistConfiguration, 400);
|
|
339
|
+
}, { equals: compareStructural }));
|
|
340
|
+
addDisposer(self, () => {
|
|
341
|
+
clearTimeout(persistTimeout);
|
|
342
|
+
});
|
|
343
|
+
// Hold a claim on this track's rpcSessionId for as long as the track is
|
|
344
|
+
// open, so closing the last track using an adapter config evicts that
|
|
345
|
+
// adapter from the worker's dataAdapterCache. Without this nothing in
|
|
346
|
+
// the app ever reaches CoreFreeResources, and an adapter — with its
|
|
347
|
+
// parsed chunks, or in the unindexed case its whole parsed file — is
|
|
348
|
+
// reachable from module scope for as long as the worker lives, which no
|
|
349
|
+
// amount of garbage collection can help with.
|
|
350
|
+
//
|
|
351
|
+
// The id is tracked by reaction rather than captured once: rpcSessionId
|
|
352
|
+
// is derived from the adapter config, which a settings edit can change
|
|
353
|
+
// under a live track, and releasing an id we never retained would free
|
|
354
|
+
// an adapter another track is still using.
|
|
355
|
+
const { rpcManager } = getSession(self);
|
|
356
|
+
let retained = self.rpcSessionId;
|
|
357
|
+
retainAdapterSession(rpcManager, retained);
|
|
358
|
+
addDisposer(self, reaction(() => self.rpcSessionId, next => {
|
|
359
|
+
if (next !== retained) {
|
|
360
|
+
const previous = retained;
|
|
361
|
+
retained = next;
|
|
362
|
+
retainAdapterSession(rpcManager, next);
|
|
363
|
+
void releaseAdapterSession(rpcManager, previous);
|
|
364
|
+
}
|
|
365
|
+
}));
|
|
366
|
+
addDisposer(self, () => {
|
|
367
|
+
void releaseAdapterSession(rpcManager, retained);
|
|
368
|
+
});
|
|
369
|
+
},
|
|
370
|
+
};
|
|
371
|
+
})
|
|
372
|
+
.actions(self => ({
|
|
270
373
|
/**
|
|
271
374
|
* #action
|
|
272
|
-
*
|
|
273
|
-
*
|
|
274
|
-
*
|
|
275
|
-
* intentionally coexist — this one covers direct setSlot edits on a shown
|
|
276
|
-
* track, the widget covers an unshown track edited from the selector (no
|
|
277
|
-
* BaseTrackModel). When both fire they compute an identical delta, deduped
|
|
278
|
-
* in updateTrackConfiguration; don't drop one to "simplify". `reaction`
|
|
279
|
-
* (not `autorun`) on purpose: `self.configuration` is defined
|
|
280
|
-
* immediately on attach, unlike ConfigurationEditorWidget's `target`
|
|
281
|
-
* (which starts undefined), so an autorun's guaranteed first run would
|
|
282
|
-
* otherwise schedule a spurious flush for every track ever shown, even
|
|
283
|
-
* completely untouched ones — `reaction` only fires on an actual change.
|
|
375
|
+
* The awaitable sibling of `replaceDisplay`: loads the target display's
|
|
376
|
+
* state model, then swaps to it carrying whatever settings the outgoing
|
|
377
|
+
* display can hand over.
|
|
284
378
|
*
|
|
285
|
-
* `
|
|
286
|
-
*
|
|
287
|
-
*
|
|
288
|
-
*
|
|
289
|
-
*
|
|
290
|
-
* comparison would treat every such swap as a fresh change and re-fire the
|
|
291
|
-
* save, which for the admin/desktop path (new node every write) is an
|
|
292
|
-
* unbounded debounced loop. Structural comparison settles once the content
|
|
293
|
-
* stops changing.
|
|
379
|
+
* `replaceDisplay` stays a plain sync action and ASSERTS the model is
|
|
380
|
+
* loaded, and every display state model in this tree is a dynamic import
|
|
381
|
+
* until something shows one — so a caller that has not already shown the
|
|
382
|
+
* target needs this. Named like `launchTrack`, which is the same problem
|
|
383
|
+
* one level up.
|
|
294
384
|
*/
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
if (isSessionModelWithConfigEditing(session)) {
|
|
302
|
-
session.updateTrackConfiguration(snapshot);
|
|
303
|
-
}
|
|
304
|
-
}, 400);
|
|
305
|
-
}, { equals: compareStructural }));
|
|
306
|
-
addDisposer(self, () => {
|
|
307
|
-
clearTimeout(timeout);
|
|
308
|
-
});
|
|
309
|
-
// Hold a claim on this track's rpcSessionId for as long as the track is
|
|
310
|
-
// open, so closing the last track using an adapter config evicts that
|
|
311
|
-
// adapter from the worker's dataAdapterCache. Without this nothing in
|
|
312
|
-
// the app ever reaches CoreFreeResources, and an adapter — with its
|
|
313
|
-
// parsed chunks, or in the unindexed case its whole parsed file — is
|
|
314
|
-
// reachable from module scope for as long as the worker lives, which no
|
|
315
|
-
// amount of garbage collection can help with.
|
|
316
|
-
//
|
|
317
|
-
// The id is tracked by reaction rather than captured once: rpcSessionId
|
|
318
|
-
// is derived from the adapter config, which a settings edit can change
|
|
319
|
-
// under a live track, and releasing an id we never retained would free
|
|
320
|
-
// an adapter another track is still using.
|
|
321
|
-
const { rpcManager } = getSession(self);
|
|
322
|
-
let retained = self.rpcSessionId;
|
|
323
|
-
retainAdapterSession(rpcManager, retained);
|
|
324
|
-
addDisposer(self, reaction(() => self.rpcSessionId, next => {
|
|
325
|
-
if (next !== retained) {
|
|
326
|
-
const previous = retained;
|
|
327
|
-
retained = next;
|
|
328
|
-
retainAdapterSession(rpcManager, next);
|
|
329
|
-
void releaseAdapterSession(rpcManager, previous);
|
|
330
|
-
}
|
|
331
|
-
}));
|
|
332
|
-
addDisposer(self, () => {
|
|
333
|
-
void releaseAdapterSession(rpcManager, retained);
|
|
334
|
-
});
|
|
385
|
+
async launchDisplay(displayId) {
|
|
386
|
+
const { type } = getDisplayConf(self.configuration.displays, displayId);
|
|
387
|
+
await pm.resolveDisplayTypeRecord(type)?.loadStateModel();
|
|
388
|
+
if (isAlive(self)) {
|
|
389
|
+
self.replaceDisplay(self.activeDisplay.configuration.displayId, displayId, self.activeDisplay.getPortableSettings?.(displayId) ?? {});
|
|
390
|
+
}
|
|
335
391
|
},
|
|
336
392
|
}))
|
|
337
393
|
.views(self => ({
|
|
@@ -349,12 +405,12 @@ export function createBaseTrackModel(pm, trackType, baseTrackConfig) {
|
|
|
349
405
|
},
|
|
350
406
|
/**
|
|
351
407
|
* #getter
|
|
352
|
-
*
|
|
353
|
-
* `fetchSizeLimit` where it declares
|
|
354
|
-
*
|
|
355
|
-
* otherwise a default.
|
|
356
|
-
*
|
|
357
|
-
*
|
|
408
|
+
* The size in bytes above which "Save track data" asks for confirmation
|
|
409
|
+
* before fetching. Uses the adapter's `fetchSizeLimit` where it declares
|
|
410
|
+
* one, so a save asks at the same size at which the track's display
|
|
411
|
+
* refuses to render; otherwise a default. The default is generous
|
|
412
|
+
* because exceeding it only prompts for confirmation, and the user
|
|
413
|
+
* explicitly requested the data.
|
|
358
414
|
*/
|
|
359
415
|
get exportByteLimit() {
|
|
360
416
|
return adapterByteLimit(getConf(self, ['adapter', 'fetchSizeLimit']), DEFAULT_EXPORT_BYTE_LIMIT);
|
|
@@ -413,7 +469,7 @@ export function createBaseTrackModel(pm, trackType, baseTrackConfig) {
|
|
|
413
469
|
trackMenuItems() {
|
|
414
470
|
const menuItems = self.displays.flatMap(d => d.trackMenuItems());
|
|
415
471
|
const shownId = self.activeDisplay.configuration.displayId;
|
|
416
|
-
const compatDisp =
|
|
472
|
+
const compatDisp = self.compatibleDisplays;
|
|
417
473
|
return [
|
|
418
474
|
...menuItems,
|
|
419
475
|
...(compatDisp.length > 1 && shownId
|
|
@@ -434,9 +490,15 @@ export function createBaseTrackModel(pm, trackType, baseTrackConfig) {
|
|
|
434
490
|
// being replaced, so leaving the menu up would keep a
|
|
435
491
|
// list of items built against a destroyed MST node
|
|
436
492
|
keepMenuOpen: false,
|
|
493
|
+
// launchDisplay, because the chosen display's state
|
|
494
|
+
// model may still be a dynamic import away
|
|
437
495
|
onClick: () => {
|
|
438
496
|
if (d.displayId !== shownId) {
|
|
439
|
-
|
|
497
|
+
void self
|
|
498
|
+
.launchDisplay(d.displayId)
|
|
499
|
+
.catch((e) => {
|
|
500
|
+
getSession(self).notifyError(`${e}`, e);
|
|
501
|
+
});
|
|
440
502
|
}
|
|
441
503
|
},
|
|
442
504
|
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { MenuItem } from '../../ui/index.ts';
|
|
2
|
+
import type { AbstractTrackModel, AbstractViewModel } from '../../util/types/index.ts';
|
|
2
3
|
import type { Instance } from '@jbrowse/mobx-state-tree';
|
|
3
4
|
/**
|
|
4
5
|
* #stateModel BaseViewModel
|
|
@@ -28,7 +29,7 @@ declare const BaseViewModel: import("@jbrowse/mobx-state-tree").IModelType<{
|
|
|
28
29
|
*
|
|
29
30
|
* `ViewContainer` mounts a view's body only while an IntersectionObserver
|
|
30
31
|
* says it is on screen, to hold the app under the WebGL2 context ceiling
|
|
31
|
-
* (`reference/
|
|
32
|
+
* (`reference/GPU_PORTABILITY.md`). A view below the fold therefore has
|
|
32
33
|
* no canvas, so nothing ever calls `markCanvasDrawn` and the pre-first-paint
|
|
33
34
|
* term of `displayPhase` pins every display in it at `loading` with nothing
|
|
34
35
|
* left to resolve it — which parks `[data-app-phase="ready"]` for the whole
|
|
@@ -46,15 +47,25 @@ declare const BaseViewModel: import("@jbrowse/mobx-state-tree").IModelType<{
|
|
|
46
47
|
} & {
|
|
47
48
|
/**
|
|
48
49
|
* #getter
|
|
49
|
-
*
|
|
50
|
-
*
|
|
50
|
+
* Overridable hook (default true): whether this view's mounted body
|
|
51
|
+
* renders its own displays. A linear genome view collapsed to its ruler
|
|
52
|
+
* mounts the scalebar and none of its tracks, so a display in it can no
|
|
53
|
+
* more paint than one in a view scrolled off screen. Views nested in this
|
|
54
|
+
* one are unaffected: they paint wherever their own body is.
|
|
55
|
+
*/
|
|
56
|
+
readonly rendersDisplays: boolean;
|
|
57
|
+
/**
|
|
58
|
+
* #getter
|
|
59
|
+
* Whether this view's displays have a canvas to paint into: its body is in
|
|
60
|
+
* the DOM, counting the views it is nested inside, and the body renders
|
|
61
|
+
* them (`rendersDisplays`). This is the question a display's phase asks.
|
|
51
62
|
*
|
|
52
|
-
* `bodyMounted` alone answers
|
|
53
|
-
* directly. A view nested in another view (a synteny row, a
|
|
54
|
-
* panel) has no container writing its flag, so it reads `true`
|
|
55
|
-
* while its whole subtree is out of the DOM, and every display in
|
|
56
|
-
* for a first paint that nothing will make — the hang this flag
|
|
57
|
-
* prevent, one level down.
|
|
63
|
+
* `bodyMounted` alone answers the DOM half only for a view a container
|
|
64
|
+
* renders directly. A view nested in another view (a synteny row, a
|
|
65
|
+
* breakpoint panel) has no container writing its flag, so it reads `true`
|
|
66
|
+
* forever while its whole subtree is out of the DOM, and every display in
|
|
67
|
+
* it waits for a first paint that nothing will make — the hang this flag
|
|
68
|
+
* exists to prevent, one level down.
|
|
58
69
|
*
|
|
59
70
|
* An ancestor that does not carry the flag at all leaves the answer alone
|
|
60
71
|
* rather than excusing the paint: only an explicit `false` unmounts, so a
|
|
@@ -66,6 +77,30 @@ declare const BaseViewModel: import("@jbrowse/mobx-state-tree").IModelType<{
|
|
|
66
77
|
* #method
|
|
67
78
|
*/
|
|
68
79
|
menuItems(): MenuItem[];
|
|
80
|
+
/**
|
|
81
|
+
* #getter
|
|
82
|
+
* The tracks this view puts in the census — its own, not a nested view's.
|
|
83
|
+
*
|
|
84
|
+
* Empty here, and overridden by the views that have any: the base cannot
|
|
85
|
+
* read `self.tracks` for them, because what a view keeps under that name
|
|
86
|
+
* is the view's business. react-msaview's holds its MSA annotation rows —
|
|
87
|
+
* `{ReactComponent, model}` objects with no configuration and no displays
|
|
88
|
+
* — and a base that helped itself to them handed them to the readiness
|
|
89
|
+
* marker as tracks, which error-paged every session holding an MSA view.
|
|
90
|
+
*/
|
|
91
|
+
readonly ownTracks: AbstractTrackModel[];
|
|
92
|
+
/**
|
|
93
|
+
* #getter
|
|
94
|
+
* The views nested directly inside this one, which the census counts as
|
|
95
|
+
* views in their own right — a synteny stack's genome rows, a breakpoint
|
|
96
|
+
* split view's panels.
|
|
97
|
+
*
|
|
98
|
+
* Empty here for the same reason, and the dotplot is why it has to be a
|
|
99
|
+
* declaration rather than a walk of `views`: that prop name holds its two
|
|
100
|
+
* 1D *axis* models, which are view-shaped and are not views the user
|
|
101
|
+
* opened. No structural test separates the two — only the view knows.
|
|
102
|
+
*/
|
|
103
|
+
readonly ownViews: AbstractViewModel[];
|
|
69
104
|
} & {
|
|
70
105
|
/**
|
|
71
106
|
* #action
|
|
@@ -134,7 +169,7 @@ export declare const BaseViewModelWithDisplayedRegions: import("@jbrowse/mobx-st
|
|
|
134
169
|
*
|
|
135
170
|
* `ViewContainer` mounts a view's body only while an IntersectionObserver
|
|
136
171
|
* says it is on screen, to hold the app under the WebGL2 context ceiling
|
|
137
|
-
* (`reference/
|
|
172
|
+
* (`reference/GPU_PORTABILITY.md`). A view below the fold therefore has
|
|
138
173
|
* no canvas, so nothing ever calls `markCanvasDrawn` and the pre-first-paint
|
|
139
174
|
* term of `displayPhase` pins every display in it at `loading` with nothing
|
|
140
175
|
* left to resolve it — which parks `[data-app-phase="ready"]` for the whole
|
|
@@ -152,15 +187,25 @@ export declare const BaseViewModelWithDisplayedRegions: import("@jbrowse/mobx-st
|
|
|
152
187
|
} & {
|
|
153
188
|
/**
|
|
154
189
|
* #getter
|
|
155
|
-
*
|
|
156
|
-
*
|
|
190
|
+
* Overridable hook (default true): whether this view's mounted body
|
|
191
|
+
* renders its own displays. A linear genome view collapsed to its ruler
|
|
192
|
+
* mounts the scalebar and none of its tracks, so a display in it can no
|
|
193
|
+
* more paint than one in a view scrolled off screen. Views nested in this
|
|
194
|
+
* one are unaffected: they paint wherever their own body is.
|
|
195
|
+
*/
|
|
196
|
+
readonly rendersDisplays: boolean;
|
|
197
|
+
/**
|
|
198
|
+
* #getter
|
|
199
|
+
* Whether this view's displays have a canvas to paint into: its body is in
|
|
200
|
+
* the DOM, counting the views it is nested inside, and the body renders
|
|
201
|
+
* them (`rendersDisplays`). This is the question a display's phase asks.
|
|
157
202
|
*
|
|
158
|
-
* `bodyMounted` alone answers
|
|
159
|
-
* directly. A view nested in another view (a synteny row, a
|
|
160
|
-
* panel) has no container writing its flag, so it reads `true`
|
|
161
|
-
* while its whole subtree is out of the DOM, and every display in
|
|
162
|
-
* for a first paint that nothing will make — the hang this flag
|
|
163
|
-
* prevent, one level down.
|
|
203
|
+
* `bodyMounted` alone answers the DOM half only for a view a container
|
|
204
|
+
* renders directly. A view nested in another view (a synteny row, a
|
|
205
|
+
* breakpoint panel) has no container writing its flag, so it reads `true`
|
|
206
|
+
* forever while its whole subtree is out of the DOM, and every display in
|
|
207
|
+
* it waits for a first paint that nothing will make — the hang this flag
|
|
208
|
+
* exists to prevent, one level down.
|
|
164
209
|
*
|
|
165
210
|
* An ancestor that does not carry the flag at all leaves the answer alone
|
|
166
211
|
* rather than excusing the paint: only an explicit `false` unmounts, so a
|
|
@@ -172,6 +217,30 @@ export declare const BaseViewModelWithDisplayedRegions: import("@jbrowse/mobx-st
|
|
|
172
217
|
* #method
|
|
173
218
|
*/
|
|
174
219
|
menuItems(): MenuItem[];
|
|
220
|
+
/**
|
|
221
|
+
* #getter
|
|
222
|
+
* The tracks this view puts in the census — its own, not a nested view's.
|
|
223
|
+
*
|
|
224
|
+
* Empty here, and overridden by the views that have any: the base cannot
|
|
225
|
+
* read `self.tracks` for them, because what a view keeps under that name
|
|
226
|
+
* is the view's business. react-msaview's holds its MSA annotation rows —
|
|
227
|
+
* `{ReactComponent, model}` objects with no configuration and no displays
|
|
228
|
+
* — and a base that helped itself to them handed them to the readiness
|
|
229
|
+
* marker as tracks, which error-paged every session holding an MSA view.
|
|
230
|
+
*/
|
|
231
|
+
readonly ownTracks: AbstractTrackModel[];
|
|
232
|
+
/**
|
|
233
|
+
* #getter
|
|
234
|
+
* The views nested directly inside this one, which the census counts as
|
|
235
|
+
* views in their own right — a synteny stack's genome rows, a breakpoint
|
|
236
|
+
* split view's panels.
|
|
237
|
+
*
|
|
238
|
+
* Empty here for the same reason, and the dotplot is why it has to be a
|
|
239
|
+
* declaration rather than a walk of `views`: that prop name holds its two
|
|
240
|
+
* 1D *axis* models, which are view-shaped and are not views the user
|
|
241
|
+
* opened. No structural test separates the two — only the view knows.
|
|
242
|
+
*/
|
|
243
|
+
readonly ownViews: AbstractViewModel[];
|
|
175
244
|
} & {
|
|
176
245
|
/**
|
|
177
246
|
* #action
|