@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
@@ -39,13 +39,11 @@ export const VISIT_STOP: "VISIT_STOP";
39
39
  * @callback InteractionListener
40
40
  * @param {import("../utils/interaction.js").default} event
41
41
  */
42
+ /** @typedef {import("../types/viewContext.js").ViewOptions} ViewOptions */
42
43
  /**
43
- * @typedef {object} ViewOptions
44
- * @prop {boolean} [blockEncodingInheritance]
45
- * Don't inherit encodings from parent. Default: false.
46
- * @prop {"own" | "inherit"} [layoutSizeParams]
47
- * Whether the view should introduce local layout-driven width/height params.
48
- * Default: "own".
44
+ * @typedef {object} ParentGridChromePolicy
45
+ * @prop {boolean} axes
46
+ * @prop {boolean} background
49
47
  */
50
48
  /**
51
49
  * @template {import("../spec/view.js").ViewSpec} [TSpec=import("../spec/view.js").ViewSpec]
@@ -89,17 +87,16 @@ export default class View<TSpec extends import("../spec/view.js").ViewSpec = imp
89
87
  * @type {Partial<Record<import("../spec/channel.js").PrimaryPositionalChannel, import("../scales/axisResolution.js").default>>}
90
88
  */
91
89
  axis: Partial<Record<import("../spec/channel.js").PrimaryPositionalChannel, import("../scales/axisResolution.js").default>>;
92
- };
93
- options: {
94
- /**
95
- * Don't inherit encodings from parent. Default: false.
96
- */
97
- blockEncodingInheritance: boolean;
98
90
  /**
99
- * Whether the view should introduce local layout-driven width/height params.
100
- * Default: "own".
91
+ * Channel-specific legend resolutions.
92
+ * @type {Partial<Record<import("../spec/channel.js").ChannelWithScale, import("../scales/legendResolution.js").default>>}
101
93
  */
94
+ legend: Partial<Record<import("../spec/channel.js").ChannelWithScale, import("../scales/legendResolution.js").default>>;
95
+ };
96
+ options: {
97
+ inheritEncoding: boolean;
102
98
  layoutSizeParams: string;
99
+ axisLabelClipPolicy?: Partial<Record<import("../spec/channel.js").PrimaryPositionalChannel, import("./axisView.js").AxisLabelClipPolicy>>;
103
100
  };
104
101
  /**
105
102
  * @type {import("../data/flowHandle.js").FlowHandle | undefined}
@@ -336,6 +333,12 @@ export default class View<TSpec extends import("../spec/view.js").ViewSpec = imp
336
333
  * @return {WebGLTexture}
337
334
  */
338
335
  getSampleFacetTexture(): WebGLTexture;
336
+ /**
337
+ * Controls which decorations the parent GridView draws around this view.
338
+ *
339
+ * @returns {ParentGridChromePolicy}
340
+ */
341
+ getParentGridChromePolicy(): ParentGridChromePolicy;
339
342
  /**
340
343
  * @param {import("../spec/channel.js").ChannelWithScale} channel
341
344
  */
@@ -344,6 +347,10 @@ export default class View<TSpec extends import("../spec/view.js").ViewSpec = imp
344
347
  * @param {import("../spec/channel.js").PositionalChannel} channel
345
348
  */
346
349
  getAxisResolution(channel: import("../spec/channel.js").PositionalChannel): import("../scales/axisResolution.js").default;
350
+ /**
351
+ * @param {import("../spec/channel.js").ChannelWithScale} channel
352
+ */
353
+ getLegendResolution(channel: import("../spec/channel.js").ChannelWithScale): import("../scales/legendResolution.js").default;
347
354
  /**
348
355
  * @param {import("../spec/channel.js").Channel | "default"} channel
349
356
  * @param {import("../spec/view.js").ResolutionTarget} resolutionType
@@ -431,16 +438,10 @@ export type BroadcastMessage = {
431
438
  * same view.
432
439
  */
433
440
  export type InteractionListener = (event: import("../utils/interaction.js").default) => any;
434
- export type ViewOptions = {
435
- /**
436
- * Don't inherit encodings from parent. Default: false.
437
- */
438
- blockEncodingInheritance?: boolean;
439
- /**
440
- * Whether the view should introduce local layout-driven width/height params.
441
- * Default: "own".
442
- */
443
- layoutSizeParams?: "own" | "inherit";
441
+ export type ViewOptions = import("../types/viewContext.js").ViewOptions;
442
+ export type ParentGridChromePolicy = {
443
+ axes: boolean;
444
+ background: boolean;
444
445
  };
445
446
  import ViewParamRuntime from "../paramRuntime/viewParamRuntime.js";
446
447
  import Padding from "./layout/padding.js";
@@ -1 +1 @@
1
- {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/view/view.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/view/view.js"],"names":[],"mappings":"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"}
@@ -21,6 +21,11 @@ import { isExprRef } from "../paramRuntime/paramUtils.js";
21
21
  import { InternMap } from "internmap";
22
22
  import { endWithSlash } from "../utils/addBaseUrl.js";
23
23
  import { mergeConfigScopes } from "../config/mergeConfig.js";
24
+ import {
25
+ clipCoords,
26
+ normalizeClipOptions,
27
+ } from "./renderingContext/clipOptions.js";
28
+ import { isInChromeSubtree } from "./viewChrome.js";
24
29
 
25
30
  // TODO: View classes have too many responsibilities. Come up with a way
26
31
  // to separate the concerns. However, most concerns are tightly tied to
@@ -74,14 +79,14 @@ const defaultOpacityFunction = (parentOpacity) => parentOpacity;
74
79
  * @param {import("../utils/interaction.js").default} event
75
80
  */
76
81
 
82
+ /** @typedef {import("../types/viewContext.js").ViewOptions} ViewOptions */
83
+
77
84
  /**
78
- * @typedef {object} ViewOptions
79
- * @prop {boolean} [blockEncodingInheritance]
80
- * Don't inherit encodings from parent. Default: false.
81
- * @prop {"own" | "inherit"} [layoutSizeParams]
82
- * Whether the view should introduce local layout-driven width/height params.
83
- * Default: "own".
85
+ * @typedef {object} ParentGridChromePolicy
86
+ * @prop {boolean} axes
87
+ * @prop {boolean} background
84
88
  */
89
+
85
90
  /**
86
91
  * @template {import("../spec/view.js").ViewSpec} [TSpec=import("../spec/view.js").ViewSpec]
87
92
  */
@@ -185,12 +190,17 @@ export default class View {
185
190
  * @type {Partial<Record<import("../spec/channel.js").PrimaryPositionalChannel, import("../scales/axisResolution.js").default>>}
186
191
  */
187
192
  axis: {},
193
+ /**
194
+ * Channel-specific legend resolutions.
195
+ * @type {Partial<Record<import("../spec/channel.js").ChannelWithScale, import("../scales/legendResolution.js").default>>}
196
+ */
197
+ legend: {},
188
198
  };
189
199
 
190
200
  initPropertyCache(this);
191
201
 
192
202
  this.options = {
193
- blockEncodingInheritance: false,
203
+ inheritEncoding: false,
194
204
  layoutSizeParams: "own",
195
205
  ...options,
196
206
  };
@@ -235,7 +245,8 @@ export default class View {
235
245
  #createLayoutSizeSetter(name) {
236
246
  if (
237
247
  this.paramRuntime.hasLocalParam(name) ||
238
- this.paramRuntime.hasConfiguredParamInScopeChain(name)
248
+ (this.options.layoutSizeParams != "force" &&
249
+ this.paramRuntime.hasConfiguredParamInScopeChain(name))
239
250
  ) {
240
251
  return undefined;
241
252
  }
@@ -383,7 +394,7 @@ export default class View {
383
394
  * @return {import("./layout/flexLayout.js").SizeDef}
384
395
  */
385
396
  #getDimensionSize(dimension) {
386
- let value = this.spec[dimension];
397
+ const { value, implicit } = this.#getDimensionValue(dimension);
387
398
  const needsStepInvalidation = isStepSize(value);
388
399
 
389
400
  const viewport =
@@ -431,6 +442,10 @@ export default class View {
431
442
  );
432
443
 
433
444
  return { px: steps * stepSize, grow: 0 };
445
+ } else if (implicit) {
446
+ // Vega-Lite treats a missing positional channel as one
447
+ // discrete step. Keep explicit step sizes strict.
448
+ return { px: stepSize, grow: 0 };
434
449
  } else {
435
450
  throw new ViewError(
436
451
  `Cannot use step-based size with "${dimension}"!`,
@@ -445,6 +460,63 @@ export default class View {
445
460
  }
446
461
  }
447
462
 
463
+ /**
464
+ * @param {"width" | "height" | "viewportWidth" | "viewportHeight"} dimension
465
+ * @returns {{ value: "container" | number | import("../spec/view.js").SizeDef | import("../spec/view.js").Step | undefined, implicit: boolean }}
466
+ */
467
+ #getDimensionValue(dimension) {
468
+ const value = this.spec[dimension];
469
+ if (value != null) {
470
+ return { value, implicit: false };
471
+ }
472
+
473
+ const viewport =
474
+ dimension == "viewportWidth" || dimension == "viewportHeight";
475
+ if (viewport) {
476
+ return { value, implicit: false };
477
+ }
478
+
479
+ return {
480
+ value: this.#getConfiguredDefaultSize(
481
+ /** @type {"width" | "height"} */ (dimension)
482
+ ),
483
+ implicit: true,
484
+ };
485
+ }
486
+
487
+ /**
488
+ * @param {"width" | "height"} dimension
489
+ * @returns {number | import("../spec/view.js").Step | undefined}
490
+ */
491
+ #getConfiguredDefaultSize(dimension) {
492
+ if (isInChromeSubtree(this)) {
493
+ return undefined;
494
+ }
495
+
496
+ const viewConfig = this.getConfig().view;
497
+ if (!viewConfig) {
498
+ return undefined;
499
+ }
500
+
501
+ const channel = dimension == "width" ? "x" : "y";
502
+ const scaleType =
503
+ this.getScaleResolution(channel)?.getResolvedScaleType();
504
+ if (scaleType && !isDiscrete(scaleType)) {
505
+ return dimension == "width"
506
+ ? viewConfig.continuousWidth
507
+ : viewConfig.continuousHeight;
508
+ } else {
509
+ return (
510
+ (dimension == "width"
511
+ ? viewConfig.discreteWidth
512
+ : viewConfig.discreteHeight) ??
513
+ (viewConfig.step !== undefined
514
+ ? { step: viewConfig.step }
515
+ : undefined)
516
+ );
517
+ }
518
+ }
519
+
448
520
  registerStepSizeInvalidation() {
449
521
  this.#registerStepSizeInvalidationFor("width", "x");
450
522
  this.#registerStepSizeInvalidationFor("height", "y");
@@ -455,13 +527,17 @@ export default class View {
455
527
  * @param {import("../spec/channel.js").PrimaryPositionalChannel} channel
456
528
  */
457
529
  #registerStepSizeInvalidationFor(dimension, channel) {
458
- const value = this.spec[dimension];
530
+ const { value, implicit } = this.#getDimensionValue(dimension);
459
531
  if (!isStepSize(value)) {
460
532
  return;
461
533
  }
462
534
 
463
535
  const resolution = this.getScaleResolution(channel);
464
536
  if (!resolution) {
537
+ if (implicit) {
538
+ return;
539
+ }
540
+
465
541
  throw new ViewError(
466
542
  "Cannot use 'step' size without a scale!",
467
543
  this
@@ -820,7 +896,7 @@ export default class View {
820
896
  }
821
897
  this.facetCoords.set(
822
898
  options.facetId,
823
- options.clipRect ? coords.intersect(options.clipRect) : coords
899
+ clipCoords(coords, normalizeClipOptions(options))
824
900
  );
825
901
 
826
902
  this.#widthSetter?.(coords.width);
@@ -838,7 +914,7 @@ export default class View {
838
914
  */
839
915
  getEncoding() {
840
916
  const pe =
841
- this.dataParent && !this.options.blockEncodingInheritance
917
+ this.dataParent && this.options.inheritEncoding
842
918
  ? this.dataParent.getEncoding()
843
919
  : {};
844
920
  const te = this.spec.encoding || {};
@@ -880,6 +956,8 @@ export default class View {
880
956
  const sampleFieldDef = this.getEncoding().sample;
881
957
  if (isFieldDef(sampleFieldDef)) {
882
958
  return [sampleFieldDef.field];
959
+ } else if (!this.options.inheritEncoding) {
960
+ return [];
883
961
  } else {
884
962
  return this.layoutParent?.getFacetFields(this);
885
963
  }
@@ -905,6 +983,18 @@ export default class View {
905
983
  return undefined;
906
984
  }
907
985
 
986
+ /**
987
+ * Controls which decorations the parent GridView draws around this view.
988
+ *
989
+ * @returns {ParentGridChromePolicy}
990
+ */
991
+ getParentGridChromePolicy() {
992
+ return {
993
+ axes: true,
994
+ background: true,
995
+ };
996
+ }
997
+
908
998
  /**
909
999
  * @param {import("../spec/channel.js").ChannelWithScale} channel
910
1000
  */
@@ -933,6 +1023,20 @@ export default class View {
933
1023
  .find((resolution) => resolution);
934
1024
  }
935
1025
 
1026
+ /**
1027
+ * @param {import("../spec/channel.js").ChannelWithScale} channel
1028
+ */
1029
+ getLegendResolution(channel) {
1030
+ const primaryChannel =
1031
+ /** @type {import("../spec/channel.js").ChannelWithScale} */ (
1032
+ getPrimaryChannel(channel)
1033
+ );
1034
+
1035
+ return this.getDataAncestors()
1036
+ .map((view) => view.resolutions.legend[primaryChannel])
1037
+ .find((resolution) => resolution);
1038
+ }
1039
+
936
1040
  /**
937
1041
  * @param {import("../spec/channel.js").Channel | "default"} channel
938
1042
  * @param {import("../spec/view.js").ResolutionTarget} resolutionType
@@ -948,11 +1052,17 @@ export default class View {
948
1052
  * @returns {import("../spec/view.js").ResolutionBehavior}
949
1053
  */
950
1054
  getConfiguredOrDefaultResolution(channel, resolutionType) {
951
- return (
1055
+ const configuredResolution =
952
1056
  this.getConfiguredResolution(channel, resolutionType) ??
953
- this.getConfiguredResolution("default", resolutionType) ??
954
- this.getDefaultResolution(channel, resolutionType)
955
- );
1057
+ this.getConfiguredResolution("default", resolutionType);
1058
+
1059
+ if (configuredResolution) {
1060
+ return configuredResolution;
1061
+ } else if (resolutionType == "legend") {
1062
+ return this.getConfiguredOrDefaultResolution(channel, "scale");
1063
+ } else {
1064
+ return this.getDefaultResolution(channel, resolutionType);
1065
+ }
956
1066
  }
957
1067
 
958
1068
  /**
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @param {import("./view.js").default} view
3
+ * @param {ChromeOverride} behavior
4
+ */
5
+ export function setChromeOverride(view: import("./view.js").default, behavior: ChromeOverride): void;
6
+ /**
7
+ * @param {import("./view.js").default} view
8
+ * @returns {ChromeOverride | undefined}
9
+ */
10
+ export function getChromeOverride(view: import("./view.js").default): ChromeOverride | undefined;
11
+ /**
12
+ * Returns whether a view itself has been marked as decorative chrome.
13
+ *
14
+ * @param {import("./view.js").default} view
15
+ * @returns {boolean}
16
+ */
17
+ export function isChromeView(view: import("./view.js").default): boolean;
18
+ /**
19
+ * Returns whether a view is inside a chrome subtree in the layout hierarchy.
20
+ *
21
+ * @param {import("./view.js").default} view
22
+ * @returns {boolean}
23
+ */
24
+ export function isInChromeSubtree(view: import("./view.js").default): boolean;
25
+ /**
26
+ * Tracks views that are decorative chrome instead of user-authored plot views.
27
+ *
28
+ * Chrome views may still need inherited data, scales, or parameters, but they
29
+ * should not participate in plot-oriented defaults such as configured
30
+ * continuous view sizes.
31
+ */
32
+ export type ChromeOverride = "exclude" | "excludeSubtree";
33
+ //# sourceMappingURL=viewChrome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewChrome.d.ts","sourceRoot":"","sources":["../../../src/view/viewChrome.js"],"names":[],"mappings":"AAaA;;;GAGG;AACH,wCAHW,OAAO,WAAW,EAAE,OAAO,YAC3B,cAAc,QAIxB;AAED;;;GAGG;AACH,wCAHW,OAAO,WAAW,EAAE,OAAO,GACzB,cAAc,GAAG,SAAS,CAItC;AAED;;;;;GAKG;AACH,mCAHW,OAAO,WAAW,EAAE,OAAO,GACzB,OAAO,CAInB;AAED;;;;;GAKG;AACH,wCAHW,OAAO,WAAW,EAAE,OAAO,GACzB,OAAO,CAoBnB;;;;;;;;6BAxDY,SAAS,GAAG,gBAAgB"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Tracks views that are decorative chrome instead of user-authored plot views.
3
+ *
4
+ * Chrome views may still need inherited data, scales, or parameters, but they
5
+ * should not participate in plot-oriented defaults such as configured
6
+ * continuous view sizes.
7
+ *
8
+ * @typedef {"exclude" | "excludeSubtree"} ChromeOverride
9
+ */
10
+
11
+ /** @type {WeakMap<import("./view.js").default, ChromeOverride>} */
12
+ const chromeOverrides = new WeakMap();
13
+
14
+ /**
15
+ * @param {import("./view.js").default} view
16
+ * @param {ChromeOverride} behavior
17
+ */
18
+ export function setChromeOverride(view, behavior) {
19
+ chromeOverrides.set(view, behavior);
20
+ }
21
+
22
+ /**
23
+ * @param {import("./view.js").default} view
24
+ * @returns {ChromeOverride | undefined}
25
+ */
26
+ export function getChromeOverride(view) {
27
+ return chromeOverrides.get(view);
28
+ }
29
+
30
+ /**
31
+ * Returns whether a view itself has been marked as decorative chrome.
32
+ *
33
+ * @param {import("./view.js").default} view
34
+ * @returns {boolean}
35
+ */
36
+ export function isChromeView(view) {
37
+ return chromeOverrides.has(view);
38
+ }
39
+
40
+ /**
41
+ * Returns whether a view is inside a chrome subtree in the layout hierarchy.
42
+ *
43
+ * @param {import("./view.js").default} view
44
+ * @returns {boolean}
45
+ */
46
+ export function isInChromeSubtree(view) {
47
+ /** @type {import("./view.js").default | null} */
48
+ let current = view;
49
+
50
+ while (current) {
51
+ const behavior = chromeOverrides.get(current);
52
+ if (behavior === "excludeSubtree") {
53
+ return true;
54
+ }
55
+
56
+ if (current === view && behavior === "exclude") {
57
+ return true;
58
+ }
59
+
60
+ current = current.layoutParent;
61
+ }
62
+
63
+ return false;
64
+ }
@@ -4,8 +4,7 @@ export const VIEW_ROOT_NAME: "viewRoot";
4
4
  * @property {boolean} [allowImport] allows imports from urls
5
5
  * @property {boolean} [wrapRoot]
6
6
  *
7
- * @typedef {object} CreateViewOptions
8
- * @property {"own" | "inherit"} [layoutSizeParams]
7
+ * @typedef {import("../types/viewContext.js").CreateViewOptions} CreateViewOptions
9
8
  */
10
9
  /**
11
10
  *
@@ -59,9 +58,7 @@ export type ViewFactoryOptions = {
59
58
  allowImport?: boolean;
60
59
  wrapRoot?: boolean;
61
60
  };
62
- export type CreateViewOptions = {
63
- layoutSizeParams?: "own" | "inherit";
64
- };
61
+ export type CreateViewOptions = import("../types/viewContext.js").CreateViewOptions;
65
62
  import View from "./view.js";
66
63
  export { isConcatSpec, isFacetSpec, isHConcatSpec, isImportSpec, isLayerSpec, isUnitSpec, isVConcatSpec } from "./viewSpecGuards.js";
67
64
  //# sourceMappingURL=viewFactory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"viewFactory.d.ts","sourceRoot":"","sources":["../../../src/view/viewFactory.js"],"names":[],"mappings":"AA2BA,6BAA8B,UAAU,CAAC;AAEzC;;;;;;;GAOG;AAEH;;GAEG;AACH;IAiBI;;OAEG;IACH,sBAFW,kBAAkB,EAoE5B;IAjEG,2CAA2C;IAC3C,SADW,QAAQ,CAAC,kBAAkB,CAAC,CAKtC;IA8DL;;;OAGG;IACH,qEAlFiC,OAAO,yHAC2B,OAAO,oBAAoB,EAAE,OAAO,eAAe,OAAO,WAAW,EAAE,OAAO,gBAAgB,MAAM,YAAY,iBAAiB,KAAK,IAAI,QAmF5M;IAED;;;;;;;OAOG;IACH,wHALW,OAAO,oBAAoB,EAAE,OAAO,eACpC,OAAO,WAAW,EAAE,OAAO,gBAC3B,MAAM,YACN,iBAAiB,4CA0B3B;IAED;;;;OAIG;IACH,sDAFa,IAAI,sCAAY,CAU5B;IAED;;;;;;;;;;;OAWG;IACH,yBARW,qCAAW,OAAO,iBAAiB,EAAE,UAAU,qEAE/C,OAAO,oBAAoB,EAAE,OAAO,eACpC,OAAO,WAAW,EAAE,OAAO,gBAC3B,MAAM,cACN,CAAC,IAAI,oCAAU,KAAK,IAAI,YACxB,iBAAiB,qDAqG3B;;CACJ;;;;;kBA3Qa,OAAO;eACP,OAAO;;;uBAGP,KAAK,GAAG,SAAS;;iBAlCd,WAAW"}
1
+ {"version":3,"file":"viewFactory.d.ts","sourceRoot":"","sources":["../../../src/view/viewFactory.js"],"names":[],"mappings":"AA2BA,6BAA8B,UAAU,CAAC;AAEzC;;;;;;GAMG;AAEH;;GAEG;AACH;IAiBI;;OAEG;IACH,sBAFW,kBAAkB,EAoE5B;IAjEG,2CAA2C;IAC3C,SADW,QAAQ,CAAC,kBAAkB,CAAC,CAKtC;IA8DL;;;OAGG;IACH,qEAlFiC,OAAO,yHAC2B,OAAO,oBAAoB,EAAE,OAAO,eAAe,OAAO,WAAW,EAAE,OAAO,gBAAgB,MAAM,YAAY,iBAAiB,KAAK,IAAI,QAmF5M;IAED;;;;;;;OAOG;IACH,wHALW,OAAO,oBAAoB,EAAE,OAAO,eACpC,OAAO,WAAW,EAAE,OAAO,gBAC3B,MAAM,YACN,iBAAiB,4CA0B3B;IAED;;;;OAIG;IACH,sDAFa,IAAI,sCAAY,CAU5B;IAED;;;;;;;;;;;OAWG;IACH,yBARW,qCAAW,OAAO,iBAAiB,EAAE,UAAU,qEAE/C,OAAO,oBAAoB,EAAE,OAAO,eACpC,OAAO,WAAW,EAAE,OAAO,gBAC3B,MAAM,cACN,CAAC,IAAI,oCAAU,KAAK,IAAI,YACxB,iBAAiB,qDAqG3B;;CACJ;;;;;kBA1Qa,OAAO;eACP,OAAO;;gCAER,OAAO,yBAAyB,EAAE,iBAAiB;iBAjC/C,WAAW"}
@@ -32,8 +32,7 @@ export const VIEW_ROOT_NAME = "viewRoot";
32
32
  * @property {boolean} [allowImport] allows imports from urls
33
33
  * @property {boolean} [wrapRoot]
34
34
  *
35
- * @typedef {object} CreateViewOptions
36
- * @property {"own" | "inherit"} [layoutSizeParams]
35
+ * @typedef {import("../types/viewContext.js").CreateViewOptions} CreateViewOptions
37
36
  */
38
37
 
39
38
  /**
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Returns the shared runtime identity registry for a view hierarchy.
3
+ *
4
+ * The registry is keyed by the root view instead of being global because view
5
+ * ids are only meaningful inside one embedded GenomeSpy runtime. This keeps
6
+ * independent embeds isolated while still allowing optional tools, such as the
7
+ * inspector and the public view API, to agree on ids for the same live views.
8
+ *
9
+ * The WeakMap avoids adding debug-only fields to View instances and lets the
10
+ * registry disappear when the root hierarchy is released.
11
+ *
12
+ * @param {View} root
13
+ * @returns {ViewIdentityRegistry}
14
+ */
15
+ export function getViewIdentityRegistry(root: View): ViewIdentityRegistry;
16
+ /**
17
+ * Allocates runtime-stable ids for View object identities.
18
+ *
19
+ * Ids are intentionally synthetic. They are stable for the lifetime of the
20
+ * root view hierarchy, but they are not persisted and must not be used as
21
+ * bookmarks across reloads.
22
+ */
23
+ export class ViewIdentityRegistry {
24
+ /**
25
+ * @param {View} view
26
+ * @returns {string}
27
+ */
28
+ getId(view: View): string;
29
+ /**
30
+ * @param {string} id
31
+ * @returns {View | undefined}
32
+ */
33
+ getView(id: string): View | undefined;
34
+ #private;
35
+ }
36
+ export type View = import("./view.js").default;
37
+ //# sourceMappingURL=viewIdentityRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewIdentityRegistry.d.ts","sourceRoot":"","sources":["../../../src/view/viewIdentityRegistry.js"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;GAaG;AACH,8CAHW,IAAI,GACF,oBAAoB,CAUhC;AAED;;;;;;GAMG;AACH;IASI;;;OAGG;IACH,YAHW,IAAI,GACF,MAAM,CAYlB;IAED;;;OAGG;IACH,YAHW,MAAM,GACJ,IAAI,GAAG,SAAS,CAI5B;;CACJ;mBArEY,OAAO,WAAW,EAAE,OAAO"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * @typedef {import("./view.js").default} View
3
+ */
4
+
5
+ /** @type {WeakMap<View, ViewIdentityRegistry>} */
6
+ const registriesByRoot = new WeakMap();
7
+
8
+ /**
9
+ * Returns the shared runtime identity registry for a view hierarchy.
10
+ *
11
+ * The registry is keyed by the root view instead of being global because view
12
+ * ids are only meaningful inside one embedded GenomeSpy runtime. This keeps
13
+ * independent embeds isolated while still allowing optional tools, such as the
14
+ * inspector and the public view API, to agree on ids for the same live views.
15
+ *
16
+ * The WeakMap avoids adding debug-only fields to View instances and lets the
17
+ * registry disappear when the root hierarchy is released.
18
+ *
19
+ * @param {View} root
20
+ * @returns {ViewIdentityRegistry}
21
+ */
22
+ export function getViewIdentityRegistry(root) {
23
+ let registry = registriesByRoot.get(root);
24
+ if (!registry) {
25
+ registry = new ViewIdentityRegistry();
26
+ registriesByRoot.set(root, registry);
27
+ }
28
+
29
+ return registry;
30
+ }
31
+
32
+ /**
33
+ * Allocates runtime-stable ids for View object identities.
34
+ *
35
+ * Ids are intentionally synthetic. They are stable for the lifetime of the
36
+ * root view hierarchy, but they are not persisted and must not be used as
37
+ * bookmarks across reloads.
38
+ */
39
+ export class ViewIdentityRegistry {
40
+ /** @type {WeakMap<View, string>} */
41
+ #idsByView = new WeakMap();
42
+
43
+ /** @type {Map<string, View>} */
44
+ #viewsById = new Map();
45
+
46
+ #nextId = 0;
47
+
48
+ /**
49
+ * @param {View} view
50
+ * @returns {string}
51
+ */
52
+ getId(view) {
53
+ let id = this.#idsByView.get(view);
54
+ if (!id) {
55
+ id = "view-" + String(this.#nextId);
56
+ this.#nextId++;
57
+ this.#idsByView.set(view, id);
58
+ this.#viewsById.set(id, view);
59
+ }
60
+
61
+ return id;
62
+ }
63
+
64
+ /**
65
+ * @param {string} id
66
+ * @returns {View | undefined}
67
+ */
68
+ getView(id) {
69
+ return this.#viewsById.get(id);
70
+ }
71
+ }