@genome-spy/core 0.64.0 → 0.66.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle/{index-CCJIjehY.js → AbortablePromiseCache-CcuMrnn7.js} +22 -91
- package/dist/bundle/browser-BRemItdO.js +138 -0
- package/dist/bundle/index-BatuyGAI.js +271 -0
- package/dist/bundle/index-ByuE8dvu.js +332 -0
- package/dist/bundle/index-Cq3QFUxX.js +1781 -0
- package/dist/bundle/{index-C08YCM2T.js → index-D-w7Mmt9.js} +246 -126
- package/dist/bundle/index-D28m8tSW.js +1607 -0
- package/dist/bundle/index-D74H8TTz.js +508 -0
- package/dist/bundle/index-DbJ0oeYM.js +631 -0
- package/dist/bundle/index.es.js +15034 -13842
- package/dist/bundle/index.js +223 -237
- package/dist/bundle/inflate-GtwLkvSP.js +1048 -0
- package/dist/bundle/unzip-NywezaRR.js +1492 -0
- package/dist/schema.json +22 -4
- package/dist/src/config/scaleDefaults.d.ts +8 -0
- package/dist/src/config/scaleDefaults.d.ts.map +1 -0
- package/dist/src/config/scaleDefaults.js +45 -0
- package/dist/src/data/collector.d.ts +7 -2
- package/dist/src/data/collector.d.ts.map +1 -1
- package/dist/src/data/collector.js +13 -2
- package/dist/src/data/dataFlow.d.ts +20 -42
- package/dist/src/data/dataFlow.d.ts.map +1 -1
- package/dist/src/data/dataFlow.js +57 -80
- package/dist/src/data/flowHandle.d.ts +15 -0
- package/dist/src/data/flowHandle.d.ts.map +1 -0
- package/dist/src/data/flowHandle.js +13 -0
- package/dist/src/data/flowInit.d.ts +85 -0
- package/dist/src/data/flowInit.d.ts.map +1 -0
- package/dist/src/data/flowInit.js +238 -0
- package/dist/src/data/flowInit.test.d.ts +2 -0
- package/dist/src/data/flowInit.test.d.ts.map +1 -0
- package/dist/src/data/flowOptimizer.d.ts +6 -4
- package/dist/src/data/flowOptimizer.d.ts.map +1 -1
- package/dist/src/data/flowOptimizer.js +29 -14
- package/dist/src/data/sources/lazy/axisTickSource.js +1 -1
- package/dist/src/data/sources/lazy/bamSource.js +1 -1
- package/dist/src/data/sources/lazy/bigBedSource.js +1 -1
- package/dist/src/data/sources/lazy/bigWigSource.js +1 -1
- package/dist/src/data/sources/lazy/gff3Source.d.ts +2 -6
- package/dist/src/data/sources/lazy/gff3Source.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/gff3Source.js +4 -8
- package/dist/src/data/sources/lazy/indexedFastaSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/indexedFastaSource.js +17 -17
- package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts +1 -1
- package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/singleAxisLazySource.js +10 -3
- package/dist/src/data/sources/lazy/singleAxisWindowedSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/singleAxisWindowedSource.js +5 -1
- package/dist/src/data/sources/lazy/tabixSource.js +1 -1
- package/dist/src/data/transforms/filterScoredLabels.d.ts +1 -1
- package/dist/src/data/transforms/filterScoredLabels.d.ts.map +1 -1
- package/dist/src/data/transforms/filterScoredLabels.js +1 -1
- package/dist/src/data/transforms/linearizeGenomicCoordinate.d.ts.map +1 -1
- package/dist/src/data/transforms/linearizeGenomicCoordinate.js +2 -1
- package/dist/src/encoder/encoder.d.ts +1 -1
- package/dist/src/encoder/encoder.d.ts.map +1 -1
- package/dist/src/encoder/encoder.js +1 -1
- package/dist/src/genome/scaleLocus.d.ts +39 -0
- package/dist/src/genome/scaleLocus.d.ts.map +1 -1
- package/dist/src/genome/scaleLocus.js +76 -0
- package/dist/src/genomeSpy/canvasExport.d.ts +19 -0
- package/dist/src/genomeSpy/canvasExport.d.ts.map +1 -0
- package/dist/src/genomeSpy/canvasExport.js +66 -0
- package/dist/src/genomeSpy/containerUi.d.ts +17 -0
- package/dist/src/genomeSpy/containerUi.d.ts.map +1 -0
- package/dist/src/genomeSpy/containerUi.js +78 -0
- package/dist/src/genomeSpy/eventListenerRegistry.d.ts +19 -0
- package/dist/src/genomeSpy/eventListenerRegistry.d.ts.map +1 -0
- package/dist/src/genomeSpy/eventListenerRegistry.js +38 -0
- package/dist/src/genomeSpy/inputBindingManager.d.ts +14 -0
- package/dist/src/genomeSpy/inputBindingManager.d.ts.map +1 -0
- package/dist/src/genomeSpy/inputBindingManager.js +63 -0
- package/dist/src/genomeSpy/interactionController.d.ts +40 -0
- package/dist/src/genomeSpy/interactionController.d.ts.map +1 -0
- package/dist/src/genomeSpy/interactionController.js +371 -0
- package/dist/src/genomeSpy/keyboardListenerManager.d.ts +10 -0
- package/dist/src/genomeSpy/keyboardListenerManager.d.ts.map +1 -0
- package/dist/src/genomeSpy/keyboardListenerManager.js +31 -0
- package/dist/src/genomeSpy/loadingIndicatorManager.d.ts +15 -0
- package/dist/src/genomeSpy/loadingIndicatorManager.d.ts.map +1 -0
- package/dist/src/genomeSpy/loadingIndicatorManager.js +92 -0
- package/dist/src/genomeSpy/renderCoordinator.d.ts +22 -0
- package/dist/src/genomeSpy/renderCoordinator.d.ts.map +1 -0
- package/dist/src/genomeSpy/renderCoordinator.js +118 -0
- package/dist/src/genomeSpy/viewContextFactory.d.ts +18 -0
- package/dist/src/genomeSpy/viewContextFactory.d.ts.map +1 -0
- package/dist/src/genomeSpy/viewContextFactory.js +79 -0
- package/dist/src/genomeSpy/viewDataInit.d.ts +12 -0
- package/dist/src/genomeSpy/viewDataInit.d.ts.map +1 -0
- package/dist/src/genomeSpy/viewDataInit.js +41 -0
- package/dist/src/genomeSpy/viewHierarchyConfig.d.ts +14 -0
- package/dist/src/genomeSpy/viewHierarchyConfig.d.ts.map +1 -0
- package/dist/src/genomeSpy/viewHierarchyConfig.js +24 -0
- package/dist/src/genomeSpy/viewHighlight.d.ts +5 -0
- package/dist/src/genomeSpy/viewHighlight.d.ts.map +1 -0
- package/dist/src/genomeSpy/viewHighlight.js +30 -0
- package/dist/src/genomeSpy.d.ts +17 -72
- package/dist/src/genomeSpy.d.ts.map +1 -1
- package/dist/src/genomeSpy.js +180 -789
- package/dist/src/gl/glslScaleGenerator.d.ts +1 -1
- package/dist/src/gl/webGLHelper.d.ts +2 -2
- package/dist/src/gl/webGLHelper.d.ts.map +1 -1
- package/dist/src/gl/webGLHelper.js +4 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -12
- package/dist/src/marks/mark.d.ts +1 -0
- package/dist/src/marks/mark.d.ts.map +1 -1
- package/dist/src/marks/mark.js +26 -3
- package/dist/src/{view → scales}/axisResolution.d.ts +12 -14
- package/dist/src/scales/axisResolution.d.ts.map +1 -0
- package/dist/src/{view → scales}/axisResolution.js +38 -12
- package/dist/src/scales/axisResolution.test.d.ts.map +1 -0
- package/dist/src/scales/scaleDomainAggregator.d.ts +57 -0
- package/dist/src/scales/scaleDomainAggregator.d.ts.map +1 -0
- package/dist/src/scales/scaleDomainAggregator.js +162 -0
- package/dist/src/scales/scaleDomainAggregator.test.d.ts +2 -0
- package/dist/src/scales/scaleDomainAggregator.test.d.ts.map +1 -0
- package/dist/src/scales/scaleInstanceManager.d.ts +40 -0
- package/dist/src/scales/scaleInstanceManager.d.ts.map +1 -0
- package/dist/src/scales/scaleInstanceManager.js +313 -0
- package/dist/src/scales/scaleInstanceManager.test.d.ts +2 -0
- package/dist/src/scales/scaleInstanceManager.test.d.ts.map +1 -0
- package/dist/src/scales/scaleInteractionController.d.ts +73 -0
- package/dist/src/scales/scaleInteractionController.d.ts.map +1 -0
- package/dist/src/scales/scaleInteractionController.js +336 -0
- package/dist/src/scales/scaleInteractionController.test.d.ts +2 -0
- package/dist/src/scales/scaleInteractionController.test.d.ts.map +1 -0
- package/dist/src/scales/scalePropsResolver.d.ts +23 -0
- package/dist/src/scales/scalePropsResolver.d.ts.map +1 -0
- package/dist/src/scales/scalePropsResolver.js +74 -0
- package/dist/src/{view → scales}/scaleResolution.d.ts +53 -31
- package/dist/src/scales/scaleResolution.d.ts.map +1 -0
- package/dist/src/scales/scaleResolution.js +658 -0
- package/dist/src/scales/scaleResolution.test.d.ts.map +1 -0
- package/dist/src/scales/scaleResolutionConstants.d.ts +6 -0
- package/dist/src/scales/scaleResolutionConstants.d.ts.map +1 -0
- package/dist/src/scales/scaleResolutionConstants.js +5 -0
- package/dist/src/scales/scaleRules.d.ts +16 -0
- package/dist/src/scales/scaleRules.d.ts.map +1 -0
- package/dist/src/scales/scaleRules.js +103 -0
- package/dist/src/scales/scaleRules.test.d.ts +2 -0
- package/dist/src/scales/scaleRules.test.d.ts.map +1 -0
- package/dist/src/spec/channel.d.ts +13 -18
- package/dist/src/spec/sampleView.d.ts +3 -2
- package/dist/src/spec/scale.d.ts +6 -0
- package/dist/src/types/embedApi.d.ts +5 -0
- package/dist/src/types/scaleResolutionApi.d.ts +1 -1
- package/dist/src/types/viewContext.d.ts +1 -1
- package/dist/src/view/concatView.d.ts +18 -0
- package/dist/src/view/concatView.d.ts.map +1 -1
- package/dist/src/view/concatView.js +73 -0
- package/dist/src/view/concatView.test.d.ts +2 -0
- package/dist/src/view/concatView.test.d.ts.map +1 -0
- package/dist/src/view/containerMutationHelper.d.ts +74 -0
- package/dist/src/view/containerMutationHelper.d.ts.map +1 -0
- package/dist/src/view/containerMutationHelper.js +114 -0
- package/dist/src/view/containerView.d.ts +0 -7
- package/dist/src/view/containerView.d.ts.map +1 -1
- package/dist/src/view/containerView.js +0 -10
- package/dist/src/view/facetView.d.ts.map +1 -1
- package/dist/src/view/facetView.js +0 -14
- package/dist/src/view/flowBuilder.d.ts +2 -2
- package/dist/src/view/flowBuilder.d.ts.map +1 -1
- package/dist/src/view/flowBuilder.js +21 -4
- package/dist/src/view/gridView/gridChild.d.ts +11 -0
- package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
- package/dist/src/view/gridView/gridChild.js +32 -6
- package/dist/src/view/gridView/gridView.d.ts +39 -1
- package/dist/src/view/gridView/gridView.d.ts.map +1 -1
- package/dist/src/view/gridView/gridView.js +113 -42
- package/dist/src/view/gridView/gridView.test.d.ts +2 -0
- package/dist/src/view/gridView/gridView.test.d.ts.map +1 -0
- package/dist/src/view/gridView/scrollbar.d.ts +39 -8
- package/dist/src/view/gridView/scrollbar.d.ts.map +1 -1
- package/dist/src/view/gridView/scrollbar.js +184 -69
- package/dist/src/view/gridView/selectionRect.d.ts +8 -4
- package/dist/src/view/gridView/selectionRect.d.ts.map +1 -1
- package/dist/src/view/gridView/selectionRect.js +28 -3
- package/dist/src/view/gridView/selectionRect.test.d.ts +2 -0
- package/dist/src/view/gridView/selectionRect.test.d.ts.map +1 -0
- package/dist/src/view/layerView.d.ts +14 -0
- package/dist/src/view/layerView.d.ts.map +1 -1
- package/dist/src/view/layerView.js +66 -0
- package/dist/src/view/layerView.test.d.ts +2 -0
- package/dist/src/view/layerView.test.d.ts.map +1 -0
- package/dist/src/view/paramMediator.d.ts +2 -1
- package/dist/src/view/paramMediator.d.ts.map +1 -1
- package/dist/src/view/paramMediator.js +13 -1
- package/dist/src/view/testUtils.d.ts.map +1 -1
- package/dist/src/view/testUtils.js +18 -5
- package/dist/src/view/unitView.d.ts.map +1 -1
- package/dist/src/view/unitView.js +52 -12
- package/dist/src/view/view.d.ts +23 -7
- package/dist/src/view/view.d.ts.map +1 -1
- package/dist/src/view/view.js +61 -5
- package/dist/src/view/viewDispose.test.d.ts +2 -0
- package/dist/src/view/viewDispose.test.d.ts.map +1 -0
- package/dist/src/view/viewUtils.d.ts +4 -4
- package/dist/src/view/viewUtils.d.ts.map +1 -1
- package/dist/src/view/viewUtils.js +19 -15
- package/dist/src/view/viewUtils.test.d.ts +2 -0
- package/dist/src/view/viewUtils.test.d.ts.map +1 -0
- package/package.json +10 -10
- package/dist/bundle/__vite-browser-external-C--ziKoh.js +0 -8
- package/dist/bundle/_commonjsHelpers-DjF3Plf2.js +0 -26
- package/dist/bundle/index-5ajWdKly.js +0 -1319
- package/dist/bundle/index-B03-Om4z.js +0 -274
- package/dist/bundle/index-BftNdA0O.js +0 -27
- package/dist/bundle/index-Bg7C4Xat.js +0 -2750
- package/dist/bundle/index-C3QR8Lv6.js +0 -2131
- package/dist/bundle/index-DTcHjAHp.js +0 -505
- package/dist/bundle/index-DnIkxb0L.js +0 -1025
- package/dist/bundle/index-Ww3TAo6_.js +0 -71
- package/dist/bundle/index-g8iXgW0W.js +0 -651
- package/dist/bundle/long-B-FASCSo.js +0 -2387
- package/dist/bundle/remoteFile-BuaqFGWk.js +0 -94
- package/dist/src/data/collector.test.js +0 -138
- package/dist/src/data/dataFlow.test.js +0 -5
- package/dist/src/data/flow.test.js +0 -81
- package/dist/src/data/flowNode.test.js +0 -50
- package/dist/src/data/flowOptimizer.test.js +0 -204
- package/dist/src/data/formats/fasta.test.js +0 -27
- package/dist/src/data/sources/inlineSource.test.js +0 -63
- package/dist/src/data/sources/sequenceSource.test.js +0 -81
- package/dist/src/data/transforms/aggregate.test.js +0 -134
- package/dist/src/data/transforms/clone.test.js +0 -11
- package/dist/src/data/transforms/coverage.test.js +0 -238
- package/dist/src/data/transforms/filter.test.js +0 -20
- package/dist/src/data/transforms/flatten.test.js +0 -96
- package/dist/src/data/transforms/flattenDelimited.test.js +0 -90
- package/dist/src/data/transforms/flattenSequence.test.js +0 -34
- package/dist/src/data/transforms/formula.test.js +0 -25
- package/dist/src/data/transforms/identifier.test.js +0 -92
- package/dist/src/data/transforms/pileup.test.js +0 -70
- package/dist/src/data/transforms/project.test.js +0 -32
- package/dist/src/data/transforms/regexExtract.test.js +0 -70
- package/dist/src/data/transforms/regexFold.test.js +0 -201
- package/dist/src/data/transforms/sample.test.js +0 -38
- package/dist/src/data/transforms/stack.test.js +0 -91
- package/dist/src/encoder/accessor.test.js +0 -162
- package/dist/src/encoder/encoder.test.js +0 -105
- package/dist/src/genome/genome.test.js +0 -268
- package/dist/src/genome/genomes.test.js +0 -8
- package/dist/src/genome/scaleIndex.test.js +0 -78
- package/dist/src/genome/scaleLocus.test.js +0 -4
- package/dist/src/scale/scale.test.js +0 -326
- package/dist/src/scale/ticks.test.js +0 -46
- package/dist/src/selection/selection.test.js +0 -14
- package/dist/src/utils/addBaseUrl.test.js +0 -30
- package/dist/src/utils/binnedIndex.test.js +0 -201
- package/dist/src/utils/cloner.test.js +0 -35
- package/dist/src/utils/coalesce.test.js +0 -16
- package/dist/src/utils/concatIterables.test.js +0 -8
- package/dist/src/utils/domainArray.test.js +0 -130
- package/dist/src/utils/indexer.test.js +0 -49
- package/dist/src/utils/interactionEvent.test.js +0 -35
- package/dist/src/utils/iterateNestedMaps.test.js +0 -33
- package/dist/src/utils/kWayMerge.test.js +0 -30
- package/dist/src/utils/mergeObjects.test.js +0 -42
- package/dist/src/utils/numberExtractor.test.js +0 -6
- package/dist/src/utils/propertyCacher.test.js +0 -89
- package/dist/src/utils/propertyCoalescer.test.js +0 -25
- package/dist/src/utils/radixSort.test.js +0 -51
- package/dist/src/utils/reservationMap.test.js +0 -20
- package/dist/src/utils/ringBuffer.test.js +0 -39
- package/dist/src/utils/topK.test.js +0 -54
- package/dist/src/utils/trees.test.js +0 -135
- package/dist/src/utils/url.test.js +0 -28
- package/dist/src/utils/variableTools.test.js +0 -13
- package/dist/src/view/axisResolution.d.ts.map +0 -1
- package/dist/src/view/axisResolution.test.d.ts.map +0 -1
- package/dist/src/view/axisResolution.test.js +0 -206
- package/dist/src/view/flowBuilder.test.js +0 -125
- package/dist/src/view/layout/flexLayout.test.js +0 -323
- package/dist/src/view/layout/grid.test.js +0 -71
- package/dist/src/view/layout/rectangle.test.js +0 -192
- package/dist/src/view/paramMediator.test.js +0 -260
- package/dist/src/view/scaleResolution.d.ts.map +0 -1
- package/dist/src/view/scaleResolution.js +0 -1049
- package/dist/src/view/scaleResolution.test.d.ts.map +0 -1
- package/dist/src/view/scaleResolution.test.js +0 -645
- package/dist/src/view/view.test.js +0 -245
- package/dist/src/view/viewFactory.test.js +0 -25
- /package/dist/src/{view → scales}/axisResolution.test.d.ts +0 -0
- /package/dist/src/{view → scales}/scaleResolution.test.d.ts +0 -0
|
@@ -71,7 +71,7 @@ export function generateConditionalEncoderGlsl(channel: Channel, accessors: impo
|
|
|
71
71
|
/**
|
|
72
72
|
* @param {Channel} channel
|
|
73
73
|
*/
|
|
74
|
-
export function getScaledDataTypeForChannel(channel: Channel): "
|
|
74
|
+
export function getScaledDataTypeForChannel(channel: Channel): "float" | "vec3" | "uint";
|
|
75
75
|
/**
|
|
76
76
|
*
|
|
77
77
|
* @param {import("../types/encoder.js").VegaScale} scale
|
|
@@ -104,10 +104,10 @@ export default class WebGLHelper {
|
|
|
104
104
|
*
|
|
105
105
|
* TODO: This may be too specific to be included in WebGLHelper. Find a better place.
|
|
106
106
|
*
|
|
107
|
-
* @param {import("../
|
|
107
|
+
* @param {import("../scales/scaleResolution.js").default} resolution
|
|
108
108
|
* @param {boolean} update Update the texture if it exists already.
|
|
109
109
|
*/
|
|
110
|
-
createRangeTexture(resolution: import("../
|
|
110
|
+
createRangeTexture(resolution: import("../scales/scaleResolution.js").default, update?: boolean): void;
|
|
111
111
|
/**
|
|
112
112
|
* @param {import("../types/selectionTypes.js").MultiPointSelection} selection
|
|
113
113
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webGLHelper.d.ts","sourceRoot":"","sources":["../../../src/gl/webGLHelper.js"],"names":[],"mappings":"AAwZA;;;;GAIG;AACH,kCAJW,sBAAsB,gBACtB,WAAW,kBACX,WAAW;;;;;;EA8CrB;AAED;;;;;GAKG;AACH,0CALW,qBAAqB,WACrB,IAAI,CAAC,OAAO,SAAS,EAAE,cAAc,EAAE,KAAK,CAAC,OAC7C,MAAM,EAAE,GAAG,eAAe,YAC1B,YAAY,gBAYtB;AAED;;;;;;GAMG;AACH,qCALW,sBAAsB,mBACtB,OAAO,SAAS,EAAE,eAAe,KACjC,MAAM,KACN,MAAM,2BAWhB;AAED;;;;;GAKG;AACH,yCAJW,sBAAsB,mBACtB,OAAO,SAAS,EAAE,eAAe,SACjC,MAAM,UA4BhB;AAjfD;IACI;;;;;;;OAOG;IACH,uBANW,WAAW,eACX,MAAM;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,2BAGrC,sBAAsB,EAsFhC;IAnFG,wBAA2B;IAC3B;;;MAKO;IAEP,uCAAuC;IACvC,cADW,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CACN;IAE7B,6EAA6E;IAC7E,eADW,OAAO,CAAC,OAAO,qBAAqB,EAAE,SAAS,EAAE,YAAY,CAAC,CACvC;IAElC;;OAEG;IACH,mBAFU,OAAO,CAAC,OAAO,4BAA4B,EAAE,mBAAmB,EAAE,YAAY,CAAC,CAEnD;IA8CtC,0BAAoB;IACpB,2BAAY;IAGZ,oDAAoD;IACpD,2BADW,OAAO,SAAS,EAAE,iBAAiB,EAAE,CAQ/C;IACD,sDAGC;IAML,uBAGC;IAFG;;;MAAmC;IAIvC;;;;;OAKG;IACH,oBAHW,MAAM,QACN,MAAM,GAAG,MAAM,EAAE,eA2B3B;IAED,iBAcC;IAED,iBAEC;IAED;;;;OAIG;IACH,oCAFW;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;;;MAS3C;IAED;;;OAGG;IACH;;;MAuBC;IAED;;;;;;;;;OASG;IACH,+BAHW,OAAO,
|
|
1
|
+
{"version":3,"file":"webGLHelper.d.ts","sourceRoot":"","sources":["../../../src/gl/webGLHelper.js"],"names":[],"mappings":"AAwZA;;;;GAIG;AACH,kCAJW,sBAAsB,gBACtB,WAAW,kBACX,WAAW;;;;;;EA8CrB;AAED;;;;;GAKG;AACH,0CALW,qBAAqB,WACrB,IAAI,CAAC,OAAO,SAAS,EAAE,cAAc,EAAE,KAAK,CAAC,OAC7C,MAAM,EAAE,GAAG,eAAe,YAC1B,YAAY,gBAYtB;AAED;;;;;;GAMG;AACH,qCALW,sBAAsB,mBACtB,OAAO,SAAS,EAAE,eAAe,KACjC,MAAM,KACN,MAAM,2BAWhB;AAED;;;;;GAKG;AACH,yCAJW,sBAAsB,mBACtB,OAAO,SAAS,EAAE,eAAe,SACjC,MAAM,UA4BhB;AAjfD;IACI;;;;;;;OAOG;IACH,uBANW,WAAW,eACX,MAAM;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,2BAGrC,sBAAsB,EAsFhC;IAnFG,wBAA2B;IAC3B;;;MAKO;IAEP,uCAAuC;IACvC,cADW,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CACN;IAE7B,6EAA6E;IAC7E,eADW,OAAO,CAAC,OAAO,qBAAqB,EAAE,SAAS,EAAE,YAAY,CAAC,CACvC;IAElC;;OAEG;IACH,mBAFU,OAAO,CAAC,OAAO,4BAA4B,EAAE,mBAAmB,EAAE,YAAY,CAAC,CAEnD;IA8CtC,0BAAoB;IACpB,2BAAY;IAGZ,oDAAoD;IACpD,2BADW,OAAO,SAAS,EAAE,iBAAiB,EAAE,CAQ/C;IACD,sDAGC;IAML,uBAGC;IAFG;;;MAAmC;IAIvC;;;;;OAKG;IACH,oBAHW,MAAM,QACN,MAAM,GAAG,MAAM,EAAE,eA2B3B;IAED,iBAcC;IAED,iBAEC;IAED;;;;OAIG;IACH,oCAFW;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;;;MAS3C;IAED;;;OAGG;IACH;;;MAuBC;IAED;;;;;;;;;OASG;IACH,+BAHW,OAAO,8BAA8B,EAAE,OAAO,WAC9C,OAAO,QA0GjB;IAED;;OAEG;IACH,kCAFW,OAAO,4BAA4B,EAAE,mBAAmB,0BA+BlE;CACJ"}
|
|
@@ -231,11 +231,11 @@ export default class WebGLHelper {
|
|
|
231
231
|
*
|
|
232
232
|
* TODO: This may be too specific to be included in WebGLHelper. Find a better place.
|
|
233
233
|
*
|
|
234
|
-
* @param {import("../
|
|
234
|
+
* @param {import("../scales/scaleResolution.js").default} resolution
|
|
235
235
|
* @param {boolean} update Update the texture if it exists already.
|
|
236
236
|
*/
|
|
237
237
|
createRangeTexture(resolution, update = false) {
|
|
238
|
-
const existingTexture = this.rangeTextures.get(resolution.
|
|
238
|
+
const existingTexture = this.rangeTextures.get(resolution.getScale());
|
|
239
239
|
if (!update && existingTexture) {
|
|
240
240
|
return;
|
|
241
241
|
}
|
|
@@ -263,7 +263,7 @@ export default class WebGLHelper {
|
|
|
263
263
|
const channel = resolution.channel;
|
|
264
264
|
|
|
265
265
|
if (isColorChannel(channel)) {
|
|
266
|
-
const scale = resolution.
|
|
266
|
+
const scale = resolution.getScale();
|
|
267
267
|
const props = scale.props;
|
|
268
268
|
|
|
269
269
|
const range = /** @type {any[]} */ (scale.range());
|
|
@@ -317,7 +317,7 @@ export default class WebGLHelper {
|
|
|
317
317
|
|
|
318
318
|
this.rangeTextures.set(scale, texture);
|
|
319
319
|
} else {
|
|
320
|
-
const scale = resolution.
|
|
320
|
+
const scale = resolution.getScale();
|
|
321
321
|
|
|
322
322
|
if (scale.type === "ordinal" || isDiscretizing(scale.type)) {
|
|
323
323
|
/** @type {function(any):number} Handle "shape" etc */
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.js"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.js"],"names":[],"mappings":";AA+FA;;;;;GAKG;AACH,8BAFW,MAAM,gBAuBhB;sBAvHqB,gBAAgB;qBAFjB,KAAK;iBAGT,kBAAkB;oBACf,6BAA6B"}
|
package/dist/src/index.js
CHANGED
|
@@ -66,21 +66,11 @@ export async function embed(el, spec, options = {}) {
|
|
|
66
66
|
},
|
|
67
67
|
|
|
68
68
|
addEventListener(type, listener) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
let listeners = listenersByType.get(type);
|
|
72
|
-
if (!listeners) {
|
|
73
|
-
listeners = new Set();
|
|
74
|
-
listenersByType.set(type, listeners);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
listeners.add(listener);
|
|
69
|
+
genomeSpy.addEventListener(type, listener);
|
|
78
70
|
},
|
|
79
71
|
|
|
80
72
|
removeEventListener(type, listener) {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
listenersByType.get(type)?.delete(listener);
|
|
73
|
+
genomeSpy.removeEventListener(type, listener);
|
|
84
74
|
},
|
|
85
75
|
|
|
86
76
|
getScaleResolutionByName(name) {
|
package/dist/src/marks/mark.d.ts
CHANGED
|
@@ -200,6 +200,7 @@ export default class Mark<P extends import("../spec/mark.js").MarkProps = import
|
|
|
200
200
|
* Delete WebGL buffers etc.
|
|
201
201
|
*/
|
|
202
202
|
deleteGraphicsData(): void;
|
|
203
|
+
dispose(): void;
|
|
203
204
|
/**
|
|
204
205
|
*
|
|
205
206
|
* @param {any} vertexData TODO: Extract type from VertexBuilder
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mark.d.ts","sourceRoot":"","sources":["../../../src/marks/mark.js"],"names":[],"mappings":"AA0DA,mCAAoC,sBAAsB,CAAC;AAC3D,mCAAoC,sBAAsB,CAAC;AAE3D,uCAAwC,oBAAoB,CAAC;AAE7D;;;;;;;;;;;;;GAaG;AAEH;;GAEG;AACH,0BAF0B,CAAC,SAAd,mCAAW;
|
|
1
|
+
{"version":3,"file":"mark.d.ts","sourceRoot":"","sources":["../../../src/marks/mark.js"],"names":[],"mappings":"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"}
|
package/dist/src/marks/mark.js
CHANGED
|
@@ -95,6 +95,11 @@ export default class Mark {
|
|
|
95
95
|
*/
|
|
96
96
|
#callAfterShaderCompilation = [];
|
|
97
97
|
|
|
98
|
+
/**
|
|
99
|
+
* @type {{expr: import("../view/paramMediator.js").ExprRefFunction, listener: () => void}[]}
|
|
100
|
+
*/
|
|
101
|
+
#exprListeners = [];
|
|
102
|
+
|
|
98
103
|
/**
|
|
99
104
|
* @param {import("../view/unitView.js").default} unitView
|
|
100
105
|
*/
|
|
@@ -597,7 +602,9 @@ export default class Mark {
|
|
|
597
602
|
|
|
598
603
|
// TODO: High precision scales
|
|
599
604
|
const { attributeType } = getAttributeAndArrayTypes(
|
|
600
|
-
this.unitView
|
|
605
|
+
this.unitView
|
|
606
|
+
.getScaleResolution(channel)
|
|
607
|
+
.getScale(),
|
|
601
608
|
channel
|
|
602
609
|
);
|
|
603
610
|
|
|
@@ -1034,6 +1041,7 @@ export default class Mark {
|
|
|
1034
1041
|
|
|
1035
1042
|
// Register a listener ...
|
|
1036
1043
|
fn.addListener(set);
|
|
1044
|
+
this.#exprListeners.push({ expr: fn, listener: set });
|
|
1037
1045
|
// ... and set the initial value
|
|
1038
1046
|
set();
|
|
1039
1047
|
} else {
|
|
@@ -1045,7 +1053,14 @@ export default class Mark {
|
|
|
1045
1053
|
* Delete WebGL buffers etc.
|
|
1046
1054
|
*/
|
|
1047
1055
|
deleteGraphicsData() {
|
|
1048
|
-
const
|
|
1056
|
+
const glHelper = this.glHelper;
|
|
1057
|
+
if (!glHelper) {
|
|
1058
|
+
this.vertexArrayInfo = undefined;
|
|
1059
|
+
this.bufferInfo = undefined;
|
|
1060
|
+
return;
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
const gl = glHelper.gl;
|
|
1049
1064
|
|
|
1050
1065
|
if (this.vertexArrayInfo) {
|
|
1051
1066
|
this.gl.bindVertexArray(null);
|
|
@@ -1070,6 +1085,14 @@ export default class Mark {
|
|
|
1070
1085
|
}
|
|
1071
1086
|
}
|
|
1072
1087
|
|
|
1088
|
+
dispose() {
|
|
1089
|
+
for (const { expr, listener } of this.#exprListeners) {
|
|
1090
|
+
expr.removeListener(listener);
|
|
1091
|
+
}
|
|
1092
|
+
this.#exprListeners.length = 0;
|
|
1093
|
+
this.deleteGraphicsData();
|
|
1094
|
+
}
|
|
1095
|
+
|
|
1073
1096
|
/**
|
|
1074
1097
|
*
|
|
1075
1098
|
* @param {any} vertexData TODO: Extract type from VertexBuilder
|
|
@@ -1332,7 +1355,7 @@ export default class Mark {
|
|
|
1332
1355
|
/** @type {function(import("../gl/dataToVertices.js").RangeEntry):void} rangeEntry */
|
|
1333
1356
|
let drawWithRangeEntry;
|
|
1334
1357
|
|
|
1335
|
-
const scale = this.unitView.getScaleResolution("x")?.
|
|
1358
|
+
const scale = this.unitView.getScaleResolution("x")?.getScale();
|
|
1336
1359
|
const continuous = scale && isContinuous(scale.type);
|
|
1337
1360
|
const domainStartOffset = ["index", "locus"].includes(scale?.type)
|
|
1338
1361
|
? -1
|
|
@@ -2,35 +2,33 @@
|
|
|
2
2
|
* @template {import("../spec/channel.js").PositionalChannel}[T=PositionalChannel]
|
|
3
3
|
*
|
|
4
4
|
* @typedef {object} AxisResolutionMember
|
|
5
|
-
* @prop {import("
|
|
5
|
+
* @prop {import("../view/unitView.js").default} view
|
|
6
6
|
* @prop {T} channel
|
|
7
7
|
* @prop {import("../spec/channel.js").ChannelDefWithScale} channelDef
|
|
8
8
|
*/
|
|
9
9
|
export default class AxisResolution {
|
|
10
|
-
/**
|
|
11
|
-
* @typedef {import("./unitView.js").default} UnitView
|
|
12
|
-
* @typedef {import("../spec/channel.js").PositionalChannel} PositionalChannel
|
|
13
|
-
*/
|
|
14
10
|
/**
|
|
15
11
|
* @param {import("../spec/channel.js").PrimaryPositionalChannel} channel
|
|
16
12
|
*/
|
|
17
13
|
constructor(channel: import("../spec/channel.js").PrimaryPositionalChannel);
|
|
18
14
|
channel: import("../spec/channel.js").PrimaryPositionalChannel;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
get scaleResolution(): any;
|
|
16
|
+
/**
|
|
17
|
+
* @param {AxisResolutionMember} member
|
|
18
|
+
* @returns {() => boolean}
|
|
19
|
+
*/
|
|
20
|
+
registerMember(member: AxisResolutionMember): () => boolean;
|
|
22
21
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* @param {AxisResolutionMember} newMember
|
|
22
|
+
* @param {AxisResolutionMember} member
|
|
23
|
+
* @returns {boolean}
|
|
27
24
|
*/
|
|
28
|
-
|
|
25
|
+
removeMember(member: AxisResolutionMember): boolean;
|
|
29
26
|
getAxisProps(): import("../spec/axis.js").GenomeAxis;
|
|
30
27
|
getTitle(): string;
|
|
28
|
+
#private;
|
|
31
29
|
}
|
|
32
30
|
export type AxisResolutionMember<T extends import("../spec/channel.js").PositionalChannel = import("../spec/channel.js").PositionalChannel> = {
|
|
33
|
-
view: import("
|
|
31
|
+
view: import("../view/unitView.js").default;
|
|
34
32
|
channel: T;
|
|
35
33
|
channelDef: import("../spec/channel.js").ChannelDefWithScale;
|
|
36
34
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"axisResolution.d.ts","sourceRoot":"","sources":["../../../src/scales/axisResolution.js"],"names":[],"mappings":"AAcA;;;;;;;GAOG;AACH;IASI;;OAEG;IACH,qBAFW,OAAO,oBAAoB,EAAE,wBAAwB,EAI/D;IADG,+DAAsB;IAG1B,2BAGC;IAiCD;;;OAGG;IACH,uBAHW,oBAAoB,GAClB,MAAM,OAAO,CAQzB;IAED;;;OAGG;IACH,qBAHW,oBAAoB,GAClB,OAAO,CAQnB;IAED,qDAuBC;IAED,mBAyDC;;CACJ;iCAtK6D,CAAC,SAAlD,OAAQ,oBAAoB,EAAE,iBAAkB;UAGnD,OAAO,qBAAqB,EAAE,OAAO;aACrC,CAAC;gBACD,OAAO,oBAAoB,EAAE,mBAAmB"}
|
|
@@ -7,37 +7,38 @@ import {
|
|
|
7
7
|
isSecondaryChannel,
|
|
8
8
|
isValueDef,
|
|
9
9
|
} from "../encoder/encoder.js";
|
|
10
|
-
import { peek } from "../utils/arrayUtils.js";
|
|
11
10
|
import coalesce from "../utils/coalesce.js";
|
|
12
11
|
|
|
13
12
|
import mergeObjects from "../utils/mergeObjects.js";
|
|
14
|
-
import { getCachedOrCall } from "../utils/propertyCacher.js";
|
|
13
|
+
import { getCachedOrCall, invalidate } from "../utils/propertyCacher.js";
|
|
15
14
|
|
|
16
15
|
/**
|
|
17
16
|
* @template {import("../spec/channel.js").PositionalChannel}[T=PositionalChannel]
|
|
18
17
|
*
|
|
19
18
|
* @typedef {object} AxisResolutionMember
|
|
20
|
-
* @prop {import("
|
|
19
|
+
* @prop {import("../view/unitView.js").default} view
|
|
21
20
|
* @prop {T} channel
|
|
22
21
|
* @prop {import("../spec/channel.js").ChannelDefWithScale} channelDef
|
|
23
22
|
*/
|
|
24
23
|
export default class AxisResolution {
|
|
25
24
|
/**
|
|
26
|
-
* @typedef {import("
|
|
25
|
+
* @typedef {import("../view/unitView.js").default} UnitView
|
|
27
26
|
* @typedef {import("../spec/channel.js").PositionalChannel} PositionalChannel
|
|
28
27
|
*/
|
|
29
28
|
|
|
29
|
+
/** @type {Set<AxisResolutionMember>} The involved views */
|
|
30
|
+
#members = new Set();
|
|
31
|
+
|
|
30
32
|
/**
|
|
31
33
|
* @param {import("../spec/channel.js").PrimaryPositionalChannel} channel
|
|
32
34
|
*/
|
|
33
35
|
constructor(channel) {
|
|
34
36
|
this.channel = channel;
|
|
35
|
-
/** @type {AxisResolutionMember[]} The involved views */
|
|
36
|
-
this.members = [];
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
get scaleResolution() {
|
|
40
|
-
|
|
40
|
+
const first = this.#members.values().next().value;
|
|
41
|
+
return first?.view.getScaleResolution(this.channel);
|
|
41
42
|
}
|
|
42
43
|
|
|
43
44
|
/**
|
|
@@ -46,7 +47,7 @@ export default class AxisResolution {
|
|
|
46
47
|
*
|
|
47
48
|
* @param {AxisResolutionMember} newMember
|
|
48
49
|
*/
|
|
49
|
-
addMember(newMember) {
|
|
50
|
+
#addMember(newMember) {
|
|
50
51
|
const { view } = newMember;
|
|
51
52
|
const newScaleResolution = view.getScaleResolution(this.channel);
|
|
52
53
|
|
|
@@ -61,18 +62,43 @@ export default class AxisResolution {
|
|
|
61
62
|
throw new Error(
|
|
62
63
|
`Shared axes must have a shared scale! Channel: ${
|
|
63
64
|
this.channel
|
|
64
|
-
}, existing views: [${this
|
|
65
|
+
}, existing views: [${Array.from(this.#members)
|
|
65
66
|
.map((m) => m.view.getPathString())
|
|
66
67
|
.join(", ")}], new view: ${view.getPathString()}.`
|
|
67
68
|
);
|
|
68
69
|
}
|
|
69
70
|
|
|
70
|
-
this
|
|
71
|
+
this.#members.add(newMember);
|
|
72
|
+
invalidate(this, "axisProps");
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* @param {AxisResolutionMember} member
|
|
77
|
+
* @returns {() => boolean}
|
|
78
|
+
*/
|
|
79
|
+
registerMember(member) {
|
|
80
|
+
this.#addMember(member);
|
|
81
|
+
return () => {
|
|
82
|
+
const removed = this.removeMember(member);
|
|
83
|
+
return removed && this.#members.size === 0;
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* @param {AxisResolutionMember} member
|
|
89
|
+
* @returns {boolean}
|
|
90
|
+
*/
|
|
91
|
+
removeMember(member) {
|
|
92
|
+
const removed = this.#members.delete(member);
|
|
93
|
+
if (removed) {
|
|
94
|
+
invalidate(this, "axisProps");
|
|
95
|
+
}
|
|
96
|
+
return removed;
|
|
71
97
|
}
|
|
72
98
|
|
|
73
99
|
getAxisProps() {
|
|
74
100
|
return getCachedOrCall(this, "axisProps", () => {
|
|
75
|
-
const propArray = this
|
|
101
|
+
const propArray = Array.from(this.#members).map((member) => {
|
|
76
102
|
const channelDef = member.view.mark.encoding[member.channel];
|
|
77
103
|
return "axis" in channelDef && channelDef.axis;
|
|
78
104
|
});
|
|
@@ -123,7 +149,7 @@ export default class AxisResolution {
|
|
|
123
149
|
};
|
|
124
150
|
};
|
|
125
151
|
|
|
126
|
-
const titles = this
|
|
152
|
+
const titles = Array.from(this.#members).map(computeTitle);
|
|
127
153
|
|
|
128
154
|
// Skip implicit secondary channel titles if the primary channel has an explicit title
|
|
129
155
|
const filteredTitles = titles.filter((title) => {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"axisResolution.test.d.ts","sourceRoot":"","sources":["../../../src/scales/axisResolution.test.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {import("../utils/domainArray.js").DomainArray} DomainArray
|
|
3
|
+
* @typedef {import("../spec/scale.js").ComplexDomain} ComplexDomain
|
|
4
|
+
* @typedef {import("../spec/scale.js").ScalarDomain} ScalarDomain
|
|
5
|
+
* @typedef {import("./scaleResolution.js").ScaleResolutionMember} ScaleResolutionMember
|
|
6
|
+
*/
|
|
7
|
+
export default class ScaleDomainAggregator {
|
|
8
|
+
/**
|
|
9
|
+
* @param {object} options
|
|
10
|
+
* @param {() => Set<ScaleResolutionMember>} options.getMembers
|
|
11
|
+
* @param {() => import("../spec/channel.js").Type} options.getType
|
|
12
|
+
* @param {() => number[]} options.getLocusExtent
|
|
13
|
+
* @param {(interval: ScalarDomain | ComplexDomain) => number[]} options.fromComplexInterval
|
|
14
|
+
*/
|
|
15
|
+
constructor({ getMembers, getType, getLocusExtent, fromComplexInterval }: {
|
|
16
|
+
getMembers: () => Set<ScaleResolutionMember>;
|
|
17
|
+
getType: () => import("../spec/channel.js").Type;
|
|
18
|
+
getLocusExtent: () => number[];
|
|
19
|
+
fromComplexInterval: (interval: ScalarDomain | ComplexDomain) => number[];
|
|
20
|
+
});
|
|
21
|
+
/**
|
|
22
|
+
* @returns {any[]}
|
|
23
|
+
*/
|
|
24
|
+
get initialDomainSnapshot(): any[];
|
|
25
|
+
hasConfiguredDomain(): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Returns the configured domain or a data-derived/default domain.
|
|
28
|
+
*
|
|
29
|
+
* @param {boolean} [extractDataDomain]
|
|
30
|
+
* @returns {any[]}
|
|
31
|
+
*/
|
|
32
|
+
getConfiguredOrDefaultDomain(extractDataDomain?: boolean): any[];
|
|
33
|
+
/**
|
|
34
|
+
* Unions the configured domains of all participating views.
|
|
35
|
+
*
|
|
36
|
+
* @return {DomainArray}
|
|
37
|
+
*/
|
|
38
|
+
getConfiguredDomain(): DomainArray;
|
|
39
|
+
/**
|
|
40
|
+
* Extracts and unions the data domains of all participating views.
|
|
41
|
+
*
|
|
42
|
+
* @return {DomainArray}
|
|
43
|
+
*/
|
|
44
|
+
getDataDomain(): DomainArray;
|
|
45
|
+
/**
|
|
46
|
+
* @param {import("../types/encoder.js").VegaScale} scale
|
|
47
|
+
* @param {boolean} domainWasInitialized
|
|
48
|
+
* @returns {boolean} true if listeners should be notified immediately
|
|
49
|
+
*/
|
|
50
|
+
captureInitialDomain(scale: import("../types/encoder.js").VegaScale, domainWasInitialized: boolean): boolean;
|
|
51
|
+
#private;
|
|
52
|
+
}
|
|
53
|
+
export type DomainArray = import("../utils/domainArray.js").DomainArray;
|
|
54
|
+
export type ComplexDomain = import("../spec/scale.js").ComplexDomain;
|
|
55
|
+
export type ScalarDomain = import("../spec/scale.js").ScalarDomain;
|
|
56
|
+
export type ScaleResolutionMember = import("./scaleResolution.js").ScaleResolutionMember;
|
|
57
|
+
//# sourceMappingURL=scaleDomainAggregator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaleDomainAggregator.d.ts","sourceRoot":"","sources":["../../../src/scales/scaleDomainAggregator.js"],"names":[],"mappings":"AAMA;;;;;GAKG;AAEH;IAgBI;;;;;;OAMG;IACH,0EALG;QAAkD,UAAU,EAApD,MAAM,GAAG,CAAC,qBAAqB,CAAC;QACiB,OAAO,EAAxD,MAAM,OAAO,oBAAoB,EAAE,IAAI;QACf,cAAc,EAAtC,MAAM,MAAM,EAAE;QACgD,mBAAmB,EAAjF,CAAC,QAAQ,EAAE,YAAY,GAAG,aAAa,KAAK,MAAM,EAAE;KAC9D,EAMA;IAED;;OAEG;IACH,6BAFa,GAAG,EAAE,CAIjB;IAED,+BAEC;IAED;;;;;OAKG;IACH,iDAHW,OAAO,GACL,GAAG,EAAE,CAYjB;IAED;;;;OAIG;IACH,uBAFY,WAAW,CAOtB;IAED;;;;OAIG;IACH,iBAFY,WAAW,CAItB;IAED;;;;OAIG;IACH,4BAJW,OAAO,qBAAqB,EAAE,SAAS,wBACvC,OAAO,GACL,OAAO,CAgBnB;;CACJ;0BA1GY,OAAO,yBAAyB,EAAE,WAAW;4BAC7C,OAAO,kBAAkB,EAAE,aAAa;2BACxC,OAAO,kBAAkB,EAAE,YAAY;oCACvC,OAAO,sBAAsB,EAAE,qBAAqB"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { span } from "vega-util";
|
|
2
|
+
import { isContinuous } from "vega-scale";
|
|
3
|
+
|
|
4
|
+
import { LOCUS } from "./scaleResolutionConstants.js";
|
|
5
|
+
import createDomain from "../utils/domainArray.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @typedef {import("../utils/domainArray.js").DomainArray} DomainArray
|
|
9
|
+
* @typedef {import("../spec/scale.js").ComplexDomain} ComplexDomain
|
|
10
|
+
* @typedef {import("../spec/scale.js").ScalarDomain} ScalarDomain
|
|
11
|
+
* @typedef {import("./scaleResolution.js").ScaleResolutionMember} ScaleResolutionMember
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
export default class ScaleDomainAggregator {
|
|
15
|
+
/** @type {Set<ScaleResolutionMember>} */
|
|
16
|
+
#members;
|
|
17
|
+
|
|
18
|
+
/** @type {() => import("../spec/channel.js").Type} */
|
|
19
|
+
#getType;
|
|
20
|
+
|
|
21
|
+
/** @type {() => number[]} */
|
|
22
|
+
#getLocusExtent;
|
|
23
|
+
|
|
24
|
+
/** @type {(interval: ScalarDomain | ComplexDomain) => number[]} */
|
|
25
|
+
#fromComplexInterval;
|
|
26
|
+
|
|
27
|
+
/** @type {any[]} */
|
|
28
|
+
#initialDomain;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @param {object} options
|
|
32
|
+
* @param {() => Set<ScaleResolutionMember>} options.getMembers
|
|
33
|
+
* @param {() => import("../spec/channel.js").Type} options.getType
|
|
34
|
+
* @param {() => number[]} options.getLocusExtent
|
|
35
|
+
* @param {(interval: ScalarDomain | ComplexDomain) => number[]} options.fromComplexInterval
|
|
36
|
+
*/
|
|
37
|
+
constructor({ getMembers, getType, getLocusExtent, fromComplexInterval }) {
|
|
38
|
+
this.#members = getMembers();
|
|
39
|
+
this.#getType = getType;
|
|
40
|
+
this.#getLocusExtent = getLocusExtent;
|
|
41
|
+
this.#fromComplexInterval = fromComplexInterval;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @returns {any[]}
|
|
46
|
+
*/
|
|
47
|
+
get initialDomainSnapshot() {
|
|
48
|
+
return this.#initialDomain;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
hasConfiguredDomain() {
|
|
52
|
+
return !!this.getConfiguredDomain();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Returns the configured domain or a data-derived/default domain.
|
|
57
|
+
*
|
|
58
|
+
* @param {boolean} [extractDataDomain]
|
|
59
|
+
* @returns {any[]}
|
|
60
|
+
*/
|
|
61
|
+
getConfiguredOrDefaultDomain(extractDataDomain = false) {
|
|
62
|
+
// TODO: intersect the domain with zoom extent (if it's defined)
|
|
63
|
+
return (
|
|
64
|
+
this.getConfiguredDomain() ??
|
|
65
|
+
resolveDefaultDomain(
|
|
66
|
+
this.#getType(),
|
|
67
|
+
this.#getLocusExtent,
|
|
68
|
+
extractDataDomain ? this.getDataDomain() : undefined
|
|
69
|
+
)
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Unions the configured domains of all participating views.
|
|
75
|
+
*
|
|
76
|
+
* @return {DomainArray}
|
|
77
|
+
*/
|
|
78
|
+
getConfiguredDomain() {
|
|
79
|
+
return resolveConfiguredDomain(
|
|
80
|
+
this.#members,
|
|
81
|
+
this.#fromComplexInterval
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Extracts and unions the data domains of all participating views.
|
|
87
|
+
*
|
|
88
|
+
* @return {DomainArray}
|
|
89
|
+
*/
|
|
90
|
+
getDataDomain() {
|
|
91
|
+
return resolveDataDomain(this.#members, this.#getType);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* @param {import("../types/encoder.js").VegaScale} scale
|
|
96
|
+
* @param {boolean} domainWasInitialized
|
|
97
|
+
* @returns {boolean} true if listeners should be notified immediately
|
|
98
|
+
*/
|
|
99
|
+
captureInitialDomain(scale, domainWasInitialized) {
|
|
100
|
+
if (!this.#initialDomain && isContinuous(scale.type)) {
|
|
101
|
+
const domain = scale.domain();
|
|
102
|
+
if (span(domain) > 0) {
|
|
103
|
+
this.#initialDomain = domain;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (!domainWasInitialized) {
|
|
108
|
+
this.#initialDomain = scale.domain();
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* @param {Set<ScaleResolutionMember>} members
|
|
118
|
+
* @param {(interval: ScalarDomain | ComplexDomain) => number[]} fromComplexInterval
|
|
119
|
+
* @returns {DomainArray | undefined}
|
|
120
|
+
*/
|
|
121
|
+
function resolveConfiguredDomain(members, fromComplexInterval) {
|
|
122
|
+
const domains = Array.from(members)
|
|
123
|
+
.map((member) => member.channelDef)
|
|
124
|
+
.filter((channelDef) => channelDef.scale?.domain)
|
|
125
|
+
.map((channelDef) =>
|
|
126
|
+
// TODO: Handle ExprRefs and Param in domain
|
|
127
|
+
createDomain(
|
|
128
|
+
channelDef.type,
|
|
129
|
+
// Chrom/pos must be linearized first
|
|
130
|
+
fromComplexInterval(channelDef.scale.domain)
|
|
131
|
+
)
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
if (domains.length > 0) {
|
|
135
|
+
return domains.reduce((acc, curr) => acc.extendAll(curr));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* @param {Set<ScaleResolutionMember>} members
|
|
141
|
+
* @param {() => import("../spec/channel.js").Type} getType
|
|
142
|
+
* @returns {DomainArray}
|
|
143
|
+
*/
|
|
144
|
+
function resolveDataDomain(members, getType) {
|
|
145
|
+
return Array.from(members)
|
|
146
|
+
.map((member) => member.dataDomainSource?.(member.channel, getType()))
|
|
147
|
+
.filter((domain) => !!domain)
|
|
148
|
+
.reduce((acc, curr) => acc.extendAll(curr));
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* @param {import("../spec/channel.js").Type} type
|
|
153
|
+
* @param {() => number[]} getLocusExtent
|
|
154
|
+
* @param {DomainArray | undefined} dataDomain
|
|
155
|
+
* @returns {any[]}
|
|
156
|
+
*/
|
|
157
|
+
function resolveDefaultDomain(type, getLocusExtent, dataDomain) {
|
|
158
|
+
if (type == LOCUS) {
|
|
159
|
+
return getLocusExtent();
|
|
160
|
+
}
|
|
161
|
+
return dataDomain ?? [];
|
|
162
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaleDomainAggregator.test.d.ts","sourceRoot":"","sources":["../../../src/scales/scaleDomainAggregator.test.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export default class ScaleInstanceManager {
|
|
2
|
+
/**
|
|
3
|
+
* @param {object} options
|
|
4
|
+
* @param {() => import("../view/paramMediator.js").default} options.getParamMediator
|
|
5
|
+
* @param {() => void} options.onRangeChange
|
|
6
|
+
* @param {() => void} [options.onDomainChange]
|
|
7
|
+
* @param {() => import("../genome/genomeStore.js").default | undefined} [options.getGenomeStore]
|
|
8
|
+
*/
|
|
9
|
+
constructor({ getParamMediator, onRangeChange, onDomainChange, getGenomeStore, }: {
|
|
10
|
+
getParamMediator: () => import("../view/paramMediator.js").default;
|
|
11
|
+
onRangeChange: () => void;
|
|
12
|
+
onDomainChange?: () => void;
|
|
13
|
+
getGenomeStore?: () => import("../genome/genomeStore.js").default | undefined;
|
|
14
|
+
});
|
|
15
|
+
get scale(): import("../types/encoder.js").VegaScale & {
|
|
16
|
+
props: import("../spec/scale.js").Scale;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* @returns {import("../genome/genome.js").default}
|
|
20
|
+
*/
|
|
21
|
+
getLocusGenome(): import("../genome/genome.js").default;
|
|
22
|
+
/**
|
|
23
|
+
* @param {import("../spec/scale.js").Scale} props
|
|
24
|
+
* @returns {ScaleWithProps}
|
|
25
|
+
*/
|
|
26
|
+
createScale(props: import("../spec/scale.js").Scale): import("../types/encoder.js").VegaScale & {
|
|
27
|
+
props: import("../spec/scale.js").Scale;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* @param {import("../spec/scale.js").Scale} props
|
|
31
|
+
*/
|
|
32
|
+
reconfigureScale(props: import("../spec/scale.js").Scale): void;
|
|
33
|
+
/**
|
|
34
|
+
* @param {() => void} callback
|
|
35
|
+
* @returns {void}
|
|
36
|
+
*/
|
|
37
|
+
withDomainNotificationsSuppressed(callback: () => void): void;
|
|
38
|
+
#private;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=scaleInstanceManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaleInstanceManager.d.ts","sourceRoot":"","sources":["../../../src/scales/scaleInstanceManager.js"],"names":[],"mappings":"AAMA;IA0BI;;;;;;OAMG;IACH,kFALG;QAAkE,gBAAgB,EAA1E,MAAM,OAAO,0BAA0B,EAAE,OAAO;QAC5B,aAAa,EAAjC,MAAM,IAAI;QACW,cAAc,GAAnC,MAAM,IAAI;QAC6D,cAAc,GAArF,MAAM,OAAO,0BAA0B,EAAE,OAAO,GAAG,SAAS;KAA0B,EAYhG;IAED;eA1CkC,OAAO,kBAAkB,EAAE,KAAK;MA4CjE;IAED;;OAEG;IACH,kBAFa,OAAO,qBAAqB,EAAE,OAAO,CASjD;IAED;;;OAGG;IACH,mBAHW,OAAO,kBAAkB,EAAE,KAAK;eA3DT,OAAO,kBAAkB,EAAE,KAAK;MAgFjE;IAoBD;;OAEG;IACH,wBAFW,OAAO,kBAAkB,EAAE,KAAK,QAc1C;IAED;;;OAGG;IACH,4CAHW,MAAM,IAAI,GACR,IAAI,CAShB;;CA6EJ"}
|