@genome-spy/core 0.29.0 → 0.30.2

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 +16373 -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 -784
  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 -489
  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 -488
  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 -791
  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
@@ -1,166 +0,0 @@
1
- import { ticks as d3ticks, tickStep, extent } from "d3-array";
2
- import { format as d3format } from "d3-format";
3
-
4
- const minimumDomainSpan = 1;
5
-
6
- /**
7
- * Creates a "index" scale, which works similarly to d3's band scale but the domain
8
- * consists of integer indexes.
9
- *
10
- * @returns {import("./scaleIndex").ScaleIndex}
11
- */
12
- export default function scaleIndex() {
13
- let domain = [0, 1];
14
- let range = [0, 1];
15
-
16
- let domainSpan = 1;
17
- let rangeSpan = 1;
18
-
19
- let paddingInner = 0;
20
- let paddingOuter = 0;
21
- let align = 0.5;
22
-
23
- /** The number of the first element. This affects the generated ticks and their labels. */
24
- let numberingOffset = 0;
25
-
26
- const scaleFunction = (/** @type {number} */ x) =>
27
- ((x + align - domain[0]) / domainSpan) * rangeSpan + range[0];
28
-
29
- /**
30
- * In principle, the domain consists of integer indices. However,
31
- * we accept real numbers so that items can be centered inside a band.
32
- *
33
- * @type {import("./scaleIndex").ScaleIndex}
34
- */
35
- const scale = /** @type {any} */ (scaleFunction);
36
-
37
- scale.invert = (y) =>
38
- ((y - range[0]) / rangeSpan) * domainSpan + domain[0] - align;
39
-
40
- // @ts-expect-error
41
- scale.domain = function (_) {
42
- if (arguments.length) {
43
- domain = extent(_);
44
- domainSpan = domain[1] - domain[0];
45
-
46
- if (domainSpan < minimumDomainSpan) {
47
- domainSpan = minimumDomainSpan;
48
- const centroid = (domain[0] + domain[1]) / 2;
49
- domain[0] = centroid - domainSpan / 2;
50
- domain[1] = centroid + domainSpan / 2;
51
- }
52
-
53
- return scale;
54
- } else {
55
- return domain;
56
- }
57
- };
58
-
59
- // @ts-expect-error
60
- scale.range = function (_) {
61
- if (arguments.length) {
62
- range = [..._];
63
- rangeSpan = range[1] - range[0];
64
- return scale;
65
- } else {
66
- return range;
67
- }
68
- };
69
-
70
- // @ts-expect-error
71
- scale.numberingOffset = function (_) {
72
- if (arguments.length) {
73
- numberingOffset = _;
74
- return scale;
75
- } else {
76
- return numberingOffset;
77
- }
78
- };
79
-
80
- // @ts-expect-error
81
- scale.padding = function (_) {
82
- if (arguments.length) {
83
- paddingOuter = _;
84
- paddingInner = Math.min(1, _);
85
- return scale;
86
- } else {
87
- return paddingInner;
88
- }
89
- };
90
-
91
- // @ts-expect-error
92
- scale.paddingInner = function (_) {
93
- if (arguments.length) {
94
- paddingInner = Math.min(1, _);
95
- return scale;
96
- } else {
97
- return paddingInner;
98
- }
99
- };
100
-
101
- // @ts-expect-error
102
- scale.paddingOuter = function (_) {
103
- if (arguments.length) {
104
- paddingOuter = _;
105
- return scale;
106
- } else {
107
- return paddingOuter;
108
- }
109
- };
110
-
111
- // @ts-expect-error
112
- scale.align = function (_) {
113
- if (arguments.length) {
114
- align = Math.max(0, Math.min(1, _));
115
- return scale;
116
- } else {
117
- return align;
118
- }
119
- };
120
-
121
- scale.step = () => rangeSpan / domainSpan;
122
-
123
- scale.bandwidth = () => scale.step();
124
-
125
- scale.ticks = (count) => {
126
- const align = /** @type {number} */ (scale.align());
127
- const offset = /** @type {number} */ (scale.numberingOffset());
128
- return d3ticks(
129
- domain[0] - align + offset,
130
- domain[1] - align + offset,
131
- Math.min(count, Math.ceil(domainSpan))
132
- )
133
- .filter(Number.isInteger)
134
- .map((x) => x - numberingOffset);
135
- };
136
-
137
- scale.tickFormat = (count, specifier) => {
138
- if (specifier) {
139
- throw new Error(
140
- "Index scale's tickFormat does not support a specifier!"
141
- );
142
- }
143
-
144
- const step = tickStep(
145
- domain[0],
146
- domain[1],
147
- Math.min(count, Math.ceil(domainSpan))
148
- );
149
- // Use higher display precision for smaller spans
150
- // TODO: max absolute value should be taken into account too. 2.00M vs 200M
151
- const numberFormat = step < 100000 ? d3format(",") : d3format(".3s");
152
-
153
- return /** @param {number} x */ (x) =>
154
- numberFormat(x + numberingOffset);
155
- };
156
-
157
- scale.copy = () =>
158
- scaleIndex()
159
- .domain(domain)
160
- .range(range)
161
- .paddingInner(paddingInner)
162
- .paddingOuter(paddingOuter)
163
- .numberingOffset(numberingOffset);
164
-
165
- return scale;
166
- }
@@ -1,78 +0,0 @@
1
- import { expect, test } from "vitest";
2
- import scaleIndex from "./scaleIndex";
3
-
4
- test("Scale with defaults works as expected", () => {
5
- const scale = scaleIndex();
6
-
7
- // Align is 0.5 by default
8
- expect(scale(-1)).toEqual(-0.5);
9
- expect(scale(0)).toEqual(0.5);
10
- expect(scale(1)).toEqual(1.5);
11
- expect(scale(2)).toEqual(2.5);
12
- });
13
-
14
- test("Scale scales correctly with custom domain and range", () => {
15
- const scale = scaleIndex().domain([0, 10]).range([100, 200]).align(0.0);
16
-
17
- expect(scale(0)).toEqual(100);
18
- expect(scale(10)).toEqual(200);
19
- });
20
-
21
- test("Invert works as expected", () => {
22
- const scale = scaleIndex().domain([0, 10]).range([100, 200]).align(0.0);
23
-
24
- expect(scale.invert(scale(0))).toEqual(0);
25
- expect(scale.invert(scale(5))).toEqual(5);
26
- expect(scale.invert(scale(10))).toEqual(10);
27
- });
28
-
29
- test("Scale scales correctly with custom domain, range, and align", () => {
30
- const scale = scaleIndex().domain([0, 10]).range([100, 200]).align(0.5);
31
-
32
- expect(scale(0)).toEqual(105);
33
- expect(scale(10)).toEqual(205);
34
- });
35
-
36
- test("Invert works as expected with align", () => {
37
- const scale = scaleIndex().domain([0, 10]).range([100, 200]).align(0.5);
38
-
39
- expect(scale.invert(scale(0))).toEqual(0);
40
- expect(scale.invert(scale(5))).toEqual(5);
41
- expect(scale.invert(scale(10))).toEqual(10);
42
- });
43
-
44
- test("domain() accepts numeric ordinal domain and computes its extent", () => {
45
- const scale = scaleIndex().domain([7, 3, 5, 9, 8]);
46
- expect(scale.domain()).toEqual([3, 9]);
47
- });
48
-
49
- test("domain() clamps the minimum domain span to one", () => {
50
- const scale = scaleIndex().domain([1.25, 1.75]);
51
- expect(scale.domain()).toEqual([1, 2]);
52
-
53
- scale.domain([1.75, 2.25]);
54
- expect(scale.domain()).toEqual([1.5, 2.5]);
55
- });
56
-
57
- test("ticks() produces integer values", () => {
58
- const scale = scaleIndex().domain([0, 5]).numberingOffset(0);
59
-
60
- expect(scale.ticks(5)).toEqual([0, 1, 2, 3, 4]);
61
- expect(scale.ticks(100)).toEqual([0, 1, 2, 3, 4]);
62
- });
63
-
64
- test("ticks() take numberingOffset into account", () => {
65
- const scale = scaleIndex().domain([10, 15]).numberingOffset(1);
66
-
67
- // The ticks have been offset so that nice labels can be generated (5, 10, 15, ...)
68
- expect(scale.ticks(5)).toEqual([10, 11, 12, 13, 14]);
69
- });
70
-
71
- test("tickFormat() takes numberingOffset into account", () => {
72
- const scale = scaleIndex().domain([10, 15]).numberingOffset(1);
73
-
74
- const format = scale.tickFormat(5);
75
-
76
- // Although the ticks have been offset, the labels should be nice
77
- expect(scale.ticks(5).map(format)).toEqual(["11", "12", "13", "14", "15"]);
78
- });
@@ -1,11 +0,0 @@
1
- import Genome from "./genome";
2
- import { ScaleIndex } from "./scaleIndex";
3
-
4
- export default function scaleLocus(): ScaleLocus;
5
-
6
- export interface ScaleLocus extends ScaleIndex {
7
- genome(): Genome;
8
- genome(genome: Genome): this;
9
- }
10
-
11
- export function isScaleLocus(scale: any): scale is ScaleLocus;
@@ -1,108 +0,0 @@
1
- import { tickStep } from "d3-array";
2
- import { format as d3format } from "d3-format";
3
- import scaleIndex from "./scaleIndex.js";
4
-
5
- /**
6
- * Creates a "locus" scale, which works similarly to band scale but the domain
7
- * consists of integer indexes.
8
- *
9
- * @typedef {import("./genome").default} Genome
10
- * @returns {import("./scaleLocus").ScaleLocus}
11
- */
12
- export default function scaleLocus() {
13
- /** @type {import("./scaleLocus").ScaleLocus} */
14
- const scale = /** @type {any} */ (scaleIndex().numberingOffset(1));
15
-
16
- /** @type {Genome} */
17
- let genome;
18
-
19
- // @ts-expect-error
20
- scale.genome = function (_) {
21
- if (arguments.length) {
22
- genome = _;
23
- return scale;
24
- } else {
25
- return genome;
26
- }
27
- };
28
-
29
- scale.ticks = (count) => {
30
- if (!genome) {
31
- return [];
32
- }
33
-
34
- const domain = scale.domain();
35
- const numberingOffset = scale.numberingOffset();
36
-
37
- const [minChrom, maxChrom] = [
38
- Math.max(domain[0], 0),
39
- Math.min(domain[1], genome.totalSize - 1),
40
- ].map((x) => genome.toChromosome(x));
41
-
42
- const step = Math.max(1, tickStep(domain[0], domain[1], count));
43
-
44
- const ticks = [];
45
-
46
- for (let i = minChrom.index; i <= maxChrom.index; i++) {
47
- const chrom = genome.chromosomes[i];
48
-
49
- const from = Math.max(
50
- chrom.continuousStart + step,
51
- domain[0] - ((domain[0] - chrom.continuousStart) % step)
52
- );
53
- const to = Math.min(chrom.continuousEnd - step / 4, domain[1] + 1);
54
- for (let pos = from; pos <= to; pos += step) {
55
- const tick = pos - numberingOffset;
56
- if (tick >= domain[0] && tick < domain[1]) {
57
- ticks.push(tick);
58
- }
59
- }
60
- }
61
-
62
- return ticks;
63
- };
64
-
65
- scale.tickFormat = (count, specifier) => {
66
- if (!genome) {
67
- return;
68
- }
69
-
70
- if (specifier) {
71
- throw new Error(
72
- "Locus scale's tickFormat does not support a specifier!"
73
- );
74
- }
75
-
76
- const domain = scale.domain();
77
- const domainSpan = domain[1] - domain[0];
78
- const numberingOffset = scale.numberingOffset();
79
-
80
- const step = tickStep(
81
- domain[0],
82
- domain[1],
83
- Math.min(count, Math.ceil(domainSpan))
84
- );
85
- // Use higher display precision for smaller spans
86
- // TODO: max absolute value should be taken into account too. 2.00M vs 200M
87
- const numberFormat = step < 1e6 ? d3format(",") : d3format(".3s");
88
-
89
- /** @type {function(number):number} */
90
- const fixer = (x) => x - genome.toChromosome(x).continuousStart;
91
-
92
- return /** @param {number} x */ (x) =>
93
- numberFormat(fixer(x) + numberingOffset);
94
- };
95
-
96
- const originalCopy = scale.copy;
97
-
98
- scale.copy = () => originalCopy().genome(genome);
99
-
100
- return scale;
101
- }
102
-
103
- /**
104
- * @type {import("./scaleLocus").isScaleLocus}
105
- */
106
- export function isScaleLocus(scale) {
107
- return scale.type == "locus";
108
- }
@@ -1,4 +0,0 @@
1
- import { test } from "vitest";
2
- import scaleLocus from "./scaleLocus";
3
-
4
- test.todo("Write some tests!");