@genome-spy/core 0.40.0 → 0.42.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 (104) hide show
  1. package/dist/bundle/index--cKb-dKG.js +615 -0
  2. package/dist/bundle/{index-gn8bhQ8w.js → index-d7k3kkin.js} +365 -366
  3. package/dist/bundle/index.es.js +4260 -3928
  4. package/dist/bundle/index.js +115 -80
  5. package/dist/schema.json +254 -52
  6. package/dist/src/data/sources/dynamic/axisGenomeSource.js +1 -1
  7. package/dist/src/data/sources/dynamic/axisTickSource.js +3 -3
  8. package/dist/src/data/sources/dynamic/bamSource.d.ts +3 -21
  9. package/dist/src/data/sources/dynamic/bamSource.d.ts.map +1 -1
  10. package/dist/src/data/sources/dynamic/bamSource.js +38 -55
  11. package/dist/src/data/sources/dynamic/bigBedSource.d.ts +2 -38
  12. package/dist/src/data/sources/dynamic/bigBedSource.d.ts.map +1 -1
  13. package/dist/src/data/sources/dynamic/bigBedSource.js +14 -71
  14. package/dist/src/data/sources/dynamic/bigWigSource.d.ts +4 -42
  15. package/dist/src/data/sources/dynamic/bigWigSource.d.ts.map +1 -1
  16. package/dist/src/data/sources/dynamic/bigWigSource.js +23 -60
  17. package/dist/src/data/sources/dynamic/gff3Source.d.ts.map +1 -1
  18. package/dist/src/data/sources/dynamic/gff3Source.js +1 -0
  19. package/dist/src/data/sources/dynamic/indexedFastaSource.d.ts +2 -20
  20. package/dist/src/data/sources/dynamic/indexedFastaSource.d.ts.map +1 -1
  21. package/dist/src/data/sources/dynamic/indexedFastaSource.js +23 -41
  22. package/dist/src/data/sources/dynamic/singleAxisLazySource.d.ts +23 -4
  23. package/dist/src/data/sources/dynamic/singleAxisLazySource.d.ts.map +1 -1
  24. package/dist/src/data/sources/dynamic/singleAxisLazySource.js +29 -4
  25. package/dist/src/data/sources/dynamic/singleAxisWindowedSource.d.ts +60 -0
  26. package/dist/src/data/sources/dynamic/singleAxisWindowedSource.d.ts.map +1 -0
  27. package/dist/src/data/sources/dynamic/singleAxisWindowedSource.js +152 -0
  28. package/dist/src/data/sources/dynamic/tabixSource.d.ts +6 -40
  29. package/dist/src/data/sources/dynamic/tabixSource.d.ts.map +1 -1
  30. package/dist/src/data/sources/dynamic/tabixSource.js +29 -78
  31. package/dist/src/data/transforms/regexFold.d.ts.map +1 -1
  32. package/dist/src/data/transforms/regexFold.js +8 -0
  33. package/dist/src/data/transforms/regexFold.test.js +28 -0
  34. package/dist/src/encoder/accessor.js +4 -2
  35. package/dist/src/genomeSpy.d.ts +16 -0
  36. package/dist/src/genomeSpy.d.ts.map +1 -1
  37. package/dist/src/genomeSpy.js +119 -8
  38. package/dist/src/gl/link.vertex.glsl.js +1 -1
  39. package/dist/src/gl/point.common.glsl.js +2 -0
  40. package/dist/src/gl/point.fragment.glsl.js +1 -1
  41. package/dist/src/gl/point.vertex.glsl.js +1 -1
  42. package/dist/src/gl/rect.vertex.glsl.js +1 -1
  43. package/dist/src/gl/rule.common.glsl.js +2 -0
  44. package/dist/src/gl/rule.fragment.glsl.js +1 -1
  45. package/dist/src/gl/rule.vertex.glsl.js +1 -1
  46. package/dist/src/gl/text.common.glsl.js +2 -0
  47. package/dist/src/gl/text.fragment.glsl.js +1 -1
  48. package/dist/src/gl/text.vertex.glsl.js +1 -1
  49. package/dist/src/gl/webGLHelper.d.ts +6 -21
  50. package/dist/src/gl/webGLHelper.d.ts.map +1 -1
  51. package/dist/src/gl/webGLHelper.js +7 -38
  52. package/dist/src/img/90-ring-with-bg.svg +1 -0
  53. package/dist/src/img/README.md +5 -0
  54. package/dist/src/marks/link.d.ts +7 -0
  55. package/dist/src/marks/link.d.ts.map +1 -1
  56. package/dist/src/marks/link.js +99 -50
  57. package/dist/src/marks/mark.d.ts +34 -0
  58. package/dist/src/marks/mark.d.ts.map +1 -1
  59. package/dist/src/marks/mark.js +83 -1
  60. package/dist/src/marks/pointMark.d.ts.map +1 -1
  61. package/dist/src/marks/pointMark.js +21 -9
  62. package/dist/src/marks/rectMark.d.ts +1 -2
  63. package/dist/src/marks/rectMark.d.ts.map +1 -1
  64. package/dist/src/marks/rectMark.js +28 -17
  65. package/dist/src/marks/rule.d.ts.map +1 -1
  66. package/dist/src/marks/rule.js +17 -6
  67. package/dist/src/marks/text.d.ts.map +1 -1
  68. package/dist/src/marks/text.js +32 -18
  69. package/dist/src/paramBroker.d.ts +30 -0
  70. package/dist/src/paramBroker.d.ts.map +1 -0
  71. package/dist/src/paramBroker.js +102 -0
  72. package/dist/src/spec/data.d.ts +28 -13
  73. package/dist/src/spec/mark.d.ts +27 -26
  74. package/dist/src/spec/view.d.ts +2 -1
  75. package/dist/src/styles/genome-spy.css.d.ts +1 -1
  76. package/dist/src/styles/genome-spy.css.d.ts.map +1 -1
  77. package/dist/src/styles/genome-spy.css.js +33 -4
  78. package/dist/src/styles/genome-spy.scss +40 -4
  79. package/dist/src/types/viewContext.d.ts +11 -0
  80. package/dist/src/utils/binnedIndex.d.ts +2 -0
  81. package/dist/src/utils/binnedIndex.d.ts.map +1 -1
  82. package/dist/src/utils/binnedIndex.js +59 -10
  83. package/dist/src/utils/binnedIndex.test.js +46 -0
  84. package/dist/src/utils/expression.d.ts +12 -2
  85. package/dist/src/utils/expression.d.ts.map +1 -1
  86. package/dist/src/utils/expression.js +68 -9
  87. package/dist/src/utils/linearstep.d.ts +7 -0
  88. package/dist/src/utils/linearstep.d.ts.map +1 -0
  89. package/dist/src/utils/linearstep.js +10 -0
  90. package/dist/src/view/gridView.d.ts.map +1 -1
  91. package/dist/src/view/gridView.js +2 -0
  92. package/dist/src/view/layerView.d.ts.map +1 -1
  93. package/dist/src/view/layerView.js +2 -0
  94. package/dist/src/view/unitView.d.ts +0 -6
  95. package/dist/src/view/unitView.d.ts.map +1 -1
  96. package/dist/src/view/unitView.js +2 -9
  97. package/dist/src/view/view.d.ts +6 -0
  98. package/dist/src/view/view.d.ts.map +1 -1
  99. package/dist/src/view/view.js +17 -0
  100. package/package.json +3 -3
  101. package/dist/bundle/index-Cbz74kpR.js +0 -638
  102. package/dist/src/data/sources/dynamic/windowedMixin.d.ts +0 -32
  103. package/dist/src/data/sources/dynamic/windowedMixin.d.ts.map +0 -1
  104. package/dist/src/data/sources/dynamic/windowedMixin.js +0 -53
@@ -15,6 +15,8 @@ const MIN_INTEGER = -(2 ** 31);
15
15
  * A binned index for (overlapping) ranges that are sorted by their start position.
16
16
  * Each indexed range is associated with respective vertex indices.
17
17
  *
18
+ * The indexing scheme is somewhat similar to Tabix (https://academic.oup.com/bioinformatics/article/27/5/718/262743).
19
+ *
18
20
  * @param {number} size Number of bins
19
21
  * @param {[number, number]} domain Domain of positions
20
22
  * @param {(datum: T) => number} accessor Accessor for range's start position
@@ -27,13 +29,15 @@ export function createBinningRangeIndexer(
27
29
  accessor,
28
30
  accessor2 = accessor
29
31
  ) {
30
- const startIndices = new Int32Array(size);
32
+ const startIndices = new Array(size);
31
33
  startIndices.fill(MAX_INTEGER);
32
34
 
33
35
  let lastIndex = MIN_INTEGER;
36
+ let lastStart = -Infinity;
34
37
  let unordered = false;
35
38
 
36
- const endIndices = new Int32Array(size);
39
+ const endIndices = new Array(size);
40
+ endIndices.fill(0);
37
41
 
38
42
  const start = domain[0];
39
43
  const domainLength = domain[1] - domain[0];
@@ -63,17 +67,33 @@ export function createBinningRangeIndexer(
63
67
  * @param {number} endVertexIndex
64
68
  */
65
69
  function binningIndexer(datum, startVertexIndex, endVertexIndex) {
70
+ if (unordered) {
71
+ return;
72
+ }
73
+
66
74
  if (startVertexIndex > lastIndex) {
67
75
  lastIndex = startVertexIndex;
68
- } else if (!unordered) {
76
+ } else {
69
77
  unordered = true;
70
78
  // TODO: Contextual info like view path
71
79
  console.debug(
72
80
  "Items are not ordered properly. Disabling binned index."
73
81
  );
82
+ return;
74
83
  }
75
84
 
76
85
  const value = accessor(datum);
86
+
87
+ if (value < lastStart) {
88
+ unordered = true;
89
+ // TODO: Contextual info like view path
90
+ console.debug(
91
+ "Items are not ordered properly. Disabling binned index."
92
+ );
93
+ return;
94
+ }
95
+ lastStart = value;
96
+
77
97
  const bin = getBin(value, false);
78
98
 
79
99
  if (startIndices[bin] > startVertexIndex) {
@@ -93,18 +113,42 @@ export function createBinningRangeIndexer(
93
113
  * @param {number} endVertexIndex
94
114
  */
95
115
  function binningRangeIndexer(datum, startVertexIndex, endVertexIndex) {
116
+ if (unordered) {
117
+ return;
118
+ }
119
+
96
120
  if (startVertexIndex > lastIndex) {
97
121
  lastIndex = startVertexIndex;
98
- } else if (!unordered) {
122
+ } else {
99
123
  unordered = true;
100
124
  // TODO: Contextual info like view path
101
125
  console.debug(
102
- "Items are not ordered properly. Disabling binned index."
126
+ "Items (vertices) are not ordered properly. Disabling binned index."
103
127
  );
128
+ return;
104
129
  }
105
130
 
106
131
  const start = accessor(datum);
107
132
  const end = accessor2(datum);
133
+
134
+ if (start < lastStart) {
135
+ unordered = true;
136
+ // TODO: Contextual info like view path
137
+ console.debug(
138
+ "Items are not ordered properly. Disabling binned index."
139
+ );
140
+ return;
141
+ } else if (end < start) {
142
+ unordered = true;
143
+ // TODO: Contextual info like view path
144
+ console.debug(
145
+ "End index is less than start index. Disabling binned index. Datum: ",
146
+ datum
147
+ );
148
+ return;
149
+ }
150
+ lastStart = start;
151
+
108
152
  const startBin = getBin(start, false);
109
153
  const endBin = getBin(end, true);
110
154
 
@@ -135,7 +179,16 @@ export function createBinningRangeIndexer(
135
179
  return arr;
136
180
  };
137
181
 
182
+ /**
183
+ * Finalizes the index and returns a lookup function.
184
+ *
185
+ * @returns {Lookup}
186
+ */
138
187
  const getIndex = () => {
188
+ if (unordered) {
189
+ return undefined;
190
+ }
191
+
139
192
  for (let i = 1; i < endIndices.length; i++) {
140
193
  if (endIndices[i] < endIndices[i - 1]) {
141
194
  endIndices[i] = endIndices[i - 1];
@@ -159,9 +212,5 @@ export function createBinningRangeIndexer(
159
212
  binningIndexer.getIndex = getIndex;
160
213
  binningRangeIndexer.getIndex = getIndex;
161
214
 
162
- if (unordered) {
163
- return undefined;
164
- } else {
165
- return accessor == accessor2 ? binningIndexer : binningRangeIndexer;
166
- }
215
+ return accessor == accessor2 ? binningIndexer : binningRangeIndexer;
167
216
  }
@@ -152,4 +152,50 @@ describe("Binning Indexer", () => {
152
152
  expect(index(115, 116)).toEqual([4, 8]);
153
153
  expect(index(135, 145)).toEqual([6, 10]);
154
154
  });
155
+
156
+ test("Unordered ranges disable the index", () => {
157
+ const items = [
158
+ [10, 30],
159
+ [25, 50],
160
+
161
+ [112, 139],
162
+ [102, 129], // <- Unordered!
163
+ [121, 149],
164
+ ];
165
+ const indexer = createBinningRangeIndexer(
166
+ 100,
167
+ [0, 1000],
168
+ (x) => x[0],
169
+ (x) => x[1]
170
+ );
171
+
172
+ items.forEach((x, i) => indexer(x, i * 2, (i + 1) * 2));
173
+
174
+ const index = indexer.getIndex();
175
+
176
+ expect(index).toBeUndefined();
177
+ });
178
+
179
+ test("Inverted ranges disable the index", () => {
180
+ const items = [
181
+ [10, 30],
182
+ [25, 50],
183
+
184
+ [102, 129],
185
+ [139, 112], // <- Inverted!
186
+ [121, 149],
187
+ ];
188
+ const indexer = createBinningRangeIndexer(
189
+ 100,
190
+ [0, 1000],
191
+ (x) => x[0],
192
+ (x) => x[1]
193
+ );
194
+
195
+ items.forEach((x, i) => indexer(x, i * 2, (i + 1) * 2));
196
+
197
+ const index = indexer.getIndex();
198
+
199
+ expect(index).toBeUndefined();
200
+ });
155
201
  });
@@ -1,9 +1,19 @@
1
1
  /**
2
+ * @typedef { object } ExpressionProps
3
+ * @prop { string[] } fields
4
+ * @prop { string[] } globals
5
+ * @prop { string } code
6
+ *
7
+ * @typedef { ((x: object) => any) & ExpressionProps } ExpressionFunction
2
8
  *
3
9
  * @param {string} expr
10
+ * @returns {ExpressionFunction}
4
11
  */
5
- export default function createFunction(expr: string, globalObject?: {}): {
6
- (x: object): any;
12
+ export default function createFunction(expr: string, globalObject?: {}): ExpressionFunction;
13
+ export type ExpressionProps = {
7
14
  fields: string[];
15
+ globals: string[];
16
+ code: string;
8
17
  };
18
+ export type ExpressionFunction = ((x: object) => any) & ExpressionProps;
9
19
  //# sourceMappingURL=expression.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../../src/utils/expression.js"],"names":[],"mappings":"AAEA;;;GAGG;AACH,6CAFW,MAAM;QAqBwB,MAAM;;EAO9C"}
1
+ {"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../../src/utils/expression.js"],"names":[],"mappings":"AAyDA;;;;;;;;;;GAUG;AACH,6CAHW,MAAM,sBACJ,kBAAkB,CAyB9B;;YAhCU,MAAM,EAAE;aACR,MAAM,EAAE;UACR,MAAM;;sCAEE,MAAM,KAAK,GAAG"}
@@ -1,17 +1,72 @@
1
- import { parseExpression, codegenExpression } from "vega-expression";
1
+ import { parseExpression, codegenExpression, functions } from "vega-expression";
2
+ import {
3
+ isArray,
4
+ isBoolean,
5
+ isNumber,
6
+ isObject,
7
+ isRegExp,
8
+ isString,
9
+ lerp,
10
+ } from "vega-util";
11
+ import smoothstep from "./smoothstep.js";
12
+ import clamp from "./clamp.js";
13
+ import linearstep from "./linearstep.js";
2
14
 
3
15
  /**
16
+ * Some bits are adapted from https://github.com/vega/vega/blob/main/packages/vega-functions/src/codegen.js
17
+ */
18
+ const functionContext = {
19
+ clamp,
20
+ isArray,
21
+ isBoolean,
22
+ isDefined(/** @type {any} */ _) {
23
+ return _ !== undefined;
24
+ },
25
+ isNumber,
26
+ isObject,
27
+ isRegExp,
28
+ isString,
29
+ isValid(/** @type {any} */ _) {
30
+ // eslint-disable-next-line no-self-compare
31
+ return _ != null && _ === _;
32
+ },
33
+ lerp,
34
+ linearstep,
35
+ smoothstep,
36
+ };
37
+
38
+ /**
39
+ * @param {typeof codegenExpression} codegen
40
+ */
41
+ function buildFunctions(codegen) {
42
+ const fn = functions(codegen);
43
+ // eslint-disable-next-line guard-for-in
44
+ for (const name in functionContext) {
45
+ fn[name] = `this.${name}`;
46
+ }
47
+ return fn;
48
+ }
49
+
50
+ const cg = codegenExpression({
51
+ forbidden: [],
52
+ allowed: ["datum"],
53
+ globalvar: "globalObject",
54
+ fieldvar: "datum",
55
+ functions: buildFunctions,
56
+ });
57
+
58
+ /**
59
+ * @typedef { object } ExpressionProps
60
+ * @prop { string[] } fields
61
+ * @prop { string[] } globals
62
+ * @prop { string } code
63
+ *
64
+ * @typedef { ((x: object) => any) & ExpressionProps } ExpressionFunction
4
65
  *
5
66
  * @param {string} expr
67
+ * @returns {ExpressionFunction}
6
68
  */
7
69
  export default function createFunction(expr, globalObject = {}) {
8
- const cg = codegenExpression({
9
- forbidden: [],
10
- allowed: ["datum"],
11
- globalvar: "globalObject",
12
- fieldvar: "datum",
13
- });
14
-
15
70
  try {
16
71
  const parsed = parseExpression(expr);
17
72
  const generatedCode = cg(parsed);
@@ -21,11 +76,15 @@ export default function createFunction(expr, globalObject = {}) {
21
76
  "datum",
22
77
  "globalObject",
23
78
  `"use strict"; return (${generatedCode.code});`
24
- );
79
+ ).bind(functionContext);
25
80
 
81
+ /** @type { ExpressionFunction } */
26
82
  const exprFunction = /** @param {object} x */ (x) =>
27
83
  fn(x, globalObject);
28
84
  exprFunction.fields = generatedCode.fields;
85
+ exprFunction.globals = generatedCode.globals;
86
+ exprFunction.code = generatedCode.code;
87
+
29
88
  return exprFunction;
30
89
  } catch (e) {
31
90
  throw new Error(`Invalid expression: ${expr}, ${e.message}`);
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @param {number} edge0
3
+ * @param {number} edge1
4
+ * @param {number} x
5
+ */
6
+ export default function linearstep(edge0: number, edge1: number, x: number): number;
7
+ //# sourceMappingURL=linearstep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linearstep.d.ts","sourceRoot":"","sources":["../../../src/utils/linearstep.js"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,0CAJW,MAAM,SACN,MAAM,KACN,MAAM,UAIhB"}
@@ -0,0 +1,10 @@
1
+ import clamp from "./clamp.js";
2
+
3
+ /**
4
+ * @param {number} edge0
5
+ * @param {number} edge1
6
+ * @param {number} x
7
+ */
8
+ export default function linearstep(edge0, edge1, x) {
9
+ return clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);
10
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"gridView.d.ts","sourceRoot":"","sources":["../../../src/view/gridView.js"],"names":[],"mappings":"AAkwBA;;;GAGG;AACH,iDAHW,OAAO,iBAAiB,EAAE,cAAc,GACtC,OAAO,iBAAiB,EAAE,QAAQ,CAwB9C;AAED;;;GAGG;AACH,uDAHW,OAAO,iBAAiB,EAAE,cAAc,GACtC,OAAO,iBAAiB,EAAE,QAAQ,CA6C9C;AA2BD;;GAEG;AACH,8EAUC;AAED;;;;;GAKG;AACH,4CAJW,OAAO,uBAAuB,EAAE,OAAO,UACvC,OAAO,iBAAiB,EAAE,UAAU,YACpC,QAAQ,aAmBlB;AAz3BD;;;;;;;;;;;;;;;GAeG;AACH;IA6BI;;;;;;;;;OASG;IACH,kBARW,OAAO,iBAAiB,EAAE,aAAa,WACvC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,aAAa,iDAEb,MAAM,WACN,MAAM,YACN,OAAO,WAAW,EAAE,WAAW,EAoBzC;IARG,8CAAgB;IAOhB,uBAA0B;IAG9B;;OAEG;IACH,qDAIC;IAeD;;OAEG;IACH,wDAKC;IAqBD;;OAEG;IACH,8CAEC;IAED,yBAEC;IAED;;OAEG;IACH,wCAmCC;IA2OD;;;;OAIG;IAEH,gBALW,OAAO,4CAA4C,EAAE,OAAO,UAC5D,OAAO,uBAAuB,EAAE,OAAO,YACvC,OAAO,uBAAuB,EAAE,gBAAgB,QA2O1D;;CAmGJ;AAgJD;IACI;;;;OAIG;IACH,6DAHW,aAAa,UACb,MAAM,EAoFhB;IAjFG,4BAAgC;IAChC,kCAAgB;IAChB,eAAoB;IAEpB,uBAAuB;IACvB,YADW,QAAQ,CACQ;IAE3B,uBAAuB;IACvB,kBADW,QAAQ,CACc;IAEjC,mFAAmF;IACnF,MADW,QAAQ,OAAO,OAAO,iBAAiB,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAC5D;IAEd,4FAA4F;IAC5F,WADW,QAAQ,OAAO,OAAO,iBAAiB,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAC3D;IAEnB,0DAA0D;IAC1D,kEAAoB;IAEpB,uBAAuB;IACvB,OADW,QAAQ,CACG;IAEtB,wBAAwB;IACxB,QADW,SAAS,CACQ;IA4DhC,uEAcC;IAED;;OAEG;IACH,4BAkKC;IAED,uBAqBC;IAED,iCAEC;CACJ;qBA9qC0D,eAAe;sBAFpD,uBAAuB;0BAGnB,oBAAoB;qBAGzB,eAAe;yBALX,mBAAmB;AAirC5C;IACI;;;OAGG;IACH,uBAHW,SAAS,8CAyFnB;IAtDG;;;MAAoB;IACpB,2CAAsC;IAKtC,uBAAuB;IAEvB,wBAAwB;IACxB,2BAAqC;IA+CzC,0BAKC;IAWD;;;;OAIG;IACH,gCAHW,SAAS,UACT,SAAS,QA8CnB;IA7BG,0BAAsE;CA8B7E;oBAl1CmB,qBAAqB"}
1
+ {"version":3,"file":"gridView.d.ts","sourceRoot":"","sources":["../../../src/view/gridView.js"],"names":[],"mappings":"AAowBA;;;GAGG;AACH,iDAHW,OAAO,iBAAiB,EAAE,cAAc,GACtC,OAAO,iBAAiB,EAAE,QAAQ,CAwB9C;AAED;;;GAGG;AACH,uDAHW,OAAO,iBAAiB,EAAE,cAAc,GACtC,OAAO,iBAAiB,EAAE,QAAQ,CA6C9C;AA2BD;;GAEG;AACH,8EAUC;AAED;;;;;GAKG;AACH,4CAJW,OAAO,uBAAuB,EAAE,OAAO,UACvC,OAAO,iBAAiB,EAAE,UAAU,YACpC,QAAQ,aAmBlB;AA33BD;;;;;;;;;;;;;;;GAeG;AACH;IA6BI;;;;;;;;;OASG;IACH,kBARW,OAAO,iBAAiB,EAAE,aAAa,WACvC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,aAAa,iDAEb,MAAM,WACN,MAAM,YACN,OAAO,WAAW,EAAE,WAAW,EAoBzC;IARG,8CAAgB;IAOhB,uBAA0B;IAG9B;;OAEG;IACH,qDAIC;IAeD;;OAEG;IACH,wDAKC;IAqBD;;OAEG;IACH,8CAEC;IAED,yBAEC;IAED;;OAEG;IACH,wCAmCC;IA2OD;;;;OAIG;IAEH,gBALW,OAAO,4CAA4C,EAAE,OAAO,UAC5D,OAAO,uBAAuB,EAAE,OAAO,YACvC,OAAO,uBAAuB,EAAE,gBAAgB,QA6O1D;;CAmGJ;AAgJD;IACI;;;;OAIG;IACH,6DAHW,aAAa,UACb,MAAM,EAoFhB;IAjFG,4BAAgC;IAChC,kCAAgB;IAChB,eAAoB;IAEpB,uBAAuB;IACvB,YADW,QAAQ,CACQ;IAE3B,uBAAuB;IACvB,kBADW,QAAQ,CACc;IAEjC,mFAAmF;IACnF,MADW,QAAQ,OAAO,OAAO,iBAAiB,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAC5D;IAEd,4FAA4F;IAC5F,WADW,QAAQ,OAAO,OAAO,iBAAiB,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAC3D;IAEnB,0DAA0D;IAC1D,kEAAoB;IAEpB,uBAAuB;IACvB,OADW,QAAQ,CACG;IAEtB,wBAAwB;IACxB,QADW,SAAS,CACQ;IA4DhC,uEAcC;IAED;;OAEG;IACH,4BAkKC;IAED,uBAqBC;IAED,iCAEC;CACJ;qBAhrC0D,eAAe;sBAFpD,uBAAuB;0BAGnB,oBAAoB;qBAGzB,eAAe;yBALX,mBAAmB;AAmrC5C;IACI;;;OAGG;IACH,uBAHW,SAAS,8CAyFnB;IAtDG;;;MAAoB;IACpB,2CAAsC;IAKtC,uBAAuB;IAEvB,wBAAwB;IACxB,2BAAqC;IA+CzC,0BAKC;IAWD;;;;OAIG;IACH,gCAHW,SAAS,UACT,SAAS,QA8CnB;IA7BG,0BAAsE;CA8B7E;oBAp1CmB,qBAAqB"}
@@ -436,6 +436,8 @@ export default class GridView extends ContainerView {
436
436
  */
437
437
  // eslint-disable-next-line complexity
438
438
  render(context, coords, options = {}) {
439
+ super.render(context, coords, options);
440
+
439
441
  if (!this.isConfiguredVisible()) {
440
442
  return;
441
443
  }
@@ -1 +1 @@
1
- {"version":3,"file":"layerView.d.ts","sourceRoot":"","sources":["../../../src/view/layerView.js"],"names":[],"mappings":"AAIA;IAQI;;;;;;;;OAQG;IACH,kBAPW,OAAO,iBAAiB,EAAE,SAAS,WACnC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,aAAa,cACb,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,YACN,OAAO,WAAW,EAAE,WAAW,EAQzC;IAHG,0CAAgB;IAoCpB,gEAEC;IAWD;;;;OAIG;IACH,gBAJW,OAAO,4CAA4C,EAAE,OAAO,UAC5D,OAAO,uBAAuB,EAAE,OAAO,YACvC,OAAO,uBAAuB,EAAE,gBAAgB,QAc1D;;CAeJ;0BAxGyB,oBAAoB"}
1
+ {"version":3,"file":"layerView.d.ts","sourceRoot":"","sources":["../../../src/view/layerView.js"],"names":[],"mappings":"AAIA;IAQI;;;;;;;;OAQG;IACH,kBAPW,OAAO,iBAAiB,EAAE,SAAS,WACnC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,aAAa,cACb,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,YACN,OAAO,WAAW,EAAE,WAAW,EAQzC;IAHG,0CAAgB;IAoCpB,gEAEC;IAWD;;;;OAIG;IACH,gBAJW,OAAO,4CAA4C,EAAE,OAAO,UAC5D,OAAO,uBAAuB,EAAE,OAAO,YACvC,OAAO,uBAAuB,EAAE,gBAAgB,QAgB1D;;CAeJ;0BA1GyB,oBAAoB"}
@@ -77,6 +77,8 @@ export default class LayerView extends ContainerView {
77
77
  * @param {import("../types/rendering.js").RenderingOptions} [options]
78
78
  */
79
79
  render(context, coords, options = {}) {
80
+ super.render(context, coords, options);
81
+
80
82
  if (!this.isConfiguredVisible()) {
81
83
  return;
82
84
  }
@@ -28,12 +28,6 @@ export default class UnitView extends ContainerView {
28
28
  spec: import("../spec/view.js").UnitSpec;
29
29
  /** @type {import("../marks/mark.js").default} */
30
30
  mark: import("../marks/mark.js").default;
31
- /**
32
- * Not nice! Inconsistent when faceting!
33
- * TODO: Something. Maybe store only width/height
34
- * @type {import("./layout/rectangle.js").default}
35
- */
36
- coords: import("./layout/rectangle.js").default;
37
31
  /**
38
32
  * @param {import("./renderingContext/viewRenderingContext.js").default} context
39
33
  * @param {import("./layout/rectangle.js").default} coords
@@ -1 +1 @@
1
- {"version":3,"file":"unitView.d.ts","sourceRoot":"","sources":["../../../src/view/unitView.js"],"names":[],"mappings":"AAqBA;;;;GAIG;AACH;QAHkB,MAAM,GAAE,cAAc,kBAAkB,EAAE,OAAO;EASjE;AAEF;IACI;;;;;;;OAOG;IACH;;;;;;;;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,EAyBzC;IApBG,yCAAgB;IAIZ,iDAAiD;IACjD,MADW,OAAO,kBAAkB,EAAE,OAAO,CACnB;IAO9B;;;;OAIG;IACH,QAFU,OAAO,uBAAuB,EAAE,OAAO,CAE1B;IAK3B;;;;OAIG;IACH,gBAJW,OAAO,4CAA4C,EAAE,OAAO,UAC5D,OAAO,uBAAuB,EAAE,OAAO,YACvC,OAAO,uBAAuB,EAAE,gBAAgB,QAY1D;IAED,kDAIC;IAED;;;;;OAKG;IACH,iEAyEC;IAED;;;OAGG;IACH,mGASC;IAkBD;;OAEG;IACH,uDAEC;IAED;;OAEG;IACH,opBAcC;IAED;;;;;OAKG;IACH,6BAHW,OAAO,oBAAoB,EAAE,gBAAgB,iDAkBvD;IAED;;;;;;;;;;;;OAYG;IACH,gHA2CC;IAED,uBAQC;IAgBD;;;;OAIG;IACH,8BAJW,MAAM,+DAEJ,OAAO,iBAAiB,EAAE,kBAAkB,CAKxD;CACJ;0BA1VyB,oBAAoB"}
1
+ {"version":3,"file":"unitView.d.ts","sourceRoot":"","sources":["../../../src/view/unitView.js"],"names":[],"mappings":"AAqBA;;;;GAIG;AACH;QAHkB,MAAM,GAAE,cAAc,kBAAkB,EAAE,OAAO;EASjE;AAEF;IACI;;;;;;;OAOG;IACH;;;;;;;;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,EAkBzC;IAbG,yCAAgB;IAIZ,iDAAiD;IACjD,MADW,OAAO,kBAAkB,EAAE,OAAO,CACnB;IAUlC;;;;OAIG;IACH,gBAJW,OAAO,4CAA4C,EAAE,OAAO,UAC5D,OAAO,uBAAuB,EAAE,OAAO,YACvC,OAAO,uBAAuB,EAAE,gBAAgB,QAY1D;IAED,kDAIC;IAED;;;;;OAKG;IACH,iEAyEC;IAED;;;OAGG;IACH,mGASC;IAkBD;;OAEG;IACH,uDAEC;IAED;;OAEG;IACH,opBAcC;IAED;;;;;OAKG;IACH,6BAHW,OAAO,oBAAoB,EAAE,gBAAgB,iDAkBvD;IAED;;;;;;;;;;;;OAYG;IACH,gHA2CC;IAED,uBAQC;IAgBD;;;;OAIG;IACH,8BAJW,MAAM,+DAEJ,OAAO,iBAAiB,EAAE,kBAAkB,CAKxD;CACJ;0BAnVyB,oBAAoB"}
@@ -65,13 +65,6 @@ export default class UnitView extends ContainerView {
65
65
 
66
66
  this.resolve();
67
67
 
68
- /**
69
- * Not nice! Inconsistent when faceting!
70
- * TODO: Something. Maybe store only width/height
71
- * @type {import("./layout/rectangle.js").default}
72
- */
73
- this.coords = undefined;
74
-
75
68
  this.needsAxes = { x: true, y: true };
76
69
  }
77
70
 
@@ -81,12 +74,12 @@ export default class UnitView extends ContainerView {
81
74
  * @param {import("../types/rendering.js").RenderingOptions} [options]
82
75
  */
83
76
  render(context, coords, options = {}) {
77
+ super.render(context, coords, options);
78
+
84
79
  if (!this.isConfiguredVisible()) {
85
80
  return;
86
81
  }
87
82
 
88
- this.coords = coords;
89
-
90
83
  context.pushView(this, coords);
91
84
  context.renderMark(this.mark, options);
92
85
  context.popView(this);
@@ -46,6 +46,12 @@ export default class View {
46
46
  * @type {function(number):number}
47
47
  */
48
48
  opacityFunction: (arg0: number) => number;
49
+ /**
50
+ * Not nice! Inconsistent when faceting!
51
+ * TODO: Something. Maybe store only width/height
52
+ * @type {import("./layout/rectangle.js").default}
53
+ */
54
+ coords: import("./layout/rectangle.js").default;
49
55
  context: import("../types/viewContext.js").default;
50
56
  layoutParent: import("./containerView.js").default;
51
57
  dataParent: View;
@@ -1 +1 @@
1
- {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/view/view.js"],"names":[],"mappings":"AAwBA,oBAAoB;AACpB,sCAAuC;AACvC,0BAA0B;AAC1B,sCAAuC;AAKvC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH;IAeI;;;;;;;;;OASG;IACH,kBARW,OAAO,iBAAiB,EAAE,QAAQ,WAClC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,YACN,WAAW,EAwCrB;IApDD;;OAEG;IACH,wBAFmB,MAAM,KAAE,MAAM,CAEQ;IAiBrC,mDAAsB;IACtB,mDAAgC;IAChC,iBAA4B;IAC5B,aAA6B;IAC7B,yCAAgB;IAEhB;QACI;;;WAGG;eADO,QAAQ,OAAO,OAAO,oBAAoB,EAAE,gBAAgB,EAAE,OAAO,sBAAsB,EAAE,OAAO,CAAC,CAAC;QAGhH;;;WAGG;cADO,QAAQ,OAAO,OAAO,oBAAoB,EAAE,wBAAwB,EAAE,OAAO,qBAAqB,EAAE,OAAO,CAAC,CAAC;MAG1H;IAID;;;;kCAxDE,OAAO;;;;kCAEP,OAAO;MA0DR;IAED;;;OAGG;IACH,WAFU,OAAO,OAAO,oBAAoB,EAAE,wBAAwB,EAAE,OAAO,CAAC,CAEzC;IAG3C,sBAIC;IAED;;;;OAIG;IACH,eAFa,OAAO,CAInB;IAED;;;;;OAKG;IACH,gBAFa,OAAO,CAMnB;IAED;;;;;OAKG;IACH,WAFa,cAAc,CAW1B;IAED;;OAEG;IACH,mBAFa,cAAc,CAkB1B;IAoED,+BAEC;IAED,2BAEC;IAED;;;;;;;;OAQG;IACH,aAFa,OAAO,CAMnB;IAED;;;;;;;OAOG;IACH,uBAFa,MAAM,CAMlB;IAED,wBAKC;IAkBD;;OAEG;IACH,6BAEC;IAED;;OAEG;IACH,2BAEC;IAED;;;;OAIG;IACH,yBAFW,gBAAgB,QAO1B;IAED;;;;OAIG;IACH,2BAHW,MAAM,kBACG,gBAAgB,KAAE,IAAI,QASzC;IAED;;;;;;;OAOG;IACH,+BALW,OAAO,uBAAuB,EAAE,OAAO,SAEvC,OAAO,8BAA8B,EAAE,OAAO,aAC9C,OAAO,QASjB;IAED;;;;;;;;;;OAUG;IACH,kCAJW,MAAM,YACN,wBAAwB,eACxB,OAAO,QAajB;IAED;;;;;;;OAOG;IACH,eAJW,OAAO,GACL,WAAW,CAmBvB;IAED;;OAEG;IACH,yBAOC;IAED;;OAEG;IACH,6BASC;IAED;;;OAGG;IACH,uBAEC;IA5ZyB,yJAIE;IAoa5B;;;;;;OAMG;IACH,eAFY,OAAO,oBAAoB,EAAE,QAAQ,CAuBhD;IAED;;;;OAIG;IACH,+BAJW,IAAI,UAEM,MAAM,KAAE,GAAG,CAM/B;IAED;;;;;OAKG;IACH,6BAHW,IAAI,GACF,MAAM,EAAE,CASpB;IAED;;;;;;;;;;;;;;;OAeG;IACH,yBAFY,YAAY,CAIvB;IAED;;OAEG;IACH,4BAFW,OAAO,oBAAoB,EAAE,gBAAgB,0CAWvD;IAED;;OAEG;IACH,2BAFW,OAAO,oBAAoB,EAAE,iBAAiB,yCAWxD;IAED;;;;OAIG;IACH,iCAJW,OAAO,oBAAoB,EAAE,OAAO,GAAG,SAAS,kBAChD,OAAO,iBAAiB,EAAE,gBAAgB,GACxC,OAAO,iBAAiB,EAAE,kBAAkB,CAIxD;IAED;;;;OAIG;IACH,0CAJW,OAAO,oBAAoB,EAAE,OAAO,kBACpC,OAAO,iBAAiB,EAAE,gBAAgB,GACxC,OAAO,iBAAiB,EAAE,kBAAkB,CAQxD;IAED;;;;OAIG;IACH,8BAJW,OAAO,oBAAoB,EAAE,OAAO,kBACpC,OAAO,iBAAiB,EAAE,gBAAgB,GACxC,OAAO,iBAAiB,EAAE,kBAAkB,CAIxD;IAED;;OAEG;IACH,cAFa,MAAM,CAOlB;IAED;;OAEG;IACH,8BAEC;IAED,uBAKC;IAED;;;;;;OAMG;IACH,yBANW,GAAG,wCAQb;IAED;;;;OAIG;IACH,8BAHW,MAAM,cACN,MAAM,GAAG,SAAS,GAAG,WAAW,QAiB1C;IAED,4BAEC;IAED;;;;;OAKG;IACH,iCAFW,OAAO,8BAA8B,EAAE,OAAO,QAIxD;;CACJ;AAgEM,iCAHI,GAAG,0CAGkC;0BA9rBnC,8BAAsB,IAAI;qCAG5B,IAAI,KACF,WAAW;sBAEX,eAAe,GAAG;IAC9B,SAAgB,CAAC,SAAW,IAAI,KAAE,IAAI,CAAC;IACvC,cAAqB,CAAC,SAAW,IAAI,KAAE,IAAI,CAAC;IAC5C,aAAoB,CAAC,SAAW,IAAI,KAAE,IAAI,CAAA;CAAC;;;;;UAIlC,OAAO,iBAAiB,EAAE,kBAAkB;;;;cAC5C,GAAG;;gDAGF,OAAO,uBAAuB,EAAE,OAAO,SAEvC,OAAO,8BAA8B,EAAE,OAAO;;;;;+BAG/C,OAAO;;;;+BAEP,OAAO;;oBApDG,qBAAqB;+BADlC,wBAAwB"}
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/view/view.js"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ import { appendToBaseUrl } from "../utils/url.js";
16
16
  import { isDiscrete, bandSpace } from "vega-scale";
17
17
  import { peek } from "../utils/arrayUtils.js";
18
18
  import ViewError from "./viewError.js";
19
+ import { isExprRef } from "../marks/mark.js";
19
20
 
20
21
  // TODO: View classes have too many responsibilities. Come up with a way
21
22
  // to separate the concerns. However, most concerns are tightly tied to
@@ -73,6 +74,13 @@ export default class View {
73
74
  */
74
75
  opacityFunction = defaultOpacityFunction;
75
76
 
77
+ /**
78
+ * Not nice! Inconsistent when faceting!
79
+ * TODO: Something. Maybe store only width/height
80
+ * @type {import("./layout/rectangle.js").default}
81
+ */
82
+ coords;
83
+
76
84
  /**
77
85
  *
78
86
  * @param {import("../spec/view.js").ViewSpec} spec
@@ -461,6 +469,10 @@ export default class View {
461
469
  * @type {import("../types/rendering.js").RenderMethod}
462
470
  */
463
471
  render(context, coords, options = {}) {
472
+ this.coords = options.clipRect
473
+ ? coords.intersect(options.clipRect)
474
+ : coords;
475
+
464
476
  // override
465
477
  }
466
478
 
@@ -723,6 +735,11 @@ function createViewOpacityFunction(view) {
723
735
 
724
736
  return interpolate(unitsPerPixel) * parentOpacity;
725
737
  };
738
+ } else if (isExprRef(opacityDef)) {
739
+ const fn = view.context.paramBroker.createExpression(
740
+ opacityDef.expr
741
+ );
742
+ return (parentOpacity) => fn(null) * parentOpacity;
726
743
  }
727
744
  }
728
745
  return (parentOpacity) => parentOpacity;
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  },
8
8
  "contributors": [],
9
9
  "license": "MIT",
10
- "version": "0.40.0",
10
+ "version": "0.42.0",
11
11
  "jsdelivr": "dist/bundle/index.js",
12
12
  "unpkg": "dist/bundle/index.js",
13
13
  "browser": "dist/bundle/index.js",
@@ -42,7 +42,7 @@
42
42
  "@gmod/bgzf-filehandle": "^1.4.7",
43
43
  "@gmod/gff": "^1.3.0",
44
44
  "@gmod/indexedfasta": "^2.0.4",
45
- "@gmod/tabix": "^1.5.10",
45
+ "@gmod/tabix": "^1.5.13",
46
46
  "@types/d3-array": "^3.0.2",
47
47
  "@types/d3-dsv": "^3.0.0",
48
48
  "@types/d3-ease": "^3.0.0",
@@ -65,5 +65,5 @@
65
65
  "vega-scale": "^7.1.1",
66
66
  "vega-util": "^1.16.0"
67
67
  },
68
- "gitHead": "74d4f6721b31c1916051f868e95be7d83d8d6369"
68
+ "gitHead": "59a4384ba903ee1b81212593e872ea61accc729d"
69
69
  }