@genome-spy/core 0.74.0 → 0.76.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle/{esm-CgfVIRJ-.js → esm-BimDEpBb.js} +1 -1
- package/dist/bundle/{esm-DtE8VqAv.js → esm-Bvlm1uVk.js} +1 -1
- package/dist/bundle/{esm-sIoQYZ21.js → esm-CngqBe45.js} +17 -17
- package/dist/bundle/{esm-DQiq2Zhd.js → esm-D_euN86T.js} +43 -43
- package/dist/bundle/index.es.js +6064 -5756
- package/dist/bundle/index.js +104 -103
- package/dist/schema.json +572 -12
- package/dist/src/config/defaults/markDefaults.d.ts.map +1 -1
- package/dist/src/config/defaults/markDefaults.js +1 -12
- package/dist/src/config/defaults/scaleDefaults.d.ts.map +1 -1
- package/dist/src/config/defaults/scaleDefaults.js +1 -0
- package/dist/src/config/markConfig.d.ts.map +1 -1
- package/dist/src/config/markConfig.js +16 -8
- package/dist/src/config/themes.d.ts.map +1 -1
- package/dist/src/config/themes.js +15 -2
- package/dist/src/data/sources/dataUtils.d.ts +25 -0
- package/dist/src/data/sources/dataUtils.d.ts.map +1 -1
- package/dist/src/data/sources/dataUtils.js +23 -0
- package/dist/src/data/sources/inlineSource.js +2 -2
- package/dist/src/data/sources/lazy/registerBuiltInLazySources.js +2 -2
- package/dist/src/data/sources/lazy/registerCoreLazySources.d.ts +2 -0
- package/dist/src/data/sources/lazy/registerCoreLazySources.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/registerCoreLazySources.js +2 -0
- package/dist/src/data/sources/lazy/tabixSource.d.ts +7 -0
- package/dist/src/data/sources/lazy/tabixSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/tabixSource.js +18 -0
- package/dist/src/data/sources/lazy/tabixTsvSource.d.ts +37 -0
- package/dist/src/data/sources/lazy/tabixTsvSource.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/tabixTsvSource.js +163 -0
- package/dist/src/data/sources/urlSource.d.ts.map +1 -1
- package/dist/src/data/sources/urlSource.js +8 -3
- package/dist/src/encoder/encoder.d.ts +2 -2
- package/dist/src/encoder/encoder.d.ts.map +1 -1
- package/dist/src/genome/scaleLocus.d.ts.map +1 -1
- package/dist/src/genome/scaleLocus.js +8 -3
- package/dist/src/genomeSpy/interactionController.d.ts.map +1 -1
- package/dist/src/genomeSpy/interactionController.js +91 -51
- package/dist/src/genomeSpyBase.d.ts.map +1 -1
- package/dist/src/genomeSpyBase.js +4 -1
- package/dist/src/gl/dataToVertices.d.ts +12 -14
- package/dist/src/gl/dataToVertices.d.ts.map +1 -1
- package/dist/src/gl/dataToVertices.js +116 -95
- package/dist/src/gl/glslScaleGenerator.d.ts +3 -0
- package/dist/src/gl/glslScaleGenerator.d.ts.map +1 -1
- package/dist/src/gl/glslScaleGenerator.js +10 -8
- package/dist/src/gl/vertexRangeIndex.d.ts +23 -0
- package/dist/src/gl/vertexRangeIndex.d.ts.map +1 -0
- package/dist/src/gl/vertexRangeIndex.js +150 -0
- package/dist/src/gl/webGLHelper.d.ts +5 -2
- package/dist/src/gl/webGLHelper.d.ts.map +1 -1
- package/dist/src/gl/webGLHelper.js +20 -3
- package/dist/src/marks/__snapshots__/shaderSnapshot.test.js.snap +1082 -0
- package/dist/src/marks/link.vertex.glsl.js +1 -1
- package/dist/src/marks/mark.d.ts +1 -1
- package/dist/src/minimal.d.ts.map +1 -1
- package/dist/src/minimal.js +5 -4
- package/dist/src/paramRuntime/expressionCompiler.d.ts +2 -1
- package/dist/src/paramRuntime/expressionCompiler.d.ts.map +1 -1
- package/dist/src/paramRuntime/expressionCompiler.js +3 -2
- package/dist/src/paramRuntime/expressionRef.d.ts +4 -1
- package/dist/src/paramRuntime/expressionRef.d.ts.map +1 -1
- package/dist/src/paramRuntime/expressionRef.js +10 -3
- package/dist/src/paramRuntime/graphRuntime.d.ts.map +1 -1
- package/dist/src/paramRuntime/graphRuntime.js +15 -6
- package/dist/src/paramRuntime/paramRuntime.d.ts +8 -2
- package/dist/src/paramRuntime/paramRuntime.d.ts.map +1 -1
- package/dist/src/paramRuntime/paramRuntime.js +10 -5
- package/dist/src/paramRuntime/types.d.ts +1 -0
- package/dist/src/paramRuntime/types.d.ts.map +1 -1
- package/dist/src/paramRuntime/types.js +1 -0
- package/dist/src/paramRuntime/viewParamRuntime.d.ts +5 -4
- package/dist/src/paramRuntime/viewParamRuntime.d.ts.map +1 -1
- package/dist/src/paramRuntime/viewParamRuntime.js +17 -6
- package/dist/src/scale/scale.d.ts.map +1 -1
- package/dist/src/scale/scale.js +11 -2
- package/dist/src/scales/domainPlanner.d.ts +57 -11
- package/dist/src/scales/domainPlanner.d.ts.map +1 -1
- package/dist/src/scales/domainPlanner.js +183 -84
- package/dist/src/scales/scaleInstanceManager.d.ts.map +1 -1
- package/dist/src/scales/scaleInstanceManager.js +7 -2
- package/dist/src/scales/scalePropsResolver.d.ts +3 -3
- package/dist/src/scales/scalePropsResolver.d.ts.map +1 -1
- package/dist/src/scales/scalePropsResolver.js +28 -5
- package/dist/src/scales/scaleResolution.d.ts +12 -1
- package/dist/src/scales/scaleResolution.d.ts.map +1 -1
- package/dist/src/scales/scaleResolution.js +180 -21
- package/dist/src/scales/selectionDomainUtils.d.ts +10 -0
- package/dist/src/scales/selectionDomainUtils.d.ts.map +1 -1
- package/dist/src/scales/selectionDomainUtils.js +32 -3
- package/dist/src/screenshotExport.d.ts +23 -0
- package/dist/src/screenshotExport.d.ts.map +1 -0
- package/dist/src/screenshotExport.js +44 -0
- package/dist/src/screenshotHarness.d.ts.map +1 -1
- package/dist/src/screenshotHarness.js +26 -24
- package/dist/src/spec/axis.d.ts +2 -2
- package/dist/src/spec/channel.d.ts +34 -4
- package/dist/src/spec/data.d.ts +52 -0
- package/dist/src/spec/parameter.d.ts +6 -0
- package/dist/src/spec/scale.d.ts +13 -1
- package/dist/src/spec/transform.d.ts +6 -0
- package/dist/src/utils/expression.d.ts +16 -8
- package/dist/src/utils/expression.d.ts.map +1 -1
- package/dist/src/utils/expression.js +291 -11
- package/dist/src/view/axisGridView.d.ts.map +1 -1
- package/dist/src/view/axisGridView.js +2 -1
- package/dist/src/view/axisView.d.ts.map +1 -1
- package/dist/src/view/axisView.js +2 -1
- package/dist/src/view/facetView.d.ts.map +1 -1
- package/dist/src/view/facetView.js +2 -1
- package/dist/src/view/flowBuilder.d.ts +1 -1
- package/dist/src/view/flowBuilder.d.ts.map +1 -1
- package/dist/src/view/flowBuilder.js +11 -7
- package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
- package/dist/src/view/gridView/gridChild.js +9 -1
- package/dist/src/view/gridView/gridView.d.ts.map +1 -1
- package/dist/src/view/gridView/gridView.js +198 -32
- package/dist/src/view/gridView/scrollbar.d.ts.map +1 -1
- package/dist/src/view/gridView/scrollbar.js +5 -1
- package/dist/src/view/gridView/selectionRect.d.ts.map +1 -1
- package/dist/src/view/gridView/selectionRect.js +5 -1
- package/dist/src/view/gridView/separatorView.d.ts.map +1 -1
- package/dist/src/view/gridView/separatorView.js +5 -1
- package/dist/src/view/resolutionPlanner.d.ts +9 -0
- package/dist/src/view/resolutionPlanner.d.ts.map +1 -0
- package/dist/src/view/resolutionPlanner.js +302 -0
- package/dist/src/view/testUtils.d.ts +30 -3
- package/dist/src/view/testUtils.d.ts.map +1 -1
- package/dist/src/view/testUtils.js +51 -2
- 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 +5 -152
- package/dist/src/view/view.d.ts.map +1 -1
- package/dist/src/view/view.js +2 -1
- package/dist/src/view/viewSelectors.d.ts +38 -10
- package/dist/src/view/viewSelectors.d.ts.map +1 -1
- package/dist/src/view/viewSelectors.js +67 -2
- package/dist/src/view/viewUtilTypes.d.ts +15 -0
- package/dist/src/view/viewUtils.d.ts.map +1 -1
- package/dist/src/view/viewUtils.js +10 -0
- package/package.json +2 -2
- package/LICENSE +0 -21
- /package/dist/bundle/{esm-BDFRLEuD.js → esm-C49STiCR.js} +0 -0
- /package/dist/bundle/{esm-CGX-qz1d.js → esm-CuVa5T98.js} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const shader = "flat out vec4 vColor;flat out float vSize;out float vNormalLengthInPixels;flat out float vGamma;const int SHAPE_ARC=0;const int SHAPE_DOME=1;const int SHAPE_DIAGONAL=2;const int SHAPE_LINE=3;const int ORIENT_VERTICAL=0;const int ORIENT_HORIZONTAL=1;float distanceFromLine(vec2 pointOnLine1,vec2 pointOnLine2,vec2 point){vec2 a=point-pointOnLine1;vec2 b=pointOnLine2-pointOnLine1;vec2 proj=dot(a,b)/dot(b,b)*b;return length(a-proj);}bool isInsideViewport(vec2 point,float marginFactor){vec2 margin=uViewportSize*vec2(marginFactor);return point.x>=-margin.x&&point.x<=uViewportSize.x+margin.x&&point.y>=-margin.y&&point.y<=uViewportSize.y+margin.y;}void main(void){float pixelSize=1.0/uDevicePixelRatio;float opacity=getScaled_opacity()*uViewOpacity;vec2 p1,p2,p3,p4;vec2 a=applySampleFacet(vec2(getScaled_x(),getScaled_y()))*uViewportSize;vec2 b=applySampleFacet(vec2(getScaled_x2(),getScaled_y2()))*uViewportSize;if(uShape<=SHAPE_DOME){if(uShape==SHAPE_DOME){vec2 height=vec2(0.0);if(uOrient==ORIENT_VERTICAL){p1=vec2(min(a.x,b.x),b.y);p4=vec2(max(a.x,b.x),b.y);height=vec2(0.0,a.y-b.y);
|
|
1
|
+
const shader = "flat out vec4 vColor;flat out float vSize;out float vNormalLengthInPixels;flat out float vGamma;const int SHAPE_ARC=0;const int SHAPE_DOME=1;const int SHAPE_DIAGONAL=2;const int SHAPE_LINE=3;const int ORIENT_VERTICAL=0;const int ORIENT_HORIZONTAL=1;float distanceFromLine(vec2 pointOnLine1,vec2 pointOnLine2,vec2 point){vec2 a=point-pointOnLine1;vec2 b=pointOnLine2-pointOnLine1;vec2 proj=dot(a,b)/dot(b,b)*b;return length(a-proj);}bool isInsideViewport(vec2 point,float marginFactor){vec2 margin=uViewportSize*vec2(marginFactor);return point.x>=-margin.x&&point.x<=uViewportSize.x+margin.x&&point.y>=-margin.y&&point.y<=uViewportSize.y+margin.y;}float inverseSmoothstep(float t){t=clamp(t,0.0,1.0);return 0.5-sin(asin(1.0-2.0*t)/3.0);}/***Remaps the parameter t to concentrate vertices to the part that is visible in the viewport.*This keeps the tightly bent endpoints smooth even when zooming in very close.*/float remapVisibleChordParameter(float stripT,float chordStart,float chordEnd,float viewportLength){float chordMin=min(chordStart,chordEnd);float chordMax=max(chordStart,chordEnd);float chordSpan=chordMax-chordMin;if(chordSpan<=0.0){return 0.0;}float visibleChordMin=max(chordMin,0.0);float visibleChordMax=min(chordMax,viewportLength);if(visibleChordMax<=visibleChordMin){return stripT;}float visibleTMin=inverseSmoothstep((visibleChordMin-chordMin)/chordSpan);float visibleTMax=inverseSmoothstep((visibleChordMax-chordMin)/chordSpan);float visibleTSpan=visibleTMax-visibleTMin;float offscreenTSpan=visibleTMin+(1.0-visibleTMax);if(offscreenTSpan<=0.0){return stripT;}float visibleShare=clamp(0.75+(1.0-visibleTSpan)*0.2,0.75,0.95);float offscreenShare=1.0-visibleShare;float leftShare=offscreenShare*visibleTMin/offscreenTSpan;float rightShare=offscreenShare*(1.0-visibleTMax)/offscreenTSpan;if(stripT<=leftShare){return leftShare>0.0 ? mix(0.0,visibleTMin,stripT/leftShare): visibleTMin;}float visibleStart=leftShare;float visibleEnd=visibleStart+visibleShare;if(stripT<=visibleEnd){return visibleShare>0.0? mix(visibleTMin,visibleTMax,(stripT-visibleStart)/visibleShare): visibleTMin;}return rightShare>0.0? mix(visibleTMax,1.0,(stripT-visibleEnd)/rightShare): visibleTMax;}void clampChordToViewport(inout vec2 p1,inout vec2 p4,inout float chordLength){if(chordLength>uMaxChordLength){vec2 chordVector=p4-p1;vec2 unitChordVector=normalize(chordVector);if(isInsideViewport(p1,2.0)){chordLength=uMaxChordLength;p4=p1+unitChordVector*uMaxChordLength;}else if(isInsideViewport(p4,2.0)){chordLength=uMaxChordLength;p1=p4-unitChordVector*uMaxChordLength;}}}void clampDomeApex(inout vec2 p1,inout vec2 p4,int orient){if(orient==ORIENT_VERTICAL){if(p4.x>0.0){p1.x=max(p1.x,-p4.x);}if(p1.x<uViewportSize.x){p4.x=min(p4.x,2.0*uViewportSize.x-p1.x);}}else{if(p4.y>0.0){p1.y=max(p1.y,-p4.y);}if(p1.y<uViewportSize.y){p4.y=min(p4.y,2.0*uViewportSize.y-p1.y);}}}void main(void){float pixelSize=1.0/uDevicePixelRatio;float opacity=getScaled_opacity()*uViewOpacity;vec2 p1,p2,p3,p4;vec2 a=applySampleFacet(vec2(getScaled_x(),getScaled_y()))*uViewportSize;vec2 b=applySampleFacet(vec2(getScaled_x2(),getScaled_y2()))*uViewportSize;if(uShape<=SHAPE_DOME){if(uShape==SHAPE_DOME){vec2 height=vec2(0.0);if(uOrient==ORIENT_VERTICAL){p1=vec2(min(a.x,b.x),b.y);p4=vec2(max(a.x,b.x),b.y);height=vec2(0.0,a.y-b.y);float chordLength=length(p4-p1);clampChordToViewport(p1,p4,chordLength);if(uClampApex){clampDomeApex(p1,p4,ORIENT_VERTICAL);}}else{p1=vec2(b.x,min(a.y,b.y));p4=vec2(b.x,max(a.y,b.y));height=vec2(a.x-b.x,0.0);float chordLength=length(p4-p1);clampChordToViewport(p1,p4,chordLength);if(uClampApex){clampDomeApex(p1,p4,ORIENT_HORIZONTAL);}}vec2 controlOffset=height/0.75;p2=p1+controlOffset;p3=p4+controlOffset;}if(uShape==SHAPE_ARC){p1=a;p4=b;vec2 chordVector=p4-p1;vec2 unitChordVector=normalize(chordVector);vec2 chordNormal=vec2(-unitChordVector.y,unitChordVector.x);float chordLength=length(chordVector);clampChordToViewport(p1,p4,chordLength);float height=max(chordLength/2.0*uArcHeightFactor,uMinArcHeight);vec2 controlOffset=chordNormal*height/0.75;p2=p1+controlOffset;p3=p4+controlOffset;}}else if(uShape==SHAPE_DIAGONAL){if(uOrient==ORIENT_VERTICAL){p1=a;p2=vec2(a.x,(a.y+b.y)/2.0);p3=vec2(b.x,(a.y+b.y)/2.0);p4=b;}else{p1=a;p2=vec2((a.x+b.x)/2.0,a.y);p3=vec2((a.x+b.x)/2.0,b.y);p4=b;}}else if(uShape==SHAPE_LINE){p1=a;p2=(a+b)/2.0;p3=p2;p4=b;}vec2 strip=vec2(float(gl_VertexID/2)/float(uSegmentBreaks),float(gl_VertexID % 2)-0.5);float t=strip.x;if(uShape==SHAPE_DOME){if(uOrient==ORIENT_VERTICAL){t=remapVisibleChordParameter(strip.x,p1.x,p4.x,uViewportSize.x);}else{t=remapVisibleChordParameter(strip.x,p1.y,p4.y,uViewportSize.y);}}else if(uShape==SHAPE_ARC){if(a.y==b.y){t=remapVisibleChordParameter(strip.x,p1.x,p4.x,uViewportSize.x);}else if(a.x==b.x){t=remapVisibleChordParameter(strip.x,p1.y,p4.y,uViewportSize.y);}}vec2 p;vec2 tangent;vec2 q1=mix(p1,p2,t);vec2 q2=mix(p2,p3,t);vec2 q3=mix(p3,p4,t);vec2 r1=mix(q1,q2,t);vec2 r2=mix(q2,q3,t);p=mix(r1,r2,t);tangent=3.0*(r2-r1);tangent=normalize(tangent);vec2 normal=vec2(-tangent.y,tangent.x);float size=getScaled_size();if(size<pixelSize){opacity*=size/pixelSize;size=pixelSize;}float paddedSize=uPickingEnabled? max(size,uMinPickingSize): size+pixelSize;vNormalLengthInPixels=strip.y*paddedSize;if(uShape==SHAPE_ARC&&uArcFadingDistance[0]>0.0&&uArcFadingDistance[1]>0.0&&(!uNoFadingOnPointSelection||!isPointSelected())){float d=distanceFromLine(p1,p4,p);float distanceOpacity=smoothstep(uArcFadingDistance[1],uArcFadingDistance[0],d);opacity*=distanceOpacity;if(distanceOpacity<=0.0){vNormalLengthInPixels=0.0;}}p+=normal*vNormalLengthInPixels;gl_Position=pixelsToNdc(p);vec3 color=getScaled_color();vColor=vec4(color*opacity,opacity);vGamma=getGammaForColor(color);vSize=paddedSize;setupPicking();}";
|
|
2
2
|
export default shader;
|
package/dist/src/marks/mark.d.ts
CHANGED
|
@@ -144,7 +144,7 @@ export default class Mark<P extends import("../spec/mark.js").MarkProps = import
|
|
|
144
144
|
*/
|
|
145
145
|
get encoding(): import("../spec/channel.js").Encoding;
|
|
146
146
|
getContext(): import("../types/viewContext.js").default;
|
|
147
|
-
getType(): "
|
|
147
|
+
getType(): "text" | "point" | "link" | "rect" | "rule" | "tick";
|
|
148
148
|
initializeData(): void;
|
|
149
149
|
/**
|
|
150
150
|
* Initialize encoders that encode fields of the data (or constants) to
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"minimal.d.ts","sourceRoot":"","sources":["../../src/minimal.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"minimal.d.ts","sourceRoot":"","sources":["../../src/minimal.js"],"names":[],"mappings":"AAmBA,6MAA4C;sBARtB,oBAAoB;qBAJrB,KAAK;iBAKT,kBAAkB;oBACf,6BAA6B;yBACX,mBAAmB"}
|
package/dist/src/minimal.js
CHANGED
|
@@ -2,17 +2,18 @@
|
|
|
2
2
|
* Lean GenomeSpy core entry point.
|
|
3
3
|
*
|
|
4
4
|
* Use this entry when you want the `embed` API without the default built-in
|
|
5
|
-
* eager and lazy format registrations.
|
|
6
|
-
*
|
|
5
|
+
* optional eager and lazy format registrations. Core axis lazy sources remain
|
|
6
|
+
* available.
|
|
7
7
|
*/
|
|
8
8
|
import { html } from "lit";
|
|
9
9
|
|
|
10
|
-
// Lean core entry point: shares the embed API, but skips
|
|
11
|
-
//
|
|
10
|
+
// Lean core entry point: shares the embed API, but skips optional eager and
|
|
11
|
+
// lazy format registrations.
|
|
12
12
|
import GenomeSpy from "./genomeSpyBase.js";
|
|
13
13
|
import icon from "./img/bowtie.svg";
|
|
14
14
|
import favIcon from "./img/genomespy-favicon.svg";
|
|
15
15
|
import { createEmbed, loadSpec } from "./embedFactory.js";
|
|
16
|
+
import "./data/sources/lazy/registerCoreLazySources.js";
|
|
16
17
|
|
|
17
18
|
export { GenomeSpy, html, icon, favIcon };
|
|
18
19
|
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @param {string} expr
|
|
3
3
|
* @param {Record<string, any>} [globalObject]
|
|
4
|
+
* @param {object} [context]
|
|
4
5
|
* @returns {import("../utils/expression.js").ExpressionFunction}
|
|
5
6
|
*/
|
|
6
|
-
export function compileExpression(expr: string, globalObject?: Record<string, any
|
|
7
|
+
export function compileExpression(expr: string, globalObject?: Record<string, any>, context?: object): import("../utils/expression.js").ExpressionFunction;
|
|
7
8
|
//# sourceMappingURL=expressionCompiler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expressionCompiler.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/expressionCompiler.js"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"expressionCompiler.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/expressionCompiler.js"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wCALW,MAAM,iBACN,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,YACnB,MAAM,GACJ,OAAO,wBAAwB,EAAE,kBAAkB,CAI/D"}
|
|
@@ -3,8 +3,9 @@ import createFunction from "../utils/expression.js";
|
|
|
3
3
|
/**
|
|
4
4
|
* @param {string} expr
|
|
5
5
|
* @param {Record<string, any>} [globalObject]
|
|
6
|
+
* @param {object} [context]
|
|
6
7
|
* @returns {import("../utils/expression.js").ExpressionFunction}
|
|
7
8
|
*/
|
|
8
|
-
export function compileExpression(expr, globalObject = {}) {
|
|
9
|
-
return createFunction(expr, globalObject);
|
|
9
|
+
export function compileExpression(expr, globalObject = {}, context = {}) {
|
|
10
|
+
return createFunction(expr, globalObject, context);
|
|
10
11
|
}
|
|
@@ -10,9 +10,12 @@
|
|
|
10
10
|
*
|
|
11
11
|
* @param {string} expr
|
|
12
12
|
* @param {(name: string) => import("./types.js").ParamRef<any> | undefined} resolve
|
|
13
|
+
* @param {{ resolveScaleResolution?: (channel: string) => import("../scales/scaleResolution.js").default | undefined }} [options]
|
|
13
14
|
* @returns {BoundExpression}
|
|
14
15
|
*/
|
|
15
|
-
export function bindExpression(expr: string, resolve: (name: string) => import("./types.js").ParamRef<any> | undefined
|
|
16
|
+
export function bindExpression(expr: string, resolve: (name: string) => import("./types.js").ParamRef<any> | undefined, options?: {
|
|
17
|
+
resolveScaleResolution?: (channel: string) => import("../scales/scaleResolution.js").default | undefined;
|
|
18
|
+
}): BoundExpression;
|
|
16
19
|
export type BoundExpression = {
|
|
17
20
|
expression: import("./types.js").ExprRefFunction;
|
|
18
21
|
dependencies: import("./types.js").ParamRef<any>[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expressionRef.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/expressionRef.js"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH
|
|
1
|
+
{"version":3,"file":"expressionRef.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/expressionRef.js"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH;;;;;;;;GAQG;AACH,qCALW,MAAM,WACN,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,SAAS,YAChE;IAAE,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,8BAA8B,EAAE,OAAO,GAAG,SAAS,CAAA;CAAE,GAC1G,eAAe,CAqF3B;8BAlGY;IACR,UAAU,EAAE,OAAO,YAAY,EAAE,eAAe,CAAC;IACjD,YAAY,EAAE,OAAO,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAA;CACnD"}
|
|
@@ -13,14 +13,15 @@ import { compileExpression } from "./expressionCompiler.js";
|
|
|
13
13
|
*
|
|
14
14
|
* @param {string} expr
|
|
15
15
|
* @param {(name: string) => import("./types.js").ParamRef<any> | undefined} resolve
|
|
16
|
+
* @param {{ resolveScaleResolution?: (channel: string) => import("../scales/scaleResolution.js").default | undefined }} [options]
|
|
16
17
|
* @returns {BoundExpression}
|
|
17
18
|
*/
|
|
18
|
-
export function bindExpression(expr, resolve) {
|
|
19
|
+
export function bindExpression(expr, resolve, options = {}) {
|
|
19
20
|
const globalObject = {};
|
|
20
21
|
|
|
21
22
|
/** @type {import("./types.js").ExprRefFunction} */
|
|
22
23
|
const expression = /** @type {any} */ (
|
|
23
|
-
compileExpression(expr, globalObject)
|
|
24
|
+
compileExpression(expr, globalObject, options)
|
|
24
25
|
);
|
|
25
26
|
|
|
26
27
|
/** @type {Map<string, import("./types.js").ParamRef<any>>} */
|
|
@@ -57,6 +58,9 @@ export function bindExpression(expr, resolve) {
|
|
|
57
58
|
for (const ref of refsForParams.values()) {
|
|
58
59
|
disposers.push(ref.subscribe(listener));
|
|
59
60
|
}
|
|
61
|
+
for (const ref of expression.scaleDependencies ?? []) {
|
|
62
|
+
disposers.push(ref.subscribe(listener));
|
|
63
|
+
}
|
|
60
64
|
|
|
61
65
|
let active = true;
|
|
62
66
|
const unsubscribe = () => {
|
|
@@ -86,10 +90,13 @@ export function bindExpression(expr, resolve) {
|
|
|
86
90
|
"|" +
|
|
87
91
|
Array.from(refsForParams.values())
|
|
88
92
|
.map((ref) => ref.id)
|
|
93
|
+
.concat((expression.scaleDependencies ?? []).map((ref) => ref.id))
|
|
89
94
|
.join(",");
|
|
90
95
|
|
|
91
96
|
return {
|
|
92
97
|
expression,
|
|
93
|
-
dependencies: Array.from(refsForParams.values())
|
|
98
|
+
dependencies: Array.from(refsForParams.values()).concat(
|
|
99
|
+
expression.scaleDependencies ?? []
|
|
100
|
+
),
|
|
94
101
|
};
|
|
95
102
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphRuntime.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/graphRuntime.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graphRuntime.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/graphRuntime.js"],"names":[],"mappings":"AA+IA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH;IA6BI;;;;;;;OAOG;IACH,sBAJG;QAA2D,iBAAiB,GAApE,OAAO,wBAAwB,EAAE,OAAO;KAGlD,EAGA;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,eARa,CAAC,WACH,MAAM,QACN,MAAM,QACN,MAAM,GAAG,WAAW,gBACpB,CAAC,YACD;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAClB,OAAO,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAwDpD;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,SAPa,CAAC,WACH,MAAM,QACN,MAAM,QACN,OAAO,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MACpC,MAAM,CAAC,GACL,OAAO,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,CAsD5C;IAED;;;;;;;;;;;;OAYG;IACH,gBALW,MAAM,QACN,OAAO,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MACpC,MAAM,IAAI,GACR,MAAM,IAAI,CAuCtB;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,iBAJa,CAAC,MACH,MAAM,CAAC,GACL,CAAC,CAYb;IAED;;;;;;;;OAQG;IACH,iBA8CC;IAED;;;;;;;;;;OAUG;IACH,yBAJW;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAE1C,OAAO,CAAC,IAAI,CAAC,CAgDzB;;CA2EJ;0BApnBY,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI;8BAEpC;IACR,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;IAC3B,SAAS,EAAE,WAAW,CAAA;CACvB;yBAIS,CAAC,IACD,eAAe,GAAG;IAC1B,KAAK,EAAE,CAAC,CAAC;IACT,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAA;CACb;yBAIS,CAAC,IACD,eAAe,GAAG;IAC1B,KAAK,EAAE,CAAC,CAAC;IACT,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC,CAAA;CACZ;yBAIS;IACR,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,EAAE,EAAE,MAAM,IAAI,CAAA;CACf;AAgEJ;;;GAGG;AACH,6BAHW,OAAO,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,GAChC,eAAe,CAa3B"}
|
|
@@ -121,6 +121,17 @@ function getNode(ref) {
|
|
|
121
121
|
return node;
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
+
/**
|
|
125
|
+
* @param {import("./types.js").ParamRef<any>} dep
|
|
126
|
+
* @returns {number}
|
|
127
|
+
*/
|
|
128
|
+
function getDependencyRank(dep) {
|
|
129
|
+
if (typeof (/** @type {any} */ (dep).rank) === "number") {
|
|
130
|
+
return /** @type {any} */ (dep).rank;
|
|
131
|
+
}
|
|
132
|
+
return getNode(dep).rank;
|
|
133
|
+
}
|
|
134
|
+
|
|
124
135
|
/**
|
|
125
136
|
* @param {Set<() => void>} listeners
|
|
126
137
|
*/
|
|
@@ -291,9 +302,8 @@ export default class GraphRuntime {
|
|
|
291
302
|
* @returns {import("./types.js").ParamRef<T>}
|
|
292
303
|
*/
|
|
293
304
|
computed(ownerId, name, deps, fn) {
|
|
294
|
-
const
|
|
295
|
-
|
|
296
|
-
(previous, node) => Math.max(previous, node.rank),
|
|
305
|
+
const maxRank = deps.reduce(
|
|
306
|
+
(previous, dep) => Math.max(previous, getDependencyRank(dep)),
|
|
297
307
|
0
|
|
298
308
|
);
|
|
299
309
|
|
|
@@ -359,9 +369,8 @@ export default class GraphRuntime {
|
|
|
359
369
|
* @returns {() => void} explicit disposer for manual teardown
|
|
360
370
|
*/
|
|
361
371
|
effect(ownerId, deps, fn) {
|
|
362
|
-
const
|
|
363
|
-
|
|
364
|
-
(previous, node) => Math.max(previous, node.rank),
|
|
372
|
+
const maxRank = deps.reduce(
|
|
373
|
+
(previous, dep) => Math.max(previous, getDependencyRank(dep)),
|
|
365
374
|
0
|
|
366
375
|
);
|
|
367
376
|
|
|
@@ -89,9 +89,12 @@ export default class ParamRuntime {
|
|
|
89
89
|
* @param {ScopeId} scope
|
|
90
90
|
* @param {string} name
|
|
91
91
|
* @param {string} expr
|
|
92
|
+
* @param {{ resolveScaleResolution?: (channel: string) => import("../scales/scaleResolution.js").default | undefined }} [options]
|
|
92
93
|
* @returns {import("./types.js").ParamRef<T>}
|
|
93
94
|
*/
|
|
94
|
-
registerDerived<T>(scope: ScopeId, name: string, expr: string
|
|
95
|
+
registerDerived<T>(scope: ScopeId, name: string, expr: string, options?: {
|
|
96
|
+
resolveScaleResolution?: (channel: string) => import("../scales/scaleResolution.js").default | undefined;
|
|
97
|
+
}): import("./types.js").ParamRef<T>;
|
|
95
98
|
/**
|
|
96
99
|
* Creates an expression function bound to scope-based parameter resolution.
|
|
97
100
|
*
|
|
@@ -101,9 +104,12 @@ export default class ParamRuntime {
|
|
|
101
104
|
*
|
|
102
105
|
* @param {ScopeId} scope
|
|
103
106
|
* @param {string} expr
|
|
107
|
+
* @param {{ resolveScaleResolution?: (channel: string) => import("../scales/scaleResolution.js").default | undefined }} [options]
|
|
104
108
|
* @returns {import("./types.js").ExprRefFunction}
|
|
105
109
|
*/
|
|
106
|
-
createExpression(scope: ScopeId, expr: string
|
|
110
|
+
createExpression(scope: ScopeId, expr: string, options?: {
|
|
111
|
+
resolveScaleResolution?: (channel: string) => import("../scales/scaleResolution.js").default | undefined;
|
|
112
|
+
}): import("./types.js").ExprRefFunction;
|
|
107
113
|
/**
|
|
108
114
|
* Resolves a parameter by name from `scope`, searching parent scopes as needed.
|
|
109
115
|
* Returns the nearest matching binding, if any.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paramRuntime.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/paramRuntime.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;IASI;;;;;;;;OAQG;IACH,0BAHW,OAAO,GACL,OAAO,CAYnB;IAED;;;;;;;;OAQG;IACH,oBAFW,OAAO,QAMjB;IAED;;;;;;;OAOG;IACH,wBAHW,OAAO,YACP,MAAM,IAAI,QAKpB;IAED;;;;;;;;;OASG;IACH,aAPa,CAAC,SACH,OAAO,QACP,MAAM,WACN,CAAC,YACD;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAClB,OAAO,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAYpD;IAED;;;;;;;;;;;;OAYG;IACH,kBAPa,CAAC,SACH,OAAO,QACP,MAAM,WACN,CAAC,YACD;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAClB,OAAO,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAYpD;IAED
|
|
1
|
+
{"version":3,"file":"paramRuntime.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/paramRuntime.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;IASI;;;;;;;;OAQG;IACH,0BAHW,OAAO,GACL,OAAO,CAYnB;IAED;;;;;;;;OAQG;IACH,oBAFW,OAAO,QAMjB;IAED;;;;;;;OAOG;IACH,wBAHW,OAAO,YACP,MAAM,IAAI,QAKpB;IAED;;;;;;;;;OASG;IACH,aAPa,CAAC,SACH,OAAO,QACP,MAAM,WACN,CAAC,YACD;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAClB,OAAO,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAYpD;IAED;;;;;;;;;;;;OAYG;IACH,kBAPa,CAAC,SACH,OAAO,QACP,MAAM,WACN,CAAC,YACD;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAClB,OAAO,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAYpD;IAED;;;;;;;;;;;;OAYG;IACH,gBAPa,CAAC,SACH,OAAO,QACP,MAAM,QACN,MAAM,YACN;QAAE,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,8BAA8B,EAAE,OAAO,GAAG,SAAS,CAAA;KAAE,GAC1G,OAAO,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,CAiB5C;IAED;;;;;;;;;;;OAWG;IACH,wBALW,OAAO,QACP,MAAM,YACN;QAAE,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,8BAA8B,EAAE,OAAO,GAAG,SAAS,CAAA;KAAE,GAC1G,OAAO,YAAY,EAAE,eAAe,CAShD;IAED;;;;;;;;OAQG;IACH,QALa,CAAC,SACH,OAAO,QACP,MAAM,GACJ,OAAO,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAIxD;IAED;;;;;;;;;OASG;IACH,iBAJa,CAAC,MACH,MAAM,CAAC,GACL,CAAC,CAIb;IAED;;OAEG;IACH,iBAEC;IAED;;;;;OAKG;IACH,yBAHW;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAC1C,OAAO,CAAC,IAAI,CAAC,CAIzB;;CACJ;;;;;;;;;;;;;;;;;;;;;sBAzMY,MAAM"}
|
|
@@ -140,12 +140,14 @@ export default class ParamRuntime {
|
|
|
140
140
|
* @param {ScopeId} scope
|
|
141
141
|
* @param {string} name
|
|
142
142
|
* @param {string} expr
|
|
143
|
+
* @param {{ resolveScaleResolution?: (channel: string) => import("../scales/scaleResolution.js").default | undefined }} [options]
|
|
143
144
|
* @returns {import("./types.js").ParamRef<T>}
|
|
144
145
|
*/
|
|
145
|
-
registerDerived(scope, name, expr) {
|
|
146
|
+
registerDerived(scope, name, expr, options) {
|
|
146
147
|
const { expression, dependencies } = bindExpression(
|
|
147
148
|
expr,
|
|
148
|
-
(globalName) => this.resolve(scope, globalName)
|
|
149
|
+
(globalName) => this.resolve(scope, globalName),
|
|
150
|
+
options
|
|
149
151
|
);
|
|
150
152
|
|
|
151
153
|
const ownerId = this.#paramStore.getOwnerId(scope);
|
|
@@ -167,11 +169,14 @@ export default class ParamRuntime {
|
|
|
167
169
|
*
|
|
168
170
|
* @param {ScopeId} scope
|
|
169
171
|
* @param {string} expr
|
|
172
|
+
* @param {{ resolveScaleResolution?: (channel: string) => import("../scales/scaleResolution.js").default | undefined }} [options]
|
|
170
173
|
* @returns {import("./types.js").ExprRefFunction}
|
|
171
174
|
*/
|
|
172
|
-
createExpression(scope, expr) {
|
|
173
|
-
const { expression } = bindExpression(
|
|
174
|
-
|
|
175
|
+
createExpression(scope, expr, options) {
|
|
176
|
+
const { expression } = bindExpression(
|
|
177
|
+
expr,
|
|
178
|
+
(globalName) => this.resolve(scope, globalName),
|
|
179
|
+
options
|
|
175
180
|
);
|
|
176
181
|
return expression;
|
|
177
182
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/types.js"],"names":[],"mappings":"qBACa,CAAC,IACD;IACR,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;IACvC,GAAG,EAAE,MAAM,CAAC,CAAC;IACb,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAA;CAChD;6BAIS,CAAC,IACD,QAAQ,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAA;CAAE;8BAIzC,OAAO,wBAAwB,EAAE,kBAAkB,GAAG;IAC9D,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAChD,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,MAAM,CAAA;CACzB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/types.js"],"names":[],"mappings":"qBACa,CAAC,IACD;IACR,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC,CAAC;IACb,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAA;CAChD;6BAIS,CAAC,IACD,QAAQ,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAA;CAAE;8BAIzC,OAAO,wBAAwB,EAAE,kBAAkB,GAAG;IAC9D,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAChD,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,MAAM,CAAA;CACzB"}
|
|
@@ -10,11 +10,12 @@
|
|
|
10
10
|
export default class ViewParamRuntime {
|
|
11
11
|
/**
|
|
12
12
|
* @param {() => ViewParamRuntime} [parentFinder]
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
13
|
+
* @param {(channel: import("../spec/channel.js").ChannelWithScale) => import("../scales/scaleResolution.js").default | undefined} [scaleResolutionResolver]
|
|
14
|
+
* Optional resolver for scale channels in this runtime's view scope.
|
|
15
|
+
* N.B. The function must always return the same resolution for the
|
|
16
|
+
* same channel in the same view hierarchy.
|
|
16
17
|
*/
|
|
17
|
-
constructor(parentFinder?: () => ViewParamRuntime);
|
|
18
|
+
constructor(parentFinder?: () => ViewParamRuntime, scaleResolutionResolver?: (channel: import("../spec/channel.js").ChannelWithScale) => import("../scales/scaleResolution.js").default | undefined);
|
|
18
19
|
/**
|
|
19
20
|
* Registers a parameter definition into this runtime scope.
|
|
20
21
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewParamRuntime.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/viewParamRuntime.js"],"names":[],"mappings":"AAmBA;;;;;;;;GAQG;AACH;
|
|
1
|
+
{"version":3,"file":"viewParamRuntime.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/viewParamRuntime.js"],"names":[],"mappings":"AAmBA;;;;;;;;GAQG;AACH;IAwCI;;;;;;OAMG;IACH,2BANW,MAAM,gBAAgB,4BACtB,CAAC,OAAO,EAAE,OAAO,oBAAoB,EAAE,gBAAgB,KAAK,OAAO,8BAA8B,EAAE,OAAO,GAAG,SAAS,EAkBhI;IAED;;;;;;;;;;;OAWG;IACH,wEAvEqB,GAAG,KAAK,IAAI,CAkKhC;IAED;;;;;;;OAOG;IACH,eAFa,CAAC,aAJH,MAAM,gBACN,CAAC,YACD,OAAO,GACL,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAgC9B;IAED;;;;;;;;OAQG;IACH,oBAHW,MAAM,SACN,GAAG,QAWb;IAED;;;OAGG;IACH,oBAFW,MAAM,OAIhB;IAED;;;;;;;;OAQG;IACH,qBAJW,MAAM,YACN,MAAM,IAAI,GACR,MAAM,IAAI,CAiBtB;IAED;;;OAGG;IACH,qBAFW,MAAM,OAKhB;IAED;;OAEG;IACH,oBACsB,WAAW,CAAC,MAAM,2CAAY,CAGnD;IAED;;;;;OAKG;IACH,yBAHW,MAAM,GACJ,OAAO,CAKnB;IAED;;;;;;;;;;OAUG;IACH,0CAHW,MAAM,GACJ,OAAO,CAanB;IAED;;;;OAIG;IACH,+BAHW,MAAM,GACJ,gBAAgB,CAQ5B;IAKD;;;;OAIG;IACH,uBAFW,MAAM,wCAMhB;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,sBALW,MAAM,YACN,MAAM,IAAI;;;;;;;qBA3VX,OAAO;;;;;;2BAKP,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI;QAwV3B,eAAe,CAY3B;IA0BD;;;;OAIG;IACH,qBAFW,MAAM,OAKhB;IAED;;;;OAIG;IACH,iBAJa,CAAC,MACH,MAAM,CAAC,GACL,CAAC,CAIb;IAED,iBAEC;IAED;;;;;OAKG;IACH,yBAFW;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,iBAItD;IAED,gBAUC;IAED;;;;;OAKG;IACH,sBAFa,OAAO,CAiBnB;;CACJ;;;;;;;;8BA9cY,OAAO,wBAAwB,EAAE,kBAAkB,GAAG;IAAE,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,MAAM,CAAA;CAAC"}
|
|
@@ -61,16 +61,22 @@ export default class ViewParamRuntime {
|
|
|
61
61
|
/** @type {() => ViewParamRuntime} */
|
|
62
62
|
#parentFinder;
|
|
63
63
|
|
|
64
|
+
/** @type {(channel: string) => import("../scales/scaleResolution.js").default | undefined} */
|
|
65
|
+
#scaleResolutionResolver;
|
|
66
|
+
|
|
64
67
|
#disposed = false;
|
|
65
68
|
|
|
66
69
|
/**
|
|
67
70
|
* @param {() => ViewParamRuntime} [parentFinder]
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
+
* @param {(channel: import("../spec/channel.js").ChannelWithScale) => import("../scales/scaleResolution.js").default | undefined} [scaleResolutionResolver]
|
|
72
|
+
* Optional resolver for scale channels in this runtime's view scope.
|
|
73
|
+
* N.B. The function must always return the same resolution for the
|
|
74
|
+
* same channel in the same view hierarchy.
|
|
71
75
|
*/
|
|
72
|
-
constructor(parentFinder) {
|
|
76
|
+
constructor(parentFinder, scaleResolutionResolver) {
|
|
73
77
|
this.#parentFinder = parentFinder ?? (() => undefined);
|
|
78
|
+
this.#scaleResolutionResolver =
|
|
79
|
+
scaleResolutionResolver ?? (() => undefined);
|
|
74
80
|
|
|
75
81
|
const parent = this.#parentFinder();
|
|
76
82
|
if (parent) {
|
|
@@ -149,7 +155,10 @@ export default class ViewParamRuntime {
|
|
|
149
155
|
const ref = this.#runtime.registerDerived(
|
|
150
156
|
this.#scopeId,
|
|
151
157
|
name,
|
|
152
|
-
param.expr
|
|
158
|
+
param.expr,
|
|
159
|
+
{
|
|
160
|
+
resolveScaleResolution: this.#scaleResolutionResolver,
|
|
161
|
+
}
|
|
153
162
|
);
|
|
154
163
|
this.#localRefs.set(name, ref);
|
|
155
164
|
setter = () => {
|
|
@@ -352,7 +361,9 @@ export default class ViewParamRuntime {
|
|
|
352
361
|
* @param {string} expr
|
|
353
362
|
*/
|
|
354
363
|
createExpression(expr) {
|
|
355
|
-
return this.#runtime.createExpression(this.#scopeId, expr
|
|
364
|
+
return this.#runtime.createExpression(this.#scopeId, expr, {
|
|
365
|
+
resolveScaleResolution: this.#scaleResolutionResolver,
|
|
366
|
+
});
|
|
356
367
|
}
|
|
357
368
|
|
|
358
369
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scale.d.ts","sourceRoot":"","sources":["../../../src/scale/scale.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scale.d.ts","sourceRoot":"","sources":["../../../src/scale/scale.js"],"names":[],"mappings":"AAiIA,sEAuBC;AAED;;;;;GAKG;AACH,uCAJW,OAAO,kBAAkB,EAAE,KAAK,UAChC,GAAC,GACC,OAAO,uBAAuB,EAAE,SAAS,CA0BrD;AA4CD;;;;;EAuGC"}
|
package/dist/src/scale/scale.js
CHANGED
|
@@ -112,6 +112,7 @@ var SKIP = toSet([
|
|
|
112
112
|
"domainMax",
|
|
113
113
|
"domainRaw",
|
|
114
114
|
"domainImplicit",
|
|
115
|
+
"domainTransition",
|
|
115
116
|
"nice",
|
|
116
117
|
"zero",
|
|
117
118
|
"bins",
|
|
@@ -482,13 +483,21 @@ function configureRangeStep(type, _, count) {
|
|
|
482
483
|
|
|
483
484
|
function configureScheme(type, _, count) {
|
|
484
485
|
var extent = _.schemeExtent,
|
|
486
|
+
schemeCount = _.schemeCount,
|
|
485
487
|
name,
|
|
486
488
|
scheme;
|
|
487
489
|
|
|
488
490
|
if (isArray(_.scheme)) {
|
|
489
491
|
scheme = interpolateColors(_.scheme, _.interpolate, _.interpolateGamma);
|
|
490
492
|
} else {
|
|
491
|
-
|
|
493
|
+
if (isString(_.scheme)) {
|
|
494
|
+
name = _.scheme.toLowerCase();
|
|
495
|
+
} else {
|
|
496
|
+
name = _.scheme.name.toLowerCase();
|
|
497
|
+
extent = _.scheme.extent ?? extent;
|
|
498
|
+
schemeCount = _.scheme.count ?? schemeCount;
|
|
499
|
+
}
|
|
500
|
+
|
|
492
501
|
scheme = getScheme(name);
|
|
493
502
|
if (!scheme) error(`Unrecognized scheme name: ${_.scheme}`);
|
|
494
503
|
}
|
|
@@ -500,7 +509,7 @@ function configureScheme(type, _, count) {
|
|
|
500
509
|
: type === BinOrdinal
|
|
501
510
|
? count - 1
|
|
502
511
|
: type === Quantile || type === Quantize
|
|
503
|
-
? +
|
|
512
|
+
? +schemeCount || DEFAULT_COUNT
|
|
504
513
|
: count;
|
|
505
514
|
|
|
506
515
|
// adjust and/or quantize scheme as appropriate
|
|
@@ -8,7 +8,30 @@ export function isSelectionDomainRef(domain: any): domain is SelectionDomainRef;
|
|
|
8
8
|
* @typedef {import("../spec/scale.js").ComplexDomain} ComplexDomain
|
|
9
9
|
* @typedef {import("../spec/scale.js").ScalarDomain} ScalarDomain
|
|
10
10
|
* @typedef {import("../spec/scale.js").SelectionDomainRef} SelectionDomainRef
|
|
11
|
+
* @typedef {import("../spec/parameter.js").ExprRef} ExprRef
|
|
11
12
|
* @typedef {import("./scaleResolution.js").ScaleResolutionMember} ScaleResolutionMember
|
|
13
|
+
* @typedef {() => Set<ScaleResolutionMember>} ScaleMembersGetter
|
|
14
|
+
* @typedef {(interval: ScalarDomain | ComplexDomain) => number[]} FromComplexInterval
|
|
15
|
+
* @typedef {(assembly: import("../spec/scale.js").Scale["assembly"] | undefined) => number[]} GetLocusExtent
|
|
16
|
+
* @typedef {{
|
|
17
|
+
* domains: DomainArray[],
|
|
18
|
+
* selectionRef: SelectionDomainLinkInfo | undefined,
|
|
19
|
+
* selectionRuntime: any,
|
|
20
|
+
* selectionDescription: string | undefined,
|
|
21
|
+
* hasLiteralDomain: boolean,
|
|
22
|
+
* }} ConfiguredDomainResolutionState
|
|
23
|
+
* @typedef {{
|
|
24
|
+
* kind: "literal",
|
|
25
|
+
* domain: DomainArray,
|
|
26
|
+
* } | {
|
|
27
|
+
* kind: "selection",
|
|
28
|
+
* domain: DomainArray | undefined,
|
|
29
|
+
* description: string,
|
|
30
|
+
* param: string,
|
|
31
|
+
* encoding: "x" | "y",
|
|
32
|
+
* hasInitial: boolean,
|
|
33
|
+
* runtime: any,
|
|
34
|
+
* }} ConfiguredDomainMemberResolution
|
|
12
35
|
* @typedef {{
|
|
13
36
|
* param: string,
|
|
14
37
|
* encoding: "x" | "y",
|
|
@@ -19,20 +42,20 @@ export function isSelectionDomainRef(domain: any): domain is SelectionDomainRef;
|
|
|
19
42
|
export default class DomainPlanner {
|
|
20
43
|
/**
|
|
21
44
|
* @param {object} options
|
|
22
|
-
* @param {
|
|
23
|
-
* @param {
|
|
24
|
-
* @param {
|
|
45
|
+
* @param {ScaleMembersGetter} options.getActiveMembers Active shared-scale members used for configured domain planning.
|
|
46
|
+
* @param {ScaleMembersGetter} [options.getAllMembers] All members, including inactive ones, used for conflict validation.
|
|
47
|
+
* @param {ScaleMembersGetter} [options.getDataMembers] Members used for data-domain extraction; defaults to `getActiveMembers`.
|
|
25
48
|
* @param {() => import("../spec/channel.js").Type} options.getType
|
|
26
|
-
* @param {
|
|
27
|
-
* @param {
|
|
49
|
+
* @param {GetLocusExtent} options.getLocusExtent
|
|
50
|
+
* @param {FromComplexInterval} options.fromComplexInterval
|
|
28
51
|
*/
|
|
29
|
-
constructor({
|
|
30
|
-
|
|
31
|
-
getAllMembers?:
|
|
32
|
-
getDataMembers?:
|
|
52
|
+
constructor({ getActiveMembers, getAllMembers, getDataMembers, getType, getLocusExtent, fromComplexInterval, }: {
|
|
53
|
+
getActiveMembers: ScaleMembersGetter;
|
|
54
|
+
getAllMembers?: ScaleMembersGetter;
|
|
55
|
+
getDataMembers?: ScaleMembersGetter;
|
|
33
56
|
getType: () => import("../spec/channel.js").Type;
|
|
34
|
-
getLocusExtent:
|
|
35
|
-
fromComplexInterval:
|
|
57
|
+
getLocusExtent: GetLocusExtent;
|
|
58
|
+
fromComplexInterval: FromComplexInterval;
|
|
36
59
|
});
|
|
37
60
|
/**
|
|
38
61
|
* @returns {any[]}
|
|
@@ -101,7 +124,30 @@ export type DomainArray = import("../utils/domainArray.js").DomainArray;
|
|
|
101
124
|
export type ComplexDomain = import("../spec/scale.js").ComplexDomain;
|
|
102
125
|
export type ScalarDomain = import("../spec/scale.js").ScalarDomain;
|
|
103
126
|
export type SelectionDomainRef = import("../spec/scale.js").SelectionDomainRef;
|
|
127
|
+
export type ExprRef = import("../spec/parameter.js").ExprRef;
|
|
104
128
|
export type ScaleResolutionMember = import("./scaleResolution.js").ScaleResolutionMember;
|
|
129
|
+
export type ScaleMembersGetter = () => Set<ScaleResolutionMember>;
|
|
130
|
+
export type FromComplexInterval = (interval: ScalarDomain | ComplexDomain) => number[];
|
|
131
|
+
export type GetLocusExtent = (assembly: import("../spec/scale.js").Scale["assembly"] | undefined) => number[];
|
|
132
|
+
export type ConfiguredDomainResolutionState = {
|
|
133
|
+
domains: DomainArray[];
|
|
134
|
+
selectionRef: SelectionDomainLinkInfo | undefined;
|
|
135
|
+
selectionRuntime: any;
|
|
136
|
+
selectionDescription: string | undefined;
|
|
137
|
+
hasLiteralDomain: boolean;
|
|
138
|
+
};
|
|
139
|
+
export type ConfiguredDomainMemberResolution = {
|
|
140
|
+
kind: "literal";
|
|
141
|
+
domain: DomainArray;
|
|
142
|
+
} | {
|
|
143
|
+
kind: "selection";
|
|
144
|
+
domain: DomainArray | undefined;
|
|
145
|
+
description: string;
|
|
146
|
+
param: string;
|
|
147
|
+
encoding: "x" | "y";
|
|
148
|
+
hasInitial: boolean;
|
|
149
|
+
runtime: any;
|
|
150
|
+
};
|
|
105
151
|
export type SelectionDomainLinkInfo = {
|
|
106
152
|
param: string;
|
|
107
153
|
encoding: "x" | "y";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domainPlanner.d.ts","sourceRoot":"","sources":["../../../src/scales/domainPlanner.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"domainPlanner.d.ts","sourceRoot":"","sources":["../../../src/scales/domainPlanner.js"],"names":[],"mappings":"AAooBA;;;GAGG;AACH,6CAHW,GAAG,GACD,MAAM,IAAI,kBAAkB,CASxC;AAhnBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH;IAiCI;;;;;;;;OAQG;IACH,gHAPG;QAAoC,gBAAgB,EAA5C,kBAAkB;QACW,aAAa,GAA1C,kBAAkB;QACW,cAAc,GAA3C,kBAAkB;QAC+B,OAAO,EAAxD,MAAM,OAAO,oBAAoB,EAAE,IAAI;QACf,cAAc,EAAtC,cAAc;QACe,mBAAmB,EAAhD,mBAAmB;KAC7B,EAeA;IAED;;OAEG;IACH,6BAFa,GAAG,EAAE,CAIjB;IAED;;OAEG;IACH,8BAFW;QAAE,uBAAuB,CAAC,EAAE,OAAO,CAAA;KAAE,WAI/C;IAED,wCAGC;IAED;;OAEG;IACH,2CAFa,uBAAuB,GAAG,SAAS,CAS/C;IAED;;;MAUC;IAED,mCAIC;IAED;;;;;;OAMG;IACH,qCAJW,OAAO,kBACP,OAAO,kBAAkB,EAAE,KAAK,CAAC,UAAU,CAAC,GAC1C,GAAG,EAAE,CAYjB;IAED;;;;;;;OAOG;IACH,iDALW,OAAO,kBACP,OAAO,kBAAkB,EAAE,KAAK,CAAC,UAAU,CAAC,YAC5C;QAAE,uBAAuB,CAAC,EAAE,OAAO,CAAA;KAAE,GACnC,GAAG,EAAE,CAYjB;IAED;;;;;OAKG;IACH,8BAHW;QAAE,uBAAuB,CAAC,EAAE,OAAO,CAAA;KAAE,GACpC,WAAW,CA8BtB;IAED;;;;OAIG;IACH,iBAFY,WAAW,GAAG,SAAS,CAQlC;IAED;;;;;OAKG;IACH,4BALW,OAAO,qBAAqB,EAAE,SAAS,wBACvC,OAAO,mBACP,GAAG,EAAE,GACH,OAAO,CAgBnB;;CAkCJ;0BA7RY,OAAO,yBAAyB,EAAE,WAAW;4BAC7C,OAAO,kBAAkB,EAAE,aAAa;2BACxC,OAAO,kBAAkB,EAAE,YAAY;iCACvC,OAAO,kBAAkB,EAAE,kBAAkB;sBAC7C,OAAO,sBAAsB,EAAE,OAAO;oCACtC,OAAO,sBAAsB,EAAE,qBAAqB;iCACpD,MAAM,GAAG,CAAC,qBAAqB,CAAC;kCAChC,CAAC,QAAQ,EAAE,YAAY,GAAG,aAAa,KAAK,MAAM,EAAE;6BACpD,CAAC,QAAQ,EAAE,OAAO,kBAAkB,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,SAAS,KAAK,MAAM,EAAE;8CAChF;IACR,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,YAAY,EAAE,uBAAuB,GAAG,SAAS,CAAC;IAClD,gBAAgB,EAAE,GAAG,CAAC;IACtB,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,gBAAgB,EAAE,OAAO,CAAC;CAC3B;+CACS;IACR,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;CACrB,GAAG;IACF,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,GAAG,GAAG,GAAG,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,GAAG,CAAC;CACd;sCACS;IACR,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,GAAG,GAAG,GAAG,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,GAAG,CAAC;CACd"}
|