@genome-spy/core 0.49.0 → 0.50.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.
Files changed (57) hide show
  1. package/dist/bundle/index.es.js +2617 -2593
  2. package/dist/bundle/index.js +91 -91
  3. package/dist/schema.json +1752 -1090
  4. package/dist/src/gl/includes/common.glsl.js +1 -1
  5. package/dist/src/marks/link.d.ts +8 -1
  6. package/dist/src/marks/link.d.ts.map +1 -1
  7. package/dist/src/marks/link.fragment.glsl.js +1 -1
  8. package/dist/src/marks/link.js +38 -32
  9. package/dist/src/marks/link.vertex.glsl.js +1 -1
  10. package/dist/src/marks/mark.d.ts +18 -16
  11. package/dist/src/marks/mark.d.ts.map +1 -1
  12. package/dist/src/marks/mark.js +34 -23
  13. package/dist/src/marks/markUtils.d.ts +25 -0
  14. package/dist/src/marks/markUtils.d.ts.map +1 -1
  15. package/dist/src/marks/markUtils.js +41 -1
  16. package/dist/src/marks/point.common.glsl.js +1 -1
  17. package/dist/src/marks/point.d.ts +8 -1
  18. package/dist/src/marks/point.d.ts.map +1 -1
  19. package/dist/src/marks/point.js +29 -24
  20. package/dist/src/marks/point.vertex.glsl.js +1 -1
  21. package/dist/src/marks/rect.d.ts +8 -1
  22. package/dist/src/marks/rect.d.ts.map +1 -1
  23. package/dist/src/marks/rect.js +19 -19
  24. package/dist/src/marks/rule.d.ts +8 -1
  25. package/dist/src/marks/rule.d.ts.map +1 -1
  26. package/dist/src/marks/rule.js +19 -16
  27. package/dist/src/marks/text.d.ts +10 -1
  28. package/dist/src/marks/text.d.ts.map +1 -1
  29. package/dist/src/marks/text.fragment.glsl.js +1 -1
  30. package/dist/src/marks/text.js +48 -46
  31. package/dist/src/marks/text.vertex.glsl.js +1 -1
  32. package/dist/src/spec/channel.d.ts +14 -1
  33. package/dist/src/spec/mark.d.ts +128 -82
  34. package/dist/src/spec/view.d.ts +2 -7
  35. package/dist/src/tooltip/dataTooltipHandler.d.ts +1 -1
  36. package/dist/src/tooltip/dataTooltipHandler.d.ts.map +1 -1
  37. package/dist/src/tooltip/refseqGeneTooltipHandler.d.ts +1 -1
  38. package/dist/src/tooltip/refseqGeneTooltipHandler.d.ts.map +1 -1
  39. package/dist/src/view/axisResolution.d.ts +1 -1
  40. package/dist/src/view/axisResolution.d.ts.map +1 -1
  41. package/dist/src/view/axisResolution.js +1 -1
  42. package/dist/src/view/axisView.js +2 -2
  43. package/dist/src/view/flowBuilder.test.js +1 -1
  44. package/dist/src/view/gridView.js +1 -1
  45. package/dist/src/view/paramMediator.d.ts +7 -0
  46. package/dist/src/view/paramMediator.d.ts.map +1 -1
  47. package/dist/src/view/paramMediator.js +23 -0
  48. package/dist/src/view/paramMediator.test.js +20 -0
  49. package/dist/src/view/scaleResolution.d.ts +1 -7
  50. package/dist/src/view/scaleResolution.d.ts.map +1 -1
  51. package/dist/src/view/scaleResolution.js +24 -39
  52. package/dist/src/view/unitView.d.ts +3 -5
  53. package/dist/src/view/unitView.d.ts.map +1 -1
  54. package/dist/src/view/unitView.js +22 -4
  55. package/dist/src/view/viewUtils.d.ts +1 -1
  56. package/dist/src/view/viewUtils.d.ts.map +1 -1
  57. package/package.json +2 -2
@@ -46,7 +46,7 @@ export default class AxisResolution {
46
46
  *
47
47
  * @param {AxisResolutionMember} newMember
48
48
  */
49
- pushUnitView(newMember) {
49
+ addMember(newMember) {
50
50
  const { view } = newMember;
51
51
  const newScaleResolution = view.getScaleResolution(this.channel);
52
52
 
@@ -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").MarkProps} */
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").MarkProps} */ (
611
+ /** @type {import("../spec/mark.js").TextProps} */ (
612
612
  view.mark
613
613
  );
614
614
  }
@@ -23,7 +23,7 @@ function byPath(root, path) {
23
23
  return root;
24
24
  }
25
25
 
26
- /** @type {import("../spec/mark.js").MarkConfigAndType} */
26
+ /** @type {import("../spec/mark.js").MarkProps} */
27
27
  const mark = {
28
28
  type: "rect",
29
29
  tooltip: null,
@@ -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
- strokeOpacity: viewBackground.strokeOpacity ?? 1.0,
838
+ opacity: viewBackground.strokeOpacity ?? 1.0,
839
839
  type: "rule",
840
840
  clip: false,
841
841
  tooltip: null,
@@ -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":"AA2SA;;;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;AAraD;;;;;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;;CACJ;;;;;;4BAjS4F,MAAM,IAAI,KAAK,IAAI;gBAAc,MAAM,IAAI;gBAAc,MAAM,MAAM"}
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
- pushUnitView(newMember: ScaleResolutionMember): void;
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":"AA+7BA;;;;;;;;;;GAUG;AACH,6CAFW,OAAO,WAAW,EAAE,OAAO,GAAG,OAAO,WAAW,EAAE,OAAO,EAAE,QA4BrE;AAv7BD,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,wBAFW,qBAAqB,QA4B/B;IAuLD;;;;OAIG;IACH,qEAgBC;IAED;;;;OAIG;IACH,+DAMC;IAED;;OAEG;IACH,oBAyCC;IAED;;OAEG;IACH;eA3XkC,OAAO,kBAAkB,EAAE,KAAK;MAuajE;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,iBAgD1B;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;;CA2BJ;;;;;UAjzBS,OAAO,eAAe,EAAE,OAAO;aAC/B,CAAC;gBACD,OAAO,oBAAoB,EAAE,mBAAmB;qFACd,OAAO,oBAAoB,EAAE,IAAI"}
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
- pushUnitView(newMember) {
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.getConfiguredDomain();
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.getConfiguredDomain() ??
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
- // TODO: Optimize: extract domain only once if the views share the data.
409
- // In fact, this should be a responsibility of collectors.
410
- return this.#reduceDomains((member) =>
411
- member.dataDomainSource(member.channel, this.type)
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
- scale.domain([c - w / 2, c + w / 2]);
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 {Object.<string, typeof import("../marks/mark.js").default>}
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(): import("../spec/mark.js").MarkType;
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;QAHkB,MAAM,GAAE,cAAc,kBAAkB,EAAE,OAAO;EASjE;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,kDAIC;IAED;;;;;OAKG;IACH,iEAmFC;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;iBA7UgB,WAAW"}
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 {Object.<string, typeof import("../marks/mark.js").default>}
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].pushUnitView({
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
- view.resolutions[type][targetChannel].pushUnitView({
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: this.extractDataDomain.bind(this),
263
+ dataDomainSource,
246
264
  });
247
265
  }
248
266
  }
@@ -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
  *
@@ -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,wCAMd;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,gDAFW,IAAI,mDAId;AAED;;GAEG;AACH,kDAFW,OAAO,wBAAwB,EAAE,cAAc;;;EAczD;AAxBM,uCAFI,MAAM,WAE0D;iBA/O9B,WAAW;qBAFnC,eAAe"}
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,gDAFW,IAAI,mDAId;AAED;;GAEG;AACH,kDAFW,OAAO,wBAAwB,EAAE,cAAc;;;EAczD;AAxBM,uCAFI,MAAM,WAE0D;iBA/O9B,WAAW;qBAFnC,eAAe"}
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  },
8
8
  "contributors": [],
9
9
  "license": "MIT",
10
- "version": "0.49.0",
10
+ "version": "0.50.0",
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": "33055fe37370459fb09d37cea3cf456b52a9893b"
70
+ "gitHead": "39de1ffdcfdaefe9f34a4d6e092378ccffd267c9"
71
71
  }