@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
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { AstNode, Subject } from '@jbrowse/jexl';
|
|
2
|
+
export type JexlFilterFieldType = 'number' | 'text' | 'flag';
|
|
3
|
+
export type JexlFilterField = {
|
|
4
|
+
label: string;
|
|
5
|
+
/** unset for a field whose values may be numbers or text */
|
|
6
|
+
type?: JexlFilterFieldType;
|
|
7
|
+
group?: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
/** holds several values per feature, so a comparison asks whether any does */
|
|
10
|
+
multi?: boolean;
|
|
11
|
+
values?: string[];
|
|
12
|
+
} & ({
|
|
13
|
+
path: string[];
|
|
14
|
+
} | {
|
|
15
|
+
call: string;
|
|
16
|
+
});
|
|
17
|
+
export interface FieldChoice {
|
|
18
|
+
key: string;
|
|
19
|
+
label: string;
|
|
20
|
+
type?: JexlFilterFieldType;
|
|
21
|
+
subject: Subject;
|
|
22
|
+
group?: string;
|
|
23
|
+
description?: string;
|
|
24
|
+
multi?: boolean;
|
|
25
|
+
values?: string[];
|
|
26
|
+
}
|
|
27
|
+
export type RowOp = '>' | '>=' | '<' | '<=' | '==' | '!=' | 'in' | '~' | 'set' | '!set';
|
|
28
|
+
export declare const OPERATORS: Record<JexlFilterFieldType | 'any', {
|
|
29
|
+
op: RowOp;
|
|
30
|
+
label: string;
|
|
31
|
+
}[]>;
|
|
32
|
+
export interface ConditionRow {
|
|
33
|
+
kind: 'condition';
|
|
34
|
+
id: number;
|
|
35
|
+
line?: number;
|
|
36
|
+
field?: FieldChoice;
|
|
37
|
+
op: RowOp;
|
|
38
|
+
value: string | string[];
|
|
39
|
+
}
|
|
40
|
+
export interface TextRow {
|
|
41
|
+
kind: 'text';
|
|
42
|
+
id: number;
|
|
43
|
+
line?: number;
|
|
44
|
+
text: string;
|
|
45
|
+
}
|
|
46
|
+
export type FilterRow = ConditionRow | TextRow;
|
|
47
|
+
/**
|
|
48
|
+
* Rows keep the index of the stored line they came from until one of that
|
|
49
|
+
* line's rows changes, so an untouched line is written back byte-identical.
|
|
50
|
+
*/
|
|
51
|
+
export interface FilterRows {
|
|
52
|
+
lines: readonly string[];
|
|
53
|
+
rows: FilterRow[];
|
|
54
|
+
}
|
|
55
|
+
interface Parser {
|
|
56
|
+
parse: (text: string) => AstNode | null;
|
|
57
|
+
}
|
|
58
|
+
export declare function resolveFields(fields: readonly JexlFilterField[]): {
|
|
59
|
+
key: string;
|
|
60
|
+
label: string;
|
|
61
|
+
type: JexlFilterFieldType | undefined;
|
|
62
|
+
group: string | undefined;
|
|
63
|
+
description: string | undefined;
|
|
64
|
+
multi: boolean | undefined;
|
|
65
|
+
values: string[] | undefined;
|
|
66
|
+
subject: Subject;
|
|
67
|
+
}[];
|
|
68
|
+
/**
|
|
69
|
+
* The columns an adapter's metadata describes as `{column: description}`, as
|
|
70
|
+
* a BigBed's autoSql does, less those `fields` already lists. Any other
|
|
71
|
+
* metadata describes none.
|
|
72
|
+
*/
|
|
73
|
+
export declare function describedColumns(metadata: unknown, fields: readonly JexlFilterField[]): JexlFilterField[];
|
|
74
|
+
/** A field typed into the picker rather than chosen, read as a dotted path. */
|
|
75
|
+
export declare function typedField(text: string): FieldChoice;
|
|
76
|
+
export declare function stripJexlPrefix(line: string): string;
|
|
77
|
+
export declare function readFilterRows(lines: readonly string[], parser: Parser, choices: readonly FieldChoice[]): FilterRows;
|
|
78
|
+
export declare function addRow(state: FilterRows): FilterRows;
|
|
79
|
+
export declare function replaceRow(state: FilterRows, row: FilterRow): FilterRows;
|
|
80
|
+
export declare function removeRow(state: FilterRows, id: number): FilterRows;
|
|
81
|
+
export declare function withField(row: ConditionRow, field: FieldChoice): ConditionRow;
|
|
82
|
+
export declare function withOp(row: ConditionRow, op: RowOp): ConditionRow;
|
|
83
|
+
/**
|
|
84
|
+
* The stored filters: an untouched line as it was, and every row of an edited
|
|
85
|
+
* line as a line of its own, which is equivalent because lines AND together.
|
|
86
|
+
* Rows left incomplete are dropped.
|
|
87
|
+
*/
|
|
88
|
+
export declare function writeFilterRows({ lines, rows }: FilterRows): string[];
|
|
89
|
+
export {};
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import { callSubject, conditions, pathSubject, print, printCondition, } from '@jbrowse/jexl';
|
|
2
|
+
import { JEXL_PREFIX, ensureJexlPrefix, isJexl } from './jexlStrings.js';
|
|
3
|
+
export const OPERATORS = {
|
|
4
|
+
number: [
|
|
5
|
+
{ op: '>', label: '>' },
|
|
6
|
+
{ op: '>=', label: '≥' },
|
|
7
|
+
{ op: '<', label: '<' },
|
|
8
|
+
{ op: '<=', label: '≤' },
|
|
9
|
+
{ op: '==', label: '=' },
|
|
10
|
+
{ op: '!=', label: '≠' },
|
|
11
|
+
],
|
|
12
|
+
text: [
|
|
13
|
+
{ op: '==', label: 'is' },
|
|
14
|
+
{ op: '!=', label: 'is not' },
|
|
15
|
+
{ op: 'in', label: 'is one of' },
|
|
16
|
+
{ op: '~', label: 'matches' },
|
|
17
|
+
],
|
|
18
|
+
flag: [
|
|
19
|
+
{ op: 'set', label: 'is set' },
|
|
20
|
+
{ op: '!set', label: 'is not set' },
|
|
21
|
+
],
|
|
22
|
+
any: [
|
|
23
|
+
{ op: '==', label: 'is' },
|
|
24
|
+
{ op: '!=', label: 'is not' },
|
|
25
|
+
{ op: '>', label: '>' },
|
|
26
|
+
{ op: '>=', label: '≥' },
|
|
27
|
+
{ op: '<', label: '<' },
|
|
28
|
+
{ op: '<=', label: '≤' },
|
|
29
|
+
{ op: 'in', label: 'is one of' },
|
|
30
|
+
{ op: '~', label: 'matches' },
|
|
31
|
+
],
|
|
32
|
+
};
|
|
33
|
+
const ROW = 'feature';
|
|
34
|
+
function subjectKey(subject) {
|
|
35
|
+
return JSON.stringify(subject.kind === 'path'
|
|
36
|
+
? ['path', ...subject.path]
|
|
37
|
+
: ['call', subject.name, ...subject.args]);
|
|
38
|
+
}
|
|
39
|
+
export function resolveFields(fields) {
|
|
40
|
+
return fields.map(({ label, type, group, description, multi, values, ...source }) => {
|
|
41
|
+
const subject = 'call' in source
|
|
42
|
+
? callSubject(ROW, source.call)
|
|
43
|
+
: pathSubject(ROW, source.path);
|
|
44
|
+
return {
|
|
45
|
+
key: subjectKey(subject),
|
|
46
|
+
label,
|
|
47
|
+
type,
|
|
48
|
+
group,
|
|
49
|
+
description,
|
|
50
|
+
multi,
|
|
51
|
+
values,
|
|
52
|
+
subject,
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
// a feature carries these as refName, start and end
|
|
57
|
+
const BED_LOCUS_COLUMNS = new Set(['chrom', 'chromStart', 'chromEnd']);
|
|
58
|
+
/**
|
|
59
|
+
* The columns an adapter's metadata describes as `{column: description}`, as
|
|
60
|
+
* a BigBed's autoSql does, less those `fields` already lists. Any other
|
|
61
|
+
* metadata describes none.
|
|
62
|
+
*/
|
|
63
|
+
export function describedColumns(metadata, fields) {
|
|
64
|
+
const entries = metadata && typeof metadata === 'object' ? Object.entries(metadata) : [];
|
|
65
|
+
const listed = new Set(fields.map(field => field.label));
|
|
66
|
+
return entries.every((entry) => typeof entry[1] === 'string')
|
|
67
|
+
? entries
|
|
68
|
+
.filter(([name]) => !listed.has(name) && !BED_LOCUS_COLUMNS.has(name))
|
|
69
|
+
.map(([name, description]) => ({
|
|
70
|
+
label: name,
|
|
71
|
+
path: [name],
|
|
72
|
+
description: description || undefined,
|
|
73
|
+
}))
|
|
74
|
+
: [];
|
|
75
|
+
}
|
|
76
|
+
/** A field typed into the picker rather than chosen, read as a dotted path. */
|
|
77
|
+
export function typedField(text) {
|
|
78
|
+
const subject = pathSubject(ROW, text.split('.'));
|
|
79
|
+
return { key: subjectKey(subject), label: text, subject };
|
|
80
|
+
}
|
|
81
|
+
export function stripJexlPrefix(line) {
|
|
82
|
+
return isJexl(line) ? line.slice(JEXL_PREFIX.length) : line;
|
|
83
|
+
}
|
|
84
|
+
/** A field of no known type writes a value that reads as a number as one. */
|
|
85
|
+
function scalar(type, text) {
|
|
86
|
+
const number = Number(text);
|
|
87
|
+
return type === 'number' ||
|
|
88
|
+
(!type && text.trim() !== '' && Number.isFinite(number))
|
|
89
|
+
? number
|
|
90
|
+
: text;
|
|
91
|
+
}
|
|
92
|
+
function subjectLabel(subject) {
|
|
93
|
+
return subject.kind === 'path'
|
|
94
|
+
? subject.path
|
|
95
|
+
.map((key, i) => typeof key === 'number' ? `[${key}]` : i === 0 ? key : `.${key}`)
|
|
96
|
+
.join('')
|
|
97
|
+
: print(subject.node);
|
|
98
|
+
}
|
|
99
|
+
function conditionRow(c, choices, id, line) {
|
|
100
|
+
const value = 'value' in c ? c.value : undefined;
|
|
101
|
+
const key = subjectKey(c.subject);
|
|
102
|
+
const field = choices.find(f => f.key === key) ?? {
|
|
103
|
+
key,
|
|
104
|
+
label: subjectLabel(c.subject),
|
|
105
|
+
type: value === undefined ? 'flag' : undefined,
|
|
106
|
+
subject: c.subject,
|
|
107
|
+
};
|
|
108
|
+
const op = c.op;
|
|
109
|
+
const values = value === undefined ? [] : [value].flat();
|
|
110
|
+
const writesBack = (v) => op === '~' ? typeof v === 'string' : scalar(field.type, String(v)) === v;
|
|
111
|
+
return OPERATORS[field.type ?? 'any'].some(o => o.op === op) &&
|
|
112
|
+
values.every(writesBack)
|
|
113
|
+
? {
|
|
114
|
+
kind: 'condition',
|
|
115
|
+
id,
|
|
116
|
+
line,
|
|
117
|
+
field,
|
|
118
|
+
op,
|
|
119
|
+
value: Array.isArray(value) ? value.map(String) : String(value ?? ''),
|
|
120
|
+
}
|
|
121
|
+
: undefined;
|
|
122
|
+
}
|
|
123
|
+
function parseConditions(text, parser, calls) {
|
|
124
|
+
try {
|
|
125
|
+
return conditions(parser.parse(text), {
|
|
126
|
+
row: ROW,
|
|
127
|
+
accessors: { get: [] },
|
|
128
|
+
calls,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
export function readFilterRows(lines, parser, choices) {
|
|
136
|
+
const calls = choices.flatMap(f => f.subject.kind === 'call' ? [f.subject.name] : []);
|
|
137
|
+
const rows = [];
|
|
138
|
+
for (const [line, stored] of lines.entries()) {
|
|
139
|
+
const text = stripJexlPrefix(stored);
|
|
140
|
+
const id = rows.length;
|
|
141
|
+
const read = parseConditions(text, parser, calls)?.map((c, i) => conditionRow(c, choices, id + i, line));
|
|
142
|
+
rows.push(...(read?.every(row => row !== undefined)
|
|
143
|
+
? read
|
|
144
|
+
: [{ kind: 'text', id, line, text: text.trim() }]));
|
|
145
|
+
}
|
|
146
|
+
return { lines, rows };
|
|
147
|
+
}
|
|
148
|
+
function nextId(rows) {
|
|
149
|
+
return rows.reduce((max, row) => Math.max(max, row.id + 1), 0);
|
|
150
|
+
}
|
|
151
|
+
function emptyRow(id) {
|
|
152
|
+
return { kind: 'condition', id, op: '==', value: '' };
|
|
153
|
+
}
|
|
154
|
+
export function addRow(state) {
|
|
155
|
+
return { ...state, rows: [...state.rows, emptyRow(nextId(state.rows))] };
|
|
156
|
+
}
|
|
157
|
+
function detach(rows, id) {
|
|
158
|
+
const line = rows.find(row => row.id === id)?.line;
|
|
159
|
+
return line === undefined
|
|
160
|
+
? rows
|
|
161
|
+
: rows.map(row => (row.line === line ? { ...row, line: undefined } : row));
|
|
162
|
+
}
|
|
163
|
+
export function replaceRow(state, row) {
|
|
164
|
+
return {
|
|
165
|
+
...state,
|
|
166
|
+
rows: detach(state.rows, row.id).map(r => r.id === row.id ? { ...row, line: undefined } : r),
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
export function removeRow(state, id) {
|
|
170
|
+
return {
|
|
171
|
+
...state,
|
|
172
|
+
rows: detach(state.rows, id).filter(row => row.id !== id),
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
export function withField(row, field) {
|
|
176
|
+
const sameType = row.field?.type === field.type;
|
|
177
|
+
const ops = OPERATORS[field.type ?? 'any'];
|
|
178
|
+
return {
|
|
179
|
+
...row,
|
|
180
|
+
field,
|
|
181
|
+
op: sameType ? row.op : ops[0].op,
|
|
182
|
+
value: sameType ? row.value : '',
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
export function withOp(row, op) {
|
|
186
|
+
const { value } = row;
|
|
187
|
+
return {
|
|
188
|
+
...row,
|
|
189
|
+
op,
|
|
190
|
+
value: op === 'in'
|
|
191
|
+
? Array.isArray(value)
|
|
192
|
+
? value
|
|
193
|
+
: value
|
|
194
|
+
? [value]
|
|
195
|
+
: []
|
|
196
|
+
: Array.isArray(value)
|
|
197
|
+
? (value[0] ?? '')
|
|
198
|
+
: value,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
function writeCondition({ field, op, value }) {
|
|
202
|
+
if (!field) {
|
|
203
|
+
return undefined;
|
|
204
|
+
}
|
|
205
|
+
const { subject, type } = field;
|
|
206
|
+
const usable = (v) => v.trim() !== '' && (type !== 'number' || Number.isFinite(Number(v)));
|
|
207
|
+
if (op === 'set' || op === '!set') {
|
|
208
|
+
return printCondition({ subject, op });
|
|
209
|
+
}
|
|
210
|
+
if (op === 'in') {
|
|
211
|
+
const list = [value].flat().filter(usable);
|
|
212
|
+
return list.length > 0
|
|
213
|
+
? printCondition({
|
|
214
|
+
subject,
|
|
215
|
+
op,
|
|
216
|
+
value: list.map(v => scalar(type, v)),
|
|
217
|
+
})
|
|
218
|
+
: undefined;
|
|
219
|
+
}
|
|
220
|
+
const text = [value].flat()[0] ?? '';
|
|
221
|
+
return !usable(text)
|
|
222
|
+
? undefined
|
|
223
|
+
: op === '~'
|
|
224
|
+
? printCondition({ subject, op, value: text })
|
|
225
|
+
: printCondition({ subject, op, value: scalar(type, text) });
|
|
226
|
+
}
|
|
227
|
+
function writeRow(row) {
|
|
228
|
+
const text = row.kind === 'text' ? row.text.trim() || undefined : writeCondition(row);
|
|
229
|
+
return text === undefined ? undefined : ensureJexlPrefix(text);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* The stored filters: an untouched line as it was, and every row of an edited
|
|
233
|
+
* line as a line of its own, which is equivalent because lines AND together.
|
|
234
|
+
* Rows left incomplete are dropped.
|
|
235
|
+
*/
|
|
236
|
+
export function writeFilterRows({ lines, rows }) {
|
|
237
|
+
const out = [];
|
|
238
|
+
let previous;
|
|
239
|
+
for (const row of rows) {
|
|
240
|
+
if (row.line === undefined) {
|
|
241
|
+
const text = writeRow(row);
|
|
242
|
+
if (text !== undefined) {
|
|
243
|
+
out.push(text);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
else if (row.line !== previous) {
|
|
247
|
+
out.push(lines[row.line]);
|
|
248
|
+
}
|
|
249
|
+
previous = row.line;
|
|
250
|
+
}
|
|
251
|
+
return out;
|
|
252
|
+
}
|
|
@@ -1,75 +1,50 @@
|
|
|
1
1
|
import { getConf } from '../configuration/getConf.ts';
|
|
2
|
+
import type { RetiredDisplayState } from '../pluggableElementTypes/DisplayType.ts';
|
|
2
3
|
import type { Reversible } from '../ui/filterMenuItems.ts';
|
|
3
4
|
/**
|
|
4
|
-
* The
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* - the **`jexlFiltersSetting` display property**, which the dialog writes and
|
|
13
|
-
* which stores them already prefixed (the runtime convention). Set — *even to
|
|
14
|
-
* an empty list* — it replaces the config tier entirely, which is what makes
|
|
15
|
-
* "clear the filters an admin declared" expressible.
|
|
16
|
-
*
|
|
17
|
-
* Every display implemented one half of this and a different half each:
|
|
18
|
-
* `LinearBasicDisplay` had both tiers, `LDDisplay` had the slot alone, and the
|
|
19
|
-
* multi-sample variant displays had a property literally named `jexlFilters`
|
|
20
|
-
* that shadowed the inherited slot, so a config filter on one of those tracks
|
|
21
|
-
* was read by nothing and reported no error. Neither of the last two prefixed,
|
|
22
|
-
* so a filter following the slot's own documented convention reached
|
|
23
|
-
* `stringToJexlExpression` unprefixed and threw inside the worker.
|
|
5
|
+
* The feature-filter contract, shared by every display offering a "Filter
|
|
6
|
+
* by..." row: the **`filter` config slot** holds the filters applied, as
|
|
7
|
+
* `jexl:` expressions (`jexlFilterConfigSchemaFields` in display-kit, spread
|
|
8
|
+
* by the canvas base display schema, the mark display schema and the shared
|
|
9
|
+
* multi-sample variant schema). The dialog, a feature's "Filter" actions and
|
|
10
|
+
* "Edit plot..." all write that slot, and the session keeps the write as it
|
|
11
|
+
* keeps any track setting, so "Reset track settings" returns it with the
|
|
12
|
+
* rest.
|
|
24
13
|
*/
|
|
25
14
|
export interface JexlFilterSource {
|
|
26
|
-
/**
|
|
27
|
-
* The dialog's override, `jexl:`-prefixed. `undefined` means "follow the
|
|
28
|
-
* config slot"; an empty array means "the user cleared them".
|
|
29
|
-
*/
|
|
30
|
-
jexlFiltersSetting?: readonly string[];
|
|
31
|
-
/**
|
|
32
|
-
* The config tier, `jexl:`-prefixed — in practice
|
|
33
|
-
* `configuredJexlFilters(self)`. A member rather than a read this module does
|
|
34
|
-
* itself, so the two things that consume this contract off a **duck-typed**
|
|
35
|
-
* model — LD's structural menu builder and its shape test — need no live
|
|
36
|
-
* config node to answer a count with.
|
|
37
|
-
*/
|
|
15
|
+
/** The slot's filters, in practice `configuredJexlFilters(self)`. */
|
|
38
16
|
configuredFilters: () => string[];
|
|
39
17
|
}
|
|
40
18
|
/**
|
|
41
19
|
* The writing half, for the dialog and the menu's clear row. Separate from
|
|
42
|
-
* {@link JexlFilterSource} because a display declares
|
|
43
|
-
* earlier `.views()` block than the `.actions()` block declaring its setter
|
|
44
|
-
* requiring the setter to *read* the filters would put the two in an order MST
|
|
45
|
-
* cannot satisfy.
|
|
20
|
+
* {@link JexlFilterSource} because a display declares its readers in an
|
|
21
|
+
* earlier `.views()` block than the `.actions()` block declaring its setter.
|
|
46
22
|
*/
|
|
47
23
|
export interface JexlFilterModel extends JexlFilterSource {
|
|
48
|
-
|
|
24
|
+
/** What the track's config declares, which "Clear all filters" returns to. */
|
|
25
|
+
baseFilters: () => string[];
|
|
26
|
+
/** Write the slot; undefined returns it to {@link baseFilters}. */
|
|
27
|
+
setFilter: (filters?: string[]) => void;
|
|
49
28
|
}
|
|
50
|
-
/**
|
|
51
|
-
* What the `jexlFilters` config slot alone declares, `jexl:`-prefixed. The slot
|
|
52
|
-
* stores them unprefixed and every runtime consumer wants them prefixed, so the
|
|
53
|
-
* prefixing happens once, here — this is what a display's `configuredFilters`
|
|
54
|
-
* member is.
|
|
55
|
-
*/
|
|
29
|
+
/** What the `filter` config slot holds: a display's `configuredFilters`. */
|
|
56
30
|
export declare function configuredJexlFilters(self: Parameters<typeof getConf>[0]): string[];
|
|
57
31
|
/**
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
32
|
+
* What the track's config declares for this display's `filter`, before the
|
|
33
|
+
* session wrote any: a display's `baseFilters`. Empty in a session that keeps
|
|
34
|
+
* no base.
|
|
61
35
|
*/
|
|
62
|
-
export declare function
|
|
36
|
+
export declare function baseJexlFilters(self: object): string[];
|
|
63
37
|
/**
|
|
64
|
-
* The `Reversible` a display declares for its jexl filters.
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
* counts in both directions when they differ — narrowing further, and (emptied
|
|
70
|
-
* over a slot that declares filters) widening past what the config asked for.
|
|
71
|
-
*
|
|
72
|
-
* No per-item row: a list of jexl expressions has no recovery to name beyond
|
|
73
|
-
* restoring the config default, which the group clear already is.
|
|
38
|
+
* The `Reversible` a display declares for its jexl filters. The count is
|
|
39
|
+
* whether the filters differ from what the track's config declares, not the
|
|
40
|
+
* number of expressions: a filter an admin declared is not something the user
|
|
41
|
+
* narrowed. It counts in both directions, narrowing further and, emptied over
|
|
42
|
+
* a config that declares filters, widening past it.
|
|
74
43
|
*/
|
|
75
44
|
export declare function jexlFilterNarrowing(self: JexlFilterModel): Reversible;
|
|
45
|
+
/**
|
|
46
|
+
* A v4 session's display-instance `jexlFiltersSetting`, which is the `filter`
|
|
47
|
+
* slot now: the retired state the canvas and single-sample variant displays
|
|
48
|
+
* declare (ADR-168).
|
|
49
|
+
*/
|
|
50
|
+
export declare const retiredFilterState: RetiredDisplayState;
|
package/esm/util/jexlFilters.js
CHANGED
|
@@ -2,48 +2,50 @@
|
|
|
2
2
|
// which import this one, and a value import back into it is the cycle shape
|
|
3
3
|
// `openFeatureWidget` documents
|
|
4
4
|
import { getConf } from '../configuration/getConf.js';
|
|
5
|
+
import { baseDisplayConfig } from './baseDisplayConfig.js';
|
|
5
6
|
import { ensureJexlPrefix } from './jexlStrings.js';
|
|
6
|
-
/**
|
|
7
|
-
* What the `jexlFilters` config slot alone declares, `jexl:`-prefixed. The slot
|
|
8
|
-
* stores them unprefixed and every runtime consumer wants them prefixed, so the
|
|
9
|
-
* prefixing happens once, here — this is what a display's `configuredFilters`
|
|
10
|
-
* member is.
|
|
11
|
-
*/
|
|
7
|
+
/** What the `filter` config slot holds: a display's `configuredFilters`. */
|
|
12
8
|
export function configuredJexlFilters(self) {
|
|
13
|
-
return getConf(self, '
|
|
9
|
+
return getConf(self, 'filter');
|
|
14
10
|
}
|
|
15
11
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
12
|
+
* What the track's config declares for this display's `filter`, before the
|
|
13
|
+
* session wrote any: a display's `baseFilters`. Empty in a session that keeps
|
|
14
|
+
* no base.
|
|
19
15
|
*/
|
|
20
|
-
export function
|
|
21
|
-
const
|
|
22
|
-
return
|
|
16
|
+
export function baseJexlFilters(self) {
|
|
17
|
+
const declared = baseDisplayConfig(self).filter;
|
|
18
|
+
return Array.isArray(declared)
|
|
19
|
+
? declared.map(f => ensureJexlPrefix(String(f)))
|
|
20
|
+
: [];
|
|
23
21
|
}
|
|
24
22
|
/**
|
|
25
|
-
* The `Reversible` a display declares for its jexl filters.
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* counts in both directions when they differ — narrowing further, and (emptied
|
|
31
|
-
* over a slot that declares filters) widening past what the config asked for.
|
|
32
|
-
*
|
|
33
|
-
* No per-item row: a list of jexl expressions has no recovery to name beyond
|
|
34
|
-
* restoring the config default, which the group clear already is.
|
|
23
|
+
* The `Reversible` a display declares for its jexl filters. The count is
|
|
24
|
+
* whether the filters differ from what the track's config declares, not the
|
|
25
|
+
* number of expressions: a filter an admin declared is not something the user
|
|
26
|
+
* narrowed. It counts in both directions, narrowing further and, emptied over
|
|
27
|
+
* a config that declares filters, widening past it.
|
|
35
28
|
*/
|
|
36
29
|
export function jexlFilterNarrowing(self) {
|
|
37
|
-
const
|
|
38
|
-
const
|
|
30
|
+
const current = self.configuredFilters();
|
|
31
|
+
const base = self.baseFilters();
|
|
39
32
|
return {
|
|
40
|
-
count:
|
|
41
|
-
(override.length !== configured.length ||
|
|
42
|
-
override.some((f, i) => ensureJexlPrefix(f) !== configured[i]))
|
|
33
|
+
count: current.length !== base.length || current.some((f, i) => f !== base[i])
|
|
43
34
|
? 1
|
|
44
35
|
: 0,
|
|
45
36
|
clear: () => {
|
|
46
|
-
self.
|
|
37
|
+
self.setFilter(undefined);
|
|
47
38
|
},
|
|
48
39
|
};
|
|
49
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* A v4 session's display-instance `jexlFiltersSetting`, which is the `filter`
|
|
43
|
+
* slot now: the retired state the canvas and single-sample variant displays
|
|
44
|
+
* declare (ADR-168).
|
|
45
|
+
*/
|
|
46
|
+
export const retiredFilterState = {
|
|
47
|
+
keys: ['jexlFiltersSetting'],
|
|
48
|
+
lift: ({ jexlFiltersSetting }) => Array.isArray(jexlFiltersSetting)
|
|
49
|
+
? { filter: jexlFiltersSetting.map(f => ensureJexlPrefix(String(f))) }
|
|
50
|
+
: {},
|
|
51
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export interface JexlExpression {
|
|
2
2
|
eval(context?: Record<string, unknown>): unknown;
|
|
3
|
-
|
|
3
|
+
readonly source?: string;
|
|
4
4
|
}
|
|
5
5
|
export interface JexlInstance {
|
|
6
6
|
compile(code: string): JexlExpression;
|
|
@@ -11,9 +11,8 @@ export declare function isJexl(str: unknown): str is string;
|
|
|
11
11
|
/** Add the `jexl:` prefix unless the string already carries it. */
|
|
12
12
|
export declare function ensureJexlPrefix(code: string): string;
|
|
13
13
|
/**
|
|
14
|
-
* Compile a `jexl:...` string to an Expression.
|
|
15
|
-
*
|
|
16
|
-
* wrapper.
|
|
14
|
+
* Compile a `jexl:...` string to an Expression. The jexl instance caches
|
|
15
|
+
* compilation, so this only strips the prefix.
|
|
17
16
|
*
|
|
18
17
|
* @param str - string of code like `jexl:...`
|
|
19
18
|
* @param jexl - the instance whose registered functions the expression may call
|
package/esm/util/jexlStrings.js
CHANGED
|
@@ -8,9 +8,8 @@ export function ensureJexlPrefix(code) {
|
|
|
8
8
|
return isJexl(code) ? code : `${JEXL_PREFIX}${code}`;
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
|
-
* Compile a `jexl:...` string to an Expression.
|
|
12
|
-
*
|
|
13
|
-
* wrapper.
|
|
11
|
+
* Compile a `jexl:...` string to an Expression. The jexl instance caches
|
|
12
|
+
* compilation, so this only strips the prefix.
|
|
14
13
|
*
|
|
15
14
|
* @param str - string of code like `jexl:...`
|
|
16
15
|
* @param jexl - the instance whose registered functions the expression may call
|
|
@@ -17,9 +17,16 @@ export default class GranularRectLayout {
|
|
|
17
17
|
hardRowLimit?: number;
|
|
18
18
|
});
|
|
19
19
|
/**
|
|
20
|
+
* `lower` gives the rows lying wholly at or past `lower.top` px below the
|
|
21
|
+
* rect's top a span of their own.
|
|
22
|
+
*
|
|
20
23
|
* @returns top position for the rect, or Null if laying
|
|
21
24
|
* out the rect would exceed maxHeight
|
|
22
25
|
*/
|
|
23
|
-
addRect(id: string, left: number, right: number, height: number
|
|
26
|
+
addRect(id: string, left: number, right: number, height: number, lower?: {
|
|
27
|
+
top: number;
|
|
28
|
+
left: number;
|
|
29
|
+
right: number;
|
|
30
|
+
}): number | null;
|
|
24
31
|
private getOrCreateRow;
|
|
25
32
|
}
|