@jbrowse/core 4.3.0 → 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 +1994 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +14 -3
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +36 -23
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +10 -7
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +124 -21
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseAttributes.d.ts +2 -8
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseAttributes.js +4 -4
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCard.d.ts +1 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCard.js +2 -5
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCoreDetails.d.ts +1 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCoreDetails.js +4 -4
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.d.ts +12 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.js +19 -5
- package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.d.ts +1 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.js +18 -23
- package/esm/BaseFeatureWidget/BaseFeatureDetail/DataGridDetails.d.ts +1 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/DataGridDetails.js +19 -40
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.d.ts +9 -6
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.js +33 -30
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.d.ts +11 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.js +11 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureWash.d.ts +20 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureWash.js +66 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.d.ts +8 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.js +24 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldName.d.ts +1 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldName.js +2 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Formatter.d.ts +3 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Formatter.js +19 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.d.ts +4 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.js +17 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.d.ts +5 -3
- package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +8 -6
- package/esm/BaseFeatureWidget/BaseFeatureDetail/UriField.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/UriField.js +7 -14
- package/esm/BaseFeatureWidget/BaseFeatureDetail/index.d.ts +7 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/index.js +15 -20
- 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 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/util.js +9 -10
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceBody.d.ts +18 -0
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceBody.js +10 -0
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceContents.d.ts +7 -4
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceContents.js +35 -24
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.d.ts +10 -5
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.js +64 -41
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeaturePanel.d.ts +3 -3
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeaturePanel.js +17 -8
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceLegend.d.ts +6 -0
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceLegend.js +19 -0
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceName.d.ts +5 -4
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceName.js +15 -18
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequencePanel.d.ts +1 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequencePanel.js +33 -17
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/consts.d.ts +3 -3
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/consts.js +7 -3
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/FeatureSequenceDialog.d.ts +11 -0
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/FeatureSequenceDialog.js +29 -0
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/HelpDialog.d.ts +1 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/HelpDialog.js +4 -6
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceDialog.d.ts +18 -6
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceDialog.js +11 -29
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceFeatureMenu.d.ts +9 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceFeatureMenu.js +63 -58
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceTypeSelector.d.ts +7 -3
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceTypeSelector.js +38 -51
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SettingsDialog.d.ts +1 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SettingsDialog.js +19 -27
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.d.ts +6 -0
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.js +20 -0
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/featureTypeUtil.d.ts +12 -0
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/featureTypeUtil.js +97 -0
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/index.js +1 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.d.ts +62 -63
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.js +69 -59
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/panelAssemblyName.d.ts +21 -0
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/panelAssemblyName.js +24 -0
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/CDNASequence.d.ts +5 -3
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/CDNASequence.js +93 -75
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/CDSSequence.d.ts +1 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/CDSSequence.js +4 -11
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/GenomicSequence.d.ts +5 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/GenomicSequence.js +21 -48
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/PlainSequence.d.ts +8 -0
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/PlainSequence.js +20 -0
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/ProteinSequence.d.ts +6 -3
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/ProteinSequence.js +33 -13
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/SequenceDisplay.d.ts +7 -4
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/SequenceDisplay.js +67 -11
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/renderSequenceSegments.d.ts +14 -0
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/renderSequenceSegments.js +42 -0
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/types.d.ts +8 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/useSequenceData.d.ts +9 -9
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/useSequenceData.js +28 -44
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/useSequenceFetch.d.ts +23 -0
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/useSequenceFetch.js +31 -0
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/util.d.ts +90 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/util.js +145 -23
- package/esm/BaseFeatureWidget/configSchema.d.ts +1 -1
- package/esm/BaseFeatureWidget/configSchema.js +1 -1
- package/esm/BaseFeatureWidget/formatDetails.d.ts +22 -0
- package/esm/BaseFeatureWidget/formatDetails.js +82 -0
- package/esm/BaseFeatureWidget/index.d.ts +4 -1
- package/esm/BaseFeatureWidget/index.js +2 -2
- package/esm/BaseFeatureWidget/stateModelFactory.d.ts +102 -71
- package/esm/BaseFeatureWidget/stateModelFactory.js +162 -63
- package/esm/BaseFeatureWidget/types.d.ts +15 -8
- package/esm/BaseFeatureWidget/util.d.ts +2 -37
- package/esm/BaseFeatureWidget/util.js +4 -85
- package/esm/CorePlugin.js +12 -7
- package/esm/PhasedScheduler.d.ts +4 -2
- package/esm/PhasedScheduler.js +18 -2
- package/esm/Plugin.d.ts +6 -1
- package/esm/Plugin.js +7 -0
- package/esm/PluginLoader.d.ts +55 -44
- package/esm/PluginLoader.js +290 -90
- package/esm/PluginManager.d.ts +476 -57
- package/esm/PluginManager.js +480 -91
- package/esm/ReExports/MuiDataGridReExports.d.ts +3 -2
- package/esm/ReExports/MuiDataGridReExports.js +58 -130
- package/esm/ReExports/MuiReExports.d.ts +3 -134
- package/esm/ReExports/MuiReExports.js +43 -16
- package/esm/ReExports/MuiStylesReExports.d.ts +66 -0
- package/esm/ReExports/MuiStylesReExports.js +55 -0
- 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/lazify.d.ts +2 -2
- package/esm/ReExports/lazify.js +16 -3
- package/esm/ReExports/list.js +433 -160
- package/esm/ReExports/modules.d.ts +1 -1
- package/esm/ReExports/modules.js +10 -146
- package/esm/ReExports/muiComponentNames.d.ts +18 -0
- package/esm/ReExports/muiComponentNames.js +130 -0
- package/esm/ReExports/registry.d.ts +3 -0
- package/esm/ReExports/registry.js +46 -0
- 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/BaseResults.d.ts +20 -21
- package/esm/TextSearch/BaseResults.js +8 -33
- package/esm/TextSearch/TextSearchManager.d.ts +30 -36
- package/esm/TextSearch/TextSearchManager.js +138 -44
- package/esm/TextSearch/places.d.ts +12 -0
- package/esm/TextSearch/places.js +94 -0
- package/esm/assemblyManager/assembly.d.ts +310 -35
- package/esm/assemblyManager/assembly.js +554 -263
- package/esm/assemblyManager/assemblyAdapters.d.ts +12 -0
- package/esm/assemblyManager/assemblyAdapters.js +24 -0
- package/esm/assemblyManager/assemblyConfigSchema.d.ts +135 -19
- package/esm/assemblyManager/assemblyConfigSchema.js +205 -23
- package/esm/assemblyManager/assemblyManager.d.ts +586 -323
- package/esm/assemblyManager/assemblyManager.js +352 -51
- package/esm/assemblyManager/expandAssemblyConfigShorthand.d.ts +39 -0
- package/esm/assemblyManager/expandAssemblyConfigShorthand.js +114 -0
- package/esm/assemblyManager/geneticCodes.d.ts +21 -0
- package/esm/assemblyManager/geneticCodes.js +44 -0
- package/esm/assemblyManager/getSequenceAdapterConfig.d.ts +19 -0
- package/esm/assemblyManager/getSequenceAdapterConfig.js +22 -0
- package/esm/assemblyManager/index.d.ts +1 -1
- package/esm/assemblyManager/index.js +2 -2
- package/esm/assemblyManager/indexAssemblyNames.d.ts +9 -0
- package/esm/assemblyManager/indexAssemblyNames.js +22 -0
- package/esm/assemblyManager/loadRefNameMap.d.ts +5 -0
- package/esm/assemblyManager/loadRefNameMap.js +75 -0
- package/esm/assemblyManager/refNameColors.d.ts +1 -0
- package/esm/assemblyManager/refNameColors.js +32 -0
- package/esm/assemblyManager/refNameMapKey.d.ts +7 -0
- package/esm/assemblyManager/refNameMapKey.js +12 -0
- package/esm/assemblyManager/refNameMaps.d.ts +26 -0
- package/esm/assemblyManager/refNameMaps.js +87 -0
- package/esm/assemblyManager/refNameMismatch.d.ts +54 -0
- package/esm/assemblyManager/refNameMismatch.js +66 -0
- package/esm/checkPlugins.d.ts +13 -0
- package/esm/checkPlugins.js +98 -0
- package/esm/configuration/bamIndexFields.d.ts +49 -0
- package/esm/configuration/bamIndexFields.js +41 -0
- package/esm/configuration/configurationSchema.d.ts +194 -29
- package/esm/configuration/configurationSchema.js +439 -145
- package/esm/configuration/configurationSchemaUnion.d.ts +39 -0
- package/esm/configuration/configurationSchemaUnion.js +56 -0
- package/esm/configuration/configurationSlot.d.ts +373 -30
- package/esm/configuration/configurationSlot.js +231 -224
- package/esm/configuration/fillLocations.d.ts +14 -0
- package/esm/configuration/fillLocations.js +14 -0
- package/esm/configuration/formatAboutConfigSchema.d.ts +41 -0
- package/esm/configuration/formatAboutConfigSchema.js +58 -0
- package/esm/configuration/formatDetailsConfigSchema.d.ts +54 -0
- package/esm/configuration/formatDetailsConfigSchema.js +87 -0
- package/esm/configuration/fullConfSnapshot.d.ts +13 -0
- package/esm/configuration/fullConfSnapshot.js +44 -0
- package/esm/configuration/getConf.d.ts +92 -0
- package/esm/configuration/getConf.js +141 -0
- package/esm/configuration/index.d.ts +32 -3
- package/esm/configuration/index.js +27 -2
- package/esm/configuration/indexType.d.ts +26 -0
- package/esm/configuration/indexType.js +38 -0
- package/esm/configuration/mergeFormatCallbacks.d.ts +14 -0
- package/esm/configuration/mergeFormatCallbacks.js +27 -0
- package/esm/configuration/readConfObject.d.ts +34 -0
- package/esm/configuration/readConfObject.js +118 -0
- package/esm/configuration/requirements.d.ts +37 -0
- package/esm/configuration/requirements.js +88 -0
- package/esm/configuration/schemaRegistry.d.ts +52 -0
- package/esm/configuration/schemaRegistry.js +48 -0
- package/esm/configuration/schemaTypes.d.ts +39 -0
- package/esm/configuration/schemaTypes.js +105 -0
- package/esm/configuration/slotFacade.d.ts +65 -0
- package/esm/configuration/slotFacade.js +110 -0
- package/esm/configuration/slotValueUtils.d.ts +17 -0
- package/esm/configuration/slotValueUtils.js +25 -0
- package/esm/configuration/snapshotPreprocess.d.ts +43 -0
- package/esm/configuration/snapshotPreprocess.js +161 -0
- package/esm/configuration/tabixIndexFields.d.ts +70 -0
- package/esm/configuration/tabixIndexFields.js +62 -0
- package/esm/configuration/tabixShorthand.d.ts +51 -0
- package/esm/configuration/tabixShorthand.js +72 -0
- package/esm/configuration/types.d.ts +315 -13
- package/esm/configuration/uriShorthand.d.ts +9 -0
- package/esm/configuration/uriShorthand.js +16 -0
- package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +19 -11
- package/esm/data_adapters/BaseAdapter/BaseAdapter.js +19 -18
- package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +158 -7
- package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +164 -29
- package/esm/data_adapters/BaseAdapter/BaseRefNameAliasAdapter.d.ts +1 -0
- package/esm/data_adapters/BaseAdapter/BaseSequenceAdapter.d.ts +13 -5
- package/esm/data_adapters/BaseAdapter/BaseSequenceAdapter.js +9 -7
- package/esm/data_adapters/BaseAdapter/BaseTextSearchAdapter.d.ts +2 -1
- package/esm/data_adapters/BaseAdapter/CytobandAdapter.d.ts +7 -0
- package/esm/data_adapters/BaseAdapter/RegionsAdapter.d.ts +2 -1
- package/esm/data_adapters/BaseAdapter/featureDensity.d.ts +40 -0
- package/esm/data_adapters/BaseAdapter/featureDensity.js +31 -0
- package/esm/data_adapters/BaseAdapter/getAdapterId.d.ts +2 -0
- package/esm/data_adapters/BaseAdapter/getAdapterId.js +9 -0
- package/esm/data_adapters/BaseAdapter/index.d.ts +28 -6
- package/esm/data_adapters/BaseAdapter/index.js +6 -5
- 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 +37 -5
- package/esm/data_adapters/BaseAdapter/stats.js +89 -24
- package/esm/data_adapters/BaseAdapter/types.d.ts +11 -13
- package/esm/data_adapters/BaseAdapter/types.js +1 -0
- package/esm/data_adapters/BaseAdapter/util.d.ts +5 -1
- package/esm/data_adapters/BaseAdapter/util.js +14 -3
- package/esm/data_adapters/BaseAdapter/zoomRange.d.ts +10 -0
- package/esm/data_adapters/CytobandAdapter/CytobandAdapter.d.ts +1 -1
- package/esm/data_adapters/CytobandAdapter/CytobandAdapter.js +5 -5
- package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +34 -6
- package/esm/data_adapters/CytobandAdapter/configSchema.js +47 -17
- package/esm/data_adapters/CytobandAdapter/index.js +3 -3
- package/esm/data_adapters/adapterSessionRefcount.d.ts +61 -0
- package/esm/data_adapters/adapterSessionRefcount.js +96 -0
- package/esm/data_adapters/dataAdapterCache.d.ts +53 -2
- package/esm/data_adapters/dataAdapterCache.js +99 -25
- package/esm/data_adapters/getFeatureAdapter.d.ts +24 -0
- package/esm/data_adapters/getFeatureAdapter.js +27 -0
- package/esm/data_adapters/getSequenceSubAdapter.d.ts +19 -0
- package/esm/data_adapters/getSequenceSubAdapter.js +42 -0
- package/esm/pluggableElementTypes/AdapterType.d.ts +57 -7
- package/esm/pluggableElementTypes/AdapterType.js +44 -5
- package/esm/pluggableElementTypes/AddTrackWorkflowType.d.ts +6 -1
- package/esm/pluggableElementTypes/AddTrackWorkflowType.js +3 -1
- package/esm/pluggableElementTypes/ConnectionType.d.ts +5 -5
- package/esm/pluggableElementTypes/ConnectionType.js +1 -1
- package/esm/pluggableElementTypes/DisplayType.d.ts +54 -14
- package/esm/pluggableElementTypes/DisplayType.js +30 -7
- package/esm/pluggableElementTypes/InternetAccountType.js +1 -1
- package/esm/pluggableElementTypes/LazyStateModelElement.d.ts +32 -0
- package/esm/pluggableElementTypes/LazyStateModelElement.js +77 -0
- package/esm/pluggableElementTypes/PluggableElementBase.d.ts +11 -0
- package/esm/pluggableElementTypes/PluggableElementBase.js +11 -0
- package/esm/pluggableElementTypes/RpcMethodType.d.ts +142 -12
- package/esm/pluggableElementTypes/RpcMethodType.js +279 -98
- package/esm/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.d.ts +18 -9
- package/esm/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.js +26 -20
- package/esm/pluggableElementTypes/RpcMethodTypeWithRenameRegion.d.ts +5 -0
- package/esm/pluggableElementTypes/RpcMethodTypeWithRenameRegion.js +18 -0
- package/esm/pluggableElementTypes/RpcMethodTypeWithRenameRegions.d.ts +5 -0
- package/esm/pluggableElementTypes/RpcMethodTypeWithRenameRegions.js +10 -0
- package/esm/pluggableElementTypes/TextSearchAdapterType.d.ts +7 -7
- package/esm/pluggableElementTypes/TextSearchAdapterType.js +3 -1
- package/esm/pluggableElementTypes/TrackType.d.ts +2 -1
- package/esm/pluggableElementTypes/TrackType.js +1 -1
- package/esm/pluggableElementTypes/ViewType.d.ts +22 -5
- package/esm/pluggableElementTypes/ViewType.js +40 -5
- package/esm/pluggableElementTypes/WidgetType.d.ts +2 -2
- package/esm/pluggableElementTypes/WidgetType.js +1 -1
- package/esm/pluggableElementTypes/addMenuItems.d.ts +88 -0
- package/esm/pluggableElementTypes/addMenuItems.js +82 -0
- package/esm/pluggableElementTypes/extendElementType.d.ts +29 -0
- package/esm/pluggableElementTypes/extendElementType.js +72 -0
- package/esm/pluggableElementTypes/index.d.ts +8 -7
- package/esm/pluggableElementTypes/index.js +24 -14
- package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +80 -15
- package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.js +90 -10
- package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +643 -84
- package/esm/pluggableElementTypes/models/BaseDisplayModel.js +230 -60
- package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +246 -37
- package/esm/pluggableElementTypes/models/BaseTrackModel.js +416 -107
- package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +236 -16
- package/esm/pluggableElementTypes/models/BaseViewModel.js +154 -16
- package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +169 -25
- package/esm/pluggableElementTypes/models/InternetAccountModel.js +218 -48
- package/esm/pluggableElementTypes/models/assertDisplayContract.d.ts +178 -0
- package/esm/pluggableElementTypes/models/assertDisplayContract.js +239 -0
- package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +26 -8
- package/esm/pluggableElementTypes/models/baseConnectionConfig.js +18 -2
- package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +31 -17
- package/esm/pluggableElementTypes/models/baseInternetAccountConfig.js +23 -2
- package/esm/pluggableElementTypes/models/baseTrackConfig.d.ts +142 -65
- package/esm/pluggableElementTypes/models/baseTrackConfig.js +215 -90
- package/esm/pluggableElementTypes/models/components/SaveTrackData.d.ts +3 -8
- package/esm/pluggableElementTypes/models/components/SaveTrackData.js +111 -139
- package/esm/pluggableElementTypes/models/components/fetchTrackData.d.ts +54 -0
- package/esm/pluggableElementTypes/models/components/fetchTrackData.js +83 -0
- package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +50 -0
- package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +147 -0
- package/esm/pluggableElementTypes/models/index.d.ts +5 -3
- package/esm/pluggableElementTypes/models/index.js +9 -8
- package/esm/pluggableElementTypes/models/migrateTrackConfig.d.ts +48 -0
- package/esm/pluggableElementTypes/models/migrateTrackConfig.js +114 -0
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/bed.js +75 -7
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.d.ts +10 -3
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.js +272 -100
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/gff3.d.ts +6 -1
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/gff3.js +70 -74
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/types.d.ts +9 -1
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/util.d.ts +21 -0
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/util.js +51 -0
- package/esm/pluggableElementTypes/models/uriMatchesDomains.d.ts +29 -0
- package/esm/pluggableElementTypes/models/uriMatchesDomains.js +62 -0
- package/esm/pluggableElementTypes/renderers/util/serializableFilterChain.d.ts +5 -4
- package/esm/pluggableElementTypes/renderers/util/serializableFilterChain.js +20 -10
- package/esm/pluginDefinitions.d.ts +225 -0
- package/esm/pluginDefinitions.js +254 -0
- package/esm/rpc/BaseRpcDriver.d.ts +27 -35
- package/esm/rpc/BaseRpcDriver.js +68 -106
- package/esm/rpc/MainThreadRpcDriver.d.ts +9 -10
- package/esm/rpc/MainThreadRpcDriver.js +23 -29
- package/esm/rpc/RpcClient.d.ts +50 -0
- package/esm/rpc/RpcClient.js +189 -0
- package/esm/rpc/RpcManager.d.ts +120 -27
- package/esm/rpc/RpcManager.js +187 -50
- package/esm/rpc/RpcRegistry.d.ts +298 -0
- package/esm/rpc/RpcServer.d.ts +43 -0
- package/esm/rpc/RpcServer.js +242 -0
- package/esm/rpc/WebWorkerRpcDriver.d.ts +78 -24
- package/esm/rpc/WebWorkerRpcDriver.js +311 -30
- package/esm/rpc/byteBudget.d.ts +64 -0
- package/esm/rpc/byteBudget.js +61 -0
- package/esm/rpc/configSchema.d.ts +13 -5
- package/esm/rpc/configSchema.js +40 -16
- package/esm/rpc/coreRpcMethods.d.ts +6 -5
- package/esm/rpc/coreRpcMethods.js +13 -12
- package/esm/rpc/explainTransferError.d.ts +35 -0
- package/esm/rpc/explainTransferError.js +158 -0
- package/esm/rpc/methods/CoreFreeResources.d.ts +19 -4
- package/esm/rpc/methods/CoreFreeResources.js +17 -6
- 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.d.ts +5 -18
- package/esm/rpc/methods/CoreGetExportData.js +25 -15
- package/esm/rpc/methods/CoreGetFeatureDensity.d.ts +11 -0
- package/esm/rpc/methods/CoreGetFeatureDensity.js +22 -0
- package/esm/rpc/methods/CoreGetFeatures.d.ts +6 -15
- package/esm/rpc/methods/CoreGetFeatures.js +14 -18
- package/esm/rpc/methods/CoreGetInfo.d.ts +6 -0
- package/esm/rpc/methods/CoreGetInfo.js +12 -0
- package/esm/rpc/methods/CoreGetMetadata.d.ts +4 -7
- package/esm/rpc/methods/CoreGetMetadata.js +6 -9
- package/esm/rpc/methods/CoreGetRefNames.d.ts +4 -8
- package/esm/rpc/methods/CoreGetRefNames.js +16 -15
- package/esm/rpc/methods/CoreGetRegionByteEstimate.d.ts +6 -0
- package/esm/rpc/methods/CoreGetRegionByteEstimate.js +19 -0
- package/esm/rpc/methods/CoreGetRegions.d.ts +4 -6
- package/esm/rpc/methods/CoreGetRegions.js +6 -9
- package/esm/rpc/methods/CoreGetSequence.d.ts +4 -11
- package/esm/rpc/methods/CoreGetSequence.js +12 -13
- 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/rpc/serializeError/index.d.ts +9 -0
- package/esm/rpc/serializeError/index.js +86 -0
- package/esm/svg/SvgExport.d.ts +30 -0
- package/esm/svg/SvgExport.js +52 -0
- package/esm/svg/SvgThemeProviders.d.ts +12 -0
- package/esm/svg/SvgThemeProviders.js +15 -0
- package/esm/svg/constants.d.ts +1 -0
- package/esm/svg/constants.js +5 -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/saveSvgAsImage.d.ts +6 -0
- package/esm/svg/saveSvgAsImage.js +90 -0
- package/esm/svg/serializeSvg.d.ts +7 -0
- package/esm/svg/serializeSvg.js +11 -0
- package/esm/svg/svgId.d.ts +42 -0
- package/esm/svg/svgId.js +84 -0
- package/esm/svg/svgReady.d.ts +138 -0
- package/esm/svg/svgReady.js +165 -0
- package/esm/svg/trackNames.d.ts +29 -0
- package/esm/svg/trackNames.js +34 -0
- package/esm/svg/wrapSvgExport.d.ts +12 -0
- package/esm/svg/wrapSvgExport.js +10 -0
- package/esm/ui/ActionLink.d.ts +7 -0
- package/esm/ui/ActionLink.js +9 -0
- package/esm/ui/AddCustomPluginDialog.d.ts +14 -0
- package/esm/ui/AddCustomPluginDialog.js +56 -0
- package/esm/ui/AddGenomePane.d.ts +8 -0
- package/esm/ui/AddGenomePane.js +228 -0
- package/esm/ui/AdvancedOptions.d.ts +6 -0
- package/esm/ui/AdvancedOptions.js +17 -0
- package/esm/ui/AppLogo.d.ts +1 -1
- package/esm/ui/AppLogo.js +2 -2
- package/esm/ui/AppReadyMarker.d.ts +45 -0
- package/esm/ui/AppReadyMarker.js +89 -0
- package/esm/ui/AssemblySelector.d.ts +5 -8
- package/esm/ui/AssemblySelector.js +8 -26
- package/esm/ui/BaseExportSvgDialog.d.ts +16 -0
- package/esm/ui/BaseExportSvgDialog.js +84 -0
- package/esm/ui/BaseTooltip.d.ts +14 -3
- package/esm/ui/BaseTooltip.js +151 -34
- package/esm/ui/CascadingMenu.d.ts +9 -18
- package/esm/ui/CascadingMenu.js +446 -42
- package/esm/ui/CascadingMenuButton.d.ts +9 -11
- package/esm/ui/CascadingMenuButton.js +36 -18
- package/esm/ui/CascadingMenuHelpDialog.d.ts +2 -2
- package/esm/ui/CascadingMenuHelpDialog.js +4 -5
- package/esm/ui/CascadingMenuHelpIconButton.d.ts +2 -1
- package/esm/ui/CascadingMenuHelpIconButton.js +18 -9
- package/esm/ui/ColorPicker.d.ts +6 -9
- package/esm/ui/ColorPicker.js +36 -39
- package/esm/ui/ConfirmDialog.d.ts +2 -9
- package/esm/ui/ConfirmDialog.js +6 -9
- package/esm/ui/ContextMenu.d.ts +50 -0
- package/esm/ui/ContextMenu.js +55 -0
- package/esm/ui/CopyToClipboardButton.d.ts +10 -0
- package/esm/ui/CopyToClipboardButton.js +14 -0
- package/esm/ui/Crosshairs.d.ts +10 -0
- package/esm/ui/Crosshairs.js +15 -0
- package/esm/ui/DOMPurifySanitizedHTML.d.ts +1 -1
- package/esm/ui/DOMPurifySanitizedHTML.js +5 -5
- package/esm/ui/DataGridFlexContainer.d.ts +9 -2
- package/esm/ui/DataGridFlexContainer.js +4 -3
- package/esm/ui/Dialog.d.ts +5 -2
- package/esm/ui/Dialog.js +35 -27
- package/esm/ui/DraggableDialog.d.ts +3 -3
- package/esm/ui/DraggableDialog.js +50 -12
- package/esm/ui/DropDownMenu.d.ts +4 -2
- package/esm/ui/DropDownMenu.js +6 -5
- package/esm/ui/EditableTypography.d.ts +3 -1
- package/esm/ui/EditableTypography.js +34 -26
- package/esm/ui/ErrorActions.d.ts +24 -0
- package/esm/ui/ErrorActions.js +20 -0
- package/esm/ui/ErrorBanner.d.ts +7 -0
- package/esm/ui/ErrorBanner.js +35 -0
- package/esm/ui/ErrorBar.d.ts +6 -0
- package/esm/ui/ErrorBar.js +35 -0
- package/esm/ui/ErrorBoundary.d.ts +29 -5
- package/esm/ui/ErrorBoundary.js +32 -2
- package/esm/ui/ErrorMessage.d.ts +2 -4
- package/esm/ui/ErrorMessage.js +17 -52
- package/esm/ui/ErrorMessageStackTraceContents.d.ts +1 -1
- package/esm/ui/ErrorMessageStackTraceContents.js +5 -4
- package/esm/ui/ErrorMessageStackTraceDialog.d.ts +1 -1
- package/esm/ui/ErrorMessageStackTraceDialog.js +51 -96
- package/esm/ui/ErrorOverlay.d.ts +8 -0
- package/esm/ui/ErrorOverlay.js +5 -0
- package/esm/ui/ExportSvgDialog.d.ts +7 -0
- package/esm/ui/ExportSvgDialog.js +9 -0
- package/esm/ui/ExternalLink.d.ts +1 -1
- package/esm/ui/FactoryResetDialog.d.ts +1 -1
- package/esm/ui/FactoryResetDialog.js +6 -15
- package/esm/ui/FatalErrorDialog.d.ts +3 -2
- package/esm/ui/FatalErrorDialog.js +6 -5
- package/esm/ui/FileDropZone.d.ts +25 -0
- package/esm/ui/FileDropZone.js +129 -0
- package/esm/ui/FileSelector/FileSelector.d.ts +1 -1
- package/esm/ui/FileSelector/FileSelector.js +59 -30
- package/esm/ui/FileSelector/LocalFileChooser.d.ts +7 -2
- package/esm/ui/FileSelector/LocalFileChooser.js +61 -47
- package/esm/ui/FileSelector/LocationInput.d.ts +1 -1
- package/esm/ui/FileSelector/LocationInput.js +8 -12
- package/esm/ui/FileSelector/SourceTypeSelector.d.ts +5 -5
- package/esm/ui/FileSelector/SourceTypeSelector.js +9 -7
- package/esm/ui/FileSelector/UrlChooser.d.ts +1 -1
- package/esm/ui/FileSelector/UrlChooser.js +26 -2
- package/esm/ui/FileSelector/emptySourceType.d.ts +2 -0
- package/esm/ui/FileSelector/emptySourceType.js +14 -0
- package/esm/ui/FileSelector/useInternetAccounts.d.ts +436 -64
- package/esm/ui/FileSelector/useInternetAccounts.js +13 -6
- package/esm/ui/FileSelector/util.d.ts +58 -3
- package/esm/ui/FileSelector/util.js +128 -11
- package/esm/ui/GpuFallbackButton.d.ts +12 -0
- package/esm/ui/GpuFallbackButton.js +20 -0
- package/esm/ui/HoverMenu.d.ts +11 -3
- package/esm/ui/HoverMenu.js +34 -9
- package/esm/ui/HoverTooltip.d.ts +27 -0
- package/esm/ui/HoverTooltip.js +24 -0
- package/esm/ui/Icons.d.ts +6 -4
- package/esm/ui/Icons.js +9 -0
- package/esm/ui/InfoDialog.d.ts +7 -0
- package/esm/ui/InfoDialog.js +16 -0
- package/esm/ui/InlineMenuControls.d.ts +6 -0
- package/esm/ui/InlineMenuControls.js +17 -0
- package/esm/ui/JexlFilterDialog.d.ts +26 -0
- package/esm/ui/JexlFilterDialog.js +167 -0
- package/esm/ui/JexlFilterRowEditors.d.ts +15 -0
- package/esm/ui/JexlFilterRowEditors.js +90 -0
- package/esm/ui/LabeledCheckbox.d.ts +9 -0
- package/esm/ui/LabeledCheckbox.js +7 -0
- package/esm/ui/LazyBaseTooltip.d.ts +4 -0
- package/esm/ui/LazyBaseTooltip.js +9 -0
- package/esm/ui/LegendSwatchGlyph.d.ts +7 -0
- package/esm/ui/LegendSwatchGlyph.js +30 -0
- package/esm/ui/LoadingDots.d.ts +1 -0
- package/esm/ui/LoadingDots.js +30 -0
- package/esm/ui/LoadingEllipses.d.ts +17 -1
- package/esm/ui/LoadingEllipses.js +20 -29
- package/esm/ui/LoadingOverlay.d.ts +23 -0
- package/esm/ui/LoadingOverlay.js +139 -0
- package/esm/ui/LoadingProgress.d.ts +16 -0
- package/esm/ui/LoadingProgress.js +16 -0
- package/esm/ui/Logo.d.ts +2 -2
- package/esm/ui/Logo.js +23 -24
- package/esm/ui/Menu.js +1 -1
- package/esm/ui/MenuItemChevron.d.ts +3 -0
- package/esm/ui/MenuItemChevron.js +19 -0
- package/esm/ui/MenuItemEndDecoration.d.ts +4 -0
- package/esm/ui/MenuItemEndDecoration.js +28 -0
- package/esm/ui/MenuItemTrailing.d.ts +12 -0
- package/esm/ui/MenuItemTrailing.js +42 -0
- package/esm/ui/MenuTypes.d.ts +95 -5
- package/esm/ui/MenuTypes.js +16 -1
- package/esm/ui/MonospaceTextField.d.ts +10 -0
- package/esm/ui/MonospaceTextField.js +40 -0
- package/esm/ui/NumberTextField.d.ts +31 -0
- package/esm/ui/NumberTextField.js +33 -0
- package/esm/ui/PaletteContext.d.ts +90 -0
- package/esm/ui/PaletteContext.js +142 -0
- package/esm/ui/PluggableComponent.d.ts +10 -0
- package/esm/ui/PluggableComponent.js +19 -0
- package/esm/ui/PluggableComponents.d.ts +29 -0
- package/esm/ui/PluggableComponents.js +28 -0
- package/esm/ui/PluggableElements.d.ts +23 -0
- package/esm/ui/PluggableElements.js +24 -0
- package/esm/ui/PluginStoreCard.d.ts +17 -0
- package/esm/ui/PluginStoreCard.js +45 -0
- package/esm/ui/PopoverPicker.d.ts +6 -0
- package/esm/ui/PopoverPicker.js +25 -0
- package/esm/ui/PrerenderedCanvas.d.ts +1 -1
- package/esm/ui/PrerenderedCanvas.js +5 -4
- package/esm/ui/ProgressChip.d.ts +37 -0
- package/esm/ui/ProgressChip.js +66 -0
- package/esm/ui/RedErrorMessageBox.d.ts +1 -1
- package/esm/ui/RedErrorMessageBox.js +9 -3
- package/esm/ui/RefNameAutocomplete/EndAdornment.d.ts +5 -0
- package/esm/ui/RefNameAutocomplete/EndAdornment.js +31 -0
- package/esm/ui/RefNameAutocomplete/HelpDialog.d.ts +3 -0
- package/esm/ui/RefNameAutocomplete/HelpDialog.js +7 -0
- package/esm/ui/RefNameAutocomplete/SearchOption.d.ts +13 -0
- package/esm/ui/RefNameAutocomplete/SearchOption.js +45 -0
- package/esm/ui/RefNameAutocomplete/index.d.ts +21 -0
- package/esm/ui/RefNameAutocomplete/index.js +84 -0
- package/esm/ui/RefNameAutocomplete/util.d.ts +62 -0
- package/esm/ui/RefNameAutocomplete/util.js +209 -0
- package/esm/ui/ReplaceCurrentViewButton.d.ts +19 -0
- package/esm/ui/ReplaceCurrentViewButton.js +22 -0
- package/esm/ui/ResizeHandle.d.ts +15 -7
- package/esm/ui/ResizeHandle.js +73 -53
- package/esm/ui/ReturnToImportFormDialog.d.ts +1 -1
- package/esm/ui/ReturnToImportFormDialog.js +7 -9
- package/esm/ui/SanitizedHTML.d.ts +6 -1
- package/esm/ui/SanitizedHTML.js +7 -47
- package/esm/ui/ScrollChrome.d.ts +13 -0
- package/esm/ui/ScrollChrome.js +11 -0
- package/esm/ui/ScrollEdgeShadow.d.ts +41 -0
- package/esm/ui/ScrollEdgeShadow.js +77 -0
- package/esm/ui/ScrollZoomToggle.d.ts +15 -0
- package/esm/ui/ScrollZoomToggle.js +75 -0
- package/esm/ui/SequenceAdapterInputs.d.ts +9 -0
- package/esm/ui/SequenceAdapterInputs.js +30 -0
- package/esm/ui/SessionJsonPanel.d.ts +3 -0
- package/esm/ui/SessionJsonPanel.js +14 -0
- package/esm/ui/SettingsChangesTable.d.ts +15 -0
- package/esm/ui/SettingsChangesTable.js +87 -0
- package/esm/ui/ShareLinkField.d.ts +4 -0
- package/esm/ui/ShareLinkField.js +15 -0
- package/esm/ui/SingleSlider.d.ts +8 -0
- package/esm/ui/SingleSlider.js +11 -0
- package/esm/ui/SizeSliderRow.d.ts +14 -0
- package/esm/ui/SizeSliderRow.js +48 -0
- package/esm/ui/SliderTooltip.d.ts +2 -0
- package/esm/ui/SliderTooltip.js +17 -0
- package/esm/ui/Snackbar.d.ts +4 -2
- package/esm/ui/Snackbar.js +11 -8
- package/esm/ui/SnackbarContents.d.ts +1 -1
- package/esm/ui/SnackbarContents.js +21 -3
- package/esm/ui/SnackbarModel.d.ts +40 -0
- package/esm/ui/SnackbarModel.js +96 -52
- package/esm/ui/StackTraceButton.d.ts +5 -0
- package/esm/ui/StackTraceButton.js +16 -0
- package/esm/ui/StatusProgressBar.d.ts +37 -0
- package/esm/ui/StatusProgressBar.js +76 -0
- package/esm/ui/SubmitDialog.d.ts +6 -0
- package/esm/ui/SubmitDialog.js +9 -0
- package/esm/ui/SubmitForm.d.ts +23 -0
- package/esm/ui/SubmitForm.js +23 -0
- package/esm/ui/SvgColorLegend.d.ts +18 -0
- package/esm/ui/SvgColorLegend.js +106 -0
- package/esm/ui/TagTextField.d.ts +40 -0
- package/esm/ui/TagTextField.js +32 -0
- package/esm/ui/VerticalScrollbar.d.ts +24 -0
- package/esm/ui/VerticalScrollbar.js +104 -0
- package/esm/ui/ViewLoadingScreen.d.ts +25 -0
- package/esm/ui/ViewLoadingScreen.js +52 -0
- package/esm/ui/addExtensionElement.d.ts +18 -0
- package/esm/ui/addExtensionElement.js +23 -0
- package/esm/ui/buildExtraTrackMenuItems.d.ts +22 -0
- package/esm/ui/buildExtraTrackMenuItems.js +14 -0
- package/esm/ui/colorScale.d.ts +92 -0
- package/esm/ui/colorScale.js +72 -0
- package/esm/ui/colorSwatchStyle.d.ts +9 -0
- package/esm/ui/colorSwatchStyle.js +11 -0
- package/esm/ui/colors.d.ts +125 -8
- package/esm/ui/colors.js +364 -1
- package/esm/ui/extensionSelectors.d.ts +38 -0
- package/esm/ui/extensionSelectors.js +49 -0
- package/esm/ui/filterMenuItems.d.ts +112 -0
- package/esm/ui/filterMenuItems.js +86 -0
- package/esm/ui/formatErrorStack.d.ts +1 -0
- package/esm/ui/formatErrorStack.js +56 -0
- package/esm/ui/gpuFallback.d.ts +33 -0
- package/esm/ui/gpuFallback.js +39 -0
- package/esm/ui/hoverBoxStyle.d.ts +23 -0
- package/esm/ui/hoverBoxStyle.js +28 -0
- package/esm/ui/index.d.ts +77 -5
- package/esm/ui/index.js +83 -20
- package/esm/ui/inlineMenuRowWidth.d.ts +1 -0
- package/esm/ui/inlineMenuRowWidth.js +8 -0
- package/esm/ui/launchTargetsMenuItem.d.ts +18 -0
- package/esm/ui/launchTargetsMenuItem.js +24 -0
- package/esm/ui/launchViewMenu.d.ts +4 -0
- package/esm/ui/launchViewMenu.js +46 -0
- package/esm/ui/legendMenuItem.d.ts +16 -0
- package/esm/ui/legendMenuItem.js +17 -0
- package/esm/ui/legendSpec.d.ts +69 -0
- package/esm/ui/legendSpec.js +69 -0
- package/esm/ui/loadingDotKeyframes.d.ts +18 -0
- package/esm/ui/loadingDotKeyframes.js +17 -0
- package/esm/ui/makeSizeMenu.d.ts +24 -0
- package/esm/ui/makeSizeMenu.js +58 -0
- package/esm/ui/mapStackTrace.d.ts +8 -0
- package/esm/ui/mapStackTrace.js +108 -0
- package/esm/ui/measureLegendText.d.ts +1 -0
- package/esm/ui/measureLegendText.js +8 -0
- package/esm/ui/menuItemAdornment.d.ts +22 -0
- package/esm/ui/menuItemAdornment.js +28 -0
- package/esm/ui/menuItems.d.ts +23 -0
- package/esm/ui/menuItems.js +21 -0
- package/esm/ui/menuLabels.d.ts +41 -0
- package/esm/ui/menuLabels.js +43 -0
- package/esm/ui/multiTrackMenuItems.d.ts +25 -0
- package/esm/ui/multiTrackMenuItems.js +15 -0
- package/esm/ui/palette.d.ts +561 -0
- package/esm/ui/palette.js +785 -0
- package/esm/ui/parseError.d.ts +4 -0
- package/esm/ui/parseError.js +18 -0
- package/esm/ui/persistentScrollbarStyle.d.ts +49 -0
- package/esm/ui/persistentScrollbarStyle.js +53 -0
- package/esm/ui/radioSubMenu.d.ts +33 -0
- package/esm/ui/radioSubMenu.js +32 -0
- package/esm/ui/react-colorful.js +5 -1
- package/esm/ui/replaceViewAction.d.ts +31 -0
- package/esm/ui/replaceViewAction.js +39 -0
- package/esm/ui/rewriteExternalAnchors.d.ts +1 -0
- package/esm/ui/rewriteExternalAnchors.js +8 -0
- package/esm/ui/scrollZoomLabels.d.ts +17 -0
- package/esm/ui/scrollZoomLabels.js +22 -0
- package/esm/ui/showSubMenu.d.ts +19 -0
- package/esm/ui/showSubMenu.js +30 -0
- package/esm/ui/sliderScale.d.ts +6 -0
- package/esm/ui/sliderScale.js +30 -0
- package/esm/ui/statusProgressKeyframes.d.ts +6 -0
- package/esm/ui/statusProgressKeyframes.js +14 -0
- package/esm/ui/stripStackTraceMessage.d.ts +1 -0
- package/esm/ui/stripStackTraceMessage.js +9 -0
- package/esm/ui/styleTheme.d.ts +158 -0
- package/esm/ui/styleTheme.js +115 -0
- package/esm/ui/submenuAim.d.ts +30 -0
- package/esm/ui/submenuAim.js +37 -0
- package/esm/ui/theme.d.ts +268 -30
- package/esm/ui/theme.js +250 -350
- package/esm/ui/toggleMenuItems.d.ts +42 -0
- package/esm/ui/toggleMenuItems.js +61 -0
- package/esm/ui/useAssemblySelection.d.ts +153 -0
- package/esm/ui/useAssemblySelection.js +54 -0
- package/esm/ui/useCoalescedPointer.d.ts +36 -0
- package/esm/ui/useCoalescedPointer.js +60 -0
- package/esm/ui/useCopyToClipboard.d.ts +15 -0
- package/esm/ui/useCopyToClipboard.js +41 -0
- package/esm/ui/useExportSvgPreference.d.ts +1 -0
- package/esm/ui/useExportSvgPreference.js +4 -0
- package/esm/ui/useMouseTracking.d.ts +71 -0
- package/esm/ui/useMouseTracking.js +179 -0
- package/esm/ui/useRecentLocations.d.ts +28 -0
- package/esm/ui/useRecentLocations.js +31 -0
- package/esm/ui/viewHeaderHeight.d.ts +1 -0
- package/esm/ui/viewHeaderHeight.js +1 -0
- package/esm/ui/wrapComponent.d.ts +47 -0
- package/esm/ui/wrapComponent.js +58 -0
- package/esm/ui/zIndexes.d.ts +28 -0
- package/esm/ui/zIndexes.js +38 -0
- package/esm/util/Base1DUtils.d.ts +207 -17
- package/esm/util/Base1DUtils.js +316 -173
- package/esm/util/Base1DViewModel.d.ts +99 -21
- package/esm/util/Base1DViewModel.js +151 -41
- package/esm/util/FileSaver/index.d.ts +1 -0
- package/esm/util/FileSaver/index.js +27 -0
- package/esm/util/IntervalTree.d.ts +18 -39
- package/esm/util/IntervalTree.js +63 -244
- package/esm/util/SvgCanvas.d.ts +83 -0
- package/esm/util/SvgCanvas.js +520 -0
- package/esm/util/TimeTraveller.d.ts +12 -0
- package/esm/util/TimeTraveller.js +130 -27
- package/esm/util/aborting.d.ts +56 -4
- package/esm/util/aborting.js +112 -25
- package/esm/util/adapterMetadata.d.ts +20 -0
- package/esm/util/adapterMetadata.js +40 -0
- package/esm/util/addAndShowTrack.d.ts +19 -0
- package/esm/util/addAndShowTrack.js +27 -0
- package/esm/util/addRelativeUris.d.ts +29 -0
- package/esm/util/addRelativeUris.js +78 -0
- package/esm/util/addTrackComponent.d.ts +72 -0
- package/esm/util/addTrackComponent.js +53 -0
- package/esm/util/addTrackFromWidget.d.ts +91 -0
- package/esm/util/addTrackFromWidget.js +91 -0
- package/esm/util/aggregateFieldName.d.ts +10 -0
- package/esm/util/aggregateFieldName.js +8 -0
- package/esm/util/analytics.d.ts +32 -3
- package/esm/util/analytics.js +135 -49
- package/esm/util/animationAllowed.d.ts +26 -0
- package/esm/util/animationAllowed.js +35 -0
- package/esm/util/applyRowResizeWheel.d.ts +15 -0
- package/esm/util/applyRowResizeWheel.js +23 -0
- package/esm/util/assemblyConfigUtils.d.ts +144 -0
- package/esm/util/assemblyConfigUtils.js +498 -0
- package/esm/util/bandHeight.d.ts +63 -0
- package/esm/util/bandHeight.js +85 -0
- package/esm/util/bandLayout.d.ts +51 -0
- package/esm/util/bandLayout.js +36 -0
- package/esm/util/bezierConnector.d.ts +15 -0
- package/esm/util/bezierConnector.js +101 -0
- package/esm/util/bgzfWorkerPool.d.ts +24 -0
- package/esm/util/bgzfWorkerPool.js +27 -0
- package/esm/util/binnedAggregate.d.ts +17 -0
- package/esm/util/binnedAggregate.js +275 -0
- package/esm/util/blockTypes.d.ts +64 -45
- package/esm/util/blockTypes.js +67 -74
- package/esm/util/bpUtils.d.ts +81 -0
- package/esm/util/bpUtils.js +103 -0
- package/esm/util/cacheBudgets.d.ts +55 -0
- package/esm/util/cacheBudgets.js +55 -0
- package/esm/util/cachedSetup.d.ts +51 -0
- package/esm/util/cachedSetup.js +87 -0
- package/esm/util/calculateDynamicBlocks.d.ts +5 -0
- package/esm/util/calculateDynamicBlocks.js +85 -82
- package/esm/util/calculateStaticBlocks.d.ts +2 -3
- package/esm/util/calculateStaticBlocks.js +48 -71
- package/esm/util/categoricalField.d.ts +56 -0
- package/esm/util/categoricalField.js +73 -0
- package/esm/util/chooseGridPitch.d.ts +9 -0
- package/esm/util/chooseGridPitch.js +31 -0
- package/esm/util/clampToContig.d.ts +43 -0
- package/esm/util/clampToContig.js +47 -0
- package/esm/util/cmpStr.d.ts +1 -0
- package/esm/util/cmpStr.js +7 -0
- package/esm/util/coarseStripHTML.js +2 -15
- package/esm/util/color/cssColorsLevel4.d.ts +1 -0
- package/esm/util/color/cssColorsLevel4.js +7 -2
- package/esm/util/color/index.d.ts +84 -3
- package/esm/util/color/index.js +197 -25
- package/esm/util/color-bits/bit.d.ts +4 -0
- package/esm/util/color-bits/bit.js +37 -0
- package/esm/util/color-bits/convert.d.ts +23 -0
- package/esm/util/color-bits/convert.js +294 -0
- package/esm/util/color-bits/core.d.ts +34 -0
- package/esm/util/color-bits/core.js +67 -0
- package/esm/util/color-bits/format.d.ts +24 -0
- package/esm/util/color-bits/format.js +82 -0
- package/esm/util/color-bits/functions.d.ts +33 -0
- package/esm/util/color-bits/functions.js +70 -0
- package/esm/util/color-bits/index.d.ts +5 -0
- package/esm/util/color-bits/index.js +4 -0
- package/esm/util/color-bits/parse.d.ts +17 -0
- package/esm/util/color-bits/parse.js +382 -0
- package/esm/util/colorBits.d.ts +39 -0
- package/esm/util/colorBits.js +155 -0
- package/esm/util/colorRamp.d.ts +81 -0
- package/esm/util/colorRamp.js +244 -0
- 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/colord.d.ts +8 -0
- package/esm/util/colord.js +43 -191
- package/esm/util/convertCodingSequenceToPeptides.d.ts +17 -3
- package/esm/util/convertCodingSequenceToPeptides.js +51 -4
- package/esm/util/copyText.d.ts +18 -0
- package/esm/util/copyText.js +30 -0
- package/esm/util/copyToClipboard.d.ts +4 -0
- package/esm/util/copyToClipboard.js +58 -0
- package/esm/util/createAbortRotation.d.ts +115 -0
- package/esm/util/createAbortRotation.js +116 -0
- package/esm/util/createSvgRasterCanvas.d.ts +17 -0
- package/esm/util/createSvgRasterCanvas.js +22 -0
- package/esm/util/crypto.d.ts +24 -0
- package/esm/util/crypto.js +85 -2
- package/esm/util/cssColorParse.d.ts +15 -0
- package/esm/util/cssColorParse.js +53 -0
- package/esm/util/dataGridUtils.d.ts +9 -0
- package/esm/util/dataGridUtils.js +36 -0
- package/esm/util/dedupe.js +1 -0
- package/esm/util/deepEqual.d.ts +8 -0
- package/esm/util/deepEqual.js +22 -0
- package/esm/util/deepMerge.d.ts +20 -0
- package/esm/util/deepMerge.js +44 -0
- package/esm/util/diagonalizeRegions.d.ts +22 -0
- package/esm/util/diagonalizeRegions.js +187 -0
- package/esm/util/environment.d.ts +4 -0
- package/esm/util/environment.js +43 -0
- package/esm/util/eventPoint.d.ts +32 -0
- package/esm/util/eventPoint.js +28 -0
- 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.d.ts +6 -0
- package/esm/util/fetchAndMaybeUnzip.js +71 -0
- package/esm/util/fetchContext.d.ts +81 -0
- package/esm/util/fetchContext.js +59 -0
- package/esm/util/fetchHub.d.ts +17 -0
- package/esm/util/fetchHub.js +31 -0
- package/esm/util/fetchJson.d.ts +1 -0
- package/esm/util/fetchJson.js +7 -0
- package/esm/util/fetchPhases.d.ts +77 -0
- package/esm/util/fetchPhases.js +1 -0
- package/esm/util/fetchSeq.d.ts +4 -1
- package/esm/util/fetchSeq.js +18 -6
- package/esm/util/fieldReader.d.ts +17 -0
- package/esm/util/fieldReader.js +62 -0
- package/esm/util/fileHandleStore.d.ts +19 -2
- package/esm/util/fileHandleStore.js +95 -35
- package/esm/util/flatbush/index.d.ts +27 -6
- package/esm/util/flatbush/index.js +194 -218
- package/esm/util/formatBytes.d.ts +9 -0
- package/esm/util/formatBytes.js +18 -0
- package/esm/util/formatFastaStrings.d.ts +13 -0
- package/esm/util/formatFastaStrings.js +13 -0
- package/esm/util/formatGuessers.d.ts +30 -0
- package/esm/util/formatGuessers.js +69 -0
- package/esm/util/formatRelativeTime.d.ts +1 -0
- package/esm/util/formatRelativeTime.js +25 -0
- package/esm/util/frameCoalescer.d.ts +30 -0
- package/esm/util/frameCoalescer.js +22 -0
- package/esm/util/freezeDeep.d.ts +26 -0
- package/esm/util/freezeDeep.js +39 -0
- package/esm/util/geneticCodes.d.ts +56 -0
- package/esm/util/geneticCodes.js +371 -0
- package/esm/util/getFileName.d.ts +11 -0
- package/esm/util/getFileName.js +34 -0
- package/esm/util/getLocationUri.d.ts +49 -0
- package/esm/util/getLocationUri.js +63 -0
- package/esm/util/getRelativeX.d.ts +4 -0
- package/esm/util/getRelativeX.js +7 -0
- package/esm/util/getStr.d.ts +6 -0
- package/esm/util/getStr.js +15 -0
- package/esm/util/groupKeys.d.ts +77 -0
- package/esm/util/groupKeys.js +155 -0
- package/esm/util/highlights.d.ts +25 -0
- package/esm/util/highlights.js +87 -0
- package/esm/util/hooks.d.ts +189 -0
- package/esm/util/hooks.js +485 -0
- package/esm/util/htmlText.d.ts +13 -0
- package/esm/util/htmlText.js +66 -0
- package/esm/util/idMaker.d.ts +1 -1
- package/esm/util/idMaker.js +31 -18
- package/esm/util/index.d.ts +82 -268
- package/esm/util/index.js +137 -853
- package/esm/util/indexCandidates.d.ts +20 -0
- package/esm/util/indexCandidates.js +43 -0
- package/esm/util/installClearHoverOnSurfaceMove.d.ts +40 -0
- package/esm/util/installClearHoverOnSurfaceMove.js +41 -0
- package/esm/util/installFetch.d.ts +234 -0
- package/esm/util/installFetch.js +205 -0
- package/esm/util/installInitAutorun.d.ts +63 -0
- package/esm/util/installInitAutorun.js +107 -0
- package/esm/util/installPrerequisiteFetch.d.ts +115 -0
- package/esm/util/installPrerequisiteFetch.js +111 -0
- package/esm/util/intervals.d.ts +20 -0
- package/esm/util/intervals.js +37 -0
- package/esm/util/io/RemoteFileWithRangeCache.d.ts +10 -11
- package/esm/util/io/RemoteFileWithRangeCache.js +10 -148
- package/esm/util/io/index.d.ts +39 -2
- package/esm/util/io/index.js +120 -12
- package/esm/util/isDataCurrent.d.ts +9 -0
- package/esm/util/isDataCurrent.js +12 -0
- package/esm/util/isTextEntryFocused.d.ts +7 -0
- package/esm/util/isTextEntryFocused.js +16 -0
- package/esm/util/isWebWorker.js +1 -2
- package/esm/util/iupac.d.ts +4 -0
- package/esm/util/iupac.js +59 -0
- package/esm/util/jexl.js +146 -19
- package/esm/util/jexlFilterRows.d.ts +89 -0
- package/esm/util/jexlFilterRows.js +252 -0
- package/esm/util/jexlFilters.d.ts +68 -0
- package/esm/util/jexlFilters.js +61 -0
- package/esm/util/jexlStrings.d.ts +21 -1
- package/esm/util/jexlStrings.js +20 -14
- package/esm/util/layouts/GranularRectLayout.d.ts +20 -25
- package/esm/util/layouts/GranularRectLayout.js +116 -356
- package/esm/util/layouts/index.d.ts +1 -7
- package/esm/util/layouts/index.js +2 -6
- package/esm/util/layouts/intervalUtils.d.ts +12 -1
- package/esm/util/layouts/intervalUtils.js +13 -31
- package/esm/util/layouts/placeRect.d.ts +50 -0
- package/esm/util/layouts/placeRect.js +97 -0
- 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/leadingEdgeAutorun.d.ts +40 -0
- package/esm/util/leadingEdgeAutorun.js +51 -0
- package/esm/util/legendCandidates.d.ts +72 -0
- package/esm/util/legendCandidates.js +138 -0
- package/esm/util/librpc.d.ts +5 -2
- package/esm/util/librpc.js +6 -1
- package/esm/util/linkify.js +2 -0
- package/esm/util/locString.d.ts +72 -0
- package/esm/util/locString.js +178 -7
- package/esm/util/locStringsToRegions.d.ts +10 -0
- package/esm/util/locStringsToRegions.js +35 -0
- package/esm/util/localStorage.d.ts +36 -0
- package/esm/util/localStorage.js +137 -0
- package/esm/util/makeAssembly.d.ts +54 -0
- package/esm/util/makeAssembly.js +52 -0
- package/esm/util/makeTrackId.d.ts +14 -0
- package/esm/util/makeTrackId.js +14 -0
- 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/matchTrackId.d.ts +11 -0
- package/esm/util/matchTrackId.js +14 -0
- package/esm/util/measureText.d.ts +24 -0
- package/esm/util/measureText.js +51 -0
- package/esm/util/mst-reflection.d.ts +3 -11
- package/esm/util/mst-reflection.js +3 -52
- package/esm/util/mstUtils.d.ts +97 -0
- package/esm/util/mstUtils.js +137 -0
- package/esm/util/nanoid.d.ts +0 -4
- package/esm/util/nanoid.js +10 -20
- package/esm/util/numericUtils.d.ts +27 -0
- package/esm/util/numericUtils.js +143 -0
- package/esm/util/numericValue.d.ts +14 -0
- package/esm/util/numericValue.js +34 -0
- package/esm/util/objectUtils.d.ts +2 -0
- package/esm/util/objectUtils.js +9 -0
- package/esm/util/offscreenCanvasPonyfill.d.ts +5 -4
- package/esm/util/offscreenCanvasPonyfill.js +5 -47
- package/esm/util/openFeatureWidget.d.ts +38 -0
- package/esm/util/openFeatureWidget.js +64 -0
- package/esm/util/openViews.d.ts +17 -0
- package/esm/util/openViews.js +22 -0
- package/esm/util/paintLayer.d.ts +32 -0
- package/esm/util/paintLayer.js +33 -0
- package/esm/util/parentWalk.d.ts +32 -0
- package/esm/util/parentWalk.js +84 -0
- package/esm/util/parseLineByLine.d.ts +44 -2
- package/esm/util/parseLineByLine.js +150 -15
- package/esm/util/parseMotifList.d.ts +17 -0
- package/esm/util/parseMotifList.js +69 -0
- package/esm/util/pluginStore.d.ts +111 -0
- package/esm/util/pluginStore.js +254 -0
- package/esm/util/pointerPresence.d.ts +5 -0
- package/esm/util/pointerPresence.js +21 -0
- package/esm/util/preloadComponent.d.ts +5 -0
- package/esm/util/preloadComponent.js +11 -0
- package/esm/util/progress.d.ts +459 -0
- package/esm/util/progress.js +821 -0
- package/esm/util/quantileExtent.d.ts +49 -0
- package/esm/util/quantileExtent.js +162 -0
- package/esm/util/range.d.ts +46 -1
- package/esm/util/range.js +68 -2
- package/esm/util/renameRegions.d.ts +41 -0
- package/esm/util/renameRegions.js +143 -0
- package/esm/util/renderToStaticMarkup.d.ts +2 -0
- package/esm/util/renderToStaticMarkup.js +60 -0
- package/esm/util/reorder.d.ts +35 -0
- package/esm/util/reorder.js +83 -0
- package/esm/util/resolveRowHeight.d.ts +27 -0
- package/esm/util/resolveRowHeight.js +30 -0
- package/esm/util/revlist.d.ts +13 -0
- package/esm/util/revlist.js +14 -0
- package/esm/util/rowStackGeometry.d.ts +66 -0
- package/esm/util/rowStackGeometry.js +70 -0
- package/esm/util/rpc.d.ts +16 -1
- package/esm/util/rpc.js +12 -1
- package/esm/util/rxjs.d.ts +30 -2
- package/esm/util/rxjs.js +85 -10
- package/esm/util/sameStrings.d.ts +16 -0
- package/esm/util/sameStrings.js +20 -0
- 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 +5 -0
- package/esm/util/scrollLatch.js +67 -0
- package/esm/util/selectEncodedFeature.d.ts +16 -0
- package/esm/util/selectEncodedFeature.js +34 -0
- package/esm/util/selectNamedRegions.d.ts +136 -0
- package/esm/util/selectNamedRegions.js +222 -0
- package/esm/util/seqUtils.d.ts +17 -0
- package/esm/util/seqUtils.js +80 -0
- package/esm/util/sessionServices.d.ts +29 -0
- package/esm/util/sessionServices.js +46 -0
- package/esm/util/sessionSharing.d.ts +40 -0
- package/esm/util/sessionSharing.js +154 -0
- package/esm/util/sessionStorage.d.ts +1 -0
- package/esm/util/sessionStorage.js +15 -0
- package/esm/util/setStackTraceLimit.d.ts +6 -0
- package/esm/util/setStackTraceLimit.js +20 -0
- 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 +111 -4
- package/esm/util/simpleFeature.js +181 -29
- package/esm/util/springAnimate.d.ts +20 -0
- package/esm/util/springAnimate.js +80 -0
- package/esm/util/starFusion.d.ts +26 -0
- package/esm/util/starFusion.js +37 -0
- package/esm/util/stats.d.ts +25 -2
- package/esm/util/stats.js +39 -8
- package/esm/util/stepTables.d.ts +82 -0
- package/esm/util/stepTables.js +243 -0
- package/esm/util/stringUtils.d.ts +5 -0
- package/esm/util/stringUtils.js +34 -0
- package/esm/util/svAlt.d.ts +145 -0
- package/esm/util/svAlt.js +364 -0
- package/esm/util/svgColorProps.d.ts +18 -0
- package/esm/util/svgColorProps.js +55 -0
- package/esm/util/systemColorScheme.d.ts +12 -0
- package/esm/util/systemColorScheme.js +27 -0
- package/esm/util/tabix.d.ts +125 -0
- package/esm/util/tabix.js +148 -0
- package/esm/util/tags.d.ts +2 -0
- package/esm/util/tags.js +5 -0
- package/esm/util/temporaryAssembly.d.ts +21 -0
- package/esm/util/temporaryAssembly.js +29 -0
- package/esm/util/thresholdScale.d.ts +91 -0
- package/esm/util/thresholdScale.js +166 -0
- package/esm/util/tickLabels.d.ts +36 -0
- package/esm/util/tickLabels.js +45 -0
- package/esm/util/timeGate.d.ts +25 -0
- package/esm/util/timeGate.js +78 -0
- package/esm/util/trackConfigDelta.d.ts +84 -0
- package/esm/util/trackConfigDelta.js +206 -0
- package/esm/util/tracks.d.ts +431 -30
- package/esm/util/tracks.js +952 -185
- package/esm/util/translateTranscript.d.ts +44 -0
- package/esm/util/translateTranscript.js +102 -0
- package/esm/util/tss-react/cssAndCx.js +11 -66
- package/esm/util/tss-react/index.d.ts +11 -2
- package/esm/util/tss-react/index.js +9 -2
- package/esm/util/tss-react/makeStyles.js +7 -4
- package/esm/util/tss-react/mergeClasses.js +1 -0
- package/esm/util/tss-react/tools/classnames.d.ts +3 -0
- package/esm/util/tss-react/tools/classnames.js +3 -0
- package/esm/util/tss-react/tools/getDependencyArrayRef.d.ts +18 -0
- package/esm/util/tss-react/tools/getDependencyArrayRef.js +19 -0
- package/esm/util/tss-react/types.d.ts +1 -1
- package/esm/util/tss-react/types.js +1 -6
- package/esm/util/types/ElementId.js +1 -1
- package/esm/util/types/data.d.ts +73 -0
- package/esm/util/types/data.js +41 -0
- package/esm/util/types/index.d.ts +459 -121
- package/esm/util/types/index.js +96 -64
- package/esm/util/types/isAny.d.ts +11 -0
- package/esm/util/types/isAny.js +1 -0
- package/esm/util/types/mst.d.ts +74 -47
- package/esm/util/types/mst.js +31 -22
- package/esm/util/types/predicate.d.ts +9 -0
- package/esm/util/types/predicate.js +1 -0
- package/esm/util/types/renameIds.d.ts +1 -0
- package/esm/util/types/renameIds.js +29 -0
- package/esm/util/types/renderingServices.d.ts +16 -0
- package/esm/util/types/renderingServices.js +1 -0
- package/esm/util/types/services.d.ts +55 -0
- package/esm/util/types/services.js +10 -0
- package/esm/util/types/util.d.ts +8 -2
- package/esm/util/unknownSnapshotKeys.d.ts +51 -0
- package/esm/util/unknownSnapshotKeys.js +82 -0
- package/esm/util/unzip.d.ts +1 -0
- package/esm/util/unzip.js +6 -0
- package/esm/util/useEventCallback.d.ts +1 -0
- package/esm/util/useEventCallback.js +16 -0
- package/esm/util/useFeatureSequence.d.ts +13 -7
- package/esm/util/useFeatureSequence.js +55 -77
- package/esm/util/useFetch.d.ts +55 -0
- package/esm/util/useFetch.js +197 -0
- package/esm/util/useFetchPlugins.d.ts +16 -0
- package/esm/util/useFetchPlugins.js +18 -0
- package/esm/util/useMeasure.d.ts +11 -1
- package/esm/util/useMeasure.js +20 -6
- package/esm/util/usePanZoom.d.ts +75 -0
- package/esm/util/usePanZoom.js +175 -0
- package/esm/util/usePanelVirtualScroll.d.ts +9 -0
- package/esm/util/usePanelVirtualScroll.js +15 -0
- package/esm/util/usePointerDrag.d.ts +37 -0
- package/esm/util/usePointerDrag.js +61 -0
- package/esm/util/useRafCommit.d.ts +4 -0
- package/esm/util/useRafCommit.js +50 -0
- package/esm/util/useResizeDrag.d.ts +91 -0
- package/esm/util/useResizeDrag.js +105 -0
- package/esm/util/useRowVirtualScroll.d.ts +9 -0
- package/esm/util/useRowVirtualScroll.js +22 -0
- package/esm/util/useVirtualScrollWheel.d.ts +23 -0
- package/esm/util/useVirtualScrollWheel.js +74 -0
- package/esm/util/viewHighlights.d.ts +3 -0
- package/esm/util/viewHighlights.js +5 -0
- package/esm/util/viewStatus.d.ts +90 -0
- package/esm/util/viewStatus.js +54 -0
- package/esm/util/virtualRange.d.ts +36 -0
- package/esm/util/virtualRange.js +26 -0
- package/esm/util/webStorage.d.ts +26 -0
- package/esm/util/webStorage.js +92 -0
- package/esm/util/wheelZoom.d.ts +65 -0
- package/esm/util/wheelZoom.js +297 -0
- package/esm/util/whenViewSettled.d.ts +74 -0
- package/esm/util/whenViewSettled.js +77 -0
- package/esm/util/withFeatureDetails.d.ts +34 -0
- package/esm/util/withFeatureDetails.js +59 -0
- package/esm/util/withLaunchInput.d.ts +174 -0
- package/esm/util/withLaunchInput.js +274 -0
- package/package.json +290 -820
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.d.ts +0 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.js +0 -14
- package/esm/BaseFeatureWidget/BaseFeatureDetail/types.d.ts +0 -7
- 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 -9
- package/esm/ReExports/DataGrid.d.ts +0 -1
- package/esm/ReExports/DataGrid.js +0 -1
- package/esm/ReExports/index.d.ts +0 -1
- package/esm/ReExports/index.js +0 -1
- package/esm/configuration/util.d.ts +0 -10
- package/esm/configuration/util.js +0 -123
- package/esm/data_adapters/BaseAdapter/BaseOptions.d.ts +0 -18
- package/esm/data_adapters/util.d.ts +0 -1
- package/esm/data_adapters/util.js +0 -6
- package/esm/pluggableElementTypes/GlyphType.d.ts +0 -43
- package/esm/pluggableElementTypes/GlyphType.js +0 -18
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/fetchSequence.d.ts +0 -5
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/fetchSequence.js +0 -17
- package/esm/pluggableElementTypes/renderers/BoxRendererType.d.ts +0 -52
- package/esm/pluggableElementTypes/renderers/BoxRendererType.js +0 -78
- package/esm/pluggableElementTypes/renderers/CircularChordRendererType.d.ts +0 -4
- package/esm/pluggableElementTypes/renderers/CircularChordRendererType.js +0 -4
- package/esm/pluggableElementTypes/renderers/FeatureRendererType.d.ts +0 -58
- package/esm/pluggableElementTypes/renderers/FeatureRendererType.js +0 -77
- package/esm/pluggableElementTypes/renderers/LayoutSession.d.ts +0 -31
- package/esm/pluggableElementTypes/renderers/LayoutSession.js +0 -40
- package/esm/pluggableElementTypes/renderers/RendererType.d.ts +0 -28
- package/esm/pluggableElementTypes/renderers/RendererType.js +0 -20
- package/esm/pluggableElementTypes/renderers/ServerSideRendererType.d.ts +0 -58
- package/esm/pluggableElementTypes/renderers/ServerSideRendererType.js +0 -108
- package/esm/pluggableElementTypes/renderers/index.d.ts +0 -6
- package/esm/pluggableElementTypes/renderers/index.js +0 -6
- package/esm/pluggableElementTypes/renderers/util.d.ts +0 -3
- package/esm/pluggableElementTypes/renderers/util.js +0 -14
- package/esm/rpc/baseRpcConfig.d.ts +0 -8
- package/esm/rpc/baseRpcConfig.js +0 -10
- package/esm/rpc/mainThreadRpcConfig.d.ts +0 -8
- package/esm/rpc/mainThreadRpcConfig.js +0 -8
- package/esm/rpc/methods/CoreGetFeatureDensityStats.d.ts +0 -17
- package/esm/rpc/methods/CoreGetFeatureDensityStats.js +0 -25
- package/esm/rpc/methods/CoreGetFeatureDetails.d.ts +0 -11
- package/esm/rpc/methods/CoreGetFeatureDetails.js +0 -24
- package/esm/rpc/methods/CoreGetFileInfo.d.ts +0 -9
- package/esm/rpc/methods/CoreGetFileInfo.js +0 -15
- package/esm/rpc/methods/CoreRender.d.ts +0 -14
- package/esm/rpc/methods/CoreRender.js +0 -40
- package/esm/rpc/methods/CoreSaveFeatureData.d.ts +0 -16
- package/esm/rpc/methods/CoreSaveFeatureData.js +0 -32
- package/esm/rpc/methods/util.d.ts +0 -15
- package/esm/rpc/methods/util.js +0 -7
- package/esm/rpc/webWorkerRpcConfig.d.ts +0 -8
- package/esm/rpc/webWorkerRpcConfig.js +0 -8
- package/esm/ui/MenuButton.d.ts +0 -1
- package/esm/ui/MenuButton.js +0 -1
- package/esm/ui/MenuItems.d.ts +0 -15
- package/esm/ui/MenuItems.js +0 -59
- package/esm/ui/useEvent.d.ts +0 -1
- package/esm/ui/useEvent.js +0 -10
- package/esm/util/blobToDataURL.d.ts +0 -1
- package/esm/util/blobToDataURL.js +0 -14
- package/esm/util/compositeMap.d.ts +0 -11
- package/esm/util/compositeMap.js +0 -59
- package/esm/util/flatqueue/index.d.ts +0 -11
- package/esm/util/flatqueue/index.js +0 -61
- package/esm/util/layouts/BaseLayout.d.ts +0 -30
- package/esm/util/layouts/MultiLayout.d.ts +0 -12
- package/esm/util/layouts/MultiLayout.js +0 -40
- package/esm/util/layouts/PileupLayout.d.ts +0 -41
- package/esm/util/layouts/PileupLayout.js +0 -202
- package/esm/util/layouts/PrecomputedLayout.d.ts +0 -30
- package/esm/util/layouts/PrecomputedLayout.js +0 -71
- package/esm/util/layouts/SceneGraph.d.ts +0 -31
- package/esm/util/layouts/SceneGraph.js +0 -121
- package/esm/util/makeAbortableReaction.d.ts +0 -3
- package/esm/util/makeAbortableReaction.js +0 -47
- package/esm/util/map-obj/index.d.ts +0 -13
- package/esm/util/map-obj/index.js +0 -92
- package/esm/util/nextTick.d.ts +0 -1
- package/esm/util/nextTick.js +0 -3
- package/esm/util/offscreenCanvasGetSerializingSvg.d.ts +0 -5
- package/esm/util/offscreenCanvasGetSerializingSvg.js +0 -9
- package/esm/util/offscreenCanvasUtils.d.ts +0 -12
- package/esm/util/offscreenCanvasUtils.js +0 -19
- package/esm/util/renderToAbstractCanvas.d.ts +0 -17
- package/esm/util/renderToAbstractCanvas.js +0 -53
- package/esm/util/stopToken.d.ts +0 -19
- package/esm/util/stopToken.js +0 -90
- package/esm/util/transferables.d.ts +0 -2
- package/esm/util/transferables.js +0 -35
- package/esm/util/tss-react/mui/index.d.ts +0 -1
- package/esm/util/tss-react/mui/index.js +0 -1
- package/esm/util/tss-react/mui/mui.d.ts +0 -10
- package/esm/util/tss-react/mui/mui.js +0 -5
- package/esm/util/when.d.ts +0 -1
- package/esm/util/when.js +0 -1
- /package/esm/{BaseFeatureWidget/BaseFeatureDetail/types.js → data_adapters/BaseAdapter/CytobandAdapter.js} +0 -0
- /package/esm/data_adapters/BaseAdapter/{BaseOptions.js → zoomRange.js} +0 -0
- /package/esm/{util/layouts/BaseLayout.js → rpc/RpcRegistry.js} +0 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { createStatusFanOut, downloadStatus } from './progress.js';
|
|
2
|
+
import { calculateRedispatchRange } from './range.js';
|
|
3
|
+
/**
|
|
4
|
+
* Read the feature type (column 3) from a raw GFF3/GTF line without a full
|
|
5
|
+
* split. Used only to classify a line for redispatch.
|
|
6
|
+
*/
|
|
7
|
+
function extractType(line) {
|
|
8
|
+
const t1 = line.indexOf('\t');
|
|
9
|
+
const t2 = t1 === -1 ? -1 : line.indexOf('\t', t1 + 1);
|
|
10
|
+
const t3 = t2 === -1 ? -1 : line.indexOf('\t', t2 + 1);
|
|
11
|
+
// a truncated line has no column 3 to read; a final column 3 (no trailing
|
|
12
|
+
// tab) runs to the end of the line rather than one character short of it
|
|
13
|
+
return t2 === -1 ? '' : line.slice(t2 + 1, t3 === -1 ? line.length : t3);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Fetch the tabix lines for a region under a "Downloading features" progress
|
|
17
|
+
* label, capturing each line's byte offset, indexed start/end, and feature type
|
|
18
|
+
* into a {@link TabixLine}. Shared by the GFF3 and GTF tabix adapters.
|
|
19
|
+
*
|
|
20
|
+
* The signal becomes the read's `AbortSignal`, so a cancelled fetch drops
|
|
21
|
+
* its block reads at the socket instead of downloading them and discarding the
|
|
22
|
+
* lines. @gmod/tabix aborts a block shared between callers only once every
|
|
23
|
+
* joined caller has aborted (`AggregateAbortController`), so this can't cancel a
|
|
24
|
+
* chunk another region still needs.
|
|
25
|
+
*/
|
|
26
|
+
export function readTabixLines(gff, refName, start, end, statusCallback, signal) {
|
|
27
|
+
const lines = [];
|
|
28
|
+
return downloadStatus('Downloading features', statusCallback, onProgress => gff.getLines(refName, start, end, {
|
|
29
|
+
lineCallback: (line, offset, s, e) => {
|
|
30
|
+
lines.push({
|
|
31
|
+
line,
|
|
32
|
+
offset,
|
|
33
|
+
start: s,
|
|
34
|
+
end: e,
|
|
35
|
+
type: extractType(line),
|
|
36
|
+
});
|
|
37
|
+
},
|
|
38
|
+
onProgress,
|
|
39
|
+
signal,
|
|
40
|
+
})).then(() => lines);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Read a region's tabix lines, then — if any feature found there extends past
|
|
44
|
+
* the query — read the overhang on either side, so a parent line's children (a
|
|
45
|
+
* gene's exons, a transcript's CDS) outside the original window are pulled in
|
|
46
|
+
* and the parent/child tree resolves fully. `expands` decides which lines widen
|
|
47
|
+
* the bound, so one chromosome-spanning record can't force a whole-chromosome
|
|
48
|
+
* refetch; {@link calculateRedispatchRange} says why that is a predicate.
|
|
49
|
+
*
|
|
50
|
+
* **There is one control, and skipping the expansion is a value of it**: an
|
|
51
|
+
* `expands` that admits nothing reads the query and stops. A caller that wants
|
|
52
|
+
* that says so to its adapter, which is the layer that knows whether its format
|
|
53
|
+
* can honour it — see `Gff3TabixAdapter`, and `GtfTabixAdapter` for a format
|
|
54
|
+
* that cannot.
|
|
55
|
+
*
|
|
56
|
+
* **The flanks, not the union.** Re-reading `[minStart, maxEnd]` returns
|
|
57
|
+
* everything the first read already had — a second full read of the query range
|
|
58
|
+
* to collect a gene's tail. At the window sizes a GFF3 track is browsed at that
|
|
59
|
+
* is most of the work done twice, and it is the reason the download bar halved:
|
|
60
|
+
* the expansion arrived as a second phase whose total was the whole region
|
|
61
|
+
* again, so a region that had just reported 100% dropped to 50% and climbed back
|
|
62
|
+
* (measured: two `65536/65536` phases for one query). Reading only what is
|
|
63
|
+
* missing leaves the second phase the size of the overhang.
|
|
64
|
+
*
|
|
65
|
+
* The line sequence is unchanged by that. Tabix returns the lines *overlapping*
|
|
66
|
+
* a range, so the three ranges' lines are the union range's lines, with the ones
|
|
67
|
+
* straddling a boundary appearing twice; `offset` is a line's position in the
|
|
68
|
+
* file, so deduplicating and sorting on it reconstructs file order — which for
|
|
69
|
+
* an indexed file is coordinate order — exactly.
|
|
70
|
+
*
|
|
71
|
+
* The two flanks are read concurrently and so need a status slot each, or they
|
|
72
|
+
* take turns overwriting one label. Exactly one expansion happens: a flank's own
|
|
73
|
+
* overhang is not chased, which bounds the work at three reads per query and
|
|
74
|
+
* usually two.
|
|
75
|
+
*
|
|
76
|
+
* Shared by the GFF3 and GTF tabix adapters, which differ only in how they
|
|
77
|
+
* parse the returned lines.
|
|
78
|
+
*/
|
|
79
|
+
export async function readTabixLinesRedispatched(file,
|
|
80
|
+
// the region's locus only — kept structural, like TabixLineSource above, so
|
|
81
|
+
// this module stays free of the `types` barrel and its MST models
|
|
82
|
+
query, expands, opts = {}) {
|
|
83
|
+
const { statusCallback, signal } = opts;
|
|
84
|
+
// `cb` is not optional: each read decides where it reports, and the flanks
|
|
85
|
+
// report somewhere the first read does not
|
|
86
|
+
const read = (start, end, cb) => readTabixLines(file, query.refName, start, end, cb, signal);
|
|
87
|
+
const lines = await read(query.start, query.end, statusCallback);
|
|
88
|
+
const redispatch = calculateRedispatchRange(lines, expands, query.start, query.end);
|
|
89
|
+
if (redispatch) {
|
|
90
|
+
const slot = createStatusFanOut(statusCallback);
|
|
91
|
+
const flanks = await Promise.all([
|
|
92
|
+
redispatch.start < query.start
|
|
93
|
+
? read(redispatch.start, query.start, slot())
|
|
94
|
+
: [],
|
|
95
|
+
redispatch.end > query.end ? read(query.end, redispatch.end, slot()) : [],
|
|
96
|
+
]);
|
|
97
|
+
return mergeTabixLines(lines, ...flanks);
|
|
98
|
+
}
|
|
99
|
+
return lines;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* The lines of several overlapping reads as one file-ordered run, each line
|
|
103
|
+
* once. Keyed on `offset` because that is what a line *is* — its position in the
|
|
104
|
+
* file — so a line two ranges both returned collapses to one entry and the sort
|
|
105
|
+
* puts the whole set back in the order a single read over their union would have
|
|
106
|
+
* produced.
|
|
107
|
+
*/
|
|
108
|
+
function mergeTabixLines(...groups) {
|
|
109
|
+
const byOffset = new Map();
|
|
110
|
+
for (const group of groups) {
|
|
111
|
+
for (const line of group) {
|
|
112
|
+
byOffset.set(line.offset, line);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return [...byOffset.values()].sort((a, b) => a.offset - b.offset);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* The header lines of a tabix-indexed file, however that file kept them.
|
|
119
|
+
*
|
|
120
|
+
* `getHeader()` alone is not that: it returns only lines beginning with the
|
|
121
|
+
* index's meta character (`#`). A header that is a plain row — which is what
|
|
122
|
+
* `tabix -S N` exists for, and what PLINK `.ld`, bedGraph and BED deflines
|
|
123
|
+
* routinely are — comes back as the empty string, even though the index records
|
|
124
|
+
* N in `skipLines`.
|
|
125
|
+
*
|
|
126
|
+
* Reading both is not backwards compatibility, and does not become unnecessary
|
|
127
|
+
* once our own files are written with commented headers. A bare header is the
|
|
128
|
+
* shape the data's publisher chose: Pan-UKB's TSVs and PLINK's `.ld` are
|
|
129
|
+
* distributed that way, and `-S N` is the only way to index one without
|
|
130
|
+
* rewriting a file the user did not write. Advice about how to generate a file
|
|
131
|
+
* reaches the files we generate; this reaches the rest.
|
|
132
|
+
*
|
|
133
|
+
* An adapter that stops at `getHeader()` therefore cannot tell "this file has
|
|
134
|
+
* no header" from "this file's header is not commented", and quietly falls back
|
|
135
|
+
* to an assumed column layout. That has cost real information more than once: a
|
|
136
|
+
* PLINK LD file lost its D' column, so `ldMetric: 'dprime'` silently served r²,
|
|
137
|
+
* and a bedGraph loses the names of its value columns. Nothing errors, because
|
|
138
|
+
* the assumed layout parses.
|
|
139
|
+
*
|
|
140
|
+
* That policy now lives in @gmod/tabix 3.5.4 as getHeaderLines, next to the
|
|
141
|
+
* index metadata that decides it, so this is a delegate. Deciding it there also
|
|
142
|
+
* costs one read of the file's leading blocks rather than two: asking for the
|
|
143
|
+
* commented block and then the counted rows used to fetch and decompress the
|
|
144
|
+
* same bytes twice, which every bare-header file did on every call.
|
|
145
|
+
*/
|
|
146
|
+
export function readTabixHeaderLines(file) {
|
|
147
|
+
return file.getHeaderLines();
|
|
148
|
+
}
|
package/esm/util/tags.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { AnyConfigurationModel } from '../configuration/index.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Whether a track config names an assembly the session holds as **temporary** —
|
|
4
|
+
* the read-vs-ref pair a comparative view synthesizes, which goes away when that
|
|
5
|
+
* view closes (`releaseTemporaryAssemblies`).
|
|
6
|
+
*
|
|
7
|
+
* `some`, not `every`: a config half of whose assemblies survive is still one
|
|
8
|
+
* nothing can draw once the other half is gone, and unlike a sweep that DELETES
|
|
9
|
+
* a config this question never has to decide whose it is. The `every`/`some`
|
|
10
|
+
* distinction is what made the session-track sweep ADR-084 removed a judgment
|
|
11
|
+
* call; a question asked at the moment of the write has no such problem.
|
|
12
|
+
*
|
|
13
|
+
* Down here rather than beside the contract check that started it
|
|
14
|
+
* (`product-core/Session/temporaryAssemblyTracks.ts`) because two callers now
|
|
15
|
+
* ask it and they are on opposite sides of the dependency: the check and the
|
|
16
|
+
* track menu's copy guard in product-core, and `addTrackFromWidget` in this
|
|
17
|
+
* package, which routes a track around the session lists entirely when the
|
|
18
|
+
* answer is yes. A second copy of the predicate is the thing to avoid — a copied
|
|
19
|
+
* guard is where the escape clause gets added to only one of them.
|
|
20
|
+
*/
|
|
21
|
+
export declare function namesTemporaryAssembly(session: unknown, trackConf: AnyConfigurationModel | Record<string, unknown>): boolean;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { readConfObject } from '../configuration/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Whether a track config names an assembly the session holds as **temporary** —
|
|
4
|
+
* the read-vs-ref pair a comparative view synthesizes, which goes away when that
|
|
5
|
+
* view closes (`releaseTemporaryAssemblies`).
|
|
6
|
+
*
|
|
7
|
+
* `some`, not `every`: a config half of whose assemblies survive is still one
|
|
8
|
+
* nothing can draw once the other half is gone, and unlike a sweep that DELETES
|
|
9
|
+
* a config this question never has to decide whose it is. The `every`/`some`
|
|
10
|
+
* distinction is what made the session-track sweep ADR-084 removed a judgment
|
|
11
|
+
* call; a question asked at the moment of the write has no such problem.
|
|
12
|
+
*
|
|
13
|
+
* Down here rather than beside the contract check that started it
|
|
14
|
+
* (`product-core/Session/temporaryAssemblyTracks.ts`) because two callers now
|
|
15
|
+
* ask it and they are on opposite sides of the dependency: the check and the
|
|
16
|
+
* track menu's copy guard in product-core, and `addTrackFromWidget` in this
|
|
17
|
+
* package, which routes a track around the session lists entirely when the
|
|
18
|
+
* answer is yes. A second copy of the predicate is the thing to avoid — a copied
|
|
19
|
+
* guard is where the escape clause gets added to only one of them.
|
|
20
|
+
*/
|
|
21
|
+
export function namesTemporaryAssembly(session, trackConf) {
|
|
22
|
+
const temporary = session
|
|
23
|
+
.temporaryAssemblies;
|
|
24
|
+
if (!temporary?.length) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
const names = readConfObject(trackConf, 'assemblyNames');
|
|
28
|
+
return !!names?.some(name => temporary.some(a => a.name === name));
|
|
29
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { CategoricalScale } from '../ui/colorScale.ts';
|
|
2
|
+
import type { CategoricalField } from './categoricalField.ts';
|
|
3
|
+
/**
|
|
4
|
+
* #api
|
|
5
|
+
* A domain written as strings — the shared `domain` slot is a `stringArray` —
|
|
6
|
+
* read back as the numbers it names. A member that is not a number reads NaN,
|
|
7
|
+
* which every comparison against it declines.
|
|
8
|
+
*/
|
|
9
|
+
export declare function numericDomain(domain: readonly (string | number)[]): number[];
|
|
10
|
+
/**
|
|
11
|
+
* #api
|
|
12
|
+
* A threshold scale's cut points as {@link thresholdIndex} walks them: the
|
|
13
|
+
* numbers the domain names, ascending. Cuts written high to low, as p-value
|
|
14
|
+
* thresholds often are, left the middle interval unreachable, the walk stopping
|
|
15
|
+
* at the first cut a value is under.
|
|
16
|
+
*/
|
|
17
|
+
export declare function thresholdCuts(domain: readonly (string | number)[]): number[];
|
|
18
|
+
/**
|
|
19
|
+
* #api
|
|
20
|
+
* The bin a value falls in: how many of the ascending cut points it is at or
|
|
21
|
+
* past, so a palette with one more entry than the domain paints it as
|
|
22
|
+
* `palette[thresholdIndex(value, domain)]`. A value that is not a number is
|
|
23
|
+
* in no bin and answers -1; an infinite one takes the end bin on its side, as
|
|
24
|
+
* d3's threshold scale places it, so a `-log10` of a zero p-value lands in
|
|
25
|
+
* the top bin.
|
|
26
|
+
*/
|
|
27
|
+
export declare function thresholdIndex(value: unknown, domain: readonly number[]): number;
|
|
28
|
+
/**
|
|
29
|
+
* #api
|
|
30
|
+
* The colour of each interval, in order: the declared palette, and the
|
|
31
|
+
* default categorical palette where it runs out.
|
|
32
|
+
*/
|
|
33
|
+
export declare function thresholdPalette(bins: number, palette?: readonly string[]): string[];
|
|
34
|
+
/**
|
|
35
|
+
* #api
|
|
36
|
+
* What a threshold scale's bins are called in a key, one label per palette
|
|
37
|
+
* entry: `< a` below the first cut, `a – b` between two, `≥ b` past the last.
|
|
38
|
+
*/
|
|
39
|
+
export declare function thresholdLabels(domain: readonly number[]): string[];
|
|
40
|
+
/**
|
|
41
|
+
* #api
|
|
42
|
+
* The key a value holding text that is no number files under on a threshold
|
|
43
|
+
* scale, painted the misconfiguration grey rather than passing for a missing
|
|
44
|
+
* value.
|
|
45
|
+
*/
|
|
46
|
+
export declare const NOT_A_NUMBER_LABEL = "(not a number)";
|
|
47
|
+
/**
|
|
48
|
+
* #api
|
|
49
|
+
* A threshold key's rows: every interval, painted or not, since the bins are
|
|
50
|
+
* the whole domain, then the not-a-number and no-value rows where a feature
|
|
51
|
+
* took one, in the order `thresholdField` sorts them.
|
|
52
|
+
*/
|
|
53
|
+
export declare function thresholdKeyEntries(cuts: readonly number[], range: readonly string[] | undefined, met: {
|
|
54
|
+
missing?: boolean;
|
|
55
|
+
notNumber?: boolean;
|
|
56
|
+
}, names?: readonly string[]): {
|
|
57
|
+
value: string;
|
|
58
|
+
label: string;
|
|
59
|
+
color: string;
|
|
60
|
+
missing?: true;
|
|
61
|
+
}[];
|
|
62
|
+
/**
|
|
63
|
+
* #api
|
|
64
|
+
* The rows a ramp's key lists beside its bar once a feature painted one: the
|
|
65
|
+
* not-a-number and no-value rows a threshold's key ends with. Empty while
|
|
66
|
+
* neither painted.
|
|
67
|
+
*/
|
|
68
|
+
export declare function rampGapScales(id: string, met: {
|
|
69
|
+
missing?: boolean;
|
|
70
|
+
notNumber?: boolean;
|
|
71
|
+
}): CategoricalScale[];
|
|
72
|
+
/**
|
|
73
|
+
* #api
|
|
74
|
+
* Whether a field holds no value at all, as against text that fails to parse:
|
|
75
|
+
* absent, empty, or a VCF's `AF=.`, which arrives as `[undefined]`.
|
|
76
|
+
*/
|
|
77
|
+
export declare function isMissing(value: unknown): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* #api
|
|
80
|
+
* A threshold scale read the way every categorical channel reads its field: a
|
|
81
|
+
* value files under the label of the bin it falls in, a feature with no value
|
|
82
|
+
* under `''`, and text that is no number under {@link NOT_A_NUMBER_LABEL}.
|
|
83
|
+
* The bins are the whole domain, so a key lists each one. `labels` names the
|
|
84
|
+
* bins in a key, one each from the lowest, where a config spells them for a
|
|
85
|
+
* reader; a bin's key stays its interval.
|
|
86
|
+
*/
|
|
87
|
+
export declare function thresholdField(field: string, { domain, range, labels: names, }?: {
|
|
88
|
+
domain?: readonly string[];
|
|
89
|
+
range?: readonly string[];
|
|
90
|
+
labels?: readonly string[];
|
|
91
|
+
}): CategoricalField;
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { categoricalPalette } from '../ui/colors.js';
|
|
2
|
+
import { NO_VALUE_LABEL, keyNames } from './categoricalField.js';
|
|
3
|
+
import { MISCONFIGURED_COLOR, NO_CATEGORY_COLOR } from './color/index.js';
|
|
4
|
+
import { groupKeyComparator, valueText } from './groupKeys.js';
|
|
5
|
+
import { numericValue } from './numericValue.js';
|
|
6
|
+
/**
|
|
7
|
+
* #api
|
|
8
|
+
* A domain written as strings — the shared `domain` slot is a `stringArray` —
|
|
9
|
+
* read back as the numbers it names. A member that is not a number reads NaN,
|
|
10
|
+
* which every comparison against it declines.
|
|
11
|
+
*/
|
|
12
|
+
export function numericDomain(domain) {
|
|
13
|
+
return domain.map(Number);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* #api
|
|
17
|
+
* A threshold scale's cut points as {@link thresholdIndex} walks them: the
|
|
18
|
+
* numbers the domain names, ascending. Cuts written high to low, as p-value
|
|
19
|
+
* thresholds often are, left the middle interval unreachable, the walk stopping
|
|
20
|
+
* at the first cut a value is under.
|
|
21
|
+
*/
|
|
22
|
+
export function thresholdCuts(domain) {
|
|
23
|
+
return numericDomain(domain)
|
|
24
|
+
.filter(cut => Number.isFinite(cut))
|
|
25
|
+
.sort((a, b) => a - b);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* #api
|
|
29
|
+
* The bin a value falls in: how many of the ascending cut points it is at or
|
|
30
|
+
* past, so a palette with one more entry than the domain paints it as
|
|
31
|
+
* `palette[thresholdIndex(value, domain)]`. A value that is not a number is
|
|
32
|
+
* in no bin and answers -1; an infinite one takes the end bin on its side, as
|
|
33
|
+
* d3's threshold scale places it, so a `-log10` of a zero p-value lands in
|
|
34
|
+
* the top bin.
|
|
35
|
+
*/
|
|
36
|
+
export function thresholdIndex(value, domain) {
|
|
37
|
+
const v = numericValue(value);
|
|
38
|
+
if (Number.isNaN(v)) {
|
|
39
|
+
return -1;
|
|
40
|
+
}
|
|
41
|
+
let i = 0;
|
|
42
|
+
while (i < domain.length && v >= domain[i]) {
|
|
43
|
+
i++;
|
|
44
|
+
}
|
|
45
|
+
return i;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* #api
|
|
49
|
+
* The colour of each interval, in order: the declared palette, and the
|
|
50
|
+
* default categorical palette where it runs out.
|
|
51
|
+
*/
|
|
52
|
+
export function thresholdPalette(bins, palette = []) {
|
|
53
|
+
return Array.from({ length: bins }, (_, i) => palette[i] ?? categoricalPalette[i % categoricalPalette.length]);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* #api
|
|
57
|
+
* What a threshold scale's bins are called in a key, one label per palette
|
|
58
|
+
* entry: `< a` below the first cut, `a – b` between two, `≥ b` past the last.
|
|
59
|
+
*/
|
|
60
|
+
export function thresholdLabels(domain) {
|
|
61
|
+
if (domain.length === 0) {
|
|
62
|
+
return ['any value'];
|
|
63
|
+
}
|
|
64
|
+
return [
|
|
65
|
+
`< ${domain[0]}`,
|
|
66
|
+
...domain.slice(1).map((cut, i) => `${domain[i]} – ${cut}`),
|
|
67
|
+
`≥ ${domain.at(-1)}`,
|
|
68
|
+
];
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* #api
|
|
72
|
+
* The key a value holding text that is no number files under on a threshold
|
|
73
|
+
* scale, painted the misconfiguration grey rather than passing for a missing
|
|
74
|
+
* value.
|
|
75
|
+
*/
|
|
76
|
+
export const NOT_A_NUMBER_LABEL = '(not a number)';
|
|
77
|
+
/**
|
|
78
|
+
* #api
|
|
79
|
+
* A threshold key's rows: every interval, painted or not, since the bins are
|
|
80
|
+
* the whole domain, then the not-a-number and no-value rows where a feature
|
|
81
|
+
* took one, in the order `thresholdField` sorts them.
|
|
82
|
+
*/
|
|
83
|
+
export function thresholdKeyEntries(cuts, range, met, names = []) {
|
|
84
|
+
const labels = thresholdLabels(cuts);
|
|
85
|
+
const colors = thresholdPalette(labels.length, range);
|
|
86
|
+
return [
|
|
87
|
+
...labels.map((label, i) => ({
|
|
88
|
+
value: label,
|
|
89
|
+
label: names[i] ?? label,
|
|
90
|
+
color: colors[i],
|
|
91
|
+
})),
|
|
92
|
+
...(met.notNumber
|
|
93
|
+
? [
|
|
94
|
+
{
|
|
95
|
+
value: NOT_A_NUMBER_LABEL,
|
|
96
|
+
label: NOT_A_NUMBER_LABEL,
|
|
97
|
+
color: MISCONFIGURED_COLOR,
|
|
98
|
+
},
|
|
99
|
+
]
|
|
100
|
+
: []),
|
|
101
|
+
...(met.missing
|
|
102
|
+
? [
|
|
103
|
+
{
|
|
104
|
+
value: '',
|
|
105
|
+
label: NO_VALUE_LABEL,
|
|
106
|
+
color: NO_CATEGORY_COLOR,
|
|
107
|
+
missing: true,
|
|
108
|
+
},
|
|
109
|
+
]
|
|
110
|
+
: []),
|
|
111
|
+
];
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* #api
|
|
115
|
+
* The rows a ramp's key lists beside its bar once a feature painted one: the
|
|
116
|
+
* not-a-number and no-value rows a threshold's key ends with. Empty while
|
|
117
|
+
* neither painted.
|
|
118
|
+
*/
|
|
119
|
+
export function rampGapScales(id, met) {
|
|
120
|
+
const entries = thresholdKeyEntries([], undefined, met).slice(1);
|
|
121
|
+
return entries.length > 0 ? [{ kind: 'categorical', id, entries }] : [];
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* #api
|
|
125
|
+
* Whether a field holds no value at all, as against text that fails to parse:
|
|
126
|
+
* absent, empty, or a VCF's `AF=.`, which arrives as `[undefined]`.
|
|
127
|
+
*/
|
|
128
|
+
export function isMissing(value) {
|
|
129
|
+
return Array.isArray(value)
|
|
130
|
+
? value.every(v => v === undefined || v === null)
|
|
131
|
+
: valueText(value) === '';
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* #api
|
|
135
|
+
* A threshold scale read the way every categorical channel reads its field: a
|
|
136
|
+
* value files under the label of the bin it falls in, a feature with no value
|
|
137
|
+
* under `''`, and text that is no number under {@link NOT_A_NUMBER_LABEL}.
|
|
138
|
+
* The bins are the whole domain, so a key lists each one. `labels` names the
|
|
139
|
+
* bins in a key, one each from the lowest, where a config spells them for a
|
|
140
|
+
* reader; a bin's key stays its interval.
|
|
141
|
+
*/
|
|
142
|
+
export function thresholdField(field, { domain = [], range = [], labels: names = [], } = {}) {
|
|
143
|
+
const cuts = thresholdCuts(domain);
|
|
144
|
+
const labels = thresholdLabels(cuts);
|
|
145
|
+
const named = keyNames(labels, names);
|
|
146
|
+
const palette = thresholdPalette(labels.length, range);
|
|
147
|
+
const colorOf = new Map(labels.map((label, i) => [label, palette[i]]));
|
|
148
|
+
return {
|
|
149
|
+
field,
|
|
150
|
+
domain: labels,
|
|
151
|
+
closed: true,
|
|
152
|
+
key: value => {
|
|
153
|
+
if (isMissing(value)) {
|
|
154
|
+
return '';
|
|
155
|
+
}
|
|
156
|
+
const bin = thresholdIndex(value, cuts);
|
|
157
|
+
return bin < 0 ? NOT_A_NUMBER_LABEL : labels[bin];
|
|
158
|
+
},
|
|
159
|
+
compare: groupKeyComparator([...labels, NOT_A_NUMBER_LABEL]),
|
|
160
|
+
label: key => (key === '' ? NO_VALUE_LABEL : (named.get(key) ?? key)),
|
|
161
|
+
sectionLabel: key => `${field}: ${key === '' ? 'none' : key}`,
|
|
162
|
+
color: key => key === ''
|
|
163
|
+
? NO_CATEGORY_COLOR
|
|
164
|
+
: (colorOf.get(key) ?? MISCONFIGURED_COLOR),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A region needs at least this many coordinate labels to be worth numbering.
|
|
3
|
+
*
|
|
4
|
+
* Tick pitch comes from the bpPerPx of the whole displayed-region set, so a
|
|
5
|
+
* region much narrower than that pitch still catches a tick or two. With every
|
|
6
|
+
* chromosome displayed at once — a whole-genome overview scalebar, a
|
|
7
|
+
* whole-genome dotplot axis — each one then ends up with a single lone number
|
|
8
|
+
* jammed against the next chromosome's refName, and the axis reads as scattered
|
|
9
|
+
* repeats of the same "500M".
|
|
10
|
+
*
|
|
11
|
+
* One coordinate conveys no scale on its own: it gives a reader no spacing to
|
|
12
|
+
* read a distance off, and sitting alone in a chromosome's span it reads as
|
|
13
|
+
* marking that span rather than a position inside it. Needing two means narrow
|
|
14
|
+
* regions show just their refName, and only regions with room for a real ruler
|
|
15
|
+
* get numbers.
|
|
16
|
+
*/
|
|
17
|
+
export declare const MIN_TICK_LABELS_PER_BLOCK = 2;
|
|
18
|
+
/** Whether a run of `count` coordinate labels in one region is worth drawing. */
|
|
19
|
+
export declare function tickLabelsWorthDrawing(count: number): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Drop the labels of every region left with too few of them to read, keeping
|
|
22
|
+
* those of regions that have a real ruler.
|
|
23
|
+
*
|
|
24
|
+
* For a caller holding one flat list across several regions, where the count
|
|
25
|
+
* has to be taken per region before anything can be decided. A caller that
|
|
26
|
+
* already works a region at a time wants `tickLabelsWorthDrawing` on its own
|
|
27
|
+
* length instead.
|
|
28
|
+
*
|
|
29
|
+
* `regionOf` returns whatever identifies a region to the caller — an index, a
|
|
30
|
+
* refName, a block key. A group's labels are dropped together, so that identity
|
|
31
|
+
* has to separate two regions that can sit side by side on one axis: an axis
|
|
32
|
+
* may carry the same refName twice (a read-vs-ref dotplot builds one from
|
|
33
|
+
* gatherOverlaps, so a read aligned twice to a chromosome yields two regions on
|
|
34
|
+
* it), and keying those together would let one lend the other its quorum.
|
|
35
|
+
*/
|
|
36
|
+
export declare function dropLoneTickLabels<T>(labels: T[], regionOf: (label: T) => unknown): T[];
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A region needs at least this many coordinate labels to be worth numbering.
|
|
3
|
+
*
|
|
4
|
+
* Tick pitch comes from the bpPerPx of the whole displayed-region set, so a
|
|
5
|
+
* region much narrower than that pitch still catches a tick or two. With every
|
|
6
|
+
* chromosome displayed at once — a whole-genome overview scalebar, a
|
|
7
|
+
* whole-genome dotplot axis — each one then ends up with a single lone number
|
|
8
|
+
* jammed against the next chromosome's refName, and the axis reads as scattered
|
|
9
|
+
* repeats of the same "500M".
|
|
10
|
+
*
|
|
11
|
+
* One coordinate conveys no scale on its own: it gives a reader no spacing to
|
|
12
|
+
* read a distance off, and sitting alone in a chromosome's span it reads as
|
|
13
|
+
* marking that span rather than a position inside it. Needing two means narrow
|
|
14
|
+
* regions show just their refName, and only regions with room for a real ruler
|
|
15
|
+
* get numbers.
|
|
16
|
+
*/
|
|
17
|
+
export const MIN_TICK_LABELS_PER_BLOCK = 2;
|
|
18
|
+
/** Whether a run of `count` coordinate labels in one region is worth drawing. */
|
|
19
|
+
export function tickLabelsWorthDrawing(count) {
|
|
20
|
+
return count >= MIN_TICK_LABELS_PER_BLOCK;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Drop the labels of every region left with too few of them to read, keeping
|
|
24
|
+
* those of regions that have a real ruler.
|
|
25
|
+
*
|
|
26
|
+
* For a caller holding one flat list across several regions, where the count
|
|
27
|
+
* has to be taken per region before anything can be decided. A caller that
|
|
28
|
+
* already works a region at a time wants `tickLabelsWorthDrawing` on its own
|
|
29
|
+
* length instead.
|
|
30
|
+
*
|
|
31
|
+
* `regionOf` returns whatever identifies a region to the caller — an index, a
|
|
32
|
+
* refName, a block key. A group's labels are dropped together, so that identity
|
|
33
|
+
* has to separate two regions that can sit side by side on one axis: an axis
|
|
34
|
+
* may carry the same refName twice (a read-vs-ref dotplot builds one from
|
|
35
|
+
* gatherOverlaps, so a read aligned twice to a chromosome yields two regions on
|
|
36
|
+
* it), and keying those together would let one lend the other its quorum.
|
|
37
|
+
*/
|
|
38
|
+
export function dropLoneTickLabels(labels, regionOf) {
|
|
39
|
+
const counts = new Map();
|
|
40
|
+
for (const label of labels) {
|
|
41
|
+
const region = regionOf(label);
|
|
42
|
+
counts.set(region, (counts.get(region) ?? 0) + 1);
|
|
43
|
+
}
|
|
44
|
+
return labels.filter(label => tickLabelsWorthDrawing(counts.get(regionOf(label))));
|
|
45
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A wall-clock gate for a callback invoked once per item in a long synchronous
|
|
3
|
+
* loop: `due(intervalMs)` returns true at most once per `intervalMs`, without
|
|
4
|
+
* calling `Date.now()` on every invocation.
|
|
5
|
+
*
|
|
6
|
+
* `Date.now()` costs ~40ns, invisible until the loop is a 666k-read pileup —
|
|
7
|
+
* there it measured ~28ms per gated callsite, and the alignments worker has two
|
|
8
|
+
* of them (the progress emit in `createProgressReporter` and the yield in
|
|
9
|
+
* `createAbortBreakpoint`). Both previously read the clock per call, on the
|
|
10
|
+
* documented reasoning that it was negligible next to the per-item work; at
|
|
11
|
+
* this item count it measurably isn't.
|
|
12
|
+
*
|
|
13
|
+
* The stride between clock reads is **learned from the observed call rate**,
|
|
14
|
+
* never fixed. A fixed stride is what regressed this before: a phase with few
|
|
15
|
+
* but heavy items (a multi-sample VCF region — a few hundred sites, thousands
|
|
16
|
+
* of samples each) never reached the count, so its progress bar froze at 0% and
|
|
17
|
+
* its cancellation never fired. A learned stride makes exactly those loops
|
|
18
|
+
* measure a low rate and hold a stride of 1, gating on time alone as before,
|
|
19
|
+
* while a millions-of-calls loop thins itself out.
|
|
20
|
+
*
|
|
21
|
+
* `intervalMs` is per call rather than fixed at construction; both current
|
|
22
|
+
* callers pass a constant.
|
|
23
|
+
*/
|
|
24
|
+
export declare function createTimeGate(): (intervalMs: number) => boolean;
|
|
25
|
+
export type TimeGate = ReturnType<typeof createTimeGate>;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// Target number of `Date.now()` reads per interval. Above 1 so the fire itself
|
|
2
|
+
// doesn't drift late when the call rate rises between two fires: the gate
|
|
3
|
+
// notices the interval has elapsed within ~1/this of it.
|
|
4
|
+
const CLOCK_READS_PER_INTERVAL = 8;
|
|
5
|
+
// Ceiling on the learned stride. The stride is only ever an extrapolation from
|
|
6
|
+
// the last observed call rate, and the gate is blind between clock reads — if
|
|
7
|
+
// per-item cost jumps mid-loop the next read arrives late in wall-clock terms.
|
|
8
|
+
// This caps how blind it can get: a 10x mid-loop slowdown at a stride this size
|
|
9
|
+
// costs about one extra interval, which for a progress emit or a cancellation
|
|
10
|
+
// check is immaterial. At the rates that motivate a gate at all (hundreds of
|
|
11
|
+
// calls per ms) it is never the binding constraint.
|
|
12
|
+
const MAX_STRIDE = 8192;
|
|
13
|
+
// The stride is re-aimed on every clock read, including ones taken part-way
|
|
14
|
+
// through an interval — otherwise the whole first interval runs at stride 1,
|
|
15
|
+
// which for a 666k-call loop is 33k clock reads before the gate learns
|
|
16
|
+
// anything. Those early samples span a short window, so cap how fast the stride
|
|
17
|
+
// may grow: the ramp still reaches MAX_STRIDE in five reads, but one
|
|
18
|
+
// unrepresentatively fast millisecond can't launch the gate straight to blind.
|
|
19
|
+
const STRIDE_GROWTH_LIMIT = 8;
|
|
20
|
+
/**
|
|
21
|
+
* A wall-clock gate for a callback invoked once per item in a long synchronous
|
|
22
|
+
* loop: `due(intervalMs)` returns true at most once per `intervalMs`, without
|
|
23
|
+
* calling `Date.now()` on every invocation.
|
|
24
|
+
*
|
|
25
|
+
* `Date.now()` costs ~40ns, invisible until the loop is a 666k-read pileup —
|
|
26
|
+
* there it measured ~28ms per gated callsite, and the alignments worker has two
|
|
27
|
+
* of them (the progress emit in `createProgressReporter` and the yield in
|
|
28
|
+
* `createAbortBreakpoint`). Both previously read the clock per call, on the
|
|
29
|
+
* documented reasoning that it was negligible next to the per-item work; at
|
|
30
|
+
* this item count it measurably isn't.
|
|
31
|
+
*
|
|
32
|
+
* The stride between clock reads is **learned from the observed call rate**,
|
|
33
|
+
* never fixed. A fixed stride is what regressed this before: a phase with few
|
|
34
|
+
* but heavy items (a multi-sample VCF region — a few hundred sites, thousands
|
|
35
|
+
* of samples each) never reached the count, so its progress bar froze at 0% and
|
|
36
|
+
* its cancellation never fired. A learned stride makes exactly those loops
|
|
37
|
+
* measure a low rate and hold a stride of 1, gating on time alone as before,
|
|
38
|
+
* while a millions-of-calls loop thins itself out.
|
|
39
|
+
*
|
|
40
|
+
* `intervalMs` is per call rather than fixed at construction; both current
|
|
41
|
+
* callers pass a constant.
|
|
42
|
+
*/
|
|
43
|
+
export function createTimeGate() {
|
|
44
|
+
let stride = 1;
|
|
45
|
+
let sinceClockRead = 0;
|
|
46
|
+
let callsSinceFire = 0;
|
|
47
|
+
let lastFire = 0;
|
|
48
|
+
return (intervalMs) => {
|
|
49
|
+
callsSinceFire++;
|
|
50
|
+
if (++sinceClockRead < stride) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
sinceClockRead = 0;
|
|
54
|
+
const now = Date.now();
|
|
55
|
+
// lastFire 0 is the first call ever — `now - 0` is the epoch, not an
|
|
56
|
+
// elapsed time, and there is no rate to measure yet. Fire (so an initial
|
|
57
|
+
// 0% tick is never swallowed) and start the window here.
|
|
58
|
+
if (lastFire === 0) {
|
|
59
|
+
lastFire = now;
|
|
60
|
+
callsSinceFire = 0;
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
const elapsed = now - lastFire;
|
|
64
|
+
// elapsed 0 means the window fell inside one clock tick, which measures
|
|
65
|
+
// nothing. Shrinking is unbounded (an estimate below the current stride
|
|
66
|
+
// takes effect at once) so a slowdown is corrected on the next read.
|
|
67
|
+
if (elapsed > 0) {
|
|
68
|
+
stride = Math.min(MAX_STRIDE, stride * STRIDE_GROWTH_LIMIT, Math.max(1, Math.floor((callsSinceFire * intervalMs) /
|
|
69
|
+
(elapsed * CLOCK_READS_PER_INTERVAL))));
|
|
70
|
+
}
|
|
71
|
+
if (elapsed < intervalMs) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
lastFire = now;
|
|
75
|
+
callsSinceFire = 0;
|
|
76
|
+
return true;
|
|
77
|
+
};
|
|
78
|
+
}
|