@genome-spy/core 0.78.0 → 0.79.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 (292) hide show
  1. package/dist/bundle/{browser-KWU9rWZT.js → browser-CETrb2cm.js} +53 -33
  2. package/dist/bundle/esm-BdLYkz-m.js +248 -0
  3. package/dist/bundle/esm-BwiDsqSb.js +1367 -0
  4. package/dist/bundle/esm-CDFd1cjk.js +441 -0
  5. package/dist/bundle/{esm-DVOHLB1e.js → esm-CTUHLDbv.js} +30 -30
  6. package/dist/bundle/{esm-NIYEaYkc.js → esm-Cx-EbkOj.js} +13 -13
  7. package/dist/bundle/esm-DlYGqi79.js +128 -0
  8. package/dist/bundle/{esm-BygJiwh0.js → esm-k9p3oHkt.js} +133 -158
  9. package/dist/bundle/{esm-CT3ygiMq.js → esm-zAZJQO6D.js} +226 -212
  10. package/dist/bundle/index.es.js +14879 -11656
  11. package/dist/bundle/index.js +119 -108
  12. package/dist/bundle/{parquetRead-DG_-F5j5.js → parquetRead-Cad1SOVV.js} +473 -399
  13. package/dist/schema.json +18940 -6914
  14. package/dist/src/config/axisConfig.d.ts +2 -2
  15. package/dist/src/config/axisConfig.d.ts.map +1 -1
  16. package/dist/src/config/axisConfig.js +28 -44
  17. package/dist/src/config/configLayers.d.ts +45 -0
  18. package/dist/src/config/configLayers.d.ts.map +1 -0
  19. package/dist/src/config/configLayers.js +110 -0
  20. package/dist/src/config/defaultConfig.d.ts.map +1 -1
  21. package/dist/src/config/defaultConfig.js +8 -1
  22. package/dist/src/config/defaults/legendDefaults.d.ts +14 -0
  23. package/dist/src/config/defaults/legendDefaults.d.ts.map +1 -0
  24. package/dist/src/config/defaults/legendDefaults.js +46 -0
  25. package/dist/src/config/defaults/titleDefaults.d.ts.map +1 -1
  26. package/dist/src/config/defaults/titleDefaults.js +26 -18
  27. package/dist/src/config/legendConfig.d.ts +11 -0
  28. package/dist/src/config/legendConfig.d.ts.map +1 -0
  29. package/dist/src/config/legendConfig.js +63 -0
  30. package/dist/src/config/styleUtils.d.ts +8 -2
  31. package/dist/src/config/styleUtils.d.ts.map +1 -1
  32. package/dist/src/config/styleUtils.js +25 -1
  33. package/dist/src/config/themes.d.ts.map +1 -1
  34. package/dist/src/config/themes.js +21 -2
  35. package/dist/src/config/titleConfig.d.ts.map +1 -1
  36. package/dist/src/config/titleConfig.js +2 -18
  37. package/dist/src/data/collector.d.ts.map +1 -1
  38. package/dist/src/data/collector.js +40 -18
  39. package/dist/src/data/flowInit.d.ts +6 -0
  40. package/dist/src/data/flowInit.d.ts.map +1 -1
  41. package/dist/src/data/flowInit.js +1 -1
  42. package/dist/src/data/flowNode.d.ts +32 -0
  43. package/dist/src/data/flowNode.d.ts.map +1 -1
  44. package/dist/src/data/flowNode.js +59 -0
  45. package/dist/src/data/sources/lazy/bamSource.d.ts +0 -1
  46. package/dist/src/data/sources/lazy/bamSource.d.ts.map +1 -1
  47. package/dist/src/data/sources/lazy/bamSource.js +39 -30
  48. package/dist/src/data/sources/lazy/bigBedSource.d.ts +0 -10
  49. package/dist/src/data/sources/lazy/bigBedSource.d.ts.map +1 -1
  50. package/dist/src/data/sources/lazy/bigBedSource.js +127 -62
  51. package/dist/src/data/sources/lazy/bigWigSource.d.ts +2 -2
  52. package/dist/src/data/sources/lazy/bigWigSource.d.ts.map +1 -1
  53. package/dist/src/data/sources/lazy/bigWigSource.js +234 -81
  54. package/dist/src/data/sources/lazy/gff3Source.d.ts +7 -3
  55. package/dist/src/data/sources/lazy/gff3Source.d.ts.map +1 -1
  56. package/dist/src/data/sources/lazy/gff3Source.js +7 -8
  57. package/dist/src/data/sources/lazy/indexedFastaSource.d.ts +1 -1
  58. package/dist/src/data/sources/lazy/indexedFastaSource.d.ts.map +1 -1
  59. package/dist/src/data/sources/lazy/indexedFastaSource.js +28 -19
  60. package/dist/src/data/sources/lazy/legendEntriesSource.d.ts +24 -0
  61. package/dist/src/data/sources/lazy/legendEntriesSource.d.ts.map +1 -0
  62. package/dist/src/data/sources/lazy/legendEntriesSource.js +218 -0
  63. package/dist/src/data/sources/lazy/legendGradientSource.d.ts +30 -0
  64. package/dist/src/data/sources/lazy/legendGradientSource.d.ts.map +1 -0
  65. package/dist/src/data/sources/lazy/legendGradientSource.js +388 -0
  66. package/dist/src/data/sources/lazy/mockLazySource.d.ts +4 -1
  67. package/dist/src/data/sources/lazy/mockLazySource.d.ts.map +1 -1
  68. package/dist/src/data/sources/lazy/mockLazySource.js +49 -4
  69. package/dist/src/data/sources/lazy/registerCoreLazySources.js +2 -0
  70. package/dist/src/data/sources/lazy/singleAxisWindowedSource.d.ts.map +1 -1
  71. package/dist/src/data/sources/lazy/singleAxisWindowedSource.js +3 -4
  72. package/dist/src/data/sources/lazy/tabixSource.d.ts +9 -4
  73. package/dist/src/data/sources/lazy/tabixSource.d.ts.map +1 -1
  74. package/dist/src/data/sources/lazy/tabixSource.js +201 -70
  75. package/dist/src/data/sources/lazy/tabixTsvSource.d.ts +2 -3
  76. package/dist/src/data/sources/lazy/tabixTsvSource.d.ts.map +1 -1
  77. package/dist/src/data/sources/lazy/tabixTsvSource.js +14 -12
  78. package/dist/src/data/sources/lazy/vcfSource.d.ts +7 -3
  79. package/dist/src/data/sources/lazy/vcfSource.d.ts.map +1 -1
  80. package/dist/src/data/sources/lazy/vcfSource.js +7 -8
  81. package/dist/src/data/sources/urlDescriptor.d.ts +165 -0
  82. package/dist/src/data/sources/urlDescriptor.d.ts.map +1 -0
  83. package/dist/src/data/sources/urlDescriptor.js +473 -0
  84. package/dist/src/data/sources/urlDescriptorController.d.ts +25 -0
  85. package/dist/src/data/sources/urlDescriptorController.d.ts.map +1 -0
  86. package/dist/src/data/sources/urlDescriptorController.js +72 -0
  87. package/dist/src/data/sources/urlDescriptorState.d.ts +47 -0
  88. package/dist/src/data/sources/urlDescriptorState.d.ts.map +1 -0
  89. package/dist/src/data/sources/urlDescriptorState.js +129 -0
  90. package/dist/src/data/sources/urlSource.d.ts.map +1 -1
  91. package/dist/src/data/sources/urlSource.js +101 -61
  92. package/dist/src/data/transforms/packLegendLabels.d.ts +21 -0
  93. package/dist/src/data/transforms/packLegendLabels.d.ts.map +1 -0
  94. package/dist/src/data/transforms/packLegendLabels.js +189 -0
  95. package/dist/src/data/transforms/transformFactory.d.ts.map +1 -1
  96. package/dist/src/data/transforms/transformFactory.js +4 -0
  97. package/dist/src/data/transforms/truncateText.d.ts +27 -0
  98. package/dist/src/data/transforms/truncateText.d.ts.map +1 -0
  99. package/dist/src/data/transforms/truncateText.js +94 -0
  100. package/dist/src/debug/dataflowDebugSnapshot.d.ts +58 -0
  101. package/dist/src/debug/dataflowDebugSnapshot.d.ts.map +1 -0
  102. package/dist/src/debug/dataflowDebugSnapshot.js +159 -0
  103. package/dist/src/debug/markDebugSnapshot.d.ts +54 -0
  104. package/dist/src/debug/markDebugSnapshot.d.ts.map +1 -0
  105. package/dist/src/debug/markDebugSnapshot.js +100 -0
  106. package/dist/src/debug/paramDebugSnapshot.d.ts +53 -0
  107. package/dist/src/debug/paramDebugSnapshot.d.ts.map +1 -0
  108. package/dist/src/debug/paramDebugSnapshot.js +86 -0
  109. package/dist/src/debug/resolutionDebugSnapshot.d.ts +155 -0
  110. package/dist/src/debug/resolutionDebugSnapshot.d.ts.map +1 -0
  111. package/dist/src/debug/resolutionDebugSnapshot.js +291 -0
  112. package/dist/src/debug/valuePreview.d.ts +9 -0
  113. package/dist/src/debug/valuePreview.d.ts.map +1 -0
  114. package/dist/src/debug/valuePreview.js +57 -0
  115. package/dist/src/debug/viewDebugSnapshot.d.ts +131 -0
  116. package/dist/src/debug/viewDebugSnapshot.d.ts.map +1 -0
  117. package/dist/src/debug/viewDebugSnapshot.js +390 -0
  118. package/dist/src/embedFactory.d.ts.map +1 -1
  119. package/dist/src/embedFactory.js +6 -1
  120. package/dist/src/encoder/encoder.d.ts +2 -2
  121. package/dist/src/encoder/encoder.d.ts.map +1 -1
  122. package/dist/src/encoder/encoder.js +5 -4
  123. package/dist/src/fonts/bmFontManager.d.ts +1 -1
  124. package/dist/src/fonts/bmFontManager.d.ts.map +1 -1
  125. package/dist/src/fonts/bmFontManager.js +45 -10
  126. package/dist/src/fonts/textMetrics.d.ts +69 -0
  127. package/dist/src/fonts/textMetrics.d.ts.map +1 -0
  128. package/dist/src/fonts/textMetrics.js +73 -0
  129. package/dist/src/genomeSpy/headlessBootstrap.d.ts.map +1 -1
  130. package/dist/src/genomeSpy/headlessBootstrap.js +6 -0
  131. package/dist/src/genomeSpy/renderCoordinator.d.ts.map +1 -1
  132. package/dist/src/genomeSpy/renderCoordinator.js +25 -3
  133. package/dist/src/genomeSpy/viewDataInit.d.ts +14 -0
  134. package/dist/src/genomeSpy/viewDataInit.d.ts.map +1 -1
  135. package/dist/src/genomeSpy/viewDataInit.js +45 -8
  136. package/dist/src/genomeSpyBase.d.ts +6 -0
  137. package/dist/src/genomeSpyBase.d.ts.map +1 -1
  138. package/dist/src/genomeSpyBase.js +20 -3
  139. package/dist/src/gl/glslScaleGenerator.d.ts +17 -0
  140. package/dist/src/gl/glslScaleGenerator.d.ts.map +1 -1
  141. package/dist/src/gl/glslScaleGenerator.js +39 -2
  142. package/dist/src/gl/includes/common.glsl.js +1 -1
  143. package/dist/src/gl/vertexRangeIndex.d.ts.map +1 -1
  144. package/dist/src/gl/vertexRangeIndex.js +4 -2
  145. package/dist/src/gl/webGLHelper.d.ts +1 -1
  146. package/dist/src/gl/webGLHelper.d.ts.map +1 -1
  147. package/dist/src/gl/webGLHelper.js +13 -8
  148. package/dist/src/marks/__snapshots__/shaderSnapshot.test.js.snap +140 -3
  149. package/dist/src/marks/mark.d.ts +47 -4
  150. package/dist/src/marks/mark.d.ts.map +1 -1
  151. package/dist/src/marks/mark.js +158 -54
  152. package/dist/src/marks/point.d.ts.map +1 -1
  153. package/dist/src/marks/point.js +4 -0
  154. package/dist/src/marks/point.vertex.glsl.js +1 -1
  155. package/dist/src/marks/text.d.ts +1 -1
  156. package/dist/src/marks/text.d.ts.map +1 -1
  157. package/dist/src/marks/text.js +2 -7
  158. package/dist/src/marks/text.vertex.glsl.js +1 -1
  159. package/dist/src/paramRuntime/paramUtils.d.ts +43 -9
  160. package/dist/src/paramRuntime/paramUtils.d.ts.map +1 -1
  161. package/dist/src/paramRuntime/paramUtils.js +61 -1
  162. package/dist/src/paramRuntime/viewParamRuntime.d.ts +32 -0
  163. package/dist/src/paramRuntime/viewParamRuntime.d.ts.map +1 -1
  164. package/dist/src/paramRuntime/viewParamRuntime.js +63 -0
  165. package/dist/src/scales/axisResolution.d.ts +35 -0
  166. package/dist/src/scales/axisResolution.d.ts.map +1 -1
  167. package/dist/src/scales/axisResolution.js +115 -7
  168. package/dist/src/scales/legendResolution.d.ts +83 -0
  169. package/dist/src/scales/legendResolution.d.ts.map +1 -0
  170. package/dist/src/scales/legendResolution.js +461 -0
  171. package/dist/src/scales/scaleResolution.d.ts +36 -0
  172. package/dist/src/scales/scaleResolution.d.ts.map +1 -1
  173. package/dist/src/scales/scaleResolution.js +59 -0
  174. package/dist/src/scales/viewLevelGuideConfig.d.ts +53 -0
  175. package/dist/src/scales/viewLevelGuideConfig.d.ts.map +1 -0
  176. package/dist/src/scales/viewLevelGuideConfig.js +224 -0
  177. package/dist/src/scales/viewLevelScaleConfig.d.ts.map +1 -1
  178. package/dist/src/scales/viewLevelScaleConfig.js +13 -2
  179. package/dist/src/spec/axis.d.ts +109 -3
  180. package/dist/src/spec/channel.d.ts +23 -4
  181. package/dist/src/spec/config.d.ts +59 -4
  182. package/dist/src/spec/data.d.ts +177 -17
  183. package/dist/src/spec/legend.d.ts +246 -0
  184. package/dist/src/spec/mark.d.ts +16 -4
  185. package/dist/src/spec/title.d.ts +58 -1
  186. package/dist/src/spec/transform.d.ts +149 -0
  187. package/dist/src/spec/view.d.ts +39 -6
  188. package/dist/src/types/embedApi.d.ts +262 -6
  189. package/dist/src/types/rendering.d.ts +19 -3
  190. package/dist/src/types/viewContext.d.ts +18 -2
  191. package/dist/src/utils/arrayUtils.d.ts +11 -0
  192. package/dist/src/utils/arrayUtils.d.ts.map +1 -1
  193. package/dist/src/utils/arrayUtils.js +23 -0
  194. package/dist/src/utils/suspension.d.ts +17 -0
  195. package/dist/src/utils/suspension.d.ts.map +1 -0
  196. package/dist/src/utils/suspension.js +41 -0
  197. package/dist/src/view/axisGridView.d.ts.map +1 -1
  198. package/dist/src/view/axisGridView.js +1 -4
  199. package/dist/src/view/axisView.d.ts +18 -2
  200. package/dist/src/view/axisView.d.ts.map +1 -1
  201. package/dist/src/view/axisView.js +180 -75
  202. package/dist/src/view/concatView.d.ts +10 -2
  203. package/dist/src/view/concatView.d.ts.map +1 -1
  204. package/dist/src/view/concatView.js +46 -9
  205. package/dist/src/view/containerMutationHelper.d.ts +20 -1
  206. package/dist/src/view/containerMutationHelper.d.ts.map +1 -1
  207. package/dist/src/view/containerMutationHelper.js +196 -33
  208. package/dist/src/view/facetView.d.ts +1 -1
  209. package/dist/src/view/gridView/gridChild.d.ts +54 -4
  210. package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
  211. package/dist/src/view/gridView/gridChild.js +301 -120
  212. package/dist/src/view/gridView/gridChildLegends.d.ts +57 -0
  213. package/dist/src/view/gridView/gridChildLegends.d.ts.map +1 -0
  214. package/dist/src/view/gridView/gridChildLegends.js +503 -0
  215. package/dist/src/view/gridView/gridView.d.ts +25 -0
  216. package/dist/src/view/gridView/gridView.d.ts.map +1 -1
  217. package/dist/src/view/gridView/gridView.js +490 -78
  218. package/dist/src/view/gridView/legendLayout.d.ts +30 -0
  219. package/dist/src/view/gridView/legendLayout.d.ts.map +1 -0
  220. package/dist/src/view/gridView/legendLayout.js +115 -0
  221. package/dist/src/view/gridView/scrollbar.d.ts.map +1 -1
  222. package/dist/src/view/gridView/scrollbar.js +1 -4
  223. package/dist/src/view/gridView/selectionRect.d.ts.map +1 -1
  224. package/dist/src/view/gridView/selectionRect.js +1 -4
  225. package/dist/src/view/gridView/separatorView.d.ts.map +1 -1
  226. package/dist/src/view/gridView/separatorView.js +1 -4
  227. package/dist/src/view/layerView.d.ts +9 -2
  228. package/dist/src/view/layerView.d.ts.map +1 -1
  229. package/dist/src/view/layerView.js +18 -1
  230. package/dist/src/view/layout/flexLayout.d.ts +20 -4
  231. package/dist/src/view/layout/flexLayout.d.ts.map +1 -1
  232. package/dist/src/view/layout/flexLayout.js +331 -31
  233. package/dist/src/view/layout/rectangle.d.ts +14 -0
  234. package/dist/src/view/layout/rectangle.d.ts.map +1 -1
  235. package/dist/src/view/layout/rectangle.js +40 -0
  236. package/dist/src/view/legend/legendEntries.d.ts +20 -0
  237. package/dist/src/view/legend/legendEntries.d.ts.map +1 -0
  238. package/dist/src/view/legend/legendEntries.js +21 -0
  239. package/dist/src/view/legendView.d.ts +137 -0
  240. package/dist/src/view/legendView.d.ts.map +1 -0
  241. package/dist/src/view/legendView.js +1654 -0
  242. package/dist/src/view/renderingContext/bufferedViewRenderingContext.d.ts.map +1 -1
  243. package/dist/src/view/renderingContext/bufferedViewRenderingContext.js +26 -4
  244. package/dist/src/view/renderingContext/clipOptions.d.ts +44 -0
  245. package/dist/src/view/renderingContext/clipOptions.d.ts.map +1 -0
  246. package/dist/src/view/renderingContext/clipOptions.js +140 -0
  247. package/dist/src/view/renderingContext/simpleViewRenderingContext.d.ts.map +1 -1
  248. package/dist/src/view/renderingContext/simpleViewRenderingContext.js +12 -1
  249. package/dist/src/view/resolutionPlanner.d.ts +2 -1
  250. package/dist/src/view/resolutionPlanner.d.ts.map +1 -1
  251. package/dist/src/view/resolutionPlanner.js +89 -25
  252. package/dist/src/view/testUtils.d.ts +4 -2
  253. package/dist/src/view/testUtils.d.ts.map +1 -1
  254. package/dist/src/view/testUtils.js +60 -7
  255. package/dist/src/view/titleView.d.ts +37 -0
  256. package/dist/src/view/titleView.d.ts.map +1 -0
  257. package/dist/src/view/titleView.js +584 -0
  258. package/dist/src/view/unitView.d.ts +3 -3
  259. package/dist/src/view/unitView.d.ts.map +1 -1
  260. package/dist/src/view/unitView.js +3 -2
  261. package/dist/src/view/view.d.ts +25 -24
  262. package/dist/src/view/view.d.ts.map +1 -1
  263. package/dist/src/view/view.js +126 -16
  264. package/dist/src/view/viewChrome.d.ts +33 -0
  265. package/dist/src/view/viewChrome.d.ts.map +1 -0
  266. package/dist/src/view/viewChrome.js +64 -0
  267. package/dist/src/view/viewFactory.d.ts +2 -5
  268. package/dist/src/view/viewFactory.d.ts.map +1 -1
  269. package/dist/src/view/viewFactory.js +1 -2
  270. package/dist/src/view/viewIdentityRegistry.d.ts +37 -0
  271. package/dist/src/view/viewIdentityRegistry.d.ts.map +1 -0
  272. package/dist/src/view/viewIdentityRegistry.js +71 -0
  273. package/dist/src/view/viewMutationAcidTestUtils.d.ts +112 -0
  274. package/dist/src/view/viewMutationAcidTestUtils.d.ts.map +1 -0
  275. package/dist/src/view/viewMutationAcidTestUtils.js +234 -0
  276. package/dist/src/view/viewMutationApi.d.ts +42 -0
  277. package/dist/src/view/viewMutationApi.d.ts.map +1 -0
  278. package/dist/src/view/viewMutationApi.js +811 -0
  279. package/dist/src/view/viewSelectors.d.ts +11 -9
  280. package/dist/src/view/viewSelectors.d.ts.map +1 -1
  281. package/dist/src/view/viewSelectors.js +28 -17
  282. package/package.json +4 -4
  283. package/dist/bundle/esm-CuMSzCHy.js +0 -298
  284. package/dist/bundle/esm-DAnOffpD.js +0 -1426
  285. package/dist/bundle/esm-DMXpJXM4.js +0 -369
  286. package/dist/bundle/esm-DNtC3H80.js +0 -121
  287. package/dist/src/view/title.d.ts +0 -13
  288. package/dist/src/view/title.d.ts.map +0 -1
  289. package/dist/src/view/title.js +0 -154
  290. /package/dist/bundle/{AbortablePromiseCache-3gHJdF3E.js → AbortablePromiseCache-BTmAcN-t.js} +0 -0
  291. /package/dist/bundle/{esm-CuVa5T98.js → esm-VvpZ9hsq.js} +0 -0
  292. /package/dist/bundle/{chunk-DmhlhrBa.js → rolldown-runtime-Dy4uBu1J.js} +0 -0
@@ -17,6 +17,23 @@ export {
17
17
  withoutExprRef,
18
18
  } from "./paramUtils.js";
19
19
 
20
+ /**
21
+ * @typedef {object} ViewParamRuntimeDebugState
22
+ * @prop {string} scopeId
23
+ * @prop {boolean} disposed
24
+ * @prop {ViewParamDebugState[]} params
25
+ */
26
+
27
+ /**
28
+ * @typedef {object} ViewParamDebugState
29
+ * @prop {string} name
30
+ * @prop {"auto" | "base" | "derived" | "selection" | "push"} kind
31
+ * @prop {any} value
32
+ * @prop {boolean} writable
33
+ * @prop {boolean} configured
34
+ * @prop {import("../spec/parameter.js").Parameter | undefined} config
35
+ */
36
+
20
37
  /**
21
38
  * A class that manages parameters and expressions.
22
39
  * Supports nesting and scoped parameters through a shared runtime graph.
@@ -352,6 +369,32 @@ export default class ViewParamRuntime {
352
369
  }
353
370
  }
354
371
 
372
+ /**
373
+ * @returns {ViewParamRuntimeDebugState}
374
+ */
375
+ getDebugState() {
376
+ /** @type {ViewParamDebugState[]} */
377
+ const params = [];
378
+
379
+ for (const [name, ref] of this.#localRefs) {
380
+ const config = this.#paramConfigs.get(name);
381
+ params.push({
382
+ name,
383
+ kind: getParamKind(config),
384
+ value: ref.get(),
385
+ writable: this.#allocatedSetters.has(name),
386
+ configured: Boolean(config),
387
+ config: config ? structuredClone(config) : undefined,
388
+ });
389
+ }
390
+
391
+ return {
392
+ scopeId: this.#scopeId,
393
+ disposed: this.#disposed,
394
+ params,
395
+ };
396
+ }
397
+
355
398
  // Setter lifecycle is scope-owned: setters are dropped when the runtime scope
356
399
  // is disposed. A standalone deallocation API is intentionally not exposed.
357
400
 
@@ -487,3 +530,23 @@ export default class ViewParamRuntime {
487
530
  return false;
488
531
  }
489
532
  }
533
+
534
+ /**
535
+ * @param {import("../spec/parameter.js").Parameter | undefined} config
536
+ * @returns {"auto" | "base" | "derived" | "selection" | "push"}
537
+ */
538
+ function getParamKind(config) {
539
+ if (!config) {
540
+ return "auto";
541
+ }
542
+
543
+ if (config.push === "outer") {
544
+ return "push";
545
+ } else if ("select" in config) {
546
+ return "selection";
547
+ } else if ("expr" in config) {
548
+ return "derived";
549
+ } else {
550
+ return "base";
551
+ }
552
+ }
@@ -23,8 +23,43 @@ export default class AxisResolution {
23
23
  * @returns {boolean}
24
24
  */
25
25
  removeMember(member: AxisResolutionMember): boolean;
26
+ /**
27
+ * @returns {boolean} True when at least one non-chrome axis-contributing view is visible.
28
+ */
29
+ hasVisibleNonChromeMember(): boolean;
30
+ getDebugState(): {
31
+ kind: string;
32
+ channel: import("../spec/channel.js").PrimaryPositionalChannel;
33
+ hostView: any;
34
+ scaleResolution: any;
35
+ title: string;
36
+ axisProps: import("../spec/axis.js").GenomeAxis;
37
+ hasVisibleNonChromeMember: boolean;
38
+ members: {
39
+ view: import("../view/unitView.js").default<import("../spec/view.js").UnitSpec>;
40
+ channel: import("../spec/channel.js").PositionalChannel;
41
+ channelDef: import("../spec/channel.js").ChannelDefWithScale;
42
+ }[];
43
+ viewLevelAxisConfig: {
44
+ view: import("../view/view.js").default<import("../spec/view.js").ViewSpec>;
45
+ config: Partial<import("../spec/axis.js").Axis & import("../spec/axis.js").GenomeAxis>;
46
+ };
47
+ };
26
48
  getAxisProps(): import("../spec/axis.js").GenomeAxis;
27
49
  getTitle(): string;
50
+ /**
51
+ * @param {import("../view/view.js").default} view
52
+ * @param {Partial<import("../spec/axis.js").Axis & import("../spec/axis.js").GenomeAxis>} config
53
+ */
54
+ attachViewLevelAxisConfig(view: import("../view/view.js").default, config: Partial<import("../spec/axis.js").Axis & import("../spec/axis.js").GenomeAxis>): void;
55
+ /**
56
+ * @param {import("../view/view.js").default} view
57
+ */
58
+ clearViewLevelAxisConfig(view: import("../view/view.js").default): void;
59
+ getViewLevelAxisConfig(): {
60
+ view: import("../view/view.js").default;
61
+ config: Partial<import("../spec/axis.js").Axis & import("../spec/axis.js").GenomeAxis>;
62
+ };
28
63
  #private;
29
64
  }
30
65
  export type AxisResolutionMember<T extends import("../spec/channel.js").PositionalChannel = import("../spec/channel.js").PositionalChannel> = {
@@ -1 +1 @@
1
- {"version":3,"file":"axisResolution.d.ts","sourceRoot":"","sources":["../../../src/scales/axisResolution.js"],"names":[],"mappings":"AAeA;;;;;;;GAOG;AACH;IASI;;OAEG;IACH,qBAFW,OAAO,oBAAoB,EAAE,wBAAwB,EAI/D;IADG,+DAAsB;IAG1B,2BAGC;IAiCD;;;OAGG;IACH,uBAHW,oBAAoB,GAClB,MAAM,OAAO,CAQzB;IAED;;;OAGG;IACH,qBAHW,oBAAoB,GAClB,OAAO,CAQnB;IAED,qDA0BC;IAED,mBAmEC;;CACJ;iCAnL6D,CAAC,SAAlD,OAAQ,oBAAoB,EAAE,iBAAkB;UAGnD,OAAO,qBAAqB,EAAE,OAAO;aACrC,CAAC;gBACD,OAAO,oBAAoB,EAAE,mBAAmB"}
1
+ {"version":3,"file":"axisResolution.d.ts","sourceRoot":"","sources":["../../../src/scales/axisResolution.js"],"names":[],"mappings":"AAgBA;;;;;;;GAOG;AACH;IAYI;;OAEG;IACH,qBAFW,OAAO,oBAAoB,EAAE,wBAAwB,EAI/D;IADG,+DAAsB;IAG1B,2BAGC;IAiCD;;;OAGG;IACH,uBAHW,oBAAoB,GAClB,MAAM,OAAO,CASzB;IAED;;;OAGG;IACH,qBAHW,oBAAoB,GAClB,OAAO,CAQnB;IAED;;OAEG;IACH,6BAFa,OAAO,CAanB;IAED;;;;;;;;;;;;;;;;;MAwBC;IAED,qDA0BC;IAED,mBAuEC;IAED;;;OAGG;IACH,gCAHW,OAAO,iBAAiB,EAAE,OAAO,UACjC,OAAO,CAAC,OAAO,iBAAiB,EAAE,IAAI,GAAG,OAAO,iBAAiB,EAAE,UAAU,CAAC,QAuBxF;IAED;;OAEG;IACH,+BAFW,OAAO,iBAAiB,EAAE,OAAO,QAO3C;IAED;cA3PmB,OAAO,iBAAiB,EAAE,OAAO;gBAAU,OAAO,CAAC,OAAO,iBAAiB,EAAE,IAAI,GAAG,OAAO,iBAAiB,EAAE,UAAU,CAAC;MA6P3I;;CAiBJ;iCA9R6D,CAAC,SAAlD,OAAQ,oBAAoB,EAAE,iBAAkB;UAGnD,OAAO,qBAAqB,EAAE,OAAO;aACrC,CAAC;gBACD,OAAO,oBAAoB,EAAE,mBAAmB"}
@@ -11,6 +11,7 @@ import coalesce from "../utils/coalesce.js";
11
11
 
12
12
  import mergeObjects from "../utils/mergeObjects.js";
13
13
  import { getCachedOrCall, invalidate } from "../utils/propertyCacher.js";
14
+ import { isChromeView } from "../view/viewSelectors.js";
14
15
  import { orderResolutionMembers } from "./resolutionMemberOrder.js";
15
16
 
16
17
  /**
@@ -30,6 +31,9 @@ export default class AxisResolution {
30
31
  /** @type {Set<AxisResolutionMember>} The involved views */
31
32
  #members = new Set();
32
33
 
34
+ /** @type {{ view: import("../view/view.js").default, config: Partial<import("../spec/axis.js").Axis & import("../spec/axis.js").GenomeAxis> } | undefined} */
35
+ #viewLevelAxisConfig;
36
+
33
37
  /**
34
38
  * @param {import("../spec/channel.js").PrimaryPositionalChannel} channel
35
39
  */
@@ -78,6 +82,7 @@ export default class AxisResolution {
78
82
  * @returns {() => boolean}
79
83
  */
80
84
  registerMember(member) {
85
+ this.#assertNoMixing(member);
81
86
  this.#addMember(member);
82
87
  return () => {
83
88
  const removed = this.removeMember(member);
@@ -97,15 +102,57 @@ export default class AxisResolution {
97
102
  return removed;
98
103
  }
99
104
 
105
+ /**
106
+ * @returns {boolean} True when at least one non-chrome axis-contributing view is visible.
107
+ */
108
+ hasVisibleNonChromeMember() {
109
+ for (const member of this.#members) {
110
+ if (
111
+ member.view.isVisible() &&
112
+ !member.view.getLayoutAncestors().some(isChromeView)
113
+ ) {
114
+ return true;
115
+ }
116
+ }
117
+
118
+ return false;
119
+ }
120
+
121
+ getDebugState() {
122
+ return {
123
+ kind: "axis",
124
+ channel: this.channel,
125
+ hostView:
126
+ this.scaleResolution?.getDebugState().hostView ??
127
+ this.#viewLevelAxisConfig?.view ??
128
+ this.#members.values().next().value?.view,
129
+ scaleResolution: this.scaleResolution,
130
+ title: this.getTitle(),
131
+ axisProps: this.getAxisProps(),
132
+ hasVisibleNonChromeMember: this.hasVisibleNonChromeMember(),
133
+ members: orderResolutionMembers(this.#members).map((member) => ({
134
+ view: member.view,
135
+ channel: member.channel,
136
+ channelDef: structuredClone(member.channelDef),
137
+ })),
138
+ viewLevelAxisConfig: this.#viewLevelAxisConfig
139
+ ? {
140
+ view: this.#viewLevelAxisConfig.view,
141
+ config: structuredClone(this.#viewLevelAxisConfig.config),
142
+ }
143
+ : undefined,
144
+ };
145
+ }
146
+
100
147
  getAxisProps() {
101
148
  return getCachedOrCall(this, "axisProps", () => {
102
- const propArray = orderResolutionMembers(this.#members).map(
103
- (member) => {
104
- const channelDef =
105
- member.view.mark.encoding[member.channel];
106
- return "axis" in channelDef && channelDef.axis;
107
- }
108
- );
149
+ const propArray = this.#viewLevelAxisConfig
150
+ ? [this.#viewLevelAxisConfig.config]
151
+ : orderResolutionMembers(this.#members).map((member) => {
152
+ const channelDef =
153
+ member.view.mark.encoding[member.channel];
154
+ return "axis" in channelDef && channelDef.axis;
155
+ });
109
156
 
110
157
  if (
111
158
  propArray.length > 0 &&
@@ -126,6 +173,10 @@ export default class AxisResolution {
126
173
  }
127
174
 
128
175
  getTitle() {
176
+ if (this.#viewLevelAxisConfig?.config.title !== undefined) {
177
+ return this.#viewLevelAxisConfig.config.title;
178
+ }
179
+
129
180
  /** @param {AxisResolutionMember} member} */
130
181
  const computeTitle = (member) => {
131
182
  const channelDef = getChannelDefWithScale(
@@ -193,4 +244,61 @@ export default class AxisResolution {
193
244
 
194
245
  return uniqueTitles.size ? [...uniqueTitles].join(", ") : null;
195
246
  }
247
+
248
+ /**
249
+ * @param {import("../view/view.js").default} view
250
+ * @param {Partial<import("../spec/axis.js").Axis & import("../spec/axis.js").GenomeAxis>} config
251
+ */
252
+ attachViewLevelAxisConfig(view, config) {
253
+ if (
254
+ this.#viewLevelAxisConfig &&
255
+ this.#viewLevelAxisConfig.view !== view
256
+ ) {
257
+ throw new Error(
258
+ `Multiple view-level axis configs target the same ${this.channel} axis resolution.`
259
+ );
260
+ }
261
+
262
+ for (const member of this.#members) {
263
+ const channelDef = member.view.mark.encoding[member.channel];
264
+ if ("axis" in channelDef && channelDef.axis !== undefined) {
265
+ throw new Error(
266
+ `Cannot mix view-level axes.${this.channel} with encoding.${member.channel}.axis in the same axis resolution.`
267
+ );
268
+ }
269
+ }
270
+
271
+ this.#viewLevelAxisConfig = { view, config };
272
+ invalidate(this, "axisProps");
273
+ }
274
+
275
+ /**
276
+ * @param {import("../view/view.js").default} view
277
+ */
278
+ clearViewLevelAxisConfig(view) {
279
+ if (this.#viewLevelAxisConfig?.view === view) {
280
+ this.#viewLevelAxisConfig = undefined;
281
+ invalidate(this, "axisProps");
282
+ }
283
+ }
284
+
285
+ getViewLevelAxisConfig() {
286
+ return this.#viewLevelAxisConfig;
287
+ }
288
+
289
+ /**
290
+ * @param {AxisResolutionMember} member
291
+ */
292
+ #assertNoMixing(member) {
293
+ if (!this.#viewLevelAxisConfig) {
294
+ return;
295
+ }
296
+
297
+ const channelDef = member.view.mark.encoding[member.channel];
298
+ if ("axis" in channelDef && channelDef.axis !== undefined) {
299
+ throw new Error(
300
+ `Cannot mix view-level axes.${this.channel} with encoding.${member.channel}.axis in the same axis resolution.`
301
+ );
302
+ }
303
+ }
196
304
  }
@@ -0,0 +1,83 @@
1
+ export default class LegendResolution {
2
+ /**
3
+ * @param {import("../spec/channel.js").ChannelWithScale} channel
4
+ */
5
+ constructor(channel: import("../spec/channel.js").ChannelWithScale);
6
+ channel: import("../spec/channel.js").ChannelWithScale;
7
+ /**
8
+ * @param {LegendResolutionMember} member
9
+ * @returns {() => boolean}
10
+ */
11
+ registerMember(member: LegendResolutionMember): () => boolean;
12
+ /**
13
+ * @param {LegendResolutionMember} member
14
+ * @returns {boolean}
15
+ */
16
+ removeMember(member: LegendResolutionMember): boolean;
17
+ /**
18
+ * @returns {LegendDefinition[]}
19
+ */
20
+ getLegendDefs(): LegendDefinition[];
21
+ /**
22
+ * @returns {boolean}
23
+ */
24
+ hasVisibleNonChromeMember(): boolean;
25
+ getDebugState(): {
26
+ kind: string;
27
+ channel: import("../spec/channel.js").ChannelWithScale;
28
+ hostView: any;
29
+ legendDefs: {
30
+ view: import("../view/unitView.js").default<import("../spec/view.js").UnitSpec>;
31
+ scaleResolution: import("./scaleResolution.js").default;
32
+ legend: import("../spec/legend.js").LegendConfig;
33
+ channel: import("../spec/channel.js").ChannelWithScale;
34
+ field?: string;
35
+ type: LegendType;
36
+ symbolChannels?: Partial<Record<import("../spec/channel.js").ChannelWithScale, string>>;
37
+ symbolGeometry?: "point" | "stroke";
38
+ format?: string;
39
+ dataType: import("../spec/channel.js").Type;
40
+ }[];
41
+ hasVisibleNonChromeMember: boolean;
42
+ members: {
43
+ view: import("../view/unitView.js").default<import("../spec/view.js").UnitSpec>;
44
+ channel: import("../spec/channel.js").ChannelWithScale;
45
+ }[];
46
+ viewLevelLegendConfig: {
47
+ view: import("../view/view.js").default<import("../spec/view.js").ViewSpec>;
48
+ config: import("../spec/legend.js").Legend;
49
+ };
50
+ };
51
+ /**
52
+ * @param {import("../view/view.js").default} view
53
+ * @param {import("../spec/legend.js").Legend} config
54
+ */
55
+ attachViewLevelLegendConfig(view: import("../view/view.js").default, config: import("../spec/legend.js").Legend): void;
56
+ /**
57
+ * @param {import("../view/view.js").default} view
58
+ */
59
+ clearViewLevelLegendConfig(view: import("../view/view.js").default): void;
60
+ getViewLevelLegendConfig(): {
61
+ view: import("../view/view.js").default;
62
+ config: import("../spec/legend.js").Legend;
63
+ };
64
+ #private;
65
+ }
66
+ export type LegendType = "symbol" | "gradient";
67
+ export type LegendResolutionMember = {
68
+ view: import("../view/unitView.js").default;
69
+ channel: import("../spec/channel.js").ChannelWithScale;
70
+ };
71
+ export type LegendDefinition = {
72
+ view: import("../view/unitView.js").default;
73
+ channel: import("../spec/channel.js").ChannelWithScale;
74
+ field?: string;
75
+ type: LegendType;
76
+ symbolChannels?: Partial<Record<import("../spec/channel.js").ChannelWithScale, string>>;
77
+ symbolGeometry?: "point" | "stroke";
78
+ legend: import("../spec/legend.js").LegendConfig;
79
+ format?: string;
80
+ dataType: import("../spec/channel.js").Type;
81
+ scaleResolution: import("./scaleResolution.js").default;
82
+ };
83
+ //# sourceMappingURL=legendResolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legendResolution.d.ts","sourceRoot":"","sources":["../../../src/scales/legendResolution.js"],"names":[],"mappings":"AA2CA;IAOI;;OAEG;IACH,qBAFW,OAAO,oBAAoB,EAAE,gBAAgB,EAIvD;IADG,uDAAsB;IAG1B;;;OAGG;IACH,uBAHW,sBAAsB,GACpB,MAAM,OAAO,CAMzB;IAED;;;OAGG;IACH,qBAHW,sBAAsB,GACpB,OAAO,CAInB;IAED;;OAEG;IACH,iBAFa,gBAAgB,EAAE,CAoB9B;IAgGD;;OAEG;IACH,6BAFa,OAAO,CAanB;IAED;;;;;;;;qBA7LY,OAAO,oBAAoB,EAAE,gBAAgB;oBAC9C,MAAM;kBACR,UAAU;6BACC,OAAO,CAAC,MAAM,CAAC,OAAO,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;6BACtE,OAAO,GAAG,QAAQ;qBAE1B,MAAM;sBACL,OAAO,oBAAoB,EAAE,IAAI;;;;;;;;;;;MAmN7C;IAED;;;OAGG;IACH,kCAHW,OAAO,iBAAiB,EAAE,OAAO,UACjC,OAAO,mBAAmB,EAAE,MAAM,QAqB5C;IAED;;OAEG;IACH,iCAFW,OAAO,iBAAiB,EAAE,OAAO,QAM3C;IAED;cAlOmB,OAAO,iBAAiB,EAAE,OAAO;gBAAU,OAAO,mBAAmB,EAAE,MAAM;MAoO/F;;CAYJ;yBAnRY,QAAQ,GAAG,UAAU;;UAExB,OAAO,qBAAqB,EAAE,OAAO;aACrC,OAAO,oBAAoB,EAAE,gBAAgB;;+BAE1C;IACN,IAAI,EAAE,OAAO,qBAAqB,EAAE,OAAO,CAAC;IAC5C,OAAO,EAAE,OAAO,oBAAoB,EAAE,gBAAgB,CAAC;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,UAAU,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;IACxF,cAAc,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IACpC,MAAM,EAAE,OAAO,mBAAmB,EAAE,YAAY,CAAC;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,oBAAoB,EAAE,IAAI,CAAC;IAC5C,eAAe,EAAE,OAAO,sBAAsB,EAAE,OAAO,CAAA;CAC1D"}