@genome-spy/core 0.50.2 → 0.52.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.
@@ -55,6 +55,9 @@ export function makeConstantExprRef(value: any): ExprRefFunction;
55
55
  * A class that manages parameters and expressions.
56
56
  * Supports nesting and scoped parameters.
57
57
  *
58
+ * TODO: The proposed JavaScript signals may provide a better way to implement this.
59
+ * https://github.com/proposal-signals/proposal-signals
60
+ *
58
61
  * @typedef {import("../utils/expression.js").ExpressionFunction & { addListener: (listener: () => void) => void, invalidate: () => void, identifier: () => string}} ExprRefFunction
59
62
  */
60
63
  export default class ParamMediator {
@@ -107,9 +110,8 @@ export default class ParamMediator {
107
110
  *
108
111
  * @param {string} paramName
109
112
  * @returns {ParamMediator}
110
- * @protected
111
113
  */
112
- protected findMediatorForParam(paramName: string): ParamMediator;
114
+ findMediatorForParam(paramName: string): ParamMediator;
113
115
  /**
114
116
  * Parse expr and return a function that returns the value of the parameter.
115
117
  *
@@ -134,6 +136,9 @@ export default class ParamMediator {
134
136
  /**
135
137
  * A class that manages parameters and expressions.
136
138
  * Supports nesting and scoped parameters.
139
+ *
140
+ * TODO: The proposed JavaScript signals may provide a better way to implement this.
141
+ * https://github.com/proposal-signals/proposal-signals
137
142
  */
138
143
  export type ExprRefFunction = ((datum?: import("../data/flowNode.js").Datum) => any) & import("../utils/expression.js").ExpressionProps & {
139
144
  addListener: (listener: () => void) => void;
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"paramMediator.d.ts","sourceRoot":"","sources":["../../../src/view/paramMediator.js"],"names":[],"mappings":"AAoUA;;;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;AA9bD;;;;;;;;GAQG;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;;;;OAIG;IACH,gCAHW,MAAM,GACJ,aAAa,CAQzB;IAID;;;;OAIG;IACH,uBAFW,MAAM,mBA4EhB;IAED;;;;OAIG;IACH,qBAFW,MAAM,OAKhB;IAED;;;;;OAKG;IACH,sBAFa,OAAO,CAiBnB;;CACJ;;;;;;;;;4BAvT4F,MAAM,IAAI,KAAK,IAAI;gBAAc,MAAM,IAAI;gBAAc,MAAM,MAAM"}
@@ -6,6 +6,9 @@ import { createSinglePointSelection } from "../selection/selection.js";
6
6
  * A class that manages parameters and expressions.
7
7
  * Supports nesting and scoped parameters.
8
8
  *
9
+ * TODO: The proposed JavaScript signals may provide a better way to implement this.
10
+ * https://github.com/proposal-signals/proposal-signals
11
+ *
9
12
  * @typedef {import("../utils/expression.js").ExpressionFunction & { addListener: (listener: () => void) => void, invalidate: () => void, identifier: () => string}} ExprRefFunction
10
13
  */
11
14
  export default class ParamMediator {
@@ -193,7 +196,6 @@ export default class ParamMediator {
193
196
  *
194
197
  * @param {string} paramName
195
198
  * @returns {ParamMediator}
196
- * @protected
197
199
  */
198
200
  findMediatorForParam(paramName) {
199
201
  if (this.#paramValues.has(paramName)) {
@@ -28,7 +28,11 @@ export const VISIT_STOP: "VISIT_STOP";
28
28
  * @prop {boolean} [blockEncodingInheritance]
29
29
  * Don't inherit encodings from parent. Default: false.
30
30
  * @prop {boolean} [contributesToScaleDomain]
31
- * Whether ScaleResolution should include this view or its children in the domain. Default: true
31
+ * Whether ScaleResolution should include this view or its children in the
32
+ * domain. Default: true
33
+ * @prop {boolean} [layersChildren]
34
+ * View's children are layered on top of each other and they have the same
35
+ * coordinates as their parent.
32
36
  */
33
37
  export default class View {
34
38
  /**
@@ -76,12 +80,19 @@ export default class View {
76
80
  */
77
81
  blockEncodingInheritance: boolean;
78
82
  /**
79
- * Whether ScaleResolution should include this view or its children in the domain. Default: true
83
+ * Whether ScaleResolution should include this view or its children in the
84
+ * domain. Default: true
80
85
  */
81
86
  contributesToScaleDomain: boolean;
87
+ /**
88
+ * View's children are layered on top of each other and they have the same
89
+ * coordinates as their parent.
90
+ */
91
+ layersChildren?: boolean;
82
92
  };
83
93
  /**
84
94
  * Whether GridView or equivalent should draw axis and grid lines for this view.
95
+ * TODO: Use view options for this.
85
96
  * @type {Record<import("../spec/channel.js").PrimaryPositionalChannel, boolean>}
86
97
  */
87
98
  needsAxes: Record<import("../spec/channel.js").PrimaryPositionalChannel, boolean>;
@@ -328,9 +339,15 @@ export type ViewOptions = {
328
339
  */
329
340
  blockEncodingInheritance?: boolean;
330
341
  /**
331
- * Whether ScaleResolution should include this view or its children in the domain. Default: true
342
+ * Whether ScaleResolution should include this view or its children in the
343
+ * domain. Default: true
332
344
  */
333
345
  contributesToScaleDomain?: boolean;
346
+ /**
347
+ * View's children are layered on top of each other and they have the same
348
+ * coordinates as their parent.
349
+ */
350
+ layersChildren?: boolean;
334
351
  };
335
352
  import ParamMediator from "./paramMediator.js";
336
353
  import Padding from "./layout/padding.js";
@@ -1 +1 @@
1
- {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/view/view.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/view/view.js"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@ import { peek } from "../utils/arrayUtils.js";
18
18
  import ViewError from "./viewError.js";
19
19
  import ParamMediator, { isExprRef } from "./paramMediator.js";
20
20
  import { InternMap } from "internmap";
21
+ import { endWithSlash } from "../utils/addBaseUrl.js";
21
22
 
22
23
  // TODO: View classes have too many responsibilities. Come up with a way
23
24
  // to separate the concerns. However, most concerns are tightly tied to
@@ -58,7 +59,11 @@ const defaultOpacityFunction = (parentOpacity) => parentOpacity;
58
59
  * @prop {boolean} [blockEncodingInheritance]
59
60
  * Don't inherit encodings from parent. Default: false.
60
61
  * @prop {boolean} [contributesToScaleDomain]
61
- * Whether ScaleResolution should include this view or its children in the domain. Default: true
62
+ * Whether ScaleResolution should include this view or its children in the
63
+ * domain. Default: true
64
+ * @prop {boolean} [layersChildren]
65
+ * View's children are layered on top of each other and they have the same
66
+ * coordinates as their parent.
62
67
  */
63
68
  export default class View {
64
69
  /** @type {Record<string, (function(BroadcastMessage):void)[]>} */
@@ -70,6 +75,12 @@ export default class View {
70
75
  /** @type {Record<string, InteractionEventListener[]>} */
71
76
  #nonCapturingInteractionEventListeners = {};
72
77
 
78
+ /** @type {(value: number) => void} */
79
+ #widthSetter;
80
+
81
+ /** @type {(value: number) => void} */
82
+ #heightSetter;
83
+
73
84
  /**
74
85
  * @type {function(number):number}
75
86
  */
@@ -127,6 +138,7 @@ export default class View {
127
138
 
128
139
  /**
129
140
  * Whether GridView or equivalent should draw axis and grid lines for this view.
141
+ * TODO: Use view options for this.
130
142
  * @type {Record<import("../spec/channel.js").PrimaryPositionalChannel, boolean>}
131
143
  */
132
144
  this.needsAxes = { x: false, y: false };
@@ -141,6 +153,19 @@ export default class View {
141
153
  this.paramMediator.registerParam(param);
142
154
  }
143
155
  }
156
+
157
+ // All descendants of a layer view have the same coordinates - no need to redefine.
158
+ if (!this.layoutParent?.options.layeredChildren) {
159
+ // Width and height can be overriden by the view spec. Typically it
160
+ // doesn't make much sense, but it's used in the App's SampleView
161
+ // to set the height to sample facets' height.
162
+ const allocateIfFree = (/** @type {string} */ name) =>
163
+ this.paramMediator.findMediatorForParam(name)
164
+ ? undefined
165
+ : this.paramMediator.allocateSetter(name, 0);
166
+ this.#heightSetter = allocateIfFree("height");
167
+ this.#widthSetter = allocateIfFree("width");
168
+ }
144
169
  }
145
170
 
146
171
  /**
@@ -503,6 +528,9 @@ export default class View {
503
528
  options.clipRect ? coords.intersect(options.clipRect) : coords
504
529
  );
505
530
 
531
+ this.#widthSetter?.(coords.width);
532
+ this.#heightSetter?.(coords.height);
533
+
506
534
  // override
507
535
  }
508
536
 
@@ -647,7 +675,7 @@ export default class View {
647
675
  getBaseUrl() {
648
676
  return concatUrl(
649
677
  () => this.dataParent?.getBaseUrl(),
650
- this.spec.baseUrl
678
+ endWithSlash(this.spec.baseUrl)
651
679
  );
652
680
  }
653
681
 
@@ -164,7 +164,15 @@ describe("Utility methods", () => {
164
164
  layer: [],
165
165
  },
166
166
  LayerView
167
- ).then((view) => expect(view.getBaseUrl()).toEqual("blaa"));
167
+ ).then((view) => expect(view.getBaseUrl()).toEqual("blaa/"));
168
+
169
+ await createAndInitialize(
170
+ {
171
+ baseUrl: "blaa/",
172
+ layer: [],
173
+ },
174
+ LayerView
175
+ ).then((view) => expect(view.getBaseUrl()).toEqual("blaa/"));
168
176
 
169
177
  await createAndInitialize(
170
178
  {
@@ -172,7 +180,9 @@ describe("Utility methods", () => {
172
180
  layer: [],
173
181
  },
174
182
  LayerView
175
- ).then((view) => expect(view.getBaseUrl()).toEqual("https://site.com"));
183
+ ).then((view) =>
184
+ expect(view.getBaseUrl()).toEqual("https://site.com/")
185
+ );
176
186
 
177
187
  await createAndInitialize(
178
188
  {
@@ -187,7 +197,7 @@ describe("Utility methods", () => {
187
197
  LayerView
188
198
  ).then((view) =>
189
199
  expect(view.children[0].getBaseUrl()).toEqual(
190
- "https://site.com/blaa"
200
+ "https://site.com/blaa/"
191
201
  )
192
202
  );
193
203
 
@@ -204,7 +214,7 @@ describe("Utility methods", () => {
204
214
  LayerView
205
215
  ).then((view) =>
206
216
  expect(view.children[0].getBaseUrl()).toEqual(
207
- "https://another-site.com"
217
+ "https://another-site.com/"
208
218
  )
209
219
  );
210
220
 
@@ -226,7 +236,7 @@ describe("Utility methods", () => {
226
236
  ).then((view) =>
227
237
  // @ts-ignore
228
238
  expect(view.children[0].children[0].getBaseUrl()).toEqual(
229
- "https://site.com/blaa"
239
+ "https://site.com/blaa/"
230
240
  )
231
241
  );
232
242
  });
@@ -81,7 +81,6 @@ export function calculateCanvasSize(viewRoot: import("./view.js").default): {
81
81
  width: number;
82
82
  height: number;
83
83
  };
84
- export function isCustomViewName(name: string): boolean;
85
84
  import View from "./view.js";
86
85
  import UnitView from "./unitView.js";
87
86
  //# sourceMappingURL=viewUtils.d.ts.map
@@ -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,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,CAsCvD;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,8CAFW,OAAO,WAAW,EAAE,OAAO;;;EAoBrC;AAvBM,uCAFI,MAAM,WAE0D;iBAzP9B,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,CAsCvD;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;AAED;;GAEG;AACH,8CAFW,OAAO,WAAW,EAAE,OAAO;;;EAoBrC;iBA3Q4C,WAAW;qBAFnC,eAAe"}
@@ -248,11 +248,6 @@ export function findUniqueViewNames(root) {
248
248
  );
249
249
  }
250
250
 
251
- /**
252
- * @param {string} name
253
- */
254
- export const isCustomViewName = (name) => !/^(layer|concat)\d+$/.test(name);
255
-
256
251
  /**
257
252
  * @param {import("./view.js").default} viewRoot
258
253
  */
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  },
8
8
  "contributors": [],
9
9
  "license": "MIT",
10
- "version": "0.50.2",
10
+ "version": "0.52.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": "4d37043854a961111612b046d8e49e285db81ee0"
70
+ "gitHead": "aceb97cdd0034ba92528a22687786b25bfee0def"
71
71
  }