@jbrowse/core 5.0.0-beta.7 → 5.0.0-beta.9
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 +427 -130
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +5 -3
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +3 -5
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +8 -9
- package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.js +8 -13
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.d.ts +2 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.js +3 -3
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.d.ts +8 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.js +24 -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 +1 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/index.js +1 -4
- package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.d.ts +16 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.js +53 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/util.d.ts +0 -8
- package/esm/BaseFeatureWidget/BaseFeatureDetail/util.js +0 -16
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceContents.js +7 -34
- package/esm/BaseFeatureWidget/configSchema.d.ts +1 -1
- package/esm/BaseFeatureWidget/formatDetails.d.ts +13 -29
- package/esm/BaseFeatureWidget/formatDetails.js +46 -79
- package/esm/BaseFeatureWidget/index.d.ts +1 -0
- package/esm/BaseFeatureWidget/stateModelFactory.d.ts +35 -28
- package/esm/BaseFeatureWidget/stateModelFactory.js +94 -102
- package/esm/BaseFeatureWidget/types.d.ts +3 -0
- package/esm/BaseFeatureWidget/util.d.ts +0 -3
- package/esm/BaseFeatureWidget/util.js +0 -17
- package/esm/PluginLoader.d.ts +14 -9
- package/esm/PluginLoader.js +34 -26
- package/esm/PluginManager.d.ts +4 -4
- package/esm/PluginManager.js +1 -1
- package/esm/ReExports/coreModules.generated.d.ts +2 -0
- package/esm/ReExports/coreModules.generated.js +492 -0
- package/esm/ReExports/coreWorkerModules.generated.d.ts +2 -0
- package/esm/ReExports/coreWorkerModules.generated.js +453 -0
- package/esm/ReExports/frameworkModules.d.ts +2 -0
- package/esm/ReExports/frameworkModules.js +67 -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 +493 -79
- package/esm/ReExports/modules.d.ts +1 -1
- package/esm/ReExports/modules.js +10 -87
- package/esm/ReExports/registry.d.ts +1 -0
- package/esm/ReExports/registry.js +23 -5
- package/esm/ReExports/uiStub.d.ts +2 -1
- package/esm/ReExports/uiStub.js +24 -2
- package/esm/ReExports/workerModules.js +8 -12
- package/esm/TextSearch/TextSearchManager.d.ts +3 -12
- package/esm/TextSearch/TextSearchManager.js +22 -10
- package/esm/assemblyManager/assembly.d.ts +10 -14
- package/esm/assemblyManager/assembly.js +10 -14
- package/esm/assemblyManager/assemblyConfigSchema.d.ts +23 -81
- package/esm/assemblyManager/assemblyManager.d.ts +10 -16
- package/esm/assemblyManager/assemblyManager.js +7 -10
- package/esm/assemblyManager/loadRefNameMap.js +3 -3
- package/esm/configuration/configurationSchema.d.ts +75 -31
- package/esm/configuration/configurationSchema.js +74 -40
- package/esm/configuration/configurationSchemaUnion.d.ts +39 -0
- package/esm/configuration/configurationSchemaUnion.js +59 -0
- package/esm/configuration/configurationSlot.d.ts +37 -12
- package/esm/configuration/configurationSlot.js +83 -22
- 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/getConf.d.ts +17 -9
- package/esm/configuration/getConf.js +52 -7
- package/esm/configuration/index.d.ts +11 -4
- package/esm/configuration/index.js +7 -4
- package/esm/configuration/mergeFormatCallbacks.d.ts +6 -7
- package/esm/configuration/mergeFormatCallbacks.js +13 -10
- package/esm/configuration/readConfObject.d.ts +2 -22
- package/esm/configuration/readConfObject.js +15 -49
- package/esm/configuration/requirements.d.ts +37 -0
- package/esm/configuration/requirements.js +88 -0
- package/esm/configuration/schemaRegistry.d.ts +21 -1
- package/esm/configuration/schemaRegistry.js +11 -0
- package/esm/configuration/schemaTypes.d.ts +3 -0
- package/esm/configuration/schemaTypes.js +10 -0
- package/esm/configuration/slotFacade.d.ts +35 -4
- package/esm/configuration/slotFacade.js +96 -9
- package/esm/configuration/snapshotPreprocess.d.ts +27 -0
- package/esm/configuration/snapshotPreprocess.js +102 -0
- package/esm/configuration/types.d.ts +161 -22
- package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +2 -2
- package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +11 -2
- package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +12 -1
- package/esm/data_adapters/BaseAdapter/featureDensity.d.ts +2 -3
- package/esm/data_adapters/BaseAdapter/featureDensity.js +2 -3
- package/esm/data_adapters/BaseAdapter/index.d.ts +22 -3
- package/esm/data_adapters/BaseAdapter/types.d.ts +3 -4
- package/esm/data_adapters/BaseAdapter/zoomRange.d.ts +10 -0
- package/esm/data_adapters/BaseAdapter/zoomRange.js +1 -0
- package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +9 -11
- package/esm/data_adapters/getSequenceSubAdapter.d.ts +1 -3
- package/esm/data_adapters/getSequenceSubAdapter.js +1 -3
- package/esm/pluggableElementTypes/AdapterType.d.ts +7 -7
- package/esm/pluggableElementTypes/RpcMethodType.d.ts +1 -1
- package/esm/pluggableElementTypes/RpcMethodType.js +3 -8
- package/esm/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.d.ts +1 -2
- package/esm/pluggableElementTypes/TextSearchAdapterType.d.ts +7 -7
- package/esm/pluggableElementTypes/index.d.ts +1 -1
- package/esm/pluggableElementTypes/index.js +1 -1
- package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +17 -7
- package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +45 -48
- package/esm/pluggableElementTypes/models/BaseDisplayModel.js +40 -36
- package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +10 -13
- package/esm/pluggableElementTypes/models/BaseTrackModel.js +6 -6
- package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +37 -17
- package/esm/pluggableElementTypes/models/BaseViewModel.js +25 -10
- package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +26 -16
- package/esm/pluggableElementTypes/models/assertDisplayContract.d.ts +1 -1
- 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 +57 -141
- package/esm/pluggableElementTypes/models/baseTrackConfig.js +22 -26
- package/esm/pluggableElementTypes/models/components/SaveTrackData.js +2 -2
- 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 +15 -7
- package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +38 -29
- package/esm/pluggableElementTypes/models/index.d.ts +1 -2
- package/esm/pluggableElementTypes/models/index.js +1 -2
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.d.ts +3 -3
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.js +4 -4
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/types.d.ts +3 -3
- package/esm/rpc/BaseRpcDriver.d.ts +1 -2
- package/esm/rpc/BaseRpcDriver.js +23 -30
- package/esm/rpc/MainThreadRpcDriver.d.ts +2 -2
- package/esm/rpc/MainThreadRpcDriver.js +13 -8
- package/esm/rpc/RpcClient.d.ts +17 -6
- package/esm/rpc/RpcClient.js +42 -12
- package/esm/rpc/RpcManager.d.ts +8 -10
- package/esm/rpc/RpcManager.js +1 -1
- package/esm/rpc/RpcRegistry.d.ts +8 -2
- package/esm/rpc/RpcServer.d.ts +3 -1
- package/esm/rpc/RpcServer.js +19 -12
- package/esm/rpc/WebWorkerRpcDriver.d.ts +3 -3
- package/esm/rpc/WebWorkerRpcDriver.js +9 -47
- package/esm/rpc/byteBudget.d.ts +3 -5
- package/esm/rpc/byteBudget.js +4 -4
- package/esm/rpc/configSchema.d.ts +7 -21
- package/esm/rpc/coreRpcMethods.d.ts +1 -0
- package/esm/rpc/coreRpcMethods.js +1 -0
- package/esm/rpc/methods/CoreEncodeFeatures.d.ts +6 -5
- package/esm/rpc/methods/CoreEncodeFeatures.js +26 -31
- package/esm/rpc/methods/CoreGetEncodedFeature.d.ts +13 -0
- package/esm/rpc/methods/CoreGetEncodedFeature.js +31 -0
- package/esm/rpc/methods/CoreGetExportData.js +2 -2
- package/esm/rpc/methods/CoreGetFeatureDensity.js +2 -2
- package/esm/rpc/methods/CoreGetFeatures.js +2 -2
- package/esm/rpc/methods/CoreGetSequence.js +2 -2
- package/esm/rpc/methods/layerFeatures.d.ts +26 -0
- package/esm/rpc/methods/layerFeatures.js +40 -0
- package/esm/svg/SvgExport.js +3 -4
- package/esm/svg/SvgThemeProviders.d.ts +12 -0
- package/esm/svg/SvgThemeProviders.js +15 -0
- package/esm/svg/exportViewSvg.d.ts +32 -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/svgReady.d.ts +8 -7
- package/esm/svg/svgReady.js +8 -7
- package/esm/svg/trackNames.d.ts +5 -5
- package/esm/svg/trackNames.js +6 -6
- package/esm/svg/wrapSvgExport.js +6 -74
- package/esm/ui/CascadingMenu.js +83 -86
- package/esm/ui/ErrorMessageStackTraceDialog.js +0 -5
- package/esm/ui/FileSelector/useInternetAccounts.d.ts +156 -96
- package/esm/ui/HoverMenu.d.ts +1 -2
- package/esm/ui/HoverMenu.js +6 -3
- package/esm/ui/JexlFilterDialog.d.ts +13 -10
- package/esm/ui/JexlFilterDialog.js +122 -49
- package/esm/ui/JexlFilterRowEditors.d.ts +15 -0
- package/esm/ui/JexlFilterRowEditors.js +90 -0
- package/esm/ui/LazyBaseTooltip.d.ts +4 -0
- package/esm/ui/LazyBaseTooltip.js +9 -0
- package/esm/ui/LoadingOverlay.js +3 -1
- package/esm/ui/MonospaceTextField.d.ts +2 -1
- package/esm/ui/MonospaceTextField.js +21 -19
- package/esm/ui/PaletteContext.d.ts +7 -9
- package/esm/ui/PaletteContext.js +24 -10
- package/esm/ui/RefNameAutocomplete/index.d.ts +1 -2
- package/esm/ui/RefNameAutocomplete/index.js +1 -1
- package/esm/ui/ScrollChrome.d.ts +6 -9
- package/esm/ui/ScrollChrome.js +5 -6
- package/esm/ui/ScrollEdgeShadow.d.ts +6 -9
- package/esm/ui/ScrollEdgeShadow.js +9 -24
- package/esm/ui/SettingsChangesTable.js +3 -3
- package/esm/ui/VerticalScrollbar.d.ts +13 -34
- package/esm/ui/VerticalScrollbar.js +29 -83
- package/esm/ui/ViewLoadingScreen.d.ts +2 -2
- package/esm/ui/ViewLoadingScreen.js +3 -3
- package/esm/ui/colorScale.d.ts +26 -1
- package/esm/ui/colorScale.js +28 -5
- package/esm/ui/colors.d.ts +49 -1
- package/esm/ui/colors.js +139 -4
- package/esm/ui/hoverBoxStyle.d.ts +14 -2
- package/esm/ui/hoverBoxStyle.js +17 -2
- package/esm/ui/index.d.ts +5 -3
- package/esm/ui/index.js +9 -7
- package/esm/ui/launchViewMenu.js +3 -3
- package/esm/ui/legendSpec.d.ts +2 -0
- package/esm/ui/legendSpec.js +3 -0
- package/esm/ui/palette.d.ts +0 -1
- package/esm/ui/palette.js +3 -27
- package/esm/ui/replaceViewAction.d.ts +1 -1
- package/esm/ui/replaceViewAction.js +1 -1
- package/esm/ui/theme.d.ts +1 -1
- package/esm/ui/theme.js +6 -40
- package/esm/ui/viewHeaderHeight.d.ts +1 -0
- package/esm/ui/viewHeaderHeight.js +1 -0
- package/esm/util/Base1DUtils.d.ts +1 -1
- package/esm/util/Base1DUtils.js +2 -2
- package/esm/util/SvgCanvas.d.ts +15 -13
- package/esm/util/SvgCanvas.js +72 -53
- package/esm/util/aborting.d.ts +39 -0
- package/esm/util/aborting.js +84 -0
- package/esm/util/adapterMetadata.d.ts +1 -1
- package/esm/util/adapterMetadata.js +6 -6
- package/esm/util/addAndShowTrack.d.ts +1 -4
- package/esm/util/addRelativeUris.d.ts +10 -2
- package/esm/util/addRelativeUris.js +22 -7
- package/esm/util/addTrackFromWidget.d.ts +2 -5
- 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/bandLayout.d.ts +4 -4
- package/esm/util/bandLayout.js +4 -4
- package/esm/util/bezierConnector.js +5 -4
- package/esm/util/bgzfWorkerPool.d.ts +20 -74
- package/esm/util/bgzfWorkerPool.js +20 -74
- package/esm/util/cachedSetup.d.ts +1 -1
- package/esm/util/cachedSetup.js +2 -2
- package/esm/util/categoricalField.d.ts +37 -0
- package/esm/util/categoricalField.js +52 -0
- 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 +1 -2
- package/esm/util/colorBits.js +17 -39
- package/esm/util/colorRamp.d.ts +27 -1
- package/esm/util/colorRamp.js +56 -2
- package/esm/util/colorSchemes.d.ts +9 -0
- package/esm/util/colorSchemes.js +7 -0
- package/esm/util/{createStopTokenRotation.d.ts → createAbortRotation.d.ts} +11 -14
- package/esm/util/{createStopTokenRotation.js → createAbortRotation.js} +14 -26
- 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 +7 -12
- package/esm/util/expandLooseSearchIndex.d.ts +7 -0
- package/esm/util/expandLooseSearchIndex.js +25 -0
- package/esm/util/featureTransforms.d.ts +30 -3
- package/esm/util/featureTransforms.js +233 -36
- package/esm/util/fetchAndMaybeUnzip.js +5 -6
- package/esm/util/fetchContext.d.ts +5 -6
- package/esm/util/fetchContext.js +1 -1
- package/esm/util/fetchHub.d.ts +3 -1
- package/esm/util/fetchHub.js +2 -2
- 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/groupKeys.d.ts +75 -0
- package/esm/util/groupKeys.js +152 -0
- package/esm/util/highlights.d.ts +6 -4
- package/esm/util/highlights.js +12 -25
- package/esm/util/hooks.d.ts +1 -2
- package/esm/util/hooks.js +1 -2
- package/esm/util/index.d.ts +3 -3
- package/esm/util/index.js +4 -3
- package/esm/util/indexCandidates.js +1 -1
- package/esm/util/installFetch.d.ts +13 -10
- package/esm/util/installFetch.js +11 -10
- package/esm/util/installPrerequisiteFetch.d.ts +5 -3
- package/esm/util/installPrerequisiteFetch.js +3 -4
- package/esm/util/io/index.js +12 -12
- package/esm/util/isDataCurrent.d.ts +7 -5
- package/esm/util/isDataCurrent.js +9 -6
- 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 +7 -5
- package/esm/util/jexlStrings.d.ts +3 -4
- package/esm/util/jexlStrings.js +2 -3
- package/esm/util/legendCandidates.d.ts +31 -27
- package/esm/util/legendCandidates.js +79 -53
- package/esm/util/localStorage.js +4 -4
- package/esm/util/markEncoding.d.ts +32 -16
- package/esm/util/markEncoding.js +177 -150
- package/esm/util/markEncodingTypes.d.ts +137 -66
- package/esm/util/mstUtils.d.ts +19 -22
- package/esm/util/mstUtils.js +19 -22
- 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.js +1 -2
- package/esm/util/openViews.d.ts +1 -0
- package/esm/util/openViews.js +3 -3
- package/esm/util/parseLineByLine.d.ts +3 -4
- package/esm/util/parseLineByLine.js +7 -13
- package/esm/util/progress.d.ts +21 -21
- package/esm/util/progress.js +27 -26
- package/esm/util/renameRegions.d.ts +1 -2
- package/esm/util/renderToStaticMarkup.js +16 -16
- package/esm/util/rxjs.d.ts +7 -8
- package/esm/util/rxjs.js +12 -15
- package/esm/util/simpleFeature.d.ts +0 -1
- package/esm/util/svgColorProps.d.ts +11 -0
- package/esm/util/svgColorProps.js +28 -1
- package/esm/util/tabix.d.ts +3 -4
- package/esm/util/tabix.js +6 -7
- package/esm/util/thresholdScale.d.ts +54 -0
- package/esm/util/thresholdScale.js +112 -0
- package/esm/util/timeGate.d.ts +4 -5
- package/esm/util/timeGate.js +4 -5
- package/esm/util/trackConfigDelta.d.ts +22 -18
- package/esm/util/trackConfigDelta.js +40 -38
- package/esm/util/tracks.d.ts +27 -4
- package/esm/util/tracks.js +116 -43
- package/esm/util/translateTranscript.d.ts +44 -0
- package/esm/util/translateTranscript.js +102 -0
- package/esm/util/types/index.d.ts +19 -7
- package/esm/util/types/services.d.ts +1 -1
- package/esm/util/unknownSnapshotKeys.d.ts +15 -0
- package/esm/util/unknownSnapshotKeys.js +13 -0
- package/esm/util/useFeatureSequence.js +4 -4
- package/esm/util/useFetch.d.ts +3 -4
- package/esm/util/useFetch.js +5 -6
- package/esm/util/usePanelVirtualScroll.d.ts +7 -39
- package/esm/util/usePanelVirtualScroll.js +9 -40
- 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 -84
- package/esm/util/viewHighlights.d.ts +3 -0
- package/esm/util/viewHighlights.js +5 -0
- package/esm/util/viewStatus.d.ts +24 -15
- package/esm/util/viewStatus.js +17 -0
- package/esm/util/withLaunchInput.d.ts +1 -1
- package/esm/util/withLaunchInput.js +0 -4
- package/package.json +26 -12
- 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/barrelOnlyNames.d.ts +0 -5
- package/esm/ReExports/barrelOnlyNames.js +0 -63
- package/esm/ReExports/index.d.ts +0 -1
- package/esm/ReExports/index.js +0 -1
- package/esm/ReExports/publicTracks.d.ts +0 -1
- package/esm/ReExports/publicTracks.js +0 -14
- package/esm/ReExports/publicUi.d.ts +0 -4
- package/esm/ReExports/publicUi.js +0 -33
- package/esm/ReExports/publicUtil.d.ts +0 -1
- package/esm/ReExports/publicUtil.js +0 -32
- package/esm/ReExports/sharedModules.d.ts +0 -96
- package/esm/ReExports/sharedModules.js +0 -66
- package/esm/ReExports/workerNamespaceNames.d.ts +0 -11
- package/esm/ReExports/workerNamespaceNames.js +0 -275
- package/esm/pluggableElementTypes/models/HighlightsMixin.d.ts +0 -51
- package/esm/pluggableElementTypes/models/HighlightsMixin.js +0 -78
- package/esm/ui/highlightChipReveal.d.ts +0 -32
- package/esm/ui/highlightChipReveal.js +0 -39
- package/esm/util/adapterConfigKey.d.ts +0 -12
- package/esm/util/adapterConfigKey.js +0 -14
- package/esm/util/stopToken.d.ts +0 -212
- package/esm/util/stopToken.js +0 -438
|
@@ -6,31 +6,41 @@ export default function useInternetAccounts(rootModel?: AbstractRootModel): {
|
|
|
6
6
|
type: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
|
|
7
7
|
configuration: import("../../configuration/configurationSchema.ts").IConfigurationReference<import("../../configuration/configurationSchema.ts").ConfigurationSchemaType<{
|
|
8
8
|
readonly name: {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
type: "string";
|
|
10
|
+
} & {
|
|
11
|
+
defaultValue: string;
|
|
12
12
|
};
|
|
13
13
|
readonly description: {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
type: "string";
|
|
15
|
+
} & {
|
|
16
|
+
defaultValue: string;
|
|
17
17
|
};
|
|
18
18
|
readonly authHeader: {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
type: "string";
|
|
20
|
+
} & {
|
|
21
|
+
defaultValue: string;
|
|
22
22
|
};
|
|
23
23
|
readonly tokenType: {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
type: "string";
|
|
25
|
+
} & {
|
|
26
|
+
defaultValue: string;
|
|
27
27
|
};
|
|
28
28
|
readonly domains: {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
type: "stringArray";
|
|
30
|
+
} & {
|
|
31
|
+
defaultValue: unknown;
|
|
32
32
|
};
|
|
33
|
-
|
|
33
|
+
type: {
|
|
34
|
+
type: "string";
|
|
35
|
+
} & {
|
|
36
|
+
defaultValue: string;
|
|
37
|
+
};
|
|
38
|
+
internetAccountId: {
|
|
39
|
+
type: "string";
|
|
40
|
+
} & {
|
|
41
|
+
defaultValue: string;
|
|
42
|
+
};
|
|
43
|
+
}, import("../../configuration/configurationSchema.ts").ConfigurationSchemaOptions<undefined, "internetAccountId", true, import("../../configuration/requirements.ts").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>>>>;
|
|
34
44
|
}> & {
|
|
35
45
|
readonly name: string;
|
|
36
46
|
readonly description: string;
|
|
@@ -86,31 +96,41 @@ export default function useInternetAccounts(rootModel?: AbstractRootModel): {
|
|
|
86
96
|
type: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
|
|
87
97
|
configuration: import("../../configuration/configurationSchema.ts").IConfigurationReference<import("../../configuration/configurationSchema.ts").ConfigurationSchemaType<{
|
|
88
98
|
readonly name: {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
99
|
+
type: "string";
|
|
100
|
+
} & {
|
|
101
|
+
defaultValue: string;
|
|
92
102
|
};
|
|
93
103
|
readonly description: {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
104
|
+
type: "string";
|
|
105
|
+
} & {
|
|
106
|
+
defaultValue: string;
|
|
97
107
|
};
|
|
98
108
|
readonly authHeader: {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
109
|
+
type: "string";
|
|
110
|
+
} & {
|
|
111
|
+
defaultValue: string;
|
|
102
112
|
};
|
|
103
113
|
readonly tokenType: {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
114
|
+
type: "string";
|
|
115
|
+
} & {
|
|
116
|
+
defaultValue: string;
|
|
107
117
|
};
|
|
108
118
|
readonly domains: {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
119
|
+
type: "stringArray";
|
|
120
|
+
} & {
|
|
121
|
+
defaultValue: unknown;
|
|
122
|
+
};
|
|
123
|
+
type: {
|
|
124
|
+
type: "string";
|
|
125
|
+
} & {
|
|
126
|
+
defaultValue: string;
|
|
112
127
|
};
|
|
113
|
-
|
|
128
|
+
internetAccountId: {
|
|
129
|
+
type: "string";
|
|
130
|
+
} & {
|
|
131
|
+
defaultValue: string;
|
|
132
|
+
};
|
|
133
|
+
}, import("../../configuration/configurationSchema.ts").ConfigurationSchemaOptions<undefined, "internetAccountId", true, import("../../configuration/requirements.ts").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>>>>;
|
|
114
134
|
}, {
|
|
115
135
|
readonly name: string;
|
|
116
136
|
readonly description: string;
|
|
@@ -168,31 +188,41 @@ export default function useInternetAccounts(rootModel?: AbstractRootModel): {
|
|
|
168
188
|
type: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
|
|
169
189
|
configuration: import("../../configuration/configurationSchema.ts").IConfigurationReference<import("../../configuration/configurationSchema.ts").ConfigurationSchemaType<{
|
|
170
190
|
readonly name: {
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
191
|
+
type: "string";
|
|
192
|
+
} & {
|
|
193
|
+
defaultValue: string;
|
|
174
194
|
};
|
|
175
195
|
readonly description: {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
196
|
+
type: "string";
|
|
197
|
+
} & {
|
|
198
|
+
defaultValue: string;
|
|
179
199
|
};
|
|
180
200
|
readonly authHeader: {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
201
|
+
type: "string";
|
|
202
|
+
} & {
|
|
203
|
+
defaultValue: string;
|
|
184
204
|
};
|
|
185
205
|
readonly tokenType: {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
206
|
+
type: "string";
|
|
207
|
+
} & {
|
|
208
|
+
defaultValue: string;
|
|
189
209
|
};
|
|
190
210
|
readonly domains: {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
211
|
+
type: "stringArray";
|
|
212
|
+
} & {
|
|
213
|
+
defaultValue: unknown;
|
|
214
|
+
};
|
|
215
|
+
type: {
|
|
216
|
+
type: "string";
|
|
217
|
+
} & {
|
|
218
|
+
defaultValue: string;
|
|
219
|
+
};
|
|
220
|
+
internetAccountId: {
|
|
221
|
+
type: "string";
|
|
222
|
+
} & {
|
|
223
|
+
defaultValue: string;
|
|
194
224
|
};
|
|
195
|
-
}, import("../../configuration/configurationSchema.ts").ConfigurationSchemaOptions<undefined, "internetAccountId"
|
|
225
|
+
}, import("../../configuration/configurationSchema.ts").ConfigurationSchemaOptions<undefined, "internetAccountId", true, import("../../configuration/requirements.ts").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>>>>;
|
|
196
226
|
}> & {
|
|
197
227
|
readonly name: string;
|
|
198
228
|
readonly description: string;
|
|
@@ -248,31 +278,41 @@ export default function useInternetAccounts(rootModel?: AbstractRootModel): {
|
|
|
248
278
|
type: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
|
|
249
279
|
configuration: import("../../configuration/configurationSchema.ts").IConfigurationReference<import("../../configuration/configurationSchema.ts").ConfigurationSchemaType<{
|
|
250
280
|
readonly name: {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
281
|
+
type: "string";
|
|
282
|
+
} & {
|
|
283
|
+
defaultValue: string;
|
|
254
284
|
};
|
|
255
285
|
readonly description: {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
286
|
+
type: "string";
|
|
287
|
+
} & {
|
|
288
|
+
defaultValue: string;
|
|
259
289
|
};
|
|
260
290
|
readonly authHeader: {
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
291
|
+
type: "string";
|
|
292
|
+
} & {
|
|
293
|
+
defaultValue: string;
|
|
264
294
|
};
|
|
265
295
|
readonly tokenType: {
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
296
|
+
type: "string";
|
|
297
|
+
} & {
|
|
298
|
+
defaultValue: string;
|
|
269
299
|
};
|
|
270
300
|
readonly domains: {
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
301
|
+
type: "stringArray";
|
|
302
|
+
} & {
|
|
303
|
+
defaultValue: unknown;
|
|
274
304
|
};
|
|
275
|
-
|
|
305
|
+
type: {
|
|
306
|
+
type: "string";
|
|
307
|
+
} & {
|
|
308
|
+
defaultValue: string;
|
|
309
|
+
};
|
|
310
|
+
internetAccountId: {
|
|
311
|
+
type: "string";
|
|
312
|
+
} & {
|
|
313
|
+
defaultValue: string;
|
|
314
|
+
};
|
|
315
|
+
}, import("../../configuration/configurationSchema.ts").ConfigurationSchemaOptions<undefined, "internetAccountId", true, import("../../configuration/requirements.ts").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>>>>;
|
|
276
316
|
}, {
|
|
277
317
|
readonly name: string;
|
|
278
318
|
readonly description: string;
|
|
@@ -329,31 +369,41 @@ export default function useInternetAccounts(rootModel?: AbstractRootModel): {
|
|
|
329
369
|
type: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
|
|
330
370
|
configuration: import("../../configuration/configurationSchema.ts").IConfigurationReference<import("../../configuration/configurationSchema.ts").ConfigurationSchemaType<{
|
|
331
371
|
readonly name: {
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
372
|
+
type: "string";
|
|
373
|
+
} & {
|
|
374
|
+
defaultValue: string;
|
|
335
375
|
};
|
|
336
376
|
readonly description: {
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
377
|
+
type: "string";
|
|
378
|
+
} & {
|
|
379
|
+
defaultValue: string;
|
|
340
380
|
};
|
|
341
381
|
readonly authHeader: {
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
382
|
+
type: "string";
|
|
383
|
+
} & {
|
|
384
|
+
defaultValue: string;
|
|
345
385
|
};
|
|
346
386
|
readonly tokenType: {
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
387
|
+
type: "string";
|
|
388
|
+
} & {
|
|
389
|
+
defaultValue: string;
|
|
350
390
|
};
|
|
351
391
|
readonly domains: {
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
392
|
+
type: "stringArray";
|
|
393
|
+
} & {
|
|
394
|
+
defaultValue: unknown;
|
|
395
|
+
};
|
|
396
|
+
type: {
|
|
397
|
+
type: "string";
|
|
398
|
+
} & {
|
|
399
|
+
defaultValue: string;
|
|
355
400
|
};
|
|
356
|
-
|
|
401
|
+
internetAccountId: {
|
|
402
|
+
type: "string";
|
|
403
|
+
} & {
|
|
404
|
+
defaultValue: string;
|
|
405
|
+
};
|
|
406
|
+
}, import("../../configuration/configurationSchema.ts").ConfigurationSchemaOptions<undefined, "internetAccountId", true, import("../../configuration/requirements.ts").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>>>>;
|
|
357
407
|
}> & {
|
|
358
408
|
readonly name: string;
|
|
359
409
|
readonly description: string;
|
|
@@ -409,31 +459,41 @@ export default function useInternetAccounts(rootModel?: AbstractRootModel): {
|
|
|
409
459
|
type: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
|
|
410
460
|
configuration: import("../../configuration/configurationSchema.ts").IConfigurationReference<import("../../configuration/configurationSchema.ts").ConfigurationSchemaType<{
|
|
411
461
|
readonly name: {
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
462
|
+
type: "string";
|
|
463
|
+
} & {
|
|
464
|
+
defaultValue: string;
|
|
415
465
|
};
|
|
416
466
|
readonly description: {
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
467
|
+
type: "string";
|
|
468
|
+
} & {
|
|
469
|
+
defaultValue: string;
|
|
420
470
|
};
|
|
421
471
|
readonly authHeader: {
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
472
|
+
type: "string";
|
|
473
|
+
} & {
|
|
474
|
+
defaultValue: string;
|
|
425
475
|
};
|
|
426
476
|
readonly tokenType: {
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
477
|
+
type: "string";
|
|
478
|
+
} & {
|
|
479
|
+
defaultValue: string;
|
|
430
480
|
};
|
|
431
481
|
readonly domains: {
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
482
|
+
type: "stringArray";
|
|
483
|
+
} & {
|
|
484
|
+
defaultValue: unknown;
|
|
485
|
+
};
|
|
486
|
+
type: {
|
|
487
|
+
type: "string";
|
|
488
|
+
} & {
|
|
489
|
+
defaultValue: string;
|
|
490
|
+
};
|
|
491
|
+
internetAccountId: {
|
|
492
|
+
type: "string";
|
|
493
|
+
} & {
|
|
494
|
+
defaultValue: string;
|
|
435
495
|
};
|
|
436
|
-
}, import("../../configuration/configurationSchema.ts").ConfigurationSchemaOptions<undefined, "internetAccountId"
|
|
496
|
+
}, import("../../configuration/configurationSchema.ts").ConfigurationSchemaOptions<undefined, "internetAccountId", true, import("../../configuration/requirements.ts").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>>>>;
|
|
437
497
|
}, {
|
|
438
498
|
readonly name: string;
|
|
439
499
|
readonly description: string;
|
package/esm/ui/HoverMenu.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { PopoverOrigin } from '@mui/material';
|
|
2
|
-
declare function HoverMenu({
|
|
3
|
-
open: boolean;
|
|
2
|
+
declare function HoverMenu({ anchorEl, onClose, onMouseEnter, paperRef, anchorOrigin, transformOrigin, zIndex, children, }: {
|
|
4
3
|
anchorEl: HTMLElement | null;
|
|
5
4
|
onClose: () => void;
|
|
6
5
|
onMouseEnter?: () => void;
|
package/esm/ui/HoverMenu.js
CHANGED
|
@@ -4,7 +4,10 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
4
4
|
import { Menu } from '@mui/material';
|
|
5
5
|
// A Menu a hovering pointer can cross into: the root (which spans the viewport)
|
|
6
6
|
// is click-through so the gap between the opener row and the panel doesn't
|
|
7
|
-
// swallow the pointer, while the paper itself stays interactive.
|
|
7
|
+
// swallow the pointer, while the paper itself stays interactive. That root can
|
|
8
|
+
// never deliver a click to a backdrop, so it renders none.
|
|
9
|
+
//
|
|
10
|
+
// Mounted only while its submenu is open, which is why it takes no `open`.
|
|
8
11
|
//
|
|
9
12
|
// Only CascadingMenu's submenus render this, so it takes exactly what they pass
|
|
10
13
|
// — the root's pointer-events and the paper slot are its whole point, and a
|
|
@@ -15,8 +18,8 @@ import { Menu } from '@mui/material';
|
|
|
15
18
|
// and `onMouseEnter`, which fires on the paper rather than the click-through
|
|
16
19
|
// root and so means "the pointer arrived here", not "the pointer is somewhere
|
|
17
20
|
// over the viewport".
|
|
18
|
-
function HoverMenu({
|
|
19
|
-
return (_jsx(Menu, { open:
|
|
21
|
+
function HoverMenu({ anchorEl, onClose, onMouseEnter, paperRef, anchorOrigin, transformOrigin, zIndex, children, }) {
|
|
22
|
+
return (_jsx(Menu, { open: true, anchorEl: anchorEl, onClose: onClose, anchorOrigin: anchorOrigin, transformOrigin: transformOrigin, style: { pointerEvents: 'none', zIndex }, hideBackdrop: true, slotProps: {
|
|
20
23
|
paper: {
|
|
21
24
|
style: { pointerEvents: 'auto' },
|
|
22
25
|
onMouseEnter,
|
|
@@ -1,23 +1,26 @@
|
|
|
1
|
+
import type { JexlFilterField } from '../util/jexlFilterRows.ts';
|
|
1
2
|
import type { JexlFilterModel } from '../util/jexlFilters.ts';
|
|
3
|
+
export type { JexlFilterField } from '../util/jexlFilterRows.ts';
|
|
2
4
|
export interface JexlFilterExample {
|
|
3
5
|
code: string;
|
|
4
6
|
description: string;
|
|
5
7
|
}
|
|
6
8
|
/**
|
|
7
|
-
* Editor for a
|
|
8
|
-
*
|
|
9
|
+
* Editor for a display's jexl feature filters, for any display implementing
|
|
10
|
+
* the two-tier {@link JexlFilterModel} contract. The Conditions tab shows each
|
|
11
|
+
* line as rows of field, operator and value where it can, and as text where it
|
|
12
|
+
* cannot; the Text tab is every line as text.
|
|
9
13
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* editable) and the others from the raw override (so they did not), and only one
|
|
15
|
-
* of them normalized an emptied list. Both are policy this dialog can state
|
|
16
|
-
* once — the dialog is where "the box is empty" becomes a value.
|
|
14
|
+
* `fields` lists what the field picker offers, then the columns `metadata`
|
|
15
|
+
* describes, if it is an adapter's `{column: description}` map. Either one
|
|
16
|
+
* given as a promise suspends the dialog until it resolves, so it must not
|
|
17
|
+
* reject.
|
|
17
18
|
*/
|
|
18
|
-
declare const JexlFilterDialog: ({ model, handleClose, examples, }: {
|
|
19
|
+
declare const JexlFilterDialog: ({ model, handleClose, examples, fields, metadata, }: {
|
|
19
20
|
model: JexlFilterModel;
|
|
20
21
|
handleClose: () => void;
|
|
21
22
|
examples?: JexlFilterExample[];
|
|
23
|
+
fields?: JexlFilterField[] | Promise<JexlFilterField[]>;
|
|
24
|
+
metadata?: Promise<unknown>;
|
|
22
25
|
}) => import("react").JSX.Element;
|
|
23
26
|
export default JexlFilterDialog;
|
|
@@ -1,34 +1,19 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useState } from 'react';
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { use, useState } from 'react';
|
|
3
3
|
import { getEnv } from '@jbrowse/mobx-state-tree';
|
|
4
|
+
import AddIcon from '@mui/icons-material/Add';
|
|
5
|
+
import { Button, ListItemText, MenuItem, Tab, Tabs, TextField, } from '@mui/material';
|
|
4
6
|
import { observer } from 'mobx-react';
|
|
7
|
+
import { readConfObject } from '../configuration/readConfObject.js';
|
|
8
|
+
import { addRow, describedColumns, readFilterRows, removeRow, replaceRow, resolveFields, stripJexlPrefix, writeFilterRows, } from '../util/jexlFilterRows.js';
|
|
5
9
|
import { activeJexlFilters } from '../util/jexlFilters.js';
|
|
6
|
-
import { ensureJexlPrefix
|
|
10
|
+
import { ensureJexlPrefix } from '../util/jexlStrings.js';
|
|
11
|
+
import { getContainingTrack } from '../util/mstUtils.js';
|
|
12
|
+
import { makeStyles } from '../util/tss-react/index.js';
|
|
7
13
|
import ExternalLink from './ExternalLink.js';
|
|
14
|
+
import { ConditionRowEditor, TextRowEditor, compileError, } from './JexlFilterRowEditors.js';
|
|
8
15
|
import MonospaceTextField from './MonospaceTextField.js';
|
|
9
16
|
import SubmitDialog from './SubmitDialog.js';
|
|
10
|
-
// Non-blank, trimmed lines — the filter list excludes blank lines a user leaves
|
|
11
|
-
// in the textarea, and the same set is what gets validated.
|
|
12
|
-
function filterLines(text) {
|
|
13
|
-
return text
|
|
14
|
-
.split('\n')
|
|
15
|
-
.map(line => line.trim())
|
|
16
|
-
.filter(line => !!line);
|
|
17
|
-
}
|
|
18
|
-
// jexl compile error for the current text, or undefined when every line parses.
|
|
19
|
-
// Derived during render (compilation is cached on the instance, so no effect
|
|
20
|
-
// needed).
|
|
21
|
-
function jexlError(text, jexl) {
|
|
22
|
-
try {
|
|
23
|
-
for (const line of filterLines(text)) {
|
|
24
|
-
stringToJexlExpression(line, jexl);
|
|
25
|
-
}
|
|
26
|
-
return undefined;
|
|
27
|
-
}
|
|
28
|
-
catch (e) {
|
|
29
|
-
return e;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
17
|
/**
|
|
33
18
|
* What a display filtering plain annotation features offers as a starting
|
|
34
19
|
* point. A display whose features are a richer record — a VCF, say — passes its
|
|
@@ -62,33 +47,121 @@ const FEATURE_FILTER_EXAMPLES = [
|
|
|
62
47
|
description: 'show only features with length less than 1Mbp',
|
|
63
48
|
},
|
|
64
49
|
];
|
|
50
|
+
const FEATURE_FIELDS = [
|
|
51
|
+
{ label: 'name', path: ['name'], type: 'text' },
|
|
52
|
+
{ label: 'type', path: ['type'], type: 'text' },
|
|
53
|
+
{ label: 'score', path: ['score'], type: 'number' },
|
|
54
|
+
{ label: 'start', path: ['start'], type: 'number' },
|
|
55
|
+
{ label: 'end', path: ['end'], type: 'number' },
|
|
56
|
+
{ label: 'strand', path: ['strand'], type: 'number' },
|
|
57
|
+
];
|
|
58
|
+
const useStyles = makeStyles()(theme => ({
|
|
59
|
+
body: {
|
|
60
|
+
minHeight: 280,
|
|
61
|
+
},
|
|
62
|
+
tabs: {
|
|
63
|
+
marginBottom: theme.spacing(2),
|
|
64
|
+
},
|
|
65
|
+
hint: {
|
|
66
|
+
marginBottom: theme.spacing(2),
|
|
67
|
+
color: theme.palette.text.secondary,
|
|
68
|
+
},
|
|
69
|
+
examples: {
|
|
70
|
+
minWidth: 220,
|
|
71
|
+
marginBottom: theme.spacing(1),
|
|
72
|
+
},
|
|
73
|
+
}));
|
|
74
|
+
function textLines(text) {
|
|
75
|
+
return text
|
|
76
|
+
.split('\n')
|
|
77
|
+
.map(line => line.trim())
|
|
78
|
+
.filter(line => !!line)
|
|
79
|
+
.map(ensureJexlPrefix);
|
|
80
|
+
}
|
|
81
|
+
function textError(text, jexl) {
|
|
82
|
+
for (const [i, line] of text.split('\n').entries()) {
|
|
83
|
+
const error = line.trim() ? compileError(line, jexl) : undefined;
|
|
84
|
+
if (error) {
|
|
85
|
+
return `Line ${i + 1}: ${error}`;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
function trackName(model) {
|
|
91
|
+
try {
|
|
92
|
+
return readConfObject(getContainingTrack(model).configuration, 'name');
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function withOneRow(state) {
|
|
99
|
+
return state.rows.length > 0 ? state : addRow(state);
|
|
100
|
+
}
|
|
65
101
|
/**
|
|
66
|
-
* Editor for a
|
|
67
|
-
*
|
|
102
|
+
* Editor for a display's jexl feature filters, for any display implementing
|
|
103
|
+
* the two-tier {@link JexlFilterModel} contract. The Conditions tab shows each
|
|
104
|
+
* line as rows of field, operator and value where it can, and as text where it
|
|
105
|
+
* cannot; the Text tab is every line as text.
|
|
68
106
|
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
* editable) and the others from the raw override (so they did not), and only one
|
|
74
|
-
* of them normalized an emptied list. Both are policy this dialog can state
|
|
75
|
-
* once — the dialog is where "the box is empty" becomes a value.
|
|
107
|
+
* `fields` lists what the field picker offers, then the columns `metadata`
|
|
108
|
+
* describes, if it is an adapter's `{column: description}` map. Either one
|
|
109
|
+
* given as a promise suspends the dialog until it resolves, so it must not
|
|
110
|
+
* reject.
|
|
76
111
|
*/
|
|
77
|
-
const JexlFilterDialog = observer(function JexlFilterDialog({ model, handleClose, examples = FEATURE_FILTER_EXAMPLES, }) {
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
112
|
+
const JexlFilterDialog = observer(function JexlFilterDialog({ model, handleClose, examples = FEATURE_FILTER_EXAMPLES, fields = FEATURE_FIELDS, metadata, }) {
|
|
113
|
+
const { classes } = useStyles();
|
|
114
|
+
const jexl = getEnv(model).pluginManager
|
|
115
|
+
.jexl;
|
|
116
|
+
const fieldList = fields instanceof Promise ? use(fields) : fields;
|
|
117
|
+
const described = metadata && use(metadata);
|
|
118
|
+
const [choices] = useState(() => resolveFields([...fieldList, ...describedColumns(described, fieldList)]));
|
|
119
|
+
const [state, setState] = useState(() => withOneRow(readFilterRows(activeJexlFilters(model), jexl, choices)));
|
|
120
|
+
const [tab, setTab] = useState('conditions');
|
|
121
|
+
const [text, setText] = useState({ value: '', shown: '' });
|
|
122
|
+
const textEdited = text.value !== text.shown;
|
|
123
|
+
const error = tab === 'text'
|
|
124
|
+
? textError(text.value, jexl)
|
|
125
|
+
: state.rows.some(row => row.kind === 'text' && compileError(row.text, jexl));
|
|
126
|
+
const name = trackName(model);
|
|
127
|
+
return (_jsx(SubmitDialog, { maxWidth: "md", fullWidth: true, open: true, title: name ? `Filter ${name}` : 'Filter features', submitText: "Apply", submitDisabled: !!error, onCancel: handleClose, onSubmit: () => {
|
|
128
|
+
// An emptied list is "show everything", which is NOT the same as
|
|
129
|
+
// following the config slot, so it is set as an override too
|
|
130
|
+
model.setJexlFilters(tab === 'text' && textEdited
|
|
131
|
+
? textLines(text.value)
|
|
132
|
+
: writeFilterRows(state));
|
|
89
133
|
handleClose();
|
|
90
|
-
}, children:
|
|
91
|
-
|
|
92
|
-
|
|
134
|
+
}, children: _jsxs("div", { className: classes.body, children: [_jsxs(Tabs, { className: classes.tabs, value: tab, onChange: (_, next) => {
|
|
135
|
+
if (next === 'text') {
|
|
136
|
+
const value = writeFilterRows(state)
|
|
137
|
+
.map(stripJexlPrefix)
|
|
138
|
+
.join('\n');
|
|
139
|
+
setText({ value, shown: value });
|
|
140
|
+
}
|
|
141
|
+
else if (textEdited) {
|
|
142
|
+
setState(withOneRow(readFilterRows(textLines(text.value), jexl, choices)));
|
|
143
|
+
}
|
|
144
|
+
setTab(next);
|
|
145
|
+
}, children: [_jsx(Tab, { value: "conditions", label: "Conditions" }), _jsx(Tab, { value: "text", label: "Text", "data-testid": "jexl-filter-text-tab" })] }), tab === 'conditions' ? (_jsxs(_Fragment, { children: [_jsx("div", { className: classes.hint, children: "Show features that match every condition." }), state.rows.map(row => row.kind === 'text' ? (_jsx(TextRowEditor, { row: row, jexl: jexl, onChange: next => {
|
|
146
|
+
setState(replaceRow(state, next));
|
|
147
|
+
}, onRemove: () => {
|
|
148
|
+
setState(removeRow(state, row.id));
|
|
149
|
+
} }, row.id)) : (_jsx(ConditionRowEditor, { row: row, choices: choices, onChange: next => {
|
|
150
|
+
setState(replaceRow(state, next));
|
|
151
|
+
}, onRemove: () => {
|
|
152
|
+
setState(removeRow(state, row.id));
|
|
153
|
+
} }, row.id))), _jsx(Button, { startIcon: _jsx(AddIcon, {}), onClick: () => {
|
|
154
|
+
setState(addRow(state));
|
|
155
|
+
}, children: "Add condition" })] })) : (_jsxs(_Fragment, { children: [_jsx(TextField, { select: true, size: "small", label: "Insert example\u2026", value: "", className: classes.examples, onChange: event => {
|
|
156
|
+
const code = stripJexlPrefix(event.target.value);
|
|
157
|
+
setText({
|
|
158
|
+
...text,
|
|
159
|
+
value: text.value.trim()
|
|
160
|
+
? `${text.value.trimEnd()}\n${code}`
|
|
161
|
+
: code,
|
|
162
|
+
});
|
|
163
|
+
}, children: examples.map(({ code, description }) => (_jsx(MenuItem, { value: code, children: _jsx(ListItemText, { primary: stripJexlPrefix(code), secondary: description }) }, code))) }), _jsx(MonospaceTextField, { fullWidth: true, minRows: 6, maxRows: 14, value: text.value, error: error, helperText: "One filter per line; a feature has to pass every line.", onChange: value => {
|
|
164
|
+
setText({ ...text, value });
|
|
165
|
+
} }), _jsxs("p", { children: ["See the", ' ', _jsx(ExternalLink, { href: "https://jbrowse.org/jb2/docs/config_guides/jexl/", children: "jexl documentation" }), ' ', "for the expression language."] })] }))] }) }));
|
|
93
166
|
});
|
|
94
167
|
export default JexlFilterDialog;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ConditionRow, FieldChoice, TextRow } from '../util/jexlFilterRows.ts';
|
|
2
|
+
import type { Jexl } from '@jbrowse/jexl';
|
|
3
|
+
export declare function compileError(line: string, jexl: Pick<Jexl, 'compile'>): string | undefined;
|
|
4
|
+
export declare function ConditionRowEditor({ row, choices, onChange, onRemove, }: {
|
|
5
|
+
row: ConditionRow;
|
|
6
|
+
choices: FieldChoice[];
|
|
7
|
+
onChange: (row: ConditionRow) => void;
|
|
8
|
+
onRemove: () => void;
|
|
9
|
+
}): import("react").JSX.Element;
|
|
10
|
+
export declare function TextRowEditor({ row, jexl, onChange, onRemove, }: {
|
|
11
|
+
row: TextRow;
|
|
12
|
+
jexl: Pick<Jexl, 'compile'>;
|
|
13
|
+
onChange: (row: TextRow) => void;
|
|
14
|
+
onRemove: () => void;
|
|
15
|
+
}): import("react").JSX.Element;
|