@genome-spy/core 0.72.0 → 0.74.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/LICENSE +1 -1
- 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 +21078 -24556
- package/dist/bundle/index.js +379 -383
- package/dist/bundle/parquetRead-DG_-F5j5.js +1609 -0
- package/dist/schema.json +13349 -7082
- 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 +8 -0
- package/dist/src/data/formats/bed.d.ts.map +1 -0
- package/dist/src/data/formats/bed.js +58 -0
- package/dist/src/data/formats/bedpe.d.ts +8 -0
- package/dist/src/data/formats/bedpe.d.ts.map +1 -0
- package/dist/src/data/formats/bedpe.js +164 -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 +16 -0
- package/dist/src/data/sources/dataUtils.d.ts.map +1 -1
- package/dist/src/data/sources/dataUtils.js +53 -3
- 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 +4 -0
- package/dist/src/data/sources/urlSource.d.ts.map +1 -1
- package/dist/src/data/sources/urlSource.js +138 -16
- 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/assemblyPreflight.d.ts +31 -0
- package/dist/src/genome/assemblyPreflight.d.ts.map +1 -0
- package/dist/src/genome/assemblyPreflight.js +99 -0
- package/dist/src/genome/genome.d.ts +10 -2
- package/dist/src/genome/genome.d.ts.map +1 -1
- package/dist/src/genome/genome.js +20 -2
- package/dist/src/genome/genomeStore.d.ts +34 -3
- package/dist/src/genome/genomeStore.d.ts.map +1 -1
- package/dist/src/genome/genomeStore.js +409 -18
- package/dist/src/genome/rootGenomeConfig.d.ts +26 -0
- package/dist/src/genome/rootGenomeConfig.d.ts.map +1 -0
- package/dist/src/genome/rootGenomeConfig.js +98 -0
- package/dist/src/genome/scaleLocus.d.ts.map +1 -1
- package/dist/src/genome/scaleLocus.js +26 -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 +10 -1
- package/dist/src/genomeSpy/interactionController.d.ts.map +1 -1
- package/dist/src/genomeSpy/interactionController.js +448 -40
- 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/renderCoordinator.js +1 -1
- 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 -114
- package/dist/src/genomeSpy.d.ts.map +1 -1
- package/dist/src/genomeSpy.js +7 -614
- 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/canvasSizeHelper.d.ts +74 -0
- package/dist/src/gl/canvasSizeHelper.d.ts.map +1 -0
- package/dist/src/gl/canvasSizeHelper.js +203 -0
- 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.map +1 -1
- package/dist/src/gl/dataToVertices.js +13 -8
- package/dist/src/gl/glslScaleGenerator.d.ts +2 -2
- package/dist/src/gl/glslScaleGenerator.d.ts.map +1 -1
- package/dist/src/gl/glslScaleGenerator.js +5 -7
- package/dist/src/gl/webGLHelper.d.ts +25 -11
- package/dist/src/gl/webGLHelper.d.ts.map +1 -1
- package/dist/src/gl/webGLHelper.js +59 -33
- package/dist/src/index.d.ts +3 -9
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +5 -111
- 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 +5 -26
- 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 +67 -21
- 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/viewParamRuntime.d.ts +19 -0
- package/dist/src/paramRuntime/viewParamRuntime.d.ts.map +1 -1
- package/dist/src/paramRuntime/viewParamRuntime.js +35 -0
- package/dist/src/scale/scale.d.ts.map +1 -1
- package/dist/src/scale/scale.js +13 -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 +58 -7
- package/dist/src/scales/domainPlanner.d.ts.map +1 -1
- package/dist/src/scales/domainPlanner.js +395 -40
- 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 +2 -1
- package/dist/src/scales/scaleInstanceManager.d.ts.map +1 -1
- package/dist/src/scales/scaleInstanceManager.js +10 -11
- package/dist/src/scales/scaleInteractionController.d.ts.map +1 -1
- package/dist/src/scales/scaleInteractionController.js +59 -18
- package/dist/src/scales/scalePropsResolver.d.ts +3 -1
- package/dist/src/scales/scalePropsResolver.d.ts.map +1 -1
- package/dist/src/scales/scalePropsResolver.js +83 -6
- package/dist/src/scales/scaleResolution.d.ts +39 -0
- package/dist/src/scales/scaleResolution.d.ts.map +1 -1
- package/dist/src/scales/scaleResolution.js +504 -82
- package/dist/src/scales/scaleResolutionTestUtils.d.ts +21 -0
- package/dist/src/scales/scaleResolutionTestUtils.d.ts.map +1 -0
- package/dist/src/scales/scaleResolutionTestUtils.js +37 -0
- 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 +52 -0
- package/dist/src/scales/selectionDomainUtils.d.ts.map +1 -0
- package/dist/src/scales/selectionDomainUtils.js +194 -0
- package/dist/src/scales/zoomDomainUtils.d.ts +18 -0
- package/dist/src/scales/zoomDomainUtils.d.ts.map +1 -0
- package/dist/src/scales/zoomDomainUtils.js +69 -0
- package/dist/src/screenshotHarness.d.ts +16 -0
- package/dist/src/screenshotHarness.d.ts.map +1 -0
- package/dist/src/screenshotHarness.js +241 -0
- package/dist/src/singlePageApp.js +1 -1
- package/dist/src/spec/axis.d.ts +41 -30
- package/dist/src/spec/channel.d.ts +15 -9
- package/dist/src/spec/config.d.ts +264 -0
- package/dist/src/spec/data.d.ts +30 -3
- 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/genome.d.ts +22 -2
- package/dist/src/spec/mark.d.ts +97 -13
- package/dist/src/spec/parameter.d.ts +62 -5
- package/dist/src/spec/root.d.ts +34 -1
- package/dist/src/spec/scale.d.ts +46 -5
- 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 +63 -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 +31 -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 +66 -11
- 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 +26 -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 +2 -2
- package/dist/src/utils/expression.d.ts.map +1 -1
- package/dist/src/utils/expression.js +63 -8
- 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/inferSpecBaseUrl.d.ts +14 -0
- package/dist/src/utils/inferSpecBaseUrl.d.ts.map +1 -0
- package/dist/src/utils/inferSpecBaseUrl.js +73 -0
- 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 +62 -33
- package/dist/src/utils/interactionEvent.d.ts.map +1 -1
- package/dist/src/utils/interactionEvent.js +86 -48
- 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 +12 -1
- package/dist/src/view/dataReadiness.d.ts +2 -2
- package/dist/src/view/dataReadiness.d.ts.map +1 -1
- package/dist/src/view/dataReadiness.js +63 -58
- package/dist/src/view/facetView.d.ts +1 -1
- package/dist/src/view/facetView.js +4 -4
- package/dist/src/view/flowBuilder.js +2 -2
- package/dist/src/view/gridView/gridChild.d.ts +13 -0
- package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
- package/dist/src/view/gridView/gridChild.js +247 -49
- package/dist/src/view/gridView/gridView.d.ts.map +1 -1
- package/dist/src/view/gridView/gridView.js +296 -99
- 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/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 +67 -17
- 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 +136 -47
- 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 +15 -3
- package/dist/src/view/zoom.d.ts.map +1 -1
- package/dist/src/view/zoom.js +375 -80
- package/package.json +20 -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
|
@@ -4,14 +4,15 @@ import {
|
|
|
4
4
|
isDatumDef,
|
|
5
5
|
isExprDef,
|
|
6
6
|
isFieldDef,
|
|
7
|
-
isFieldOrDatumDefWithCondition,
|
|
8
7
|
isValueDef,
|
|
9
|
-
isValueDefWithCondition,
|
|
10
8
|
} from "./encoder.js";
|
|
11
9
|
import { field } from "../utils/field.js";
|
|
12
|
-
import { isExprRef
|
|
10
|
+
import { isExprRef } from "../paramRuntime/paramUtils.js";
|
|
13
11
|
|
|
14
12
|
/**
|
|
13
|
+
* Creates a raw accessor for a single channel definition branch and attaches
|
|
14
|
+
* metadata used by scale resolution and equality checks.
|
|
15
|
+
*
|
|
15
16
|
* @param {import("../spec/channel.js").Channel} channel
|
|
16
17
|
* @param {import("../spec/channel.js").ChannelDef | import("../spec/channel.js").Conditional<import("../spec/channel.js").ChannelDef>} channelDef
|
|
17
18
|
* @param {{ createExpression: (expr: string) => import("../paramRuntime/types.js").ExprRefFunction }} paramRuntime
|
|
@@ -24,8 +25,7 @@ export function createAccessor(channel, channelDef, paramRuntime) {
|
|
|
24
25
|
*/
|
|
25
26
|
|
|
26
27
|
if (!channel) {
|
|
27
|
-
|
|
28
|
-
return;
|
|
28
|
+
throw new Error("Cannot create an accessor without a channel.");
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
/**
|
|
@@ -53,23 +53,6 @@ export function createAccessor(channel, channelDef, paramRuntime) {
|
|
|
53
53
|
}).domainKeyBase;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
if ("param" in channelDef) {
|
|
57
|
-
// TODO: Figure out how to fix it. Interval selection depends on FIELDS!
|
|
58
|
-
/*
|
|
59
|
-
a.predicate = paramRuntime.createExpression(
|
|
60
|
-
makeSelectionTestExpression(channelDef)
|
|
61
|
-
);
|
|
62
|
-
a.predicate.param = channelDef.param;
|
|
63
|
-
a.predicate.empty = channelDef.empty ?? true;
|
|
64
|
-
*/
|
|
65
|
-
a.predicate = makeConstantExprRef(false);
|
|
66
|
-
a.predicate.param = channelDef.param;
|
|
67
|
-
a.predicate.empty = channelDef.empty ?? true;
|
|
68
|
-
} else {
|
|
69
|
-
a.predicate = makeConstantExprRef(true); // Always true (default accessor)
|
|
70
|
-
a.predicate.empty = false;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
56
|
a.equals = (other) => {
|
|
74
57
|
if (!other) {
|
|
75
58
|
return false;
|
|
@@ -89,8 +72,10 @@ export function createAccessor(channel, channelDef, paramRuntime) {
|
|
|
89
72
|
}
|
|
90
73
|
|
|
91
74
|
/**
|
|
75
|
+
* Creates an accessor for a literal value or an expression reference.
|
|
92
76
|
*
|
|
93
77
|
* @param {Scalar | import("../spec/parameter.js").ExprRef} potentialExprRef
|
|
78
|
+
* @returns {import("../types/encoder.js").Accessor<Scalar>}
|
|
94
79
|
*/
|
|
95
80
|
function potentialExprRefToAccessor(potentialExprRef) {
|
|
96
81
|
if (isExprRef(potentialExprRef)) {
|
|
@@ -114,10 +99,11 @@ export function createAccessor(channel, channelDef, paramRuntime) {
|
|
|
114
99
|
try {
|
|
115
100
|
return asAccessor(field(channelDef.field));
|
|
116
101
|
} catch (e) {
|
|
117
|
-
throw new Error(`Invalid field definition: ${e.message}
|
|
102
|
+
throw new Error(`Invalid field definition: ${e.message}`, {
|
|
103
|
+
cause: e,
|
|
104
|
+
});
|
|
118
105
|
}
|
|
119
106
|
} else if (isExprDef(channelDef)) {
|
|
120
|
-
// TODO: If parameters change, the data should be re-evaluated
|
|
121
107
|
return asAccessor(paramRuntime.createExpression(channelDef.expr));
|
|
122
108
|
} else if (isDatumDef(channelDef)) {
|
|
123
109
|
return potentialExprRefToAccessor(channelDef.datum);
|
|
@@ -132,47 +118,6 @@ export function createAccessor(channel, channelDef, paramRuntime) {
|
|
|
132
118
|
}
|
|
133
119
|
}
|
|
134
120
|
|
|
135
|
-
/**
|
|
136
|
-
* Returns an array of acessors and their predicates. A returned array with
|
|
137
|
-
* a single element indicates that no conditions are present.
|
|
138
|
-
* The default accessor is always the last element in the array.
|
|
139
|
-
*
|
|
140
|
-
* @param {import("../spec/channel.js").Channel} channel
|
|
141
|
-
* @param {import("../spec/channel.js").ChannelDef} channelDef
|
|
142
|
-
* @param {{ createExpression: (expr: string) => import("../paramRuntime/types.js").ExprRefFunction }} paramRuntime
|
|
143
|
-
*/
|
|
144
|
-
export function createConditionalAccessors(channel, channelDef, paramRuntime) {
|
|
145
|
-
/** @type {import("../types/encoder.js").Accessor[]} */
|
|
146
|
-
const conditionalAccessors = [];
|
|
147
|
-
|
|
148
|
-
// TODO: Support an array of conditions
|
|
149
|
-
if (
|
|
150
|
-
isFieldOrDatumDefWithCondition(channelDef) ||
|
|
151
|
-
isValueDefWithCondition(channelDef)
|
|
152
|
-
) {
|
|
153
|
-
const conditions = Array.isArray(channelDef.condition)
|
|
154
|
-
? channelDef.condition
|
|
155
|
-
: [channelDef.condition];
|
|
156
|
-
|
|
157
|
-
for (const condition of conditions) {
|
|
158
|
-
conditionalAccessors.push(
|
|
159
|
-
createAccessor(channel, condition, paramRuntime)
|
|
160
|
-
);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
conditionalAccessors.push(
|
|
165
|
-
createAccessor(channel, channelDef, paramRuntime)
|
|
166
|
-
);
|
|
167
|
-
|
|
168
|
-
if (conditionalAccessors.filter((a) => !a.constant).length > 1) {
|
|
169
|
-
throw new Error(
|
|
170
|
-
"Only one accessor can be non-constant. Channel: " + channel
|
|
171
|
-
);
|
|
172
|
-
}
|
|
173
|
-
return conditionalAccessors;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
121
|
/**
|
|
177
122
|
* @param {import("../types/encoder.js").Accessor} accessor
|
|
178
123
|
* @returns {accessor is import("../types/encoder.js").ScaleAccessor}
|
|
@@ -1,7 +1,35 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Creates
|
|
2
|
+
* Creates a host-side predicate for selection-driven conditional encoding.
|
|
3
|
+
* The selection test expression is compiled lazily when the predicate is
|
|
4
|
+
* first evaluated so encoder construction does not depend on eager selection
|
|
5
|
+
* materialization.
|
|
3
6
|
*
|
|
4
|
-
*
|
|
7
|
+
* @param {string} param
|
|
8
|
+
* @param {import("../spec/channel.js").Encoding} encoding
|
|
9
|
+
* @param {{ findValue: (param: string) => any, createExpression: (expr: string) => import("../paramRuntime/types.js").ExprRefFunction }} paramRuntime
|
|
10
|
+
* @param {boolean} empty
|
|
11
|
+
* @returns {import("../types/encoder.js").Predicate}
|
|
12
|
+
*/
|
|
13
|
+
export function createSelectionPredicate(param: string, encoding: import("../spec/channel.js").Encoding, paramRuntime: {
|
|
14
|
+
findValue: (param: string) => any;
|
|
15
|
+
createExpression: (expr: string) => import("../paramRuntime/types.js").ExprRefFunction;
|
|
16
|
+
}, empty: boolean): import("../types/encoder.js").Predicate;
|
|
17
|
+
/**
|
|
18
|
+
* Creates ordered conditional branches for a channel definition. The last
|
|
19
|
+
* branch is always the fallback branch.
|
|
20
|
+
*
|
|
21
|
+
* @param {import("../spec/channel.js").Channel} channel
|
|
22
|
+
* @param {import("../spec/channel.js").ChannelDef} channelDef
|
|
23
|
+
* @param {import("../spec/channel.js").Encoding} encoding
|
|
24
|
+
* @param {{ createExpression: (expr: string) => import("../paramRuntime/types.js").ExprRefFunction, findValue: (param: string) => any }} paramRuntime
|
|
25
|
+
* @returns {import("../types/encoder.js").EncodingBranch[]}
|
|
26
|
+
*/
|
|
27
|
+
export function createConditionalBranches(channel: import("../spec/channel.js").Channel, channelDef: import("../spec/channel.js").ChannelDef, encoding: import("../spec/channel.js").Encoding, paramRuntime: {
|
|
28
|
+
createExpression: (expr: string) => import("../paramRuntime/types.js").ExprRefFunction;
|
|
29
|
+
findValue: (param: string) => any;
|
|
30
|
+
}): import("../types/encoder.js").EncodingBranch[];
|
|
31
|
+
/**
|
|
32
|
+
* Creates encoders for direct mark-property channels in an encoding object.
|
|
5
33
|
*
|
|
6
34
|
* @param {import("../view/unitView.js").default} unitView
|
|
7
35
|
* @param {import("../spec/channel.js").Encoding} encoding
|
|
@@ -18,20 +46,32 @@ export default function createEncoders(unitView: import("../view/unitView.js").d
|
|
|
18
46
|
*/
|
|
19
47
|
export function isNonMarkPropertyChannel(channel: import("../spec/channel.js").Channel): boolean;
|
|
20
48
|
/**
|
|
21
|
-
* @param {import("../types/encoder.js").
|
|
49
|
+
* @param {import("../types/encoder.js").Encoder} encoder
|
|
50
|
+
* @returns {import("../types/encoder.js").Accessor[]}
|
|
51
|
+
*/
|
|
52
|
+
export function getEncoderAccessors(encoder: import("../types/encoder.js").Encoder): import("../types/encoder.js").Accessor[];
|
|
53
|
+
/**
|
|
54
|
+
* @param {import("../types/encoder.js").Encoder} encoder
|
|
55
|
+
* @returns {import("../types/encoder.js").Accessor | undefined}
|
|
56
|
+
*/
|
|
57
|
+
export function getEncoderDataAccessor(encoder: import("../types/encoder.js").Encoder): import("../types/encoder.js").Accessor | undefined;
|
|
58
|
+
/**
|
|
59
|
+
* Creates an encoder from ordered branches. The first matching branch wins.
|
|
60
|
+
*
|
|
61
|
+
* @param {import("../types/encoder.js").EncodingBranch[]} branches
|
|
22
62
|
* @param {(channel: import("../spec/channel.js").ChannelWithScale) => import("../types/encoder.js").VegaScale} scaleSource
|
|
23
63
|
* @returns {Encoder}
|
|
24
64
|
*/
|
|
25
|
-
export function createSimpleOrConditionalEncoder(
|
|
65
|
+
export function createSimpleOrConditionalEncoder(branches: import("../types/encoder.js").EncodingBranch[], scaleSource: (channel: import("../spec/channel.js").ChannelWithScale) => import("../types/encoder.js").VegaScale): import("../types/encoder.js").Encoder;
|
|
26
66
|
/**
|
|
67
|
+
* Wraps a single accessor with optional scale application and encoder metadata.
|
|
68
|
+
*
|
|
27
69
|
* @param {Accessor} accessor
|
|
28
70
|
* @param {(channel: import("../spec/channel.js").ChannelWithScale) => import("../types/encoder.js").VegaScale} scaleSource
|
|
29
71
|
* @returns {Encoder}
|
|
30
72
|
*/
|
|
31
73
|
export function createEncoder(accessor: import("../types/encoder.js").Accessor<import("../spec/channel.js").Scalar>, scaleSource: (channel: import("../spec/channel.js").ChannelWithScale) => import("../types/encoder.js").VegaScale): import("../types/encoder.js").Encoder;
|
|
32
74
|
/**
|
|
33
|
-
* TODO: Move to a more generic place
|
|
34
|
-
*
|
|
35
75
|
* @param {import("../spec/channel.js").ChannelDef} channelDef
|
|
36
76
|
* @returns {channelDef is import("../spec/channel.js").ValueDef}
|
|
37
77
|
*/
|
|
@@ -47,6 +87,9 @@ export function isFieldDef(channelDef: import("../spec/channel.js").ChannelDef):
|
|
|
47
87
|
*/
|
|
48
88
|
export function isDatumDef(channelDef: import("../spec/channel.js").ChannelDef): channelDef is import("../spec/channel.js").DatumDef;
|
|
49
89
|
/**
|
|
90
|
+
* Returns true for direct channel definitions that participate in scale
|
|
91
|
+
* resolution. Conditional wrappers must be unwrapped by the caller first.
|
|
92
|
+
*
|
|
50
93
|
* @param {import("../spec/channel.js").ChannelDef} channelDef
|
|
51
94
|
* @returns {channelDef is import("../spec/channel.js").ChannelDefWithScale}
|
|
52
95
|
*/
|
|
@@ -54,12 +97,12 @@ export function isChannelDefWithScale(channelDef: import("../spec/channel.js").C
|
|
|
54
97
|
/**
|
|
55
98
|
* @param {import("../spec/channel.js").ChannelDef} channelDef
|
|
56
99
|
*/
|
|
57
|
-
export function findChannelDefWithScale(channelDef: import("../spec/channel.js").ChannelDef): import("../spec/channel.js").FieldOrDatumDefWithCondition<import("../spec/channel.js").MarkPropFieldDef<import("../spec/channel.js").Type>,
|
|
100
|
+
export function findChannelDefWithScale(channelDef: import("../spec/channel.js").ChannelDef): import("../spec/channel.js").FieldOrDatumDefWithCondition<import("../spec/channel.js").MarkPropFieldDef<import("../spec/channel.js").Type>, number> | import("../spec/channel.js").FieldOrDatumDefWithCondition<import("../spec/channel.js").MarkPropFieldDef<import("../spec/channel.js").Type>, string> | import("../spec/channel.js").PositionFieldDef | import("../spec/channel.js").ChromPosDef | import("../spec/channel.js").PositionDatumDef | import("../spec/channel.js").Conditional<import("../spec/channel.js").MarkPropFieldDef<import("../spec/channel.js").Type>> | import("../spec/channel.js").Conditional<import("../spec/channel.js").MarkPropExprDef<import("../spec/channel.js").Type>>;
|
|
58
101
|
/**
|
|
59
102
|
* @param {import("../view/unitView.js").default} view
|
|
60
103
|
* @param {import("../spec/channel.js").Channel} channel
|
|
61
104
|
*/
|
|
62
|
-
export function getChannelDefWithScale(view: import("../view/unitView.js").default, channel: import("../spec/channel.js").Channel): import("../spec/channel.js").FieldOrDatumDefWithCondition<import("../spec/channel.js").MarkPropFieldDef<import("../spec/channel.js").Type>,
|
|
105
|
+
export function getChannelDefWithScale(view: import("../view/unitView.js").default, channel: import("../spec/channel.js").Channel): import("../spec/channel.js").FieldOrDatumDefWithCondition<import("../spec/channel.js").MarkPropFieldDef<import("../spec/channel.js").Type>, number> | import("../spec/channel.js").FieldOrDatumDefWithCondition<import("../spec/channel.js").MarkPropFieldDef<import("../spec/channel.js").Type>, string> | import("../spec/channel.js").PositionFieldDef | import("../spec/channel.js").ChromPosDef | import("../spec/channel.js").PositionDatumDef | import("../spec/channel.js").Conditional<import("../spec/channel.js").MarkPropFieldDef<import("../spec/channel.js").Type>> | import("../spec/channel.js").Conditional<import("../spec/channel.js").MarkPropExprDef<import("../spec/channel.js").Type>>;
|
|
63
106
|
/**
|
|
64
107
|
* @param {import("../spec/channel.js").ChannelDef} channelDef
|
|
65
108
|
* @returns {channelDef is import("../spec/channel.js").TypeMixins<import("../spec/channel.js").Type>}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../../src/encoder/encoder.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../../src/encoder/encoder.js"],"names":[],"mappings":"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"}
|
|
@@ -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
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {import("../spec/scale.js").Scale["assembly"]} AssemblyReference
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* @typedef {object} AssemblyPreflightResult
|
|
6
|
+
* @prop {AssemblyReference[]} assemblies
|
|
7
|
+
* @prop {boolean} needsDefaultAssembly
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* @param {import("../view/view.js").default} viewRoot
|
|
11
|
+
* @returns {AssemblyPreflightResult}
|
|
12
|
+
*/
|
|
13
|
+
export function collectAssembliesFromViewHierarchy(viewRoot: import("../view/view.js").default): AssemblyPreflightResult;
|
|
14
|
+
/**
|
|
15
|
+
* Ensures that all assemblies required by the given view hierarchy are loaded
|
|
16
|
+
* before any scale initialization path can run.
|
|
17
|
+
*
|
|
18
|
+
* Reminder: call this immediately after view hierarchy creation and before
|
|
19
|
+
* operations that can implicitly initialize scales (for example, step-based
|
|
20
|
+
* size resolution, dynamic opacity setup, or encoder initialization).
|
|
21
|
+
*
|
|
22
|
+
* @param {import("../view/view.js").default} viewRoot
|
|
23
|
+
* @param {import("./genomeStore.js").default} genomeStore
|
|
24
|
+
*/
|
|
25
|
+
export function ensureAssembliesForView(viewRoot: import("../view/view.js").default, genomeStore: import("./genomeStore.js").default): Promise<void>;
|
|
26
|
+
export type AssemblyReference = import("../spec/scale.js").Scale["assembly"];
|
|
27
|
+
export type AssemblyPreflightResult = {
|
|
28
|
+
assemblies: AssemblyReference[];
|
|
29
|
+
needsDefaultAssembly: boolean;
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=assemblyPreflight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assemblyPreflight.d.ts","sourceRoot":"","sources":["../../../src/genome/assemblyPreflight.js"],"names":[],"mappings":"AAEA;;GAEG;AAEH;;;;GAIG;AAEH;;;GAGG;AACH,6DAHW,OAAO,iBAAiB,EAAE,OAAO,GAC/B,uBAAuB,CAsBnC;AAED;;;;;;;;;;GAUG;AACH,kDAHW,OAAO,iBAAiB,EAAE,OAAO,eACjC,OAAO,kBAAkB,EAAE,OAAO,iBAgB5C;gCA5DY,OAAO,kBAAkB,EAAE,KAAK,CAAC,UAAU,CAAC;;gBAK/C,iBAAiB,EAAE;0BACnB,OAAO"}
|