@genome-spy/core 0.73.0 → 0.75.0
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/dist/bundle/AbortablePromiseCache-3gHJdF3E.js +96 -0
- package/dist/bundle/browser-BTgw5ieH.js +126 -0
- package/dist/bundle/chunk-DmhlhrBa.js +11 -0
- package/dist/bundle/esm-BDFRLEuD.js +1248 -0
- package/dist/bundle/esm-BygJiwh0.js +573 -0
- package/dist/bundle/esm-CGX-qz1d.js +155 -0
- package/dist/bundle/esm-CgfVIRJ-.js +121 -0
- package/dist/bundle/esm-CuMSzCHy.js +298 -0
- package/dist/bundle/esm-DMXpJXM4.js +369 -0
- package/dist/bundle/esm-DQiq2Zhd.js +1426 -0
- package/dist/bundle/esm-DtE8VqAv.js +1015 -0
- package/dist/bundle/esm-sIoQYZ21.js +461 -0
- package/dist/bundle/index.es.js +21266 -25938
- package/dist/bundle/index.js +367 -383
- package/dist/bundle/parquetRead-DG_-F5j5.js +1609 -0
- package/dist/schema.json +13421 -7210
- package/dist/src/config/axisConfig.d.ts +16 -0
- package/dist/src/config/axisConfig.d.ts.map +1 -0
- package/dist/src/config/axisConfig.js +84 -0
- package/dist/src/config/defaultConfig.d.ts +3 -0
- package/dist/src/config/defaultConfig.d.ts.map +1 -0
- package/dist/src/config/defaultConfig.js +38 -0
- package/dist/src/config/defaults/axisDefaults.d.ts +5 -0
- package/dist/src/config/defaults/axisDefaults.d.ts.map +1 -0
- package/dist/src/config/defaults/axisDefaults.js +72 -0
- package/dist/src/config/defaults/markDefaults.d.ts +15 -0
- package/dist/src/config/defaults/markDefaults.d.ts.map +1 -0
- package/dist/src/config/defaults/markDefaults.js +121 -0
- package/dist/src/config/defaults/scaleDefaults.d.ts +5 -0
- package/dist/src/config/defaults/scaleDefaults.d.ts.map +1 -0
- package/dist/src/config/defaults/scaleDefaults.js +18 -0
- package/dist/src/config/defaults/titleDefaults.d.ts +5 -0
- package/dist/src/config/defaults/titleDefaults.d.ts.map +1 -0
- package/dist/src/config/defaults/titleDefaults.js +47 -0
- package/dist/src/config/defaults/viewDefaults.d.ts +3 -0
- package/dist/src/config/defaults/viewDefaults.d.ts.map +1 -0
- package/dist/src/config/defaults/viewDefaults.js +2 -0
- package/dist/src/config/markConfig.d.ts +8 -0
- package/dist/src/config/markConfig.d.ts.map +1 -0
- package/dist/src/config/markConfig.js +27 -0
- package/dist/src/config/mergeConfig.d.ts +8 -0
- package/dist/src/config/mergeConfig.d.ts.map +1 -0
- package/dist/src/config/mergeConfig.js +81 -0
- package/dist/src/config/resolveConfig.d.ts +22 -0
- package/dist/src/config/resolveConfig.d.ts.map +1 -0
- package/dist/src/config/resolveConfig.js +32 -0
- package/dist/src/config/scaleConfig.d.ts +40 -0
- package/dist/src/config/scaleConfig.d.ts.map +1 -0
- package/dist/src/config/scaleConfig.js +220 -0
- package/dist/src/config/styleUtils.d.ts +6 -0
- package/dist/src/config/styleUtils.d.ts.map +1 -0
- package/dist/src/config/styleUtils.js +10 -0
- package/dist/src/config/themes.d.ts +15 -0
- package/dist/src/config/themes.d.ts.map +1 -0
- package/dist/src/config/themes.js +293 -0
- package/dist/src/config/titleConfig.d.ts +12 -0
- package/dist/src/config/titleConfig.d.ts.map +1 -0
- package/dist/src/config/titleConfig.js +42 -0
- package/dist/src/config/viewConfig.d.ts +7 -0
- package/dist/src/config/viewConfig.d.ts.map +1 -0
- package/dist/src/config/viewConfig.js +29 -0
- package/dist/src/data/flowNode.d.ts +22 -1
- package/dist/src/data/flowNode.d.ts.map +1 -1
- package/dist/src/data/flowNode.js +37 -1
- package/dist/src/data/formats/bed.d.ts.map +1 -1
- package/dist/src/data/formats/bed.js +6 -1
- package/dist/src/data/formats/bedpe.d.ts.map +1 -1
- package/dist/src/data/formats/bedpe.js +4 -0
- package/dist/src/data/formats/fasta.d.ts.map +1 -1
- package/dist/src/data/formats/fasta.js +4 -0
- package/dist/src/data/formats/parquet.d.ts.map +1 -1
- package/dist/src/data/formats/parquet.js +4 -0
- package/dist/src/data/sources/dataSourceFactory.d.ts +2 -13
- package/dist/src/data/sources/dataSourceFactory.d.ts.map +1 -1
- package/dist/src/data/sources/dataSourceFactory.js +5 -141
- package/dist/src/data/sources/dataUtils.d.ts +25 -0
- package/dist/src/data/sources/dataUtils.d.ts.map +1 -1
- package/dist/src/data/sources/dataUtils.js +23 -0
- package/dist/src/data/sources/inlineSource.js +2 -2
- package/dist/src/data/sources/lazy/axisGenomeSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/axisGenomeSource.js +11 -0
- package/dist/src/data/sources/lazy/axisTickSource.d.ts +1 -1
- package/dist/src/data/sources/lazy/axisTickSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/axisTickSource.js +19 -8
- package/dist/src/data/sources/lazy/bamSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/bamSource.js +11 -0
- package/dist/src/data/sources/lazy/bigBedSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/bigBedSource.js +12 -1
- package/dist/src/data/sources/lazy/bigWigSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/bigWigSource.js +11 -0
- package/dist/src/data/sources/lazy/gff3Source.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/gff3Source.js +12 -1
- package/dist/src/data/sources/lazy/indexedFastaSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/indexedFastaSource.js +11 -0
- package/dist/src/data/sources/lazy/lazyDataSourceRegistry.d.ts +27 -0
- package/dist/src/data/sources/lazy/lazyDataSourceRegistry.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/lazyDataSourceRegistry.js +65 -0
- package/dist/src/data/sources/lazy/registerBuiltInLazySources.d.ts +2 -0
- package/dist/src/data/sources/lazy/registerBuiltInLazySources.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/registerBuiltInLazySources.js +8 -0
- package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/singleAxisLazySource.js +11 -2
- package/dist/src/data/sources/lazy/vcfSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/vcfSource.js +11 -0
- package/dist/src/data/sources/urlSource.d.ts.map +1 -1
- package/dist/src/data/sources/urlSource.js +13 -5
- package/dist/src/data/transforms/aggregate.d.ts +1 -0
- package/dist/src/data/transforms/aggregate.d.ts.map +1 -1
- package/dist/src/data/transforms/aggregate.js +30 -8
- package/dist/src/data/transforms/aggregateOps.d.ts.map +1 -1
- package/dist/src/data/transforms/aggregateOps.js +12 -1
- package/dist/src/data/transforms/coverage.js +2 -2
- package/dist/src/data/transforms/filter.js +1 -1
- package/dist/src/data/transforms/filterScoredLabels.d.ts +6 -0
- package/dist/src/data/transforms/filterScoredLabels.d.ts.map +1 -1
- package/dist/src/data/transforms/filterScoredLabels.js +9 -0
- package/dist/src/data/transforms/measureText.d.ts +1 -0
- package/dist/src/data/transforms/measureText.d.ts.map +1 -1
- package/dist/src/data/transforms/measureText.js +14 -5
- package/dist/src/data/transforms/pileup.d.ts.map +1 -1
- package/dist/src/data/transforms/pileup.js +1 -2
- package/dist/src/data/transforms/regexFold.d.ts.map +1 -1
- package/dist/src/data/transforms/regexFold.js +0 -1
- package/dist/src/embedFactory.d.ts +13 -0
- package/dist/src/embedFactory.d.ts.map +1 -0
- package/dist/src/embedFactory.js +127 -0
- package/dist/src/encoder/accessor.d.ts +3 -12
- package/dist/src/encoder/accessor.d.ts.map +1 -1
- package/dist/src/encoder/accessor.js +10 -65
- package/dist/src/encoder/encoder.d.ts +51 -8
- package/dist/src/encoder/encoder.d.ts.map +1 -1
- package/dist/src/encoder/encoder.js +179 -55
- package/dist/src/fonts/bmFontManager.js +1 -1
- package/dist/src/full.d.ts +2 -0
- package/dist/src/full.d.ts.map +1 -0
- package/dist/src/full.js +2 -0
- package/dist/src/genome/genome.d.ts +8 -0
- package/dist/src/genome/genome.d.ts.map +1 -1
- package/dist/src/genome/genome.js +16 -2
- package/dist/src/genome/genomeStore.js +1 -1
- package/dist/src/genome/rootGenomeConfig.d.ts.map +1 -1
- package/dist/src/genome/rootGenomeConfig.js +6 -2
- package/dist/src/genome/scaleLocus.d.ts.map +1 -1
- package/dist/src/genome/scaleLocus.js +31 -7
- package/dist/src/genomeSpy/cursorManager.d.ts +69 -0
- package/dist/src/genomeSpy/cursorManager.d.ts.map +1 -0
- package/dist/src/genomeSpy/cursorManager.js +131 -0
- package/dist/src/genomeSpy/headlessBootstrap.d.ts +113 -0
- package/dist/src/genomeSpy/headlessBootstrap.d.ts.map +1 -0
- package/dist/src/genomeSpy/headlessBootstrap.js +246 -0
- package/dist/src/genomeSpy/interactionController.d.ts +5 -0
- package/dist/src/genomeSpy/interactionController.d.ts.map +1 -1
- package/dist/src/genomeSpy/interactionController.js +292 -59
- package/dist/src/genomeSpy/interactionDispatcher.d.ts +50 -0
- package/dist/src/genomeSpy/interactionDispatcher.d.ts.map +1 -0
- package/dist/src/genomeSpy/interactionDispatcher.js +203 -0
- package/dist/src/genomeSpy/viewContextFactory.d.ts +4 -2
- package/dist/src/genomeSpy/viewContextFactory.d.ts.map +1 -1
- package/dist/src/genomeSpy/viewContextFactory.js +12 -4
- package/dist/src/genomeSpy/viewDataInit.d.ts.map +1 -1
- package/dist/src/genomeSpy/viewDataInit.js +7 -3
- package/dist/src/genomeSpy.d.ts +1 -124
- package/dist/src/genomeSpy.d.ts.map +1 -1
- package/dist/src/genomeSpy.js +7 -688
- package/dist/src/genomeSpyBase.d.ts +133 -0
- package/dist/src/genomeSpyBase.d.ts.map +1 -0
- package/dist/src/genomeSpyBase.js +719 -0
- package/dist/src/gl/arrayBuilder.d.ts.map +1 -1
- package/dist/src/gl/arrayBuilder.js +0 -3
- package/dist/src/gl/colorUtils.d.ts.map +1 -1
- package/dist/src/gl/colorUtils.js +3 -0
- package/dist/src/gl/dataToVertices.d.ts +12 -14
- package/dist/src/gl/dataToVertices.d.ts.map +1 -1
- package/dist/src/gl/dataToVertices.js +121 -95
- package/dist/src/gl/glslScaleGenerator.d.ts +5 -2
- package/dist/src/gl/glslScaleGenerator.d.ts.map +1 -1
- package/dist/src/gl/glslScaleGenerator.js +15 -15
- package/dist/src/gl/vertexRangeIndex.d.ts +23 -0
- package/dist/src/gl/vertexRangeIndex.d.ts.map +1 -0
- package/dist/src/gl/vertexRangeIndex.js +150 -0
- package/dist/src/index.d.ts +3 -9
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +5 -114
- package/dist/src/marks/__snapshots__/shaderSnapshot.test.js.snap +4462 -0
- package/dist/src/marks/link.d.ts.map +1 -1
- package/dist/src/marks/link.js +0 -23
- package/dist/src/marks/mark.d.ts +8 -1
- package/dist/src/marks/mark.d.ts.map +1 -1
- package/dist/src/marks/mark.js +61 -20
- package/dist/src/marks/markUtils.d.ts +18 -1
- package/dist/src/marks/markUtils.d.ts.map +1 -1
- package/dist/src/marks/markUtils.js +52 -4
- package/dist/src/marks/point.d.ts.map +1 -1
- package/dist/src/marks/point.js +6 -26
- package/dist/src/marks/rect.d.ts.map +1 -1
- package/dist/src/marks/rect.js +13 -21
- package/dist/src/marks/rule.d.ts +7 -2
- package/dist/src/marks/rule.d.ts.map +1 -1
- package/dist/src/marks/rule.js +125 -16
- package/dist/src/marks/text.d.ts.map +1 -1
- package/dist/src/marks/text.js +5 -47
- package/dist/src/minimal.d.ts +8 -0
- package/dist/src/minimal.d.ts.map +1 -0
- package/dist/src/minimal.js +21 -0
- package/dist/src/paramRuntime/expressionCompiler.d.ts +2 -1
- package/dist/src/paramRuntime/expressionCompiler.d.ts.map +1 -1
- package/dist/src/paramRuntime/expressionCompiler.js +3 -2
- package/dist/src/paramRuntime/expressionRef.d.ts +4 -1
- package/dist/src/paramRuntime/expressionRef.d.ts.map +1 -1
- package/dist/src/paramRuntime/expressionRef.js +10 -3
- package/dist/src/paramRuntime/graphRuntime.d.ts.map +1 -1
- package/dist/src/paramRuntime/graphRuntime.js +15 -6
- package/dist/src/paramRuntime/paramRuntime.d.ts +8 -2
- package/dist/src/paramRuntime/paramRuntime.d.ts.map +1 -1
- package/dist/src/paramRuntime/paramRuntime.js +10 -5
- package/dist/src/paramRuntime/types.d.ts +1 -0
- package/dist/src/paramRuntime/types.d.ts.map +1 -1
- package/dist/src/paramRuntime/types.js +1 -0
- package/dist/src/paramRuntime/viewParamRuntime.d.ts +24 -4
- package/dist/src/paramRuntime/viewParamRuntime.d.ts.map +1 -1
- package/dist/src/paramRuntime/viewParamRuntime.js +52 -6
- package/dist/src/scale/scale.d.ts.map +1 -1
- package/dist/src/scale/scale.js +14 -7
- package/dist/src/scales/axisResolution.d.ts.map +1 -1
- package/dist/src/scales/axisResolution.js +9 -5
- package/dist/src/scales/domainPlanner.d.ts +82 -16
- package/dist/src/scales/domainPlanner.d.ts.map +1 -1
- package/dist/src/scales/domainPlanner.js +364 -131
- package/dist/src/scales/indexLikeDomainUtils.d.ts +29 -0
- package/dist/src/scales/indexLikeDomainUtils.d.ts.map +1 -0
- package/dist/src/scales/indexLikeDomainUtils.js +67 -0
- package/dist/src/scales/resolutionMemberOrder.d.ts +15 -0
- package/dist/src/scales/resolutionMemberOrder.d.ts.map +1 -0
- package/dist/src/scales/resolutionMemberOrder.js +22 -0
- package/dist/src/scales/scaleInstanceManager.d.ts.map +1 -1
- package/dist/src/scales/scaleInstanceManager.js +7 -2
- package/dist/src/scales/scaleInteractionController.d.ts.map +1 -1
- package/dist/src/scales/scaleInteractionController.js +43 -4
- package/dist/src/scales/scalePropsResolver.d.ts +5 -3
- package/dist/src/scales/scalePropsResolver.d.ts.map +1 -1
- package/dist/src/scales/scalePropsResolver.js +108 -8
- package/dist/src/scales/scaleResolution.d.ts +35 -1
- package/dist/src/scales/scaleResolution.d.ts.map +1 -1
- package/dist/src/scales/scaleResolution.js +381 -66
- package/dist/src/scales/scaleResolutionTestUtils.d.ts.map +1 -1
- package/dist/src/scales/scaleResolutionTestUtils.js +6 -2
- package/dist/src/scales/scaleRules.d.ts.map +1 -1
- package/dist/src/scales/scaleRules.js +16 -2
- package/dist/src/scales/selectionDomainUtils.d.ts +30 -0
- package/dist/src/scales/selectionDomainUtils.d.ts.map +1 -1
- package/dist/src/scales/selectionDomainUtils.js +116 -1
- package/dist/src/screenshotExport.d.ts +23 -0
- package/dist/src/screenshotExport.d.ts.map +1 -0
- package/dist/src/screenshotExport.js +44 -0
- package/dist/src/screenshotHarness.d.ts.map +1 -1
- package/dist/src/screenshotHarness.js +26 -25
- package/dist/src/spec/axis.d.ts +43 -32
- package/dist/src/spec/channel.d.ts +19 -13
- package/dist/src/spec/config.d.ts +264 -0
- package/dist/src/spec/data.d.ts +19 -0
- package/dist/src/spec/decoration.d.ts +51 -0
- package/dist/src/spec/exampleFiles.d.ts +12 -0
- package/dist/src/spec/exampleFiles.d.ts.map +1 -0
- package/dist/src/spec/exampleFiles.js +52 -0
- package/dist/src/spec/font.d.ts +1 -1
- package/dist/src/spec/mark.d.ts +97 -13
- package/dist/src/spec/parameter.d.ts +30 -10
- package/dist/src/spec/root.d.ts +14 -0
- package/dist/src/spec/scale.d.ts +31 -14
- package/dist/src/spec/title.d.ts +13 -2
- package/dist/src/spec/tooltip.d.ts +1 -1
- package/dist/src/spec/transform.d.ts +39 -4
- package/dist/src/spec/view.d.ts +67 -19
- package/dist/src/styles/genome-spy.css +55 -55
- package/dist/src/styles/genome-spy.css.d.ts +1 -1
- package/dist/src/styles/genome-spy.css.d.ts.map +1 -1
- package/dist/src/styles/genome-spy.css.js +23 -22
- package/dist/src/testSetup.d.ts +2 -0
- package/dist/src/testSetup.d.ts.map +1 -0
- package/dist/src/testSetup.js +5 -0
- package/dist/src/tooltip/dataTooltipHandler.js +8 -2
- package/dist/src/tooltip/tooltipContext.d.ts.map +1 -1
- package/dist/src/tooltip/tooltipContext.js +3 -2
- package/dist/src/types/embedApi.d.ts +7 -0
- package/dist/src/types/encoder.d.ts +17 -15
- package/dist/src/types/scaleResolutionApi.d.ts +20 -0
- package/dist/src/types/viewContext.d.ts +23 -1
- package/dist/src/utils/expression.d.ts +18 -10
- package/dist/src/utils/expression.d.ts.map +1 -1
- package/dist/src/utils/expression.js +354 -19
- package/dist/src/utils/field.d.ts.map +1 -1
- package/dist/src/utils/field.js +0 -1
- package/dist/src/utils/inertia.d.ts.map +1 -1
- package/dist/src/utils/inertia.js +0 -1
- package/dist/src/utils/inputBinding.d.ts +1 -1
- package/dist/src/utils/interaction.d.ts +109 -0
- package/dist/src/utils/interaction.d.ts.map +1 -0
- package/dist/src/utils/interaction.js +200 -0
- package/dist/src/utils/interactionEvent.d.ts +21 -42
- package/dist/src/utils/interactionEvent.d.ts.map +1 -1
- package/dist/src/utils/interactionEvent.js +43 -66
- package/dist/src/utils/kWayMerge.js +1 -1
- package/dist/src/utils/mergeObjects.d.ts.map +1 -1
- package/dist/src/utils/mergeObjects.js +0 -2
- package/dist/src/utils/radixSort.d.ts.map +1 -1
- package/dist/src/utils/radixSort.js +0 -2
- package/dist/src/utils/throttle.d.ts.map +1 -1
- package/dist/src/utils/throttle.js +0 -2
- package/dist/src/utils/ui/tooltip.d.ts +1 -0
- package/dist/src/utils/ui/tooltip.d.ts.map +1 -1
- package/dist/src/utils/ui/tooltip.js +1 -0
- package/dist/src/utils/url.js +1 -1
- package/dist/src/view/axisGridView.d.ts +1 -1
- package/dist/src/view/axisGridView.d.ts.map +1 -1
- package/dist/src/view/axisGridView.js +2 -47
- package/dist/src/view/axisView.d.ts +2 -3
- package/dist/src/view/axisView.d.ts.map +1 -1
- package/dist/src/view/axisView.js +251 -106
- package/dist/src/view/concatView.d.ts +2 -1
- package/dist/src/view/concatView.d.ts.map +1 -1
- package/dist/src/view/concatView.js +4 -2
- package/dist/src/view/containerMutationHelper.d.ts +3 -0
- package/dist/src/view/containerMutationHelper.d.ts.map +1 -1
- package/dist/src/view/containerMutationHelper.js +4 -1
- package/dist/src/view/facetView.d.ts +1 -1
- package/dist/src/view/facetView.js +3 -3
- package/dist/src/view/flowBuilder.d.ts +1 -1
- package/dist/src/view/flowBuilder.d.ts.map +1 -1
- package/dist/src/view/flowBuilder.js +13 -9
- package/dist/src/view/gridView/gridChild.d.ts +6 -0
- package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
- package/dist/src/view/gridView/gridChild.js +72 -43
- package/dist/src/view/gridView/gridView.d.ts.map +1 -1
- package/dist/src/view/gridView/gridView.js +255 -101
- package/dist/src/view/gridView/keyboardZoomController.d.ts +2 -2
- package/dist/src/view/gridView/keyboardZoomController.d.ts.map +1 -1
- package/dist/src/view/gridView/keyboardZoomController.js +1 -1
- package/dist/src/view/gridView/scrollbar.d.ts.map +1 -1
- package/dist/src/view/gridView/scrollbar.js +4 -2
- package/dist/src/view/gridView/selectionRect.d.ts +4 -0
- package/dist/src/view/gridView/selectionRect.d.ts.map +1 -1
- package/dist/src/view/gridView/selectionRect.js +20 -1
- package/dist/src/view/gridView/separatorView.d.ts +1 -0
- package/dist/src/view/gridView/separatorView.d.ts.map +1 -1
- package/dist/src/view/gridView/separatorView.js +9 -0
- package/dist/src/view/interactionRouting.d.ts +20 -0
- package/dist/src/view/interactionRouting.d.ts.map +1 -0
- package/dist/src/view/interactionRouting.js +53 -0
- package/dist/src/view/layerView.d.ts.map +1 -1
- package/dist/src/view/layerView.js +12 -9
- package/dist/src/view/layout/grid.js +1 -1
- package/dist/src/view/renderingContext/bufferedViewRenderingContext.d.ts.map +1 -1
- package/dist/src/view/renderingContext/bufferedViewRenderingContext.js +0 -2
- package/dist/src/view/resolutionPlanner.d.ts +9 -0
- package/dist/src/view/resolutionPlanner.d.ts.map +1 -0
- package/dist/src/view/resolutionPlanner.js +302 -0
- package/dist/src/view/testUtils.d.ts +17 -3
- package/dist/src/view/testUtils.d.ts.map +1 -1
- package/dist/src/view/testUtils.js +62 -69
- package/dist/src/view/title.d.ts +8 -1
- package/dist/src/view/title.d.ts.map +1 -1
- package/dist/src/view/title.js +66 -76
- package/dist/src/view/unitView.d.ts +1 -1
- package/dist/src/view/unitView.d.ts.map +1 -1
- package/dist/src/view/unitView.js +72 -169
- package/dist/src/view/view.d.ts +76 -30
- package/dist/src/view/view.d.ts.map +1 -1
- package/dist/src/view/view.js +138 -48
- package/dist/src/view/viewFactory.d.ts +11 -3
- package/dist/src/view/viewFactory.d.ts.map +1 -1
- package/dist/src/view/viewFactory.js +37 -11
- package/dist/src/view/viewUtils.d.ts.map +1 -1
- package/dist/src/view/viewUtils.js +41 -5
- package/dist/src/view/zoom.d.ts +2 -2
- package/dist/src/view/zoom.d.ts.map +1 -1
- package/dist/src/view/zoom.js +21 -23
- package/package.json +18 -10
- package/dist/bundle/AbortablePromiseCache-Dj0vzLnp.js +0 -149
- package/dist/bundle/browser-0iNU5Wit.js +0 -138
- package/dist/bundle/index-BYsZN7b0.js +0 -1597
- package/dist/bundle/index-C3kClAEN.js +0 -1771
- package/dist/bundle/index-C7wOh6y1.js +0 -657
- package/dist/bundle/index-CRaQAuki.js +0 -326
- package/dist/bundle/index-D9v1PCj9.js +0 -507
- package/dist/bundle/index-GDOuv_D5.js +0 -266
- package/dist/bundle/index-Gt44EOIH.js +0 -628
- package/dist/bundle/inflate-GtwLkvSP.js +0 -1048
- package/dist/bundle/parquetRead-BnAGCa4_.js +0 -1663
- package/dist/bundle/unzip-Bac01w6X.js +0 -1492
- package/dist/src/config/scaleDefaults.d.ts +0 -8
- package/dist/src/config/scaleDefaults.d.ts.map +0 -1
- package/dist/src/config/scaleDefaults.js +0 -45
|
@@ -2,62 +2,155 @@ import {
|
|
|
2
2
|
isIntervalSelection,
|
|
3
3
|
makeSelectionTestExpression,
|
|
4
4
|
} from "../selection/selection.js";
|
|
5
|
-
import {
|
|
5
|
+
import { createAccessor } from "./accessor.js";
|
|
6
|
+
import { makeConstantExprRef } from "../paramRuntime/paramUtils.js";
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* Creates a host-side predicate for selection-driven conditional encoding.
|
|
10
|
+
* The selection test expression is compiled lazily when the predicate is
|
|
11
|
+
* first evaluated so encoder construction does not depend on eager selection
|
|
12
|
+
* materialization.
|
|
11
13
|
*
|
|
12
14
|
* @param {string} param
|
|
13
15
|
* @param {import("../spec/channel.js").Encoding} encoding
|
|
14
16
|
* @param {{ findValue: (param: string) => any, createExpression: (expr: string) => import("../paramRuntime/types.js").ExprRefFunction }} paramRuntime
|
|
15
17
|
* @param {boolean} empty
|
|
18
|
+
* @returns {import("../types/encoder.js").Predicate}
|
|
16
19
|
*/
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
export function createSelectionPredicate(param, encoding, paramRuntime, empty) {
|
|
21
|
+
/**
|
|
22
|
+
* @typedef {import("../data/flowNode.js").Datum} Datum
|
|
23
|
+
* @typedef {import("../types/selectionTypes.js").Selection} Selection
|
|
24
|
+
* @typedef {import("../types/encoder.js").Predicate} Predicate
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
/** @type {import("../paramRuntime/types.js").ExprRefFunction | undefined} */
|
|
28
|
+
let compiled;
|
|
29
|
+
|
|
30
|
+
const fallback = makeConstantExprRef(false);
|
|
31
|
+
|
|
32
|
+
const ensureCompiled = () => {
|
|
33
|
+
if (compiled) {
|
|
34
|
+
return compiled;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const selection = /** @type {Selection | undefined} */ (
|
|
21
38
|
paramRuntime.findValue(param)
|
|
22
39
|
);
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
40
|
+
if (!selection) {
|
|
41
|
+
return fallback;
|
|
42
|
+
}
|
|
26
43
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
continue;
|
|
36
|
-
} else if ("condition" in channelDef) {
|
|
37
|
-
const condition = channelDef.condition;
|
|
38
|
-
if (isFieldDef(condition)) {
|
|
39
|
-
fields[channel] = condition.field;
|
|
44
|
+
/** @type {Partial<Record<import("../spec/channel.js").PositionalChannel, import("../spec/channel.js").Field>>} */
|
|
45
|
+
const fields = {};
|
|
46
|
+
if (isIntervalSelection(selection)) {
|
|
47
|
+
const channels = Object.keys(selection.intervals);
|
|
48
|
+
for (const channel of channels) {
|
|
49
|
+
const channelDef = encoding[channel];
|
|
50
|
+
if (isFieldDef(channelDef)) {
|
|
51
|
+
fields[channel] = channelDef.field;
|
|
40
52
|
continue;
|
|
53
|
+
} else if (channelDef && "condition" in channelDef) {
|
|
54
|
+
const condition = channelDef.condition;
|
|
55
|
+
if (isFieldDef(condition)) {
|
|
56
|
+
fields[channel] = condition.field;
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
41
59
|
}
|
|
60
|
+
throw new Error(
|
|
61
|
+
`Selection "${param}" has an interval for "${channel}" channel, but could not find a fieldDef: ${JSON.stringify(encoding[channel])}`
|
|
62
|
+
);
|
|
42
63
|
}
|
|
43
|
-
throw new Error(
|
|
44
|
-
`Selection "${param}" has an interval for "${channel}" channel, but could not find a fieldDef: ${JSON.stringify(encoding[channel])}`
|
|
45
|
-
);
|
|
46
64
|
}
|
|
47
|
-
}
|
|
48
65
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
66
|
+
const expr = makeSelectionTestExpression(
|
|
67
|
+
{ type: "filter", param, fields, empty },
|
|
68
|
+
selection
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
compiled = paramRuntime.createExpression(expr);
|
|
72
|
+
return compiled;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
/** @type {Predicate} */
|
|
76
|
+
const predicate = Object.assign(
|
|
77
|
+
/** @param {Datum} datum */ (datum) => ensureCompiled()(datum),
|
|
78
|
+
{
|
|
79
|
+
param,
|
|
80
|
+
empty: empty ?? true,
|
|
81
|
+
}
|
|
52
82
|
);
|
|
53
83
|
|
|
54
|
-
return
|
|
84
|
+
return predicate;
|
|
55
85
|
}
|
|
56
86
|
|
|
57
87
|
/**
|
|
58
|
-
* Creates
|
|
88
|
+
* Creates ordered conditional branches for a channel definition. The last
|
|
89
|
+
* branch is always the fallback branch.
|
|
59
90
|
*
|
|
60
|
-
*
|
|
91
|
+
* @param {import("../spec/channel.js").Channel} channel
|
|
92
|
+
* @param {import("../spec/channel.js").ChannelDef} channelDef
|
|
93
|
+
* @param {import("../spec/channel.js").Encoding} encoding
|
|
94
|
+
* @param {{ createExpression: (expr: string) => import("../paramRuntime/types.js").ExprRefFunction, findValue: (param: string) => any }} paramRuntime
|
|
95
|
+
* @returns {import("../types/encoder.js").EncodingBranch[]}
|
|
96
|
+
*/
|
|
97
|
+
export function createConditionalBranches(
|
|
98
|
+
channel,
|
|
99
|
+
channelDef,
|
|
100
|
+
encoding,
|
|
101
|
+
paramRuntime
|
|
102
|
+
) {
|
|
103
|
+
const conditions =
|
|
104
|
+
isFieldOrDatumDefWithCondition(channelDef) ||
|
|
105
|
+
isValueDefWithCondition(channelDef)
|
|
106
|
+
? Array.isArray(channelDef.condition)
|
|
107
|
+
? channelDef.condition
|
|
108
|
+
: [channelDef.condition]
|
|
109
|
+
: [];
|
|
110
|
+
|
|
111
|
+
const branchChannelDefs = [...conditions, channelDef];
|
|
112
|
+
|
|
113
|
+
/** @type {import("../types/encoder.js").EncodingBranch[]} */
|
|
114
|
+
const branches = branchChannelDefs.map((branchChannelDef, index) => {
|
|
115
|
+
const condition = conditions[index];
|
|
116
|
+
const accessor = createAccessor(
|
|
117
|
+
channel,
|
|
118
|
+
branchChannelDef,
|
|
119
|
+
paramRuntime
|
|
120
|
+
);
|
|
121
|
+
|
|
122
|
+
/** @type {import("../types/encoder.js").Predicate} */
|
|
123
|
+
const predicate = condition?.param
|
|
124
|
+
? createSelectionPredicate(
|
|
125
|
+
condition.param,
|
|
126
|
+
encoding,
|
|
127
|
+
paramRuntime,
|
|
128
|
+
condition.empty
|
|
129
|
+
)
|
|
130
|
+
: Object.assign(
|
|
131
|
+
makeConstantExprRef(index === branchChannelDefs.length - 1),
|
|
132
|
+
{
|
|
133
|
+
empty: false,
|
|
134
|
+
}
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
return {
|
|
138
|
+
accessor,
|
|
139
|
+
predicate,
|
|
140
|
+
};
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
if (branches.filter((branch) => !branch.accessor.constant).length > 1) {
|
|
144
|
+
throw new Error(
|
|
145
|
+
"Only one accessor can be non-constant. Channel: " + channel
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
return branches;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Creates encoders for direct mark-property channels in an encoding object.
|
|
61
154
|
*
|
|
62
155
|
* @param {import("../view/unitView.js").default} unitView
|
|
63
156
|
* @param {import("../spec/channel.js").Encoding} encoding
|
|
@@ -91,9 +184,10 @@ export default function createEncoders(unitView, encoding) {
|
|
|
91
184
|
const typedChannelDef =
|
|
92
185
|
/** @type {import("../spec/channel.js").ChannelDef} */ (channelDef);
|
|
93
186
|
encoders[typedChannel] = createSimpleOrConditionalEncoder(
|
|
94
|
-
|
|
187
|
+
createConditionalBranches(
|
|
95
188
|
typedChannel,
|
|
96
189
|
typedChannelDef,
|
|
190
|
+
encoding,
|
|
97
191
|
unitView.paramRuntime
|
|
98
192
|
),
|
|
99
193
|
scaleSource
|
|
@@ -116,23 +210,46 @@ export function isNonMarkPropertyChannel(channel) {
|
|
|
116
210
|
}
|
|
117
211
|
|
|
118
212
|
/**
|
|
119
|
-
* @param {import("../types/encoder.js").
|
|
213
|
+
* @param {import("../types/encoder.js").Encoder} encoder
|
|
214
|
+
* @returns {import("../types/encoder.js").Accessor[]}
|
|
215
|
+
*/
|
|
216
|
+
export function getEncoderAccessors(encoder) {
|
|
217
|
+
return encoder.branches.map((branch) => branch.accessor);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* @param {import("../types/encoder.js").Encoder} encoder
|
|
222
|
+
* @returns {import("../types/encoder.js").Accessor | undefined}
|
|
223
|
+
*/
|
|
224
|
+
export function getEncoderDataAccessor(encoder) {
|
|
225
|
+
return encoder.branches.find((branch) => !branch.accessor.constant)
|
|
226
|
+
?.accessor;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Creates an encoder from ordered branches. The first matching branch wins.
|
|
231
|
+
*
|
|
232
|
+
* @param {import("../types/encoder.js").EncodingBranch[]} branches
|
|
120
233
|
* @param {(channel: import("../spec/channel.js").ChannelWithScale) => import("../types/encoder.js").VegaScale} scaleSource
|
|
121
234
|
* @returns {Encoder}
|
|
122
235
|
*/
|
|
123
|
-
export function createSimpleOrConditionalEncoder(
|
|
236
|
+
export function createSimpleOrConditionalEncoder(branches, scaleSource) {
|
|
124
237
|
/**
|
|
125
238
|
* @typedef {import("../types/encoder.js").Encoder} Encoder
|
|
126
|
-
* @typedef {import("../types/encoder.js").Accessor} Accessor
|
|
127
239
|
* @typedef {import("../data/flowNode.js").Datum} Datum
|
|
128
240
|
*/
|
|
129
|
-
if (
|
|
130
|
-
|
|
241
|
+
if (branches.length === 1) {
|
|
242
|
+
const encoder = createEncoder(branches[0].accessor, scaleSource);
|
|
243
|
+
return Object.assign(encoder, {
|
|
244
|
+
branches,
|
|
245
|
+
});
|
|
131
246
|
}
|
|
132
247
|
|
|
133
|
-
const predicates =
|
|
248
|
+
const predicates = branches.map((branch) => branch.predicate);
|
|
134
249
|
|
|
135
|
-
const encoders =
|
|
250
|
+
const encoders = branches.map((branch) =>
|
|
251
|
+
createEncoder(branch.accessor, scaleSource)
|
|
252
|
+
);
|
|
136
253
|
|
|
137
254
|
const encoder = Object.assign(
|
|
138
255
|
(/** @type {Datum} */ datum) => {
|
|
@@ -144,12 +261,9 @@ export function createSimpleOrConditionalEncoder(accessors, scaleSource) {
|
|
|
144
261
|
},
|
|
145
262
|
{
|
|
146
263
|
constant: false,
|
|
147
|
-
|
|
148
|
-
encoders.map((e) => e.accessors[0])
|
|
149
|
-
),
|
|
150
|
-
dataAccessor: encoders.map((e) => e.dataAccessor).find((a) => a),
|
|
264
|
+
branches,
|
|
151
265
|
scale: encoders.map((e) => e.scale).find((s) => s),
|
|
152
|
-
channelDef:
|
|
266
|
+
channelDef: branches.at(-1).accessor.channelDef,
|
|
153
267
|
}
|
|
154
268
|
);
|
|
155
269
|
|
|
@@ -157,6 +271,8 @@ export function createSimpleOrConditionalEncoder(accessors, scaleSource) {
|
|
|
157
271
|
}
|
|
158
272
|
|
|
159
273
|
/**
|
|
274
|
+
* Wraps a single accessor with optional scale application and encoder metadata.
|
|
275
|
+
*
|
|
160
276
|
* @param {Accessor} accessor
|
|
161
277
|
* @param {(channel: import("../spec/channel.js").ChannelWithScale) => import("../types/encoder.js").VegaScale} scaleSource
|
|
162
278
|
* @returns {Encoder}
|
|
@@ -189,17 +305,18 @@ export function createEncoder(accessor, scaleSource) {
|
|
|
189
305
|
{
|
|
190
306
|
scale,
|
|
191
307
|
constant: accessor.constant,
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
308
|
+
branches: [
|
|
309
|
+
{
|
|
310
|
+
accessor,
|
|
311
|
+
predicate: makeConstantExprRef(true),
|
|
312
|
+
},
|
|
313
|
+
],
|
|
195
314
|
channelDef,
|
|
196
315
|
}
|
|
197
316
|
);
|
|
198
317
|
}
|
|
199
318
|
|
|
200
319
|
/**
|
|
201
|
-
* TODO: Move to a more generic place
|
|
202
|
-
*
|
|
203
320
|
* @param {import("../spec/channel.js").ChannelDef} channelDef
|
|
204
321
|
* @returns {channelDef is import("../spec/channel.js").ValueDef}
|
|
205
322
|
*/
|
|
@@ -224,11 +341,13 @@ export function isDatumDef(channelDef) {
|
|
|
224
341
|
}
|
|
225
342
|
|
|
226
343
|
/**
|
|
344
|
+
* Returns true for direct channel definitions that participate in scale
|
|
345
|
+
* resolution. Conditional wrappers must be unwrapped by the caller first.
|
|
346
|
+
*
|
|
227
347
|
* @param {import("../spec/channel.js").ChannelDef} channelDef
|
|
228
348
|
* @returns {channelDef is import("../spec/channel.js").ChannelDefWithScale}
|
|
229
349
|
*/
|
|
230
350
|
export function isChannelDefWithScale(channelDef) {
|
|
231
|
-
// TODO: Not accurate, fix
|
|
232
351
|
return (
|
|
233
352
|
isFieldDef(channelDef) ||
|
|
234
353
|
isDatumDef(channelDef) ||
|
|
@@ -257,11 +376,16 @@ export function findChannelDefWithScale(channelDef) {
|
|
|
257
376
|
*/
|
|
258
377
|
export function getChannelDefWithScale(view, channel) {
|
|
259
378
|
const channelDef = view.mark.encoding[channel];
|
|
260
|
-
if (!Array.isArray(channelDef)
|
|
261
|
-
|
|
379
|
+
if (!Array.isArray(channelDef)) {
|
|
380
|
+
const channelDefWithScale = findChannelDefWithScale(channelDef);
|
|
381
|
+
if (channelDefWithScale) {
|
|
382
|
+
return channelDefWithScale;
|
|
383
|
+
}
|
|
262
384
|
} else {
|
|
263
385
|
throw new Error("Not a channel def with scale!");
|
|
264
386
|
}
|
|
387
|
+
|
|
388
|
+
throw new Error("Not a channel def with scale!");
|
|
265
389
|
}
|
|
266
390
|
|
|
267
391
|
/**
|
|
@@ -131,7 +131,7 @@ export default class BmFontManager {
|
|
|
131
131
|
|
|
132
132
|
fontEntry.texture = await texturePromise;
|
|
133
133
|
fontEntry.metrics = await metricsPromise;
|
|
134
|
-
} catch
|
|
134
|
+
} catch {
|
|
135
135
|
console.warn(
|
|
136
136
|
`Cannot load font: "${key.family}". Using the embedded default font.`
|
|
137
137
|
);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"full.d.ts","sourceRoot":"","sources":["../../src/full.js"],"names":[],"mappings":""}
|
package/dist/src/full.js
ADDED
|
@@ -18,6 +18,14 @@ export function isChromosomalLocus(value: any): value is ChromosomalLocus;
|
|
|
18
18
|
* @return {value is ChromosomalLocus[]}
|
|
19
19
|
*/
|
|
20
20
|
export function isChromosomalLocusInterval(value: any[]): value is ChromosomalLocus[];
|
|
21
|
+
/**
|
|
22
|
+
* Returns true when the right bound is an explicit locus position rather than a
|
|
23
|
+
* chromosome shortcut such as `{ chrom: "chr2" }`.
|
|
24
|
+
*
|
|
25
|
+
* @param {any} value
|
|
26
|
+
* @returns {value is ChromosomalLocus[]}
|
|
27
|
+
*/
|
|
28
|
+
export function hasExplicitLocusUpperBound(value: any): value is ChromosomalLocus[];
|
|
21
29
|
/**
|
|
22
30
|
* @param {any} value
|
|
23
31
|
* @returns {value is GenomeConfig}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"genome.d.ts","sourceRoot":"","sources":["../../../src/genome/genome.js"],"names":[],"mappings":"AA2XA;;;GAGG;AACH,gDAFW,MAAM;;;IAOhB;AAED;;;;GAIG;AACH,0CAHW,GAAG,GACF,KAAK,IAAI,gBAAgB,CAIpC;AAED;;;;GAIG;AACH,kDAHW,GAAG,EAAE,GACJ,KAAK,IAAI,gBAAgB,EAAE,CAItC;AAED;;;GAGG;AACH,sCAHW,GAAG,GACD,KAAK,IAAI,YAAY,CASjC;AAED;;;GAGG;AACH,yCAHW,GAAG,GACD,KAAK,IAAI,OAAO,mBAAmB,EAAE,eAAe,CAIhE;AAED;;;GAGG;AACH,4CAHW,GAAG,GACD,KAAK,IAAI,OAAO,mBAAmB,EAAE,kBAAkB,CAInE;
|
|
1
|
+
{"version":3,"file":"genome.d.ts","sourceRoot":"","sources":["../../../src/genome/genome.js"],"names":[],"mappings":"AA2XA;;;GAGG;AACH,gDAFW,MAAM;;;IAOhB;AAED;;;;GAIG;AACH,0CAHW,GAAG,GACF,KAAK,IAAI,gBAAgB,CAIpC;AAED;;;;GAIG;AACH,kDAHW,GAAG,EAAE,GACJ,KAAK,IAAI,gBAAgB,EAAE,CAItC;AAED;;;;;;GAMG;AACH,kDAHW,GAAG,GACD,KAAK,IAAI,gBAAgB,EAAE,CAOvC;AAED;;;GAGG;AACH,sCAHW,GAAG,GACD,KAAK,IAAI,YAAY,CASjC;AAED;;;GAGG;AACH,yCAHW,GAAG,GACD,KAAK,IAAI,OAAO,mBAAmB,EAAE,eAAe,CAIhE;AAED;;;GAGG;AACH,4CAHW,GAAG,GACD,KAAK,IAAI,OAAO,mBAAmB,EAAE,kBAAkB,CAInE;AA1bD;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;IACI;;OAEG;IACH,oBAFW,YAAY,EA6CtB;IA1CG;;;;;;;;MAA2C;IAc3C,oDAAoD;IACpD,aADW,CAAC,UAAU,GAAG,oBAAoB,CAAC,EAAE,CAC3B;IAErB,2CAA2C;IAC3C,0BADW,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,CACE;IAEzC,sEAAsE;IACtE,mBADW,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,UAAU,GAAG,oBAAoB,CAAC,CAChC;IAElC,uBAAuB;IACvB,cADW,MAAM,EAAE,CACG;IAEtB,kBAAkB;IAkBtB,mBAEC;IAED;;OAEG;IACH,cAFW,MAAM,iBAoBhB;IAED,wBAEC;IAED;;;OAGG;IACH,0BAFW,UAAU,EAAE,QA8CtB;IAED,sBAEC;IAED;;;;;OAKG;IACH,oBAHW,MAAM,GAAG,MAAM,OACf,MAAM,UAShB;IAED;;;OAGG;IACH,4BAFW,MAAM,qCAgBhB;IAED;;;;OAIG;IACH,6BAHW,MAAM,GACJ,gBAAgB,CAY5B;IAED;;;OAGG;IACH,oBAFW,MAAM,qCAIhB;IAED;;;;;;;;;;OAUG;IACH,yBAHW,MAAM,EAAE,GACN,MAAM,CAIlB;IAED;;;;;;OAMG;IACH,2BAHW,MAAM,GACJ,MAAM,CAQlB;IAED;;;OAGG;IACH,gCAHW,MAAM,EAAE,GACN,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAUhD;IAED;;;;;;OAMG;IACH,kCAFW,gBAAgB,EAAE,YAgB5B;IAED;;;;;OAKG;IACH,wCAHW,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,GAClC,0BAA0B,EAAE,CAiCxC;IAED;;;;OAIG;IACH,4DAFW,MAAM,EAAE,gCAOlB;IAED;;;;OAIG;IACH,mBAHW,MAAM,GACJ,CAAC,MAAM,EAAE,MAAM,CAAC,CAgC5B;CACJ;2BAjXY,OAAO,mBAAmB,EAAE,YAAY;+BACxC,OAAO,mBAAmB,EAAE,gBAAgB;;UAG/C,MAAM;UACN,MAAM;;;;;;WAGN,MAAM;;;;YACN,MAAM;;;;qBACN,MAAM;;;;mBACN,MAAM;wBACN,MAAM,EAAE;;;;SACR,OAAO;;;WAGP,MAAM;cACN,MAAM;YACN,MAAM"}
|
|
@@ -97,7 +97,8 @@ export default class Genome {
|
|
|
97
97
|
this.setChromSizes(parseChromSizes(await result.text()));
|
|
98
98
|
} catch (e) {
|
|
99
99
|
throw new Error(
|
|
100
|
-
`Could not load chrom sizes: ${this.config.url}. Reason: ${e.message}
|
|
100
|
+
`Could not load chrom sizes: ${this.config.url}. Reason: ${e.message}`,
|
|
101
|
+
{ cause: e }
|
|
101
102
|
);
|
|
102
103
|
}
|
|
103
104
|
}
|
|
@@ -129,7 +130,6 @@ export default class Genome {
|
|
|
129
130
|
continuousInterval: [pos, pos + size],
|
|
130
131
|
index: i,
|
|
131
132
|
number: i + 1,
|
|
132
|
-
// eslint-disable-next-line no-bitwise
|
|
133
133
|
odd: !(i & 1),
|
|
134
134
|
};
|
|
135
135
|
|
|
@@ -406,6 +406,20 @@ export function isChromosomalLocusInterval(value) {
|
|
|
406
406
|
return value.every(isChromosomalLocus);
|
|
407
407
|
}
|
|
408
408
|
|
|
409
|
+
/**
|
|
410
|
+
* Returns true when the right bound is an explicit locus position rather than a
|
|
411
|
+
* chromosome shortcut such as `{ chrom: "chr2" }`.
|
|
412
|
+
*
|
|
413
|
+
* @param {any} value
|
|
414
|
+
* @returns {value is ChromosomalLocus[]}
|
|
415
|
+
*/
|
|
416
|
+
export function hasExplicitLocusUpperBound(value) {
|
|
417
|
+
return (
|
|
418
|
+
isChromosomalLocusInterval(value) &&
|
|
419
|
+
(value[1] ?? value[0]).pos !== undefined
|
|
420
|
+
);
|
|
421
|
+
}
|
|
422
|
+
|
|
409
423
|
/**
|
|
410
424
|
* @param {any} value
|
|
411
425
|
* @returns {value is GenomeConfig}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rootGenomeConfig.d.ts","sourceRoot":"","sources":["../../../src/genome/rootGenomeConfig.js"],"names":[],"mappings":"AAEA;;;GAGG;AAEH;;;;;GAKG;AAEH;;;;;;GAMG;AACH,oDAHW,UAAU,GACR,wBAAwB,
|
|
1
|
+
{"version":3,"file":"rootGenomeConfig.d.ts","sourceRoot":"","sources":["../../../src/genome/rootGenomeConfig.js"],"names":[],"mappings":"AAEA;;;GAGG;AAEH;;;;;GAKG;AAEH;;;;;;GAMG;AACH,oDAHW,UAAU,GACR,wBAAwB,CAsDpC;yBAtEY,OAAO,iBAAiB,EAAE,UAAU;oCACpC,OAAO,iBAAiB,EAAE,iBAAiB;;mBAK9C,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC;qBAClC,MAAM,GAAG,SAAS;wBAClB,MAAM,GAAG,SAAS"}
|
|
@@ -34,8 +34,12 @@ export function resolveRootGenomeConfig(rootConfig) {
|
|
|
34
34
|
|
|
35
35
|
if (rootConfig.genome) {
|
|
36
36
|
const { name, ...config } = rootConfig.genome;
|
|
37
|
+
const hasDefinition = Object.keys(config).length > 0;
|
|
37
38
|
return {
|
|
38
|
-
genomesByName:
|
|
39
|
+
genomesByName:
|
|
40
|
+
!hasDefinition && isBuiltInAssembly(name)
|
|
41
|
+
? new Map()
|
|
42
|
+
: new Map([[name, config]]),
|
|
39
43
|
defaultAssembly: name,
|
|
40
44
|
deprecationWarning: getLegacyGenomeWarning(),
|
|
41
45
|
};
|
|
@@ -88,7 +92,7 @@ function isBuiltInAssembly(name) {
|
|
|
88
92
|
try {
|
|
89
93
|
getContigs(name);
|
|
90
94
|
return true;
|
|
91
|
-
} catch
|
|
95
|
+
} catch {
|
|
92
96
|
return false;
|
|
93
97
|
}
|
|
94
98
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaleLocus.d.ts","sourceRoot":"","sources":["../../../src/genome/scaleLocus.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scaleLocus.d.ts","sourceRoot":"","sources":["../../../src/genome/scaleLocus.js"],"names":[],"mappings":"AASA,2EA2HC;;AASD;;;;GAIG;AACH,8CAJW,OAAO,aAAa,EAAE,OAAO,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,OAAO,aAAa,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,SAC5F,MAAM,GACJ,MAAM,GAAG,OAAO,aAAa,EAAE,gBAAgB,CAK3D;AAED;;;;GAIG;AACH,gDAJW,OAAO,aAAa,EAAE,OAAO,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,OAAO,aAAa,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,WAC5F,MAAM,GAAG,OAAO,aAAa,EAAE,gBAAgB,GAC7C,MAAM,CAQlB;AAED;;;;GAIG;AACH,mDAJW,OAAO,aAAa,EAAE,OAAO,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,OAAO,aAAa,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,YAC5F,OAAO,kBAAkB,EAAE,YAAY,GAAG,OAAO,kBAAkB,EAAE,aAAa,GAChF,MAAM,EAAE,CAQpB;AAED;;;;GAIG;AACH,iDAJW,OAAO,aAAa,EAAE,OAAO,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,OAAO,aAAa,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,YAC5F,OAAO,kBAAkB,EAAE,YAAY,GAAG,OAAO,kBAAkB,EAAE,aAAa,GAChF,OAAO,kBAAkB,EAAE,YAAY,GAAG,OAAO,kBAAkB,EAAE,aAAa,CAO9F;AAED;;;GAGG;AACH,+CAHW,OAAO,aAAa,EAAE,OAAO,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,OAAO,aAAa,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,GAC1F,MAAM,EAAE,CAQpB"}
|
|
@@ -4,6 +4,9 @@ import { format as d3format } from "d3-format";
|
|
|
4
4
|
import scaleIndex from "./scaleIndex.js";
|
|
5
5
|
import { isChromosomalLocus, isChromosomalLocusInterval } from "./genome.js";
|
|
6
6
|
|
|
7
|
+
const EXACT_LOCUS_LABEL_STEP_THRESHOLD = 1e6;
|
|
8
|
+
const EXACT_LOCUS_LABEL_THINNING_FACTOR = 0.65;
|
|
9
|
+
|
|
7
10
|
export default function scaleLocus() {
|
|
8
11
|
/** @type {import("./scaleLocus.js").ScaleLocus} */
|
|
9
12
|
const scale = /** @type {any} */ (scaleIndex().numberingOffset(1));
|
|
@@ -27,14 +30,30 @@ export default function scaleLocus() {
|
|
|
27
30
|
}
|
|
28
31
|
|
|
29
32
|
const domain = scale.domain();
|
|
33
|
+
const domainSpan = domain[1] - domain[0];
|
|
30
34
|
const numberingOffset = scale.numberingOffset();
|
|
31
35
|
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
Math.min(domain[1], genome.totalSize - 1)
|
|
35
|
-
|
|
36
|
+
const minChrom = genome.toChromosome(Math.max(domain[0], 0));
|
|
37
|
+
const maxChrom = genome.toChromosome(
|
|
38
|
+
Math.min(domain[1], genome.totalSize - 1)
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
const requestedCount = Math.max(
|
|
42
|
+
1,
|
|
43
|
+
Math.min(count ?? 10, Math.floor(domainSpan))
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
let step = tickStep(domain[0], domain[1], requestedCount);
|
|
47
|
+
|
|
48
|
+
if (step < EXACT_LOCUS_LABEL_STEP_THRESHOLD) {
|
|
49
|
+
step = tickStep(
|
|
50
|
+
domain[0],
|
|
51
|
+
domain[1],
|
|
52
|
+
requestedCount * EXACT_LOCUS_LABEL_THINNING_FACTOR
|
|
53
|
+
);
|
|
54
|
+
}
|
|
36
55
|
|
|
37
|
-
|
|
56
|
+
step = Math.max(1, step);
|
|
38
57
|
|
|
39
58
|
const ticks = [];
|
|
40
59
|
|
|
@@ -75,12 +94,17 @@ export default function scaleLocus() {
|
|
|
75
94
|
const step = tickStep(
|
|
76
95
|
domain[0],
|
|
77
96
|
domain[1],
|
|
78
|
-
Math.min(count, Math.
|
|
97
|
+
Math.max(1, Math.min(count ?? 10, Math.floor(domainSpan)))
|
|
79
98
|
);
|
|
80
99
|
// Use higher display precision for smaller spans
|
|
81
100
|
// TODO: max absolute value should be taken into account too. 2.00M vs 200M
|
|
82
|
-
const numberFormat =
|
|
101
|
+
const numberFormat =
|
|
102
|
+
step < EXACT_LOCUS_LABEL_STEP_THRESHOLD
|
|
103
|
+
? d3format(",")
|
|
104
|
+
: d3format(".3s");
|
|
83
105
|
|
|
106
|
+
// Axis tick values live in the continuous whole-genome coordinate
|
|
107
|
+
// system, but labels should show chromosome-local one-based positions.
|
|
84
108
|
/** @type {function(number):number} */
|
|
85
109
|
const fixer = (x) => x - genome.toChromosome(x).continuousStart;
|
|
86
110
|
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {{
|
|
3
|
+
* owner: object,
|
|
4
|
+
* raw: unknown,
|
|
5
|
+
* evaluate: () => string | undefined,
|
|
6
|
+
* watch: (registerDisposer: (dispose: () => void) => void, listener: () => void) => void,
|
|
7
|
+
* }} CursorSource
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* @param {CursorView | undefined} target
|
|
11
|
+
* @param {{ mark?: CursorOwner } | undefined} hover
|
|
12
|
+
* @returns {CursorSource | undefined}
|
|
13
|
+
*/
|
|
14
|
+
export function resolveCursorSource(target: CursorView | undefined, hover: {
|
|
15
|
+
mark?: CursorOwner;
|
|
16
|
+
} | undefined): CursorSource | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Resolves and applies the active canvas cursor based on the current mark hover
|
|
19
|
+
* and interaction target path.
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* @typedef {{
|
|
23
|
+
* getCursorSpec?: () => unknown,
|
|
24
|
+
* getCursor: () => string | undefined,
|
|
25
|
+
* watchCursor?: (listener: () => void, registerDisposer: (dispose: () => void) => void) => void,
|
|
26
|
+
* }} CursorOwner
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* @typedef {CursorOwner & {
|
|
30
|
+
* getLayoutAncestors: () => CursorView[],
|
|
31
|
+
* }} CursorView
|
|
32
|
+
*/
|
|
33
|
+
export default class CursorManager {
|
|
34
|
+
/**
|
|
35
|
+
* @param {object} options
|
|
36
|
+
* @param {HTMLCanvasElement} options.canvas
|
|
37
|
+
*/
|
|
38
|
+
constructor({ canvas }: {
|
|
39
|
+
canvas: HTMLCanvasElement;
|
|
40
|
+
});
|
|
41
|
+
/**
|
|
42
|
+
* @param {object} options
|
|
43
|
+
* @param {CursorView | undefined} options.target
|
|
44
|
+
* @param {{ mark?: CursorOwner } | undefined} options.hover
|
|
45
|
+
*/
|
|
46
|
+
update({ target, hover }: {
|
|
47
|
+
target: CursorView | undefined;
|
|
48
|
+
hover: {
|
|
49
|
+
mark?: CursorOwner;
|
|
50
|
+
} | undefined;
|
|
51
|
+
}): void;
|
|
52
|
+
clear(): void;
|
|
53
|
+
#private;
|
|
54
|
+
}
|
|
55
|
+
export type CursorSource = {
|
|
56
|
+
owner: object;
|
|
57
|
+
raw: unknown;
|
|
58
|
+
evaluate: () => string | undefined;
|
|
59
|
+
watch: (registerDisposer: (dispose: () => void) => void, listener: () => void) => void;
|
|
60
|
+
};
|
|
61
|
+
export type CursorOwner = {
|
|
62
|
+
getCursorSpec?: () => unknown;
|
|
63
|
+
getCursor: () => string | undefined;
|
|
64
|
+
watchCursor?: (listener: () => void, registerDisposer: (dispose: () => void) => void) => void;
|
|
65
|
+
};
|
|
66
|
+
export type CursorView = CursorOwner & {
|
|
67
|
+
getLayoutAncestors: () => CursorView[];
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=cursorManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursorManager.d.ts","sourceRoot":"","sources":["../../../src/genomeSpy/cursorManager.js"],"names":[],"mappings":"AA+EA;;;;;;;GAOG;AAEH;;;;GAIG;AACH,4CAJW,UAAU,GAAG,SAAS,SACtB;IAAE,IAAI,CAAC,EAAE,WAAW,CAAA;CAAE,GAAG,SAAS,GAChC,YAAY,GAAG,SAAS,CA2BpC;AAtHD;;;GAGG;AAEH;;;;;;GAMG;AAEH;;;;GAIG;AAEH;IAUI;;;OAGG;IACH,wBAFG;QAAmC,MAAM,EAAjC,iBAAiB;KAC3B,EAGA;IAED;;;;OAIG;IACH,0BAHG;QAAwC,MAAM,EAAtC,UAAU,GAAG,SAAS;QACsB,KAAK,EAAjD;YAAE,IAAI,CAAC,EAAE,WAAW,CAAA;SAAE,GAAG,SAAS;KAC5C,QAGA;IAED,cAEC;;CA6BJ;2BAGY;IACR,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACnC,KAAK,EAAE,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;CACxF;0BA/ES;IACR,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC;IAC9B,SAAS,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACpC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC;CAC/F;yBAIS,WAAW,GAAG;IACtB,kBAAkB,EAAE,MAAM,UAAU,EAAE,CAAC;CACxC"}
|