@genome-spy/core 0.49.0 → 0.50.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.es.js +2861 -2829
- package/dist/bundle/index.js +90 -89
- package/dist/schema.json +2175 -1430
- package/dist/src/genomeSpy.d.ts.map +1 -1
- package/dist/src/genomeSpy.js +12 -8
- package/dist/src/gl/includes/common.glsl.js +1 -1
- package/dist/src/marks/link.d.ts +8 -1
- package/dist/src/marks/link.d.ts.map +1 -1
- package/dist/src/marks/link.fragment.glsl.js +1 -1
- package/dist/src/marks/link.js +38 -32
- package/dist/src/marks/link.vertex.glsl.js +1 -1
- package/dist/src/marks/mark.d.ts +19 -16
- package/dist/src/marks/mark.d.ts.map +1 -1
- package/dist/src/marks/mark.js +41 -27
- package/dist/src/marks/markUtils.d.ts +25 -0
- package/dist/src/marks/markUtils.d.ts.map +1 -1
- package/dist/src/marks/markUtils.js +41 -1
- package/dist/src/marks/point.common.glsl.js +1 -1
- package/dist/src/marks/point.d.ts +8 -1
- package/dist/src/marks/point.d.ts.map +1 -1
- package/dist/src/marks/point.js +29 -24
- package/dist/src/marks/point.vertex.glsl.js +1 -1
- package/dist/src/marks/rect.d.ts +8 -1
- package/dist/src/marks/rect.d.ts.map +1 -1
- package/dist/src/marks/rect.js +19 -19
- package/dist/src/marks/rule.d.ts +8 -1
- package/dist/src/marks/rule.d.ts.map +1 -1
- package/dist/src/marks/rule.js +19 -16
- package/dist/src/marks/text.d.ts +10 -1
- package/dist/src/marks/text.d.ts.map +1 -1
- package/dist/src/marks/text.fragment.glsl.js +1 -1
- package/dist/src/marks/text.js +48 -46
- package/dist/src/marks/text.vertex.glsl.js +1 -1
- package/dist/src/spec/channel.d.ts +14 -1
- package/dist/src/spec/mark.d.ts +167 -87
- package/dist/src/spec/view.d.ts +115 -39
- package/dist/src/styles/genome-spy.css.d.ts +1 -1
- package/dist/src/styles/genome-spy.css.d.ts.map +1 -1
- package/dist/src/styles/genome-spy.css.js +1 -0
- package/dist/src/styles/genome-spy.scss +1 -0
- package/dist/src/tooltip/dataTooltipHandler.d.ts +1 -1
- package/dist/src/tooltip/dataTooltipHandler.d.ts.map +1 -1
- package/dist/src/tooltip/refseqGeneTooltipHandler.d.ts +1 -1
- package/dist/src/tooltip/refseqGeneTooltipHandler.d.ts.map +1 -1
- package/dist/src/view/axisResolution.d.ts +1 -1
- package/dist/src/view/axisResolution.d.ts.map +1 -1
- package/dist/src/view/axisResolution.js +1 -1
- package/dist/src/view/axisView.js +2 -2
- package/dist/src/view/flowBuilder.test.js +1 -1
- package/dist/src/view/gridView.js +1 -1
- package/dist/src/view/layout/flexLayout.d.ts +6 -0
- package/dist/src/view/layout/flexLayout.d.ts.map +1 -1
- package/dist/src/view/layout/flexLayout.js +9 -0
- package/dist/src/view/paramMediator.d.ts +7 -0
- package/dist/src/view/paramMediator.d.ts.map +1 -1
- package/dist/src/view/paramMediator.js +23 -0
- package/dist/src/view/paramMediator.test.js +20 -0
- package/dist/src/view/scaleResolution.d.ts +1 -7
- package/dist/src/view/scaleResolution.d.ts.map +1 -1
- package/dist/src/view/scaleResolution.js +24 -39
- package/dist/src/view/unitView.d.ts +3 -5
- package/dist/src/view/unitView.d.ts.map +1 -1
- package/dist/src/view/unitView.js +22 -4
- package/dist/src/view/view.js +1 -1
- package/dist/src/view/viewUtils.d.ts +1 -5
- package/dist/src/view/viewUtils.d.ts.map +1 -1
- package/dist/src/view/viewUtils.js +0 -7
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axisResolution.d.ts","sourceRoot":"","sources":["../../../src/view/axisResolution.js"],"names":[],"mappings":"AAeA;;;;;;;GAOG;AACH;IACI;;;OAGG;IAEH;;OAEG;IACH,qBAFW,OAAO,oBAAoB,EAAE,wBAAwB,EAM/D;IAHG,+DAAsB;IACtB,wDAAwD;IACxD,SADW,oBAAoB,EAAE,CAChB;IAGrB,8DAEC;IAED;;;;;OAKG;IACH,
|
|
1
|
+
{"version":3,"file":"axisResolution.d.ts","sourceRoot":"","sources":["../../../src/view/axisResolution.js"],"names":[],"mappings":"AAeA;;;;;;;GAOG;AACH;IACI;;;OAGG;IAEH;;OAEG;IACH,qBAFW,OAAO,oBAAoB,EAAE,wBAAwB,EAM/D;IAHG,+DAAsB;IACtB,wDAAwD;IACxD,SADW,oBAAoB,EAAE,CAChB;IAGrB,8DAEC;IAED;;;;;OAKG;IACH,qBAFW,oBAAoB,QAkB9B;IAED,qDAuBC;IAED,mBAyDC;CACJ;;UAlIS,OAAO,eAAe,EAAE,OAAO;aAC/B,CAAC;gBACD,OAAO,oBAAoB,EAAE,mBAAmB"}
|
|
@@ -594,7 +594,7 @@ export function createGenomeAxis(axisProps, type) {
|
|
|
594
594
|
if (axisProps.chromLabels) {
|
|
595
595
|
chromLayerSpec.layer.push(createChromosomeLabels());
|
|
596
596
|
|
|
597
|
-
/** @type {import("../spec/mark.js").
|
|
597
|
+
/** @type {import("../spec/mark.js").TextProps} */
|
|
598
598
|
let labelMarkSpec;
|
|
599
599
|
|
|
600
600
|
// TODO: Simplify the following mess
|
|
@@ -608,7 +608,7 @@ export function createGenomeAxis(axisProps, type) {
|
|
|
608
608
|
/** @type {import("../spec/view.js").UnitSpec} */ view
|
|
609
609
|
) => {
|
|
610
610
|
labelMarkSpec =
|
|
611
|
-
/** @type {import("../spec/mark.js").
|
|
611
|
+
/** @type {import("../spec/mark.js").TextProps} */ (
|
|
612
612
|
view.mark
|
|
613
613
|
);
|
|
614
614
|
}
|
|
@@ -835,7 +835,7 @@ export function createBackgroundStroke(viewBackground) {
|
|
|
835
835
|
size: viewBackground.strokeWidth ?? 1.0,
|
|
836
836
|
color: viewBackground.stroke ?? "lightgray",
|
|
837
837
|
strokeCap: "square",
|
|
838
|
-
|
|
838
|
+
opacity: viewBackground.strokeOpacity ?? 1.0,
|
|
839
839
|
type: "rule",
|
|
840
840
|
clip: false,
|
|
841
841
|
tooltip: null,
|
|
@@ -123,6 +123,12 @@ export class FlexDimensions {
|
|
|
123
123
|
* @param {import("./padding.js").default} padding
|
|
124
124
|
*/
|
|
125
125
|
subtractPadding(padding: import("./padding.js").default): FlexDimensions;
|
|
126
|
+
/**
|
|
127
|
+
* Returns true if either of the dimensions is growing
|
|
128
|
+
*
|
|
129
|
+
* @returns {boolean}
|
|
130
|
+
*/
|
|
131
|
+
isGrowing(): boolean;
|
|
126
132
|
#private;
|
|
127
133
|
}
|
|
128
134
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flexLayout.d.ts","sourceRoot":"","sources":["../../../../src/view/layout/flexLayout.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wCALW,OAAO,EAAE,iBACT,MAAM,mDACN,WAAW,GACT,OAAO,EAAE,CAqGrB;AAED;;;;;GAKG;AACH,sCAHW,SAAS,OAAO,CAAC,gBACjB,WAAW,UAQrB;AAED;;;GAGG;AACH,sCAHW,SAAS,OAAO,CAAC,GACf,OAAO,CAWnB;AAED;;;GAGG;AACH,oCAFW,OAAO,EAAE,WAInB;AAED;;;GAGG;AACH,sCAFW,OAAO,EAAE;;;EASnB;
|
|
1
|
+
{"version":3,"file":"flexLayout.d.ts","sourceRoot":"","sources":["../../../../src/view/layout/flexLayout.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wCALW,OAAO,EAAE,iBACT,MAAM,mDACN,WAAW,GACT,OAAO,EAAE,CAqGrB;AAED;;;;;GAKG;AACH,sCAHW,SAAS,OAAO,CAAC,gBACjB,WAAW,UAQrB;AAED;;;GAGG;AACH,sCAHW,SAAS,OAAO,CAAC,GACf,OAAO,CAWnB;AAED;;;GAGG;AACH,oCAFW,OAAO,EAAE,WAInB;AAED;;;GAGG;AACH,sCAFW,OAAO,EAAE;;;EASnB;AA4ED;;;;GAIG;AACH,uCAFW,OAAO,WAIjB;AAWD;;;;GAIG;AACH,sDAEC;AAED;;;;GAIG;AACH,mCAHW,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,oBAAoB,EAAE,IAAI,GAChE,OAAO,CAiBnB;AAID;;;;;;;GAOG;AACH,0CALW,OAAO,MACP,OAAO,eACI,MAAM,GACf,OAAO,CA4BnB;AAED;;;;;;GAMG;AACH,0CAJW,OAAO,UACP,MAAM,UAAc,MAAM,CAAA,GACxB,OAAO,CAanB;AAED;;;;;;GAMG;AACH,sCAJW,OAAO,UACP,MAAM,UAAc,MAAM,CAAA,GACxB,OAAO,CAanB;AAED;;;GAGG;AACH,yCAHW,OAAO,SACP,MAAM,WAIhB;AA/MD;IACI;;;;OAIG;IACH,mBAHW,OAAO,UACP,OAAO,EAQjB;IAJG,gBAAgB;IAChB,wBAAkB;IAClB,gBAAgB;IAChB,yBAAoB;IAGxB;;;;OAIG;IACH,oBAFW,OAAO,cAAc,EAAE,OAAO,kBAIxC;IAED;;;;OAIG;IACH,yBAFW,OAAO,cAAc,EAAE,OAAO,kBAIxC;IAmBD;;;;OAIG;IACH,aAFa,OAAO,CAInB;;CACJ;AAED;;;;GAIG;AACH,2BAFU,OAAO,CAKd;AAEH,iDAGE;;;;;;;;SAlPQ,MAAM;;;;WACN,MAAM;;;;;;cAGN,MAAM;UACN,MAAM;;;;;;;;;;;;;;cAGN,MAAM;;;;;uBACN,MAAM;;;;aAEN,MAAM;;;;cACN,OAAO"}
|
|
@@ -228,6 +228,15 @@ export class FlexDimensions {
|
|
|
228
228
|
}
|
|
229
229
|
);
|
|
230
230
|
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Returns true if either of the dimensions is growing
|
|
234
|
+
*
|
|
235
|
+
* @returns {boolean}
|
|
236
|
+
*/
|
|
237
|
+
isGrowing() {
|
|
238
|
+
return !!(this.width.grow || this.height.grow);
|
|
239
|
+
}
|
|
231
240
|
}
|
|
232
241
|
|
|
233
242
|
/**
|
|
@@ -122,6 +122,13 @@ export default class ParamMediator {
|
|
|
122
122
|
* @param {string} expr
|
|
123
123
|
*/
|
|
124
124
|
evaluateAndGet(expr: string): any;
|
|
125
|
+
/**
|
|
126
|
+
* Returns true if this ParamMediator has any parameters that are point selections.
|
|
127
|
+
* Point selections necessitate the use of uniqueIds in the data.
|
|
128
|
+
*
|
|
129
|
+
* @returns {boolean}
|
|
130
|
+
*/
|
|
131
|
+
hasPointSelections(): boolean;
|
|
125
132
|
#private;
|
|
126
133
|
}
|
|
127
134
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paramMediator.d.ts","sourceRoot":"","sources":["../../../src/view/paramMediator.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"paramMediator.d.ts","sourceRoot":"","sources":["../../../src/view/paramMediator.js"],"names":[],"mappings":"AAkUA;;;GAGG;AACH,6BAHW,GAAG,+CAKb;AAED;;;;;;;GAOG;AACH,oFASC;AAED;;;GAGG;AACH,gJAEC;AAED;;;GAGG;AACH,gMAEC;AAED;;;;;;;;;;GAUG;AACH,mFANW,aAAa,+CAEW,IAAI,KAwCtC;AAED;;;;;;GAMG;AACH,4CAHW,MAAM,GACJ,MAAM,CAUlB;AAED;;;;;;;GAOG;AACH,2CAHW,GAAG,GACD,eAAe,CAW3B;AA5bD;;;;;GAKG;AACH;IA2BI;;;;;OAKG;IACH,2BALW,MAAM,aAAa,EAU7B;IA7BD;;;OAGG;IACH,0BAHU,IAAI,MAAM,EAAE,IAAI,MAAM,IAAI,CAAC,CAAC,CAGvB;IA2Bf;;;OAGG;IACH,wEAzCqB,GAAG,KAAK,IAAI,CAmGhC;IAED;;;;;;;OAOG;IACH,6BANW,MAAM,6BAEN,OAAO,iBACS,IAAI,CAgC9B;IAED;;;OAGG;IACH,qBAFW,MAAM,WAlIc,GAAG,KAAK,IAAI,CA0I1C;IAED;;;OAGG;IACH,oBAFW,MAAM,OAIhB;IAED;;;OAGG;IACH,qBAFW,MAAM,OAKhB;IAED;;OAEG;IACH,kFAIC;IAED;;;;;OAKG;IACH,0CAJW,MAAM,GACJ,aAAa,CASzB;IAID;;;;OAIG;IACH,uBAFW,MAAM,mBA4EhB;IAED;;;;OAIG;IACH,qBAFW,MAAM,OAKhB;IAED;;;;;OAKG;IACH,sBAFa,OAAO,CAiBnB;;CACJ;;;;;;4BAxT4F,MAAM,IAAI,KAAK,IAAI;gBAAc,MAAM,IAAI;gBAAc,MAAM,MAAM"}
|
|
@@ -295,6 +295,29 @@ export default class ParamMediator {
|
|
|
295
295
|
const fn = this.createExpression(expr);
|
|
296
296
|
return fn();
|
|
297
297
|
}
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Returns true if this ParamMediator has any parameters that are point selections.
|
|
301
|
+
* Point selections necessitate the use of uniqueIds in the data.
|
|
302
|
+
*
|
|
303
|
+
* @returns {boolean}
|
|
304
|
+
*/
|
|
305
|
+
hasPointSelections() {
|
|
306
|
+
for (const param of this.#paramConfigs.values()) {
|
|
307
|
+
if (isSelectionParameter(param)) {
|
|
308
|
+
const select = param.select;
|
|
309
|
+
if (isString(select)) {
|
|
310
|
+
if (select == "point") {
|
|
311
|
+
return true;
|
|
312
|
+
}
|
|
313
|
+
} else if (select.type == "point") {
|
|
314
|
+
return true;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
return false;
|
|
320
|
+
}
|
|
298
321
|
}
|
|
299
322
|
|
|
300
323
|
/**
|
|
@@ -238,3 +238,23 @@ test("activateExprRefProps", async () => {
|
|
|
238
238
|
c: 2,
|
|
239
239
|
});
|
|
240
240
|
});
|
|
241
|
+
|
|
242
|
+
describe("hasPointSelections()", () => {
|
|
243
|
+
test("false if there are no point selections", () => {
|
|
244
|
+
const pm = new ParamMediator();
|
|
245
|
+
pm.registerParam({ name: "foo", value: 42 });
|
|
246
|
+
expect(pm.hasPointSelections()).toBe(false);
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
test("true if there are point selections (1/2)", () => {
|
|
250
|
+
const pm = new ParamMediator();
|
|
251
|
+
pm.registerParam({ name: "foo", select: "point" });
|
|
252
|
+
expect(pm.hasPointSelections()).toBe(true);
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
test("true if there are point selections (2/2)", () => {
|
|
256
|
+
const pm = new ParamMediator();
|
|
257
|
+
pm.registerParam({ name: "foo", select: { type: "point" } });
|
|
258
|
+
expect(pm.hasPointSelections()).toBe(true);
|
|
259
|
+
});
|
|
260
|
+
});
|
|
@@ -64,13 +64,7 @@ export default class ScaleResolution implements ScaleResolutionApi {
|
|
|
64
64
|
*
|
|
65
65
|
* @param {ScaleResolutionMember} newMember
|
|
66
66
|
*/
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Unions the configured domains of all participating views.
|
|
70
|
-
*
|
|
71
|
-
* @return { DomainArray }
|
|
72
|
-
*/
|
|
73
|
-
getConfiguredDomain(): import("../utils/domainArray.js").DomainArray;
|
|
67
|
+
addMember(newMember: ScaleResolutionMember): void;
|
|
74
68
|
/**
|
|
75
69
|
* Extracts and unions the data domains of all participating views.
|
|
76
70
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaleResolution.d.ts","sourceRoot":"","sources":["../../../src/view/scaleResolution.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scaleResolution.d.ts","sourceRoot":"","sources":["../../../src/view/scaleResolution.js"],"names":[],"mappings":"AAg7BA;;;;;;;;;;GAUG;AACH,6CAFW,OAAO,WAAW,EAAE,OAAO,GAAG,OAAO,WAAW,EAAE,OAAO,EAAE,QA4BrE;AAx6BD,0CAA2C;AAC3C,gCAAiC;AACjC,gCAAiC;AACjC,4BAA6B;AAC7B,4BAA6B;AAE7B;;;;;;;;GAQG;AACH;;;;;;;GAOG;AACH;IAyCI;;OAEG;IACH,2DASC;IARG,8CAAsB;IACtB,yDAAyD;IACzD,SADW,qBAAqB,EAAE,CACjB;IACjB,0FAA0F;IAC1F,MADW,OAAO,oBAAoB,EAAE,IAAI,CAC5B;IAEhB,iEAAiE;IACjE,MADW,MAAM,CACI;IAWzB;;;;;;;OAOG;IACH,4KAEC;IAED;;;OAGG;IACH,+KAEC;IAcD;;;;;OAKG;IACH,qBAFW,qBAAqB,QA4B/B;IA8MD;;;;OAIG;IACH,+DAOC;IAED;;OAEG;IACH,oBAyCC;IAED;;OAEG;IACH;eA5XkC,OAAO,kBAAkB,EAAE,KAAK;MAwajE;IAED,mBAEC;IAED;;OAEG;IACH,oBAFa,mFAA6B,CAOzC;IAED;;;;OAIG;IACH,oBAKC;IAED;;OAEG;IACH,sBAGC;IAUD;;;;;;;OAOG;IACH,kBALW,MAAM,eACN,MAAM,OACN,MAAM,GACJ,OAAO,CAwEnB;IAED;;;;;;OAMG;IACH,eAJW,mFAA6B,aAC7B,OAAO,GAAG,MAAM,iBA0D1B;IAED;;;;OAIG;IACH,qBAcC;IAED;;;;;OAKG;IACH,uBAOC;IA8DD;;;OAGG;IACH,aAFa,OAAO,qBAAqB,EAAE,OAAO,CAajD;IAID;;;;;OAKG;IACH,uBAFW,MAAM,yDAUhB;IAED;;OAEG;IACH,iBAFW,MAAM,yDAKhB;IAED;;;OAGG;IACH,6EAFa,MAAM,CAQlB;IAED;;;OAGG;IACH,mHAFa,MAAM,EAAE,CAOpB;;CACJ;;;;;UAlyBS,OAAO,eAAe,EAAE,OAAO;aAC/B,CAAC;gBACD,OAAO,oBAAoB,EAAE,mBAAmB;qFACd,OAAO,oBAAoB,EAAE,IAAI"}
|
|
@@ -167,7 +167,7 @@ export default class ScaleResolution {
|
|
|
167
167
|
*
|
|
168
168
|
* @param {ScaleResolutionMember} newMember
|
|
169
169
|
*/
|
|
170
|
-
|
|
170
|
+
addMember(newMember) {
|
|
171
171
|
const { channel, channelDef } = newMember;
|
|
172
172
|
const type = channelDef.type;
|
|
173
173
|
const name = channelDef?.scale?.name;
|
|
@@ -199,7 +199,7 @@ export default class ScaleResolution {
|
|
|
199
199
|
* Returns true if the domain has been defined explicitly, i.e. not extracted from the data.
|
|
200
200
|
*/
|
|
201
201
|
#isExplicitDomain() {
|
|
202
|
-
return !!this
|
|
202
|
+
return !!this.#getConfiguredDomain();
|
|
203
203
|
}
|
|
204
204
|
|
|
205
205
|
#isDomainInitialized() {
|
|
@@ -367,7 +367,7 @@ export default class ScaleResolution {
|
|
|
367
367
|
#getInitialDomain(extractDataDomain = false) {
|
|
368
368
|
// TODO: intersect the domain with zoom extent (if it's defined)
|
|
369
369
|
return (
|
|
370
|
-
this
|
|
370
|
+
this.#getConfiguredDomain() ??
|
|
371
371
|
(this.type == LOCUS
|
|
372
372
|
? this.getGenome().getExtent()
|
|
373
373
|
: extractDataDomain
|
|
@@ -381,7 +381,7 @@ export default class ScaleResolution {
|
|
|
381
381
|
*
|
|
382
382
|
* @return { DomainArray }
|
|
383
383
|
*/
|
|
384
|
-
getConfiguredDomain() {
|
|
384
|
+
#getConfiguredDomain() {
|
|
385
385
|
const domains = this.members
|
|
386
386
|
.map((member) => member.channelDef)
|
|
387
387
|
.filter((channelDef) => channelDef.scale?.domain)
|
|
@@ -405,11 +405,12 @@ export default class ScaleResolution {
|
|
|
405
405
|
* @return { DomainArray }
|
|
406
406
|
*/
|
|
407
407
|
getDataDomain() {
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
408
|
+
return this.members
|
|
409
|
+
.map((member) =>
|
|
410
|
+
member.dataDomainSource?.(member.channel, this.type)
|
|
411
|
+
)
|
|
412
|
+
.filter((domain) => !!domain)
|
|
413
|
+
.reduce((acc, curr) => acc.extendAll(curr));
|
|
413
414
|
}
|
|
414
415
|
|
|
415
416
|
/**
|
|
@@ -655,21 +656,31 @@ export default class ScaleResolution {
|
|
|
655
656
|
const from = /** @type {number[]} */ (scale.domain());
|
|
656
657
|
|
|
657
658
|
if (duration > 0 && from.length == 2) {
|
|
659
|
+
// Spans
|
|
658
660
|
const fw = from[1] - from[0];
|
|
659
|
-
const fc = from[0] + fw / 2;
|
|
660
|
-
|
|
661
661
|
const tw = to[1] - to[0];
|
|
662
|
+
|
|
663
|
+
// Centers
|
|
664
|
+
const fc = from[0] + fw / 2;
|
|
662
665
|
const tc = to[0] + tw / 2;
|
|
663
666
|
|
|
667
|
+
// Constant endpoints. Skip calculation to maintain precision.
|
|
668
|
+
const ac = from[0] == to[0];
|
|
669
|
+
const bc = from[1] == to[1];
|
|
670
|
+
|
|
664
671
|
// TODO: Abort possible previous transition
|
|
665
672
|
await animator.transition({
|
|
666
673
|
duration,
|
|
667
674
|
easingFunction: easeCubicInOut,
|
|
668
675
|
onUpdate: (t) => {
|
|
669
676
|
const w = eerp(fw, tw, t);
|
|
670
|
-
const wt = (fw - w) / (fw - tw);
|
|
677
|
+
const wt = fw == tw ? t : (fw - w) / (fw - tw);
|
|
671
678
|
const c = wt * tc + (1 - wt) * fc;
|
|
672
|
-
|
|
679
|
+
const domain = [
|
|
680
|
+
ac ? from[0] : c - w / 2,
|
|
681
|
+
bc ? from[1] : c + w / 2,
|
|
682
|
+
];
|
|
683
|
+
scale.domain(domain);
|
|
673
684
|
this.#notifyListeners("domain");
|
|
674
685
|
},
|
|
675
686
|
});
|
|
@@ -844,32 +855,6 @@ export default class ScaleResolution {
|
|
|
844
855
|
}
|
|
845
856
|
return /** @type {number[]} */ (interval);
|
|
846
857
|
}
|
|
847
|
-
|
|
848
|
-
/**
|
|
849
|
-
* Iterate all participanting views and reduce (union) their domains using an accessor.
|
|
850
|
-
* Accessor may return the an explicitly configured domain or a domain extracted from the data.
|
|
851
|
-
*
|
|
852
|
-
* @param {function(ScaleResolutionMember):DomainArray} domainAccessor
|
|
853
|
-
* @returns {DomainArray}
|
|
854
|
-
*/
|
|
855
|
-
#reduceDomains(domainAccessor) {
|
|
856
|
-
const domains = this.members
|
|
857
|
-
.filter(
|
|
858
|
-
(member) =>
|
|
859
|
-
// View is missing if ScaleResolution is used within tests
|
|
860
|
-
!member.view ||
|
|
861
|
-
!member.view
|
|
862
|
-
.getLayoutAncestors()
|
|
863
|
-
// TODO: Should check until the resolved scale resolution
|
|
864
|
-
.some((view) => !view.options.contributesToScaleDomain)
|
|
865
|
-
)
|
|
866
|
-
.map(domainAccessor)
|
|
867
|
-
.filter((domain) => !!domain);
|
|
868
|
-
|
|
869
|
-
if (domains.length) {
|
|
870
|
-
return domains.reduce((acc, curr) => acc.extendAll(curr));
|
|
871
|
-
}
|
|
872
|
-
}
|
|
873
858
|
}
|
|
874
859
|
|
|
875
860
|
/**
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
*
|
|
3
|
-
* @type {
|
|
3
|
+
* @type {Record<import("../spec/mark.js").MarkType, typeof import("../marks/mark.js").default>}
|
|
4
4
|
* TODO: Find a proper place, make extendible
|
|
5
5
|
*/
|
|
6
|
-
export const markTypes:
|
|
7
|
-
[x: string]: typeof import("../marks/mark.js").default;
|
|
8
|
-
};
|
|
6
|
+
export const markTypes: Record<import("../spec/mark.js").MarkType, typeof import("../marks/mark.js").default>;
|
|
9
7
|
export default class UnitView extends View {
|
|
10
8
|
/**
|
|
11
9
|
*
|
|
@@ -20,7 +18,7 @@ export default class UnitView extends View {
|
|
|
20
18
|
spec: import("../spec/view.js").UnitSpec;
|
|
21
19
|
/** @type {import("../marks/mark.js").default} */
|
|
22
20
|
mark: import("../marks/mark.js").default;
|
|
23
|
-
getMarkType():
|
|
21
|
+
getMarkType(): "link" | "rect" | "text" | "point" | "rule";
|
|
24
22
|
/**
|
|
25
23
|
* Pulls scales and axes up in the view hierarcy according to the resolution rules, using dataParents.
|
|
26
24
|
* TODO: legends
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unitView.d.ts","sourceRoot":"","sources":["../../../src/view/unitView.js"],"names":[],"mappings":"AAsBA;;;;GAIG;AACH
|
|
1
|
+
{"version":3,"file":"unitView.d.ts","sourceRoot":"","sources":["../../../src/view/unitView.js"],"names":[],"mappings":"AAsBA;;;;GAIG;AACH,wBAHU,OAAO,OAAO,iBAAiB,EAAE,QAAQ,EAAE,cAAc,kBAAkB,EAAE,OAAO,CAAC,CAc7F;AAEF;IAeI;;;;;;;;OAQG;IACH,kBAPW,OAAO,iBAAiB,EAAE,QAAQ,WAClC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,YACN,OAAO,WAAW,EAAE,WAAW,EAiCzC;IA5BG,yCAAgB;IAIZ,iDAAiD;IACjD,MADW,OAAO,kBAAkB,EAAE,OAAO,CACnB;IAsFlC,2DAIC;IAED;;;;;OAKG;IAEH,iEA+FC;IAED;;;;;OAKG;IACH,4IAEC;IAkBD;;OAEG;IACH,uDAEC;IAED;;;;;;;;;;;;;OAaG;IACH,uEAHW,OAAO,oBAAoB,EAAE,IAAI,iDAqB3C;IAED,uBAQC;IAgBD;;;;OAIG;IACH,8BAJW,MAAM,+DAEJ,OAAO,iBAAiB,EAAE,kBAAkB,CAKxD;;CACJ;iBA/VgB,WAAW"}
|
|
@@ -22,14 +22,19 @@ import { UNIQUE_ID_KEY } from "../data/transforms/identifier.js";
|
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
24
|
*
|
|
25
|
-
* @type {
|
|
25
|
+
* @type {Record<import("../spec/mark.js").MarkType, typeof import("../marks/mark.js").default>}
|
|
26
26
|
* TODO: Find a proper place, make extendible
|
|
27
27
|
*/
|
|
28
28
|
export const markTypes = {
|
|
29
|
+
// @ts-ignore TODO: fix
|
|
29
30
|
point: PointMark,
|
|
31
|
+
// @ts-ignore
|
|
30
32
|
rect: RectMark,
|
|
33
|
+
// @ts-ignore
|
|
31
34
|
rule: RuleMark,
|
|
35
|
+
// @ts-ignore
|
|
32
36
|
link: LinkMark,
|
|
37
|
+
// @ts-ignore
|
|
33
38
|
text: TextMark,
|
|
34
39
|
};
|
|
35
40
|
|
|
@@ -163,6 +168,7 @@ export default class UnitView extends View {
|
|
|
163
168
|
*
|
|
164
169
|
* @param {ResolutionTarget} [type] If not specified, both scales and axes are resolved.
|
|
165
170
|
*/
|
|
171
|
+
// eslint-disable-next-line complexity
|
|
166
172
|
resolve(type) {
|
|
167
173
|
if (!type) {
|
|
168
174
|
this.resolve("scale");
|
|
@@ -220,7 +226,7 @@ export default class UnitView extends View {
|
|
|
220
226
|
targetChannel
|
|
221
227
|
);
|
|
222
228
|
}
|
|
223
|
-
view.resolutions[type][targetChannel].
|
|
229
|
+
view.resolutions[type][targetChannel].addMember({
|
|
224
230
|
view: this,
|
|
225
231
|
channel,
|
|
226
232
|
channelDef,
|
|
@@ -238,11 +244,23 @@ export default class UnitView extends View {
|
|
|
238
244
|
);
|
|
239
245
|
});
|
|
240
246
|
}
|
|
241
|
-
|
|
247
|
+
|
|
248
|
+
const dataDomainSource =
|
|
249
|
+
this.getLayoutAncestors()
|
|
250
|
+
// TODO: Should check until the resolved scale resolution
|
|
251
|
+
.some(
|
|
252
|
+
(view) => !view.options.contributesToScaleDomain
|
|
253
|
+
) ||
|
|
254
|
+
(isChannelDefWithScale(channelDef) &&
|
|
255
|
+
channelDef.contributesToScaleDomain === false)
|
|
256
|
+
? undefined
|
|
257
|
+
: this.extractDataDomain.bind(this);
|
|
258
|
+
|
|
259
|
+
view.resolutions[type][targetChannel].addMember({
|
|
242
260
|
view: this,
|
|
243
261
|
channel,
|
|
244
262
|
channelDef,
|
|
245
|
-
dataDomainSource
|
|
263
|
+
dataDomainSource,
|
|
246
264
|
});
|
|
247
265
|
}
|
|
248
266
|
}
|
package/dist/src/view/view.js
CHANGED
|
@@ -732,7 +732,7 @@ function isDynamicOpacity(opacity) {
|
|
|
732
732
|
* @returns {function(number):number}
|
|
733
733
|
*/
|
|
734
734
|
function createViewOpacityFunction(view) {
|
|
735
|
-
const opacityDef = view.spec.opacity;
|
|
735
|
+
const opacityDef = "opacity" in view.spec ? view.spec.opacity : undefined;
|
|
736
736
|
|
|
737
737
|
if (opacityDef !== undefined) {
|
|
738
738
|
if (isNumber(opacityDef)) {
|
|
@@ -14,7 +14,7 @@ export function isFacetMapping(def: import("../spec/channel.js").FacetFieldDef |
|
|
|
14
14
|
* Returns all marks in the order (DFS) they are rendered
|
|
15
15
|
* @param {View} root
|
|
16
16
|
*/
|
|
17
|
-
export function getMarks(root: View): import("../marks/mark.js").default[];
|
|
17
|
+
export function getMarks(root: View): import("../marks/mark.js").default<import("../spec/mark.js").MarkProps>[];
|
|
18
18
|
/**
|
|
19
19
|
* Returns the nodes of the view hierarchy in depth-first order.
|
|
20
20
|
*
|
|
@@ -74,10 +74,6 @@ export function findDescendantsByPath(root: View, name: string): View[];
|
|
|
74
74
|
* @param {View} root
|
|
75
75
|
*/
|
|
76
76
|
export function findUniqueViewNames(root: View): Set<string>;
|
|
77
|
-
/**
|
|
78
|
-
* @param {View} viewRoot
|
|
79
|
-
*/
|
|
80
|
-
export function calculateViewRootSize(viewRoot: View): import("./layout/flexLayout.js").FlexDimensions;
|
|
81
77
|
/**
|
|
82
78
|
* @param {import("./layout/flexLayout.js").FlexDimensions} viewRootSize
|
|
83
79
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewUtils.d.ts","sourceRoot":"","sources":["../../../src/view/viewUtils.js"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,qCAHW,OAAO,oBAAoB,EAAE,UAAU,GAAG,OAAO,iBAAiB,EAAE,YAAY,yBAK1F;AAED;;;;GAIG;AACH,oCAHW,OAAO,oBAAoB,EAAE,aAAa,GAAG,OAAO,iBAAiB,EAAE,YAAY,wBAQ7F;AAED;;;GAGG;AACH,+BAFW,IAAI,
|
|
1
|
+
{"version":3,"file":"viewUtils.d.ts","sourceRoot":"","sources":["../../../src/view/viewUtils.js"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,qCAHW,OAAO,oBAAoB,EAAE,UAAU,GAAG,OAAO,iBAAiB,EAAE,YAAY,yBAK1F;AAED;;;;GAIG;AACH,oCAHW,OAAO,oBAAoB,EAAE,aAAa,GAAG,OAAO,iBAAiB,EAAE,YAAY,wBAQ7F;AAED;;;GAGG;AACH,+BAFW,IAAI,6EAMd;AAED;;;;GAIG;AACH,wCAFW,IAAI,UASd;AAED;;GAEG;AACH,kDAFW,IAAI,QAiBd;AAED;;;;;;;GAOG;AACH,4CAFW,IAAI,QAUd;AAED;;;;GAIG;AACH,qCAJW,IAAI,iBACJ,OAAO,qBAAqB,EAAE,OAAO,CAAC,IAAI,CAAC,wDAcrD;AAED;;;GAGG;AACH,wCAFW,IAAI;UAGO,QAAQ;aAAW,OAAO,oBAAoB,EAAE,OAAO;WAAS,OAAO,oBAAoB,EAAE,KAAK;UAAQ,OAAO,oBAAoB,EAAE,IAAI;IAqBhK;AAED;;;;;GAKG;AACH,2CALW,OAAO,iBAAiB,EAAE,UAAU,WACpC,MAAM,eACN,OAAO,yBAAyB,EAAE,OAAO,GACvC,QAAQ,OAAO,iBAAiB,EAAE,QAAQ,CAAC,CA6BvD;AAED;;GAEG;AACH,gDAFoB,IAAI,QAAE,IAAI,EAAE,KAAE,IAAI,+BAkBrC;AAED;;;;;;GAMG;AACH,4CAJW,IAAI,QACJ,MAAM,GACJ,IAAI,EAAE,CAalB;AAED;;;GAGG;AACH,0CAFW,IAAI,eAqBd;AAOD;;GAEG;AACH,kDAFW,OAAO,wBAAwB,EAAE,cAAc;;;EAczD;AAjBM,uCAFI,MAAM,WAE0D;iBA/O9B,WAAW;qBAFnC,eAAe"}
|
|
@@ -244,13 +244,6 @@ export function findUniqueViewNames(root) {
|
|
|
244
244
|
*/
|
|
245
245
|
export const isCustomViewName = (name) => !/^(layer|concat)\d+$/.test(name);
|
|
246
246
|
|
|
247
|
-
/**
|
|
248
|
-
* @param {View} viewRoot
|
|
249
|
-
*/
|
|
250
|
-
export function calculateViewRootSize(viewRoot) {
|
|
251
|
-
return viewRoot.getSize().addPadding(viewRoot.getOverhang());
|
|
252
|
-
}
|
|
253
|
-
|
|
254
247
|
/**
|
|
255
248
|
* @param {import("./layout/flexLayout.js").FlexDimensions} viewRootSize
|
|
256
249
|
*/
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
},
|
|
8
8
|
"contributors": [],
|
|
9
9
|
"license": "MIT",
|
|
10
|
-
"version": "0.
|
|
10
|
+
"version": "0.50.1",
|
|
11
11
|
"jsdelivr": "dist/bundle/index.js",
|
|
12
12
|
"unpkg": "dist/bundle/index.js",
|
|
13
13
|
"browser": "dist/bundle/index.js",
|
|
@@ -67,5 +67,5 @@
|
|
|
67
67
|
"devDependencies": {
|
|
68
68
|
"@types/long": "^4.0.1"
|
|
69
69
|
},
|
|
70
|
-
"gitHead": "
|
|
70
|
+
"gitHead": "f21b0f12e961366c12c1d514017c6270246801cc"
|
|
71
71
|
}
|