@jbrowse/core 5.0.0-beta.1 → 5.0.0-beta.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1709 -390
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +5 -5
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +3 -5
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +34 -29
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCard.js +1 -4
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.d.ts +11 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.js +37 -14
- package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.d.ts +1 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.js +15 -31
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.d.ts +4 -3
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.js +12 -25
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.d.ts +11 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.js +11 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.d.ts +8 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.js +24 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Formatter.js +6 -4
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.d.ts +4 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.js +17 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +5 -3
- package/esm/BaseFeatureWidget/BaseFeatureDetail/index.d.ts +6 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/index.js +7 -18
- package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.d.ts +16 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.js +49 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/util.d.ts +0 -8
- package/esm/BaseFeatureWidget/BaseFeatureDetail/util.js +6 -29
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceContents.js +7 -34
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeaturePanel.d.ts +2 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceName.js +2 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.js +3 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.d.ts +12 -0
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.js +12 -5
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/useSequenceData.js +8 -5
- package/esm/BaseFeatureWidget/configSchema.d.ts +1 -1
- package/esm/BaseFeatureWidget/formatDetails.d.ts +13 -29
- package/esm/BaseFeatureWidget/formatDetails.js +62 -83
- package/esm/BaseFeatureWidget/index.d.ts +2 -1
- package/esm/BaseFeatureWidget/stateModelFactory.d.ts +42 -29
- package/esm/BaseFeatureWidget/stateModelFactory.js +98 -98
- package/esm/BaseFeatureWidget/types.d.ts +12 -6
- package/esm/BaseFeatureWidget/util.d.ts +0 -10
- package/esm/BaseFeatureWidget/util.js +0 -17
- package/esm/CorePlugin.js +34 -3
- package/esm/PluginLoader.d.ts +24 -13
- package/esm/PluginLoader.js +167 -51
- package/esm/PluginManager.d.ts +130 -24
- package/esm/PluginManager.js +180 -32
- package/esm/ReExports/MuiDataGridReExports.d.ts +1 -0
- package/esm/ReExports/MuiDataGridReExports.js +2 -2
- package/esm/ReExports/coreModules.generated.d.ts +2 -0
- package/esm/ReExports/coreModules.generated.js +530 -0
- package/esm/ReExports/coreWorkerModules.generated.d.ts +2 -0
- package/esm/ReExports/coreWorkerModules.generated.js +490 -0
- package/esm/ReExports/frameworkModules.d.ts +2 -0
- package/esm/ReExports/frameworkModules.js +68 -0
- package/esm/ReExports/frameworkShared.d.ts +12 -0
- package/esm/ReExports/frameworkShared.js +16 -0
- package/esm/ReExports/frameworkWorkerModules.generated.d.ts +2 -0
- package/esm/ReExports/frameworkWorkerModules.generated.js +130 -0
- package/esm/ReExports/list.js +528 -79
- package/esm/ReExports/modules.d.ts +1 -1
- package/esm/ReExports/modules.js +10 -165
- package/esm/ReExports/registry.d.ts +1 -0
- package/esm/ReExports/registry.js +23 -5
- package/esm/ReExports/uiStub.d.ts +3 -0
- package/esm/ReExports/uiStub.js +33 -0
- package/esm/ReExports/workerModules.d.ts +2 -0
- package/esm/ReExports/workerModules.js +11 -0
- package/esm/TextSearch/TextSearchManager.d.ts +27 -13
- package/esm/TextSearch/TextSearchManager.js +77 -36
- package/esm/TextSearch/places.d.ts +12 -0
- package/esm/TextSearch/places.js +94 -0
- package/esm/assemblyManager/assembly.d.ts +21 -19
- package/esm/assemblyManager/assembly.js +28 -26
- package/esm/assemblyManager/assemblyAdapters.d.ts +1 -1
- package/esm/assemblyManager/assemblyAdapters.js +8 -2
- package/esm/assemblyManager/assemblyConfigSchema.d.ts +31 -90
- package/esm/assemblyManager/assemblyConfigSchema.js +35 -47
- package/esm/assemblyManager/assemblyManager.d.ts +35 -180
- package/esm/assemblyManager/assemblyManager.js +47 -51
- package/esm/assemblyManager/expandAssemblyConfigShorthand.d.ts +25 -18
- package/esm/assemblyManager/expandAssemblyConfigShorthand.js +78 -49
- package/esm/assemblyManager/geneticCodes.js +2 -5
- package/esm/assemblyManager/getSequenceAdapterConfig.d.ts +10 -0
- package/esm/assemblyManager/getSequenceAdapterConfig.js +10 -0
- package/esm/assemblyManager/indexAssemblyNames.d.ts +9 -0
- package/esm/assemblyManager/indexAssemblyNames.js +22 -0
- package/esm/assemblyManager/loadRefNameMap.d.ts +1 -1
- package/esm/assemblyManager/loadRefNameMap.js +4 -9
- package/esm/assemblyManager/refNameMapKey.d.ts +7 -0
- package/esm/assemblyManager/refNameMapKey.js +12 -0
- package/esm/checkPlugins.d.ts +2 -0
- package/esm/checkPlugins.js +38 -17
- package/esm/configuration/bamIndexFields.d.ts +49 -0
- package/esm/configuration/bamIndexFields.js +41 -0
- package/esm/configuration/configurationSchema.d.ts +101 -71
- package/esm/configuration/configurationSchema.js +207 -134
- package/esm/configuration/configurationSchemaUnion.d.ts +39 -0
- package/esm/configuration/configurationSchemaUnion.js +56 -0
- package/esm/configuration/configurationSlot.d.ts +150 -60
- package/esm/configuration/configurationSlot.js +103 -75
- package/esm/configuration/fillLocations.d.ts +14 -0
- package/esm/configuration/fillLocations.js +14 -0
- package/esm/configuration/formatAboutConfigSchema.d.ts +7 -21
- package/esm/configuration/formatDetailsConfigSchema.d.ts +11 -37
- package/esm/configuration/formatDetailsConfigSchema.js +10 -13
- package/esm/configuration/fullConfSnapshot.d.ts +4 -19
- package/esm/configuration/fullConfSnapshot.js +30 -52
- package/esm/configuration/getConf.d.ts +45 -41
- package/esm/configuration/getConf.js +111 -44
- package/esm/configuration/index.d.ts +26 -11
- package/esm/configuration/index.js +16 -7
- package/esm/configuration/indexType.d.ts +26 -0
- package/esm/configuration/indexType.js +38 -0
- package/esm/configuration/mergeFormatCallbacks.d.ts +6 -7
- package/esm/configuration/mergeFormatCallbacks.js +13 -10
- package/esm/configuration/plot.d.ts +61 -0
- package/esm/configuration/plot.js +142 -0
- package/esm/configuration/readConfObject.d.ts +2 -24
- package/esm/configuration/readConfObject.js +20 -63
- package/esm/configuration/requirements.d.ts +37 -0
- package/esm/configuration/requirements.js +88 -0
- package/esm/configuration/schemaRegistry.d.ts +32 -15
- package/esm/configuration/schemaRegistry.js +33 -35
- package/esm/configuration/schemaTypes.d.ts +21 -5
- package/esm/configuration/schemaTypes.js +66 -55
- package/esm/configuration/slotFacade.d.ts +12 -29
- package/esm/configuration/slotFacade.js +44 -23
- package/esm/configuration/snapshotPreprocess.d.ts +43 -0
- package/esm/configuration/snapshotPreprocess.js +161 -0
- package/esm/configuration/tabixIndexFields.d.ts +30 -4
- package/esm/configuration/tabixIndexFields.js +21 -4
- package/esm/configuration/tabixShorthand.d.ts +34 -17
- package/esm/configuration/tabixShorthand.js +49 -22
- package/esm/configuration/types.d.ts +182 -43
- package/esm/configuration/uriShorthand.d.ts +9 -0
- package/esm/configuration/uriShorthand.js +16 -0
- package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +13 -19
- package/esm/data_adapters/BaseAdapter/BaseAdapter.js +12 -19
- package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +40 -2
- package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +68 -5
- package/esm/data_adapters/BaseAdapter/featureDensity.d.ts +40 -0
- package/esm/data_adapters/BaseAdapter/featureDensity.js +31 -0
- package/esm/data_adapters/BaseAdapter/index.d.ts +23 -3
- package/esm/data_adapters/BaseAdapter/index.js +1 -0
- package/esm/data_adapters/BaseAdapter/rowSources.d.ts +37 -0
- package/esm/data_adapters/BaseAdapter/rowSources.js +7 -0
- package/esm/data_adapters/BaseAdapter/stats.d.ts +33 -1
- package/esm/data_adapters/BaseAdapter/stats.js +52 -13
- package/esm/data_adapters/BaseAdapter/types.d.ts +8 -12
- package/esm/data_adapters/BaseAdapter/zoomRange.d.ts +10 -0
- package/esm/data_adapters/CytobandAdapter/CytobandAdapter.js +1 -1
- package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +7 -11
- package/esm/data_adapters/CytobandAdapter/configSchema.js +3 -17
- package/esm/data_adapters/dataAdapterCache.d.ts +19 -2
- package/esm/data_adapters/dataAdapterCache.js +44 -10
- package/esm/data_adapters/getFeatureAdapter.d.ts +6 -4
- package/esm/data_adapters/getFeatureAdapter.js +8 -8
- package/esm/data_adapters/getSequenceSubAdapter.d.ts +7 -9
- package/esm/data_adapters/getSequenceSubAdapter.js +8 -10
- package/esm/pluggableElementTypes/AdapterType.d.ts +8 -8
- package/esm/pluggableElementTypes/AdapterType.js +1 -1
- package/esm/pluggableElementTypes/DisplayType.d.ts +53 -16
- package/esm/pluggableElementTypes/DisplayType.js +28 -12
- package/esm/pluggableElementTypes/LazyStateModelElement.d.ts +32 -0
- package/esm/pluggableElementTypes/LazyStateModelElement.js +77 -0
- package/esm/pluggableElementTypes/PluggableElementBase.d.ts +3 -5
- package/esm/pluggableElementTypes/PluggableElementBase.js +3 -5
- package/esm/pluggableElementTypes/RpcMethodType.d.ts +11 -1
- package/esm/pluggableElementTypes/RpcMethodType.js +25 -9
- package/esm/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.d.ts +1 -2
- package/esm/pluggableElementTypes/TextSearchAdapterType.d.ts +7 -7
- package/esm/pluggableElementTypes/ViewType.d.ts +20 -4
- package/esm/pluggableElementTypes/ViewType.js +32 -4
- package/esm/pluggableElementTypes/WidgetType.d.ts +6 -0
- package/esm/pluggableElementTypes/WidgetType.js +6 -0
- package/esm/pluggableElementTypes/addMenuItems.d.ts +3 -2
- package/esm/pluggableElementTypes/extendElementType.d.ts +1 -2
- package/esm/pluggableElementTypes/extendElementType.js +9 -5
- package/esm/pluggableElementTypes/index.d.ts +2 -1
- package/esm/pluggableElementTypes/index.js +2 -9
- package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +19 -9
- package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +122 -28
- package/esm/pluggableElementTypes/models/BaseDisplayModel.js +155 -11
- package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +65 -16
- package/esm/pluggableElementTypes/models/BaseTrackModel.js +179 -117
- package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +87 -18
- package/esm/pluggableElementTypes/models/BaseViewModel.js +54 -11
- package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +26 -16
- package/esm/pluggableElementTypes/models/assertDisplayContract.d.ts +15 -11
- package/esm/pluggableElementTypes/models/assertDisplayContract.js +25 -32
- package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +22 -18
- package/esm/pluggableElementTypes/models/baseConnectionConfig.js +5 -5
- package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +26 -31
- package/esm/pluggableElementTypes/models/baseTrackConfig.d.ts +108 -147
- package/esm/pluggableElementTypes/models/baseTrackConfig.js +96 -73
- package/esm/pluggableElementTypes/models/components/SaveTrackData.js +4 -6
- package/esm/pluggableElementTypes/models/components/fetchTrackData.d.ts +3 -4
- package/esm/pluggableElementTypes/models/components/fetchTrackData.js +3 -3
- package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +23 -13
- package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +80 -48
- package/esm/pluggableElementTypes/models/index.d.ts +2 -3
- package/esm/pluggableElementTypes/models/index.js +2 -3
- package/esm/pluggableElementTypes/models/migrateTrackConfig.d.ts +15 -1
- package/esm/pluggableElementTypes/models/migrateTrackConfig.js +85 -25
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.d.ts +4 -3
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.js +141 -19
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/types.d.ts +3 -3
- package/esm/pluginDefinitions.d.ts +34 -7
- package/esm/pluginDefinitions.js +54 -20
- package/esm/rpc/BaseRpcDriver.d.ts +2 -2
- package/esm/rpc/BaseRpcDriver.js +25 -30
- package/esm/rpc/MainThreadRpcDriver.d.ts +2 -2
- package/esm/rpc/MainThreadRpcDriver.js +13 -8
- package/esm/rpc/RpcClient.d.ts +18 -6
- package/esm/rpc/RpcClient.js +51 -16
- package/esm/rpc/RpcManager.d.ts +14 -10
- package/esm/rpc/RpcManager.js +11 -1
- package/esm/rpc/RpcRegistry.d.ts +40 -7
- package/esm/rpc/RpcServer.d.ts +3 -1
- package/esm/rpc/RpcServer.js +19 -12
- package/esm/rpc/WebWorkerRpcDriver.d.ts +11 -4
- package/esm/rpc/WebWorkerRpcDriver.js +64 -68
- package/esm/rpc/byteBudget.d.ts +20 -5
- package/esm/rpc/byteBudget.js +16 -5
- package/esm/rpc/configSchema.d.ts +7 -21
- package/esm/rpc/coreRpcMethods.d.ts +4 -0
- package/esm/rpc/coreRpcMethods.js +4 -0
- package/esm/rpc/methods/CoreGetEncodedFeature.d.ts +13 -0
- package/esm/rpc/methods/CoreGetEncodedFeature.js +32 -0
- package/esm/rpc/methods/CoreGetEncodedLayers.d.ts +16 -0
- package/esm/rpc/methods/CoreGetEncodedLayers.js +59 -0
- package/esm/rpc/methods/CoreGetExportData.js +3 -4
- package/esm/rpc/methods/CoreGetFeatureDensity.d.ts +11 -0
- package/esm/rpc/methods/CoreGetFeatureDensity.js +22 -0
- package/esm/rpc/methods/CoreGetFeatures.js +3 -5
- package/esm/rpc/methods/CoreGetRefNames.js +2 -12
- package/esm/rpc/methods/CoreGetRegionByteEstimate.js +1 -1
- package/esm/rpc/methods/CoreGetSequence.js +2 -2
- package/esm/rpc/methods/CoreLoadAdapterCode.d.ts +13 -0
- package/esm/rpc/methods/CoreLoadAdapterCode.js +16 -0
- package/esm/rpc/methods/layerFeatures.d.ts +33 -0
- package/esm/rpc/methods/layerFeatures.js +29 -0
- package/esm/svg/SvgExport.js +6 -7
- package/esm/svg/SvgThemeProviders.d.ts +12 -0
- package/esm/svg/SvgThemeProviders.js +15 -0
- package/esm/svg/exportViewSvg.d.ts +28 -0
- package/esm/svg/exportViewSvg.js +13 -0
- package/esm/svg/normalizeSvgMarkup.d.ts +7 -0
- package/esm/svg/normalizeSvgMarkup.js +99 -0
- package/esm/svg/serializeSvg.d.ts +7 -0
- package/esm/svg/serializeSvg.js +11 -0
- package/esm/svg/svgId.d.ts +1 -1
- package/esm/svg/svgId.js +1 -1
- package/esm/svg/svgReady.d.ts +9 -7
- package/esm/svg/svgReady.js +8 -7
- package/esm/svg/trackNames.d.ts +7 -5
- package/esm/svg/trackNames.js +12 -9
- package/esm/svg/wrapSvgExport.js +6 -74
- package/esm/ui/AddCustomPluginDialog.js +3 -8
- package/esm/ui/AppReadyMarker.d.ts +45 -0
- package/esm/ui/AppReadyMarker.js +89 -0
- package/esm/ui/BaseExportSvgDialog.d.ts +1 -1
- package/esm/ui/CascadingMenu.js +181 -104
- package/esm/ui/DropDownMenu.js +2 -1
- package/esm/ui/ErrorBanner.js +1 -1
- package/esm/ui/ErrorBoundary.d.ts +2 -2
- package/esm/ui/ErrorMessageStackTraceContents.js +2 -1
- package/esm/ui/ErrorMessageStackTraceDialog.js +5 -11
- package/esm/ui/ExportSvgDialog.d.ts +1 -1
- package/esm/ui/FileDropZone.js +2 -1
- package/esm/ui/FileSelector/useInternetAccounts.d.ts +156 -96
- package/esm/ui/HoverMenu.d.ts +1 -2
- package/esm/ui/HoverMenu.js +6 -3
- package/esm/ui/JexlFilterDialog.d.ts +13 -10
- package/esm/ui/JexlFilterDialog.js +122 -50
- package/esm/ui/JexlFilterRowEditors.d.ts +15 -0
- package/esm/ui/JexlFilterRowEditors.js +90 -0
- package/esm/ui/LazyBaseTooltip.d.ts +4 -0
- package/esm/ui/LazyBaseTooltip.js +9 -0
- package/esm/ui/LegendSwatchGlyph.js +26 -21
- package/esm/ui/LoadingOverlay.d.ts +14 -0
- package/esm/ui/LoadingOverlay.js +4 -2
- package/esm/ui/MenuTypes.d.ts +23 -53
- package/esm/ui/MenuTypes.js +3 -0
- package/esm/ui/MonospaceTextField.d.ts +2 -1
- package/esm/ui/MonospaceTextField.js +23 -20
- package/esm/ui/PaletteContext.d.ts +10 -5
- package/esm/ui/PaletteContext.js +44 -6
- package/esm/ui/RefNameAutocomplete/SearchOption.d.ts +13 -0
- package/esm/ui/RefNameAutocomplete/SearchOption.js +45 -0
- package/esm/ui/RefNameAutocomplete/index.d.ts +1 -2
- package/esm/ui/RefNameAutocomplete/index.js +8 -2
- package/esm/ui/RefNameAutocomplete/util.d.ts +13 -0
- package/esm/ui/RefNameAutocomplete/util.js +42 -1
- package/esm/ui/ResizeHandle.d.ts +3 -1
- package/esm/ui/ResizeHandle.js +44 -11
- package/esm/ui/ScrollChrome.d.ts +13 -0
- package/esm/ui/ScrollChrome.js +11 -0
- package/esm/ui/ScrollEdgeShadow.d.ts +6 -9
- package/esm/ui/ScrollEdgeShadow.js +14 -35
- package/esm/ui/ScrollZoomToggle.d.ts +4 -27
- package/esm/ui/ScrollZoomToggle.js +34 -51
- package/esm/ui/SessionJsonPanel.d.ts +3 -0
- package/esm/ui/SessionJsonPanel.js +14 -0
- package/esm/ui/SettingsChangesTable.d.ts +1 -0
- package/esm/ui/SettingsChangesTable.js +49 -11
- package/esm/ui/ShareLinkField.d.ts +1 -3
- package/esm/ui/ShareLinkField.js +13 -40
- package/esm/ui/SizeSliderRow.d.ts +1 -3
- package/esm/ui/SizeSliderRow.js +4 -6
- package/esm/ui/SnackbarModel.js +79 -67
- package/esm/ui/StatusProgressBar.js +2 -2
- package/esm/ui/SvgColorLegend.d.ts +9 -4
- package/esm/ui/SvgColorLegend.js +82 -41
- package/esm/ui/VerticalScrollbar.d.ts +13 -34
- package/esm/ui/VerticalScrollbar.js +29 -83
- package/esm/ui/ViewLoadingScreen.d.ts +5 -4
- package/esm/ui/ViewLoadingScreen.js +8 -32
- package/esm/ui/colorScale.d.ts +92 -0
- package/esm/ui/colorScale.js +72 -0
- package/esm/ui/colors.d.ts +64 -0
- package/esm/ui/colors.js +230 -1
- package/esm/ui/hoverBoxStyle.d.ts +14 -2
- package/esm/ui/hoverBoxStyle.js +17 -2
- package/esm/ui/index.d.ts +12 -12
- package/esm/ui/index.js +14 -22
- package/esm/ui/launchViewMenu.js +15 -5
- package/esm/ui/legendMenuItem.d.ts +10 -32
- package/esm/ui/legendMenuItem.js +9 -36
- package/esm/ui/legendSpec.d.ts +15 -8
- package/esm/ui/legendSpec.js +14 -23
- package/esm/ui/makeSizeMenu.d.ts +0 -6
- package/esm/ui/makeSizeMenu.js +6 -30
- package/esm/ui/measureLegendText.js +1 -1
- package/esm/ui/menuItemAdornment.d.ts +9 -20
- package/esm/ui/menuItemAdornment.js +10 -32
- package/esm/ui/menuItems.d.ts +2 -7
- package/esm/ui/menuItems.js +1 -6
- package/esm/ui/multiTrackMenuItems.d.ts +6 -0
- package/esm/ui/palette.d.ts +118 -116
- package/esm/ui/palette.js +114 -75
- package/esm/ui/replaceViewAction.d.ts +1 -1
- package/esm/ui/replaceViewAction.js +1 -1
- package/esm/ui/theme.d.ts +43 -119
- package/esm/ui/theme.js +62 -78
- package/esm/ui/toggleMenuItems.d.ts +1 -3
- package/esm/ui/toggleMenuItems.js +6 -5
- package/esm/ui/useAssemblySelection.d.ts +4 -4
- package/esm/ui/viewHeaderHeight.d.ts +1 -0
- package/esm/ui/viewHeaderHeight.js +1 -0
- package/esm/util/Base1DUtils.d.ts +5 -3
- package/esm/util/Base1DUtils.js +14 -6
- package/esm/util/Base1DViewModel.d.ts +2 -1
- package/esm/util/Base1DViewModel.js +3 -2
- package/esm/util/SvgCanvas.d.ts +15 -13
- package/esm/util/SvgCanvas.js +76 -56
- package/esm/util/TimeTraveller.d.ts +3 -0
- package/esm/util/TimeTraveller.js +34 -2
- package/esm/util/aborting.d.ts +39 -0
- package/esm/util/aborting.js +88 -6
- package/esm/util/adapterMetadata.d.ts +1 -1
- package/esm/util/adapterMetadata.js +6 -5
- package/esm/util/addAndShowTrack.d.ts +2 -5
- package/esm/util/addAndShowTrack.js +5 -1
- package/esm/util/addRelativeUris.d.ts +17 -5
- package/esm/util/addRelativeUris.js +46 -10
- package/esm/util/addTrackFromWidget.d.ts +2 -5
- package/esm/util/addTrackFromWidget.js +5 -4
- package/esm/util/aggregateFieldName.d.ts +10 -0
- package/esm/util/aggregateFieldName.js +8 -0
- package/esm/util/analytics.js +46 -13
- package/esm/util/animationAllowed.d.ts +9 -0
- package/esm/util/animationAllowed.js +13 -0
- package/esm/util/applyRowResizeWheel.d.ts +10 -5
- package/esm/util/applyRowResizeWheel.js +10 -21
- package/esm/util/bandHeight.d.ts +10 -0
- package/esm/util/bandHeight.js +29 -0
- package/esm/util/bandLayout.d.ts +4 -4
- package/esm/util/bandLayout.js +4 -4
- package/esm/util/baseDisplayConfig.d.ts +8 -0
- package/esm/util/baseDisplayConfig.js +27 -0
- package/esm/util/bezierConnector.d.ts +4 -3
- package/esm/util/bezierConnector.js +38 -45
- package/esm/util/bgzfWorkerPool.d.ts +20 -74
- package/esm/util/bgzfWorkerPool.js +20 -74
- package/esm/util/binnedAggregate.d.ts +17 -0
- package/esm/util/binnedAggregate.js +275 -0
- package/esm/util/cacheBudgets.d.ts +22 -19
- package/esm/util/cacheBudgets.js +22 -19
- package/esm/util/cachedSetup.d.ts +16 -6
- package/esm/util/cachedSetup.js +108 -38
- package/esm/util/categoricalField.d.ts +56 -0
- package/esm/util/categoricalField.js +73 -0
- package/esm/util/cellMatches.d.ts +23 -0
- package/esm/util/cellMatches.js +264 -0
- package/esm/util/cellsStep.d.ts +29 -0
- package/esm/util/cellsStep.js +437 -0
- package/esm/util/clampToContig.d.ts +17 -0
- package/esm/util/clampToContig.js +19 -0
- package/esm/util/coarseStripHTML.js +1 -2
- package/esm/util/color/cssColorsLevel4.d.ts +1 -0
- package/esm/util/color/cssColorsLevel4.js +1 -0
- package/esm/util/color/index.d.ts +5 -3
- package/esm/util/color/index.js +7 -4
- package/esm/util/colorBits.d.ts +3 -3
- package/esm/util/colorBits.js +19 -44
- package/esm/util/colorRamp.d.ts +49 -5
- package/esm/util/colorRamp.js +169 -18
- package/esm/util/colorScale.d.ts +156 -0
- package/esm/util/colorScale.js +243 -0
- package/esm/util/colorSchemes.d.ts +21 -0
- package/esm/util/colorSchemes.js +30 -0
- package/esm/util/copyToClipboard.js +8 -1
- package/esm/util/{createStopTokenRotation.d.ts → createAbortRotation.d.ts} +21 -23
- package/esm/util/{createStopTokenRotation.js → createAbortRotation.js} +21 -52
- package/esm/util/createSvgRasterCanvas.d.ts +10 -0
- package/esm/util/cssColorParse.d.ts +15 -0
- package/esm/util/cssColorParse.js +53 -0
- package/esm/util/diagonalizeRegions.d.ts +2 -3
- package/esm/util/diagonalizeRegions.js +8 -13
- package/esm/util/expandLooseSearchIndex.d.ts +19 -0
- package/esm/util/expandLooseSearchIndex.js +29 -0
- package/esm/util/featureTable.d.ts +224 -0
- package/esm/util/featureTable.js +366 -0
- package/esm/util/featureTransforms.d.ts +81 -0
- package/esm/util/featureTransforms.js +1231 -0
- package/esm/util/featureTypes.d.ts +24 -0
- package/esm/util/featureTypes.js +35 -0
- package/esm/util/fetchAndMaybeUnzip.js +16 -9
- package/esm/util/fetchContext.d.ts +7 -8
- package/esm/util/fetchContext.js +3 -3
- package/esm/util/fetchHub.d.ts +4 -2
- package/esm/util/fetchHub.js +2 -2
- package/esm/util/fetchPhases.d.ts +10 -10
- package/esm/util/fetchSeq.d.ts +2 -3
- package/esm/util/fetchSeq.js +2 -2
- package/esm/util/fieldReader.d.ts +17 -0
- package/esm/util/fieldReader.js +62 -0
- package/esm/util/formatBytes.js +1 -1
- package/esm/util/formatGuessers.d.ts +25 -14
- package/esm/util/formatGuessers.js +42 -27
- package/esm/util/formatRelativeTime.js +1 -1
- package/esm/util/freezeDeep.d.ts +8 -10
- package/esm/util/freezeDeep.js +8 -10
- package/esm/util/getLocationUri.d.ts +2 -1
- package/esm/util/getLocationUri.js +8 -2
- package/esm/util/groupKeys.d.ts +76 -0
- package/esm/util/groupKeys.js +156 -0
- package/esm/util/highlights.d.ts +10 -6
- package/esm/util/highlights.js +12 -25
- package/esm/util/hooks.d.ts +31 -2
- package/esm/util/hooks.js +72 -3
- package/esm/util/index.d.ts +11 -11
- package/esm/util/index.js +11 -10
- package/esm/util/indexCandidates.d.ts +1 -31
- package/esm/util/indexCandidates.js +5 -63
- package/esm/util/installFetch.d.ts +77 -37
- package/esm/util/installFetch.js +65 -38
- package/esm/util/installInitAutorun.d.ts +14 -13
- package/esm/util/installInitAutorun.js +17 -17
- package/esm/util/installPrerequisiteFetch.d.ts +115 -0
- package/esm/util/installPrerequisiteFetch.js +111 -0
- package/esm/util/intervals.js +9 -4
- package/esm/util/io/index.js +22 -15
- package/esm/util/isDataCurrent.d.ts +7 -5
- package/esm/util/isDataCurrent.js +9 -6
- package/esm/util/isTextEntryFocused.d.ts +7 -0
- package/esm/util/isTextEntryFocused.js +16 -0
- package/esm/util/jexl.js +24 -21
- package/esm/util/jexlFilterRows.d.ts +89 -0
- package/esm/util/jexlFilterRows.js +252 -0
- package/esm/util/jexlFilters.d.ts +32 -57
- package/esm/util/jexlFilters.js +31 -29
- package/esm/util/jexlStrings.d.ts +3 -4
- package/esm/util/jexlStrings.js +2 -3
- package/esm/util/layouts/GranularRectLayout.d.ts +8 -1
- package/esm/util/layouts/GranularRectLayout.js +25 -8
- package/esm/util/lazyAfterAttach.d.ts +13 -0
- package/esm/util/lazyAfterAttach.js +31 -0
- package/esm/util/lazyWithPreload.d.ts +19 -0
- package/esm/util/lazyWithPreload.js +27 -0
- package/esm/util/legendCandidates.d.ts +72 -0
- package/esm/util/legendCandidates.js +138 -0
- package/esm/util/locString.js +5 -2
- package/esm/util/localStorage.js +4 -4
- package/esm/util/markEncoding.d.ts +150 -0
- package/esm/util/markEncoding.js +885 -0
- package/esm/util/markEncodingTypes.d.ts +595 -0
- package/esm/util/markEncodingTypes.js +8 -0
- package/esm/util/mst-reflection.d.ts +2 -20
- package/esm/util/mst-reflection.js +3 -53
- package/esm/util/mstUtils.d.ts +31 -23
- package/esm/util/mstUtils.js +39 -24
- package/esm/util/numericUtils.d.ts +7 -0
- package/esm/util/numericUtils.js +16 -0
- package/esm/util/numericValue.d.ts +14 -0
- package/esm/util/numericValue.js +34 -0
- package/esm/util/openFeatureWidget.d.ts +5 -0
- package/esm/util/openFeatureWidget.js +2 -2
- package/esm/util/openViews.d.ts +17 -0
- package/esm/util/openViews.js +22 -0
- package/esm/util/parentWalk.d.ts +1 -1
- package/esm/util/parentWalk.js +1 -1
- package/esm/util/parseLineByLine.d.ts +4 -5
- package/esm/util/parseLineByLine.js +8 -14
- package/esm/util/pluginStore.d.ts +6 -8
- package/esm/util/pluginStore.js +17 -16
- package/esm/util/preloadComponent.d.ts +5 -0
- package/esm/util/preloadComponent.js +11 -0
- package/esm/util/progress.d.ts +22 -22
- package/esm/util/progress.js +27 -26
- package/esm/util/quantileExtent.d.ts +49 -0
- package/esm/util/quantileExtent.js +162 -0
- package/esm/util/range.d.ts +13 -9
- package/esm/util/range.js +17 -8
- package/esm/util/renameRegions.d.ts +26 -6
- package/esm/util/renameRegions.js +68 -54
- package/esm/util/renderToStaticMarkup.js +24 -14
- package/esm/util/rxjs.d.ts +23 -8
- package/esm/util/rxjs.js +61 -15
- package/esm/util/samplesTsv.d.ts +49 -0
- package/esm/util/samplesTsv.js +86 -0
- package/esm/util/scheduleDetachedDestroy.d.ts +18 -0
- package/esm/util/scheduleDetachedDestroy.js +24 -0
- package/esm/util/scrollLatch.d.ts +1 -0
- package/esm/util/scrollLatch.js +8 -0
- package/esm/util/selectEncodedFeature.d.ts +16 -0
- package/esm/util/selectEncodedFeature.js +34 -0
- package/esm/util/sessionSharing.d.ts +7 -5
- package/esm/util/sessionSharing.js +23 -23
- package/esm/util/shapeNameList.d.ts +2 -0
- package/esm/util/shapeNameList.js +6 -0
- package/esm/util/shapeNames.d.ts +7 -0
- package/esm/util/shapeNames.js +11 -0
- package/esm/util/simpleFeature.d.ts +0 -1
- package/esm/util/springAnimate.js +1 -1
- package/esm/util/starFusion.d.ts +26 -0
- package/esm/util/starFusion.js +37 -0
- package/esm/util/stepTables.d.ts +96 -0
- package/esm/util/stepTables.js +277 -0
- package/esm/util/svAlt.d.ts +145 -0
- package/esm/util/svAlt.js +364 -0
- package/esm/util/svgColorProps.d.ts +11 -0
- package/esm/util/svgColorProps.js +28 -1
- package/esm/util/systemColorScheme.d.ts +12 -0
- package/esm/util/systemColorScheme.js +27 -0
- package/esm/util/tabix.d.ts +19 -10
- package/esm/util/tabix.js +19 -14
- package/esm/util/thresholdScale.d.ts +91 -0
- package/esm/util/thresholdScale.js +166 -0
- package/esm/util/timeGate.d.ts +4 -5
- package/esm/util/timeGate.js +4 -5
- package/esm/util/trackConfigDelta.d.ts +26 -26
- package/esm/util/trackConfigDelta.js +63 -47
- package/esm/util/tracks.d.ts +120 -66
- package/esm/util/tracks.js +501 -151
- package/esm/util/translateTranscript.d.ts +44 -0
- package/esm/util/translateTranscript.js +102 -0
- package/esm/util/types/data.d.ts +0 -2
- package/esm/util/types/index.d.ts +121 -22
- package/esm/util/types/index.js +9 -0
- package/esm/util/types/mst.d.ts +3 -0
- package/esm/util/types/mst.js +4 -0
- package/esm/util/types/renameIds.d.ts +1 -0
- package/esm/util/types/renameIds.js +29 -0
- package/esm/util/types/services.d.ts +1 -1
- package/esm/util/unknownSnapshotKeys.d.ts +53 -0
- package/esm/util/unknownSnapshotKeys.js +76 -0
- package/esm/util/useFeatureSequence.js +5 -5
- package/esm/util/useFetch.d.ts +3 -4
- package/esm/util/useFetch.js +19 -10
- package/esm/util/useFetchPlugins.d.ts +6 -2
- package/esm/util/useFetchPlugins.js +7 -3
- package/esm/util/usePanZoom.js +10 -3
- package/esm/util/usePanelVirtualScroll.d.ts +7 -35
- package/esm/util/usePanelVirtualScroll.js +9 -36
- package/esm/util/useRafCommit.js +1 -0
- package/esm/util/useRowVirtualScroll.d.ts +6 -29
- package/esm/util/useRowVirtualScroll.js +8 -49
- package/esm/util/useVirtualScrollWheel.d.ts +20 -4
- package/esm/util/useVirtualScrollWheel.js +40 -74
- package/esm/util/viewHighlights.d.ts +3 -0
- package/esm/util/viewHighlights.js +5 -0
- package/esm/util/viewStatus.d.ts +47 -15
- package/esm/util/viewStatus.js +34 -0
- package/esm/util/wheelZoom.d.ts +7 -1
- package/esm/util/wheelZoom.js +85 -19
- package/esm/util/whenViewSettled.d.ts +55 -8
- package/esm/util/whenViewSettled.js +56 -7
- package/esm/util/withFeatureDetails.js +4 -0
- package/esm/util/withLaunchInput.d.ts +174 -0
- package/esm/util/withLaunchInput.js +274 -0
- package/package.json +75 -24
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.d.ts +0 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.js +0 -8
- package/esm/BaseFeatureWidget/BaseFeatureDetail/types.d.ts +0 -8
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.d.ts +0 -80
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.js +0 -583
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.d.ts +0 -141
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.js +0 -1116
- package/esm/ReExports/BaseFeatureDetails.d.ts +0 -1
- package/esm/ReExports/BaseFeatureDetails.js +0 -10
- package/esm/ReExports/index.d.ts +0 -1
- package/esm/ReExports/index.js +0 -1
- package/esm/ReExports/publicUtil.d.ts +0 -1
- package/esm/ReExports/publicUtil.js +0 -28
- package/esm/configuration/promotableDefaults.d.ts +0 -199
- package/esm/configuration/promotableDefaults.js +0 -326
- package/esm/configuration/promotablePin.d.ts +0 -55
- package/esm/configuration/promotablePin.js +0 -1
- package/esm/configuration/promotableResolve.d.ts +0 -108
- package/esm/configuration/promotableResolve.js +0 -117
- package/esm/configuration/promotableSlots.d.ts +0 -12
- package/esm/configuration/promotableSlots.js +0 -45
- package/esm/configuration/slotShape.d.ts +0 -12
- package/esm/configuration/slotShape.js +0 -84
- package/esm/pluggableElementTypes/models/HighlightsMixin.d.ts +0 -51
- package/esm/pluggableElementTypes/models/HighlightsMixin.js +0 -78
- package/esm/ui/PinAdornment.d.ts +0 -5
- package/esm/ui/PinAdornment.js +0 -79
- package/esm/ui/SvgGradientLegend.d.ts +0 -26
- package/esm/ui/SvgGradientLegend.js +0 -26
- package/esm/ui/highlightChipReveal.d.ts +0 -32
- package/esm/ui/highlightChipReveal.js +0 -39
- package/esm/ui/promotableMenuItems.d.ts +0 -19
- package/esm/ui/promotableMenuItems.js +0 -89
- package/esm/ui/promotablePinCoverage.d.ts +0 -44
- package/esm/ui/promotablePinCoverage.js +0 -87
- package/esm/util/applyInitSettings.d.ts +0 -79
- package/esm/util/applyInitSettings.js +0 -91
- package/esm/util/openDisplays.d.ts +0 -23
- package/esm/util/openDisplays.js +0 -79
- package/esm/util/stopToken.d.ts +0 -211
- package/esm/util/stopToken.js +0 -438
- /package/esm/{BaseFeatureWidget/BaseFeatureDetail/types.js → data_adapters/BaseAdapter/zoomRange.js} +0 -0
package/esm/ui/ShareLinkField.js
CHANGED
|
@@ -1,42 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { formatBytes } from '../util/formatBytes.js';
|
|
4
|
-
import { makeStyles } from '../util/tss-react/index.js';
|
|
5
|
-
// Two ceilings, because a long link fails two different ways.
|
|
6
|
-
//
|
|
7
|
-
// Past LARGE_URL_LENGTH the link still opens everywhere, but it stops
|
|
8
|
-
// surviving delivery: mail and chat clients wrap or truncate it, and anything
|
|
9
|
-
// that moves it from a hash into a request line meets the ~8k a server accepts
|
|
10
|
-
// there.
|
|
11
|
-
//
|
|
12
|
-
// Past UNUSABLE_URL_LENGTH it does not open at all — WebKit caps a url around
|
|
13
|
-
// 80k characters, so Safari and everything on iOS refuse it however it arrives.
|
|
14
|
-
// Chromium's own cap is 2 MB, which is why the person who made the link sees
|
|
15
|
-
// nothing wrong with it and the recipient sees a browser error.
|
|
16
|
-
const LARGE_URL_LENGTH = 8000;
|
|
17
|
-
const UNUSABLE_URL_LENGTH = 80000;
|
|
18
|
-
const useStyles = makeStyles()(theme => ({
|
|
19
|
-
warning: {
|
|
20
|
-
color: theme.palette.warning.main,
|
|
21
|
-
},
|
|
22
|
-
}));
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { TextField } from '@mui/material';
|
|
23
3
|
// Read-only single-line field for a shareable URL; clicking selects the whole
|
|
24
|
-
// value so it's easy to copy
|
|
25
|
-
//
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const target = event.target;
|
|
36
|
-
target.select();
|
|
37
|
-
}, slotProps: {
|
|
38
|
-
input: {
|
|
39
|
-
readOnly: true,
|
|
40
|
-
},
|
|
41
|
-
} }), value.length > UNUSABLE_URL_LENGTH ? (_jsxs(Alert, { severity: "warning", action: action, children: ["This URL is ", size, ", which Safari and iOS browsers refuse to open and most mail clients will truncate. It may work where you test it \u2014 Chrome accepts far longer \u2014 and fail for whoever you send it to. Use a short link instead."] })) : value.length > LARGE_URL_LENGTH ? (_jsxs(Typography, { variant: "caption", className: classes.warning, children: ["This URL is ", size, " and may be too long for some browsers or tools \u2014 prefer a short link if possible."] })) : null] }));
|
|
4
|
+
// value so it's easy to copy. Shared by jbrowse-web's ShareDialog and
|
|
5
|
+
// jbrowse-desktop's ExportToWebDialog.
|
|
6
|
+
export default function ShareLinkField({ value, label = 'URL', }) {
|
|
7
|
+
return (_jsx(TextField, { label: label, value: value, variant: "filled", fullWidth: true, onClick: event => {
|
|
8
|
+
const target = event.target;
|
|
9
|
+
target.select();
|
|
10
|
+
}, slotProps: {
|
|
11
|
+
input: {
|
|
12
|
+
readOnly: true,
|
|
13
|
+
},
|
|
14
|
+
} }));
|
|
42
15
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import type { Pin } from '../configuration/promotablePin.ts';
|
|
2
1
|
import type { SliderScale } from './sliderScale.ts';
|
|
3
|
-
export declare const SizeSliderRow: ({ title, getValue, min, max, step, scale, format, isDefault, commitOnRelease, onChange, onReset,
|
|
2
|
+
export declare const SizeSliderRow: ({ title, getValue, min, max, step, scale, format, isDefault, commitOnRelease, onChange, onReset, }: {
|
|
4
3
|
title: string;
|
|
5
4
|
getValue: () => number;
|
|
6
5
|
min: number;
|
|
@@ -12,5 +11,4 @@ export declare const SizeSliderRow: ({ title, getValue, min, max, step, scale, f
|
|
|
12
11
|
commitOnRelease?: boolean;
|
|
13
12
|
onChange: (n: number) => void;
|
|
14
13
|
onReset: () => void;
|
|
15
|
-
pin?: Pin;
|
|
16
14
|
}) => import("react").JSX.Element;
|
package/esm/ui/SizeSliderRow.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
// The drawn half of a `makeSizeMenu` row, split out so the builder can reach
|
|
3
3
|
// it through `lazy()`. Everything Material UI in a size row is here: the
|
|
4
|
-
// slider, the reset button, the
|
|
4
|
+
// slider, the reset button, the caption. See makeSizeMenu.tsx.
|
|
5
5
|
import { useState } from 'react';
|
|
6
6
|
import { Typography } from '@mui/material';
|
|
7
7
|
import { observer } from 'mobx-react';
|
|
8
8
|
import { makeStyles } from '../util/tss-react/index.js';
|
|
9
9
|
import { ResetToDefaultButton } from './InlineMenuControls.js';
|
|
10
|
-
import { PinAdornment } from './PinAdornment.js';
|
|
11
10
|
import SingleSlider from './SingleSlider.js';
|
|
12
11
|
import { INLINE_MENU_ROW_WIDTH } from './inlineMenuRowWidth.js';
|
|
13
12
|
import { sliderScale } from './sliderScale.js';
|
|
@@ -24,16 +23,15 @@ const useStyles = makeStyles()(theme => ({
|
|
|
24
23
|
flex: 1,
|
|
25
24
|
},
|
|
26
25
|
}));
|
|
27
|
-
export const SizeSliderRow = observer(function SizeSliderRow({ title, getValue, min, max, step, scale, format, isDefault, commitOnRelease, onChange, onReset,
|
|
26
|
+
export const SizeSliderRow = observer(function SizeSliderRow({ title, getValue, min, max, step, scale, format, isDefault, commitOnRelease, onChange, onReset, }) {
|
|
28
27
|
const { classes } = useStyles();
|
|
29
|
-
const modelValue = getValue();
|
|
30
28
|
const [dragValue, setDragValue] = useState(undefined);
|
|
31
|
-
const value = dragValue ??
|
|
29
|
+
const value = dragValue ?? getValue();
|
|
32
30
|
const { toSlider, fromSlider, sliderStep } = sliderScale(scale);
|
|
33
31
|
const slug = title.toLowerCase().replaceAll(' ', '-');
|
|
34
32
|
return (_jsxs("div", { className: classes.root, children: [_jsxs("div", { className: classes.header, children: [_jsxs(Typography, { variant: "caption", color: "textSecondary", className: classes.label, children: [title, ": ", format(value)] }), _jsx(ResetToDefaultButton, { disabled: isDefault, onClick: () => {
|
|
35
33
|
onReset();
|
|
36
|
-
} })
|
|
34
|
+
} })] }), _jsx(SingleSlider, { value: toSlider(value), min: toSlider(min), max: toSlider(max), step: sliderStep ?? step, size: "small", "aria-label": title.toLowerCase(), "data-testid": `${slug}-slider`, valueLabelDisplay: "auto", valueLabelFormat: (v) => format(fromSlider(v)), sx: { py: 0.5, display: 'block' }, onChange: v => {
|
|
37
35
|
const n = fromSlider(v);
|
|
38
36
|
if (commitOnRelease) {
|
|
39
37
|
setDragValue(n);
|
package/esm/ui/SnackbarModel.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { types } from '@jbrowse/mobx-state-tree';
|
|
1
|
+
import { addDisposer, types } from '@jbrowse/mobx-state-tree';
|
|
2
2
|
import { observable } from 'mobx';
|
|
3
3
|
/**
|
|
4
4
|
* #stateModel SnackbarModel
|
|
@@ -28,71 +28,83 @@ export default function SnackbarModel() {
|
|
|
28
28
|
return new Map(self.snackbarMessages.map(s => [s.message, s]));
|
|
29
29
|
},
|
|
30
30
|
}))
|
|
31
|
-
.actions(self =>
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
? action
|
|
39
|
-
: [action]
|
|
40
|
-
: undefined;
|
|
41
|
-
this.pushSnackbarMessage(message, level, actions);
|
|
42
|
-
// A plain info/success toast auto-hides; an actionable one persists
|
|
43
|
-
// until acted on or dismissed (5s is too short to read and click the
|
|
44
|
-
// action, and warning/error already persist).
|
|
45
|
-
if ((level === 'info' || level === 'success') && !actions?.length) {
|
|
46
|
-
setTimeout(() => {
|
|
47
|
-
this.removeSnackbarMessage(message);
|
|
48
|
-
}, 5000);
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
/**
|
|
52
|
-
* #action
|
|
53
|
-
*/
|
|
54
|
-
notifyError(errorMessage, error, extra, action) {
|
|
55
|
-
const reportAction = {
|
|
56
|
-
name: 'report',
|
|
57
|
-
onClick: () => {
|
|
58
|
-
this.setErrorDialog({ error, extra });
|
|
59
|
-
},
|
|
60
|
-
};
|
|
61
|
-
const actions = action ? [reportAction, action] : [reportAction];
|
|
62
|
-
this.pushSnackbarMessage(errorMessage, 'error', actions);
|
|
63
|
-
},
|
|
64
|
-
/**
|
|
65
|
-
* #action
|
|
66
|
-
*/
|
|
67
|
-
setErrorDialog(state) {
|
|
68
|
-
self.errorDialog = state;
|
|
69
|
-
},
|
|
70
|
-
/**
|
|
71
|
-
* #action
|
|
72
|
-
*/
|
|
73
|
-
pushSnackbarMessage(message, level, actions) {
|
|
74
|
-
if (actions?.length || !self.snackbarMessageSet.has(message)) {
|
|
75
|
-
self.snackbarMessages.push({
|
|
76
|
-
message,
|
|
77
|
-
level,
|
|
78
|
-
actions,
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
},
|
|
82
|
-
/**
|
|
83
|
-
* #action
|
|
84
|
-
*/
|
|
85
|
-
popSnackbarMessage() {
|
|
86
|
-
return self.snackbarMessages.pop();
|
|
87
|
-
},
|
|
88
|
-
/**
|
|
89
|
-
* #action
|
|
90
|
-
*/
|
|
91
|
-
removeSnackbarMessage(message) {
|
|
92
|
-
const element = self.snackbarMessageSet.get(message);
|
|
93
|
-
if (element !== undefined) {
|
|
94
|
-
self.snackbarMessages.remove(element);
|
|
31
|
+
.actions(self => {
|
|
32
|
+
// A pending auto-dismiss would otherwise fire on a destroyed session, and
|
|
33
|
+
// in node keeps the process alive for its five seconds.
|
|
34
|
+
const dismissTimers = new Set();
|
|
35
|
+
addDisposer(self, () => {
|
|
36
|
+
for (const timer of dismissTimers) {
|
|
37
|
+
clearTimeout(timer);
|
|
95
38
|
}
|
|
96
|
-
}
|
|
97
|
-
|
|
39
|
+
});
|
|
40
|
+
return {
|
|
41
|
+
/**
|
|
42
|
+
* #action
|
|
43
|
+
*/
|
|
44
|
+
notify(message, level, action) {
|
|
45
|
+
const actions = action
|
|
46
|
+
? Array.isArray(action)
|
|
47
|
+
? action
|
|
48
|
+
: [action]
|
|
49
|
+
: undefined;
|
|
50
|
+
this.pushSnackbarMessage(message, level, actions);
|
|
51
|
+
// A plain info/success toast auto-hides; an actionable one persists
|
|
52
|
+
// until acted on or dismissed (5s is too short to read and click the
|
|
53
|
+
// action, and warning/error already persist).
|
|
54
|
+
if ((level === 'info' || level === 'success') && !actions?.length) {
|
|
55
|
+
const timer = setTimeout(() => {
|
|
56
|
+
dismissTimers.delete(timer);
|
|
57
|
+
this.removeSnackbarMessage(message);
|
|
58
|
+
}, 5000);
|
|
59
|
+
dismissTimers.add(timer);
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
/**
|
|
63
|
+
* #action
|
|
64
|
+
*/
|
|
65
|
+
notifyError(errorMessage, error, extra, action) {
|
|
66
|
+
const reportAction = {
|
|
67
|
+
name: 'report',
|
|
68
|
+
onClick: () => {
|
|
69
|
+
this.setErrorDialog({ error, extra });
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
const actions = action ? [reportAction, action] : [reportAction];
|
|
73
|
+
this.pushSnackbarMessage(errorMessage, 'error', actions);
|
|
74
|
+
},
|
|
75
|
+
/**
|
|
76
|
+
* #action
|
|
77
|
+
*/
|
|
78
|
+
setErrorDialog(state) {
|
|
79
|
+
self.errorDialog = state;
|
|
80
|
+
},
|
|
81
|
+
/**
|
|
82
|
+
* #action
|
|
83
|
+
*/
|
|
84
|
+
pushSnackbarMessage(message, level, actions) {
|
|
85
|
+
if (actions?.length || !self.snackbarMessageSet.has(message)) {
|
|
86
|
+
self.snackbarMessages.push({
|
|
87
|
+
message,
|
|
88
|
+
level,
|
|
89
|
+
actions,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
/**
|
|
94
|
+
* #action
|
|
95
|
+
*/
|
|
96
|
+
popSnackbarMessage() {
|
|
97
|
+
return self.snackbarMessages.pop();
|
|
98
|
+
},
|
|
99
|
+
/**
|
|
100
|
+
* #action
|
|
101
|
+
*/
|
|
102
|
+
removeSnackbarMessage(message) {
|
|
103
|
+
const element = self.snackbarMessageSet.get(message);
|
|
104
|
+
if (element !== undefined) {
|
|
105
|
+
self.snackbarMessages.remove(element);
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
});
|
|
98
110
|
}
|
|
@@ -12,7 +12,7 @@ const useStyles = makeStyles()(theme => ({
|
|
|
12
12
|
// put this component back in the toolkit. Same idiom `plainChromeOverlays`
|
|
13
13
|
// uses, and it tints against the surface rather than compositing over
|
|
14
14
|
// whatever the bar happens to be drawn on.
|
|
15
|
-
background: `color-mix(in srgb, ${theme.palette.
|
|
15
|
+
background: `color-mix(in srgb, ${theme.palette.accent} 26%, transparent)`,
|
|
16
16
|
},
|
|
17
17
|
bar: {
|
|
18
18
|
position: 'absolute',
|
|
@@ -20,7 +20,7 @@ const useStyles = makeStyles()(theme => ({
|
|
|
20
20
|
bottom: 0,
|
|
21
21
|
left: 0,
|
|
22
22
|
width: '100%',
|
|
23
|
-
background: theme.palette.
|
|
23
|
+
background: theme.palette.accent,
|
|
24
24
|
// scaled from the left rather than sized, so a progress update is a
|
|
25
25
|
// compositor transform instead of a layout
|
|
26
26
|
transformOrigin: 'left center',
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import type { ColorLegendEntry } from './legendSpec.ts';
|
|
2
|
-
import type { ReactNode } from 'react';
|
|
3
2
|
export type { ColorLegendEntry } from './legendSpec.ts';
|
|
4
3
|
export declare const LEGEND_ROW_HEIGHT = 14;
|
|
5
4
|
export declare const LEGEND_SWATCH = 10;
|
|
6
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Horizontal space the LGV export reserves beside the plot for a display whose
|
|
7
|
+
* legend asked to sit off the plot (`LegendMixin.svgLegendWidth`): the widest
|
|
8
|
+
* row this draws for a ramp, plus a margin either side.
|
|
9
|
+
*/
|
|
10
|
+
export declare const LEGEND_SVG_GUTTER_WIDTH: number;
|
|
11
|
+
export default function SvgColorLegend({ entries, canvasWidth, x, maxHeight, testid, idPrefix, }: {
|
|
7
12
|
entries: ColorLegendEntry[];
|
|
8
13
|
canvasWidth: number;
|
|
14
|
+
x?: number;
|
|
9
15
|
maxHeight?: number;
|
|
10
|
-
|
|
11
|
-
children?: ReactNode;
|
|
16
|
+
idPrefix?: string;
|
|
12
17
|
testid?: string;
|
|
13
18
|
}): import("react").JSX.Element | null;
|
package/esm/ui/SvgColorLegend.js
CHANGED
|
@@ -1,65 +1,106 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
/* eslint-disable react-refresh/only-export-components -- geometry constants belong with this leaf SVG primitive; no component state to fast-refresh */
|
|
3
|
+
import { useId } from 'react';
|
|
4
|
+
import { svgSafeId } from '../svg/svgId.js';
|
|
3
5
|
import { LegendSwatchGlyph } from './LegendSwatchGlyph.js';
|
|
4
6
|
import { measureLegendText } from './measureLegendText.js';
|
|
5
7
|
const FONT_SIZE = 10;
|
|
6
8
|
const SWATCH_LEFT = 2;
|
|
7
9
|
const SWATCH_GAP = 2;
|
|
8
|
-
// Row geometry, exported so callers
|
|
9
|
-
//
|
|
10
|
+
// Row geometry, exported so callers sizing an outer container stay in lockstep
|
|
11
|
+
// with what this draws.
|
|
10
12
|
export const LEGEND_ROW_HEIGHT = 14;
|
|
11
13
|
export const LEGEND_SWATCH = 10;
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
//
|
|
14
|
+
const GRADIENT_BAR_WIDTH = 100;
|
|
15
|
+
const GRADIENT_BAR_HEIGHT = 10;
|
|
16
|
+
// the bar plus the row of domain labels under it
|
|
17
|
+
const GRADIENT_ROW_HEIGHT = GRADIENT_BAR_HEIGHT + 4 + LEGEND_ROW_HEIGHT;
|
|
18
|
+
/**
|
|
19
|
+
* Horizontal space the LGV export reserves beside the plot for a display whose
|
|
20
|
+
* legend asked to sit off the plot (`LegendMixin.svgLegendWidth`): the widest
|
|
21
|
+
* row this draws for a ramp, plus a margin either side.
|
|
22
|
+
*/
|
|
23
|
+
export const LEGEND_SVG_GUTTER_WIDTH = GRADIENT_BAR_WIDTH + 40;
|
|
24
|
+
// A row's swatches, with the flat `color` shorthand read as the single
|
|
15
25
|
// square it has always drawn.
|
|
16
26
|
function entrySwatches(entry) {
|
|
17
27
|
return (entry.swatches ??
|
|
18
28
|
(entry.color === undefined ? [] : [{ color: entry.color }]));
|
|
19
29
|
}
|
|
20
|
-
//
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
//
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
//
|
|
30
|
+
// A row keying a color, as opposed to a title or note over such rows.
|
|
31
|
+
function keysAColor(entry) {
|
|
32
|
+
return entry.gradient !== undefined || entrySwatches(entry).length > 0;
|
|
33
|
+
}
|
|
34
|
+
// A ramp row is the bar and its labels, captioned when the entry has a label.
|
|
35
|
+
function rowHeight(entry) {
|
|
36
|
+
return entry.gradient
|
|
37
|
+
? GRADIENT_ROW_HEIGHT + (entry.label ? LEGEND_ROW_HEIGHT : 0)
|
|
38
|
+
: LEGEND_ROW_HEIGHT;
|
|
39
|
+
}
|
|
40
|
+
// The rows that fit `maxHeight`, leaving room for a "+N more" summary when
|
|
41
|
+
// they do not all fit. A heading the cut separated from every row under it is
|
|
42
|
+
// dropped with them.
|
|
43
|
+
function fitEntries(entries, maxHeight) {
|
|
44
|
+
let used = 0;
|
|
45
|
+
const shown = [];
|
|
46
|
+
for (const [idx, entry] of entries.entries()) {
|
|
47
|
+
const rest = entries.length - idx - 1;
|
|
48
|
+
const reserve = rest > 0 ? LEGEND_ROW_HEIGHT : 0;
|
|
49
|
+
if (used + rowHeight(entry) + reserve > maxHeight && shown.length > 0) {
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
used += rowHeight(entry);
|
|
53
|
+
shown.push(entry);
|
|
54
|
+
}
|
|
55
|
+
while (shown.length > 1 &&
|
|
56
|
+
shown.length < entries.length &&
|
|
57
|
+
!keysAColor(shown.at(-1))) {
|
|
58
|
+
shown.pop();
|
|
59
|
+
}
|
|
60
|
+
return shown;
|
|
61
|
+
}
|
|
62
|
+
function GradientRow({ entry, width, gradientId, }) {
|
|
63
|
+
const { stops, minLabel, maxLabel } = entry.gradient;
|
|
64
|
+
const barTop = (entry.label ? LEGEND_ROW_HEIGHT : 0) + 2;
|
|
65
|
+
const labelY = barTop + GRADIENT_BAR_HEIGHT + 2 + FONT_SIZE;
|
|
66
|
+
return (_jsxs(_Fragment, { children: [_jsx("rect", { x: 0, y: 0, width: width, height: rowHeight(entry), fill: "rgba(255,255,255,0.95)" }), entry.label ? (_jsx("text", { x: SWATCH_LEFT, y: 11, fontSize: FONT_SIZE, fill: "black", children: entry.label })) : null, _jsx("defs", { children: _jsx("linearGradient", { id: gradientId, x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: stops.map(stop => (_jsx("stop", { offset: stop.offset, style: { stopColor: stop.color, stopOpacity: stop.opacity ?? 1 } }, stop.offset))) }) }), _jsx("rect", { x: SWATCH_LEFT, y: barTop, width: GRADIENT_BAR_WIDTH, height: GRADIENT_BAR_HEIGHT, fill: `url(#${gradientId})`, rx: 2 }), _jsx("text", { x: SWATCH_LEFT, y: labelY, fontSize: FONT_SIZE, fill: "black", children: minLabel }), _jsx("text", { x: SWATCH_LEFT + GRADIENT_BAR_WIDTH, y: labelY, fontSize: FONT_SIZE, fill: "black", textAnchor: "end", children: maxLabel })] }));
|
|
67
|
+
}
|
|
68
|
+
// Shared SVG color key: one translucent row per entry — a swatch and a label,
|
|
69
|
+
// or a ramp bar with its domain ends — right-aligned within `canvasWidth`, or
|
|
70
|
+
// at `x` when the caller places it (the LGV export's legend gutter). A <g>, so
|
|
71
|
+
// an on-screen SVG overlay and the export share one renderer.
|
|
31
72
|
//
|
|
32
|
-
// `maxHeight` (
|
|
73
|
+
// `maxHeight` (the display height) caps the box: entries past what fits
|
|
33
74
|
// collapse into a trailing "+N more" summary row, so the legend never overflows
|
|
34
75
|
// its display — the full list stays reachable via the track menu.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const fit = maxHeight === undefined
|
|
42
|
-
? entries.length
|
|
43
|
-
: Math.max(1, Math.floor(maxHeight / LEGEND_ROW_HEIGHT));
|
|
44
|
-
// reserve the last fitting row for the summary when truncating
|
|
45
|
-
const shown = entries.length > fit ? entries.slice(0, fit - 1) : entries;
|
|
46
|
-
const overflowLabel = entries.length > fit ? `+${entries.length - shown.length} more` : undefined;
|
|
76
|
+
export default function SvgColorLegend({ entries, canvasWidth, x, maxHeight, testid, idPrefix, }) {
|
|
77
|
+
const reactId = useId();
|
|
78
|
+
const legendId = idPrefix ?? reactId;
|
|
79
|
+
const shown = maxHeight === undefined ? entries : fitEntries(entries, maxHeight);
|
|
80
|
+
const cutRows = entries.slice(shown.length).filter(keysAColor).length;
|
|
81
|
+
const overflowLabel = cutRows > 0 ? `+${cutRows} more` : undefined;
|
|
47
82
|
// Labels line up across rows, so the swatch column is sized by the row with
|
|
48
|
-
// the most
|
|
49
|
-
// column the others share. One
|
|
83
|
+
// the most swatches — otherwise a two-box row shoves its own label out of the
|
|
84
|
+
// column the others share. One box reproduces the original 16px inset.
|
|
50
85
|
const swatchColumns = Math.max(1, ...shown.map(e => entrySwatches(e).length));
|
|
51
86
|
const textLeft = SWATCH_LEFT + swatchColumns * (LEGEND_SWATCH + SWATCH_GAP) + 2;
|
|
52
|
-
let
|
|
87
|
+
let contentRight = 0;
|
|
53
88
|
for (const entry of shown) {
|
|
54
|
-
|
|
89
|
+
contentRight = Math.max(contentRight, entry.gradient
|
|
90
|
+
? SWATCH_LEFT +
|
|
91
|
+
Math.max(GRADIENT_BAR_WIDTH, measureLegendText(entry.label, FONT_SIZE))
|
|
92
|
+
: textLeft + measureLegendText(entry.label, FONT_SIZE));
|
|
55
93
|
}
|
|
56
94
|
if (overflowLabel !== undefined) {
|
|
57
|
-
|
|
95
|
+
contentRight = Math.max(contentRight, textLeft + measureLegendText(overflowLabel, FONT_SIZE));
|
|
96
|
+
}
|
|
97
|
+
const totalWidth = contentRight + 6;
|
|
98
|
+
const left = x ?? Math.max(0, canvasWidth - totalWidth - 4);
|
|
99
|
+
const rowTops = [];
|
|
100
|
+
let y = 0;
|
|
101
|
+
for (const entry of shown) {
|
|
102
|
+
rowTops.push(y);
|
|
103
|
+
y += rowHeight(entry);
|
|
58
104
|
}
|
|
59
|
-
|
|
60
|
-
const x = Math.max(0, canvasWidth - totalWidth - 4);
|
|
61
|
-
return shown.length || overflowLabel || children ? (_jsxs("g", { transform: `translate(${x} 0)`, "data-testid": testid, children: [shown.map((entry, idx) => (_jsxs("g", { transform: `translate(0 ${idx * LEGEND_ROW_HEIGHT})`, children: [_jsx("rect", { x: 0, y: 0, width: totalWidth, height: LEGEND_ROW_HEIGHT, fill: "rgba(255,255,255,0.95)" }), _jsxs("g", { opacity: entry.hidden ? 0.35 : 1, children: [entry.marker ??
|
|
62
|
-
entrySwatches(entry).map((swatch, i) => (_jsx(LegendSwatchGlyph, { swatch: swatch, size: LEGEND_SWATCH, x: SWATCH_LEFT + i * (LEGEND_SWATCH + SWATCH_GAP), y: 2 }, `${swatch.color}-${swatch.mark ?? 'fill'}`))), _jsx("text", { x: textLeft, y: 11, fontSize: FONT_SIZE, fill: "black", textDecoration: entry.hidden ? 'line-through' : undefined, children: entry.label })] })] }, entry.key))), overflowLabel === undefined ? null : (_jsxs("g", { transform: `translate(0 ${shown.length * LEGEND_ROW_HEIGHT})`, children: [_jsx("rect", { x: 0, y: 0, width: totalWidth, height: LEGEND_ROW_HEIGHT, fill: "rgba(255,255,255,0.95)" }), _jsx("text", { x: textLeft, y: 11, fontSize: FONT_SIZE, fill: "#555", children: overflowLabel })] })), onDismiss === undefined ? null : (_jsxs("g", { transform: `translate(${totalWidth - DISMISS_GUTTER} 0)`, style: { cursor: 'pointer', pointerEvents: 'auto' }, "data-gesture-owner": "true", onClick: () => {
|
|
63
|
-
onDismiss();
|
|
64
|
-
}, children: [_jsx("title", { children: "Hide legend" }), _jsx("rect", { x: 0, y: 0, width: DISMISS_GUTTER, height: LEGEND_ROW_HEIGHT, fill: "transparent" }), _jsx("text", { x: DISMISS_GUTTER / 2, y: 9, fontSize: 9, fill: "#777", textAnchor: "middle", children: "\u00D7" })] })), children] })) : null;
|
|
105
|
+
return shown.length || overflowLabel ? (_jsxs("g", { transform: `translate(${left} 0)`, "data-testid": testid, children: [shown.map((entry, idx) => (_jsx("g", { transform: `translate(0 ${rowTops[idx]})`, children: entry.gradient ? (_jsx(GradientRow, { entry: entry, width: totalWidth, gradientId: svgSafeId(`${legendId}-${entry.key}`) })) : (_jsxs(_Fragment, { children: [_jsx("rect", { x: 0, y: 0, width: totalWidth, height: LEGEND_ROW_HEIGHT, fill: "rgba(255,255,255,0.95)" }), _jsxs("g", { opacity: entry.hidden ? 0.35 : 1, children: [entrySwatches(entry).map((swatch, i) => (_jsx(LegendSwatchGlyph, { swatch: swatch, size: LEGEND_SWATCH, x: SWATCH_LEFT + i * (LEGEND_SWATCH + SWATCH_GAP), y: 2 }, `${swatch.shape}-${swatch.color}`))), _jsx("text", { x: textLeft, y: 11, fontSize: FONT_SIZE, fill: "black", textDecoration: entry.hidden ? 'line-through' : undefined, children: entry.label })] })] })) }, entry.key))), overflowLabel === undefined ? null : (_jsxs("g", { transform: `translate(0 ${y})`, children: [_jsx("rect", { x: 0, y: 0, width: totalWidth, height: LEGEND_ROW_HEIGHT, fill: "rgba(255,255,255,0.95)" }), _jsx("text", { x: textLeft, y: 11, fontSize: FONT_SIZE, fill: "#555", children: overflowLabel })] }))] })) : null;
|
|
65
106
|
}
|
|
@@ -1,45 +1,24 @@
|
|
|
1
|
+
import type { VirtualScrollModel } from '../util/useVirtualScrollWheel.ts';
|
|
1
2
|
/**
|
|
2
|
-
* How much of a display's right edge this occupies while it is drawn
|
|
3
|
-
*
|
|
4
|
-
* Exported because the things that have to *clear* it are drawn by the displays
|
|
5
|
-
* that mount it, not by this file: the bottom-right indicator row and the
|
|
6
|
-
* alignments coverage axis label. Both kept a private copy of the number (and
|
|
7
|
-
* the alignments indicator row kept none at all, so its chips were drawn over
|
|
8
|
-
* the thumb), which is a copy that can only be checked by looking at two files
|
|
9
|
-
* at once.
|
|
3
|
+
* How much of a display's right edge this occupies while it is drawn, for the
|
|
4
|
+
* chrome the displays draw beside it.
|
|
10
5
|
*/
|
|
11
6
|
export declare const VERTICAL_SCROLLBAR_WIDTH = 12;
|
|
12
|
-
/**
|
|
13
|
-
* Where the right edge of anything that has to sit *beside* the thumb goes: the
|
|
14
|
-
* track's width plus a hair of air, so a chip or an axis label doesn't touch it.
|
|
15
|
-
*
|
|
16
|
-
* The four call sites all spelled `VERTICAL_SCROLLBAR_WIDTH + 2` inline, which
|
|
17
|
-
* is the same copy the width constant was exported to stop — one addition
|
|
18
|
-
* further along. The `+ 2` is a gap and belongs to the thing being cleared, not
|
|
19
|
-
* to the scrollbar's own geometry, so it is named rather than folded into the
|
|
20
|
-
* width (`right: 2` on the thumb is a different 2 and must not move with it).
|
|
21
|
-
*/
|
|
7
|
+
/** Where the right edge of something sitting beside the thumb goes. */
|
|
22
8
|
export declare const VERTICAL_SCROLLBAR_CLEARANCE: number;
|
|
23
9
|
/**
|
|
24
|
-
* Draggable vertical scrollbar overlay for
|
|
25
|
-
*
|
|
26
|
-
* Renders nothing when the content fits the viewport. The thumb geometry and
|
|
27
|
-
* the drag-to-scroll mapping live here so the consumers don't each re-derive
|
|
28
|
-
* them; the wheel handling stays per-display (their gesture semantics differ).
|
|
10
|
+
* Draggable vertical scrollbar overlay for a virtually scrolled display.
|
|
11
|
+
* Renders nothing when the content fits.
|
|
29
12
|
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* `aria-value*` semantics are kept — they cost nothing and expose scroll
|
|
34
|
-
* position to pointer/voice assistive tech.
|
|
13
|
+
* Not a keyboard tab stop: the views have no keyboard navigation to reach the
|
|
14
|
+
* scrolled content, so `tabIndex` would only add noise. The `role="scrollbar"`
|
|
15
|
+
* semantics stay for pointer and voice assistive tech.
|
|
35
16
|
*/
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
setScrollTop: (n: number) => void;
|
|
39
|
-
viewportHeight: number;
|
|
40
|
-
contentHeight: number;
|
|
17
|
+
declare const VerticalScrollbar: ({ model, controlsId, top, }: {
|
|
18
|
+
model: VirtualScrollModel;
|
|
41
19
|
/** `id` of the scrolled viewport element, for `aria-controls`. */
|
|
42
20
|
controlsId: string;
|
|
43
21
|
/** Track offset from the top, for displays with a sticky band above it. */
|
|
44
22
|
top?: number;
|
|
45
|
-
})
|
|
23
|
+
}) => import("react").JSX.Element | null;
|
|
24
|
+
export default VerticalScrollbar;
|