@jbrowse/core 4.3.0 → 5.0.0-beta.1
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 +783 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +13 -3
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +33 -22
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +8 -3
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +117 -19
- 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 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCoreDetails.d.ts +1 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCoreDetails.js +4 -4
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.d.ts +1 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.js +12 -5
- package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.d.ts +1 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.js +28 -17
- package/esm/BaseFeatureWidget/BaseFeatureDetail/DataGridDetails.d.ts +1 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/DataGridDetails.js +19 -40
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.d.ts +6 -4
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.js +46 -30
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureWash.d.ts +20 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureWash.js +66 -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 +17 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.d.ts +1 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.js +3 -9
- package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +3 -3
- package/esm/BaseFeatureWidget/BaseFeatureDetail/UriField.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/UriField.js +7 -14
- package/esm/BaseFeatureWidget/BaseFeatureDetail/index.d.ts +2 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/index.js +19 -13
- package/esm/BaseFeatureWidget/BaseFeatureDetail/types.d.ts +5 -4
- package/esm/BaseFeatureWidget/BaseFeatureDetail/util.d.ts +8 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/util.js +32 -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 +62 -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 +1 -1
- 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 +18 -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 +50 -63
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.js +62 -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/test_data/DLGAP3.d.ts +1 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.d.ts +7 -7
- 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.js +1 -1
- package/esm/BaseFeatureWidget/formatDetails.d.ts +38 -0
- package/esm/BaseFeatureWidget/formatDetails.js +103 -0
- package/esm/BaseFeatureWidget/index.d.ts +3 -1
- package/esm/BaseFeatureWidget/index.js +2 -2
- package/esm/BaseFeatureWidget/stateModelFactory.d.ts +80 -62
- package/esm/BaseFeatureWidget/stateModelFactory.js +128 -29
- package/esm/BaseFeatureWidget/types.d.ts +4 -3
- package/esm/BaseFeatureWidget/util.d.ts +4 -29
- package/esm/BaseFeatureWidget/util.js +20 -84
- package/esm/CorePlugin.js +11 -6
- 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 +40 -40
- package/esm/PluginLoader.js +166 -82
- package/esm/PluginManager.d.ts +368 -55
- package/esm/PluginManager.js +326 -85
- package/esm/ReExports/BaseFeatureDetails.js +7 -6
- package/esm/ReExports/MuiDataGridReExports.d.ts +2 -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/index.js +1 -1
- package/esm/ReExports/lazify.d.ts +2 -2
- package/esm/ReExports/lazify.js +16 -3
- package/esm/ReExports/list.js +54 -229
- package/esm/ReExports/modules.js +84 -65
- package/esm/ReExports/muiComponentNames.d.ts +18 -0
- package/esm/ReExports/muiComponentNames.js +130 -0
- package/esm/ReExports/publicUtil.d.ts +1 -0
- package/esm/ReExports/publicUtil.js +28 -0
- package/esm/ReExports/registry.d.ts +2 -0
- package/esm/ReExports/registry.js +28 -0
- package/esm/TextSearch/BaseResults.d.ts +20 -21
- package/esm/TextSearch/BaseResults.js +8 -33
- package/esm/TextSearch/TextSearchManager.d.ts +14 -34
- package/esm/TextSearch/TextSearchManager.js +87 -34
- package/esm/assemblyManager/assembly.d.ts +307 -34
- package/esm/assemblyManager/assembly.js +551 -262
- package/esm/assemblyManager/assemblyAdapters.d.ts +12 -0
- package/esm/assemblyManager/assemblyAdapters.js +18 -0
- package/esm/assemblyManager/assemblyConfigSchema.d.ts +192 -17
- package/esm/assemblyManager/assemblyConfigSchema.js +213 -19
- package/esm/assemblyManager/assemblyManager.d.ts +711 -303
- package/esm/assemblyManager/assemblyManager.js +351 -46
- package/esm/assemblyManager/expandAssemblyConfigShorthand.d.ts +32 -0
- package/esm/assemblyManager/expandAssemblyConfigShorthand.js +85 -0
- package/esm/assemblyManager/geneticCodes.d.ts +21 -0
- package/esm/assemblyManager/geneticCodes.js +47 -0
- package/esm/assemblyManager/getSequenceAdapterConfig.d.ts +9 -0
- package/esm/assemblyManager/getSequenceAdapterConfig.js +12 -0
- package/esm/assemblyManager/index.d.ts +1 -1
- package/esm/assemblyManager/index.js +2 -2
- package/esm/assemblyManager/loadRefNameMap.d.ts +5 -0
- package/esm/assemblyManager/loadRefNameMap.js +80 -0
- package/esm/assemblyManager/refNameColors.d.ts +1 -0
- package/esm/assemblyManager/refNameColors.js +32 -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 +11 -0
- package/esm/checkPlugins.js +77 -0
- package/esm/configuration/configurationSchema.d.ts +154 -19
- package/esm/configuration/configurationSchema.js +359 -138
- package/esm/configuration/configurationSlot.d.ts +283 -30
- package/esm/configuration/configurationSlot.js +205 -226
- package/esm/configuration/formatAboutConfigSchema.d.ts +55 -0
- package/esm/configuration/formatAboutConfigSchema.js +58 -0
- package/esm/configuration/formatDetailsConfigSchema.d.ts +80 -0
- package/esm/configuration/formatDetailsConfigSchema.js +90 -0
- package/esm/configuration/fullConfSnapshot.d.ts +28 -0
- package/esm/configuration/fullConfSnapshot.js +66 -0
- package/esm/configuration/getConf.d.ts +88 -0
- package/esm/configuration/getConf.js +74 -0
- package/esm/configuration/index.d.ts +19 -3
- package/esm/configuration/index.js +19 -2
- package/esm/configuration/mergeFormatCallbacks.d.ts +15 -0
- package/esm/configuration/mergeFormatCallbacks.js +24 -0
- package/esm/configuration/promotableDefaults.d.ts +199 -0
- package/esm/configuration/promotableDefaults.js +326 -0
- package/esm/configuration/promotablePin.d.ts +55 -0
- package/esm/configuration/promotableResolve.d.ts +108 -0
- package/esm/configuration/promotableResolve.js +117 -0
- package/esm/configuration/promotableSlots.d.ts +12 -0
- package/esm/configuration/promotableSlots.js +45 -0
- package/esm/configuration/readConfObject.d.ts +56 -0
- package/esm/configuration/readConfObject.js +161 -0
- package/esm/configuration/schemaRegistry.d.ts +35 -0
- package/esm/configuration/schemaRegistry.js +50 -0
- package/esm/configuration/schemaTypes.d.ts +23 -0
- package/esm/configuration/schemaTypes.js +94 -0
- package/esm/configuration/slotFacade.d.ts +82 -0
- package/esm/configuration/slotFacade.js +89 -0
- package/esm/configuration/slotShape.d.ts +12 -0
- package/esm/configuration/slotShape.js +84 -0
- package/esm/configuration/slotValueUtils.d.ts +17 -0
- package/esm/configuration/slotValueUtils.js +25 -0
- package/esm/configuration/tabixIndexFields.d.ts +44 -0
- package/esm/configuration/tabixIndexFields.js +45 -0
- package/esm/configuration/tabixShorthand.d.ts +34 -0
- package/esm/configuration/tabixShorthand.js +45 -0
- package/esm/configuration/types.d.ts +170 -7
- package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +24 -10
- package/esm/data_adapters/BaseAdapter/BaseAdapter.js +23 -15
- package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +120 -7
- package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +99 -27
- 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/getAdapterId.d.ts +2 -0
- package/esm/data_adapters/BaseAdapter/getAdapterId.js +9 -0
- package/esm/data_adapters/BaseAdapter/index.d.ts +6 -4
- package/esm/data_adapters/BaseAdapter/index.js +5 -5
- package/esm/data_adapters/BaseAdapter/stats.d.ts +5 -5
- package/esm/data_adapters/BaseAdapter/stats.js +48 -22
- package/esm/data_adapters/BaseAdapter/types.d.ts +10 -8
- 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/CytobandAdapter/CytobandAdapter.d.ts +1 -1
- package/esm/data_adapters/CytobandAdapter/CytobandAdapter.js +4 -4
- package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +36 -4
- package/esm/data_adapters/CytobandAdapter/configSchema.js +46 -2
- 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 +35 -1
- package/esm/data_adapters/dataAdapterCache.js +62 -22
- package/esm/data_adapters/getFeatureAdapter.d.ts +22 -0
- package/esm/data_adapters/getFeatureAdapter.js +27 -0
- package/esm/data_adapters/getSequenceSubAdapter.d.ts +21 -0
- package/esm/data_adapters/getSequenceSubAdapter.js +44 -0
- package/esm/pluggableElementTypes/AdapterType.d.ts +52 -2
- 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 +10 -0
- package/esm/pluggableElementTypes/DisplayType.js +14 -1
- package/esm/pluggableElementTypes/InternetAccountType.js +1 -1
- package/esm/pluggableElementTypes/PluggableElementBase.d.ts +13 -0
- package/esm/pluggableElementTypes/PluggableElementBase.js +13 -0
- package/esm/pluggableElementTypes/RpcMethodType.d.ts +132 -12
- package/esm/pluggableElementTypes/RpcMethodType.js +263 -98
- package/esm/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.d.ts +19 -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 +3 -3
- 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 +2 -1
- package/esm/pluggableElementTypes/ViewType.js +9 -2
- package/esm/pluggableElementTypes/WidgetType.d.ts +2 -2
- package/esm/pluggableElementTypes/WidgetType.js +1 -1
- package/esm/pluggableElementTypes/addMenuItems.d.ts +87 -0
- package/esm/pluggableElementTypes/addMenuItems.js +82 -0
- package/esm/pluggableElementTypes/extendElementType.d.ts +30 -0
- package/esm/pluggableElementTypes/extendElementType.js +68 -0
- package/esm/pluggableElementTypes/index.d.ts +7 -7
- package/esm/pluggableElementTypes/index.js +24 -14
- package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +70 -15
- package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.js +90 -10
- package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +605 -84
- package/esm/pluggableElementTypes/models/BaseDisplayModel.js +172 -64
- package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +195 -35
- package/esm/pluggableElementTypes/models/BaseTrackModel.js +332 -85
- package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +167 -16
- package/esm/pluggableElementTypes/models/BaseViewModel.js +111 -16
- package/esm/pluggableElementTypes/models/HighlightsMixin.d.ts +51 -0
- package/esm/pluggableElementTypes/models/HighlightsMixin.js +78 -0
- package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +163 -29
- package/esm/pluggableElementTypes/models/InternetAccountModel.js +218 -48
- package/esm/pluggableElementTypes/models/assertDisplayContract.d.ts +174 -0
- package/esm/pluggableElementTypes/models/assertDisplayContract.js +246 -0
- package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +22 -8
- package/esm/pluggableElementTypes/models/baseConnectionConfig.js +18 -2
- package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +39 -20
- package/esm/pluggableElementTypes/models/baseInternetAccountConfig.js +23 -2
- package/esm/pluggableElementTypes/models/baseTrackConfig.d.ts +181 -65
- package/esm/pluggableElementTypes/models/baseTrackConfig.js +191 -89
- package/esm/pluggableElementTypes/models/components/SaveTrackData.d.ts +3 -8
- package/esm/pluggableElementTypes/models/components/SaveTrackData.js +113 -139
- package/esm/pluggableElementTypes/models/components/fetchTrackData.d.ts +55 -0
- package/esm/pluggableElementTypes/models/components/fetchTrackData.js +83 -0
- package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +40 -0
- package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +115 -0
- package/esm/pluggableElementTypes/models/index.d.ts +6 -3
- package/esm/pluggableElementTypes/models/index.js +10 -8
- package/esm/pluggableElementTypes/models/migrateTrackConfig.d.ts +34 -0
- package/esm/pluggableElementTypes/models/migrateTrackConfig.js +54 -0
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/bed.js +75 -7
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.d.ts +9 -3
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.js +153 -103
- 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 +198 -0
- package/esm/pluginDefinitions.js +220 -0
- package/esm/rpc/BaseRpcDriver.d.ts +27 -35
- package/esm/rpc/BaseRpcDriver.js +74 -107
- package/esm/rpc/MainThreadRpcDriver.d.ts +9 -10
- package/esm/rpc/MainThreadRpcDriver.js +18 -29
- package/esm/rpc/RpcClient.d.ts +38 -0
- package/esm/rpc/RpcClient.js +154 -0
- package/esm/rpc/RpcManager.d.ts +116 -27
- package/esm/rpc/RpcManager.js +177 -50
- package/esm/rpc/RpcRegistry.d.ts +265 -0
- package/esm/rpc/RpcRegistry.js +1 -0
- package/esm/rpc/RpcServer.d.ts +41 -0
- package/esm/rpc/RpcServer.js +235 -0
- package/esm/rpc/WebWorkerRpcDriver.d.ts +71 -24
- package/esm/rpc/WebWorkerRpcDriver.js +312 -27
- package/esm/rpc/byteBudget.d.ts +49 -0
- package/esm/rpc/byteBudget.js +50 -0
- package/esm/rpc/configSchema.d.ts +27 -5
- package/esm/rpc/configSchema.js +40 -16
- package/esm/rpc/coreRpcMethods.d.ts +2 -5
- package/esm/rpc/coreRpcMethods.js +9 -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/CoreGetExportData.d.ts +5 -18
- package/esm/rpc/methods/CoreGetExportData.js +26 -15
- package/esm/rpc/methods/CoreGetFeatures.d.ts +6 -15
- package/esm/rpc/methods/CoreGetFeatures.js +15 -17
- 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 +24 -13
- 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/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 +53 -0
- package/esm/svg/constants.d.ts +1 -0
- package/esm/svg/constants.js +5 -0
- package/esm/svg/saveSvgAsImage.d.ts +6 -0
- package/esm/svg/saveSvgAsImage.js +90 -0
- package/esm/svg/svgId.d.ts +42 -0
- package/esm/svg/svgId.js +84 -0
- package/esm/svg/svgReady.d.ts +136 -0
- package/esm/svg/svgReady.js +164 -0
- package/esm/svg/trackNames.d.ts +27 -0
- package/esm/svg/trackNames.js +31 -0
- package/esm/svg/wrapSvgExport.d.ts +12 -0
- package/esm/svg/wrapSvgExport.js +78 -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 +61 -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/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 +368 -41
- 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 +4 -4
- 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 +3 -3
- package/esm/ui/ErrorMessageStackTraceDialog.d.ts +1 -1
- package/esm/ui/ErrorMessageStackTraceDialog.js +57 -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 +128 -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 +383 -71
- 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 +12 -3
- package/esm/ui/HoverMenu.js +31 -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 +23 -0
- package/esm/ui/JexlFilterDialog.js +94 -0
- package/esm/ui/LabeledCheckbox.d.ts +9 -0
- package/esm/ui/LabeledCheckbox.js +7 -0
- package/esm/ui/LegendSwatchGlyph.d.ts +7 -0
- package/esm/ui/LegendSwatchGlyph.js +25 -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 +9 -0
- package/esm/ui/LoadingOverlay.js +137 -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 +124 -4
- package/esm/ui/MenuTypes.js +13 -1
- package/esm/ui/MonospaceTextField.d.ts +9 -0
- package/esm/ui/MonospaceTextField.js +37 -0
- package/esm/ui/NumberTextField.d.ts +31 -0
- package/esm/ui/NumberTextField.js +33 -0
- package/esm/ui/PaletteContext.d.ts +85 -0
- package/esm/ui/PaletteContext.js +104 -0
- package/esm/ui/PinAdornment.d.ts +5 -0
- package/esm/ui/PinAdornment.js +79 -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/index.d.ts +22 -0
- package/esm/ui/RefNameAutocomplete/index.js +78 -0
- package/esm/ui/RefNameAutocomplete/util.d.ts +49 -0
- package/esm/ui/RefNameAutocomplete/util.js +168 -0
- package/esm/ui/ReplaceCurrentViewButton.d.ts +19 -0
- package/esm/ui/ReplaceCurrentViewButton.js +22 -0
- package/esm/ui/ResizeHandle.d.ts +13 -7
- package/esm/ui/ResizeHandle.js +42 -55
- 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/ScrollEdgeShadow.d.ts +44 -0
- package/esm/ui/ScrollEdgeShadow.js +98 -0
- package/esm/ui/ScrollZoomToggle.d.ts +38 -0
- package/esm/ui/ScrollZoomToggle.js +92 -0
- package/esm/ui/SequenceAdapterInputs.d.ts +9 -0
- package/esm/ui/SequenceAdapterInputs.js +30 -0
- package/esm/ui/SettingsChangesTable.d.ts +14 -0
- package/esm/ui/SettingsChangesTable.js +49 -0
- package/esm/ui/ShareLinkField.d.ts +6 -0
- package/esm/ui/ShareLinkField.js +42 -0
- package/esm/ui/SingleSlider.d.ts +8 -0
- package/esm/ui/SingleSlider.js +11 -0
- package/esm/ui/SizeSliderRow.d.ts +16 -0
- package/esm/ui/SizeSliderRow.js +50 -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 +43 -11
- 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 +13 -0
- package/esm/ui/SvgColorLegend.js +65 -0
- package/esm/ui/SvgGradientLegend.d.ts +26 -0
- package/esm/ui/SvgGradientLegend.js +26 -0
- package/esm/ui/TagTextField.d.ts +40 -0
- package/esm/ui/TagTextField.js +32 -0
- package/esm/ui/VerticalScrollbar.d.ts +45 -0
- package/esm/ui/VerticalScrollbar.js +158 -0
- package/esm/ui/ViewLoadingScreen.d.ts +24 -0
- package/esm/ui/ViewLoadingScreen.js +76 -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/colorSwatchStyle.d.ts +9 -0
- package/esm/ui/colorSwatchStyle.js +11 -0
- package/esm/ui/colors.d.ts +61 -8
- package/esm/ui/colors.js +135 -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/highlightChipReveal.d.ts +32 -0
- package/esm/ui/highlightChipReveal.js +39 -0
- package/esm/ui/hoverBoxStyle.d.ts +11 -0
- package/esm/ui/hoverBoxStyle.js +13 -0
- package/esm/ui/index.d.ts +76 -4
- package/esm/ui/index.js +90 -19
- 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 +36 -0
- package/esm/ui/legendMenuItem.d.ts +38 -0
- package/esm/ui/legendMenuItem.js +44 -0
- package/esm/ui/legendSpec.d.ts +62 -0
- package/esm/ui/legendSpec.js +78 -0
- package/esm/ui/loadingDotKeyframes.d.ts +18 -0
- package/esm/ui/loadingDotKeyframes.js +17 -0
- package/esm/ui/makeSizeMenu.d.ts +30 -0
- package/esm/ui/makeSizeMenu.js +82 -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 +33 -0
- package/esm/ui/menuItemAdornment.js +50 -0
- package/esm/ui/menuItems.d.ts +28 -0
- package/esm/ui/menuItems.js +26 -0
- package/esm/ui/menuLabels.d.ts +41 -0
- package/esm/ui/menuLabels.js +43 -0
- package/esm/ui/multiTrackMenuItems.d.ts +19 -0
- package/esm/ui/multiTrackMenuItems.js +15 -0
- package/esm/ui/palette.d.ts +559 -0
- package/esm/ui/palette.js +746 -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/promotableMenuItems.d.ts +19 -0
- package/esm/ui/promotableMenuItems.js +89 -0
- package/esm/ui/promotablePinCoverage.d.ts +44 -0
- package/esm/ui/promotablePinCoverage.js +87 -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 +343 -29
- package/esm/ui/theme.js +258 -342
- package/esm/ui/toggleMenuItems.d.ts +44 -0
- package/esm/ui/toggleMenuItems.js +60 -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/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 +204 -16
- package/esm/util/Base1DUtils.js +310 -175
- package/esm/util/Base1DViewModel.d.ts +97 -20
- package/esm/util/Base1DViewModel.js +148 -39
- 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 +81 -0
- package/esm/util/SvgCanvas.js +500 -0
- package/esm/util/TimeTraveller.d.ts +12 -0
- package/esm/util/TimeTraveller.js +130 -27
- package/esm/util/aborting.d.ts +17 -4
- package/esm/util/aborting.js +30 -25
- package/esm/util/adapterMetadata.d.ts +20 -0
- package/esm/util/adapterMetadata.js +39 -0
- package/esm/util/addAndShowTrack.d.ts +22 -0
- package/esm/util/addAndShowTrack.js +23 -0
- package/esm/util/addRelativeUris.d.ts +17 -0
- package/esm/util/addRelativeUris.js +42 -0
- package/esm/util/addTrackComponent.d.ts +72 -0
- package/esm/util/addTrackComponent.js +53 -0
- package/esm/util/addTrackFromWidget.d.ts +94 -0
- package/esm/util/addTrackFromWidget.js +90 -0
- package/esm/util/analytics.d.ts +32 -3
- package/esm/util/analytics.js +102 -49
- package/esm/util/animationAllowed.d.ts +17 -0
- package/esm/util/animationAllowed.js +22 -0
- package/esm/util/applyInitSettings.d.ts +79 -0
- package/esm/util/applyInitSettings.js +91 -0
- package/esm/util/applyRowResizeWheel.d.ts +10 -0
- package/esm/util/applyRowResizeWheel.js +34 -0
- package/esm/util/assemblyConfigUtils.d.ts +144 -0
- package/esm/util/assemblyConfigUtils.js +498 -0
- package/esm/util/bandHeight.d.ts +53 -0
- package/esm/util/bandHeight.js +56 -0
- package/esm/util/bandLayout.d.ts +51 -0
- package/esm/util/bandLayout.js +36 -0
- package/esm/util/bezierConnector.d.ts +14 -0
- package/esm/util/bezierConnector.js +108 -0
- package/esm/util/bgzfWorkerPool.d.ts +78 -0
- package/esm/util/bgzfWorkerPool.js +81 -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 +52 -0
- package/esm/util/cacheBudgets.js +52 -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/chooseGridPitch.d.ts +9 -0
- package/esm/util/chooseGridPitch.js +31 -0
- package/esm/util/clampToContig.d.ts +26 -0
- package/esm/util/clampToContig.js +28 -0
- package/esm/util/cmpStr.d.ts +1 -0
- package/esm/util/cmpStr.js +7 -0
- package/esm/util/coarseStripHTML.js +3 -15
- package/esm/util/color/cssColorsLevel4.js +6 -2
- package/esm/util/color/index.d.ts +81 -2
- package/esm/util/color/index.js +194 -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 +180 -0
- package/esm/util/colorRamp.d.ts +37 -0
- package/esm/util/colorRamp.js +93 -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/createStopTokenRotation.d.ts +117 -0
- package/esm/util/createStopTokenRotation.js +147 -0
- package/esm/util/createSvgRasterCanvas.d.ts +7 -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/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 +23 -0
- package/esm/util/diagonalizeRegions.js +192 -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/fetchAndMaybeUnzip.d.ts +6 -0
- package/esm/util/fetchAndMaybeUnzip.js +64 -0
- package/esm/util/fetchContext.d.ts +82 -0
- package/esm/util/fetchContext.js +59 -0
- package/esm/util/fetchHub.d.ts +15 -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 +5 -1
- package/esm/util/fetchSeq.js +18 -6
- 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 +28 -0
- package/esm/util/freezeDeep.js +41 -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/highlights.d.ts +21 -0
- package/esm/util/highlights.js +100 -0
- package/esm/util/hooks.d.ts +160 -0
- package/esm/util/hooks.js +416 -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 +136 -853
- package/esm/util/indexCandidates.d.ts +50 -0
- package/esm/util/indexCandidates.js +101 -0
- package/esm/util/installClearHoverOnSurfaceMove.d.ts +40 -0
- package/esm/util/installClearHoverOnSurfaceMove.js +41 -0
- package/esm/util/installFetch.d.ts +194 -0
- package/esm/util/installFetch.js +178 -0
- package/esm/util/installInitAutorun.d.ts +62 -0
- package/esm/util/installInitAutorun.js +107 -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 +115 -12
- package/esm/util/isDataCurrent.d.ts +7 -0
- package/esm/util/isDataCurrent.js +9 -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 +141 -17
- package/esm/util/jexlFilters.d.ts +75 -0
- package/esm/util/jexlFilters.js +49 -0
- package/esm/util/jexlStrings.d.ts +22 -1
- package/esm/util/jexlStrings.js +21 -14
- package/esm/util/layouts/GranularRectLayout.d.ts +13 -25
- package/esm/util/layouts/GranularRectLayout.js +99 -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/leadingEdgeAutorun.d.ts +40 -0
- package/esm/util/leadingEdgeAutorun.js +51 -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/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 +14 -4
- package/esm/util/mst-reflection.js +33 -32
- package/esm/util/mstUtils.d.ts +89 -0
- package/esm/util/mstUtils.js +122 -0
- package/esm/util/nanoid.d.ts +0 -4
- package/esm/util/nanoid.js +10 -20
- package/esm/util/numericUtils.d.ts +20 -0
- package/esm/util/numericUtils.js +127 -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/openDisplays.d.ts +23 -0
- package/esm/util/openDisplays.js +79 -0
- package/esm/util/openFeatureWidget.d.ts +33 -0
- package/esm/util/openFeatureWidget.js +64 -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 +45 -2
- package/esm/util/parseLineByLine.js +156 -15
- package/esm/util/parseMotifList.d.ts +17 -0
- package/esm/util/parseMotifList.js +69 -0
- package/esm/util/pluginStore.d.ts +113 -0
- package/esm/util/pluginStore.js +253 -0
- package/esm/util/pointerPresence.d.ts +5 -0
- package/esm/util/pointerPresence.js +21 -0
- package/esm/util/progress.d.ts +459 -0
- package/esm/util/progress.js +820 -0
- package/esm/util/range.d.ts +42 -1
- package/esm/util/range.js +59 -2
- package/esm/util/renameRegions.d.ts +21 -0
- package/esm/util/renameRegions.js +129 -0
- package/esm/util/renderToStaticMarkup.d.ts +2 -0
- package/esm/util/renderToStaticMarkup.js +50 -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 +14 -1
- package/esm/util/rxjs.js +39 -10
- package/esm/util/sameStrings.d.ts +16 -0
- package/esm/util/sameStrings.js +20 -0
- package/esm/util/scrollLatch.d.ts +4 -0
- package/esm/util/scrollLatch.js +59 -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 +38 -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/simpleFeature.d.ts +112 -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/stats.d.ts +25 -2
- package/esm/util/stats.js +39 -8
- package/esm/util/stopToken.d.ts +207 -15
- package/esm/util/stopToken.js +403 -55
- package/esm/util/stringUtils.d.ts +5 -0
- package/esm/util/stringUtils.js +34 -0
- package/esm/util/svgColorProps.d.ts +7 -0
- package/esm/util/svgColorProps.js +28 -0
- package/esm/util/tabix.d.ts +120 -0
- package/esm/util/tabix.js +143 -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/tickLabels.d.ts +36 -0
- package/esm/util/tickLabels.js +45 -0
- package/esm/util/timeGate.d.ts +26 -0
- package/esm/util/timeGate.js +79 -0
- package/esm/util/trackConfigDelta.d.ts +84 -0
- package/esm/util/trackConfigDelta.js +190 -0
- package/esm/util/tracks.d.ts +350 -30
- package/esm/util/tracks.js +574 -192
- 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 +75 -0
- package/esm/util/types/data.js +41 -0
- package/esm/util/types/index.d.ts +358 -119
- package/esm/util/types/index.js +87 -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 +71 -47
- package/esm/util/types/mst.js +27 -22
- package/esm/util/types/predicate.d.ts +9 -0
- package/esm/util/types/predicate.js +1 -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/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 +56 -78
- package/esm/util/useFetch.d.ts +56 -0
- package/esm/util/useFetch.js +188 -0
- package/esm/util/useFetchPlugins.d.ts +12 -0
- package/esm/util/useFetchPlugins.js +14 -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 +37 -0
- package/esm/util/usePanelVirtualScroll.js +42 -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 +32 -0
- package/esm/util/useRowVirtualScroll.js +63 -0
- package/esm/util/useVirtualScrollWheel.d.ts +7 -0
- package/esm/util/useVirtualScrollWheel.js +108 -0
- package/esm/util/viewStatus.d.ts +58 -0
- package/esm/util/viewStatus.js +20 -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 +59 -0
- package/esm/util/wheelZoom.js +231 -0
- package/esm/util/whenViewSettled.d.ts +27 -0
- package/esm/util/whenViewSettled.js +28 -0
- package/esm/util/withFeatureDetails.d.ts +34 -0
- package/esm/util/withFeatureDetails.js +59 -0
- package/package.json +240 -820
- package/esm/ReExports/DataGrid.d.ts +0 -1
- package/esm/ReExports/DataGrid.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/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/{data_adapters/BaseAdapter/BaseOptions.js → configuration/promotablePin.js} +0 -0
- /package/esm/{util/layouts/BaseLayout.js → data_adapters/BaseAdapter/CytobandAdapter.js} +0 -0
package/esm/util/tracks.js
CHANGED
|
@@ -1,48 +1,112 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
// Re-exported because `@jbrowse/core/util/tracks` is the path plugins import it
|
|
2
|
+
// from. It must come first: `../configuration` imports the util barrel, which
|
|
3
|
+
// imports this module back, and a re-export declared after that cycle has a
|
|
4
|
+
// getter that fires before its own require has run.
|
|
5
|
+
export { getFileName } from './getFileName.js';
|
|
6
|
+
// Lives in `./mstUtils.ts` with the rest of the tree walks, and is re-exported
|
|
7
|
+
// here because `@jbrowse/core/util/tracks` is a plugin ABI module that offers
|
|
8
|
+
// it. `fetchContext.ts` takes it from mstUtils instead, which is what keeps the
|
|
9
|
+
// configuration schemas this file pulls in out of the fetch harness's graph.
|
|
10
|
+
export { getRpcSessionId } from './parentWalk.js';
|
|
11
|
+
import { getParent, getSnapshot, isStateTreeNode, } from '@jbrowse/mobx-state-tree';
|
|
12
|
+
import { observable, runInAction, untracked } from 'mobx';
|
|
13
|
+
import { isConfigurationSlot, preProcessSlotValues, readConfObject, } from '../configuration/index.js';
|
|
14
|
+
import { getFileHandle, storeFileHandle, verifyPermission, } from './fileHandleStore.js';
|
|
15
|
+
import { getFileName } from './getFileName.js';
|
|
16
|
+
import { getContainingView, getEnv, getSession, objectHash, } from './mstUtils.js';
|
|
17
|
+
import { isViewModel } from './types/index.js';
|
|
18
|
+
// Deliberately uncached. This used to memoize on a permanent WeakMap keyed by
|
|
19
|
+
// track, but every caller reads it from inside a reactive getter or autorun: the
|
|
20
|
+
// memo meant the reaction never subscribed to the config, so editing
|
|
21
|
+
// assemblyNames in the config editor did not invalidate it. The reads are
|
|
22
|
+
// per-view-change, not per-feature, so MobX's own computed caching is enough.
|
|
6
23
|
export function getTrackAssemblyNames(track) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
24
|
+
return getConfAssemblyNames(track.configuration);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Assembly names as the aliases resolve them, so a track configured against
|
|
28
|
+
* `hg38` compares equal to a view on `GRCh38`. Every "does this track belong to
|
|
29
|
+
* these assemblies" test should run both sides through this, or the same track
|
|
30
|
+
* is offered by one picker and hidden by another.
|
|
31
|
+
*
|
|
32
|
+
* A name the assembly manager doesn't know is kept **as written**, not dropped.
|
|
33
|
+
* Dropping it means "matches nothing" on the track side but "no constraint at
|
|
34
|
+
* all" on the list side, and those disagree; kept, both sides compare the same
|
|
35
|
+
* raw string and matching degrades to the exact name — which is also the right
|
|
36
|
+
* answer in the window before the assembly manager has built its models. Empty
|
|
37
|
+
* names are dropped: a half-initialized view pads its assembly list with them.
|
|
38
|
+
*/
|
|
39
|
+
export function canonicalAssemblyNames(names, assemblyManager) {
|
|
40
|
+
return names
|
|
41
|
+
.filter(name => !!name)
|
|
42
|
+
.map(name => assemblyManager.getCanonicalAssemblyName(name) ?? name);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Whether two names name the same assembly, resolving aliases on both sides.
|
|
46
|
+
*
|
|
47
|
+
* The pairwise counterpart to {@link canonicalAssemblyNames}, for the two
|
|
48
|
+
* places a list cannot be mapped: an index-aligned array, which that function's
|
|
49
|
+
* empty-name filter would desync, and a comparison where one side must come
|
|
50
|
+
* back in the caller's own spelling rather than the canonical one.
|
|
51
|
+
*
|
|
52
|
+
* **Both sides, or it buys nothing.** The names meeting at these comparisons
|
|
53
|
+
* come from different places — a view holds what the session opened it on, a
|
|
54
|
+
* track config holds what its author wrote, and a synteny mate holds whatever
|
|
55
|
+
* the adapter resolved a PanSN prefix to. Any two of those can be aliases of
|
|
56
|
+
* one assembly, and `===` says no.
|
|
57
|
+
*
|
|
58
|
+
* A name the assembly manager doesn't know compares as written, the same
|
|
59
|
+
* degradation {@link canonicalAssemblyNames} makes and for the same reason: an
|
|
60
|
+
* all-vs-all file carries sample names no config declares, and those still have
|
|
61
|
+
* to compare equal to themselves.
|
|
62
|
+
*/
|
|
63
|
+
export function isSameAssemblyName(a, b, assemblyManager) {
|
|
64
|
+
if (!a || !b) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
return (a === b ||
|
|
68
|
+
(assemblyManager.getCanonicalAssemblyName(a) ?? a) ===
|
|
69
|
+
(assemblyManager.getCanonicalAssemblyName(b) ?? b));
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The assemblies a track config names, or `undefined` when it names none.
|
|
73
|
+
*
|
|
74
|
+
* Two shapes, and the second is why this is a function rather than a slot read.
|
|
75
|
+
* A track built on `createBaseTrackConfig` carries `assemblyNames`.
|
|
76
|
+
* `ReferenceSequenceTrack` does not — its schema omits the slot deliberately
|
|
77
|
+
* (see `createReferenceSeqTrackConfig`), because the assembly config holding it
|
|
78
|
+
* IS its assembly, so the name is read off the parent instead.
|
|
79
|
+
*/
|
|
80
|
+
function confAssemblyNames(conf) {
|
|
15
81
|
const trackAssemblyNames = readConfObject(conf, 'assemblyNames');
|
|
16
|
-
if (
|
|
17
|
-
|
|
18
|
-
if ('sequence' in parent) {
|
|
19
|
-
return [readConfObject(parent, 'name')];
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
throw new Error('unknown assembly names');
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return trackAssemblyNames;
|
|
26
|
-
}
|
|
27
|
-
export function getRpcSessionId(thisNode) {
|
|
28
|
-
let highestRpcSessionId;
|
|
29
|
-
for (let node = thisNode; !isRoot(node); node = getParent(node)) {
|
|
30
|
-
if ('rpcSessionId' in node) {
|
|
31
|
-
highestRpcSessionId = node.rpcSessionId;
|
|
32
|
-
}
|
|
82
|
+
if (trackAssemblyNames) {
|
|
83
|
+
return trackAssemblyNames;
|
|
33
84
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
85
|
+
const parent = getParent(conf);
|
|
86
|
+
return 'sequence' in parent
|
|
87
|
+
? [readConfObject(parent, 'name')]
|
|
88
|
+
: undefined;
|
|
38
89
|
}
|
|
39
|
-
export function
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
90
|
+
export function getConfAssemblyNames(conf) {
|
|
91
|
+
const names = confAssemblyNames(conf);
|
|
92
|
+
if (!names) {
|
|
93
|
+
throw new Error('unknown assembly names');
|
|
94
|
+
}
|
|
95
|
+
return names;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* {@link getConfAssemblyNames} for a caller that cannot afford its throw — a
|
|
99
|
+
* config answering neither way leaves the question unanswered instead.
|
|
100
|
+
*
|
|
101
|
+
* `BaseTrackModel.refNameMismatch` is the caller: it runs on every render of
|
|
102
|
+
* every track label, so an unanswerable question must not become a thrown
|
|
103
|
+
* getter. It used to read the raw `assemblyNames` slot itself for that reason,
|
|
104
|
+
* which is a second, subtly different copy of the walk above — and one that
|
|
105
|
+
* answers `[]` for a ReferenceSequenceTrack whose assembly this already knows
|
|
106
|
+
* how to name.
|
|
107
|
+
*/
|
|
108
|
+
export function getConfAssemblyNamesOrNone(conf) {
|
|
109
|
+
return confAssemblyNames(conf) ?? [];
|
|
46
110
|
}
|
|
47
111
|
export const UNKNOWN = 'UNKNOWN';
|
|
48
112
|
export const UNSUPPORTED = 'UNSUPPORTED';
|
|
@@ -53,10 +117,17 @@ export function getBlob(id) {
|
|
|
53
117
|
export function getBlobMap() {
|
|
54
118
|
return blobMap;
|
|
55
119
|
}
|
|
120
|
+
// Populates the blobMap in a fresh JS realm (e.g. a web worker, which starts
|
|
121
|
+
// with an empty module-level blobMap). RPC args are the only channel into the
|
|
122
|
+
// worker, so the main thread ships its full blobMap and the worker replaces its
|
|
123
|
+
// own here before adapters call the synchronous getBlob() during openLocation.
|
|
56
124
|
export function setBlobMap(map) {
|
|
57
125
|
blobMap = map;
|
|
58
126
|
}
|
|
59
127
|
let counter = 0;
|
|
128
|
+
// blob files are stored in a global map. the blobId is based on a combination
|
|
129
|
+
// of timestamp plus counter to be unique across sessions and fast repeated
|
|
130
|
+
// calls
|
|
60
131
|
export function storeBlobLocation(location) {
|
|
61
132
|
if ('blob' in location) {
|
|
62
133
|
const blobId = `b${Date.now()}-${counter++}`;
|
|
@@ -69,24 +140,33 @@ export function storeBlobLocation(location) {
|
|
|
69
140
|
}
|
|
70
141
|
return location;
|
|
71
142
|
}
|
|
72
|
-
|
|
143
|
+
// openLocation is synchronous, so File objects are cached here after async handle
|
|
144
|
+
// resolution. Observable so an open LocalFileChooser reactively clears its "needs
|
|
145
|
+
// reload" notice once a restore (afterAttach / "Restore access") populates the
|
|
146
|
+
// cache; the worker/RPC readers run outside any reaction so nothing else
|
|
147
|
+
// subscribes.
|
|
148
|
+
const fileHandleCache = observable.map();
|
|
73
149
|
export function getFileFromCache(handleId) {
|
|
74
|
-
return fileHandleCache
|
|
150
|
+
return fileHandleCache.get(handleId);
|
|
75
151
|
}
|
|
76
152
|
export function setFileInCache(handleId, file) {
|
|
77
|
-
|
|
153
|
+
runInAction(() => {
|
|
154
|
+
fileHandleCache.set(handleId, file);
|
|
155
|
+
});
|
|
78
156
|
}
|
|
79
157
|
export function clearFileFromCache(handleId) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
return fileHandleCache;
|
|
158
|
+
runInAction(() => {
|
|
159
|
+
fileHandleCache.delete(handleId);
|
|
160
|
+
});
|
|
84
161
|
}
|
|
85
|
-
export function
|
|
86
|
-
|
|
162
|
+
export function hasFileHandlesInCache() {
|
|
163
|
+
// read in RpcMethodType.serializeArguments, which an RPC-fetch autorun can
|
|
164
|
+
// reach; untracked so populating the cache never re-triggers that autorun
|
|
165
|
+
// eslint-disable-next-line no-restricted-syntax -- self-write: the fetch this is reached from populates the cache
|
|
166
|
+
return untracked(() => fileHandleCache.size > 0);
|
|
87
167
|
}
|
|
88
168
|
export async function ensureFileHandleReady(handleId, requestPermission = true) {
|
|
89
|
-
const cached = fileHandleCache
|
|
169
|
+
const cached = fileHandleCache.get(handleId);
|
|
90
170
|
if (cached) {
|
|
91
171
|
return cached;
|
|
92
172
|
}
|
|
@@ -99,88 +179,100 @@ export async function ensureFileHandleReady(handleId, requestPermission = true)
|
|
|
99
179
|
throw new Error(`Permission denied for file "${handle.name}". Click "Restore access" to grant permission.`);
|
|
100
180
|
}
|
|
101
181
|
const file = await handle.getFile();
|
|
102
|
-
|
|
182
|
+
setFileInCache(handleId, file);
|
|
103
183
|
return file;
|
|
104
184
|
}
|
|
105
185
|
export async function storeFileHandleLocation(handle) {
|
|
106
186
|
const handleId = await storeFileHandle(handle);
|
|
107
187
|
const file = await handle.getFile();
|
|
108
|
-
|
|
188
|
+
setFileInCache(handleId, file);
|
|
109
189
|
return {
|
|
110
190
|
locationType: 'FileHandleLocation',
|
|
111
191
|
name: handle.name,
|
|
112
192
|
handleId,
|
|
113
193
|
};
|
|
114
194
|
}
|
|
195
|
+
async function settleFileHandle(handleId, requestPermission) {
|
|
196
|
+
try {
|
|
197
|
+
await ensureFileHandleReady(handleId, requestPermission);
|
|
198
|
+
return { handleId, success: true };
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
return { handleId, success: false, error };
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Resolves a batch of stored file handles, one result per id.
|
|
206
|
+
*
|
|
207
|
+
* With `requestPermission` set these run ONE AT A TIME, and that is the whole
|
|
208
|
+
* point of the branch. `requestPermission()` needs transient user activation and
|
|
209
|
+
* the browser puts a single file-access prompt on screen at a time, so N of them
|
|
210
|
+
* fired off one "Restore access" click means the first call takes the prompt and
|
|
211
|
+
* the rest are refused without the user ever seeing a dialog — files reported
|
|
212
|
+
* back as permission failures that nobody was asked about. Taking turns, each
|
|
213
|
+
* prompt waits for the one before it to be answered, and whatever the activation
|
|
214
|
+
* window no longer covers is simply still pending for the next click instead of
|
|
215
|
+
* being spent.
|
|
216
|
+
*
|
|
217
|
+
* Without it nothing can prompt, so there is nothing to take turns over and the
|
|
218
|
+
* batch runs at once.
|
|
219
|
+
*/
|
|
115
220
|
export async function restoreFileHandles(handleIds, requestPermission = false) {
|
|
221
|
+
if (!requestPermission) {
|
|
222
|
+
return Promise.all(handleIds.map(id => settleFileHandle(id, false)));
|
|
223
|
+
}
|
|
116
224
|
const results = [];
|
|
117
225
|
for (const handleId of handleIds) {
|
|
118
|
-
|
|
119
|
-
await ensureFileHandleReady(handleId, requestPermission);
|
|
120
|
-
results.push({ handleId, success: true });
|
|
121
|
-
}
|
|
122
|
-
catch (e) {
|
|
123
|
-
results.push({ handleId, success: false, error: e });
|
|
124
|
-
}
|
|
226
|
+
results.push(await settleFileHandle(handleId, true));
|
|
125
227
|
}
|
|
126
228
|
return results;
|
|
127
229
|
}
|
|
128
|
-
export function findFileHandleIds(obj
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
}
|
|
135
|
-
seen.add(obj);
|
|
136
|
-
if (Array.isArray(obj)) {
|
|
137
|
-
for (const item of obj) {
|
|
138
|
-
findFileHandleIds(item, handleIds, seen);
|
|
230
|
+
export function findFileHandleIds(obj) {
|
|
231
|
+
const handleIds = new Set();
|
|
232
|
+
const seen = new WeakSet();
|
|
233
|
+
function walk(o) {
|
|
234
|
+
if (!o || typeof o !== 'object' || seen.has(o)) {
|
|
235
|
+
return;
|
|
139
236
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
handleIds.add(record.handleId);
|
|
237
|
+
seen.add(o);
|
|
238
|
+
if (Array.isArray(o)) {
|
|
239
|
+
for (const item of o) {
|
|
240
|
+
walk(item);
|
|
241
|
+
}
|
|
146
242
|
}
|
|
147
|
-
|
|
148
|
-
|
|
243
|
+
else {
|
|
244
|
+
const record = o;
|
|
245
|
+
if (record.locationType === 'FileHandleLocation' &&
|
|
246
|
+
typeof record.handleId === 'string') {
|
|
247
|
+
handleIds.add(record.handleId);
|
|
248
|
+
}
|
|
249
|
+
for (const value of Object.values(record)) {
|
|
250
|
+
walk(value);
|
|
251
|
+
}
|
|
149
252
|
}
|
|
150
253
|
}
|
|
254
|
+
walk(obj);
|
|
151
255
|
return handleIds;
|
|
152
256
|
}
|
|
153
257
|
export async function restoreFileHandlesFromSnapshot(sessionSnapshot, requestPermission = false) {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
export function setPendingFileHandleIds(ids) {
|
|
165
|
-
pendingFileHandleIds = ids;
|
|
166
|
-
}
|
|
167
|
-
export function clearPendingFileHandleIds() {
|
|
168
|
-
pendingFileHandleIds = [];
|
|
169
|
-
}
|
|
170
|
-
export async function restorePendingFileHandles() {
|
|
171
|
-
if (pendingFileHandleIds.length === 0) {
|
|
172
|
-
return [];
|
|
173
|
-
}
|
|
174
|
-
const results = await restoreFileHandles(pendingFileHandleIds, true);
|
|
175
|
-
const stillFailed = results.filter(r => !r.success).map(r => r.handleId);
|
|
176
|
-
pendingFileHandleIds = stillFailed;
|
|
177
|
-
return results;
|
|
178
|
-
}
|
|
258
|
+
return restoreFileHandles([...findFileHandleIds(sessionSnapshot)], requestPermission);
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* creates a new location from the provided location including the appropriate
|
|
262
|
+
* suffix and location type
|
|
263
|
+
*
|
|
264
|
+
* @param location - the FileLocation
|
|
265
|
+
* @param suffix - the file suffix (e.g. .bam)
|
|
266
|
+
* @returns the constructed location object from the provided parameters
|
|
267
|
+
*/
|
|
179
268
|
export function makeIndex(location, suffix) {
|
|
180
269
|
if ('uri' in location) {
|
|
181
270
|
return {
|
|
182
271
|
uri: location.uri + suffix,
|
|
183
272
|
locationType: 'UriLocation',
|
|
273
|
+
// carry the parent's baseUri so a derived sibling index resolves against
|
|
274
|
+
// the same config location as the file it indexes
|
|
275
|
+
...(location.baseUri ? { baseUri: location.baseUri } : {}),
|
|
184
276
|
};
|
|
185
277
|
}
|
|
186
278
|
else if ('localPath' in location) {
|
|
@@ -193,36 +285,78 @@ export function makeIndex(location, suffix) {
|
|
|
193
285
|
return location;
|
|
194
286
|
}
|
|
195
287
|
}
|
|
288
|
+
/**
|
|
289
|
+
* constructs a potential index file (with suffix) from the provided file name
|
|
290
|
+
*
|
|
291
|
+
* @param name - the name of the index file
|
|
292
|
+
* @param typeA - one option of a potential two file suffix (e.g. CSI, BAI)
|
|
293
|
+
* @param typeB - the second option of a potential two file suffix (e.g. CSI, BAI)
|
|
294
|
+
* @returns a likely name of the index file for a given filename
|
|
295
|
+
*/
|
|
196
296
|
export function makeIndexType(name, typeA, typeB) {
|
|
197
297
|
return name?.toUpperCase().endsWith(typeA) ? typeA : typeB;
|
|
198
298
|
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
299
|
+
/**
|
|
300
|
+
* The `index` block a tabix-indexed adapter's guess writes: where the index is,
|
|
301
|
+
* and which of the two kinds it is.
|
|
302
|
+
*
|
|
303
|
+
* Eight guessers spelled this pair out by hand, which is the crossed-pair hazard
|
|
304
|
+
* `tabixIndexSnapshot` was extracted for on the config side: a `.csi` location
|
|
305
|
+
* filed under `indexType: 'TBI'` is a valid-looking config that opens no index
|
|
306
|
+
* at all, and nothing downstream can tell it from a correct one.
|
|
307
|
+
*
|
|
308
|
+
* BAM is deliberately not here, for the reason `tabixIndexFields` gives: BAI/CSI
|
|
309
|
+
* is a different enumeration over a different default, and folding the two would
|
|
310
|
+
* mean a slot whose vocabulary depends on its adapter.
|
|
311
|
+
*/
|
|
312
|
+
export function guessTabixIndex(file, index) {
|
|
313
|
+
return {
|
|
314
|
+
location: index ?? makeIndex(file, '.tbi'),
|
|
315
|
+
indexType: makeIndexType(index && getFileName(index), 'CSI', 'TBI'),
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Register a guess on `Core-guessAdapterForLocation`. Return an adapter config
|
|
320
|
+
* to claim the file, or `undefined` to defer to the plugins registered before
|
|
321
|
+
* this one.
|
|
322
|
+
*
|
|
323
|
+
* Prefer this over calling `addToExtensionPoint` directly: the chaining is done
|
|
324
|
+
* once here, so a plugin cannot break the chain by forgetting to delegate, nor
|
|
325
|
+
* drop an argument on the way through.
|
|
326
|
+
*/
|
|
327
|
+
export function addAdapterGuesser(pluginManager, guess) {
|
|
328
|
+
pluginManager.addToExtensionPoint('Core-guessAdapterForLocation', next => (file, index, adapterHint) => guess(file, index, adapterHint) ?? next(file, index, adapterHint));
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Register a guess on `Core-guessTrackTypeForLocation`. Return a track type
|
|
332
|
+
* name to claim the adapter, or `undefined` to defer. See `addAdapterGuesser`
|
|
333
|
+
* for why this wrapper exists — hand-written delegates here used to drop the
|
|
334
|
+
* optional `file`, which hid it from every guesser registered earlier in the
|
|
335
|
+
* chain.
|
|
336
|
+
*/
|
|
337
|
+
export function addTrackTypeGuesser(pluginManager, guess) {
|
|
338
|
+
pluginManager.addToExtensionPoint('Core-guessTrackTypeForLocation', next => (adapterName, file) => guess(adapterName, file) ?? next(adapterName, file));
|
|
339
|
+
}
|
|
340
|
+
const COMPRESSION_SUFFIXES = ['.gz', '.bgz', '.bz2', '.zst'];
|
|
341
|
+
/**
|
|
342
|
+
* Drop the format extension from a filename, plus any compression suffix, so
|
|
343
|
+
* `volvox.vcf.gz` becomes `volvox` rather than `volvox.vcf`. Names with no
|
|
344
|
+
* extension, and dotfiles, are returned unchanged.
|
|
345
|
+
*/
|
|
346
|
+
export function stripFileExtension(name) {
|
|
347
|
+
const lower = name.toLowerCase();
|
|
348
|
+
const base = COMPRESSION_SUFFIXES.some(suffix => lower.endsWith(suffix))
|
|
349
|
+
? name.slice(0, name.lastIndexOf('.'))
|
|
350
|
+
: name;
|
|
351
|
+
const dot = base.lastIndexOf('.');
|
|
352
|
+
return dot > 0 ? base.slice(0, dot) : base;
|
|
219
353
|
}
|
|
220
354
|
export function guessAdapter(file, index, adapterHint, model) {
|
|
221
355
|
if (model) {
|
|
222
356
|
const { pluginManager } = getEnv(model);
|
|
223
|
-
const adapterGuesser = pluginManager.evaluateExtensionPoint(
|
|
224
|
-
|
|
225
|
-
|
|
357
|
+
const adapterGuesser = pluginManager.evaluateExtensionPoint(
|
|
358
|
+
/** #extensionPoint Core-guessAdapterForLocation | sync | Guess an adapter config from a file location */
|
|
359
|
+
'Core-guessAdapterForLocation', () => undefined);
|
|
226
360
|
const adapter = adapterGuesser(file, index, adapterHint);
|
|
227
361
|
if (adapter) {
|
|
228
362
|
return adapter;
|
|
@@ -235,9 +369,9 @@ export function guessAdapter(file, index, adapterHint, model) {
|
|
|
235
369
|
export function guessTrackType(adapterType, model, file) {
|
|
236
370
|
if (model) {
|
|
237
371
|
const session = getSession(model);
|
|
238
|
-
const trackTypeGuesser = getEnv(session).pluginManager.evaluateExtensionPoint(
|
|
239
|
-
|
|
240
|
-
|
|
372
|
+
const trackTypeGuesser = getEnv(session).pluginManager.evaluateExtensionPoint(
|
|
373
|
+
/** #extensionPoint Core-guessTrackTypeForLocation | sync | Guess a track type from a file location */
|
|
374
|
+
'Core-guessTrackTypeForLocation', () => undefined);
|
|
241
375
|
const trackType = trackTypeGuesser(adapterType, file);
|
|
242
376
|
if (trackType) {
|
|
243
377
|
return trackType;
|
|
@@ -245,102 +379,350 @@ export function guessTrackType(adapterType, model, file) {
|
|
|
245
379
|
}
|
|
246
380
|
return 'FeatureTrack';
|
|
247
381
|
}
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
382
|
+
/**
|
|
383
|
+
* Expand a loose track description — a bare data-file URI, or an object with
|
|
384
|
+
* `uri` (and optional `index`) plus any extra config keys — into a full track
|
|
385
|
+
* config, the same inference the "Add track" flow does: the adapter and track
|
|
386
|
+
* type are guessed from the file via the format plugins, a stable `trackId` and
|
|
387
|
+
* a `name` are derived from the filename, and the assembly is stamped on. Extra
|
|
388
|
+
* keys on the input (`name`, `category`, `displays`, ...) override the inferred
|
|
389
|
+
* defaults. Takes a `pluginManager` (not a model) so it runs headlessly — in a
|
|
390
|
+
* worker/Node export as well as the browser. Throws when no format matches, so
|
|
391
|
+
* the caller can ask for a full config instead.
|
|
392
|
+
*/
|
|
393
|
+
export function guessTrackConf(input, pluginManager, assemblyName) {
|
|
394
|
+
const { uri, index, ...extra } = typeof input === 'string' ? { uri: input } : input;
|
|
395
|
+
const file = { uri, locationType: 'UriLocation' };
|
|
396
|
+
const indexLocation = index
|
|
397
|
+
? { uri: index, locationType: 'UriLocation' }
|
|
398
|
+
: undefined;
|
|
399
|
+
const adapterGuesser = pluginManager.evaluateExtensionPoint('Core-guessAdapterForLocation', () => undefined);
|
|
400
|
+
const adapter = adapterGuesser(file, indexLocation, undefined);
|
|
401
|
+
if (!adapter || adapter.type === UNKNOWN) {
|
|
402
|
+
throw new Error(`could not infer a track type from "${uri}"; pass a full track config instead`);
|
|
403
|
+
}
|
|
404
|
+
const trackTypeGuesser = pluginManager.evaluateExtensionPoint('Core-guessTrackTypeForLocation', () => undefined);
|
|
405
|
+
const name = getFileName(file);
|
|
406
|
+
return {
|
|
407
|
+
trackId: `${name}-${objectHash(adapter).slice(0, 8)}`,
|
|
408
|
+
type: trackTypeGuesser(adapter.type, file) ?? 'FeatureTrack',
|
|
409
|
+
name,
|
|
410
|
+
assemblyNames: assemblyName ? [assemblyName] : [],
|
|
411
|
+
adapter,
|
|
412
|
+
...extra,
|
|
255
413
|
};
|
|
256
|
-
conf.trackId = objectHash(conf);
|
|
257
|
-
return conf;
|
|
258
414
|
}
|
|
259
|
-
|
|
415
|
+
/**
|
|
416
|
+
* Whether a track snapshot is the loose `{ uri, ... }` form — a data file with
|
|
417
|
+
* no `adapter` — that {@link expandLooseTrackConfig} expands.
|
|
418
|
+
*/
|
|
419
|
+
export function isLooseTrackConfig(snap) {
|
|
420
|
+
return (typeof snap === 'object' &&
|
|
421
|
+
snap !== null &&
|
|
422
|
+
!Array.isArray(snap) &&
|
|
423
|
+
typeof snap.uri === 'string' &&
|
|
424
|
+
!('adapter' in snap));
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Expand a loose track config into a full one and leave any other snapshot
|
|
428
|
+
* untouched, so it can sit on every path a track snapshot enters the tree by:
|
|
429
|
+
* the track config union, the root config's frozen `tracks`, `addTrackConf`,
|
|
430
|
+
* and `showTrackGeneric`'s inline config.
|
|
431
|
+
*
|
|
432
|
+
* `{ "trackId": "reads", "uri": "reads.bam", "assemblyNames": ["hg38"] }` is a
|
|
433
|
+
* whole track: the adapter and track type come from the file's extension
|
|
434
|
+
* through the format plugins' guessers, the same inference the "Add track"
|
|
435
|
+
* flow runs, and `name` defaults to the file name. Any key written beside
|
|
436
|
+
* `uri` — `trackId`, `name`, `category`, `displayDefaults`, an explicit `type`
|
|
437
|
+
* — overrides what was inferred. `assemblyName` fills `assemblyNames` when the
|
|
438
|
+
* snapshot has none, for a config or embed that has exactly one assembly.
|
|
439
|
+
*/
|
|
440
|
+
export function expandLooseTrackConfig(snap, pluginManager, assemblyName) {
|
|
441
|
+
return isLooseTrackConfig(snap)
|
|
442
|
+
? guessTrackConf(snap, pluginManager, assemblyName)
|
|
443
|
+
: snap;
|
|
444
|
+
}
|
|
445
|
+
function generateProblemTrackConf(trackName, categories, label, description) {
|
|
260
446
|
const conf = {
|
|
261
447
|
type: 'FeatureTrack',
|
|
262
|
-
name: `${trackName} (
|
|
263
|
-
description
|
|
448
|
+
name: `${trackName} (${label})`,
|
|
449
|
+
description,
|
|
264
450
|
category: categories,
|
|
265
451
|
trackId: '',
|
|
266
452
|
};
|
|
267
453
|
conf.trackId = objectHash(conf);
|
|
268
454
|
return conf;
|
|
269
455
|
}
|
|
456
|
+
export function generateUnsupportedTrackConf(trackName, trackUrl, categories) {
|
|
457
|
+
return generateProblemTrackConf(trackName, categories, 'Unsupported', `Support not yet implemented for "${trackUrl}"`);
|
|
458
|
+
}
|
|
459
|
+
export function generateUnknownTrackConf(trackName, trackUrl, categories) {
|
|
460
|
+
return generateProblemTrackConf(trackName, categories, 'Unknown', `Could not determine track type for "${trackUrl}"`);
|
|
461
|
+
}
|
|
270
462
|
export function getTrackName(conf, session) {
|
|
271
|
-
const
|
|
463
|
+
const isMst = isStateTreeNode(conf);
|
|
464
|
+
const trackName = isMst
|
|
272
465
|
? readConfObject(conf, 'name')
|
|
273
466
|
: (conf.name ?? '');
|
|
274
|
-
const trackType =
|
|
275
|
-
? readConfObject(conf, 'type')
|
|
276
|
-
: conf.type;
|
|
467
|
+
const trackType = isMst ? readConfObject(conf, 'type') : conf.type;
|
|
277
468
|
if (!trackName && trackType === 'ReferenceSequenceTrack') {
|
|
278
469
|
const asm = session.assemblies.find(a => a.sequence === conf);
|
|
279
470
|
return asm
|
|
280
471
|
? `Reference sequence (${readConfObject(asm, 'displayName') || readConfObject(asm, 'name')})`
|
|
281
472
|
: 'Reference sequence';
|
|
282
473
|
}
|
|
283
|
-
|
|
474
|
+
const trackId = isMst
|
|
475
|
+
? readConfObject(conf, 'trackId')
|
|
476
|
+
: (conf.trackId ?? '');
|
|
477
|
+
return trackName || trackId;
|
|
478
|
+
}
|
|
479
|
+
/**
|
|
480
|
+
* Which display a track opens with in a given view, and the display config that
|
|
481
|
+
* display must use: `{ type, conf }`, or undefined when the view supports none
|
|
482
|
+
* of the track's displays.
|
|
483
|
+
*
|
|
484
|
+
* Two decisions, in this order, and the order is the point. The **type** is what
|
|
485
|
+
* the caller asked for, else the track's first declared display the view
|
|
486
|
+
* supports, else the track type's first supported display. The **config** is
|
|
487
|
+
* then whichever declared entry has that type — never "the first supported one",
|
|
488
|
+
* which is what let a display be created wearing another display's config node
|
|
489
|
+
* (a multi-sample VCF declares both the matrix and the regular display, so the
|
|
490
|
+
* regular one inherited the matrix's 20px connector-line zone and drew its
|
|
491
|
+
* clustering tree offset from the rows it labels). `display.type ===
|
|
492
|
+
* display.configuration.type` is the invariant `DisplayConfigurationReference`
|
|
493
|
+
* already assumes when it falls back to resolving a display config by type; this
|
|
494
|
+
* is where it has to hold.
|
|
495
|
+
*
|
|
496
|
+
* `conf` is undefined when the track config declares no entry of that type;
|
|
497
|
+
* `baseTrackConfig.preProcessSnapshot` injects one for every registered display
|
|
498
|
+
* type, so the caller's `${trackId}-${type}` id resolves to it.
|
|
499
|
+
*/
|
|
500
|
+
/**
|
|
501
|
+
* The display type names a view can render, as a lookup set. Built once per
|
|
502
|
+
* view and handed to {@link viewCanDisplayTrack} for every track, rather than
|
|
503
|
+
* rebuilt per track.
|
|
504
|
+
*/
|
|
505
|
+
export function viewDisplayNames(pluginManager, viewType) {
|
|
506
|
+
return new Set(pluginManager.getViewType(viewType).displayTypes.map(d => d.name));
|
|
507
|
+
}
|
|
508
|
+
/**
|
|
509
|
+
* Whether a view rendering `viewDisplays` can open a track of this type at all
|
|
510
|
+
* — does the track type declare a display the view draws. The coarse half of
|
|
511
|
+
* the question {@link pickDisplayForView} answers precisely: a picker that
|
|
512
|
+
* offers a track this says no to is offering one `showTrackGeneric` will
|
|
513
|
+
* refuse.
|
|
514
|
+
*
|
|
515
|
+
* Reads the *track type's* registered displays rather than a config's own
|
|
516
|
+
* `displays` array, which is both cheaper and the only form available on an
|
|
517
|
+
* un-hydrated frozen track config (ADR-032). The two agree, since
|
|
518
|
+
* `preprocessTrackConfigSnapshot` injects a stub display for every display the
|
|
519
|
+
* track type registers.
|
|
520
|
+
*
|
|
521
|
+
* Two answers that are easy to get wrong, and both have been:
|
|
522
|
+
*
|
|
523
|
+
* - A type **no plugin registered** answers false rather than throwing.
|
|
524
|
+
* `getTrackType` throws on an unknown name, and a frozen track config never
|
|
525
|
+
* passes the schema that would have rejected it at load — so a config naming
|
|
526
|
+
* a plugin that failed to load put that throw inside whatever loop was
|
|
527
|
+
* filtering tracks, and one unopenable track took out the entire list. The
|
|
528
|
+
* track selector and jb2export's circular-view filter met this separately.
|
|
529
|
+
* - A view type registering **no displays at all** constrains nothing, so
|
|
530
|
+
* every track passes. That is a policy rather than a fact, and it lives here
|
|
531
|
+
* so the pickers agree on it.
|
|
532
|
+
*/
|
|
533
|
+
export function viewCanDisplayTrack(pluginManager, viewDisplays, trackType) {
|
|
534
|
+
if (!pluginManager.trackTypes.has(trackType)) {
|
|
535
|
+
return false;
|
|
536
|
+
}
|
|
537
|
+
return (viewDisplays.size === 0 ||
|
|
538
|
+
pluginManager
|
|
539
|
+
.getTrackType(trackType)
|
|
540
|
+
.displayTypes.some(d => viewDisplays.has(d.name)));
|
|
541
|
+
}
|
|
542
|
+
export function pickDisplayForView({ declaredDisplays, requestedType, trackDisplayTypes, viewDisplayTypes, }) {
|
|
543
|
+
const supported = new Set(viewDisplayTypes);
|
|
544
|
+
const type = requestedType ??
|
|
545
|
+
declaredDisplays.find(d => supported.has(d.type))?.type ??
|
|
546
|
+
trackDisplayTypes.find(name => supported.has(name));
|
|
547
|
+
return type === undefined
|
|
548
|
+
? undefined
|
|
549
|
+
: { type, conf: declaredDisplays.find(d => d.type === type) };
|
|
550
|
+
}
|
|
551
|
+
// #endregion
|
|
552
|
+
// Resolve a session-spec `TrackInit` into the (trackId, trackSnapshot,
|
|
553
|
+
// displaySnapshot) triple that `showTrackGeneric` expects. Display props written
|
|
554
|
+
// inline on the track object (everything except trackId/trackSnapshot/
|
|
555
|
+
// displaySnapshot) fold into the display snapshot, so a spec can write
|
|
556
|
+
// `{ trackId, showDescriptions: false }` instead of nesting under
|
|
557
|
+
// `displaySnapshot`. An explicit `displaySnapshot` still wins over an inline
|
|
558
|
+
// key of the same name, and the older nested form keeps working unchanged.
|
|
559
|
+
// `showTrackGeneric` then routes any inline key that is a real config slot (e.g.
|
|
560
|
+
// `forceLoad`) onto the display config, so a session spec can declaratively
|
|
561
|
+
// force-load a track with `{ trackId, forceLoad: true }`.
|
|
562
|
+
export function normalizeTrackInit(t) {
|
|
563
|
+
if (typeof t === 'string') {
|
|
564
|
+
return { trackId: t, trackSnapshot: {}, displaySnapshot: {} };
|
|
565
|
+
}
|
|
566
|
+
else {
|
|
567
|
+
const { trackId, trackSnapshot, displaySnapshot, ...rest } = t;
|
|
568
|
+
return {
|
|
569
|
+
trackId,
|
|
570
|
+
trackSnapshot: trackSnapshot ?? {},
|
|
571
|
+
displaySnapshot: { ...rest, ...displaySnapshot },
|
|
572
|
+
};
|
|
573
|
+
}
|
|
284
574
|
}
|
|
285
|
-
export function showTrackGeneric(self, trackId,
|
|
575
|
+
export function showTrackGeneric(self, trackId,
|
|
576
|
+
// `object`, annotated, rather than inferred from the default. A bare `{}`
|
|
577
|
+
// accepts every non-nullish value, numbers included, which is how a synteny
|
|
578
|
+
// level index typechecked its way into a track snapshot — see the dotplot and
|
|
579
|
+
// comparative views' own `showTrack`, whose second parameter is this one.
|
|
580
|
+
//
|
|
581
|
+
// `object` and not `Record<string, unknown>`: the hazard is a primitive, and
|
|
582
|
+
// an index signature additionally rejects the precise snapshot interfaces
|
|
583
|
+
// callers legitimately pass (jbrowse-img's `DisplaySnapshot` is one).
|
|
584
|
+
initialSnapshot = {}, displayInitialSnapshot = {},
|
|
585
|
+
// The config itself, for a track no session list holds: a view that
|
|
586
|
+
// synthesizes a track only it can draw passes the config here and it lives on
|
|
587
|
+
// the track node, so closing the track takes the config with it. Without it
|
|
588
|
+
// such a config has to be parked in a session list that outlives the view.
|
|
589
|
+
inlineConf) {
|
|
286
590
|
const { pluginManager } = getEnv(self);
|
|
287
591
|
const session = getSession(self);
|
|
288
592
|
const found = self.tracks.find(t => t.configuration.trackId === trackId);
|
|
289
593
|
if (found) {
|
|
290
594
|
return found;
|
|
291
595
|
}
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
596
|
+
// Single choke point for all "open a track" paths — errors surface as
|
|
597
|
+
// snackbars. Config is validated before the push so the open set never holds
|
|
598
|
+
// a broken track.
|
|
599
|
+
try {
|
|
600
|
+
const rawConf = (inlineConf && expandLooseTrackConfig(inlineConf, pluginManager)) ??
|
|
601
|
+
session.getTrackById(trackId);
|
|
602
|
+
if (!rawConf) {
|
|
603
|
+
throw new Error(`Could not resolve identifier "${trackId}"`);
|
|
604
|
+
}
|
|
605
|
+
const confSnapshot = structuredClone(isStateTreeNode(rawConf) ? getSnapshot(rawConf) : rawConf);
|
|
606
|
+
const conf = pluginManager.evaluateExtensionPoint('Core-preProcessTrackConfig', confSnapshot);
|
|
607
|
+
const trackType = pluginManager.getTrackType(conf.type);
|
|
608
|
+
// Validate only a conf that is not already in the tree. `configSchema.create`
|
|
609
|
+
// here builds an entire config node and throws it away purely to surface a
|
|
610
|
+
// nice error; its preProcessSnapshot also re-runs Core-preProcessTrackConfig
|
|
611
|
+
// on a snapshot this function just preprocessed. A conf that is a state tree
|
|
612
|
+
// node was validated when MST created it, so all of that is pure waste on
|
|
613
|
+
// the common showTrack path.
|
|
614
|
+
if (!isStateTreeNode(rawConf)) {
|
|
615
|
+
try {
|
|
616
|
+
trackType.configSchema.create(conf, getEnv(self));
|
|
617
|
+
}
|
|
618
|
+
catch (e) {
|
|
619
|
+
throw new Error(`Track "${trackId}" has an invalid configuration: ${e}`, { cause: e });
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
// A track container that isn't itself a view — a synteny level, which owns
|
|
623
|
+
// a track list but has no width and no registered view type — takes the
|
|
624
|
+
// display choice from the view it sits in, which is the same node
|
|
625
|
+
// getContainingView already resolves to for everything else beneath it.
|
|
626
|
+
const view = isViewModel(self) ? self : getContainingView(self);
|
|
627
|
+
const viewType = pluginManager.getViewType(view.type);
|
|
628
|
+
const picked = pickDisplayForView({
|
|
629
|
+
declaredDisplays: conf.displays ?? [],
|
|
630
|
+
requestedType: displayInitialSnapshot.type,
|
|
631
|
+
trackDisplayTypes: trackType.displayTypes.map(d => d.name),
|
|
632
|
+
viewDisplayTypes: viewType.displayTypes.map(d => d.name),
|
|
633
|
+
});
|
|
634
|
+
if (!picked) {
|
|
635
|
+
throw new Error(`Could not find a compatible display for view type ${view.type}`);
|
|
636
|
+
}
|
|
637
|
+
const { type: displayType, conf: displayConf } = picked;
|
|
638
|
+
const displayId = displayConf?.displayId ?? `${trackId}-${displayType}`;
|
|
639
|
+
const track = trackType.stateModel.create({
|
|
640
|
+
...initialSnapshot,
|
|
641
|
+
type: conf.type,
|
|
642
|
+
configuration: inlineConf ?? trackId,
|
|
643
|
+
displays: [
|
|
644
|
+
{
|
|
645
|
+
...displayConf,
|
|
646
|
+
type: displayType,
|
|
647
|
+
configuration: displayId,
|
|
648
|
+
...displayInitialSnapshot,
|
|
649
|
+
},
|
|
650
|
+
],
|
|
651
|
+
});
|
|
652
|
+
self.tracks.push(track);
|
|
653
|
+
// Display settings (height, color, …) are config slots now, not display
|
|
654
|
+
// instance props — passed in the display snapshot they'd be dropped as
|
|
655
|
+
// unknown MST keys. Route the ones that are real slots onto the persistent
|
|
656
|
+
// display config so they take effect and survive hide/retick (#5591). Runs
|
|
657
|
+
// after the push so the display's config reference can resolve.
|
|
658
|
+
//
|
|
659
|
+
// preProcessSlotValues first, so a display schema's shorthand expansions
|
|
660
|
+
// and legacy-key migrations reach this path too: a session spec, share
|
|
661
|
+
// link, or embed writes slots here rather than creating a config from a
|
|
662
|
+
// snapshot, and those two surfaces are meant to speak the same vocabulary.
|
|
663
|
+
const display = track.displays[0];
|
|
664
|
+
const displaySlots = preProcessSlotValues(display.configuration, displayInitialSnapshot);
|
|
665
|
+
for (const [key, value] of Object.entries(displaySlots)) {
|
|
666
|
+
if (key !== 'type' && isConfigurationSlot(display.configuration, key)) {
|
|
667
|
+
// the key comes from a snapshot at runtime, and setConf's slot name is
|
|
668
|
+
// a compile-time type
|
|
669
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
670
|
+
display.configuration.setSlot(key, value);
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
// if this track came from a connection, persist its config so it survives
|
|
674
|
+
// reload without re-establishing the connection (no-op otherwise)
|
|
675
|
+
session.captureConnectionTrack?.(trackId);
|
|
676
|
+
return track;
|
|
303
677
|
}
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
const displayConf = displays.find((d) => supportedDisplays.has(d.type));
|
|
308
|
-
const snapshotType = displayInitialSnapshot.type;
|
|
309
|
-
const defaultDisplayType = displayConf?.type ??
|
|
310
|
-
trackType.displayTypes.find(d => supportedDisplays.has(d.name))?.name;
|
|
311
|
-
const displayType = snapshotType ?? defaultDisplayType;
|
|
312
|
-
if (!displayType) {
|
|
313
|
-
throw new Error(`Could not find a compatible display for view type ${self.type}`);
|
|
678
|
+
catch (e) {
|
|
679
|
+
session.notifyError(`${e}`, e);
|
|
680
|
+
return undefined;
|
|
314
681
|
}
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
configuration: displayId,
|
|
325
|
-
...displayConfState,
|
|
326
|
-
...displayInitialSnapshot,
|
|
327
|
-
},
|
|
328
|
-
],
|
|
329
|
-
});
|
|
330
|
-
self.tracks.push(track);
|
|
331
|
-
return track;
|
|
682
|
+
}
|
|
683
|
+
// Strip a track's identifier and its nested display identifiers (both are
|
|
684
|
+
// types.identifier) so a duplicated/copied snapshot doesn't collide with the
|
|
685
|
+
// source's ids when added back into the same session tree.
|
|
686
|
+
export function stripTrackIds(tracks) {
|
|
687
|
+
return tracks.map(({ id, displays, ...rest }) => ({
|
|
688
|
+
...rest,
|
|
689
|
+
displays: displays.map(({ id, ...d }) => d),
|
|
690
|
+
}));
|
|
332
691
|
}
|
|
333
692
|
export function hideTrackGeneric(self, trackId) {
|
|
334
693
|
const t = self.tracks.find(t => t.configuration.trackId === trackId);
|
|
335
694
|
if (t) {
|
|
336
695
|
self.tracks.remove(t);
|
|
337
|
-
|
|
696
|
+
// drop the persisted connection-track config if no other view holds it
|
|
697
|
+
// (persisted → guards saved-session size; the volatile working-copy cache
|
|
698
|
+
// in SessionTracks is deliberately not pruned, see editableTrackConfigs)
|
|
699
|
+
getSession(self).pruneConnectionTrackConfig?.(trackId);
|
|
700
|
+
return true;
|
|
338
701
|
}
|
|
339
|
-
return
|
|
702
|
+
return false;
|
|
340
703
|
}
|
|
704
|
+
// Returns true if the track is now shown, false if it was hidden or failed to
|
|
705
|
+
// open (callers use this to e.g. record only newly-opened tracks as recent).
|
|
341
706
|
export function toggleTrackGeneric(self, trackId) {
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
showTrackGeneric(self, trackId);
|
|
345
|
-
|
|
707
|
+
return hideTrackGeneric(self, trackId)
|
|
708
|
+
? false
|
|
709
|
+
: !!showTrackGeneric(self, trackId);
|
|
710
|
+
}
|
|
711
|
+
/**
|
|
712
|
+
* Every track config the session can show, connection-supplied ones included.
|
|
713
|
+
*
|
|
714
|
+
* `session.tracks` is only sessionTracks plus the admin config (see
|
|
715
|
+
* product-core's SessionTracks), so a track that arrived from a hub or registry
|
|
716
|
+
* connection is absent from it while still being toggleable from the track
|
|
717
|
+
* selector, which unions the same two sources. Anything answering "what tracks
|
|
718
|
+
* exist for X" wants this, or a feature silently can't see connection tracks.
|
|
719
|
+
*
|
|
720
|
+
* Note `session.tracks` already contains `sessionTracks` — unioning those two
|
|
721
|
+
* yields every session track twice.
|
|
722
|
+
*/
|
|
723
|
+
export function allSessionTracks(session) {
|
|
724
|
+
const connectionTracks = (session.connectionInstances ?? []).flatMap(conn => conn.tracks);
|
|
725
|
+
return connectionTracks.length
|
|
726
|
+
? [...session.tracks, ...connectionTracks]
|
|
727
|
+
: session.tracks;
|
|
346
728
|
}
|