@jbrowse/core 5.0.0-beta.1 → 5.0.0-beta.10
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 +1476 -265
- 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 +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 +16 -9
- 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 +50 -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/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 +2 -2
- 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 +528 -0
- package/esm/ReExports/coreWorkerModules.generated.d.ts +2 -0
- package/esm/ReExports/coreWorkerModules.generated.js +488 -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 +527 -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 +24 -11
- package/esm/configuration/index.js +15 -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/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 +46 -16
- package/esm/pluggableElementTypes/DisplayType.js +22 -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/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 +1 -1
- package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +19 -9
- package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +65 -27
- package/esm/pluggableElementTypes/models/BaseDisplayModel.js +72 -10
- package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +65 -16
- package/esm/pluggableElementTypes/models/BaseTrackModel.js +179 -117
- package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +85 -16
- package/esm/pluggableElementTypes/models/BaseViewModel.js +53 -10
- 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 -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/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/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/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 +1 -1
- package/esm/util/cachedSetup.js +2 -2
- package/esm/util/categoricalField.d.ts +56 -0
- package/esm/util/categoricalField.js +73 -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/{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 +80 -0
- package/esm/util/featureTransforms.js +1579 -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/freezeDeep.d.ts +8 -10
- package/esm/util/freezeDeep.js +8 -10
- package/esm/util/groupKeys.d.ts +77 -0
- package/esm/util/groupKeys.js +155 -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/io/index.js +19 -14
- 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 +20 -27
- package/esm/util/jexlFilters.js +23 -11
- 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/localStorage.js +4 -4
- package/esm/util/markEncoding.d.ts +150 -0
- package/esm/util/markEncoding.js +845 -0
- package/esm/util/markEncodingTypes.d.ts +588 -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/starFusion.d.ts +26 -0
- package/esm/util/starFusion.js +37 -0
- package/esm/util/stepTables.d.ts +82 -0
- package/esm/util/stepTables.js +243 -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 +13 -8
- package/esm/util/tabix.js +17 -12
- 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 +121 -40
- package/esm/util/tracks.js +497 -112
- 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 +51 -0
- package/esm/util/unknownSnapshotKeys.js +82 -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/usePanelVirtualScroll.d.ts +7 -35
- package/esm/util/usePanelVirtualScroll.js +9 -36
- 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/withLaunchInput.d.ts +174 -0
- package/esm/util/withLaunchInput.js +274 -0
- package/package.json +70 -20
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.d.ts +0 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.js +0 -8
- package/esm/BaseFeatureWidget/BaseFeatureDetail/types.d.ts +0 -8
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.d.ts +0 -80
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.js +0 -583
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.d.ts +0 -141
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.js +0 -1116
- package/esm/ReExports/BaseFeatureDetails.d.ts +0 -1
- package/esm/ReExports/BaseFeatureDetails.js +0 -10
- package/esm/ReExports/index.d.ts +0 -1
- package/esm/ReExports/index.js +0 -1
- package/esm/ReExports/publicUtil.d.ts +0 -1
- package/esm/ReExports/publicUtil.js +0 -28
- package/esm/configuration/promotableDefaults.d.ts +0 -199
- package/esm/configuration/promotableDefaults.js +0 -326
- package/esm/configuration/promotablePin.d.ts +0 -55
- package/esm/configuration/promotablePin.js +0 -1
- package/esm/configuration/promotableResolve.d.ts +0 -108
- package/esm/configuration/promotableResolve.js +0 -117
- package/esm/configuration/promotableSlots.d.ts +0 -12
- package/esm/configuration/promotableSlots.js +0 -45
- package/esm/configuration/slotShape.d.ts +0 -12
- package/esm/configuration/slotShape.js +0 -84
- package/esm/pluggableElementTypes/models/HighlightsMixin.d.ts +0 -51
- package/esm/pluggableElementTypes/models/HighlightsMixin.js +0 -78
- package/esm/ui/PinAdornment.d.ts +0 -5
- package/esm/ui/PinAdornment.js +0 -79
- package/esm/ui/SvgGradientLegend.d.ts +0 -26
- package/esm/ui/SvgGradientLegend.js +0 -26
- package/esm/ui/highlightChipReveal.d.ts +0 -32
- package/esm/ui/highlightChipReveal.js +0 -39
- package/esm/ui/promotableMenuItems.d.ts +0 -19
- package/esm/ui/promotableMenuItems.js +0 -89
- package/esm/ui/promotablePinCoverage.d.ts +0 -44
- package/esm/ui/promotablePinCoverage.js +0 -87
- package/esm/util/applyInitSettings.d.ts +0 -79
- package/esm/util/applyInitSettings.js +0 -91
- package/esm/util/openDisplays.d.ts +0 -23
- package/esm/util/openDisplays.js +0 -79
- package/esm/util/stopToken.d.ts +0 -211
- package/esm/util/stopToken.js +0 -438
- /package/esm/{BaseFeatureWidget/BaseFeatureDetail/types.js → data_adapters/BaseAdapter/zoomRange.js} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { checkAbortSignal } from './aborting.js';
|
|
1
2
|
import { cmpStr } from './cmpStr.js';
|
|
2
3
|
import { createProgressReporter } from './progress.js';
|
|
3
|
-
import { checkStopToken } from './stopToken.js';
|
|
4
4
|
// A strand vote at least this lopsided (80% of aligned bases agreeing) decides
|
|
5
5
|
// the reversal by itself. Below that the vote is unreliable: a chromosome
|
|
6
6
|
// carrying many inversions splits it near 50/50, and MCScan `strand` is the
|
|
@@ -61,19 +61,14 @@ function anchorStats({ alignments, bases, strandWeightedSum }) {
|
|
|
61
61
|
//
|
|
62
62
|
// - refRefName: horizontal-axis (reference) chromosome
|
|
63
63
|
// - queryRefName: vertical-axis (query) chromosome
|
|
64
|
-
export async function diagonalizeRegions(alignments, referenceRegions, currentRegions, {
|
|
65
|
-
//
|
|
66
|
-
//
|
|
67
|
-
// chromosome's group. They used to share a single cancel check between them,
|
|
68
|
-
// so the whole grouping pass ran after a cancel and the bar sat on the
|
|
69
|
-
// fetch's last message throughout. Two reporters because the phases count
|
|
70
|
-
// different things (alignments, then chromosomes), so one auto-incrementing
|
|
71
|
-
// counter across both would report a meaningless fraction.
|
|
64
|
+
export async function diagonalizeRegions(alignments, referenceRegions, currentRegions, { signal, statusCallback, } = {}) {
|
|
65
|
+
// Two reporters because the phases count different things (alignments, then
|
|
66
|
+
// chromosomes). No breakpoint: each pass measured ~50ms over 500k alignments.
|
|
72
67
|
const reportGrouping = createProgressReporter({
|
|
73
|
-
label: '
|
|
68
|
+
label: 'Ordering chromosomes',
|
|
74
69
|
total: alignments.length,
|
|
75
70
|
statusCallback,
|
|
76
|
-
|
|
71
|
+
signal,
|
|
77
72
|
});
|
|
78
73
|
// first appearance wins: a refName can appear in more than one reference
|
|
79
74
|
// region, and the ordering key is where that chromosome starts on the axis
|
|
@@ -118,7 +113,7 @@ export async function diagonalizeRegions(alignments, referenceRegions, currentRe
|
|
|
118
113
|
label: 'Ordering chromosomes',
|
|
119
114
|
total: queryGroups.size,
|
|
120
115
|
statusCallback,
|
|
121
|
-
|
|
116
|
+
signal,
|
|
122
117
|
});
|
|
123
118
|
for (const [verticalChrom, group] of queryGroups) {
|
|
124
119
|
reportOrdering();
|
|
@@ -142,7 +137,7 @@ export async function diagonalizeRegions(alignments, referenceRegions, currentRe
|
|
|
142
137
|
});
|
|
143
138
|
}
|
|
144
139
|
}
|
|
145
|
-
|
|
140
|
+
checkAbortSignal(signal);
|
|
146
141
|
queryOrdering.sort((a, b) => a.bestRefIndex - b.bestRefIndex ||
|
|
147
142
|
a.bestRefPos - b.bestRefPos ||
|
|
148
143
|
cmpStr(a.refName, b.refName));
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A search index as a config may write it: the whole adapter config, or just
|
|
3
|
+
* the `.ix` that `jbrowse text-index` wrote, as a string or as `{ uri }`.
|
|
4
|
+
*/
|
|
5
|
+
export type LooseSearchIndex = string | {
|
|
6
|
+
uri: string;
|
|
7
|
+
baseUri?: string;
|
|
8
|
+
assemblyNames?: string[];
|
|
9
|
+
} | {
|
|
10
|
+
type: string;
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Fill in what a search index written short leaves out: a string is its `uri`,
|
|
15
|
+
* `type` comes from a `uri` naming a `.ix`, and `assemblyNames` from the caller
|
|
16
|
+
* — the track's own for a per-track index, or a config's only assembly. A key
|
|
17
|
+
* already written is kept.
|
|
18
|
+
*/
|
|
19
|
+
export declare function expandLooseSearchIndex(snap: unknown, assemblyNames?: unknown): unknown;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
function isTrixUri(uri) {
|
|
2
|
+
return /\.ix$/i.test(uri.split(/[?#]/)[0]);
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Fill in what a search index written short leaves out: a string is its `uri`,
|
|
6
|
+
* `type` comes from a `uri` naming a `.ix`, and `assemblyNames` from the caller
|
|
7
|
+
* — the track's own for a per-track index, or a config's only assembly. A key
|
|
8
|
+
* already written is kept.
|
|
9
|
+
*/
|
|
10
|
+
export function expandLooseSearchIndex(snap, assemblyNames) {
|
|
11
|
+
const index = typeof snap === 'string' ? { uri: snap } : snap;
|
|
12
|
+
if (typeof index !== 'object' || index === null || Array.isArray(index)) {
|
|
13
|
+
return snap;
|
|
14
|
+
}
|
|
15
|
+
const entry = index;
|
|
16
|
+
const guessType = entry.type === undefined &&
|
|
17
|
+
typeof entry.uri === 'string' &&
|
|
18
|
+
isTrixUri(entry.uri);
|
|
19
|
+
const fillNames = entry.assemblyNames === undefined &&
|
|
20
|
+
Array.isArray(assemblyNames) &&
|
|
21
|
+
assemblyNames.length > 0;
|
|
22
|
+
return guessType || fillNames || index !== snap
|
|
23
|
+
? {
|
|
24
|
+
...entry,
|
|
25
|
+
...(guessType ? { type: 'TrixTextSearchAdapter' } : {}),
|
|
26
|
+
...(fillNames ? { assemblyNames } : {}),
|
|
27
|
+
}
|
|
28
|
+
: snap;
|
|
29
|
+
}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import type { Feature, SimpleFeatureSerialized } from './simpleFeature.ts';
|
|
2
|
+
/**
|
|
3
|
+
* #api
|
|
4
|
+
* A typed lane a step wrote, one number per row.
|
|
5
|
+
*/
|
|
6
|
+
export type NumberLane = Float64Array | Float32Array | Uint32Array | Int32Array | Uint16Array | Int16Array | Uint8Array | Int8Array;
|
|
7
|
+
/**
|
|
8
|
+
* #api
|
|
9
|
+
* Codes into a list of labels, one per row.
|
|
10
|
+
*/
|
|
11
|
+
export type CodeLane = Uint8Array | Uint16Array | Uint32Array;
|
|
12
|
+
/**
|
|
13
|
+
* #api
|
|
14
|
+
* Text held as bytes, one per character: row `i`'s is `length[i]` bytes of
|
|
15
|
+
* `bytes` from `offset[i]`, so many rows share one buffer, as an adapter's
|
|
16
|
+
* arena holds them.
|
|
17
|
+
*/
|
|
18
|
+
export interface TextColumn {
|
|
19
|
+
kind: 'text';
|
|
20
|
+
bytes: Uint8Array;
|
|
21
|
+
offset: Uint32Array;
|
|
22
|
+
length: Uint32Array;
|
|
23
|
+
at: Uint32Array | undefined;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* #api
|
|
27
|
+
* A list of rows per row: row `i`'s entries are the rows of `entries` from
|
|
28
|
+
* `start[i]` up to `start[i + 1]`, and `keys`, where the list is a record
|
|
29
|
+
* keyed by name, the name of each entry.
|
|
30
|
+
*/
|
|
31
|
+
export interface ListColumn {
|
|
32
|
+
kind: 'list';
|
|
33
|
+
start: Uint32Array;
|
|
34
|
+
entries: ColumnTable;
|
|
35
|
+
keys: Column | undefined;
|
|
36
|
+
at: Uint32Array | undefined;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* #api
|
|
40
|
+
* A field's values over a table's rows, resolved once per step so the loop
|
|
41
|
+
* reading it is chosen before the loop runs: a lane a step wrote, codes into
|
|
42
|
+
* labels, a field read off the parser's own features, text or lists an
|
|
43
|
+
* adapter holds typed, or a value a step computes per row. `at` is the row
|
|
44
|
+
* each of the table's rows reads, where the lane or the features belong to a
|
|
45
|
+
* table this one stands on.
|
|
46
|
+
*/
|
|
47
|
+
export type Column = {
|
|
48
|
+
kind: 'number';
|
|
49
|
+
values: NumberLane;
|
|
50
|
+
at: Uint32Array | undefined;
|
|
51
|
+
/** A `NaN` in the lane is a row holding no value, which `get` answers as `undefined`. */
|
|
52
|
+
nanIsAbsent?: boolean;
|
|
53
|
+
} | {
|
|
54
|
+
kind: 'category';
|
|
55
|
+
codes: CodeLane;
|
|
56
|
+
labels: readonly string[];
|
|
57
|
+
at: Uint32Array | undefined;
|
|
58
|
+
} | {
|
|
59
|
+
kind: 'feature';
|
|
60
|
+
features: readonly Feature[];
|
|
61
|
+
field: string;
|
|
62
|
+
at: Uint32Array | undefined;
|
|
63
|
+
} | TextColumn | ListColumn | {
|
|
64
|
+
kind: 'value';
|
|
65
|
+
read: (row: number) => unknown;
|
|
66
|
+
} | {
|
|
67
|
+
kind: 'none';
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* #api
|
|
71
|
+
* The rows one step of a mark's declaration hands the next: a column per
|
|
72
|
+
* field and a view of one row as a `Feature`, for a `jexl:` expression, a
|
|
73
|
+
* channel reader and the hover.
|
|
74
|
+
*/
|
|
75
|
+
export interface FeatureTable {
|
|
76
|
+
readonly length: number;
|
|
77
|
+
column(field: string): Column;
|
|
78
|
+
row(i: number): Feature;
|
|
79
|
+
}
|
|
80
|
+
export declare const NO_COLUMN: Column;
|
|
81
|
+
/**
|
|
82
|
+
* #api
|
|
83
|
+
* A column's value at a row, whatever its kind: for a loop that reads few rows.
|
|
84
|
+
*/
|
|
85
|
+
export declare function valueAt(column: Column, i: number): unknown;
|
|
86
|
+
/**
|
|
87
|
+
* #api
|
|
88
|
+
* A reader of a column's values by row, its kind resolved here once. A
|
|
89
|
+
* `number` lane with no index reads straight off the lane.
|
|
90
|
+
*/
|
|
91
|
+
export declare function readerOf(column: Column): (i: number) => unknown;
|
|
92
|
+
/**
|
|
93
|
+
* #api
|
|
94
|
+
* {@link readerOf} as the number a quantitative channel or step reads,
|
|
95
|
+
* `NaN` where a row holds none, by `numericValue`'s rules.
|
|
96
|
+
*/
|
|
97
|
+
export declare function numberReaderOf(column: Column): (i: number) => number;
|
|
98
|
+
/**
|
|
99
|
+
* A column of the table `at` indexes into, read from this one's rows: the
|
|
100
|
+
* index composed into a lane's, or into a reader for a `value` column.
|
|
101
|
+
*/
|
|
102
|
+
export declare function throughIndex(column: Column, at: Uint32Array): Column;
|
|
103
|
+
/** A table over the features an adapter answered, a field read off each. */
|
|
104
|
+
export declare class SourceTable implements FeatureTable {
|
|
105
|
+
readonly length: number;
|
|
106
|
+
readonly features: readonly Feature[];
|
|
107
|
+
constructor(features: readonly Feature[]);
|
|
108
|
+
column(field: string): Column;
|
|
109
|
+
row(i: number): Feature;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* #api
|
|
113
|
+
* A table an adapter answers from the typed arrays it already holds, where
|
|
114
|
+
* `getFeaturesArray` would make an object per row: a column per field, and
|
|
115
|
+
* each row's id. A row's hover JSON is every field it holds.
|
|
116
|
+
*/
|
|
117
|
+
export declare class ColumnTable implements MadeRows {
|
|
118
|
+
readonly length: number;
|
|
119
|
+
private readonly columns;
|
|
120
|
+
private readonly ids;
|
|
121
|
+
constructor(length: number, columns: ReadonlyMap<string, Column>, id: (i: number) => string);
|
|
122
|
+
column(field: string): Column;
|
|
123
|
+
/** The fields the row holds, as a plain record. */
|
|
124
|
+
record(i: number): Record<string, unknown>;
|
|
125
|
+
id(i: number): string;
|
|
126
|
+
json(i: number): SimpleFeatureSerialized;
|
|
127
|
+
parentOfRow(): undefined;
|
|
128
|
+
row(i: number): Feature;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* #api
|
|
132
|
+
* A table over a feature list, or the table itself.
|
|
133
|
+
*/
|
|
134
|
+
export declare function asTable(input: readonly Feature[] | FeatureTable): FeatureTable;
|
|
135
|
+
/**
|
|
136
|
+
* A table whose rows stand on another's: each row names the parent row it came
|
|
137
|
+
* from, and a field it does not carry reads through to the parent's. A
|
|
138
|
+
* subclass answers its own fields in `own`, `undefined` for one it does not
|
|
139
|
+
* carry, and its own id and JSON.
|
|
140
|
+
*/
|
|
141
|
+
export declare abstract class DerivedTable implements MadeRows {
|
|
142
|
+
readonly length: number;
|
|
143
|
+
readonly parent: FeatureTable;
|
|
144
|
+
readonly parentRow: Uint32Array | undefined;
|
|
145
|
+
private readonly resolved;
|
|
146
|
+
constructor(parent: FeatureTable, parentRow: Uint32Array | undefined, length?: number);
|
|
147
|
+
protected abstract own(field: string): Column | undefined;
|
|
148
|
+
/**
|
|
149
|
+
* Whether a row was made from its parent row, as a flattened entry or a run
|
|
150
|
+
* is, so the parent row is its `parent()`; otherwise the row is its parent
|
|
151
|
+
* row with fields beside it, and its `parent()` is that row's.
|
|
152
|
+
*/
|
|
153
|
+
get madeFrom(): boolean;
|
|
154
|
+
column(field: string): Column;
|
|
155
|
+
protected inherited(field: string): Column;
|
|
156
|
+
parentOf(i: number): number;
|
|
157
|
+
id(i: number): string;
|
|
158
|
+
/** The row's fields over its parent's, as the hover shows them. */
|
|
159
|
+
json(i: number): SimpleFeatureSerialized;
|
|
160
|
+
parentOfRow(i: number): Feature | undefined;
|
|
161
|
+
row(i: number): Feature;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* #api
|
|
165
|
+
* A table whose rows a step made, which answers each row's identity, its
|
|
166
|
+
* hover JSON and the feature it hangs from.
|
|
167
|
+
*/
|
|
168
|
+
export interface MadeRows extends FeatureTable {
|
|
169
|
+
id(i: number): string;
|
|
170
|
+
json(i: number): SimpleFeatureSerialized;
|
|
171
|
+
parentOfRow(i: number): Feature | undefined;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* One row of a table a step made, as a `Feature`: what a `jexl:` expression, a
|
|
175
|
+
* channel reader and the hover read.
|
|
176
|
+
*/
|
|
177
|
+
export declare class TableRow implements Feature {
|
|
178
|
+
private readonly table;
|
|
179
|
+
private readonly i;
|
|
180
|
+
constructor(table: MadeRows, i: number);
|
|
181
|
+
get(name: 'refName'): string;
|
|
182
|
+
get(name: 'name' | 'type' | 'id' | 'source'): string | undefined;
|
|
183
|
+
get(name: 'start' | 'end'): number;
|
|
184
|
+
get(name: 'phase'): 0 | 1 | 2 | undefined;
|
|
185
|
+
get(name: 'strand'): -1 | 0 | 1 | undefined;
|
|
186
|
+
get(name: 'score'): number | undefined;
|
|
187
|
+
get(name: 'subfeatures'): Feature[] | undefined;
|
|
188
|
+
get(name: string): unknown;
|
|
189
|
+
id(): string;
|
|
190
|
+
parent(): Feature | undefined;
|
|
191
|
+
toJSON(): SimpleFeatureSerialized;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* The parent's own rows, kept or reordered: what a `filter` and the facet's
|
|
195
|
+
* section order answer. Every field and the row's identity read through.
|
|
196
|
+
*/
|
|
197
|
+
export declare class SelectTable extends DerivedTable {
|
|
198
|
+
protected own(): undefined;
|
|
199
|
+
row(i: number): Feature;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* The parent's rows, each with fields a step wrote beside the ones it
|
|
203
|
+
* carries: a `formula`'s value, a `bin`'s edges. A written field shadows the
|
|
204
|
+
* parent's of the same name.
|
|
205
|
+
*/
|
|
206
|
+
export declare class WithTable extends DerivedTable {
|
|
207
|
+
private readonly written;
|
|
208
|
+
constructor(parent: FeatureTable, written: ReadonlyMap<string, Column>, parentRow?: Uint32Array);
|
|
209
|
+
protected own(field: string): Column | undefined;
|
|
210
|
+
json(i: number): SimpleFeatureSerialized;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* #api
|
|
214
|
+
* The table's rows `rows` names, in that order: over an adapter's features, a
|
|
215
|
+
* source table over those features again, so every field still reads straight
|
|
216
|
+
* off them; over rows a step made, a table standing on them.
|
|
217
|
+
*/
|
|
218
|
+
export declare function selectRows(table: FeatureTable, rows: Uint32Array): FeatureTable;
|
|
219
|
+
/**
|
|
220
|
+
* #api
|
|
221
|
+
* The table's rows with `written` beside them, in the order `rows` names
|
|
222
|
+
* where it names one.
|
|
223
|
+
*/
|
|
224
|
+
export declare function withColumns(table: FeatureTable, written: ReadonlyMap<string, Column>, rows?: Uint32Array): FeatureTable;
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
import { numericValue } from './numericValue.js';
|
|
2
|
+
export const NO_COLUMN = { kind: 'none' };
|
|
3
|
+
/**
|
|
4
|
+
* #api
|
|
5
|
+
* A column's value at a row, whatever its kind: for a loop that reads few rows.
|
|
6
|
+
*/
|
|
7
|
+
export function valueAt(column, i) {
|
|
8
|
+
switch (column.kind) {
|
|
9
|
+
case 'number': {
|
|
10
|
+
const v = column.values[column.at ? column.at[i] : i];
|
|
11
|
+
return column.nanIsAbsent && Number.isNaN(v) ? undefined : v;
|
|
12
|
+
}
|
|
13
|
+
case 'category': {
|
|
14
|
+
return column.labels[column.codes[column.at ? column.at[i] : i]];
|
|
15
|
+
}
|
|
16
|
+
case 'feature': {
|
|
17
|
+
return column.features[column.at ? column.at[i] : i].get(column.field);
|
|
18
|
+
}
|
|
19
|
+
case 'text': {
|
|
20
|
+
return textOfRow(column, column.at ? column.at[i] : i);
|
|
21
|
+
}
|
|
22
|
+
case 'list': {
|
|
23
|
+
return listOfRow(column, column.at ? column.at[i] : i);
|
|
24
|
+
}
|
|
25
|
+
case 'value': {
|
|
26
|
+
return column.read(i);
|
|
27
|
+
}
|
|
28
|
+
case 'none': {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const decoder = new TextDecoder();
|
|
34
|
+
function textOfRow({ bytes, offset, length }, r) {
|
|
35
|
+
const from = offset[r];
|
|
36
|
+
return decoder.decode(bytes.subarray(from, from + length[r]));
|
|
37
|
+
}
|
|
38
|
+
// A keyed list is the record its entries are filed in by name, each entry a
|
|
39
|
+
// plain record; any other is its entries as features.
|
|
40
|
+
function listOfRow({ start, entries, keys }, r) {
|
|
41
|
+
const from = start[r];
|
|
42
|
+
const to = start[r + 1];
|
|
43
|
+
if (keys) {
|
|
44
|
+
const out = {};
|
|
45
|
+
for (let j = from; j < to; j++) {
|
|
46
|
+
out[String(valueAt(keys, j))] = entries.record(j);
|
|
47
|
+
}
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
const out = [];
|
|
51
|
+
for (let j = from; j < to; j++) {
|
|
52
|
+
out.push(entries.row(j));
|
|
53
|
+
}
|
|
54
|
+
return out;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* #api
|
|
58
|
+
* A reader of a column's values by row, its kind resolved here once. A
|
|
59
|
+
* `number` lane with no index reads straight off the lane.
|
|
60
|
+
*/
|
|
61
|
+
export function readerOf(column) {
|
|
62
|
+
switch (column.kind) {
|
|
63
|
+
case 'number': {
|
|
64
|
+
const { values, at } = column;
|
|
65
|
+
if (column.nanIsAbsent) {
|
|
66
|
+
return i => {
|
|
67
|
+
const v = values[at ? at[i] : i];
|
|
68
|
+
return Number.isNaN(v) ? undefined : v;
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
return at ? i => values[at[i]] : i => values[i];
|
|
72
|
+
}
|
|
73
|
+
case 'category': {
|
|
74
|
+
const { codes, labels, at } = column;
|
|
75
|
+
return at ? i => labels[codes[at[i]]] : i => labels[codes[i]];
|
|
76
|
+
}
|
|
77
|
+
case 'feature': {
|
|
78
|
+
const { features, field, at } = column;
|
|
79
|
+
return at
|
|
80
|
+
? i => features[at[i]].get(field)
|
|
81
|
+
: i => features[i].get(field);
|
|
82
|
+
}
|
|
83
|
+
case 'text': {
|
|
84
|
+
const { at } = column;
|
|
85
|
+
return at ? i => textOfRow(column, at[i]) : i => textOfRow(column, i);
|
|
86
|
+
}
|
|
87
|
+
case 'list': {
|
|
88
|
+
const { at } = column;
|
|
89
|
+
return at ? i => listOfRow(column, at[i]) : i => listOfRow(column, i);
|
|
90
|
+
}
|
|
91
|
+
case 'value': {
|
|
92
|
+
return column.read;
|
|
93
|
+
}
|
|
94
|
+
case 'none': {
|
|
95
|
+
return () => undefined;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* #api
|
|
101
|
+
* {@link readerOf} as the number a quantitative channel or step reads,
|
|
102
|
+
* `NaN` where a row holds none, by `numericValue`'s rules.
|
|
103
|
+
*/
|
|
104
|
+
export function numberReaderOf(column) {
|
|
105
|
+
switch (column.kind) {
|
|
106
|
+
case 'number': {
|
|
107
|
+
const { values, at } = column;
|
|
108
|
+
return at ? i => values[at[i]] : i => values[i];
|
|
109
|
+
}
|
|
110
|
+
case 'none': {
|
|
111
|
+
return () => Number.NaN;
|
|
112
|
+
}
|
|
113
|
+
case 'feature': {
|
|
114
|
+
const { features, field, at } = column;
|
|
115
|
+
return at
|
|
116
|
+
? i => numericValue(features[at[i]].get(field))
|
|
117
|
+
: i => numericValue(features[i].get(field));
|
|
118
|
+
}
|
|
119
|
+
case 'category':
|
|
120
|
+
case 'text':
|
|
121
|
+
case 'list':
|
|
122
|
+
case 'value': {
|
|
123
|
+
const read = readerOf(column);
|
|
124
|
+
return i => numericValue(read(i));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* A column of the table `at` indexes into, read from this one's rows: the
|
|
130
|
+
* index composed into a lane's, or into a reader for a `value` column.
|
|
131
|
+
*/
|
|
132
|
+
export function throughIndex(column, at) {
|
|
133
|
+
switch (column.kind) {
|
|
134
|
+
case 'number':
|
|
135
|
+
case 'category':
|
|
136
|
+
case 'feature':
|
|
137
|
+
case 'text':
|
|
138
|
+
case 'list': {
|
|
139
|
+
const inner = column.at;
|
|
140
|
+
if (!inner) {
|
|
141
|
+
return { ...column, at };
|
|
142
|
+
}
|
|
143
|
+
const composed = new Uint32Array(at.length);
|
|
144
|
+
for (let i = 0; i < at.length; i++) {
|
|
145
|
+
composed[i] = inner[at[i]];
|
|
146
|
+
}
|
|
147
|
+
return { ...column, at: composed };
|
|
148
|
+
}
|
|
149
|
+
case 'value': {
|
|
150
|
+
const { read } = column;
|
|
151
|
+
return { kind: 'value', read: i => read(at[i]) };
|
|
152
|
+
}
|
|
153
|
+
case 'none': {
|
|
154
|
+
return column;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/** A table over the features an adapter answered, a field read off each. */
|
|
159
|
+
export class SourceTable {
|
|
160
|
+
length;
|
|
161
|
+
features;
|
|
162
|
+
constructor(features) {
|
|
163
|
+
this.features = features;
|
|
164
|
+
this.length = features.length;
|
|
165
|
+
}
|
|
166
|
+
column(field) {
|
|
167
|
+
return { kind: 'feature', features: this.features, field, at: undefined };
|
|
168
|
+
}
|
|
169
|
+
row(i) {
|
|
170
|
+
return this.features[i];
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* #api
|
|
175
|
+
* A table an adapter answers from the typed arrays it already holds, where
|
|
176
|
+
* `getFeaturesArray` would make an object per row: a column per field, and
|
|
177
|
+
* each row's id. A row's hover JSON is every field it holds.
|
|
178
|
+
*/
|
|
179
|
+
export class ColumnTable {
|
|
180
|
+
length;
|
|
181
|
+
columns;
|
|
182
|
+
ids;
|
|
183
|
+
constructor(length, columns, id) {
|
|
184
|
+
this.length = length;
|
|
185
|
+
this.columns = columns;
|
|
186
|
+
this.ids = id;
|
|
187
|
+
}
|
|
188
|
+
column(field) {
|
|
189
|
+
return this.columns.get(field) ?? NO_COLUMN;
|
|
190
|
+
}
|
|
191
|
+
/** The fields the row holds, as a plain record. */
|
|
192
|
+
record(i) {
|
|
193
|
+
const out = {};
|
|
194
|
+
for (const [field, column] of this.columns) {
|
|
195
|
+
const v = valueAt(column, i);
|
|
196
|
+
if (v !== undefined) {
|
|
197
|
+
out[field] = v;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return out;
|
|
201
|
+
}
|
|
202
|
+
id(i) {
|
|
203
|
+
return this.ids(i);
|
|
204
|
+
}
|
|
205
|
+
json(i) {
|
|
206
|
+
return {
|
|
207
|
+
...this.record(i),
|
|
208
|
+
uniqueId: this.id(i),
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
parentOfRow() {
|
|
212
|
+
return undefined;
|
|
213
|
+
}
|
|
214
|
+
row(i) {
|
|
215
|
+
return new TableRow(this, i);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* #api
|
|
220
|
+
* A table over a feature list, or the table itself.
|
|
221
|
+
*/
|
|
222
|
+
export function asTable(input) {
|
|
223
|
+
return isTable(input) ? input : new SourceTable(input);
|
|
224
|
+
}
|
|
225
|
+
function isTable(input) {
|
|
226
|
+
return !Array.isArray(input);
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* A table whose rows stand on another's: each row names the parent row it came
|
|
230
|
+
* from, and a field it does not carry reads through to the parent's. A
|
|
231
|
+
* subclass answers its own fields in `own`, `undefined` for one it does not
|
|
232
|
+
* carry, and its own id and JSON.
|
|
233
|
+
*/
|
|
234
|
+
export class DerivedTable {
|
|
235
|
+
length;
|
|
236
|
+
parent;
|
|
237
|
+
parentRow;
|
|
238
|
+
resolved = new Map();
|
|
239
|
+
constructor(parent, parentRow, length = parentRow ? parentRow.length : parent.length) {
|
|
240
|
+
this.parent = parent;
|
|
241
|
+
this.parentRow = parentRow;
|
|
242
|
+
this.length = length;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Whether a row was made from its parent row, as a flattened entry or a run
|
|
246
|
+
* is, so the parent row is its `parent()`; otherwise the row is its parent
|
|
247
|
+
* row with fields beside it, and its `parent()` is that row's.
|
|
248
|
+
*/
|
|
249
|
+
get madeFrom() {
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
column(field) {
|
|
253
|
+
let column = this.resolved.get(field);
|
|
254
|
+
if (column === undefined) {
|
|
255
|
+
column = this.own(field) ?? this.inherited(field);
|
|
256
|
+
this.resolved.set(field, column);
|
|
257
|
+
}
|
|
258
|
+
return column;
|
|
259
|
+
}
|
|
260
|
+
inherited(field) {
|
|
261
|
+
const column = this.parent.column(field);
|
|
262
|
+
return this.parentRow ? throughIndex(column, this.parentRow) : column;
|
|
263
|
+
}
|
|
264
|
+
parentOf(i) {
|
|
265
|
+
return this.parentRow ? this.parentRow[i] : i;
|
|
266
|
+
}
|
|
267
|
+
id(i) {
|
|
268
|
+
return this.parent.row(this.parentOf(i)).id();
|
|
269
|
+
}
|
|
270
|
+
/** The row's fields over its parent's, as the hover shows them. */
|
|
271
|
+
json(i) {
|
|
272
|
+
return this.parent.row(this.parentOf(i)).toJSON();
|
|
273
|
+
}
|
|
274
|
+
parentOfRow(i) {
|
|
275
|
+
const up = this.parent.row(this.parentOf(i));
|
|
276
|
+
return this.madeFrom ? up : up.parent?.();
|
|
277
|
+
}
|
|
278
|
+
row(i) {
|
|
279
|
+
return new TableRow(this, i);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* One row of a table a step made, as a `Feature`: what a `jexl:` expression, a
|
|
284
|
+
* channel reader and the hover read.
|
|
285
|
+
*/
|
|
286
|
+
export class TableRow {
|
|
287
|
+
table;
|
|
288
|
+
i;
|
|
289
|
+
constructor(table, i) {
|
|
290
|
+
this.table = table;
|
|
291
|
+
this.i = i;
|
|
292
|
+
}
|
|
293
|
+
get(name) {
|
|
294
|
+
return valueAt(this.table.column(name), this.i);
|
|
295
|
+
}
|
|
296
|
+
id() {
|
|
297
|
+
return this.table.id(this.i);
|
|
298
|
+
}
|
|
299
|
+
parent() {
|
|
300
|
+
return this.table.parentOfRow(this.i);
|
|
301
|
+
}
|
|
302
|
+
toJSON() {
|
|
303
|
+
return this.table.json(this.i);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* The parent's own rows, kept or reordered: what a `filter` and the facet's
|
|
308
|
+
* section order answer. Every field and the row's identity read through.
|
|
309
|
+
*/
|
|
310
|
+
export class SelectTable extends DerivedTable {
|
|
311
|
+
own() {
|
|
312
|
+
return undefined;
|
|
313
|
+
}
|
|
314
|
+
row(i) {
|
|
315
|
+
return this.parent.row(this.parentOf(i));
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* The parent's rows, each with fields a step wrote beside the ones it
|
|
320
|
+
* carries: a `formula`'s value, a `bin`'s edges. A written field shadows the
|
|
321
|
+
* parent's of the same name.
|
|
322
|
+
*/
|
|
323
|
+
export class WithTable extends DerivedTable {
|
|
324
|
+
written;
|
|
325
|
+
constructor(parent, written, parentRow) {
|
|
326
|
+
super(parent, parentRow);
|
|
327
|
+
this.written = written;
|
|
328
|
+
}
|
|
329
|
+
own(field) {
|
|
330
|
+
return this.written.get(field);
|
|
331
|
+
}
|
|
332
|
+
json(i) {
|
|
333
|
+
const out = { ...super.json(i) };
|
|
334
|
+
for (const [field, column] of this.written) {
|
|
335
|
+
out[field] = valueAt(column, i);
|
|
336
|
+
}
|
|
337
|
+
return out;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* #api
|
|
342
|
+
* The table's rows `rows` names, in that order: over an adapter's features, a
|
|
343
|
+
* source table over those features again, so every field still reads straight
|
|
344
|
+
* off them; over rows a step made, a table standing on them.
|
|
345
|
+
*/
|
|
346
|
+
export function selectRows(table, rows) {
|
|
347
|
+
if (table instanceof SourceTable) {
|
|
348
|
+
const { features } = table;
|
|
349
|
+
const listed = new Array(rows.length);
|
|
350
|
+
for (let k = 0; k < rows.length; k++) {
|
|
351
|
+
listed[k] = features[rows[k]];
|
|
352
|
+
}
|
|
353
|
+
return new SourceTable(listed);
|
|
354
|
+
}
|
|
355
|
+
return new SelectTable(table, rows);
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* #api
|
|
359
|
+
* The table's rows with `written` beside them, in the order `rows` names
|
|
360
|
+
* where it names one.
|
|
361
|
+
*/
|
|
362
|
+
export function withColumns(table, written, rows) {
|
|
363
|
+
return rows && table instanceof SourceTable
|
|
364
|
+
? new WithTable(selectRows(table, rows), written)
|
|
365
|
+
: new WithTable(table, written, rows);
|
|
366
|
+
}
|