@genome-spy/core 0.77.0 → 0.79.0

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 (317) 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-CRMf_I9V.js → esm-CTUHLDbv.js} +30 -30
  6. package/dist/bundle/esm-Cx-EbkOj.js +1221 -0
  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 +14102 -10810
  11. package/dist/bundle/index.js +109 -95
  12. package/dist/bundle/{parquetRead-DG_-F5j5.js → parquetRead-Cad1SOVV.js} +473 -399
  13. package/dist/schema.json +23788 -11049
  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 +217 -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 +8 -0
  131. package/dist/src/genomeSpy/interactionController.d.ts +4 -1
  132. package/dist/src/genomeSpy/interactionController.d.ts.map +1 -1
  133. package/dist/src/genomeSpy/interactionController.js +57 -13
  134. package/dist/src/genomeSpy/renderCoordinator.d.ts.map +1 -1
  135. package/dist/src/genomeSpy/renderCoordinator.js +25 -3
  136. package/dist/src/genomeSpy/viewDataInit.d.ts +14 -0
  137. package/dist/src/genomeSpy/viewDataInit.d.ts.map +1 -1
  138. package/dist/src/genomeSpy/viewDataInit.js +45 -8
  139. package/dist/src/genomeSpyBase.d.ts +6 -0
  140. package/dist/src/genomeSpyBase.d.ts.map +1 -1
  141. package/dist/src/genomeSpyBase.js +25 -4
  142. package/dist/src/gl/glslScaleGenerator.d.ts +17 -0
  143. package/dist/src/gl/glslScaleGenerator.d.ts.map +1 -1
  144. package/dist/src/gl/glslScaleGenerator.js +39 -2
  145. package/dist/src/gl/includes/common.glsl.js +1 -1
  146. package/dist/src/gl/vertexRangeIndex.d.ts.map +1 -1
  147. package/dist/src/gl/vertexRangeIndex.js +4 -2
  148. package/dist/src/gl/webGLHelper.d.ts +1 -1
  149. package/dist/src/gl/webGLHelper.d.ts.map +1 -1
  150. package/dist/src/gl/webGLHelper.js +13 -8
  151. package/dist/src/marks/__snapshots__/shaderSnapshot.test.js.snap +140 -3
  152. package/dist/src/marks/mark.d.ts +47 -4
  153. package/dist/src/marks/mark.d.ts.map +1 -1
  154. package/dist/src/marks/mark.js +158 -54
  155. package/dist/src/marks/point.d.ts.map +1 -1
  156. package/dist/src/marks/point.js +4 -0
  157. package/dist/src/marks/point.vertex.glsl.js +1 -1
  158. package/dist/src/marks/text.d.ts +1 -1
  159. package/dist/src/marks/text.d.ts.map +1 -1
  160. package/dist/src/marks/text.js +2 -7
  161. package/dist/src/marks/text.vertex.glsl.js +1 -1
  162. package/dist/src/paramRuntime/paramUtils.d.ts +43 -9
  163. package/dist/src/paramRuntime/paramUtils.d.ts.map +1 -1
  164. package/dist/src/paramRuntime/paramUtils.js +61 -1
  165. package/dist/src/paramRuntime/viewParamRuntime.d.ts +32 -0
  166. package/dist/src/paramRuntime/viewParamRuntime.d.ts.map +1 -1
  167. package/dist/src/paramRuntime/viewParamRuntime.js +63 -0
  168. package/dist/src/scales/axisResolution.d.ts +35 -0
  169. package/dist/src/scales/axisResolution.d.ts.map +1 -1
  170. package/dist/src/scales/axisResolution.js +115 -7
  171. package/dist/src/scales/domainExpressions.d.ts +21 -0
  172. package/dist/src/scales/domainExpressions.d.ts.map +1 -0
  173. package/dist/src/scales/domainExpressions.js +43 -0
  174. package/dist/src/scales/domainPlanner.d.ts +12 -1
  175. package/dist/src/scales/domainPlanner.d.ts.map +1 -1
  176. package/dist/src/scales/domainPlanner.js +55 -36
  177. package/dist/src/scales/legendResolution.d.ts +83 -0
  178. package/dist/src/scales/legendResolution.d.ts.map +1 -0
  179. package/dist/src/scales/legendResolution.js +461 -0
  180. package/dist/src/scales/scaleInstanceManager.d.ts +1 -0
  181. package/dist/src/scales/scaleInstanceManager.d.ts.map +1 -1
  182. package/dist/src/scales/scaleInstanceManager.js +5 -0
  183. package/dist/src/scales/scalePropsResolver.d.ts +6 -1
  184. package/dist/src/scales/scalePropsResolver.d.ts.map +1 -1
  185. package/dist/src/scales/scalePropsResolver.js +35 -10
  186. package/dist/src/scales/scaleResolution.d.ts +52 -0
  187. package/dist/src/scales/scaleResolution.d.ts.map +1 -1
  188. package/dist/src/scales/scaleResolution.js +195 -16
  189. package/dist/src/scales/scaleRules.d.ts +10 -0
  190. package/dist/src/scales/scaleRules.d.ts.map +1 -1
  191. package/dist/src/scales/scaleRules.js +38 -1
  192. package/dist/src/scales/viewLevelGuideConfig.d.ts +53 -0
  193. package/dist/src/scales/viewLevelGuideConfig.d.ts.map +1 -0
  194. package/dist/src/scales/viewLevelGuideConfig.js +224 -0
  195. package/dist/src/scales/viewLevelScaleConfig.d.ts +45 -0
  196. package/dist/src/scales/viewLevelScaleConfig.d.ts.map +1 -0
  197. package/dist/src/scales/viewLevelScaleConfig.js +149 -0
  198. package/dist/src/spec/axis.d.ts +109 -3
  199. package/dist/src/spec/channel.d.ts +23 -4
  200. package/dist/src/spec/config.d.ts +59 -4
  201. package/dist/src/spec/data.d.ts +177 -17
  202. package/dist/src/spec/legend.d.ts +246 -0
  203. package/dist/src/spec/mark.d.ts +16 -4
  204. package/dist/src/spec/scale.d.ts +19 -6
  205. package/dist/src/spec/title.d.ts +58 -1
  206. package/dist/src/spec/transform.d.ts +149 -0
  207. package/dist/src/spec/view.d.ts +50 -6
  208. package/dist/src/styles/genome-spy.css +4 -1
  209. package/dist/src/styles/genome-spy.css.d.ts +1 -1
  210. package/dist/src/styles/genome-spy.css.d.ts.map +1 -1
  211. package/dist/src/styles/genome-spy.css.js +4 -1
  212. package/dist/src/types/embedApi.d.ts +262 -6
  213. package/dist/src/types/rendering.d.ts +19 -3
  214. package/dist/src/types/viewContext.d.ts +18 -2
  215. package/dist/src/utils/arrayUtils.d.ts +11 -0
  216. package/dist/src/utils/arrayUtils.d.ts.map +1 -1
  217. package/dist/src/utils/arrayUtils.js +23 -0
  218. package/dist/src/utils/suspension.d.ts +17 -0
  219. package/dist/src/utils/suspension.d.ts.map +1 -0
  220. package/dist/src/utils/suspension.js +41 -0
  221. package/dist/src/utils/ui/tooltip.d.ts +4 -0
  222. package/dist/src/utils/ui/tooltip.d.ts.map +1 -1
  223. package/dist/src/utils/ui/tooltip.js +35 -10
  224. package/dist/src/view/axisGridView.d.ts.map +1 -1
  225. package/dist/src/view/axisGridView.js +1 -4
  226. package/dist/src/view/axisView.d.ts +18 -2
  227. package/dist/src/view/axisView.d.ts.map +1 -1
  228. package/dist/src/view/axisView.js +180 -75
  229. package/dist/src/view/concatView.d.ts +10 -2
  230. package/dist/src/view/concatView.d.ts.map +1 -1
  231. package/dist/src/view/concatView.js +46 -9
  232. package/dist/src/view/containerMutationHelper.d.ts +20 -1
  233. package/dist/src/view/containerMutationHelper.d.ts.map +1 -1
  234. package/dist/src/view/containerMutationHelper.js +203 -32
  235. package/dist/src/view/facetView.d.ts +1 -1
  236. package/dist/src/view/gridView/gridChild.d.ts +54 -4
  237. package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
  238. package/dist/src/view/gridView/gridChild.js +301 -120
  239. package/dist/src/view/gridView/gridChildLegends.d.ts +57 -0
  240. package/dist/src/view/gridView/gridChildLegends.d.ts.map +1 -0
  241. package/dist/src/view/gridView/gridChildLegends.js +503 -0
  242. package/dist/src/view/gridView/gridView.d.ts +25 -0
  243. package/dist/src/view/gridView/gridView.d.ts.map +1 -1
  244. package/dist/src/view/gridView/gridView.js +454 -78
  245. package/dist/src/view/gridView/legendLayout.d.ts +26 -0
  246. package/dist/src/view/gridView/legendLayout.d.ts.map +1 -0
  247. package/dist/src/view/gridView/legendLayout.js +111 -0
  248. package/dist/src/view/gridView/scrollbar.d.ts.map +1 -1
  249. package/dist/src/view/gridView/scrollbar.js +1 -4
  250. package/dist/src/view/gridView/selectionRect.d.ts.map +1 -1
  251. package/dist/src/view/gridView/selectionRect.js +1 -4
  252. package/dist/src/view/gridView/separatorView.d.ts.map +1 -1
  253. package/dist/src/view/gridView/separatorView.js +1 -4
  254. package/dist/src/view/layerView.d.ts +9 -2
  255. package/dist/src/view/layerView.d.ts.map +1 -1
  256. package/dist/src/view/layerView.js +18 -1
  257. package/dist/src/view/layout/flexLayout.d.ts +20 -4
  258. package/dist/src/view/layout/flexLayout.d.ts.map +1 -1
  259. package/dist/src/view/layout/flexLayout.js +331 -31
  260. package/dist/src/view/layout/rectangle.d.ts +14 -0
  261. package/dist/src/view/layout/rectangle.d.ts.map +1 -1
  262. package/dist/src/view/layout/rectangle.js +40 -0
  263. package/dist/src/view/legend/legendEntries.d.ts +20 -0
  264. package/dist/src/view/legend/legendEntries.d.ts.map +1 -0
  265. package/dist/src/view/legend/legendEntries.js +21 -0
  266. package/dist/src/view/legendView.d.ts +134 -0
  267. package/dist/src/view/legendView.d.ts.map +1 -0
  268. package/dist/src/view/legendView.js +1611 -0
  269. package/dist/src/view/renderingContext/bufferedViewRenderingContext.d.ts.map +1 -1
  270. package/dist/src/view/renderingContext/bufferedViewRenderingContext.js +26 -4
  271. package/dist/src/view/renderingContext/clipOptions.d.ts +44 -0
  272. package/dist/src/view/renderingContext/clipOptions.d.ts.map +1 -0
  273. package/dist/src/view/renderingContext/clipOptions.js +140 -0
  274. package/dist/src/view/renderingContext/simpleViewRenderingContext.d.ts.map +1 -1
  275. package/dist/src/view/renderingContext/simpleViewRenderingContext.js +12 -1
  276. package/dist/src/view/resolutionPlanner.d.ts +2 -1
  277. package/dist/src/view/resolutionPlanner.d.ts.map +1 -1
  278. package/dist/src/view/resolutionPlanner.js +89 -25
  279. package/dist/src/view/testUtils.d.ts +4 -2
  280. package/dist/src/view/testUtils.d.ts.map +1 -1
  281. package/dist/src/view/testUtils.js +29 -7
  282. package/dist/src/view/titleView.d.ts +37 -0
  283. package/dist/src/view/titleView.d.ts.map +1 -0
  284. package/dist/src/view/titleView.js +584 -0
  285. package/dist/src/view/unitView.d.ts +3 -3
  286. package/dist/src/view/unitView.d.ts.map +1 -1
  287. package/dist/src/view/unitView.js +3 -2
  288. package/dist/src/view/view.d.ts +25 -24
  289. package/dist/src/view/view.d.ts.map +1 -1
  290. package/dist/src/view/view.js +121 -16
  291. package/dist/src/view/viewFactory.d.ts +2 -5
  292. package/dist/src/view/viewFactory.d.ts.map +1 -1
  293. package/dist/src/view/viewFactory.js +1 -2
  294. package/dist/src/view/viewIdentityRegistry.d.ts +37 -0
  295. package/dist/src/view/viewIdentityRegistry.d.ts.map +1 -0
  296. package/dist/src/view/viewIdentityRegistry.js +71 -0
  297. package/dist/src/view/viewMutationAcidTestUtils.d.ts +112 -0
  298. package/dist/src/view/viewMutationAcidTestUtils.d.ts.map +1 -0
  299. package/dist/src/view/viewMutationAcidTestUtils.js +234 -0
  300. package/dist/src/view/viewMutationApi.d.ts +42 -0
  301. package/dist/src/view/viewMutationApi.d.ts.map +1 -0
  302. package/dist/src/view/viewMutationApi.js +811 -0
  303. package/dist/src/view/viewSelectors.d.ts +10 -0
  304. package/dist/src/view/viewSelectors.d.ts.map +1 -1
  305. package/dist/src/view/viewSelectors.js +23 -1
  306. package/package.json +4 -4
  307. package/dist/bundle/esm-0dYHNV_D.js +0 -121
  308. package/dist/bundle/esm-C49STiCR.js +0 -1248
  309. package/dist/bundle/esm-CscjKVDc.js +0 -1426
  310. package/dist/bundle/esm-CuMSzCHy.js +0 -298
  311. package/dist/bundle/esm-DMXpJXM4.js +0 -369
  312. package/dist/src/view/title.d.ts +0 -13
  313. package/dist/src/view/title.d.ts.map +0 -1
  314. package/dist/src/view/title.js +0 -154
  315. /package/dist/bundle/{AbortablePromiseCache-3gHJdF3E.js → AbortablePromiseCache-BTmAcN-t.js} +0 -0
  316. /package/dist/bundle/{esm-CuVa5T98.js → esm-VvpZ9hsq.js} +0 -0
  317. /package/dist/bundle/{chunk-DmhlhrBa.js → rolldown-runtime-Dy4uBu1J.js} +0 -0
@@ -1,10 +1,27 @@
1
- import {
2
- initializeViewSubtree,
3
- loadViewSubtreeData,
4
- } from "../data/flowInit.js";
5
- import { configureViewOpacity } from "../genomeSpy/viewHierarchyConfig.js";
6
1
  import { ensureAssembliesForView } from "../genome/assemblyPreflight.js";
7
- import { finalizeSubtreeGraphics } from "./viewUtils.js";
2
+ import { initializeViewDataForViews } from "../genomeSpy/viewDataInit.js";
3
+ import {
4
+ attachViewLevelScaleConfigs,
5
+ clearViewLevelScaleConfigs,
6
+ } from "../scales/viewLevelScaleConfig.js";
7
+ import {
8
+ attachViewLevelAxisConfigs,
9
+ attachViewLevelLegendConfigs,
10
+ clearViewLevelGuideConfigs,
11
+ } from "../scales/viewLevelGuideConfig.js";
12
+ import { isChromeView } from "./viewSelectors.js";
13
+
14
+ /**
15
+ * @param {unknown} value
16
+ * @returns {value is { getChildren: () => Iterable<import("./view.js").default> }}
17
+ */
18
+ function hasGridChildChildren(value) {
19
+ return (
20
+ typeof value === "object" &&
21
+ value !== null &&
22
+ typeof (/** @type {any} */ (value).getChildren) === "function"
23
+ );
24
+ }
8
25
 
9
26
  /**
10
27
  * Shared helper for dynamic container mutations.
@@ -30,6 +47,11 @@ export default class ContainerMutationHelper {
30
47
  * removeView: (index: number) => void,
31
48
  * prepareView?: (view: View, index: number, insertionResult: any) => Promise<void>,
32
49
  * afterRemove?: (index: number) => Promise<void>,
50
+ * syncMutationGuideViews?: (
51
+ * view: View | undefined,
52
+ * index: number | undefined,
53
+ * insertionResult: any
54
+ * ) => Promise<void>,
33
55
  * defaultName?: (index: number, spec: ViewSpec | ImportSpec) => string,
34
56
  * createViewOptions?: import("../types/viewContext.js").CreateViewOptions,
35
57
  * requestLayout?: boolean
@@ -53,12 +75,14 @@ export default class ContainerMutationHelper {
53
75
  * @returns {Promise<View>}
54
76
  */
55
77
  async addChildSpec(childSpec, index) {
56
- const { specs, insertAt } = this.options.getChildSpecs();
78
+ const { specs, insertAt, removeAt } = this.options.getChildSpecs();
57
79
  const insertIndex = index ?? specs.length;
58
80
  const name =
59
81
  this.options.defaultName?.(insertIndex, childSpec) ??
60
82
  this.container.getNextAutoName("child");
61
83
 
84
+ let specInserted = false;
85
+ let viewInserted = false;
62
86
  const childView = await this.container.context.createOrImportView(
63
87
  childSpec,
64
88
  this.container,
@@ -68,36 +92,68 @@ export default class ContainerMutationHelper {
68
92
  this.options.createViewOptions
69
93
  );
70
94
 
71
- // Reminder: ensure assemblies from the real child hierarchy before any
72
- // downstream work that may initialize scales (axis prep / encoders).
73
- await ensureAssembliesForView(
74
- childView,
75
- this.container.context.genomeStore
76
- );
95
+ try {
96
+ insertAt(insertIndex, childSpec);
97
+ specInserted = true;
98
+ const insertionResult = this.options.insertView(
99
+ childView,
100
+ insertIndex
101
+ );
102
+ viewInserted = true;
103
+
104
+ attachViewLevelScaleConfigs(this.container);
105
+ attachViewLevelAxisConfigs(this.container);
106
+ attachViewLevelLegendConfigs(this.container);
107
+
108
+ // Reminder: ensure assemblies from the real child hierarchy before any
109
+ // downstream work that may initialize scales (axis prep / encoders).
110
+ await ensureAssembliesForView(
111
+ childView,
112
+ this.container.context.genomeStore
113
+ );
77
114
 
78
- insertAt(insertIndex, childSpec);
79
- const insertionResult = this.options.insertView(childView, insertIndex);
115
+ if (this.options.prepareView) {
116
+ await this.options.prepareView(
117
+ childView,
118
+ insertIndex,
119
+ insertionResult
120
+ );
121
+ }
80
122
 
81
- if (this.options.prepareView) {
82
- await this.options.prepareView(
123
+ // Guide views are container-specific. Sync them after configs and
124
+ // assemblies are ready so generated guide marks can initialize.
125
+ if (this.options.syncMutationGuideViews) {
126
+ await this.options.syncMutationGuideViews(
127
+ childView,
128
+ insertIndex,
129
+ insertionResult
130
+ );
131
+ }
132
+
133
+ const viewsToInitialize = collectMutationInitializedViews(
134
+ this.container,
83
135
  childView,
84
- insertIndex,
85
136
  insertionResult
86
137
  );
87
- }
138
+ for (const view of viewsToInitialize) {
139
+ view.configureViewOpacity();
140
+ }
88
141
 
89
- configureViewOpacity(childView);
142
+ await initializeViewDataForViews(
143
+ this.container,
144
+ this.container.context.dataFlow,
145
+ this.container.context.fontManager,
146
+ viewsToInitialize
147
+ );
148
+ } catch (error) {
149
+ if (viewInserted) {
150
+ await this.#rollbackInsertedChild(insertIndex, error);
151
+ } else if (specInserted) {
152
+ removeAt(insertIndex);
153
+ }
90
154
 
91
- const visibilityPredicate = (
92
- /** @type {import("./view.js").default} */ view
93
- ) => view.isConfiguredVisible();
94
- const { dataSources, graphicsPromises } = initializeViewSubtree(
95
- childView,
96
- this.container.context.dataFlow,
97
- visibilityPredicate
98
- );
99
- await loadViewSubtreeData(childView, dataSources);
100
- await finalizeSubtreeGraphics(graphicsPromises);
155
+ throw error;
156
+ }
101
157
 
102
158
  if (this.options.requestLayout !== false) {
103
159
  this.container.invalidateSizeCache();
@@ -107,23 +163,138 @@ export default class ContainerMutationHelper {
107
163
  return childView;
108
164
  }
109
165
 
166
+ /**
167
+ * @param {number} index
168
+ * @param {unknown} originalError
169
+ */
170
+ async #rollbackInsertedChild(index, originalError) {
171
+ try {
172
+ await this.removeChildAt(index, { requestLayout: false });
173
+ } catch (rollbackError) {
174
+ /** @type {any} */ (originalError).rollbackError = rollbackError;
175
+ }
176
+ }
177
+
110
178
  /**
111
179
  * Removes a child by index and updates the backing spec list.
112
180
  *
113
181
  * @param {number} index
182
+ * @param {{ requestLayout?: boolean }} [options]
114
183
  */
115
- async removeChildAt(index) {
184
+ async removeChildAt(index, options = {}) {
116
185
  const { removeAt } = this.options.getChildSpecs();
186
+ clearViewLevelScaleConfigs(this.container);
187
+ clearViewLevelGuideConfigs(this.container);
117
188
  this.options.removeView(index);
118
189
  removeAt(index);
119
190
 
120
191
  if (this.options.afterRemove) {
121
192
  await this.options.afterRemove(index);
122
193
  }
194
+ attachViewLevelScaleConfigs(this.container);
195
+ attachViewLevelAxisConfigs(this.container);
196
+ attachViewLevelLegendConfigs(this.container);
123
197
 
124
- if (this.options.requestLayout !== false) {
198
+ // Removed children may change shared guide ownership and visibility.
199
+ if (this.options.syncMutationGuideViews) {
200
+ await this.options.syncMutationGuideViews(
201
+ undefined,
202
+ undefined,
203
+ undefined
204
+ );
205
+ }
206
+
207
+ await this.initializeUninitializedChromeViews();
208
+
209
+ if (
210
+ this.options.requestLayout !== false &&
211
+ options.requestLayout !== false
212
+ ) {
125
213
  this.container.invalidateSizeCache();
126
214
  this.container.context.requestLayoutReflow();
127
215
  }
128
216
  }
217
+
218
+ /**
219
+ * Initializes generated guide/chrome views created by a dynamic mutation.
220
+ *
221
+ * Reorder operations can recreate shared axes or legends without touching
222
+ * normal child dataflow. This keeps those regenerated chrome views renderable
223
+ * without reloading or rebuilding existing track data.
224
+ */
225
+ async initializeUninitializedChromeViews() {
226
+ if (this.container.getDataInitializationState() === "none") {
227
+ return;
228
+ }
229
+
230
+ const viewsToInitialize = collectUninitializedChromeViews(
231
+ this.container
232
+ );
233
+ for (const view of viewsToInitialize) {
234
+ view.configureViewOpacity();
235
+ }
236
+
237
+ await initializeViewDataForViews(
238
+ this.container,
239
+ this.container.context.dataFlow,
240
+ this.container.context.fontManager,
241
+ viewsToInitialize
242
+ );
243
+ }
244
+ }
245
+
246
+ /**
247
+ * @param {import("./containerView.js").default} container
248
+ * @param {import("./view.js").default} childView
249
+ * @param {unknown} insertionResult
250
+ * @returns {Set<import("./view.js").default>}
251
+ */
252
+ function collectMutationInitializedViews(
253
+ container,
254
+ childView,
255
+ insertionResult
256
+ ) {
257
+ const views = collectInsertedViews(childView, insertionResult);
258
+ collectUninitializedChromeViews(container, views);
259
+
260
+ return views;
261
+ }
262
+
263
+ /**
264
+ * @param {import("./containerView.js").default} container
265
+ * @param {Set<import("./view.js").default>} [views]
266
+ * @returns {Set<import("./view.js").default>}
267
+ */
268
+ function collectUninitializedChromeViews(container, views = new Set()) {
269
+ for (const view of container.getDescendants()) {
270
+ if (
271
+ isChromeView(view) &&
272
+ view.getDataInitializationState() === "none"
273
+ ) {
274
+ for (const chromeView of view.getDescendants()) {
275
+ if (chromeView.getDataInitializationState() === "none") {
276
+ views.add(chromeView);
277
+ }
278
+ }
279
+ }
280
+ }
281
+
282
+ return views;
283
+ }
284
+
285
+ /**
286
+ * @param {import("./view.js").default} childView
287
+ * @param {unknown} insertionResult
288
+ * @returns {Set<import("./view.js").default>}
289
+ */
290
+ function collectInsertedViews(childView, insertionResult) {
291
+ if (hasGridChildChildren(insertionResult)) {
292
+ return new Set(
293
+ Array.from(insertionResult.getChildren()).flatMap((view) =>
294
+ view.getDescendants()
295
+ )
296
+ );
297
+ }
298
+
299
+ return new Set(childView.getDescendants());
129
300
  }
@@ -48,7 +48,7 @@ export default class FacetView extends ContainerView<import("../spec/view.js").C
48
48
  getAccessor(channel: "row" | "column"): any;
49
49
  updateFacets(): void;
50
50
  updateLabels(): void;
51
- getFacetGroups(): string[] | number[] | boolean[];
51
+ getFacetGroups(): number[] | string[] | boolean[];
52
52
  /**
53
53
  * @param {import("./renderingContext/viewRenderingContext.js").default} context
54
54
  * @param {import("./layout/rectangle.js").default} coords
@@ -38,20 +38,22 @@ export default class GridChild {
38
38
  backgroundStroke: UnitView;
39
39
  /** @type {Partial<Record<import("../../spec/axis.js").AxisOrient, AxisView>>} axes */
40
40
  axes: Partial<Record<import("../../spec/axis.js").AxisOrient, AxisView>>;
41
+ /** @type {AxisCandidate[]} */
42
+ axisCandidates: AxisCandidate[];
41
43
  /** @type {Partial<Record<import("../../spec/axis.js").AxisOrient, AxisGridView>>} gridLines */
42
44
  gridLines: Partial<Record<import("../../spec/axis.js").AxisOrient, AxisGridView>>;
45
+ /** @type {import("./gridChildLegends.js").GridChildLegends} */
46
+ legends: import("./gridChildLegends.js").GridChildLegends;
43
47
  /** @type {Partial<Record<import("./scrollbar.js").ScrollDirection, Scrollbar>>} */
44
48
  scrollbars: Partial<Record<import("./scrollbar.js").ScrollDirection, Scrollbar>>;
45
49
  /** @type {SelectionRect} */
46
50
  selectionRect: SelectionRect;
47
- /** @type {UnitView} */
48
- title: UnitView;
51
+ /** @type {TitleView} */
52
+ title: TitleView;
49
53
  /** @type {number} */
50
54
  backgroundZindex: number;
51
55
  /** @type {number | undefined} */
52
56
  backgroundStrokeZindex: number | undefined;
53
- /** @type {number} */
54
- titleZindex: number;
55
57
  /** @type {Rectangle} */
56
58
  coords: Rectangle;
57
59
  getChildren(): Generator<import("../view.js").default<import("../../spec/view.js").ViewSpec>, void, unknown>;
@@ -59,19 +61,67 @@ export default class GridChild {
59
61
  * Create view decorations, grid lines, axes, etc.
60
62
  */
61
63
  createAxes(): Promise<void>;
64
+ /**
65
+ * Allows subclasses such as SampleGridChild to keep multiple same-orient
66
+ * axis candidates. Ordinary GridView behavior still rejects duplicates.
67
+ *
68
+ * @protected
69
+ * @returns {boolean}
70
+ */
71
+ protected allowDuplicateAxes(): boolean;
72
+ /**
73
+ * @param {import("../../spec/axis.js").AxisOrient} orient
74
+ * @returns {AxisCandidate | undefined}
75
+ */
76
+ getActiveAxisCandidate(orient: import("../../spec/axis.js").AxisOrient): AxisCandidate | undefined;
77
+ /**
78
+ * @param {import("../../spec/axis.js").AxisOrient} orient
79
+ * @returns {AxisCandidate[]}
80
+ */
81
+ getActiveAxisCandidates(orient: import("../../spec/axis.js").AxisOrient): AxisCandidate[];
62
82
  /**
63
83
  * Disposes axis and gridline views so axes can be recreated safely.
64
84
  */
65
85
  disposeAxisViews(): void;
86
+ /**
87
+ * @param {import("../../spec/channel.js").PrimaryPositionalChannel} channel
88
+ * @param {import("../view.js").default} view
89
+ * @returns {import("../axisView.js").AxisLabelClipPolicy}
90
+ */
91
+ getAxisLabelClipPolicy(channel: import("../../spec/channel.js").PrimaryPositionalChannel, view: import("../view.js").default): import("../axisView.js").AxisLabelClipPolicy;
66
92
  getOverhang(): Padding;
93
+ getGuideOverhang(): Padding;
94
+ getTitleOverhang(): Padding;
95
+ getTitleZindex(): number;
96
+ /**
97
+ * @param {import("../renderingContext/viewRenderingContext.js").default} context
98
+ * @param {Rectangle} viewportCoords
99
+ * @param {import("../../types/rendering.js").RenderingOptions} options
100
+ */
101
+ renderTitle(context: import("../renderingContext/viewRenderingContext.js").default, viewportCoords: Rectangle, options: import("../../types/rendering.js").RenderingOptions): void;
102
+ /**
103
+ * Returns the frame used for rendering a view title. Reserved titles are
104
+ * placed outside guide overhang orthogonally, while the title frame controls
105
+ * the parallel anchor range.
106
+ *
107
+ * @param {Rectangle} viewportCoords
108
+ */
109
+ getTitleCoords(viewportCoords: Rectangle): Rectangle;
67
110
  getOverhangAndPadding(): Padding;
68
111
  #private;
69
112
  }
113
+ export type AxisCandidate = {
114
+ axisView: AxisView;
115
+ channel: import("../../spec/channel.js").PrimaryPositionalChannel;
116
+ orient: import("../../spec/axis.js").AxisOrient;
117
+ resolution: import("../../scales/axisResolution.js").default;
118
+ };
70
119
  import UnitView from "../unitView.js";
71
120
  import AxisView from "../axisView.js";
72
121
  import AxisGridView from "../axisGridView.js";
73
122
  import Scrollbar from "./scrollbar.js";
74
123
  import SelectionRect from "./selectionRect.js";
124
+ import TitleView from "../titleView.js";
75
125
  import Rectangle from "../layout/rectangle.js";
76
126
  import Padding from "../layout/padding.js";
77
127
  //# sourceMappingURL=gridChild.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gridChild.d.ts","sourceRoot":"","sources":["../../../../src/view/gridView/gridChild.js"],"names":[],"mappings":"AA42BA;;;;;GAKG;AACH,qDALW,OAAO,yBAAyB,EAAE,uBAAuB,CAAC,MAAM,CAAC,sBACjE,OAAO,aACP,MAAM,GACJ,OAAO,yBAAyB,EAAE,WAAW,GAAG,SAAS,CAyBrE;AAcD;;;GAGG;AACH,iDAHW,OAAO,oBAAoB,EAAE,cAAc,GACzC,OAAO,oBAAoB,EAAE,QAAQ,CA6BjD;AAED;;;GAGG;AACH,uDAHW,OAAO,oBAAoB,EAAE,cAAc,GACzC,OAAO,oBAAoB,EAAE,QAAQ,CA4CjD;AAx8BD;IACI;;;;;;OAMG;IAEH;;;;OAIG;IACH,kBAJW,OAAO,YAAY,EAAE,OAAO,gBAC5B,OAAO,qBAAqB,EAAE,OAAO,UACrC,MAAM,EAwHhB;IArHG,gGAAgC;IAChC,0EAAgB;IAChB,eAAoB;IAEpB,uBAAuB;IACvB,YADW,QAAQ,CACQ;IAE3B,uBAAuB;IACvB,kBADW,QAAQ,CACc;IAEjC,sFAAsF;IACtF,MADW,OAAO,CAAC,MAAM,CAAC,OAAO,oBAAoB,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAC/D;IAEd,+FAA+F;IAC/F,WADW,OAAO,CAAC,MAAM,CAAC,OAAO,oBAAoB,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAC9D;IAEnB,mFAAmF;IACnF,YADW,OAAO,CAAC,MAAM,CAAC,OAAO,gBAAgB,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC,CAC3D;IAEpB,4BAA4B;IAC5B,eADW,aAAa,CACM;IAE9B,uBAAuB;IACvB,OADW,QAAQ,CACG;IAEtB,qBAAqB;IACrB,kBADW,MAAM,CACQ;IAEzB,iCAAiC;IACjC,wBADW,MAAM,GAAG,SAAS,CACU;IAEvC,qBAAqB;IACrB,aADW,MAAM,CACG;IAEpB,wBAAwB;IACxB,QADW,SAAS,CACQ;IA6hBhC,6GAiBC;IAED;;OAEG;IACH,4BA2LC;IAED;;OAEG;IACH,yBAWC;IAED,uBAqBC;IAED,iCAEC;;CACJ;qBAz1BoB,gBAAgB;qBANK,gBAAgB;yBADjC,oBAAoB;sBAYvB,gBAAgB;0BACoB,oBAAoB;sBARxD,wBAAwB;oBAF1B,sBAAsB"}
1
+ {"version":3,"file":"gridChild.d.ts","sourceRoot":"","sources":["../../../../src/view/gridView/gridChild.js"],"names":[],"mappings":"AAiiCA;;;;;GAKG;AACH,qDALW,OAAO,yBAAyB,EAAE,uBAAuB,CAAC,MAAM,CAAC,sBACjE,OAAO,aACP,MAAM,GACJ,OAAO,yBAAyB,EAAE,WAAW,GAAG,SAAS,CAyBrE;AAcD;;;GAGG;AACH,iDAHW,OAAO,oBAAoB,EAAE,cAAc,GACzC,OAAO,oBAAoB,EAAE,QAAQ,CA6BjD;AAED;;;GAGG;AACH,uDAHW,OAAO,oBAAoB,EAAE,cAAc,GACzC,OAAO,oBAAoB,EAAE,QAAQ,CA4CjD;AArlCD;IACI;;;;;;OAMG;IAEH;;;;OAIG;IACH,kBAJW,OAAO,YAAY,EAAE,OAAO,gBAC5B,OAAO,qBAAqB,EAAE,OAAO,UACrC,MAAM,EAiHhB;IA9GG,gGAAgC;IAChC,0EAAgB;IAChB,eAAoB;IAEpB,uBAAuB;IACvB,YADW,QAAQ,CACQ;IAE3B,uBAAuB;IACvB,kBADW,QAAQ,CACc;IAEjC,sFAAsF;IACtF,MADW,OAAO,CAAC,MAAM,CAAC,OAAO,oBAAoB,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAC/D;IAEd,8BAA8B;IAC9B,gBADW,aAAa,EAAE,CACF;IAExB,+FAA+F;IAC/F,WADW,OAAO,CAAC,MAAM,CAAC,OAAO,oBAAoB,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAC9D;IAEnB,+DAA+D;IAC/D,SADW,OAAO,uBAAuB,EAAE,gBAAgB,CAC1C;IAEjB,mFAAmF;IACnF,YADW,OAAO,CAAC,MAAM,CAAC,OAAO,gBAAgB,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC,CAC3D;IAEpB,4BAA4B;IAC5B,eADW,aAAa,CACM;IAE9B,wBAAwB;IACxB,OADW,SAAS,CACE;IAEtB,qBAAqB;IACrB,kBADW,MAAM,CACQ;IAEzB,iCAAiC;IACjC,wBADW,MAAM,GAAG,SAAS,CACU;IAEvC,wBAAwB;IACxB,QADW,SAAS,CACQ;IAmhBhC,6GAoBC;IAED;;OAEG;IACH,4BAuNC;IAED;;;;;;OAMG;IACH,gCAFa,OAAO,CAInB;IAED;;;OAGG;IACH,+BAHW,OAAO,oBAAoB,EAAE,UAAU,GACrC,aAAa,GAAG,SAAS,CAKrC;IAED;;;OAGG;IACH,gCAHW,OAAO,oBAAoB,EAAE,UAAU,GACrC,aAAa,EAAE,CAQ3B;IAED;;OAEG;IACH,yBAeC;IAED;;;;OAIG;IACH,gCAJW,OAAO,uBAAuB,EAAE,wBAAwB,QACxD,OAAO,YAAY,EAAE,OAAO,GAC1B,OAAO,gBAAgB,EAAE,mBAAmB,CAgBxD;IAED,uBAKC;IAED,4BAcC;IAED,4BAEC;IAED,yBAEC;IAED;;;;OAIG;IACH,qBAJW,OAAO,6CAA6C,EAAE,OAAO,kBAC7D,SAAS,WACT,OAAO,0BAA0B,EAAE,gBAAgB,QAQ7D;IAED;;;;;;OAMG;IACH,+BAFW,SAAS,aAgCnB;IAED,iCAEC;;CACJ;4BAp/BY;IACN,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,OAAO,uBAAuB,EAAE,wBAAwB,CAAC;IAClE,MAAM,EAAE,OAAO,oBAAoB,EAAE,UAAU,CAAC;IAChD,UAAU,EAAE,OAAO,gCAAgC,EAAE,OAAO,CAAC;CAChE;qBA5BiB,gBAAgB;qBAN9B,gBAAgB;yBAJE,oBAAoB;sBAgBvB,gBAAgB;0BACoB,oBAAoB;sBARxD,iBAAiB;sBADjB,wBAAwB;oBAF1B,sBAAsB"}