@genome-spy/core 0.65.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/browser-BRemItdO.js +138 -0
- package/dist/bundle/{index-CD7FLu9x.js → index-BatuyGAI.js} +23 -21
- package/dist/bundle/{index-C0llXMqm.js → index-ByuE8dvu.js} +140 -88
- package/dist/bundle/index-Cq3QFUxX.js +1781 -0
- package/dist/bundle/index-D28m8tSW.js +1607 -0
- package/dist/bundle/index-DbJ0oeYM.js +631 -0
- package/dist/bundle/index.es.js +17587 -16593
- package/dist/bundle/index.js +214 -212
- package/dist/bundle/{inflate-DRgHi_KK.js → inflate-GtwLkvSP.js} +222 -224
- package/dist/bundle/unzip-NywezaRR.js +1492 -0
- package/dist/schema.json +13 -3
- 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/flowInit.js +2 -2
- package/dist/src/data/sources/lazy/axisTickSource.js +1 -1
- 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/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 +16 -71
- package/dist/src/genomeSpy.d.ts.map +1 -1
- package/dist/src/genomeSpy.js +179 -745
- 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.map +1 -1
- package/dist/src/marks/mark.js +4 -2
- package/dist/src/{view → scales}/axisResolution.d.ts +9 -16
- package/dist/src/scales/axisResolution.d.ts.map +1 -0
- package/dist/src/{view → scales}/axisResolution.js +29 -18
- 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 +52 -35
- 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/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/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 -15
- 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 +106 -48
- 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/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/testUtils.d.ts.map +1 -1
- package/dist/src/view/testUtils.js +2 -1
- package/dist/src/view/unitView.d.ts.map +1 -1
- package/dist/src/view/unitView.js +24 -34
- package/dist/src/view/view.d.ts +6 -6
- package/dist/src/view/view.d.ts.map +1 -1
- package/dist/src/view/view.js +4 -4
- package/package.json +2 -2
- package/dist/bundle/browser-txUcLy2H.js +0 -123
- package/dist/bundle/index-BQpbYrv4.js +0 -1712
- package/dist/bundle/index-BhtHKLUo.js +0 -73
- package/dist/bundle/index-CCe8rnZz.js +0 -716
- package/dist/bundle/index-DhcU-Gk-.js +0 -1487
- package/dist/src/data/collector.test.js +0 -138
- package/dist/src/data/dataFlow.test.js +0 -38
- package/dist/src/data/flow.test.js +0 -81
- package/dist/src/data/flowInit.test.js +0 -413
- package/dist/src/data/flowNode.test.js +0 -50
- package/dist/src/data/flowOptimizer.test.js +0 -209
- 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/gridView/selectionRect.test.js +0 -87
- 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 -282
- package/dist/src/view/scaleResolution.d.ts.map +0 -1
- package/dist/src/view/scaleResolution.js +0 -1059
- 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/viewDispose.test.js +0 -110
- package/dist/src/view/viewFactory.test.js +0 -25
- package/dist/src/view/viewUtils.test.js +0 -87
- /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) {
|
|
@@ -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;IAuBpB;;OAEG;IACH,sBAFW,OAAO,qBAAqB,EAAE,OAAO,EA4G/C;IAzGG,gDAAwB;IAExB,8EAA8E;IAC9E,UADW,OAAO,CAAC,MAAM,uCAAU,OAAO,qBAAqB,EAAE,OAAO,CAAC,CAAC,CACjD;IAIzB;;;OAGG;IACH,sBAHU,OAAO,SAAS,EAAE,UAAU,GAAG;QAAE,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAE,CAG5C;IAE3B;;;;;;;OAOG;IACH,2BAHU,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAGG;IAEhC;;;OAGG;IACH,uBAHU,OAAO,SAAS,EAAE,WAAW,CAGX;IAE5B;;;OAGG;IACH,2BAHU,OAAO,SAAS,EAAE,eAAe,CAGX;IAEhC;;;OAGG;IACH,2BAHU,OAAO,SAAS,EAAE,gBAAgB,CAGZ;IAEhC;;;;;OAKG;IACH,2BAHU,OAAO,SAAS,EAAE,gBAAgB,CAGZ;IAEhC;;;;;OAKG;IACH,uCAA+B;IAE/B;;;;;OAKG;IACH,4BAA6B;IAE7B,kFAAkF;IAClF,UADW,QAAQ,CAAC,GAAG,CAAC,CACM;IAG9B,qBAqBE;IAEF;;;;;;OAMG;IACH,qBAHU,CAAC,CAQV;IAGL;;;OAGG;IACH,0CAHW,OAAO,CAAC,CAAC,CAAC,QAQpB;IAED,sBAEC;IAED;;;OAGG;IACH,0BAFa,WAAW,CAIvB;IAED;;;;;OAKG;IACH,2BAHa,OAAO,oBAAoB,EAAE,OAAO,EAAE,CAMlD;IAED;;OAEG;IACH,wBAFa,sCAAS,CAarB;IAED;;OAEG;IACH,4DAcC;IAED;;;;;OAKG;IACH,oGAEC;IAED;;;;;;OAMG;IACH,oDAHW,CAAC,MAAM,CAAC,CAAC,EAAE,QAqCrB;IAED;;;;OAIG;IACH,sDAiDC;IAED,wDAEC;IAED,uDAEC;IAED,uBAEC;IAED;;;OAGG;IACH,2BAEC;IAED;;OAEG;IACH,oCAEC;IAED;;OAEG;IACH,2BAEC;IAED,sEAeC;IAED;;;;;;OAMG;IAEH,6CANW,MAAM,kBACN,MAAM,iBACN,MAAM,EAAE,
|
|
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
|
@@ -602,7 +602,9 @@ export default class Mark {
|
|
|
602
602
|
|
|
603
603
|
// TODO: High precision scales
|
|
604
604
|
const { attributeType } = getAttributeAndArrayTypes(
|
|
605
|
-
this.unitView
|
|
605
|
+
this.unitView
|
|
606
|
+
.getScaleResolution(channel)
|
|
607
|
+
.getScale(),
|
|
606
608
|
channel
|
|
607
609
|
);
|
|
608
610
|
|
|
@@ -1353,7 +1355,7 @@ export default class Mark {
|
|
|
1353
1355
|
/** @type {function(import("../gl/dataToVertices.js").RangeEntry):void} rangeEntry */
|
|
1354
1356
|
let drawWithRangeEntry;
|
|
1355
1357
|
|
|
1356
|
-
const scale = this.unitView.getScaleResolution("x")?.
|
|
1358
|
+
const scale = this.unitView.getScaleResolution("x")?.getScale();
|
|
1357
1359
|
const continuous = scale && isContinuous(scale.type);
|
|
1358
1360
|
const domainStartOffset = ["index", "locus"].includes(scale?.type)
|
|
1359
1361
|
? -1
|
|
@@ -2,40 +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
|
-
members: AxisResolutionMember[];
|
|
21
|
-
get scaleResolution(): import("./scaleResolution.js").default;
|
|
15
|
+
get scaleResolution(): any;
|
|
22
16
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* @param {AxisResolutionMember} newMember
|
|
17
|
+
* @param {AxisResolutionMember} member
|
|
18
|
+
* @returns {() => boolean}
|
|
27
19
|
*/
|
|
28
|
-
|
|
20
|
+
registerMember(member: AxisResolutionMember): () => boolean;
|
|
29
21
|
/**
|
|
30
|
-
* @param {
|
|
22
|
+
* @param {AxisResolutionMember} member
|
|
31
23
|
* @returns {boolean}
|
|
32
24
|
*/
|
|
33
|
-
|
|
25
|
+
removeMember(member: AxisResolutionMember): boolean;
|
|
34
26
|
getAxisProps(): import("../spec/axis.js").GenomeAxis;
|
|
35
27
|
getTitle(): string;
|
|
28
|
+
#private;
|
|
36
29
|
}
|
|
37
30
|
export type AxisResolutionMember<T extends import("../spec/channel.js").PositionalChannel = import("../spec/channel.js").PositionalChannel> = {
|
|
38
|
-
view: import("
|
|
31
|
+
view: import("../view/unitView.js").default;
|
|
39
32
|
channel: T;
|
|
40
33
|
channelDef: import("../spec/channel.js").ChannelDefWithScale;
|
|
41
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,7 +7,6 @@ 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";
|
|
@@ -17,27 +16,29 @@ import { getCachedOrCall, invalidate } from "../utils/propertyCacher.js";
|
|
|
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,33 +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);
|
|
71
72
|
invalidate(this, "axisProps");
|
|
72
73
|
}
|
|
73
74
|
|
|
74
75
|
/**
|
|
75
|
-
* @param {
|
|
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
|
|
76
89
|
* @returns {boolean}
|
|
77
90
|
*/
|
|
78
|
-
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
if (this.members.length !== before) {
|
|
91
|
+
removeMember(member) {
|
|
92
|
+
const removed = this.#members.delete(member);
|
|
93
|
+
if (removed) {
|
|
82
94
|
invalidate(this, "axisProps");
|
|
83
|
-
return true;
|
|
84
95
|
}
|
|
85
|
-
return
|
|
96
|
+
return removed;
|
|
86
97
|
}
|
|
87
98
|
|
|
88
99
|
getAxisProps() {
|
|
89
100
|
return getCachedOrCall(this, "axisProps", () => {
|
|
90
|
-
const propArray = this
|
|
101
|
+
const propArray = Array.from(this.#members).map((member) => {
|
|
91
102
|
const channelDef = member.view.mark.encoding[member.channel];
|
|
92
103
|
return "axis" in channelDef && channelDef.axis;
|
|
93
104
|
});
|
|
@@ -138,7 +149,7 @@ export default class AxisResolution {
|
|
|
138
149
|
};
|
|
139
150
|
};
|
|
140
151
|
|
|
141
|
-
const titles = this
|
|
152
|
+
const titles = Array.from(this.#members).map(computeTitle);
|
|
142
153
|
|
|
143
154
|
// Skip implicit secondary channel titles if the primary channel has an explicit title
|
|
144
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"}
|