@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
@@ -0,0 +1,92 @@
1
+ import { html, nothing, render } from "lit";
2
+ import { styleMap } from "lit/directives/style-map.js";
3
+ import SPINNER from "../img/90-ring-with-bg.svg";
4
+
5
+ export default class LoadingIndicatorManager {
6
+ /** @type {HTMLElement} */
7
+ #loadingIndicatorsElement;
8
+ /**
9
+ * @type {Map<import("../view/view.js").default, { status: import("../types/viewContext.js").DataLoadingStatus, detail?: string }>}
10
+ */
11
+ #loadingViews;
12
+
13
+ /**
14
+ * @param {HTMLElement} loadingIndicatorsElement
15
+ */
16
+ constructor(loadingIndicatorsElement) {
17
+ this.#loadingIndicatorsElement = loadingIndicatorsElement;
18
+
19
+ /**
20
+ * @type {Map<import("../view/view.js").default, { status: import("../types/viewContext.js").DataLoadingStatus, detail?: string }>}
21
+ */
22
+ this.#loadingViews = new Map();
23
+ }
24
+
25
+ /**
26
+ * @param {import("../view/view.js").default} view
27
+ * @param {import("../types/viewContext.js").DataLoadingStatus} status
28
+ * @param {string} [detail]
29
+ */
30
+ setDataLoadingStatus(view, status, detail) {
31
+ this.#loadingViews.set(view, { status, detail });
32
+ this.updateLayout();
33
+ }
34
+
35
+ updateLayout() {
36
+ /** @type {import("lit").TemplateResult[]} */
37
+ const indicators = [];
38
+
39
+ const isSomethingVisible = () =>
40
+ [...this.#loadingViews.values()].some(
41
+ (v) => v.status == "loading" || v.status == "error"
42
+ );
43
+
44
+ for (const [view, status] of this.#loadingViews) {
45
+ const c = view.coords;
46
+ if (c) {
47
+ const style = {
48
+ left: `${c.x}px`,
49
+ top: `${c.y}px`,
50
+ width: `${c.width}px`,
51
+ height: `${c.height}px`,
52
+ };
53
+ indicators.push(
54
+ html`<div style=${styleMap(style)}>
55
+ <div class=${status.status}>
56
+ ${status.status == "error"
57
+ ? html`<span
58
+ >Loading
59
+ failed${status.detail
60
+ ? html`: ${status.detail}`
61
+ : nothing}</span
62
+ >`
63
+ : html`
64
+ <img src="${SPINNER}" alt="" />
65
+ <span>Loading...</span>
66
+ `}
67
+ </div>
68
+ </div>`
69
+ );
70
+ }
71
+ }
72
+
73
+ // Do some hacks to stop css animations of the loading indicators.
74
+ // Otherwise they fire animation frames even when their opacity is zero.
75
+ // TODO: Instead of this, replace the animated spinners with static images.
76
+ // Or even better, once more widely supported, use `allow-discrete`
77
+ // https://developer.mozilla.org/en-US/docs/Web/CSS/transition-behavior
78
+ // to enable transition of the display property.
79
+ if (isSomethingVisible()) {
80
+ this.#loadingIndicatorsElement.style.display = "block";
81
+ } else {
82
+ // TODO: Clear previous timeout
83
+ setTimeout(() => {
84
+ if (!isSomethingVisible()) {
85
+ this.#loadingIndicatorsElement.style.display = "none";
86
+ }
87
+ }, 3000);
88
+ }
89
+
90
+ render(indicators, this.#loadingIndicatorsElement);
91
+ }
92
+ }
@@ -0,0 +1,22 @@
1
+ export default class RenderCoordinator {
2
+ /**
3
+ * @param {object} options
4
+ * @param {import("../view/view.js").default} options.viewRoot
5
+ * @param {import("../gl/webGLHelper.js").default} options.glHelper
6
+ * @param {() => string} options.getBackground
7
+ * @param {(type: import("../genomeSpy.js").BroadcastEventType, payload?: any) => void} options.broadcast
8
+ * @param {() => void} options.onLayoutComputed
9
+ */
10
+ constructor({ viewRoot, glHelper, getBackground, broadcast, onLayoutComputed, }: {
11
+ viewRoot: import("../view/view.js").default;
12
+ glHelper: import("../gl/webGLHelper.js").default;
13
+ getBackground: () => string;
14
+ broadcast: (type: import("../genomeSpy.js").BroadcastEventType, payload?: any) => void;
15
+ onLayoutComputed: () => void;
16
+ });
17
+ computeLayout(): void;
18
+ renderAll(): void;
19
+ renderPickingFramebuffer(): void;
20
+ #private;
21
+ }
22
+ //# sourceMappingURL=renderCoordinator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderCoordinator.d.ts","sourceRoot":"","sources":["../../../src/genomeSpy/renderCoordinator.js"],"names":[],"mappings":"AAIA;IAiBI;;;;;;;OAOG;IACH,iFANG;QAAmD,QAAQ,EAAnD,OAAO,iBAAiB,EAAE,OAAO;QACe,QAAQ,EAAxD,OAAO,sBAAsB,EAAE,OAAO;QAChB,aAAa,EAAnC,MAAM,MAAM;QACyE,SAAS,EAA9F,CAAC,IAAI,EAAE,OAAO,iBAAiB,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,IAAI;QACvD,gBAAgB,EAApC,MAAM,IAAI;KACpB,EAqBA;IAED,sBAkDC;IAED,kBAIC;IAED,iCAOC;;CACJ"}
@@ -0,0 +1,118 @@
1
+ import BufferedViewRenderingContext from "../view/renderingContext/bufferedViewRenderingContext.js";
2
+ import CompositeViewRenderingContext from "../view/renderingContext/compositeViewRenderingContext.js";
3
+ import Rectangle from "../view/layout/rectangle.js";
4
+
5
+ export default class RenderCoordinator {
6
+ /** @type {import("../view/view.js").default} */
7
+ #viewRoot;
8
+ /** @type {import("../gl/webGLHelper.js").default} */
9
+ #glHelper;
10
+ /** @type {() => string} */
11
+ #getBackground;
12
+ /** @type {(type: import("../genomeSpy.js").BroadcastEventType, payload?: any) => void} */
13
+ #broadcast;
14
+ /** @type {() => void} */
15
+ #onLayoutComputed;
16
+ /** @type {BufferedViewRenderingContext} */
17
+ #renderingContext;
18
+ /** @type {BufferedViewRenderingContext} */
19
+ #pickingContext;
20
+ /** @type {boolean} */
21
+ #dirtyPickingBuffer;
22
+ /**
23
+ * @param {object} options
24
+ * @param {import("../view/view.js").default} options.viewRoot
25
+ * @param {import("../gl/webGLHelper.js").default} options.glHelper
26
+ * @param {() => string} options.getBackground
27
+ * @param {(type: import("../genomeSpy.js").BroadcastEventType, payload?: any) => void} options.broadcast
28
+ * @param {() => void} options.onLayoutComputed
29
+ */
30
+ constructor({
31
+ viewRoot,
32
+ glHelper,
33
+ getBackground,
34
+ broadcast,
35
+ onLayoutComputed,
36
+ }) {
37
+ this.#viewRoot = viewRoot;
38
+ this.#glHelper = glHelper;
39
+ this.#getBackground = getBackground;
40
+ this.#broadcast = broadcast;
41
+ this.#onLayoutComputed = onLayoutComputed;
42
+
43
+ /** @type {BufferedViewRenderingContext} */
44
+ this.#renderingContext = undefined;
45
+ /** @type {BufferedViewRenderingContext} */
46
+ this.#pickingContext = undefined;
47
+
48
+ /** Does picking buffer need to be rendered again */
49
+ this.#dirtyPickingBuffer = false;
50
+ }
51
+
52
+ computeLayout() {
53
+ const root = this.#viewRoot;
54
+ if (!root) {
55
+ return;
56
+ }
57
+
58
+ this.#broadcast("layout");
59
+
60
+ const canvasSize = this.#glHelper.getLogicalCanvasSize();
61
+
62
+ if (isNaN(canvasSize.width) || isNaN(canvasSize.height)) {
63
+ // TODO: Figure out what causes this
64
+ console.log(
65
+ `NaN in canvas size: ${canvasSize.width}x${canvasSize.height}. Skipping computeLayout().`
66
+ );
67
+ return;
68
+ }
69
+
70
+ const commonOptions = {
71
+ webGLHelper: this.#glHelper,
72
+ canvasSize,
73
+ devicePixelRatio: window.devicePixelRatio ?? 1,
74
+ };
75
+
76
+ this.#renderingContext = new BufferedViewRenderingContext(
77
+ { picking: false },
78
+ {
79
+ ...commonOptions,
80
+ clearColor: this.#getBackground(),
81
+ }
82
+ );
83
+ this.#pickingContext = new BufferedViewRenderingContext(
84
+ { picking: true },
85
+ {
86
+ ...commonOptions,
87
+ framebufferInfo: this.#glHelper._pickingBufferInfo,
88
+ }
89
+ );
90
+
91
+ root.render(
92
+ new CompositeViewRenderingContext(
93
+ this.#renderingContext,
94
+ this.#pickingContext
95
+ ),
96
+ // Canvas should now be sized based on the root view or the container
97
+ Rectangle.create(0, 0, canvasSize.width, canvasSize.height)
98
+ );
99
+
100
+ this.#onLayoutComputed();
101
+ this.#broadcast("layoutComputed");
102
+ }
103
+
104
+ renderAll() {
105
+ this.#renderingContext?.render();
106
+
107
+ this.#dirtyPickingBuffer = true;
108
+ }
109
+
110
+ renderPickingFramebuffer() {
111
+ if (!this.#dirtyPickingBuffer) {
112
+ return;
113
+ }
114
+
115
+ this.#pickingContext.render();
116
+ this.#dirtyPickingBuffer = false;
117
+ }
118
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @typedef {import("../types/viewContext.js").default} ViewContext
3
+ */
4
+ /**
5
+ * Creates a ViewContext from a partial input. Omitted fields default to
6
+ * "fail-fast" placeholders that throw when called. This lets tests supply only
7
+ * what they need while keeping production usage explicit.
8
+ *
9
+ * @param {Partial<ViewContext> & {
10
+ * createOrImportViewWithContext?: (context: ViewContext, spec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec, layoutParent?: import("../view/containerView.js").default, dataParent?: import("../view/view.js").default, defaultName?: string, validator?: (spec: import("../spec/view.js").ViewSpec) => void) => Promise<import("../view/view.js").default>
11
+ * }} options
12
+ * @returns {ViewContext}
13
+ */
14
+ export function createViewContext(options: Partial<ViewContext> & {
15
+ createOrImportViewWithContext?: (context: ViewContext, spec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec, layoutParent?: import("../view/containerView.js").default, dataParent?: import("../view/view.js").default, defaultName?: string, validator?: (spec: import("../spec/view.js").ViewSpec) => void) => Promise<import("../view/view.js").default>;
16
+ }): ViewContext;
17
+ export type ViewContext = import("../types/viewContext.js").default;
18
+ //# sourceMappingURL=viewContextFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewContextFactory.d.ts","sourceRoot":"","sources":["../../../src/genomeSpy/viewContextFactory.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;GASG;AACH,2CALW,OAAO,CAAC,WAAW,CAAC,GAAG;IAC7B,6BAA6B,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,iBAAiB,EAAE,QAAQ,GAAG,OAAO,iBAAiB,EAAE,UAAU,EAAE,YAAY,CAAC,EAAE,OAAO,0BAA0B,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,iBAAiB,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,iBAAiB,EAAE,QAAQ,KAAK,IAAI,KAAK,OAAO,CAAC,OAAO,iBAAiB,EAAE,OAAO,CAAC,CAAA;CACvX,GACS,WAAW,CAkEvB;0BA7EY,OAAO,yBAAyB,EAAE,OAAO"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * @typedef {import("../types/viewContext.js").default} ViewContext
3
+ */
4
+
5
+ /**
6
+ * Creates a ViewContext from a partial input. Omitted fields default to
7
+ * "fail-fast" placeholders that throw when called. This lets tests supply only
8
+ * what they need while keeping production usage explicit.
9
+ *
10
+ * @param {Partial<ViewContext> & {
11
+ * createOrImportViewWithContext?: (context: ViewContext, spec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec, layoutParent?: import("../view/containerView.js").default, dataParent?: import("../view/view.js").default, defaultName?: string, validator?: (spec: import("../spec/view.js").ViewSpec) => void) => Promise<import("../view/view.js").default>
12
+ * }} options
13
+ * @returns {ViewContext}
14
+ */
15
+ export function createViewContext(options) {
16
+ /** @param {string} name */
17
+ const missing = (name) => {
18
+ throw new Error("ViewContext." + name + " is not configured.");
19
+ };
20
+ /** @type {Partial<ViewContext>} */
21
+ const context = {
22
+ dataFlow: options.dataFlow ?? missing("dataFlow"),
23
+ glHelper: options.glHelper ?? missing("glHelper"),
24
+ animator: options.animator ?? missing("animator"),
25
+ genomeStore: options.genomeStore,
26
+ fontManager: options.fontManager ?? missing("fontManager"),
27
+ createOrImportView: async function (
28
+ spec,
29
+ layoutParent,
30
+ dataParent,
31
+ defaultName,
32
+ validator
33
+ ) {
34
+ const create = options.createOrImportViewWithContext;
35
+ if (!create) {
36
+ return Promise.reject(
37
+ new Error(
38
+ "ViewContext.createOrImportView is not configured."
39
+ )
40
+ );
41
+ }
42
+
43
+ // Needs the fully wired context for recursive view creation.
44
+ return create(
45
+ /** @type {ViewContext} */ (context),
46
+ spec,
47
+ layoutParent,
48
+ dataParent,
49
+ defaultName,
50
+ validator
51
+ );
52
+ },
53
+ };
54
+
55
+ /** @type {(keyof ViewContext)[]} */
56
+ const methodNames = [
57
+ "requestLayoutReflow",
58
+ "updateTooltip",
59
+ "getNamedDataFromProvider",
60
+ "getCurrentHover",
61
+ "setDataLoadingStatus",
62
+ "addKeyboardListener",
63
+ "addBroadcastListener",
64
+ "removeBroadcastListener",
65
+ "highlightView",
66
+ "isViewConfiguredVisible",
67
+ "isViewSpec",
68
+ ];
69
+
70
+ /** @type {Partial<ViewContext>} */
71
+ const optionValues = options;
72
+ const contextAny = /** @type {any} */ (context);
73
+
74
+ for (const name of methodNames) {
75
+ contextAny[name] = optionValues[name] ?? (() => missing(name));
76
+ }
77
+
78
+ return /** @type {ViewContext} */ (context);
79
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Initializes the view data pipeline: builds the flow graph, awaits fonts,
3
+ * loads sources, and finalizes graphics for rendering.
4
+ *
5
+ * @param {import("../view/view.js").default} viewRoot
6
+ * @param {import("../data/dataFlow.js").default} dataFlow
7
+ * @param {import("../fonts/bmFontManager.js").default} fontManager
8
+ * @param {(dataFlow: import("../data/dataFlow.js").default) => void} onDataFlowBuilt
9
+ * @returns {Promise<import("../data/dataFlow.js").default>}
10
+ */
11
+ export function initializeViewData(viewRoot: import("../view/view.js").default, dataFlow: import("../data/dataFlow.js").default, fontManager: import("../fonts/bmFontManager.js").default, onDataFlowBuilt: (dataFlow: import("../data/dataFlow.js").default) => void): Promise<import("../data/dataFlow.js").default>;
12
+ //# sourceMappingURL=viewDataInit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewDataInit.d.ts","sourceRoot":"","sources":["../../../src/genomeSpy/viewDataInit.js"],"names":[],"mappings":"AAMA;;;;;;;;;GASG;AACH,6CANW,OAAO,iBAAiB,EAAE,OAAO,YACjC,OAAO,qBAAqB,EAAE,OAAO,eACrC,OAAO,2BAA2B,EAAE,OAAO,mBAC3C,CAAC,QAAQ,EAAE,OAAO,qBAAqB,EAAE,OAAO,KAAK,IAAI,GACvD,OAAO,CAAC,OAAO,qBAAqB,EAAE,OAAO,CAAC,CA0B1D"}
@@ -0,0 +1,41 @@
1
+ import {
2
+ initializeViewSubtree,
3
+ loadViewSubtreeData,
4
+ } from "../data/flowInit.js";
5
+ import { finalizeSubtreeGraphics } from "../view/viewUtils.js";
6
+
7
+ /**
8
+ * Initializes the view data pipeline: builds the flow graph, awaits fonts,
9
+ * loads sources, and finalizes graphics for rendering.
10
+ *
11
+ * @param {import("../view/view.js").default} viewRoot
12
+ * @param {import("../data/dataFlow.js").default} dataFlow
13
+ * @param {import("../fonts/bmFontManager.js").default} fontManager
14
+ * @param {(dataFlow: import("../data/dataFlow.js").default) => void} onDataFlowBuilt
15
+ * @returns {Promise<import("../data/dataFlow.js").default>}
16
+ */
17
+ export async function initializeViewData(
18
+ viewRoot,
19
+ dataFlow,
20
+ fontManager,
21
+ onDataFlowBuilt
22
+ ) {
23
+ const { dataFlow: builtDataFlow, graphicsPromises } = initializeViewSubtree(
24
+ viewRoot,
25
+ dataFlow
26
+ );
27
+ onDataFlowBuilt(builtDataFlow);
28
+
29
+ // Have to wait until asynchronous font loading is complete.
30
+ // Text mark's geometry builder needs font metrics before data can be
31
+ // converted into geometries.
32
+ // TODO: Make updateGraphicsData async and await font loading there.
33
+ await fontManager.waitUntilReady();
34
+
35
+ // Find all data sources and initiate loading.
36
+ await loadViewSubtreeData(viewRoot, new Set(builtDataFlow.dataSources));
37
+
38
+ await finalizeSubtreeGraphics(graphicsPromises);
39
+
40
+ return builtDataFlow;
41
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @param {import("../view/view.js").default} viewRoot
3
+ */
4
+ export function configureViewHierarchy(viewRoot: import("../view/view.js").default): void;
5
+ /**
6
+ * Configures view opacity after scale/axis resolution has stabilized.
7
+ *
8
+ * NOTE: This is a separate pass because dynamic opacity needs resolved scales.
9
+ * If we end up with more post-resolve work, consider a post-resolve thunk queue.
10
+ *
11
+ * @param {import("../view/view.js").default} viewRoot
12
+ */
13
+ export function configureViewOpacity(viewRoot: import("../view/view.js").default): void;
14
+ //# sourceMappingURL=viewHierarchyConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewHierarchyConfig.d.ts","sourceRoot":"","sources":["../../../src/genomeSpy/viewHierarchyConfig.js"],"names":[],"mappings":"AAKA;;GAEG;AACH,iDAFW,OAAO,iBAAiB,EAAE,OAAO,QAK3C;AAED;;;;;;;GAOG;AACH,+CAFW,OAAO,iBAAiB,EAAE,OAAO,QAI3C"}
@@ -0,0 +1,24 @@
1
+ import {
2
+ checkForDuplicateScaleNames,
3
+ setImplicitScaleNames,
4
+ } from "../view/viewUtils.js";
5
+
6
+ /**
7
+ * @param {import("../view/view.js").default} viewRoot
8
+ */
9
+ export function configureViewHierarchy(viewRoot) {
10
+ checkForDuplicateScaleNames(viewRoot);
11
+ setImplicitScaleNames(viewRoot);
12
+ }
13
+
14
+ /**
15
+ * Configures view opacity after scale/axis resolution has stabilized.
16
+ *
17
+ * NOTE: This is a separate pass because dynamic opacity needs resolved scales.
18
+ * If we end up with more post-resolve work, consider a post-resolve thunk queue.
19
+ *
20
+ * @param {import("../view/view.js").default} viewRoot
21
+ */
22
+ export function configureViewOpacity(viewRoot) {
23
+ viewRoot.getDescendants().forEach((view) => view.configureViewOpacity());
24
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @param {HTMLElement} container
3
+ */
4
+ export function createViewHighlighter(container: HTMLElement): (view: import("../view/view.js").default | null) => void;
5
+ //# sourceMappingURL=viewHighlight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewHighlight.d.ts","sourceRoot":"","sources":["../../../src/genomeSpy/viewHighlight.js"],"names":[],"mappings":"AAAA;;GAEG;AACH,iDAFW,WAAW,IAMV,MAFG,OAAO,iBAAiB,EAAE,OAAO,GAAG,IAEnC,UAsBf"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @param {HTMLElement} container
3
+ */
4
+ export function createViewHighlighter(container) {
5
+ /**
6
+ * @param {import("../view/view.js").default | null} view
7
+ */
8
+ return (view) => {
9
+ container.querySelector(".view-highlight")?.remove();
10
+ if (view) {
11
+ if (!view.isConfiguredVisible()) {
12
+ return;
13
+ }
14
+ const coords = view.coords;
15
+ if (coords) {
16
+ const div = document.createElement("div");
17
+ div.className = "view-highlight";
18
+ div.style.position = "absolute";
19
+ div.style.left = coords.x + "px";
20
+ div.style.top = coords.y + "px";
21
+ div.style.width = coords.width + "px";
22
+ div.style.height = coords.height + "px";
23
+ div.style.border = "1px solid green";
24
+ div.style.backgroundColor = "rgba(0, 255, 0, 0.1)";
25
+ div.style.pointerEvents = "none";
26
+ container.appendChild(div);
27
+ }
28
+ }
29
+ };
30
+ }
@@ -14,8 +14,6 @@ export default class GenomeSpy {
14
14
  constructor(container: HTMLElement, spec: import("./spec/root.js").RootSpec, options?: import("./types/embedApi.js").EmbedOptions);
15
15
  container: HTMLElement;
16
16
  options: import("./types/embedApi.js").EmbedOptions;
17
- /** @type {(() => void)[]} */
18
- _destructionCallbacks: (() => void)[];
19
17
  /** Root level configuration object */
20
18
  spec: import("./spec/root.js").RootSpec;
21
19
  viewFactory: ViewFactory;
@@ -31,59 +29,10 @@ export default class GenomeSpy {
31
29
  * @type {(view: View) => boolean}
32
30
  */
33
31
  viewVisibilityPredicate: (view: import("./view/view.js").default) => boolean;
34
- /** @type {BufferedViewRenderingContext} */
35
- _renderingContext: BufferedViewRenderingContext;
36
- /** @type {BufferedViewRenderingContext} */
37
- _pickingContext: BufferedViewRenderingContext;
38
- /** Does picking buffer need to be rendered again */
39
- _dirtyPickingBuffer: boolean;
40
- /**
41
- * Currently hovered mark and datum
42
- * @type {{ mark: import("./marks/mark.js").default, datum: import("./data/flowNode.js").Datum, uniqueId: number }}
43
- */
44
- _currentHover: {
45
- mark: import("./marks/mark.js").default;
46
- datum: import("./data/flowNode.js").Datum;
47
- uniqueId: number;
48
- };
49
- _wheelInertia: Inertia;
50
- /**
51
- * Keeping track so that these can be cleaned up upon finalization.
52
- * @type {Map<string, (function(KeyboardEvent):void)[]>}
53
- */
54
- _keyboardListeners: Map<string, ((arg0: KeyboardEvent) => void)[]>;
55
- /**
56
- * Listers for exposed high-level events such as click on a mark instance.
57
- * These should probably be in the View class and support bubbling through
58
- * the hierarchy.
59
- *
60
- * @type {Map<string, Set<(event: any) => void>>}
61
- */
62
- _eventListeners: Map<string, Set<(event: any) => void>>;
63
- /**
64
- *
65
- * @type {Map<string, Set<(event: any) => void>>}
66
- */
67
- _extraBroadcastListeners: Map<string, Set<(event: any) => void>>;
68
32
  /** @type {Record<string, import("./tooltip/tooltipHandler.js").TooltipHandler>}> */
69
33
  tooltipHandlers: Record<string, import("./tooltip/tooltipHandler.js").TooltipHandler>;
70
34
  /** @type {View} */
71
35
  viewRoot: import("./view/view.js").default;
72
- /**
73
- * Views that are currently loading data using lazy sources.
74
- *
75
- * @type {Map<View, { status: import("./types/viewContext.js").DataLoadingStatus, detail?: string }>}
76
- */
77
- _loadingViews: Map<import("./view/view.js").default, {
78
- status: import("./types/viewContext.js").DataLoadingStatus;
79
- detail?: string;
80
- }>;
81
- /**
82
- * @type {HTMLElement}
83
- */
84
- _inputBindingContainer: HTMLElement;
85
- /** @type {Point} */
86
- _mouseDownCoords: Point;
87
36
  dpr: number;
88
37
  /**
89
38
  *
@@ -100,6 +49,16 @@ export default class GenomeSpy {
100
49
  * @param {any[]} data
101
50
  */
102
51
  updateNamedData(name: string, data: any[]): void;
52
+ /**
53
+ * @param {string} type
54
+ * @param {(event: any) => void} listener
55
+ */
56
+ addEventListener(type: string, listener: (event: any) => void): void;
57
+ /**
58
+ * @param {string} type
59
+ * @param {(event: any) => void} listener
60
+ */
61
+ removeEventListener(type: string, listener: (event: any) => void): void;
103
62
  /**
104
63
  * Broadcast a message to all views
105
64
 
@@ -107,32 +66,19 @@ export default class GenomeSpy {
107
66
  * @param {any} [payload]
108
67
  */
109
68
  broadcast(type: BroadcastEventType, payload?: any): void;
110
- /**
111
- * Draw some layers on top of the canvas. It's easier to do fancy spinning
112
- * animations with html elements than with WebGL.
113
- */
114
- _updateLoadingIndicators(): void;
115
- _glHelper: WebGLHelper;
116
69
  loadingMessageElement: HTMLElement;
117
70
  loadingIndicatorsElement: HTMLElement;
118
- tooltip: Tooltip;
71
+ tooltip: import("./utils/ui/tooltip.js").default;
119
72
  /**
120
73
  * Unregisters all listeners, removes all created dom elements, removes all css classes from the container
121
74
  */
122
75
  destroy(): void;
123
- _prepareViewsAndData(): Promise<void>;
124
76
  /**
125
77
  * TODO: Come up with a sensible name. And maybe this should be called at the end of the constructor.
126
78
  * @returns {Promise<boolean>} true if the launch was successful
127
79
  */
128
80
  launch(): Promise<boolean>;
129
81
  registerMouseEvents(): void;
130
- _tooltipUpdateRequested: boolean;
131
- /**
132
- * @param {number} x
133
- * @param {number} y
134
- */
135
- _handlePicking(x: number, y: number): void;
136
82
  /**
137
83
  * This method should be called in a mouseMove handler. If not called, the
138
84
  * tooltip will be hidden.
@@ -152,11 +98,15 @@ export default class GenomeSpy {
152
98
  * @returns A PNG data Url
153
99
  */
154
100
  exportCanvas(logicalWidth?: number, logicalHeight?: number, devicePixelRatio?: number, clearColor?: string): string;
101
+ getLogicalCanvasSize(): {
102
+ width: any;
103
+ height: any;
104
+ };
155
105
  computeLayout(): void;
156
106
  renderAll(): void;
157
107
  renderPickingFramebuffer(): void;
158
108
  getSearchableViews(): UnitView[];
159
- getNamedScaleResolutions(): Map<string, import("./view/scaleResolution.js").default>;
109
+ getNamedScaleResolutions(): Map<string, import("./scales/scaleResolution.js").default>;
160
110
  #private;
161
111
  }
162
112
  /**
@@ -166,10 +116,5 @@ export type BroadcastEventType = "dataFlowBuilt" | "layout" | "layoutComputed" |
166
116
  import { ViewFactory } from "./view/viewFactory.js";
167
117
  import Animator from "./utils/animator.js";
168
118
  import GenomeStore from "./genome/genomeStore.js";
169
- import BufferedViewRenderingContext from "./view/renderingContext/bufferedViewRenderingContext.js";
170
- import Inertia from "./utils/inertia.js";
171
- import Point from "./view/layout/point.js";
172
- import WebGLHelper from "./gl/webGLHelper.js";
173
- import Tooltip from "./utils/ui/tooltip.js";
174
119
  import UnitView from "./view/unitView.js";
175
120
  //# sourceMappingURL=genomeSpy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"genomeSpy.d.ts","sourceRoot":"","sources":["../../src/genomeSpy.js"],"names":[],"mappings":"AAgDA;IACI;;;;;OAKG;IAEH;;;;;OAKG;IACH,uBAJW,WAAW,qDAEX,OAAO,qBAAqB,EAAE,YAAY,EA+FpD;IA5FG,uBAA0B;IAC1B,oDAAsB;IAItB,6BAA6B;IAC7B,uBADW,CAAC,MAAM,IAAI,CAAC,EAAE,CACM;IAE/B,sCAAsC;IACtC,wCAAgB;IAEhB,yBAAoC;IAEpC,4CAA4C;IAC5C,oBADW,CAAC,CAAS,IAAM,EAAN,MAAM,KAAE,MAAM,EAAE,CAAC,EAAE,CACZ;IAE5B,mBAAoD;IAEpD,0BAA0B;IAC1B,aADW,WAAW,CACM;IAE5B;;;;;OAKG;IACH,yBAFU,CAAC,IAAI,kCAAM,KAAK,OAAO,CAE8B;IAE/D,2CAA2C;IAC3C,mBADW,4BAA4B,CACL;IAClC,2CAA2C;IAC3C,iBADW,4BAA4B,CACP;IAEhC,oDAAoD;IACpD,6BAAgC;IAEhC;;;OAGG;IACH,eAFU;QAAE,IAAI,EAAE,OAAO,iBAAiB,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,oBAAoB,EAAE,KAAK,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAEpF;IAE9B,uBAA+C;IAE/C;;;OAGG;IACH,oBAFU,GAAG,CAAC,MAAM,EAAE,CAAC,CAAS,IAAa,EAAb,aAAa,KAAE,IAAI,CAAC,EAAE,CAAC,CAEpB;IAEnC;;;;;;OAMG;IACH,iBAFU,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC,CAEhB;IAEhC;;;OAGG;IACH,0BAFU,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC,CAEP;IAEzC,oFAAoF;IACpF,iBADW,MAAM,CAAC,MAAM,EAAE,OAAO,6BAA6B,EAAE,cAAc,CAAC,CAK9E;IAED,mBAAmB;IACnB,2CAAyB;IAEzB;;;;OAIG;IACH,eAFU,GAAG,mCAAO;QAAE,MAAM,EAAE,OAAO,wBAAwB,EAAE,iBAAiB,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAEtE;IAE9B;;OAEG;IACH,wBAFU,WAAW,CAEkB;IAEvC,oBAAoB;IACpB,kBADW,KAAK,CACiB;IAEjC,YAAkC;IA2CtC;;;OAGG;IACH,oCAFW,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,EAAE,QAIjC;IAED;;OAEG;IACH,+BAFW,MAAM,YAShB;IAED;;;;OAIG;IACH,sBAHW,MAAM,QACN,GAAG,EAAE,QAYf;IAED;;;;;OAKG;IACH,gBAHW,kBAAkB,YAClB,GAAG,QAQb;IAED;;;OAGG;IACH,iCAwDC;IA6DG,uBAOC;IAGD,mCAGE;IAOF,sCAEE;IAGF,iBAA0C;IAW9C;;OAEG;IACH,gBAuBC;IAED,sCAuKC;IAED;;;OAGG;IACH,UAFa,OAAO,CAAC,OAAO,CAAC,CA6B5B;IAED,4BAoMC;IA3Ke,iCAAoC;IA6KpD;;;OAGG;IACH,kBAHW,MAAM,KACN,MAAM,QAuEhB;IAED;;;;;;;OAOG;IACH,cAFa,CAAC,SAFH,CAAC,cACD,CAAS,IAAC,EAAD,CAAC,KAAE,OAAO,CAAC,MAAM,GAAG,WAAW,GAAG,OAAO,KAAK,EAAE,cAAc,CAAC,QAYlF;IAED;;;;;;;;OAQG;IACH,4BANW,MAAM,kBACN,MAAM,qBACN,MAAM,eACN,MAAM,UA0DhB;IAED,sBAqDC;IAED,kBAIC;IAED,iCAOC;IAED,iCASC;IAED,qFAWC;;CACJ;;;;iCAnhCY,eAAe,GAAG,QAAQ,GAAG,gBAAgB,GAAG,kBAAkB;4BAPnC,uBAAuB;qBAV9C,qBAAqB;wBAElB,yBAAyB;yCANR,yDAAyD;oBAUvD,oBAAoB;kBAP7C,wBAAwB;wBALnC,qBAAqB;oBAdR,uBAAuB;qBAStB,oBAAoB"}
1
+ {"version":3,"file":"genomeSpy.d.ts","sourceRoot":"","sources":["../../src/genomeSpy.js"],"names":[],"mappings":"AA0CA;IAkBI;;;;;OAKG;IAEH;;;;;OAKG;IACH,uBAJW,WAAW,qDAEX,OAAO,qBAAqB,EAAE,YAAY,EA0CpD;IAvCG,uBAA0B;IAC1B,oDAAsB;IAItB,sCAAsC;IACtC,wCAAgB;IAEhB,yBAAoC;IAEpC,4CAA4C;IAC5C,oBADW,CAAC,CAAS,IAAM,EAAN,MAAM,KAAE,MAAM,EAAE,CAAC,EAAE,CACZ;IAE5B,mBAAoD;IAEpD,0BAA0B;IAC1B,aADW,WAAW,CACM;IAE5B;;;;;OAKG;IACH,yBAFU,CAAC,IAAI,kCAAM,KAAK,OAAO,CAE8B;IAE/D,oFAAoF;IACpF,iBADW,MAAM,CAAC,MAAM,EAAE,OAAO,6BAA6B,EAAE,cAAc,CAAC,CAK9E;IAED,mBAAmB;IACnB,2CAAyB;IAIzB,YAAkC;IAatC;;;OAGG;IACH,oCAFW,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,EAAE,QAIjC;IAED;;OAEG;IACH,+BAFW,MAAM,YAShB;IAED;;;;OAIG;IACH,sBAHW,MAAM,QACN,GAAG,EAAE,QAYf;IAED;;;OAGG;IACH,uBAHW,MAAM,YACN,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,QAI9B;IAED;;;OAGG;IACH,0BAHW,MAAM,YACN,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,QAI9B;IAED;;;;;OAKG;IACH,gBAHW,kBAAkB,YAClB,GAAG,QAMb;IAiEG,mCAAkD;IAKlD,sCAAwD;IACxD,iDAAsB;IAM1B;;OAEG;IACH,gBAmBC;IA8ID;;;OAGG;IACH,UAFa,OAAO,CAAC,OAAO,CAAC,CAgC5B;IAED,4BAEC;IAED;;;;;;;OAOG;IACH,cAFa,CAAC,SAFH,CAAC,cACD,CAAS,IAAC,EAAD,CAAC,KAAE,OAAO,CAAC,MAAM,GAAG,WAAW,GAAG,OAAO,KAAK,EAAE,cAAc,CAAC,QAKlF;IAED;;;;;;;;OAQG;IACH,4BANW,MAAM,kBACN,MAAM,qBACN,MAAM,eACN,MAAM,UAuBhB;IAED;;;MAEC;IAED,sBAEC;IAED,kBAEC;IAED,iCAEC;IAED,iCASC;IAED,uFAWC;;CACJ;;;;iCAlgBY,eAAe,GAAG,QAAQ,GAAG,gBAAgB,GAAG,kBAAkB;4BAZnC,uBAAuB;qBAR9C,qBAAqB;wBAElB,yBAAyB;qBAL5B,oBAAoB"}