@genome-spy/core 0.30.0 → 0.30.3

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 (234) hide show
  1. package/dist/index.es.js +16379 -0
  2. package/dist/index.js +43 -43
  3. package/package.json +10 -7
  4. package/src/data/collector.js +0 -183
  5. package/src/data/collector.test.js +0 -84
  6. package/src/data/dataFlow.js +0 -148
  7. package/src/data/dataFlow.test.js +0 -5
  8. package/src/data/facetNode.js +0 -17
  9. package/src/data/flow.test.js +0 -72
  10. package/src/data/flowBatch.d.ts +0 -40
  11. package/src/data/flowNode.js +0 -283
  12. package/src/data/flowNode.test.js +0 -50
  13. package/src/data/flowOptimizer.js +0 -123
  14. package/src/data/flowOptimizer.test.js +0 -193
  15. package/src/data/flowTestUtils.js +0 -63
  16. package/src/data/formats/fasta.js +0 -32
  17. package/src/data/formats/fasta.test.js +0 -27
  18. package/src/data/sources/dataSource.js +0 -22
  19. package/src/data/sources/dataSourceFactory.js +0 -24
  20. package/src/data/sources/dataUtils.js +0 -78
  21. package/src/data/sources/dynamicCallbackSource.js +0 -57
  22. package/src/data/sources/dynamicSource.js +0 -37
  23. package/src/data/sources/inlineSource.js +0 -67
  24. package/src/data/sources/inlineSource.test.js +0 -56
  25. package/src/data/sources/namedSource.js +0 -79
  26. package/src/data/sources/sequenceSource.js +0 -46
  27. package/src/data/sources/sequenceSource.test.js +0 -46
  28. package/src/data/sources/urlSource.js +0 -74
  29. package/src/data/transforms/aggregate.js +0 -70
  30. package/src/data/transforms/clone.js +0 -40
  31. package/src/data/transforms/clone.test.js +0 -11
  32. package/src/data/transforms/coverage.js +0 -187
  33. package/src/data/transforms/coverage.test.js +0 -123
  34. package/src/data/transforms/filter.js +0 -37
  35. package/src/data/transforms/filter.test.js +0 -18
  36. package/src/data/transforms/filterScoredLabels.js +0 -134
  37. package/src/data/transforms/flattenCompressedExons.js +0 -57
  38. package/src/data/transforms/flattenDelimited.js +0 -74
  39. package/src/data/transforms/flattenDelimited.test.js +0 -87
  40. package/src/data/transforms/flattenSequence.js +0 -39
  41. package/src/data/transforms/flattenSequence.test.js +0 -34
  42. package/src/data/transforms/formula.js +0 -39
  43. package/src/data/transforms/formula.test.js +0 -19
  44. package/src/data/transforms/identifier.js +0 -108
  45. package/src/data/transforms/identifier.test.js +0 -83
  46. package/src/data/transforms/linearizeGenomicCoordinate.js +0 -101
  47. package/src/data/transforms/measureText.js +0 -44
  48. package/src/data/transforms/pileup.js +0 -128
  49. package/src/data/transforms/pileup.test.js +0 -70
  50. package/src/data/transforms/project.js +0 -41
  51. package/src/data/transforms/project.test.js +0 -32
  52. package/src/data/transforms/regexExtract.js +0 -61
  53. package/src/data/transforms/regexExtract.test.js +0 -67
  54. package/src/data/transforms/regexFold.js +0 -141
  55. package/src/data/transforms/regexFold.test.js +0 -160
  56. package/src/data/transforms/sample.js +0 -101
  57. package/src/data/transforms/sample.test.js +0 -38
  58. package/src/data/transforms/stack.js +0 -137
  59. package/src/data/transforms/stack.test.js +0 -91
  60. package/src/data/transforms/transformFactory.js +0 -60
  61. package/src/embedApi.d.ts +0 -67
  62. package/src/encoder/accessor.js +0 -82
  63. package/src/encoder/accessor.test.js +0 -47
  64. package/src/encoder/encoder.js +0 -394
  65. package/src/encoder/encoder.test.js +0 -98
  66. package/src/fonts/Lato-Regular.json +0 -1267
  67. package/src/fonts/Lato-Regular.png +0 -0
  68. package/src/fonts/OFL.txt +0 -93
  69. package/src/fonts/README.md +0 -3
  70. package/src/fonts/bmFont.d.ts +0 -58
  71. package/src/fonts/bmFontManager.js +0 -357
  72. package/src/fonts/bmFontMetrics.js +0 -108
  73. package/src/genome/genome.js +0 -317
  74. package/src/genome/genome.test.js +0 -188
  75. package/src/genome/genomeStore.js +0 -54
  76. package/src/genome/locusFormat.js +0 -31
  77. package/src/genome/scaleIndex.d.ts +0 -38
  78. package/src/genome/scaleIndex.js +0 -166
  79. package/src/genome/scaleIndex.test.js +0 -78
  80. package/src/genome/scaleLocus.d.ts +0 -11
  81. package/src/genome/scaleLocus.js +0 -108
  82. package/src/genome/scaleLocus.test.js +0 -4
  83. package/src/genomeSpy.js +0 -785
  84. package/src/gl/arrayBuilder.js +0 -199
  85. package/src/gl/dataToVertices.js +0 -636
  86. package/src/gl/includes/common.glsl +0 -63
  87. package/src/gl/includes/picking.fragment.glsl +0 -1
  88. package/src/gl/includes/picking.vertex.glsl +0 -27
  89. package/src/gl/includes/sampleFacet.glsl +0 -107
  90. package/src/gl/includes/scales.glsl +0 -112
  91. package/src/gl/link.fragment.glsl +0 -18
  92. package/src/gl/link.vertex.glsl +0 -111
  93. package/src/gl/point.fragment.glsl +0 -123
  94. package/src/gl/point.vertex.glsl +0 -129
  95. package/src/gl/rect.fragment.glsl +0 -51
  96. package/src/gl/rect.vertex.glsl +0 -114
  97. package/src/gl/rule.fragment.glsl +0 -52
  98. package/src/gl/rule.vertex.glsl +0 -89
  99. package/src/gl/text.fragment.glsl +0 -31
  100. package/src/gl/text.vertex.glsl +0 -246
  101. package/src/gl/webGLHelper.js +0 -504
  102. package/src/img/bowtie.svg +0 -1
  103. package/src/img/genomespy-favicon.svg +0 -34
  104. package/src/index.html +0 -11
  105. package/src/index.js +0 -128
  106. package/src/marks/link.js +0 -175
  107. package/src/marks/mark.js +0 -975
  108. package/src/marks/markUtils.js +0 -125
  109. package/src/marks/pointMark.js +0 -251
  110. package/src/marks/rectMark.js +0 -241
  111. package/src/marks/rule.js +0 -250
  112. package/src/marks/text.js +0 -278
  113. package/src/node_modules/.vitest/results.json +0 -1
  114. package/src/scale/colorUtils.js +0 -184
  115. package/src/scale/glslScaleGenerator.js +0 -502
  116. package/src/scale/scale.js +0 -451
  117. package/src/scale/scale.test.js +0 -324
  118. package/src/scale/ticks.js +0 -203
  119. package/src/scale/ticks.test.js +0 -40
  120. package/src/singlePageApp.js +0 -13
  121. package/src/spec/axis.d.ts +0 -296
  122. package/src/spec/channel.d.ts +0 -430
  123. package/src/spec/data.d.ts +0 -196
  124. package/src/spec/font.d.ts +0 -15
  125. package/src/spec/genome.d.ts +0 -35
  126. package/src/spec/mark.d.ts +0 -429
  127. package/src/spec/root.d.ts +0 -17
  128. package/src/spec/sampleView.d.ts +0 -180
  129. package/src/spec/scale.d.ts +0 -273
  130. package/src/spec/title.d.ts +0 -102
  131. package/src/spec/tooltip.d.ts +0 -9
  132. package/src/spec/transform.d.ts +0 -479
  133. package/src/spec/view.d.ts +0 -201
  134. package/src/styles/genome-spy.scss +0 -153
  135. package/src/tooltip/dataTooltipHandler.js +0 -64
  136. package/src/tooltip/refseqGeneTooltipHandler.js +0 -78
  137. package/src/tooltip/tooltipHandler.ts +0 -12
  138. package/src/types/filetypes.d.ts +0 -14
  139. package/src/types/flatqueue.d.ts +0 -53
  140. package/src/types/glsl.d.ts +0 -4
  141. package/src/types/internmap.d.ts +0 -22
  142. package/src/types/object.d.ts +0 -21
  143. package/src/types/vega-loader.d.ts +0 -1
  144. package/src/types/vega-scale.d.ts +0 -60
  145. package/src/utils/addBaseUrl.js +0 -19
  146. package/src/utils/addBaseUrl.test.js +0 -22
  147. package/src/utils/animator.js +0 -83
  148. package/src/utils/arrayUtils.js +0 -61
  149. package/src/utils/binnedIndex.js +0 -167
  150. package/src/utils/binnedIndex.test.js +0 -155
  151. package/src/utils/clamp.js +0 -8
  152. package/src/utils/cloner.js +0 -34
  153. package/src/utils/cloner.test.js +0 -24
  154. package/src/utils/coalesce.js +0 -11
  155. package/src/utils/coalesce.test.js +0 -16
  156. package/src/utils/concatIterables.js +0 -26
  157. package/src/utils/concatIterables.test.js +0 -8
  158. package/src/utils/debounce.js +0 -37
  159. package/src/utils/domainArray.js +0 -216
  160. package/src/utils/domainArray.test.js +0 -130
  161. package/src/utils/eerp.js +0 -13
  162. package/src/utils/expression.js +0 -32
  163. package/src/utils/field.js +0 -28
  164. package/src/utils/formatObject.js +0 -31
  165. package/src/utils/indexer.js +0 -43
  166. package/src/utils/indexer.test.js +0 -47
  167. package/src/utils/inertia.js +0 -124
  168. package/src/utils/interactionEvent.js +0 -33
  169. package/src/utils/iterateNestedMaps.js +0 -21
  170. package/src/utils/iterateNestedMaps.test.js +0 -33
  171. package/src/utils/kWayMerge.js +0 -42
  172. package/src/utils/kWayMerge.test.js +0 -26
  173. package/src/utils/layout/flexLayout.js +0 -368
  174. package/src/utils/layout/flexLayout.test.js +0 -311
  175. package/src/utils/layout/grid.js +0 -95
  176. package/src/utils/layout/grid.test.js +0 -71
  177. package/src/utils/layout/padding.js +0 -120
  178. package/src/utils/layout/point.js +0 -23
  179. package/src/utils/layout/rectangle.js +0 -288
  180. package/src/utils/layout/rectangle.test.js +0 -172
  181. package/src/utils/mergeObjects.js +0 -99
  182. package/src/utils/mergeObjects.test.js +0 -42
  183. package/src/utils/numberExtractor.js +0 -24
  184. package/src/utils/numberExtractor.test.js +0 -6
  185. package/src/utils/point.js +0 -14
  186. package/src/utils/propertyCacher.js +0 -70
  187. package/src/utils/propertyCacher.test.js +0 -85
  188. package/src/utils/propertyCoalescer.js +0 -42
  189. package/src/utils/propertyCoalescer.test.js +0 -22
  190. package/src/utils/reservationMap.js +0 -103
  191. package/src/utils/reservationMap.test.js +0 -20
  192. package/src/utils/scaleNull.js +0 -19
  193. package/src/utils/setOperations.js +0 -75
  194. package/src/utils/smoothstep.js +0 -10
  195. package/src/utils/throttle.js +0 -34
  196. package/src/utils/topK.js +0 -76
  197. package/src/utils/topK.test.js +0 -64
  198. package/src/utils/transition.js +0 -74
  199. package/src/utils/ui/tooltip.js +0 -189
  200. package/src/utils/url.js +0 -22
  201. package/src/utils/variableTools.js +0 -24
  202. package/src/utils/variableTools.test.js +0 -13
  203. package/src/view/axisResolution.js +0 -140
  204. package/src/view/axisResolution.test.js +0 -201
  205. package/src/view/axisView.js +0 -747
  206. package/src/view/concatView.js +0 -45
  207. package/src/view/containerView.js +0 -159
  208. package/src/view/facetView.js +0 -491
  209. package/src/view/flowBuilder.js +0 -367
  210. package/src/view/flowBuilder.test.js +0 -125
  211. package/src/view/gridView.js +0 -786
  212. package/src/view/implicitRootView.js +0 -14
  213. package/src/view/importView.js +0 -19
  214. package/src/view/layerView.js +0 -74
  215. package/src/view/rendering.d.ts +0 -44
  216. package/src/view/renderingContext/compositeViewRenderingContext.js +0 -51
  217. package/src/view/renderingContext/deferredViewRenderingContext.js +0 -176
  218. package/src/view/renderingContext/layoutRecorderViewRenderingContext.js +0 -128
  219. package/src/view/renderingContext/simpleViewRenderingContext.js +0 -64
  220. package/src/view/renderingContext/svgViewRenderingContext.js +0 -125
  221. package/src/view/renderingContext/viewRenderingContext.js +0 -41
  222. package/src/view/scaleResolution.js +0 -797
  223. package/src/view/scaleResolution.test.js +0 -572
  224. package/src/view/scaleResolutionApi.d.ts +0 -40
  225. package/src/view/testUtils.js +0 -51
  226. package/src/view/title.js +0 -165
  227. package/src/view/unitView.js +0 -382
  228. package/src/view/view.js +0 -612
  229. package/src/view/view.test.js +0 -214
  230. package/src/view/viewContext.d.ts +0 -62
  231. package/src/view/viewFactory.js +0 -181
  232. package/src/view/viewFactory.test.js +0 -17
  233. package/src/view/viewUtils.js +0 -327
  234. package/src/view/zoom.js +0 -89
package/src/marks/rule.js DELETED
@@ -1,250 +0,0 @@
1
- import Mark from "./mark.js";
2
- import {
3
- createTexture,
4
- drawBufferInfo,
5
- setBuffersAndAttributes,
6
- setUniforms,
7
- } from "twgl.js";
8
- import VERTEX_SHADER from "../gl/rule.vertex.glsl";
9
- import FRAGMENT_SHADER from "../gl/rule.fragment.glsl";
10
- import { RuleVertexBuilder } from "../gl/dataToVertices";
11
- import { isChannelDefWithScale } from "../encoder/encoder.js";
12
-
13
- export default class RuleMark extends Mark {
14
- /**
15
- * @param {import("../view/unitView").default} unitView
16
- */
17
- constructor(unitView) {
18
- super(unitView);
19
-
20
- this.dashTextureSize = 0;
21
-
22
- Object.defineProperties(
23
- this.defaultProperties,
24
- Object.getOwnPropertyDescriptors({
25
- x2: undefined,
26
- y2: undefined,
27
- size: 1,
28
- color: "black",
29
- opacity: 1.0,
30
-
31
- minLength: 0.0,
32
- /** @type {number[]} */
33
- strokeDash: null,
34
- strokeDashOffset: 0,
35
- strokeCap: "butt",
36
- })
37
- );
38
- }
39
-
40
- getAttributes() {
41
- return [
42
- "uniqueId",
43
- "facetIndex",
44
- "x",
45
- "x2",
46
- "y",
47
- "y2",
48
- "size",
49
- "color",
50
- "opacity",
51
- ];
52
- }
53
-
54
- /**
55
- * @returns {import("../spec/channel").Channel[]}
56
- */
57
- getSupportedChannels() {
58
- return [...super.getSupportedChannels(), "x2", "y2", "size"];
59
- }
60
-
61
- /**
62
- * @param {import("../spec/channel").Encoding} encoding
63
- * @returns {import("../spec/channel").Encoding}
64
- */
65
- // eslint-disable-next-line complexity
66
- fixEncoding(encoding) {
67
- // TODO: Write test for this mess
68
- if (encoding.x && encoding.y && encoding.x2 && encoding.y2) {
69
- // Everything is defined
70
- } else if (encoding.x && encoding.x2 && !encoding.y) {
71
- encoding.y = { value: 0.5 };
72
- encoding.y2 = encoding.y;
73
- } else if (encoding.y && encoding.y2 && !encoding.x) {
74
- encoding.x = { value: 0.5 };
75
- encoding.x2 = encoding.x;
76
- } else if (encoding.x && !encoding.y) {
77
- // Vertical rule
78
- encoding.y = { value: 0 };
79
- encoding.y2 = { value: 1 };
80
- encoding.x2 = encoding.x;
81
- } else if (encoding.y && !encoding.x) {
82
- // Horizontal rule
83
- encoding.x = { value: 0 };
84
- encoding.x2 = { value: 1 };
85
- encoding.y2 = encoding.y;
86
- } else if (encoding.x && encoding.y && encoding.y2) {
87
- // Limited vertical rule
88
- encoding.x2 = encoding.x;
89
- } else if (encoding.y && encoding.x && encoding.x2) {
90
- // Limited horizontal rule
91
- encoding.y2 = encoding.y;
92
- } else if (encoding.y && encoding.x) {
93
- if (
94
- !encoding.x2 &&
95
- isChannelDefWithScale(encoding.y) &&
96
- encoding.y.type == "quantitative"
97
- ) {
98
- encoding.x2 = encoding.x;
99
- encoding.y2 = { datum: 0 };
100
- } else if (
101
- !encoding.y2 &&
102
- isChannelDefWithScale(encoding.x) &&
103
- encoding.x.type == "quantitative"
104
- ) {
105
- encoding.y2 = encoding.y;
106
- encoding.x2 = { datum: 0 };
107
- } else {
108
- throw new Error("A bug!"); // Should be unreachable
109
- }
110
- } else {
111
- throw new Error(
112
- "Invalid x and y encodings for rule mark: " +
113
- JSON.stringify(encoding)
114
- );
115
- }
116
-
117
- return encoding;
118
- }
119
-
120
- async initializeGraphics() {
121
- await super.initializeGraphics();
122
-
123
- if (this.properties.strokeDash) {
124
- const gl = this.gl;
125
- const textureData = createDashTextureArray(
126
- this.properties.strokeDash
127
- );
128
- this.dashTexture = createTexture(gl, {
129
- mag: gl.NEAREST,
130
- min: gl.NEAREST,
131
- internalFormat: gl.R8,
132
- format: gl.RED,
133
- src: textureData,
134
- height: 1,
135
- });
136
- this.dashTextureSize = textureData.length; // Not needed with WebGL2
137
- }
138
-
139
- this.createAndLinkShaders(VERTEX_SHADER, FRAGMENT_SHADER);
140
- }
141
-
142
- finalizeGraphicsInitialization() {
143
- super.finalizeGraphicsInitialization();
144
-
145
- this.gl.useProgram(this.programInfo.program);
146
-
147
- const props = this.properties;
148
-
149
- setUniforms(this.programInfo, {
150
- uMinLength: props.minLength,
151
- uDashTextureSize: this.dashTextureSize,
152
- uStrokeCap: ["butt", "square", "round"].indexOf(props.strokeCap),
153
- });
154
- }
155
-
156
- updateGraphicsData() {
157
- const collector = this.unitView.getCollector();
158
- const itemCount = collector.getItemCount();
159
-
160
- const builder = new RuleVertexBuilder({
161
- encoders: this.encoders,
162
- attributes: this.getAttributes(),
163
- numItems: Math.max(itemCount, this.properties.minBufferSize || 0),
164
- });
165
-
166
- builder.addBatches(collector.facetBatches);
167
-
168
- const vertexData = builder.toArrays();
169
- this.rangeMap.migrateEntries(vertexData.rangeMap);
170
-
171
- this.updateBufferInfo(vertexData);
172
- }
173
-
174
- /**
175
- * @param {import("../view/rendering").GlobalRenderingOptions} options
176
- */
177
- prepareRender(options) {
178
- const ops = super.prepareRender(options);
179
-
180
- if (this.dashTexture) {
181
- ops.push(() =>
182
- setUniforms(this.programInfo, {
183
- uDashTexture: this.dashTexture,
184
- uStrokeDashOffset: this.properties.strokeDashOffset,
185
- })
186
- );
187
- }
188
-
189
- ops.push(() =>
190
- setBuffersAndAttributes(
191
- this.gl,
192
- this.programInfo,
193
- this.vertexArrayInfo
194
- )
195
- );
196
-
197
- return ops;
198
- }
199
-
200
- /**
201
- * @param {import("./Mark").MarkRenderingOptions} options
202
- */
203
- render(options) {
204
- const gl = this.gl;
205
-
206
- return this.createRenderCallback(
207
- (offset, count) =>
208
- drawBufferInfo(
209
- gl,
210
- this.vertexArrayInfo,
211
- gl.TRIANGLE_STRIP,
212
- count,
213
- offset
214
- ),
215
- options
216
- );
217
- }
218
- }
219
-
220
- /**
221
- *
222
- * @param {number[]} pattern
223
- */
224
- function createDashTextureArray(pattern) {
225
- if (
226
- pattern.length == 0 ||
227
- pattern.length % 2 ||
228
- pattern.findIndex((s) => Math.round(s) != s || s < 1 || s > 1000) >= 0
229
- ) {
230
- throw new Error(
231
- "Invalid stroke dash pattern: " + JSON.stringify(pattern)
232
- );
233
- }
234
-
235
- const len = pattern.reduce((a, b) => a + b);
236
-
237
- const texture = new Uint8Array(len);
238
-
239
- let state = true;
240
- let i = 0;
241
- for (let segment of pattern) {
242
- while (segment) {
243
- texture[i++] = (state && 255) || 0;
244
- segment--;
245
- }
246
- state = !state;
247
- }
248
-
249
- return texture;
250
- }
package/src/marks/text.js DELETED
@@ -1,278 +0,0 @@
1
- import { isString } from "vega-util";
2
- import { format } from "d3-format";
3
- import { drawBufferInfo, setBuffersAndAttributes, setUniforms } from "twgl.js";
4
- import VERTEX_SHADER from "../gl/text.vertex.glsl";
5
- import FRAGMENT_SHADER from "../gl/text.fragment.glsl";
6
- import { TextVertexBuilder } from "../gl/dataToVertices";
7
-
8
- import Mark from "./mark";
9
- import { fixPositional } from "./markUtils";
10
- import { primaryPositionalChannels } from "../encoder/encoder";
11
-
12
- /** For GLSL uniforms */
13
- const alignments = {
14
- left: -1,
15
- center: 0,
16
- right: 1,
17
- };
18
-
19
- /** For GLSL uniforms */
20
- const baselines = {
21
- top: -1,
22
- middle: 0,
23
- bottom: 1,
24
- alphabetic: 1,
25
- };
26
-
27
- /**
28
- * Renders text using SDF fonts
29
- *
30
- * Some resources:
31
- * - Valve's SDF paper: https://doi.org/10.1145/1281500.1281665
32
- * - Multi-channel SDF fonts: https://github.com/Chlumsky/msdfgen
33
- * - Google's web fonts as SDFs: https://github.com/etiennepinchon/aframe-fonts
34
- */
35
- export default class TextMark extends Mark {
36
- /**
37
- * @param {import("../view/unitView").default} unitView
38
- */
39
- constructor(unitView) {
40
- super(unitView);
41
-
42
- Object.defineProperties(
43
- this.defaultProperties,
44
- Object.getOwnPropertyDescriptors({
45
- x: 0.5,
46
- y: 0.5,
47
- x2: undefined,
48
- y2: undefined,
49
- text: "",
50
- size: 11.0,
51
- color: "black",
52
- opacity: 1.0,
53
-
54
- // Use the built-in default
55
- font: undefined,
56
- fontStyle: undefined,
57
- fontWeight: undefined,
58
-
59
- align: "center",
60
- baseline: "middle",
61
- dx: 0,
62
- dy: 0,
63
- angle: 0,
64
-
65
- /** When only primary channel is defined with band/locus scale */
66
- fitToBand: false,
67
-
68
- squeeze: true,
69
- paddingX: 0,
70
- paddingY: 0,
71
- flushX: true,
72
- flushY: true,
73
-
74
- /** Stretch letters so that they can be used with sequence logos etc... */
75
- logoLetters: false,
76
-
77
- viewportEdgeFadeWidthTop: 0,
78
- viewportEdgeFadeWidthRight: 0,
79
- viewportEdgeFadeWidthBottom: 0,
80
- viewportEdgeFadeWidthLeft: 0,
81
-
82
- viewportEdgeFadeDistanceTop: -Infinity,
83
- viewportEdgeFadeDistanceRight: -Infinity,
84
- viewportEdgeFadeDistanceBottom: -Infinity,
85
- viewportEdgeFadeDistanceLeft: -Infinity,
86
- })
87
- );
88
-
89
- this.font = this.properties.font
90
- ? unitView.context.fontManager.getFont(
91
- this.properties.font,
92
- this.properties.fontStyle,
93
- this.properties.fontWeight
94
- )
95
- : unitView.context.fontManager.getDefaultFont();
96
- }
97
-
98
- getAttributes() {
99
- return [
100
- "uniqueId",
101
- "facetIndex",
102
- "x",
103
- "x2",
104
- "y",
105
- "y2",
106
- "color",
107
- "size",
108
- "opacity",
109
- "angle",
110
- ];
111
- }
112
-
113
- /**
114
- * @returns {import("../spec/channel").Channel[]}
115
- */
116
- getSupportedChannels() {
117
- return [
118
- ...super.getSupportedChannels(),
119
- "x2",
120
- "y2",
121
- "size",
122
- "text",
123
- "angle",
124
- ];
125
- }
126
-
127
- /**
128
- * @param {import("../spec/channel").Encoding} encoding
129
- * @returns {import("../spec/channel").Encoding}
130
- */
131
- fixEncoding(encoding) {
132
- // TODO: Ensure that both the primary and secondary channel are either variables or constants (values)
133
-
134
- for (const channel of primaryPositionalChannels) {
135
- if (this.properties.fitToBand) {
136
- fixPositional(encoding, channel);
137
- }
138
- }
139
-
140
- return encoding;
141
- }
142
-
143
- async initializeGraphics() {
144
- await super.initializeGraphics();
145
- this.createAndLinkShaders(VERTEX_SHADER, FRAGMENT_SHADER);
146
- }
147
-
148
- finalizeGraphicsInitialization() {
149
- super.finalizeGraphicsInitialization();
150
-
151
- this.gl.useProgram(this.programInfo.program);
152
-
153
- const props = this.properties;
154
-
155
- // TODO: Use uniform block.
156
- setUniforms(this.programInfo, {
157
- uPaddingX: props.paddingX,
158
- uPaddingY: props.paddingY,
159
- uFlushX: !!props.flushX,
160
- uFlushY: !!props.flushY,
161
-
162
- uAlign: [alignments[props.align], baselines[props.baseline]],
163
-
164
- uD: [props.dx, -props.dy],
165
-
166
- uLogoLetter: !!props.logoLetters,
167
- uSqueeze: !!props.squeeze,
168
-
169
- uViewportEdgeFadeWidth: [
170
- props.viewportEdgeFadeWidthTop,
171
- props.viewportEdgeFadeWidthRight,
172
- props.viewportEdgeFadeWidthBottom,
173
- props.viewportEdgeFadeWidthLeft,
174
- ],
175
-
176
- uViewportEdgeFadeDistance: [
177
- props.viewportEdgeFadeDistanceTop,
178
- props.viewportEdgeFadeDistanceRight,
179
- props.viewportEdgeFadeDistanceBottom,
180
- props.viewportEdgeFadeDistanceLeft,
181
- ],
182
- });
183
- }
184
-
185
- updateGraphicsData() {
186
- const collector = this.unitView.getCollector();
187
- const data = collector.getData();
188
- const encoding = this.encoding;
189
-
190
- // Count the total number of characters to that we can pre-allocate a typed array
191
- const accessor = this.encoders.text.accessor || this.encoders.text; // accessor or constant value
192
- let charCount = 0;
193
- /** @type {function(any):any} */
194
- const numberFormat = encoding.text.format
195
- ? format(encoding.text.format)
196
- : (d) => d;
197
- for (const d of data) {
198
- // TODO: Optimization: don't format twice (calculation and actual encoding)
199
- const value = numberFormat(accessor(d));
200
- const str = isString(value)
201
- ? value
202
- : value === null
203
- ? ""
204
- : "" + value;
205
- charCount += (str && str.length) || 0;
206
- }
207
-
208
- const builder = new TextVertexBuilder({
209
- encoders: this.encoders,
210
- attributes: this.getAttributes(),
211
- properties: this.properties,
212
- fontMetrics: this.font.metrics,
213
- numCharacters: Math.max(
214
- charCount,
215
- this.properties.minBufferSize || 0
216
- ),
217
- });
218
-
219
- builder.addBatches(collector.facetBatches);
220
-
221
- const vertexData = builder.toArrays();
222
- this.rangeMap.migrateEntries(vertexData.rangeMap);
223
-
224
- this.updateBufferInfo(vertexData);
225
- }
226
-
227
- /**
228
- * @param {import("../view/rendering").GlobalRenderingOptions} options
229
- */
230
- prepareRender(options) {
231
- const ops = super.prepareRender(options);
232
-
233
- let q = 0.35; // TODO: Ensure that this makes sense. Now chosen by trial & error
234
- if (this.properties.logoLetters) {
235
- // Adjust to make stretched letters a bit less blurry
236
- // A proper solution would probably be to compute gradients in the fragment shader
237
- // to find a suitable divisor.
238
- q /= 2;
239
- }
240
-
241
- ops.push(() =>
242
- setUniforms(this.programInfo, {
243
- uTexture: this.font.texture,
244
- uSdfNumerator:
245
- this.font.metrics.common.base / (this.glHelper.dpr / q),
246
- })
247
- );
248
-
249
- ops.push(() =>
250
- setBuffersAndAttributes(
251
- this.gl,
252
- this.programInfo,
253
- this.vertexArrayInfo
254
- )
255
- );
256
-
257
- return ops;
258
- }
259
-
260
- /**
261
- * @param {import("./Mark").MarkRenderingOptions} options
262
- */
263
- render(options) {
264
- const gl = this.gl;
265
-
266
- return this.createRenderCallback(
267
- (offset, count) =>
268
- drawBufferInfo(
269
- gl,
270
- this.vertexArrayInfo,
271
- gl.TRIANGLES,
272
- count,
273
- offset
274
- ),
275
- options
276
- );
277
- }
278
- }
@@ -1 +0,0 @@
1
- {"version":"0.23.1","results":[["/genome/genome.test.js",{"duration":5,"failed":false}],["/scale/scale.test.js",{"duration":12,"failed":false}],["/utils/layout/flexLayout.test.js",{"duration":7,"failed":false}],["/data/flowOptimizer.test.js",{"duration":3,"failed":false}],["/utils/layout/rectangle.test.js",{"duration":5,"failed":false}],["/utils/domainArray.test.js",{"duration":5,"failed":false}],["/data/transforms/regexFold.test.js",{"duration":5,"failed":false}],["/view/scaleResolution.test.js",{"duration":20,"failed":false}],["/view/view.test.js",{"duration":13,"failed":false}],["/view/axisResolution.test.js",{"duration":11,"failed":false}],["/view/flowBuilder.test.js",{"duration":5,"failed":false}],["/encoder/encoder.test.js",{"duration":6,"failed":false}],["/data/transforms/stack.test.js",{"duration":5,"failed":false}],["/data/transforms/identifier.test.js",{"duration":29,"failed":false}],["/data/transforms/coverage.test.js",{"duration":4,"failed":false}],["/data/transforms/flattenDelimited.test.js",{"duration":3,"failed":false}],["/genome/scaleIndex.test.js",{"duration":4,"failed":false}],["/utils/layout/grid.test.js",{"duration":4,"failed":false}],["/utils/topK.test.js",{"duration":50,"failed":false}],["/utils/binnedIndex.test.js",{"duration":4,"failed":false}],["/data/collector.test.js",{"duration":4,"failed":false}],["/data/flow.test.js",{"duration":5,"failed":false}],["/utils/propertyCacher.test.js",{"duration":3,"failed":false}],["/data/transforms/regexExtract.test.js",{"duration":5,"failed":false}],["/data/transforms/pileup.test.js",{"duration":4,"failed":false}],["/utils/indexer.test.js",{"duration":4,"failed":false}],["/encoder/accessor.test.js",{"duration":4,"failed":false}],["/data/sources/sequenceSource.test.js",{"duration":3,"failed":false}],["/data/sources/inlineSource.test.js",{"duration":8,"failed":false}],["/utils/mergeObjects.test.js",{"duration":5,"failed":false}],["/data/flowNode.test.js",{"duration":995,"failed":false}],["/scale/ticks.test.js",{"duration":5,"failed":false}],["/data/formats/fasta.test.js",{"duration":3,"failed":false}],["/data/transforms/flattenSequence.test.js",{"duration":3,"failed":false}],["/utils/addBaseUrl.test.js",{"duration":3,"failed":false}],["/data/transforms/project.test.js",{"duration":4,"failed":false}],["/utils/iterateNestedMaps.test.js",{"duration":7,"failed":false}],["/utils/reservationMap.test.js",{"duration":3,"failed":false}],["/utils/kWayMerge.test.js",{"duration":4,"failed":false}],["/data/transforms/sample.test.js",{"duration":33,"failed":false}],["/utils/propertyCoalescer.test.js",{"duration":3,"failed":false}],["/utils/coalesce.test.js",{"duration":5,"failed":false}],["/data/transforms/filter.test.js",{"duration":4,"failed":false}],["/utils/cloner.test.js",{"duration":2,"failed":false}],["/utils/variableTools.test.js",{"duration":3,"failed":false}],["/view/viewFactory.test.js",{"duration":3,"failed":false}],["/data/transforms/formula.test.js",{"duration":2,"failed":false}],["/utils/concatIterables.test.js",{"duration":5,"failed":false}],["/utils/numberExtractor.test.js",{"duration":2,"failed":false}],["/data/transforms/clone.test.js",{"duration":2,"failed":false}],["/genome/scaleLocus.test.js",{"duration":0,"failed":false}],["/data/dataFlow.test.js",{"duration":0,"failed":false}]]}