@genome-spy/core 0.65.0 → 0.66.1

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 (232) hide show
  1. package/dist/bundle/browser-BRemItdO.js +138 -0
  2. package/dist/bundle/{index-CD7FLu9x.js → index-BatuyGAI.js} +23 -21
  3. package/dist/bundle/{index-C0llXMqm.js → index-ByuE8dvu.js} +140 -88
  4. package/dist/bundle/index-Cq3QFUxX.js +1781 -0
  5. package/dist/bundle/index-D28m8tSW.js +1607 -0
  6. package/dist/bundle/index-DbJ0oeYM.js +631 -0
  7. package/dist/bundle/index.es.js +17587 -16593
  8. package/dist/bundle/index.js +214 -212
  9. package/dist/bundle/{inflate-DRgHi_KK.js → inflate-GtwLkvSP.js} +222 -224
  10. package/dist/bundle/unzip-NywezaRR.js +1492 -0
  11. package/dist/schema.json +13 -3
  12. package/dist/src/config/scaleDefaults.d.ts +8 -0
  13. package/dist/src/config/scaleDefaults.d.ts.map +1 -0
  14. package/dist/src/config/scaleDefaults.js +45 -0
  15. package/dist/src/data/flowInit.js +2 -2
  16. package/dist/src/data/sources/lazy/axisTickSource.js +1 -1
  17. package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts +1 -1
  18. package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts.map +1 -1
  19. package/dist/src/data/sources/lazy/singleAxisLazySource.js +10 -3
  20. package/dist/src/data/sources/lazy/singleAxisWindowedSource.d.ts.map +1 -1
  21. package/dist/src/data/sources/lazy/singleAxisWindowedSource.js +5 -1
  22. package/dist/src/data/transforms/filterScoredLabels.d.ts +1 -1
  23. package/dist/src/data/transforms/filterScoredLabels.d.ts.map +1 -1
  24. package/dist/src/data/transforms/filterScoredLabels.js +1 -1
  25. package/dist/src/data/transforms/linearizeGenomicCoordinate.d.ts.map +1 -1
  26. package/dist/src/data/transforms/linearizeGenomicCoordinate.js +2 -1
  27. package/dist/src/encoder/encoder.d.ts +1 -1
  28. package/dist/src/encoder/encoder.d.ts.map +1 -1
  29. package/dist/src/encoder/encoder.js +1 -1
  30. package/dist/src/genome/scaleLocus.d.ts +39 -0
  31. package/dist/src/genome/scaleLocus.d.ts.map +1 -1
  32. package/dist/src/genome/scaleLocus.js +76 -0
  33. package/dist/src/genomeSpy/canvasExport.d.ts +19 -0
  34. package/dist/src/genomeSpy/canvasExport.d.ts.map +1 -0
  35. package/dist/src/genomeSpy/canvasExport.js +66 -0
  36. package/dist/src/genomeSpy/containerUi.d.ts +17 -0
  37. package/dist/src/genomeSpy/containerUi.d.ts.map +1 -0
  38. package/dist/src/genomeSpy/containerUi.js +78 -0
  39. package/dist/src/genomeSpy/eventListenerRegistry.d.ts +19 -0
  40. package/dist/src/genomeSpy/eventListenerRegistry.d.ts.map +1 -0
  41. package/dist/src/genomeSpy/eventListenerRegistry.js +38 -0
  42. package/dist/src/genomeSpy/inputBindingManager.d.ts +14 -0
  43. package/dist/src/genomeSpy/inputBindingManager.d.ts.map +1 -0
  44. package/dist/src/genomeSpy/inputBindingManager.js +63 -0
  45. package/dist/src/genomeSpy/interactionController.d.ts +40 -0
  46. package/dist/src/genomeSpy/interactionController.d.ts.map +1 -0
  47. package/dist/src/genomeSpy/interactionController.js +371 -0
  48. package/dist/src/genomeSpy/keyboardListenerManager.d.ts +10 -0
  49. package/dist/src/genomeSpy/keyboardListenerManager.d.ts.map +1 -0
  50. package/dist/src/genomeSpy/keyboardListenerManager.js +31 -0
  51. package/dist/src/genomeSpy/loadingIndicatorManager.d.ts +15 -0
  52. package/dist/src/genomeSpy/loadingIndicatorManager.d.ts.map +1 -0
  53. package/dist/src/genomeSpy/loadingIndicatorManager.js +92 -0
  54. package/dist/src/genomeSpy/renderCoordinator.d.ts +22 -0
  55. package/dist/src/genomeSpy/renderCoordinator.d.ts.map +1 -0
  56. package/dist/src/genomeSpy/renderCoordinator.js +118 -0
  57. package/dist/src/genomeSpy/viewContextFactory.d.ts +18 -0
  58. package/dist/src/genomeSpy/viewContextFactory.d.ts.map +1 -0
  59. package/dist/src/genomeSpy/viewContextFactory.js +79 -0
  60. package/dist/src/genomeSpy/viewDataInit.d.ts +12 -0
  61. package/dist/src/genomeSpy/viewDataInit.d.ts.map +1 -0
  62. package/dist/src/genomeSpy/viewDataInit.js +41 -0
  63. package/dist/src/genomeSpy/viewHierarchyConfig.d.ts +14 -0
  64. package/dist/src/genomeSpy/viewHierarchyConfig.d.ts.map +1 -0
  65. package/dist/src/genomeSpy/viewHierarchyConfig.js +24 -0
  66. package/dist/src/genomeSpy/viewHighlight.d.ts +5 -0
  67. package/dist/src/genomeSpy/viewHighlight.d.ts.map +1 -0
  68. package/dist/src/genomeSpy/viewHighlight.js +30 -0
  69. package/dist/src/genomeSpy.d.ts +16 -71
  70. package/dist/src/genomeSpy.d.ts.map +1 -1
  71. package/dist/src/genomeSpy.js +179 -745
  72. package/dist/src/gl/glslScaleGenerator.d.ts +1 -1
  73. package/dist/src/gl/webGLHelper.d.ts +2 -2
  74. package/dist/src/gl/webGLHelper.d.ts.map +1 -1
  75. package/dist/src/gl/webGLHelper.js +4 -4
  76. package/dist/src/index.d.ts.map +1 -1
  77. package/dist/src/index.js +2 -12
  78. package/dist/src/marks/mark.d.ts.map +1 -1
  79. package/dist/src/marks/mark.js +4 -2
  80. package/dist/src/{view → scales}/axisResolution.d.ts +9 -16
  81. package/dist/src/scales/axisResolution.d.ts.map +1 -0
  82. package/dist/src/{view → scales}/axisResolution.js +29 -18
  83. package/dist/src/scales/axisResolution.test.d.ts.map +1 -0
  84. package/dist/src/scales/scaleDomainAggregator.d.ts +57 -0
  85. package/dist/src/scales/scaleDomainAggregator.d.ts.map +1 -0
  86. package/dist/src/scales/scaleDomainAggregator.js +162 -0
  87. package/dist/src/scales/scaleDomainAggregator.test.d.ts +2 -0
  88. package/dist/src/scales/scaleDomainAggregator.test.d.ts.map +1 -0
  89. package/dist/src/scales/scaleInstanceManager.d.ts +40 -0
  90. package/dist/src/scales/scaleInstanceManager.d.ts.map +1 -0
  91. package/dist/src/scales/scaleInstanceManager.js +313 -0
  92. package/dist/src/scales/scaleInstanceManager.test.d.ts +2 -0
  93. package/dist/src/scales/scaleInstanceManager.test.d.ts.map +1 -0
  94. package/dist/src/scales/scaleInteractionController.d.ts +73 -0
  95. package/dist/src/scales/scaleInteractionController.d.ts.map +1 -0
  96. package/dist/src/scales/scaleInteractionController.js +336 -0
  97. package/dist/src/scales/scaleInteractionController.test.d.ts +2 -0
  98. package/dist/src/scales/scaleInteractionController.test.d.ts.map +1 -0
  99. package/dist/src/scales/scalePropsResolver.d.ts +23 -0
  100. package/dist/src/scales/scalePropsResolver.d.ts.map +1 -0
  101. package/dist/src/scales/scalePropsResolver.js +74 -0
  102. package/dist/src/{view → scales}/scaleResolution.d.ts +52 -35
  103. package/dist/src/scales/scaleResolution.d.ts.map +1 -0
  104. package/dist/src/scales/scaleResolution.js +658 -0
  105. package/dist/src/scales/scaleResolution.test.d.ts.map +1 -0
  106. package/dist/src/scales/scaleResolutionConstants.d.ts +6 -0
  107. package/dist/src/scales/scaleResolutionConstants.d.ts.map +1 -0
  108. package/dist/src/scales/scaleResolutionConstants.js +5 -0
  109. package/dist/src/scales/scaleRules.d.ts +16 -0
  110. package/dist/src/scales/scaleRules.d.ts.map +1 -0
  111. package/dist/src/scales/scaleRules.js +103 -0
  112. package/dist/src/scales/scaleRules.test.d.ts +2 -0
  113. package/dist/src/scales/scaleRules.test.d.ts.map +1 -0
  114. package/dist/src/spec/channel.d.ts +13 -18
  115. package/dist/src/spec/scale.d.ts +6 -0
  116. package/dist/src/types/embedApi.d.ts +5 -0
  117. package/dist/src/types/scaleResolutionApi.d.ts +1 -1
  118. package/dist/src/view/concatView.d.ts +18 -0
  119. package/dist/src/view/concatView.d.ts.map +1 -1
  120. package/dist/src/view/concatView.js +73 -0
  121. package/dist/src/view/concatView.test.d.ts +2 -0
  122. package/dist/src/view/concatView.test.d.ts.map +1 -0
  123. package/dist/src/view/containerMutationHelper.d.ts +74 -0
  124. package/dist/src/view/containerMutationHelper.d.ts.map +1 -0
  125. package/dist/src/view/containerMutationHelper.js +114 -0
  126. package/dist/src/view/containerView.d.ts +0 -7
  127. package/dist/src/view/containerView.d.ts.map +1 -1
  128. package/dist/src/view/containerView.js +0 -10
  129. package/dist/src/view/facetView.d.ts.map +1 -1
  130. package/dist/src/view/facetView.js +0 -15
  131. package/dist/src/view/gridView/gridChild.d.ts +11 -0
  132. package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
  133. package/dist/src/view/gridView/gridChild.js +32 -6
  134. package/dist/src/view/gridView/gridView.d.ts +39 -1
  135. package/dist/src/view/gridView/gridView.d.ts.map +1 -1
  136. package/dist/src/view/gridView/gridView.js +106 -48
  137. package/dist/src/view/gridView/gridView.test.d.ts +2 -0
  138. package/dist/src/view/gridView/gridView.test.d.ts.map +1 -0
  139. package/dist/src/view/gridView/scrollbar.d.ts +39 -8
  140. package/dist/src/view/gridView/scrollbar.d.ts.map +1 -1
  141. package/dist/src/view/gridView/scrollbar.js +184 -69
  142. package/dist/src/view/layerView.d.ts +14 -0
  143. package/dist/src/view/layerView.d.ts.map +1 -1
  144. package/dist/src/view/layerView.js +66 -0
  145. package/dist/src/view/layerView.test.d.ts +2 -0
  146. package/dist/src/view/layerView.test.d.ts.map +1 -0
  147. package/dist/src/view/testUtils.d.ts.map +1 -1
  148. package/dist/src/view/testUtils.js +2 -1
  149. package/dist/src/view/unitView.d.ts.map +1 -1
  150. package/dist/src/view/unitView.js +24 -34
  151. package/dist/src/view/view.d.ts +6 -6
  152. package/dist/src/view/view.d.ts.map +1 -1
  153. package/dist/src/view/view.js +4 -4
  154. package/package.json +2 -2
  155. package/dist/bundle/browser-txUcLy2H.js +0 -123
  156. package/dist/bundle/index-BQpbYrv4.js +0 -1712
  157. package/dist/bundle/index-BhtHKLUo.js +0 -73
  158. package/dist/bundle/index-CCe8rnZz.js +0 -716
  159. package/dist/bundle/index-DhcU-Gk-.js +0 -1487
  160. package/dist/src/data/collector.test.js +0 -138
  161. package/dist/src/data/dataFlow.test.js +0 -38
  162. package/dist/src/data/flow.test.js +0 -81
  163. package/dist/src/data/flowInit.test.js +0 -413
  164. package/dist/src/data/flowNode.test.js +0 -50
  165. package/dist/src/data/flowOptimizer.test.js +0 -209
  166. package/dist/src/data/formats/fasta.test.js +0 -27
  167. package/dist/src/data/sources/inlineSource.test.js +0 -63
  168. package/dist/src/data/sources/sequenceSource.test.js +0 -81
  169. package/dist/src/data/transforms/aggregate.test.js +0 -134
  170. package/dist/src/data/transforms/clone.test.js +0 -11
  171. package/dist/src/data/transforms/coverage.test.js +0 -238
  172. package/dist/src/data/transforms/filter.test.js +0 -20
  173. package/dist/src/data/transforms/flatten.test.js +0 -96
  174. package/dist/src/data/transforms/flattenDelimited.test.js +0 -90
  175. package/dist/src/data/transforms/flattenSequence.test.js +0 -34
  176. package/dist/src/data/transforms/formula.test.js +0 -25
  177. package/dist/src/data/transforms/identifier.test.js +0 -92
  178. package/dist/src/data/transforms/pileup.test.js +0 -70
  179. package/dist/src/data/transforms/project.test.js +0 -32
  180. package/dist/src/data/transforms/regexExtract.test.js +0 -70
  181. package/dist/src/data/transforms/regexFold.test.js +0 -201
  182. package/dist/src/data/transforms/sample.test.js +0 -38
  183. package/dist/src/data/transforms/stack.test.js +0 -91
  184. package/dist/src/encoder/accessor.test.js +0 -162
  185. package/dist/src/encoder/encoder.test.js +0 -105
  186. package/dist/src/genome/genome.test.js +0 -268
  187. package/dist/src/genome/genomes.test.js +0 -8
  188. package/dist/src/genome/scaleIndex.test.js +0 -78
  189. package/dist/src/genome/scaleLocus.test.js +0 -4
  190. package/dist/src/scale/scale.test.js +0 -326
  191. package/dist/src/scale/ticks.test.js +0 -46
  192. package/dist/src/selection/selection.test.js +0 -14
  193. package/dist/src/utils/addBaseUrl.test.js +0 -30
  194. package/dist/src/utils/binnedIndex.test.js +0 -201
  195. package/dist/src/utils/cloner.test.js +0 -35
  196. package/dist/src/utils/coalesce.test.js +0 -16
  197. package/dist/src/utils/concatIterables.test.js +0 -8
  198. package/dist/src/utils/domainArray.test.js +0 -130
  199. package/dist/src/utils/indexer.test.js +0 -49
  200. package/dist/src/utils/interactionEvent.test.js +0 -35
  201. package/dist/src/utils/iterateNestedMaps.test.js +0 -33
  202. package/dist/src/utils/kWayMerge.test.js +0 -30
  203. package/dist/src/utils/mergeObjects.test.js +0 -42
  204. package/dist/src/utils/numberExtractor.test.js +0 -6
  205. package/dist/src/utils/propertyCacher.test.js +0 -89
  206. package/dist/src/utils/propertyCoalescer.test.js +0 -25
  207. package/dist/src/utils/radixSort.test.js +0 -51
  208. package/dist/src/utils/reservationMap.test.js +0 -20
  209. package/dist/src/utils/ringBuffer.test.js +0 -39
  210. package/dist/src/utils/topK.test.js +0 -54
  211. package/dist/src/utils/trees.test.js +0 -135
  212. package/dist/src/utils/url.test.js +0 -28
  213. package/dist/src/utils/variableTools.test.js +0 -13
  214. package/dist/src/view/axisResolution.d.ts.map +0 -1
  215. package/dist/src/view/axisResolution.test.d.ts.map +0 -1
  216. package/dist/src/view/axisResolution.test.js +0 -206
  217. package/dist/src/view/flowBuilder.test.js +0 -125
  218. package/dist/src/view/gridView/selectionRect.test.js +0 -87
  219. package/dist/src/view/layout/flexLayout.test.js +0 -323
  220. package/dist/src/view/layout/grid.test.js +0 -71
  221. package/dist/src/view/layout/rectangle.test.js +0 -192
  222. package/dist/src/view/paramMediator.test.js +0 -282
  223. package/dist/src/view/scaleResolution.d.ts.map +0 -1
  224. package/dist/src/view/scaleResolution.js +0 -1059
  225. package/dist/src/view/scaleResolution.test.d.ts.map +0 -1
  226. package/dist/src/view/scaleResolution.test.js +0 -645
  227. package/dist/src/view/view.test.js +0 -245
  228. package/dist/src/view/viewDispose.test.js +0 -110
  229. package/dist/src/view/viewFactory.test.js +0 -25
  230. package/dist/src/view/viewUtils.test.js +0 -87
  231. /package/dist/src/{view → scales}/axisResolution.test.d.ts +0 -0
  232. /package/dist/src/{view → scales}/scaleResolution.test.d.ts +0 -0
package/dist/schema.json CHANGED
@@ -2353,7 +2353,9 @@
2353
2353
  "type": "object"
2354
2354
  },
2355
2355
  "FieldOrDatumDefWithCondition<MarkPropFieldDef<Type>,(string|null)>": {
2356
- "additionalProperties": false,
2356
+ "additionalProperties": {
2357
+ "not": {}
2358
+ },
2357
2359
  "description": "A FieldDef with Condition<ValueDef> { condition: {value: ...}, field: ..., ... }",
2358
2360
  "properties": {
2359
2361
  "condition": {
@@ -2410,7 +2412,9 @@
2410
2412
  "type": "object"
2411
2413
  },
2412
2414
  "FieldOrDatumDefWithCondition<MarkPropFieldDef<Type>,number>": {
2413
- "additionalProperties": false,
2415
+ "additionalProperties": {
2416
+ "not": {}
2417
+ },
2414
2418
  "description": "A FieldDef with Condition<ValueDef> { condition: {value: ...}, field: ..., ... }",
2415
2419
  "properties": {
2416
2420
  "condition": {
@@ -2467,7 +2471,9 @@
2467
2471
  "type": "object"
2468
2472
  },
2469
2473
  "FieldOrDatumDefWithCondition<MarkPropFieldDef<TypeForShape>,(string|null)>": {
2470
- "additionalProperties": false,
2474
+ "additionalProperties": {
2475
+ "not": {}
2476
+ },
2471
2477
  "description": "A FieldDef with Condition<ValueDef> { condition: {value: ...}, field: ..., ... }",
2472
2478
  "properties": {
2473
2479
  "condition": {
@@ -8667,6 +8673,10 @@
8667
8673
  "description": "The alignment of the steps within the scale range.\n\nThis value must lie in the range `[0,1]`. A value of `0.5` indicates that the steps should be centered within the range. A value of `0` or `1` may be used to shift the bands to one side, say to position them adjacent to an axis.\n\n__Default value:__ `0.5`",
8668
8674
  "type": "number"
8669
8675
  },
8676
+ "assembly": {
8677
+ "description": "The genome assembly name for locus scales. If undefined, the default genome from the genome store is used.",
8678
+ "type": "string"
8679
+ },
8670
8680
  "base": {
8671
8681
  "description": "The logarithm base of the `log` scale (default `10`).",
8672
8682
  "type": "number"
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @param {import("../spec/channel.js").Channel} channel
3
+ * @param {import("../spec/channel.js").Type} dataType
4
+ * @param {boolean} isExplicitDomain
5
+ * @returns {import("../spec/scale.js").Scale}
6
+ */
7
+ export function getDefaultScaleProperties(channel: import("../spec/channel.js").Channel, dataType: import("../spec/channel.js").Type, isExplicitDomain: boolean): import("../spec/scale.js").Scale;
8
+ //# sourceMappingURL=scaleDefaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaleDefaults.d.ts","sourceRoot":"","sources":["../../../src/config/scaleDefaults.js"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,mDALW,OAAO,oBAAoB,EAAE,OAAO,YACpC,OAAO,oBAAoB,EAAE,IAAI,oBACjC,OAAO,GACL,OAAO,kBAAkB,EAAE,KAAK,CAiC5C"}
@@ -0,0 +1,45 @@
1
+ import {
2
+ isColorChannel,
3
+ isDiscreteChannel,
4
+ isPositionalChannel,
5
+ } from "../encoder/encoder.js";
6
+ import { NOMINAL, ORDINAL } from "../scales/scaleResolutionConstants.js";
7
+
8
+ /**
9
+ * @param {import("../spec/channel.js").Channel} channel
10
+ * @param {import("../spec/channel.js").Type} dataType
11
+ * @param {boolean} isExplicitDomain
12
+ * @returns {import("../spec/scale.js").Scale}
13
+ */
14
+ export function getDefaultScaleProperties(channel, dataType, isExplicitDomain) {
15
+ /** @type {import("../spec/scale.js").Scale} */
16
+ const props = {};
17
+
18
+ if (isExplicitDomain) {
19
+ props.zero = false;
20
+ }
21
+
22
+ if (isPositionalChannel(channel)) {
23
+ props.nice = !isExplicitDomain;
24
+ } else if (isColorChannel(channel)) {
25
+ // TODO: Named ranges
26
+ props.scheme =
27
+ dataType == NOMINAL
28
+ ? "tableau10"
29
+ : dataType == ORDINAL
30
+ ? "blues"
31
+ : "viridis";
32
+ } else if (isDiscreteChannel(channel)) {
33
+ // Shapes of point mark, for example
34
+ props.range =
35
+ channel == "shape"
36
+ ? ["circle", "square", "triangle-up", "cross", "diamond"]
37
+ : [];
38
+ } else if (channel == "size") {
39
+ props.range = [0, 400]; // TODO: Configurable default. This is currently optimized for points.
40
+ } else if (channel == "angle") {
41
+ props.range = [0, 360];
42
+ }
43
+
44
+ return props;
45
+ }
@@ -2,7 +2,7 @@ import UnitView from "../view/unitView.js";
2
2
  import { buildDataFlow } from "../view/flowBuilder.js";
3
3
  import { optimizeDataFlow } from "./flowOptimizer.js";
4
4
  import { VISIT_SKIP } from "../view/view.js";
5
- import { reconfigureScales } from "../view/scaleResolution.js";
5
+ import { reconfigureScaleDomains } from "../scales/scaleResolution.js";
6
6
 
7
7
  /** @type {WeakMap<import("./sources/dataSource.js").default, Promise<void>>} */
8
8
  const inFlightLoads = new WeakMap();
@@ -215,7 +215,7 @@ export function loadViewSubtreeData(
215
215
  loadDataSourceOnce(dataSource)
216
216
  )
217
217
  ).then((results) => {
218
- reconfigureScales(subtreeRoot);
218
+ reconfigureScaleDomains(subtreeRoot);
219
219
  broadcastSubtreeDataReady(subtreeRoot);
220
220
  return results;
221
221
  });
@@ -50,7 +50,7 @@ export default class AxisTickSource extends SingleAxisLazySource {
50
50
  // Note, although this function is async, it is not awaited. Data are updated
51
51
  // synchronously to ensure that the new ticks are available before the next frame is drawn.
52
52
 
53
- const scale = this.scaleResolution.scale;
53
+ const scale = this.scaleResolution.getScale();
54
54
  const axisLength = this.scaleResolution.getAxisLength();
55
55
  const axisParams = this.params.axis;
56
56
 
@@ -16,7 +16,7 @@ export default class SingleAxisLazySource extends DataSource {
16
16
  protected initializedPromise: Promise<void>;
17
17
  /** @type {import("../../../spec/channel.js").PrimaryPositionalChannel} */
18
18
  channel: import("../../../spec/channel.js").PrimaryPositionalChannel;
19
- scaleResolution: import("../../../view/scaleResolution.js").default;
19
+ scaleResolution: import("../../../scales/scaleResolution.js").default;
20
20
  /**
21
21
  * Convenience getter for genome.
22
22
  *
@@ -1 +1 @@
1
- {"version":3,"file":"singleAxisLazySource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/singleAxisLazySource.js"],"names":[],"mappings":"AAIA;;;;GAIG;AACH;IAOI;;;OAGG;IACH,kBAHW,OAAO,uBAAuB,EAAE,OAAO,WACvC,OAAO,0BAA0B,EAAE,wBAAwB,EA+CrE;IAvDD;;;OAGG;IACH,4CAAuC;IAmBnC,2EAA2E;IAC3E,SADW,OAAO,0BAA0B,EAAE,wBAAwB,CAChD;IAEtB,oEAA4D;IA+BhE;;;;OAIG;IACH,oEAEC;IAED;;;;;;OAMG;IACH,wBAJW,MAAM,EAAE,iBACR,OAAO,yBAAyB,EAAE,gBAAgB,EAAE,QAK9D;IAED;;;;;OAKG;IACH,gCAGC;IAQD;;;;;;;;OAQG;IACH,8BAHW,OAAO,mBAAmB,EAAE,KAAK,EAAE,EAAE,QAgB/C;CACJ;uBA9HsB,kBAAkB"}
1
+ {"version":3,"file":"singleAxisLazySource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/singleAxisLazySource.js"],"names":[],"mappings":"AAIA;;;;GAIG;AACH;IAOI;;;OAGG;IACH,kBAHW,OAAO,uBAAuB,EAAE,OAAO,WACvC,OAAO,0BAA0B,EAAE,wBAAwB,EA+CrE;IAvDD;;;OAGG;IACH,4CAAuC;IAmBnC,2EAA2E;IAC3E,SADW,OAAO,0BAA0B,EAAE,wBAAwB,CAChD;IAEtB,sEAA4D;IA+BhE;;;;OAIG;IACH,oEASC;IAED;;;;;;OAMG;IACH,wBAJW,MAAM,EAAE,iBACR,OAAO,yBAAyB,EAAE,gBAAgB,EAAE,QAK9D;IAED;;;;;OAKG;IACH,gCAGC;IAQD;;;;;;;;OAQG;IACH,8BAHW,OAAO,mBAAmB,EAAE,KAAK,EAAE,EAAE,QAgB/C;CACJ;uBArIsB,kBAAkB"}
@@ -1,6 +1,6 @@
1
1
  import UnitView from "../../../view/unitView.js";
2
2
  import DataSource from "../dataSource.js";
3
- import { reconfigureScales } from "../../../view/scaleResolution.js";
3
+ import { reconfigureScaleDomains } from "../../../scales/scaleResolution.js";
4
4
 
5
5
  /**
6
6
  * Base class for data sources that listen a domain and propagate data lazily.
@@ -71,7 +71,14 @@ export default class SingleAxisLazySource extends DataSource {
71
71
  * @protected
72
72
  */
73
73
  get genome() {
74
- return this.scaleResolution.getGenome();
74
+ const scale = this.scaleResolution.getScale();
75
+ if ("genome" in scale) {
76
+ const genome = scale.genome();
77
+ if (genome) {
78
+ return genome;
79
+ }
80
+ }
81
+ throw new Error("No genome has been defined!");
75
82
  }
76
83
 
77
84
  /**
@@ -123,6 +130,6 @@ export default class SingleAxisLazySource extends DataSource {
123
130
 
124
131
  this.complete();
125
132
 
126
- reconfigureScales(this.view);
133
+ reconfigureScaleDomains(this.view);
127
134
  }
128
135
  }
@@ -1 +1 @@
1
- {"version":3,"file":"singleAxisWindowedSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/singleAxisWindowedSource.js"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH;IAWI;;;OAGG;IACH,kBAHU;QAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,4BAA4B,EAAE,OAAO,CAAA;KAAC,CAGvE;IAEP;;;OAGG;IACH,0CAHW,OAAO,uBAAuB,EAAE,aAAa,QAqBvD;IAED;;;;OAIG;IACH,wBAFW,MAAM,EAAE,QAqBlB;IAcD;;;;;OAKG;IACH,iCAHW,MAAM,EAAE,iBAKlB;IApBD;;OAEG;IACH,mCAOC;IAYD;;;;;;;;;OASG;IACH,4BAHa,CAAC,YAHH,MAAM,EAAE,UACR,CAAC,eAAe,EAAE,OAAO,mCAAmC,EAAE,0BAA0B,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAC3H,OAAO,CAAC,CAAC,EAAE,CAAC,CAoCvB;IAED;;;;;;OAMG;IACH,yCALW,MAAM,EAAE,cACR,MAAM,YACN,CAAS,IAAQ,EAAR,MAAM,EAAE,KAAE,IAAI,QAyBjC;;CACJ;iCA3KgC,2BAA2B"}
1
+ {"version":3,"file":"singleAxisWindowedSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/singleAxisWindowedSource.js"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH;IAWI;;;OAGG;IACH,kBAHU;QAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,4BAA4B,EAAE,OAAO,CAAA;KAAC,CAGvE;IAEP;;;OAGG;IACH,0CAHW,OAAO,uBAAuB,EAAE,aAAa,QAqBvD;IAED;;;;OAIG;IACH,wBAFW,MAAM,EAAE,QAqBlB;IAcD;;;;;OAKG;IACH,iCAHW,MAAM,EAAE,iBAKlB;IApBD;;OAEG;IACH,mCAOC;IAYD;;;;;;;;;OASG;IACH,4BAHa,CAAC,YAHH,MAAM,EAAE,UACR,CAAC,eAAe,EAAE,OAAO,mCAAmC,EAAE,0BAA0B,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAC3H,OAAO,CAAC,CAAC,EAAE,CAAC,CAwCvB;IAED;;;;;;OAMG;IACH,yCALW,MAAM,EAAE,cACR,MAAM,YACN,CAAS,IAAQ,EAAR,MAAM,EAAE,KAAE,IAAI,QAyBjC;;CACJ;iCA/KgC,2BAA2B"}
@@ -125,7 +125,11 @@ export default class SingleAxisWindowedSource extends SingleAxisLazySource {
125
125
 
126
126
  try {
127
127
  const resultByChrom = await Promise.all(
128
- discreteChromosomeIntervals.map(async (d) => loader(d, signal))
128
+ discreteChromosomeIntervals.map(
129
+ async (
130
+ /** @type {import("@genome-spy/core/genome/genome.js").DiscreteChromosomeInterval} */ d
131
+ ) => loader(d, signal)
132
+ )
129
133
  );
130
134
 
131
135
  if (!signal.aborted) {
@@ -20,7 +20,7 @@ export default class FilterScoredLabelsTransform extends Transform {
20
20
  padding: number;
21
21
  /** @type {Map<any, ReservationMap>} */
22
22
  reservationMaps: Map<any, ReservationMap>;
23
- resolution: import("../../view/scaleResolution.js").default;
23
+ resolution: import("../../scales/scaleResolution.js").default;
24
24
  schedule: () => void;
25
25
  _filterAndPropagate(): void;
26
26
  groups: Map<any, any>;
@@ -1 +1 @@
1
- {"version":3,"file":"filterScoredLabels.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/filterScoredLabels.js"],"names":[],"mappings":"AAOA;IAKI;;;;OAIG;IACH,oBAHW,OAAO,yBAAyB,EAAE,wBAAwB,QAC1D,OAAO,oBAAoB,EAAE,OAAO,EA6C9C;IAxCG,mEAAoB;IAEpB,oBAAoB;IACpB,OADW,GAAG,EAAE,CACD;IAEf,mBAAoC;IAMpC,sDAA8C;IAC9C,oDAAgE;IAChE,wDAAuD;IACvD,sDAAmD;IACnD,mDAA6C;IAC7C,mDAA6C;IAC7C,gCAAgC;IAChC,cADW,CAAS,IAAG,EAAH,GAAG,KAAE,GAAG,CAGd;IACd,gBAAuC;IAEvC,uCAAuC;IACvC,iBADW,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CACH;IAEhC,4DAAuD;IAIvD,qBAAuE;IAyB3E,4BAsEC;IAKG,sBAAuB;CAU9B;sBA3JqB,gBAAgB;2BAFX,+BAA+B"}
1
+ {"version":3,"file":"filterScoredLabels.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/filterScoredLabels.js"],"names":[],"mappings":"AAOA;IAKI;;;;OAIG;IACH,oBAHW,OAAO,yBAAyB,EAAE,wBAAwB,QAC1D,OAAO,oBAAoB,EAAE,OAAO,EA6C9C;IAxCG,mEAAoB;IAEpB,oBAAoB;IACpB,OADW,GAAG,EAAE,CACD;IAEf,mBAAoC;IAMpC,sDAA8C;IAC9C,oDAAgE;IAChE,wDAAuD;IACvD,sDAAmD;IACnD,mDAA6C;IAC7C,mDAA6C;IAC7C,gCAAgC;IAChC,cADW,CAAS,IAAG,EAAH,GAAG,KAAE,GAAG,CAGd;IACd,gBAAuC;IAEvC,uCAAuC;IACvC,iBADW,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CACH;IAEhC,8DAAuD;IAIvD,qBAAuE;IAyB3E,4BAsEC;IAKG,sBAAuB;CAU9B;sBA3JqB,gBAAgB;2BAFX,+BAA+B"}
@@ -76,7 +76,7 @@ export default class FilterScoredLabelsTransform extends Transform {
76
76
  _filterAndPropagate() {
77
77
  super.reset();
78
78
 
79
- const scale = this.resolution.scale;
79
+ const scale = this.resolution.getScale();
80
80
  const rangeSpan = this.resolution.getAxisLength();
81
81
  if (!rangeSpan) {
82
82
  // The view size is not (yet) available
@@ -1 +1 @@
1
- {"version":3,"file":"linearizeGenomicCoordinate.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/linearizeGenomicCoordinate.js"],"names":[],"mappings":"AAKA;IAKI;;;;OAIG;IACH,oBAHW,OAAO,yBAAyB,EAAE,gCAAgC,QAClE,OAAO,oBAAoB,EAAE,OAAO,EAgG9C;IAvFG,2EAAoB;CAwF3B;sBA3GqB,gBAAgB"}
1
+ {"version":3,"file":"linearizeGenomicCoordinate.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/linearizeGenomicCoordinate.js"],"names":[],"mappings":"AAKA;IAKI;;;;OAIG;IACH,oBAHW,OAAO,yBAAyB,EAAE,gCAAgC,QAClE,OAAO,oBAAoB,EAAE,OAAO,EAiG9C;IAxFG,2EAAoB;CAyF3B;sBA5GqB,gBAAgB"}
@@ -28,7 +28,8 @@ export default class LinearizeGenomicCoordinate extends Transform {
28
28
  throw new Error("Invalid channel: " + channel);
29
29
  }
30
30
 
31
- const genome = view.getScaleResolution(channel).getGenome();
31
+ const scale = view.getScaleResolution(channel).getScale();
32
+ const genome = "genome" in scale ? scale.genome() : undefined;
32
33
  if (!genome) {
33
34
  throw new Error(
34
35
  "LinearizeGenomicCoordinate transform requires a locus scale!"
@@ -109,7 +109,7 @@ export function getPrimaryChannel(channel: import("../spec/channel.js").Channel)
109
109
  *
110
110
  * @param {import("../spec/channel.js").Channel} channel
111
111
  */
112
- export function getChannelWithSecondarys(channel: import("../spec/channel.js").Channel): ("search" | "fill" | "stroke" | "angle" | "sample" | "color" | "fillOpacity" | "opacity" | "strokeOpacity" | "strokeWidth" | "x" | "y" | "text" | "size" | "x2" | "y2" | "shape" | "dx" | "dy" | "uniqueId" | "facetIndex" | "semanticScore")[];
112
+ export function getChannelWithSecondarys(channel: import("../spec/channel.js").Channel): import("../spec/channel.js").Channel[];
113
113
  /**
114
114
  * @param {import("../spec/channel.js").Channel} channel
115
115
  */
@@ -1 +1 @@
1
- {"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../../src/encoder/encoder.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../../src/encoder/encoder.js"],"names":[],"mappings":"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"}
@@ -75,7 +75,7 @@ export default function createEncoders(unitView, encoding) {
75
75
  /**
76
76
  * @param {import("../spec/channel.js").ChannelWithScale} channel */
77
77
  const scaleSource = (channel) =>
78
- unitView.getScaleResolution(channel)?.scale;
78
+ unitView.getScaleResolution(channel)?.getScale();
79
79
 
80
80
  for (const [channel, channelDef] of Object.entries(encoding)) {
81
81
  if (!channelDef) {
@@ -1,3 +1,42 @@
1
1
  export default function scaleLocus(): import("./scaleLocus.js").ScaleLocus;
2
2
  export function isScaleLocus(scale: any): scale is import("./scaleLocus.js").ScaleLocus;
3
+ /**
4
+ * @param {import("./genome.js").default | { genome?: () => import("./genome.js").default } | undefined} scaleOrGenome
5
+ * @param {number} value
6
+ * @returns {number | import("./genome.js").ChromosomalLocus}
7
+ */
8
+ export function toComplexValue(scaleOrGenome: import("./genome.js").default | {
9
+ genome?: () => import("./genome.js").default;
10
+ } | undefined, value: number): number | import("./genome.js").ChromosomalLocus;
11
+ /**
12
+ * @param {import("./genome.js").default | { genome?: () => import("./genome.js").default } | undefined} scaleOrGenome
13
+ * @param {number | import("./genome.js").ChromosomalLocus} complex
14
+ * @returns {number}
15
+ */
16
+ export function fromComplexValue(scaleOrGenome: import("./genome.js").default | {
17
+ genome?: () => import("./genome.js").default;
18
+ } | undefined, complex: number | import("./genome.js").ChromosomalLocus): number;
19
+ /**
20
+ * @param {import("./genome.js").default | { genome?: () => import("./genome.js").default } | undefined} scaleOrGenome
21
+ * @param {import("../spec/scale.js").ScalarDomain | import("../spec/scale.js").ComplexDomain} interval
22
+ * @returns {number[]}
23
+ */
24
+ export function fromComplexInterval(scaleOrGenome: import("./genome.js").default | {
25
+ genome?: () => import("./genome.js").default;
26
+ } | undefined, interval: import("../spec/scale.js").ScalarDomain | import("../spec/scale.js").ComplexDomain): number[];
27
+ /**
28
+ * @param {import("./genome.js").default | { genome?: () => import("./genome.js").default } | undefined} scaleOrGenome
29
+ * @param {import("../spec/scale.js").ScalarDomain | import("../spec/scale.js").ComplexDomain} interval
30
+ * @returns {import("../spec/scale.js").ScalarDomain | import("../spec/scale.js").ComplexDomain}
31
+ */
32
+ export function toComplexInterval(scaleOrGenome: import("./genome.js").default | {
33
+ genome?: () => import("./genome.js").default;
34
+ } | undefined, interval: import("../spec/scale.js").ScalarDomain | import("../spec/scale.js").ComplexDomain): import("../spec/scale.js").ScalarDomain | import("../spec/scale.js").ComplexDomain;
35
+ /**
36
+ * @param {import("./genome.js").default | { genome?: () => import("./genome.js").default } | undefined} scaleOrGenome
37
+ * @returns {number[]}
38
+ */
39
+ export function getGenomeExtent(scaleOrGenome: import("./genome.js").default | {
40
+ genome?: () => import("./genome.js").default;
41
+ } | undefined): number[];
3
42
  //# sourceMappingURL=scaleLocus.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scaleLocus.d.ts","sourceRoot":"","sources":["../../../src/genome/scaleLocus.js"],"names":[],"mappings":"AAIA,2EAyFC"}
1
+ {"version":3,"file":"scaleLocus.d.ts","sourceRoot":"","sources":["../../../src/genome/scaleLocus.js"],"names":[],"mappings":"AAMA,2EAyFC;;AASD;;;;GAIG;AACH,8CAJW,OAAO,aAAa,EAAE,OAAO,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,OAAO,aAAa,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,SAC5F,MAAM,GACJ,MAAM,GAAG,OAAO,aAAa,EAAE,gBAAgB,CAK3D;AAED;;;;GAIG;AACH,gDAJW,OAAO,aAAa,EAAE,OAAO,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,OAAO,aAAa,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,WAC5F,MAAM,GAAG,OAAO,aAAa,EAAE,gBAAgB,GAC7C,MAAM,CAQlB;AAED;;;;GAIG;AACH,mDAJW,OAAO,aAAa,EAAE,OAAO,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,OAAO,aAAa,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,YAC5F,OAAO,kBAAkB,EAAE,YAAY,GAAG,OAAO,kBAAkB,EAAE,aAAa,GAChF,MAAM,EAAE,CAQpB;AAED;;;;GAIG;AACH,iDAJW,OAAO,aAAa,EAAE,OAAO,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,OAAO,aAAa,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,YAC5F,OAAO,kBAAkB,EAAE,YAAY,GAAG,OAAO,kBAAkB,EAAE,aAAa,GAChF,OAAO,kBAAkB,EAAE,YAAY,GAAG,OAAO,kBAAkB,EAAE,aAAa,CAO9F;AAED;;;GAGG;AACH,+CAHW,OAAO,aAAa,EAAE,OAAO,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,OAAO,aAAa,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,GAC1F,MAAM,EAAE,CAQpB"}
@@ -1,6 +1,8 @@
1
1
  import { tickStep } from "d3-array";
2
2
  import { format as d3format } from "d3-format";
3
+
3
4
  import scaleIndex from "./scaleIndex.js";
5
+ import { isChromosomalLocus, isChromosomalLocusInterval } from "./genome.js";
4
6
 
5
7
  export default function scaleLocus() {
6
8
  /** @type {import("./scaleLocus.js").ScaleLocus} */
@@ -99,3 +101,77 @@ export default function scaleLocus() {
99
101
  export function isScaleLocus(scale) {
100
102
  return scale.type == "locus";
101
103
  }
104
+
105
+ /**
106
+ * @param {import("./genome.js").default | { genome?: () => import("./genome.js").default } | undefined} scaleOrGenome
107
+ * @param {number} value
108
+ * @returns {number | import("./genome.js").ChromosomalLocus}
109
+ */
110
+ export function toComplexValue(scaleOrGenome, value) {
111
+ const genome = resolveGenome(scaleOrGenome);
112
+ return genome ? genome.toChromosomal(value) : value;
113
+ }
114
+
115
+ /**
116
+ * @param {import("./genome.js").default | { genome?: () => import("./genome.js").default } | undefined} scaleOrGenome
117
+ * @param {number | import("./genome.js").ChromosomalLocus} complex
118
+ * @returns {number}
119
+ */
120
+ export function fromComplexValue(scaleOrGenome, complex) {
121
+ const genome = resolveGenome(scaleOrGenome);
122
+ if (genome && isChromosomalLocus(complex)) {
123
+ return genome.toContinuous(complex.chrom, complex.pos);
124
+ }
125
+ return /** @type {number} */ (complex);
126
+ }
127
+
128
+ /**
129
+ * @param {import("./genome.js").default | { genome?: () => import("./genome.js").default } | undefined} scaleOrGenome
130
+ * @param {import("../spec/scale.js").ScalarDomain | import("../spec/scale.js").ComplexDomain} interval
131
+ * @returns {number[]}
132
+ */
133
+ export function fromComplexInterval(scaleOrGenome, interval) {
134
+ const genome = resolveGenome(scaleOrGenome);
135
+ if (genome && isChromosomalLocusInterval(interval)) {
136
+ return genome.toContinuousInterval(interval);
137
+ }
138
+ return /** @type {number[]} */ (interval);
139
+ }
140
+
141
+ /**
142
+ * @param {import("./genome.js").default | { genome?: () => import("./genome.js").default } | undefined} scaleOrGenome
143
+ * @param {import("../spec/scale.js").ScalarDomain | import("../spec/scale.js").ComplexDomain} interval
144
+ * @returns {import("../spec/scale.js").ScalarDomain | import("../spec/scale.js").ComplexDomain}
145
+ */
146
+ export function toComplexInterval(scaleOrGenome, interval) {
147
+ const genome = resolveGenome(scaleOrGenome);
148
+ return genome
149
+ ? genome.toChromosomalInterval(/** @type {number[]} */ (interval))
150
+ : interval;
151
+ }
152
+
153
+ /**
154
+ * @param {import("./genome.js").default | { genome?: () => import("./genome.js").default } | undefined} scaleOrGenome
155
+ * @returns {number[]}
156
+ */
157
+ export function getGenomeExtent(scaleOrGenome) {
158
+ const genome = resolveGenome(scaleOrGenome);
159
+ if (!genome) {
160
+ throw new Error("No genome has been defined!");
161
+ }
162
+ return genome.getExtent();
163
+ }
164
+
165
+ /**
166
+ * @param {import("./genome.js").default | { genome?: () => import("./genome.js").default } | undefined} scaleOrGenome
167
+ * @returns {import("./genome.js").default | undefined}
168
+ */
169
+ function resolveGenome(scaleOrGenome) {
170
+ if (scaleOrGenome && "toChromosomal" in scaleOrGenome) {
171
+ return scaleOrGenome;
172
+ }
173
+ if (scaleOrGenome && "genome" in scaleOrGenome) {
174
+ return scaleOrGenome.genome();
175
+ }
176
+ return undefined;
177
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @param {object} options
3
+ * @param {import("../gl/webGLHelper.js").default} options.glHelper
4
+ * @param {import("../view/view.js").default} options.viewRoot
5
+ * @param {number} [options.logicalWidth]
6
+ * @param {number} [options.logicalHeight]
7
+ * @param {number} [options.devicePixelRatio]
8
+ * @param {string} [options.clearColor]
9
+ * @returns {string}
10
+ */
11
+ export function exportCanvas({ glHelper, viewRoot, logicalWidth, logicalHeight, devicePixelRatio, clearColor, }: {
12
+ glHelper: import("../gl/webGLHelper.js").default;
13
+ viewRoot: import("../view/view.js").default;
14
+ logicalWidth?: number;
15
+ logicalHeight?: number;
16
+ devicePixelRatio?: number;
17
+ clearColor?: string;
18
+ }): string;
19
+ //# sourceMappingURL=canvasExport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasExport.d.ts","sourceRoot":"","sources":["../../../src/genomeSpy/canvasExport.js"],"names":[],"mappings":"AAMA;;;;;;;;;GASG;AACH,iHARG;IAAwD,QAAQ,EAAxD,OAAO,sBAAsB,EAAE,OAAO;IACK,QAAQ,EAAnD,OAAO,iBAAiB,EAAE,OAAO;IAChB,YAAY,GAA7B,MAAM;IACW,aAAa,GAA9B,MAAM;IACW,gBAAgB,GAAjC,MAAM;IACW,UAAU,GAA3B,MAAM;CACd,GAAU,MAAM,CAmDlB"}
@@ -0,0 +1,66 @@
1
+ import { createFramebufferInfo } from "twgl.js";
2
+
3
+ import BufferedViewRenderingContext from "../view/renderingContext/bufferedViewRenderingContext.js";
4
+ import Rectangle from "../view/layout/rectangle.js";
5
+ import { framebufferToDataUrl } from "../gl/webGLHelper.js";
6
+
7
+ /**
8
+ * @param {object} options
9
+ * @param {import("../gl/webGLHelper.js").default} options.glHelper
10
+ * @param {import("../view/view.js").default} options.viewRoot
11
+ * @param {number} [options.logicalWidth]
12
+ * @param {number} [options.logicalHeight]
13
+ * @param {number} [options.devicePixelRatio]
14
+ * @param {string} [options.clearColor]
15
+ * @returns {string}
16
+ */
17
+ export function exportCanvas({
18
+ glHelper,
19
+ viewRoot,
20
+ logicalWidth,
21
+ logicalHeight,
22
+ devicePixelRatio,
23
+ clearColor = "white",
24
+ }) {
25
+ logicalWidth ??= glHelper.getLogicalCanvasSize().width;
26
+ logicalHeight ??= glHelper.getLogicalCanvasSize().height;
27
+ devicePixelRatio ??= window.devicePixelRatio ?? 1;
28
+
29
+ const gl = glHelper.gl;
30
+
31
+ const width = Math.floor(logicalWidth * devicePixelRatio);
32
+ const height = Math.floor(logicalHeight * devicePixelRatio);
33
+
34
+ const framebufferInfo = createFramebufferInfo(
35
+ gl,
36
+ [
37
+ {
38
+ format: gl.RGBA,
39
+ type: gl.UNSIGNED_BYTE,
40
+ minMag: gl.LINEAR,
41
+ wrap: gl.CLAMP_TO_EDGE,
42
+ },
43
+ ],
44
+ width,
45
+ height
46
+ );
47
+
48
+ const renderingContext = new BufferedViewRenderingContext(
49
+ { picking: false },
50
+ {
51
+ webGLHelper: glHelper,
52
+ canvasSize: { width: logicalWidth, height: logicalHeight },
53
+ devicePixelRatio,
54
+ clearColor,
55
+ framebufferInfo,
56
+ }
57
+ );
58
+
59
+ viewRoot.render(
60
+ renderingContext,
61
+ Rectangle.create(0, 0, logicalWidth, logicalHeight)
62
+ );
63
+ renderingContext.render();
64
+
65
+ return framebufferToDataUrl(gl, framebufferInfo, "image/png");
66
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @param {HTMLElement} container
3
+ */
4
+ export function createContainerUi(container: HTMLElement): {
5
+ canvasWrapper: HTMLElement;
6
+ loadingMessageElement: HTMLElement;
7
+ loadingIndicatorsElement: HTMLElement;
8
+ tooltip: Tooltip;
9
+ styleElement: HTMLStyleElement;
10
+ };
11
+ /**
12
+ * @param {HTMLElement} container
13
+ * @param {string} message
14
+ */
15
+ export function createMessageBox(container: HTMLElement, message: string): void;
16
+ import Tooltip from "../utils/ui/tooltip.js";
17
+ //# sourceMappingURL=containerUi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"containerUi.d.ts","sourceRoot":"","sources":["../../../src/genomeSpy/containerUi.js"],"names":[],"mappings":"AAGA;;GAEG;AACH,6CAFW,WAAW;;;;;;EA2CrB;AAED;;;GAGG;AACH,4CAHW,WAAW,WACX,MAAM,QAUhB;oBA5DmB,wBAAwB"}
@@ -0,0 +1,78 @@
1
+ import css from "../styles/genome-spy.css.js";
2
+ import Tooltip from "../utils/ui/tooltip.js";
3
+
4
+ /**
5
+ * @param {HTMLElement} container
6
+ */
7
+ export function createContainerUi(container) {
8
+ container.classList.add("genome-spy");
9
+
10
+ const styleElement = document.createElement("style");
11
+ styleElement.innerHTML = css;
12
+ container.appendChild(styleElement);
13
+
14
+ const canvasWrapper = element("div", {
15
+ class: "canvas-wrapper",
16
+ });
17
+ container.appendChild(canvasWrapper);
18
+
19
+ canvasWrapper.classList.add("loading");
20
+
21
+ const loadingMessageElement = element("div", {
22
+ class: "loading-message",
23
+ innerHTML: `<div class="message">Loading<span class="ellipsis">...</span></div>`,
24
+ });
25
+ canvasWrapper.appendChild(loadingMessageElement);
26
+
27
+ const loadingIndicatorsElement = element("div", {
28
+ class: "loading-indicators",
29
+ });
30
+ canvasWrapper.appendChild(loadingIndicatorsElement);
31
+
32
+ const tooltip = new Tooltip(container);
33
+
34
+ loadingMessageElement
35
+ .querySelector(".message")
36
+ .addEventListener("transitionend", () => {
37
+ /** @type {HTMLElement} */ (loadingMessageElement).style.display =
38
+ "none";
39
+ });
40
+
41
+ return {
42
+ canvasWrapper,
43
+ loadingMessageElement,
44
+ loadingIndicatorsElement,
45
+ tooltip,
46
+ styleElement,
47
+ };
48
+ }
49
+
50
+ /**
51
+ * @param {HTMLElement} container
52
+ * @param {string} message
53
+ */
54
+ export function createMessageBox(container, message) {
55
+ // Uh, need a templating thingy
56
+ const messageBox = document.createElement("div");
57
+ messageBox.className = "message-box";
58
+ const messageText = document.createElement("div");
59
+ messageText.textContent = message;
60
+ messageBox.appendChild(messageText);
61
+ container.appendChild(messageBox);
62
+ }
63
+
64
+ /**
65
+ * @param {string} tag
66
+ * @param {Record<string, any>} attrs
67
+ */
68
+ function element(tag, attrs) {
69
+ const el = document.createElement(tag);
70
+ for (const [key, value] of Object.entries(attrs)) {
71
+ if (["innerHTML", "innerText", "className"].includes(key)) {
72
+ // @ts-ignore
73
+ el[key] = value;
74
+ }
75
+ el.setAttribute(key, value);
76
+ }
77
+ return el;
78
+ }
@@ -0,0 +1,19 @@
1
+ export default class EventListenerRegistry {
2
+ /**
3
+ * @param {string} type
4
+ * @param {(event: any) => void} listener
5
+ */
6
+ add(type: string, listener: (event: any) => void): void;
7
+ /**
8
+ * @param {string} type
9
+ * @param {(event: any) => void} listener
10
+ */
11
+ remove(type: string, listener: (event: any) => void): void;
12
+ /**
13
+ * @param {string} type
14
+ * @param {any} event
15
+ */
16
+ emit(type: string, event: any): void;
17
+ #private;
18
+ }
19
+ //# sourceMappingURL=eventListenerRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventListenerRegistry.d.ts","sourceRoot":"","sources":["../../../src/genomeSpy/eventListenerRegistry.js"],"names":[],"mappings":"AAAA;IAQI;;;OAGG;IACH,UAHW,MAAM,YACN,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,QAU9B;IAED;;;OAGG;IACH,aAHW,MAAM,YACN,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,QAI9B;IAED;;;OAGG;IACH,WAHW,MAAM,SACN,GAAG,QAIb;;CACJ"}