@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
|
@@ -30,6 +30,19 @@ export declare function cap(options: Option[]): Option[];
|
|
|
30
30
|
*/
|
|
31
31
|
export declare function getRefNameOptions(assembly: RefNameMatchSource | undefined, inputValue: string): Option[];
|
|
32
32
|
export declare function getDeduplicatedResult(results: BaseResult[]): Option[];
|
|
33
|
+
/**
|
|
34
|
+
* The muted line under a row: a sequence's length, where a hit goes and the
|
|
35
|
+
* track it came from, or how many places share the row. A row sharing its name
|
|
36
|
+
* with a sequence is about the sequence, since an annotation's region feature
|
|
37
|
+
* names it too. A row whose hits all go to one place says where, without a
|
|
38
|
+
* track, since the pick lands through whichever of them the view has open. A
|
|
39
|
+
* row standing for many regions needs none.
|
|
40
|
+
*/
|
|
41
|
+
export declare function optionDetail(result: BaseResult, lookups: {
|
|
42
|
+
trackNameOf: (trackId: string) => string | undefined;
|
|
43
|
+
lengthOf: (refName: string) => number | undefined;
|
|
44
|
+
placesOf: (results: BaseResult[]) => BaseResult[][];
|
|
45
|
+
}): string | undefined;
|
|
33
46
|
export declare function coerceToResult(option: string | Option): BaseResult;
|
|
34
47
|
export declare function getOptionLabel(option: string | Option): string;
|
|
35
48
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import BaseResult, { RefSequenceResult } from '../../TextSearch/BaseResults.js';
|
|
2
|
-
import { measureText } from '../../util/index.js';
|
|
2
|
+
import { getBpDisplayStr, measureText, toLocale } from '../../util/index.js';
|
|
3
3
|
import { MAX_GLOB_REGIONS, matchRefNames, } from '../../util/selectNamedRegions.js';
|
|
4
4
|
// Above the 13.71px the TextField renders at, and left there deliberately. The
|
|
5
5
|
// table is Helvetica's and the box draws in Roboto, so measuring the value at 14
|
|
@@ -134,6 +134,47 @@ export function getDeduplicatedResult(results) {
|
|
|
134
134
|
}),
|
|
135
135
|
});
|
|
136
136
|
}
|
|
137
|
+
function formatLocString(locString) {
|
|
138
|
+
const match = /^(.+):(\d+)\.\.(\d+)$/.exec(locString);
|
|
139
|
+
return match
|
|
140
|
+
? `${match[1]}:${toLocale(Number(match[2]))}-${toLocale(Number(match[3]))}`
|
|
141
|
+
: locString;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* The muted line under a row: a sequence's length, where a hit goes and the
|
|
145
|
+
* track it came from, or how many places share the row. A row sharing its name
|
|
146
|
+
* with a sequence is about the sequence, since an annotation's region feature
|
|
147
|
+
* names it too. A row whose hits all go to one place says where, without a
|
|
148
|
+
* track, since the pick lands through whichever of them the view has open. A
|
|
149
|
+
* row standing for many regions needs none.
|
|
150
|
+
*/
|
|
151
|
+
export function optionDetail(result, lookups) {
|
|
152
|
+
const { trackNameOf, lengthOf, placesOf } = lookups;
|
|
153
|
+
const locString = result.getLocation();
|
|
154
|
+
const trackId = result.getTrackId();
|
|
155
|
+
const sequence = result.results?.find(r => r instanceof RefSequenceResult);
|
|
156
|
+
if (sequence) {
|
|
157
|
+
return optionDetail(sequence, lookups);
|
|
158
|
+
}
|
|
159
|
+
else if (result.results?.length) {
|
|
160
|
+
const places = placesOf(result.results);
|
|
161
|
+
const only = places.length === 1 ? places[0][0].getLocation() : undefined;
|
|
162
|
+
return only === undefined
|
|
163
|
+
? `${places.length} matches`
|
|
164
|
+
: formatLocString(only);
|
|
165
|
+
}
|
|
166
|
+
else if (!locString || /\s/.test(locString)) {
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
else if (result instanceof RefSequenceResult) {
|
|
170
|
+
const length = lengthOf(locString);
|
|
171
|
+
return length === undefined ? undefined : getBpDisplayStr(length);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
const trackName = trackId === undefined ? undefined : trackNameOf(trackId);
|
|
175
|
+
return [formatLocString(locString), trackName].filter(Boolean).join(' · ');
|
|
176
|
+
}
|
|
177
|
+
}
|
|
137
178
|
// MUI freeSolo hands back the raw typed string when nothing in the list is
|
|
138
179
|
// selected; wrap it so callers always get a BaseResult
|
|
139
180
|
export function coerceToResult(option) {
|
package/esm/ui/ResizeHandle.d.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import type React from 'react';
|
|
2
|
-
declare function ResizeHandle({ onDrag, onDragStart, onDragEnd, vertical, bar, gain, className: originalClassName, onPointerDown, ...props }: {
|
|
2
|
+
declare function ResizeHandle({ onDrag, onDragStart, onDragEnd, vertical, bar, grip, gain, className: originalClassName, onPointerDown, ...props }: {
|
|
3
3
|
onDrag: (distance: number) => void;
|
|
4
4
|
onDragStart?: () => void;
|
|
5
5
|
onDragEnd?: () => void;
|
|
6
6
|
vertical?: boolean;
|
|
7
7
|
bar?: boolean;
|
|
8
|
+
/** An opaque `bar` with a grip pill, for the bottom edge of a view */
|
|
9
|
+
grip?: boolean | 'hover';
|
|
8
10
|
/**
|
|
9
11
|
* How many px this handle moves per px of the value it drags — see
|
|
10
12
|
* `useResizeDrag`. Pass it when the value is shared by several stacked bands
|
package/esm/ui/ResizeHandle.js
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { cx, makeStyles } from '../util/tss-react/index.js';
|
|
3
3
|
import { useResizeDrag } from '../util/useResizeDrag.js';
|
|
4
|
-
|
|
4
|
+
const layer = (color) => `linear-gradient(${color}, ${color})`;
|
|
5
|
+
// Three kinds of handle, one ladder of weight between them. A handle that draws
|
|
5
6
|
// nothing at rest reveals itself under the pointer at exactly the weight a
|
|
6
7
|
// visible one rests at (`action.disabled`); a visible one then goes past that,
|
|
7
8
|
// to `action.active` — the same resting/hover pair `VerticalScrollbar`'s thumb
|
|
8
|
-
// uses.
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
// was too faint to answer "is this the thing I grab?" over a dense pileup — and
|
|
12
|
-
// on a `bar`, which rests at 0.26, it made the handle go *fainter* under the
|
|
13
|
-
// pointer, since `:hover` beats the plain class whatever the source order.
|
|
9
|
+
// uses. A `grip` bar sits on an opaque paper fill so a view's gridlines stop at
|
|
10
|
+
// it, and a centred pill marks it as something to grab. `grip="hover"` draws
|
|
11
|
+
// that grip only under the pointer or mid-drag.
|
|
14
12
|
const useStyles = makeStyles()(theme => ({
|
|
15
13
|
horizontalHandle: {
|
|
16
14
|
cursor: 'row-resize',
|
|
@@ -18,21 +16,48 @@ const useStyles = makeStyles()(theme => ({
|
|
|
18
16
|
// stop the browser turning a touch-drag into a scroll/pan gesture so the
|
|
19
17
|
// pointer stream reaches us
|
|
20
18
|
touchAction: 'none',
|
|
21
|
-
'&:hover': {
|
|
19
|
+
'&:hover': { backgroundColor: theme.palette.action.disabled },
|
|
22
20
|
},
|
|
23
21
|
verticalHandle: {
|
|
24
22
|
cursor: 'col-resize',
|
|
25
23
|
height: '100%',
|
|
26
24
|
touchAction: 'none',
|
|
27
|
-
'&:hover': {
|
|
25
|
+
'&:hover': { backgroundColor: theme.palette.action.disabled },
|
|
28
26
|
},
|
|
29
27
|
// `bar` opt-in: the standard always-visible resize divider used at the bottom
|
|
30
28
|
// (or side) of views and tracks. Other call sites stay invisible until hover.
|
|
31
29
|
bar: { '&:hover': { background: theme.palette.action.active } },
|
|
32
30
|
horizontalBar: { height: 4, background: theme.palette.action.disabled },
|
|
33
31
|
verticalBar: { width: 4, background: theme.palette.action.disabled },
|
|
32
|
+
grip: {
|
|
33
|
+
backgroundColor: theme.palette.background.paper,
|
|
34
|
+
backgroundImage: `${layer(theme.palette.text.disabled)}, ${layer(theme.palette.action.disabled)}`,
|
|
35
|
+
backgroundPosition: 'center',
|
|
36
|
+
backgroundRepeat: 'no-repeat',
|
|
37
|
+
'&:hover': {
|
|
38
|
+
backgroundColor: theme.palette.background.paper,
|
|
39
|
+
backgroundImage: `${layer(theme.palette.text.secondary)}, ${layer(theme.palette.text.disabled)}`,
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
gripOnHover: {
|
|
43
|
+
'&:not(:hover):not(:active)': {
|
|
44
|
+
backgroundColor: 'transparent',
|
|
45
|
+
backgroundImage: 'none',
|
|
46
|
+
borderColor: 'transparent',
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
horizontalGrip: {
|
|
50
|
+
height: 6,
|
|
51
|
+
backgroundSize: '24px 3px, auto',
|
|
52
|
+
borderTop: `1px solid ${theme.palette.text.disabled}`,
|
|
53
|
+
},
|
|
54
|
+
verticalGrip: {
|
|
55
|
+
width: 6,
|
|
56
|
+
backgroundSize: '3px 24px, auto',
|
|
57
|
+
borderLeft: `1px solid ${theme.palette.text.disabled}`,
|
|
58
|
+
},
|
|
34
59
|
}));
|
|
35
|
-
function ResizeHandle({ onDrag, onDragStart, onDragEnd, vertical = false, bar = false, gain, className: originalClassName, onPointerDown, ...props }) {
|
|
60
|
+
function ResizeHandle({ onDrag, onDragStart, onDragEnd, vertical = false, bar = false, grip = false, gain, className: originalClassName, onPointerDown, ...props }) {
|
|
36
61
|
const { classes } = useStyles();
|
|
37
62
|
// The gesture, including the per-frame coalescing, the delta measurement and
|
|
38
63
|
// the `data-gesture-owner` marker that keeps ancestor drags (the LGV
|
|
@@ -46,7 +71,15 @@ function ResizeHandle({ onDrag, onDragStart, onDragEnd, vertical = false, bar =
|
|
|
46
71
|
vertical,
|
|
47
72
|
gain,
|
|
48
73
|
});
|
|
49
|
-
return (_jsx("div", { ...props, className: cx(originalClassName, vertical ? classes.verticalHandle : classes.horizontalHandle,
|
|
74
|
+
return (_jsx("div", { ...props, className: cx(originalClassName, vertical ? classes.verticalHandle : classes.horizontalHandle, grip && [
|
|
75
|
+
classes.grip,
|
|
76
|
+
vertical ? classes.verticalGrip : classes.horizontalGrip,
|
|
77
|
+
grip === 'hover' && classes.gripOnHover,
|
|
78
|
+
], bar &&
|
|
79
|
+
!grip && [
|
|
80
|
+
classes.bar,
|
|
81
|
+
vertical ? classes.verticalBar : classes.horizontalBar,
|
|
82
|
+
]), ...handleProps, onPointerDown: event => {
|
|
50
83
|
handleProps.onPointerDown(event);
|
|
51
84
|
onPointerDown?.(event);
|
|
52
85
|
} }));
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { VirtualScrollModel } from '../util/useVirtualScrollWheel.ts';
|
|
2
|
+
/**
|
|
3
|
+
* The chrome a virtually scrolled display mounts over its viewport: the edge
|
|
4
|
+
* shadow saying content is hidden, and the scrollbar to reach it. Renders
|
|
5
|
+
* nothing when the content fits.
|
|
6
|
+
*/
|
|
7
|
+
export default function ScrollChrome({ model, controlsId, top, }: {
|
|
8
|
+
model: VirtualScrollModel;
|
|
9
|
+
/** `id` of the scrolled viewport element, for `aria-controls`. */
|
|
10
|
+
controlsId: string;
|
|
11
|
+
/** Viewport offset from the top, for a display with a sticky band above it. */
|
|
12
|
+
top?: number;
|
|
13
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import ScrollEdgeShadow from './ScrollEdgeShadow.js';
|
|
3
|
+
import VerticalScrollbar from './VerticalScrollbar.js';
|
|
4
|
+
/**
|
|
5
|
+
* The chrome a virtually scrolled display mounts over its viewport: the edge
|
|
6
|
+
* shadow saying content is hidden, and the scrollbar to reach it. Renders
|
|
7
|
+
* nothing when the content fits.
|
|
8
|
+
*/
|
|
9
|
+
export default function ScrollChrome({ model, controlsId, top = 0, }) {
|
|
10
|
+
return (_jsxs(_Fragment, { children: [_jsx(ScrollEdgeShadow, { model: model, top: top }), _jsx(VerticalScrollbar, { model: model, controlsId: controlsId, top: top })] }));
|
|
11
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import type { VirtualScrollModel } from '../util/useVirtualScrollWheel.ts';
|
|
1
2
|
/**
|
|
2
3
|
* The "there is more content this way" edge shadow for a display that scrolls
|
|
3
|
-
* its content virtually
|
|
4
|
-
* drawn from the same three numbers.
|
|
4
|
+
* its content virtually, mounted beside `VerticalScrollbar` by `ScrollChrome`.
|
|
5
5
|
*
|
|
6
6
|
* It answers a question the scrollbar technically also answers and in practice
|
|
7
7
|
* does not: **is this track showing me all of its features?** A 6px thumb on a
|
|
@@ -33,12 +33,9 @@
|
|
|
33
33
|
* — autogrow/fit, and the truncation warning for features that were dropped
|
|
34
34
|
* rather than merely scrolled away). This says *that*; that says *what to do*.
|
|
35
35
|
*/
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
/** the visible viewport height */
|
|
39
|
-
viewportHeight: number;
|
|
40
|
-
/** the full scrollable content height */
|
|
41
|
-
contentHeight: number;
|
|
36
|
+
declare const ScrollEdgeShadow: ({ model, top, }: {
|
|
37
|
+
model: VirtualScrollModel;
|
|
42
38
|
/** viewport offset from the top, for a display with a sticky band above it */
|
|
43
39
|
top?: number;
|
|
44
|
-
})
|
|
40
|
+
}) => import("react").JSX.Element | null;
|
|
41
|
+
export default ScrollEdgeShadow;
|
|
@@ -1,34 +1,19 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
2
3
|
import { clamp } from '../util/numericUtils.js';
|
|
3
4
|
import { makeStyles } from '../util/tss-react/index.js';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
* a display draws is ~7px in its most compact mode).
|
|
8
|
-
*/
|
|
9
|
-
const SHADOW_HEIGHT = 16;
|
|
10
|
-
/**
|
|
11
|
-
* Sub-pixel slack before an edge counts as scrolled away from. A fit/grow mode
|
|
12
|
-
* scale leaves float epsilon in `contentHeight`, and without this a track that
|
|
13
|
-
* exactly fits draws a permanent bottom fade — the one thing this must never
|
|
14
|
-
* do, since "nothing is hidden" is the state it exists to distinguish.
|
|
15
|
-
*
|
|
16
|
-
* `VerticalScrollbar` has no equivalent and so still draws a full-height thumb
|
|
17
|
-
* on that same sub-pixel overflow. Deliberately not lifted there: a thumb
|
|
18
|
-
* filling its track reads as "nothing to scroll", where a permanent fade reads
|
|
19
|
-
* as "something is hidden" — the wrong answer rather than a redundant one.
|
|
20
|
-
*/
|
|
5
|
+
// deep enough to read as a soft edge rather than a rule
|
|
6
|
+
const SHADOW_HEIGHT = 10;
|
|
7
|
+
// Slack at each edge, so a float residue in `scrollTop` doesn't mark one.
|
|
21
8
|
const EPSILON = 0.5;
|
|
22
9
|
const useStyles = makeStyles()(theme => {
|
|
23
10
|
// The ink flips with the theme, and has to: a black shadow is invisible on
|
|
24
11
|
// the dark theme's #121212 canvas, which is the same trap the scrollbar thumb
|
|
25
12
|
// hit before it became theme-aware.
|
|
26
13
|
const ink = theme.palette.mode === 'dark' ? '255,255,255' : '0,0,0';
|
|
27
|
-
//
|
|
28
|
-
//
|
|
29
|
-
|
|
30
|
-
// asks "is that everything?", not noticeable when nobody asked.
|
|
31
|
-
const from = `rgba(${ink},0.18)`;
|
|
14
|
+
// findable when someone asks "is that everything?", not noticeable when
|
|
15
|
+
// nobody asked
|
|
16
|
+
const from = `rgba(${ink},0.1)`;
|
|
32
17
|
// NOT the `transparent` keyword, which is transparent BLACK: interpolating to
|
|
33
18
|
// it puts a grey cast through the middle of the ramp, and on the dark theme's
|
|
34
19
|
// white ink that is the whole ramp.
|
|
@@ -46,8 +31,7 @@ const useStyles = makeStyles()(theme => {
|
|
|
46
31
|
});
|
|
47
32
|
/**
|
|
48
33
|
* The "there is more content this way" edge shadow for a display that scrolls
|
|
49
|
-
* its content virtually
|
|
50
|
-
* drawn from the same three numbers.
|
|
34
|
+
* its content virtually, mounted beside `VerticalScrollbar` by `ScrollChrome`.
|
|
51
35
|
*
|
|
52
36
|
* It answers a question the scrollbar technically also answers and in practice
|
|
53
37
|
* does not: **is this track showing me all of its features?** A 6px thumb on a
|
|
@@ -79,20 +63,15 @@ const useStyles = makeStyles()(theme => {
|
|
|
79
63
|
* — autogrow/fit, and the truncation warning for features that were dropped
|
|
80
64
|
* rather than merely scrolled away). This says *that*; that says *what to do*.
|
|
81
65
|
*/
|
|
82
|
-
|
|
66
|
+
const ScrollEdgeShadow = observer(function ScrollEdgeShadow({ model, top = 0, }) {
|
|
83
67
|
const { classes, cx } = useStyles();
|
|
84
|
-
const scrollableHeight
|
|
68
|
+
const { scrollableHeight, scrollViewportHeight: viewportHeight } = model;
|
|
85
69
|
if (scrollableHeight <= 0) {
|
|
86
70
|
return null;
|
|
87
71
|
}
|
|
88
|
-
const clamped = clamp(scrollTop, 0, scrollableHeight);
|
|
89
|
-
// never deeper than the viewport
|
|
90
|
-
// subtracting this from the viewport's floor, so an unclamped SHADOW_HEIGHT
|
|
91
|
-
// on a viewport shorter than it puts the ink above the viewport's own top,
|
|
92
|
-
// over whatever pinned band the display stacked there. Reachable both ways —
|
|
93
|
-
// the variants displays floor availableHeight at 0 because lineZoneHeight can
|
|
94
|
-
// exceed the display height on its own, and the pileup's coverage band drags
|
|
95
|
-
// up to the same place.
|
|
72
|
+
const clamped = clamp(model.scrollTop, 0, scrollableHeight);
|
|
73
|
+
// never deeper than the viewport, or the bottom edge inks the band above it
|
|
96
74
|
const height = Math.min(SHADOW_HEIGHT, viewportHeight);
|
|
97
75
|
return (_jsxs(_Fragment, { children: [clamped > EPSILON ? (_jsx("div", { "data-testid": "scroll-edge-shadow-top", className: cx(classes.edge, classes.top), style: { top, height } })) : null, clamped < scrollableHeight - EPSILON ? (_jsx("div", { "data-testid": "scroll-edge-shadow-bottom", className: cx(classes.edge, classes.bottom), style: { top: top + viewportHeight - height, height } })) : null] }));
|
|
98
|
-
}
|
|
76
|
+
});
|
|
77
|
+
export default ScrollEdgeShadow;
|
|
@@ -1,35 +1,12 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* What a view reads and writes to offer scroll-to-zoom. Duck-typed rather than
|
|
3
|
-
* a model, like the rest of the wheel-zoom layer — every view here delegates
|
|
4
|
-
* both to the session, which is where the preference lives.
|
|
5
|
-
*/
|
|
6
1
|
export interface ScrollZoomToggleModel {
|
|
7
2
|
scrollZoom: boolean;
|
|
8
3
|
setScrollZoom: (flag: boolean) => void;
|
|
9
4
|
}
|
|
10
5
|
/**
|
|
11
|
-
* The
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* are the whole of how they find it. An icon alone is not findable, whichever
|
|
16
|
-
* icon: the glyph says "zoom" at best and nothing at all about the wheel. The
|
|
17
|
-
* tooltip is where ctrl/⌘+scroll, which zooms whatever the preference says, is
|
|
18
|
-
* named.
|
|
19
|
-
*
|
|
20
|
-
* **And it pulses when the preference changes.** The other ways to write it are
|
|
21
|
-
* somewhere else on the screen — a view menu, the Preferences dialog — so the
|
|
22
|
-
* moment the setting is learned is also the moment this button is not being
|
|
23
|
-
* looked at. The ring is what connects the two: it says the thing you just
|
|
24
|
-
* turned on lives *here*, which is what a user who wants it back off has to
|
|
25
|
-
* know. Its own click pulses too — the answer to "where is this" should not
|
|
26
|
-
* depend on which of the several places wrote it, and the other views' copies
|
|
27
|
-
* of this button pulse with it, which is the preference being session-wide made
|
|
28
|
-
* visible.
|
|
29
|
-
*
|
|
30
|
-
* `iconOnly` is for a header where this sits inside a run of icon buttons (the
|
|
31
|
-
* comparative views), where a single labelled button reads as a mistake rather
|
|
32
|
-
* than as emphasis. The tooltip carries the same words either way.
|
|
6
|
+
* The header control for scroll-to-zoom, shared by every view that has one: a
|
|
7
|
+
* labelled checkbox, or with `iconOnly` a button that fills when on. It rings
|
|
8
|
+
* whenever the preference changes, including from a menu or the Preferences
|
|
9
|
+
* dialog, so the user sees where the setting lives.
|
|
33
10
|
*/
|
|
34
11
|
declare const ScrollZoomToggle: ({ model, iconOnly, }: {
|
|
35
12
|
model: ScrollZoomToggleModel;
|
|
@@ -1,39 +1,43 @@
|
|
|
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
|
import { useState } from 'react';
|
|
3
3
|
import ZoomInMapIcon from '@mui/icons-material/ZoomInMap';
|
|
4
|
-
import { ToggleButton, Tooltip } from '@mui/material';
|
|
4
|
+
import { Checkbox, FormControlLabel, ToggleButton, Tooltip, } from '@mui/material';
|
|
5
5
|
import { observer } from 'mobx-react';
|
|
6
6
|
import { keyframes, makeStyles } from '../util/tss-react/index.js';
|
|
7
7
|
import { alpha } from './palette.js';
|
|
8
8
|
import { SCROLL_ZOOM_HELP, SCROLL_ZOOM_LABEL } from './scrollZoomLabels.js';
|
|
9
|
-
// Two beats: one is a blink that a peripheral eye can miss, three outstays a
|
|
10
|
-
// confirmation.
|
|
11
9
|
const PULSE_MS = 550;
|
|
12
10
|
const PULSE_COUNT = 2;
|
|
13
11
|
const useStyles = makeStyles()(theme => {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const ringColor = alpha(theme.palette.secondary.main, 0.7);
|
|
18
|
-
// Grows outward from the button's own edge, which is what carries the eye to
|
|
19
|
-
// it — a ring drawn at its final size only appears there.
|
|
12
|
+
const { palette } = theme;
|
|
13
|
+
const ringBase = palette.mode === 'dark' ? palette.accent : palette.tertiary.main;
|
|
14
|
+
const ringColor = alpha(ringBase, 0.7);
|
|
20
15
|
const ring = keyframes `
|
|
21
16
|
from { box-shadow: 0 0 0 0 ${ringColor}; }
|
|
22
|
-
to { box-shadow: 0 0 0 9px ${alpha(
|
|
17
|
+
to { box-shadow: 0 0 0 9px ${alpha(ringBase, 0)}; }
|
|
23
18
|
`;
|
|
24
|
-
// What the same cue looks like for someone who asked for less motion: the
|
|
25
|
-
// ring is there at one size and fades. Reduced motion is about movement, not
|
|
26
|
-
// about being told less.
|
|
27
19
|
const steadyRing = keyframes `
|
|
28
20
|
from { box-shadow: 0 0 0 4px ${ringColor}; }
|
|
29
|
-
to { box-shadow: 0 0 0 4px ${alpha(
|
|
21
|
+
to { box-shadow: 0 0 0 4px ${alpha(ringBase, 0)}; }
|
|
30
22
|
`;
|
|
31
23
|
return {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
24
|
+
label: {
|
|
25
|
+
position: 'relative',
|
|
26
|
+
marginLeft: 0,
|
|
27
|
+
marginRight: 0,
|
|
28
|
+
paddingRight: 8,
|
|
29
|
+
borderRadius: 4,
|
|
35
30
|
whiteSpace: 'nowrap',
|
|
36
|
-
|
|
31
|
+
},
|
|
32
|
+
checkbox: {
|
|
33
|
+
padding: 6,
|
|
34
|
+
},
|
|
35
|
+
iconButton: {
|
|
36
|
+
border: 'none',
|
|
37
|
+
'&.Mui-selected, &.Mui-selected:hover': {
|
|
38
|
+
backgroundColor: palette.accent,
|
|
39
|
+
color: palette.background.paper,
|
|
40
|
+
},
|
|
37
41
|
},
|
|
38
42
|
pulse: {
|
|
39
43
|
position: 'absolute',
|
|
@@ -48,45 +52,24 @@ const useStyles = makeStyles()(theme => {
|
|
|
48
52
|
};
|
|
49
53
|
});
|
|
50
54
|
/**
|
|
51
|
-
* The
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
* are the whole of how they find it. An icon alone is not findable, whichever
|
|
56
|
-
* icon: the glyph says "zoom" at best and nothing at all about the wheel. The
|
|
57
|
-
* tooltip is where ctrl/⌘+scroll, which zooms whatever the preference says, is
|
|
58
|
-
* named.
|
|
59
|
-
*
|
|
60
|
-
* **And it pulses when the preference changes.** The other ways to write it are
|
|
61
|
-
* somewhere else on the screen — a view menu, the Preferences dialog — so the
|
|
62
|
-
* moment the setting is learned is also the moment this button is not being
|
|
63
|
-
* looked at. The ring is what connects the two: it says the thing you just
|
|
64
|
-
* turned on lives *here*, which is what a user who wants it back off has to
|
|
65
|
-
* know. Its own click pulses too — the answer to "where is this" should not
|
|
66
|
-
* depend on which of the several places wrote it, and the other views' copies
|
|
67
|
-
* of this button pulse with it, which is the preference being session-wide made
|
|
68
|
-
* visible.
|
|
69
|
-
*
|
|
70
|
-
* `iconOnly` is for a header where this sits inside a run of icon buttons (the
|
|
71
|
-
* comparative views), where a single labelled button reads as a mistake rather
|
|
72
|
-
* than as emphasis. The tooltip carries the same words either way.
|
|
55
|
+
* The header control for scroll-to-zoom, shared by every view that has one: a
|
|
56
|
+
* labelled checkbox, or with `iconOnly` a button that fills when on. It rings
|
|
57
|
+
* whenever the preference changes, including from a menu or the Preferences
|
|
58
|
+
* dialog, so the user sees where the setting lives.
|
|
73
59
|
*/
|
|
74
60
|
const ScrollZoomToggle = observer(function ScrollZoomToggle({ model, iconOnly, }) {
|
|
75
61
|
const { classes } = useStyles();
|
|
76
62
|
const { scrollZoom } = model;
|
|
77
|
-
// `count` doubles as the restart key
|
|
78
|
-
//
|
|
79
|
-
// in a row. Adjusted during render rather than from an effect, so a
|
|
80
|
-
// StrictMode host's doubled mount effect can't pulse a button nobody touched.
|
|
63
|
+
// `count` doubles as the restart key, since a class alone won't replay a
|
|
64
|
+
// running CSS animation
|
|
81
65
|
const [pulse, setPulse] = useState({ shownFor: scrollZoom, count: 0 });
|
|
82
66
|
if (pulse.shownFor !== scrollZoom) {
|
|
83
67
|
setPulse({ shownFor: scrollZoom, count: pulse.count + 1 });
|
|
84
68
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}, className: classes.button, size: "small", children: [_jsx(ZoomInMapIcon, { fontSize: "small" }), iconOnly ? null : SCROLL_ZOOM_LABEL, pulse.count ? (_jsx("span", { className: classes.pulse, "data-testid": "scroll-zoom-pulse" }, pulse.count)) : null] }) }));
|
|
69
|
+
const ring = pulse.count ? (_jsx("span", { className: classes.pulse, "data-testid": "scroll-zoom-pulse" }, pulse.count)) : null;
|
|
70
|
+
const flip = () => {
|
|
71
|
+
model.setScrollZoom(!scrollZoom);
|
|
72
|
+
};
|
|
73
|
+
return iconOnly ? (_jsx(Tooltip, { title: SCROLL_ZOOM_HELP, children: _jsxs(ToggleButton, { "data-testid": "scroll-zoom-toggle", value: "scrollZoom", selected: scrollZoom, onChange: flip, className: classes.iconButton, size: "small", children: [_jsx(ZoomInMapIcon, { fontSize: "small" }), ring] }) })) : (_jsx(Tooltip, { title: SCROLL_ZOOM_HELP, describeChild: true, children: _jsx(FormControlLabel, { "data-testid": "scroll-zoom-toggle", className: classes.label, control: _jsx(Checkbox, { size: "small", checked: scrollZoom, onChange: flip, className: classes.checkbox }), label: _jsxs(_Fragment, { children: [SCROLL_ZOOM_LABEL, ring] }), slotProps: { typography: { variant: 'body2' } } }) }));
|
|
91
74
|
});
|
|
92
75
|
export default ScrollZoomToggle;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import LabeledCheckbox from './LabeledCheckbox.js';
|
|
4
|
+
import MonospaceTextField from './MonospaceTextField.js';
|
|
5
|
+
// The session a share or export dialog is about to hand over, as indented JSON
|
|
6
|
+
// behind a checkbox, so the sender can read what they are sending whichever
|
|
7
|
+
// link carries it. Shared by jbrowse-web's ShareDialog and jbrowse-desktop's
|
|
8
|
+
// ExportToWebDialog.
|
|
9
|
+
export default function SessionJsonPanel({ session }) {
|
|
10
|
+
const [show, setShow] = useState(false);
|
|
11
|
+
return (_jsxs(_Fragment, { children: [_jsx(LabeledCheckbox, { checked: show, onChange: val => {
|
|
12
|
+
setShow(val);
|
|
13
|
+
}, label: "Show readable JSON" }), show ? (_jsx(MonospaceTextField, { label: "Session JSON", value: JSON.stringify(session, null, 2), readOnly: true, fullWidth: true, maxRows: 20 })) : null] }));
|
|
14
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { TrackConfigChange } from '../util/trackConfigDelta.ts';
|
|
2
|
+
export declare function formatSettingValue(value: unknown): string;
|
|
2
3
|
/**
|
|
3
4
|
* Shared three-column diff table (Setting / Default / Current) used by both the
|
|
4
5
|
* per-track "changes" dialog and the global preferences-reset dialog, so the two
|
|
@@ -16,21 +16,59 @@ const useStyles = makeStyles()(theme => ({
|
|
|
16
16
|
color: theme.palette.text.secondary,
|
|
17
17
|
},
|
|
18
18
|
}));
|
|
19
|
-
// Many config values are `{ type: 'x' }` discriminated unions (
|
|
20
|
-
//
|
|
21
|
-
// the table reads "
|
|
19
|
+
// Many config values are `{ type: 'x' }` discriminated unions (sortedBy,
|
|
20
|
+
// ...). Show just the type when that is the whole object so
|
|
21
|
+
// the table reads "basePair" rather than `{"type":"basePair"}`; richer
|
|
22
22
|
// objects keep full JSON so no detail is hidden.
|
|
23
23
|
function isSoleTypeObject(v) {
|
|
24
24
|
return ('type' in v && typeof v.type === 'string' && Object.keys(v).length === 1);
|
|
25
25
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
26
|
+
// Past this many entries a list or a map is summarised by its count and its
|
|
27
|
+
// first few members: a row order names every sample of a cohort, and a label
|
|
28
|
+
// map every one the reader renamed, and a 2,500-name cell says nothing a
|
|
29
|
+
// count and a glimpse do not.
|
|
30
|
+
const LISTED_ENTRIES = 6;
|
|
31
|
+
// Past this many characters a string is a cluster tree's newick or a jexl
|
|
32
|
+
// callback, and the head is what tells them apart.
|
|
33
|
+
const STRING_HEAD = 80;
|
|
34
|
+
function summarizeList(values) {
|
|
35
|
+
const head = values
|
|
36
|
+
.slice(0, LISTED_ENTRIES)
|
|
37
|
+
.map(v => (typeof v === 'string' ? v : JSON.stringify(v)))
|
|
38
|
+
.join(', ');
|
|
39
|
+
return `${values.length} values: ${head}, …`;
|
|
40
|
+
}
|
|
41
|
+
function summarizeMap(entries) {
|
|
42
|
+
const head = entries
|
|
43
|
+
.slice(0, LISTED_ENTRIES)
|
|
44
|
+
.map(([k, v]) => `${k}: ${typeof v === 'string' ? v : JSON.stringify(v)}`)
|
|
45
|
+
.join(', ');
|
|
46
|
+
return `${entries.length} entries: ${head}, …`;
|
|
47
|
+
}
|
|
48
|
+
export function formatSettingValue(value) {
|
|
49
|
+
if (value === undefined) {
|
|
50
|
+
return '(default)';
|
|
51
|
+
}
|
|
52
|
+
if (typeof value === 'string') {
|
|
53
|
+
return value.length > STRING_HEAD
|
|
54
|
+
? `${value.slice(0, STRING_HEAD)}… (${value.length} characters)`
|
|
55
|
+
: value;
|
|
56
|
+
}
|
|
57
|
+
if (Array.isArray(value)) {
|
|
58
|
+
return value.length > LISTED_ENTRIES
|
|
59
|
+
? summarizeList(value)
|
|
60
|
+
: JSON.stringify(value);
|
|
61
|
+
}
|
|
62
|
+
if (typeof value === 'object' && value !== null) {
|
|
63
|
+
if (isSoleTypeObject(value)) {
|
|
64
|
+
return value.type;
|
|
65
|
+
}
|
|
66
|
+
const entries = Object.entries(value);
|
|
67
|
+
return entries.length > LISTED_ENTRIES
|
|
68
|
+
? summarizeMap(entries)
|
|
69
|
+
: JSON.stringify(value);
|
|
70
|
+
}
|
|
71
|
+
return JSON.stringify(value);
|
|
34
72
|
}
|
|
35
73
|
/**
|
|
36
74
|
* Shared three-column diff table (Setting / Default / Current) used by both the
|