@genome-spy/core 0.69.1 → 0.71.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 (285) hide show
  1. package/dist/bundle/{AbortablePromiseCache-CcuMrnn7.js → AbortablePromiseCache-Dj0vzLnp.js} +4 -4
  2. package/dist/bundle/{browser-BRemItdO.js → browser-0iNU5Wit.js} +33 -33
  3. package/dist/bundle/index-BYsZN7b0.js +1597 -0
  4. package/dist/bundle/{index-Cq3QFUxX.js → index-C3kClAEN.js} +583 -593
  5. package/dist/bundle/{index-D-w7Mmt9.js → index-C7wOh6y1.js} +138 -140
  6. package/dist/bundle/index-CRaQAuki.js +326 -0
  7. package/dist/bundle/{index-D74H8TTz.js → index-D9v1PCj9.js} +1 -2
  8. package/dist/bundle/{index-BatuyGAI.js → index-GDOuv_D5.js} +75 -80
  9. package/dist/bundle/{index-DbJ0oeYM.js → index-Gt44EOIH.js} +160 -163
  10. package/dist/bundle/index.es.js +9095 -9129
  11. package/dist/bundle/index.js +121 -163
  12. package/dist/bundle/{unzip-NywezaRR.js → unzip-Bac01w6X.js} +1 -1
  13. package/dist/schema.json +0 -48
  14. package/dist/src/genomeSpy/containerUi.d.ts.map +1 -1
  15. package/dist/src/genomeSpy/containerUi.js +0 -1
  16. package/dist/src/genomeSpy/viewHighlight.js +2 -2
  17. package/dist/src/genomeSpy.d.ts +3 -3
  18. package/dist/src/genomeSpy.d.ts.map +1 -1
  19. package/dist/src/genomeSpy.js +27 -3
  20. package/dist/src/gl/colorUtils.d.ts +2 -1
  21. package/dist/src/gl/colorUtils.d.ts.map +1 -1
  22. package/dist/src/gl/colorUtils.js +15 -3
  23. package/dist/src/gl/webGLHelper.d.ts.map +1 -1
  24. package/dist/src/gl/webGLHelper.js +2 -1
  25. package/dist/src/index.d.ts.map +1 -1
  26. package/dist/src/index.js +2 -5
  27. package/dist/src/marks/mark.d.ts +1 -3
  28. package/dist/src/marks/mark.d.ts.map +1 -1
  29. package/dist/src/marks/mark.js +0 -8
  30. package/dist/src/marks/rect.d.ts.map +1 -1
  31. package/dist/src/marks/rect.js +0 -8
  32. package/dist/src/spec/view.d.ts +0 -10
  33. package/dist/src/utils/deepEqual.d.ts +14 -0
  34. package/dist/src/utils/deepEqual.d.ts.map +1 -0
  35. package/dist/src/utils/deepEqual.js +63 -0
  36. package/dist/src/utils/fetchUtils.d.ts +27 -0
  37. package/dist/src/utils/fetchUtils.d.ts.map +1 -0
  38. package/dist/src/utils/fetchUtils.js +47 -0
  39. package/dist/src/utils/keyboardZoomMotion.d.ts +93 -0
  40. package/dist/src/utils/keyboardZoomMotion.d.ts.map +1 -0
  41. package/dist/src/utils/keyboardZoomMotion.js +285 -0
  42. package/dist/src/utils/url.d.ts +12 -0
  43. package/dist/src/utils/url.d.ts.map +1 -1
  44. package/dist/src/utils/url.js +45 -0
  45. package/dist/src/view/axisGridView.d.ts +1 -1
  46. package/dist/src/view/axisGridView.js +0 -1
  47. package/dist/src/view/axisView.d.ts +1 -1
  48. package/dist/src/view/concatView.d.ts +6 -3
  49. package/dist/src/view/concatView.d.ts.map +1 -1
  50. package/dist/src/view/concatView.js +9 -2
  51. package/dist/src/view/containerMutationHelper.d.ts +6 -6
  52. package/dist/src/view/containerMutationHelper.d.ts.map +1 -1
  53. package/dist/src/view/containerView.d.ts +7 -5
  54. package/dist/src/view/containerView.d.ts.map +1 -1
  55. package/dist/src/view/containerView.js +4 -1
  56. package/dist/src/view/facetView.d.ts +1 -1
  57. package/dist/src/view/flowBuilder.d.ts +1 -1
  58. package/dist/src/view/flowBuilder.d.ts.map +1 -1
  59. package/dist/src/view/gridView/gridChild.d.ts +3 -3
  60. package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
  61. package/dist/src/view/gridView/gridChild.js +0 -2
  62. package/dist/src/view/gridView/gridView.d.ts +13 -11
  63. package/dist/src/view/gridView/gridView.d.ts.map +1 -1
  64. package/dist/src/view/gridView/gridView.js +17 -26
  65. package/dist/src/view/gridView/keyboardZoomController.d.ts +21 -0
  66. package/dist/src/view/gridView/keyboardZoomController.d.ts.map +1 -0
  67. package/dist/src/view/gridView/keyboardZoomController.js +202 -0
  68. package/dist/src/view/gridView/scrollbar.d.ts +1 -1
  69. package/dist/src/view/gridView/scrollbar.d.ts.map +1 -1
  70. package/dist/src/view/gridView/scrollbar.js +0 -1
  71. package/dist/src/view/gridView/selectionRect.d.ts +1 -1
  72. package/dist/src/view/gridView/selectionRect.d.ts.map +1 -1
  73. package/dist/src/view/gridView/selectionRect.js +0 -1
  74. package/dist/src/view/gridView/separatorView.js +0 -1
  75. package/dist/src/view/gridView/zoomNavigationUtils.d.ts +19 -0
  76. package/dist/src/view/gridView/zoomNavigationUtils.d.ts.map +1 -0
  77. package/dist/src/view/gridView/zoomNavigationUtils.js +51 -0
  78. package/dist/src/view/layerView.d.ts +8 -5
  79. package/dist/src/view/layerView.d.ts.map +1 -1
  80. package/dist/src/view/layerView.js +6 -2
  81. package/dist/src/view/title.d.ts.map +1 -1
  82. package/dist/src/view/title.js +0 -1
  83. package/dist/src/view/unitView.d.ts +7 -4
  84. package/dist/src/view/unitView.d.ts.map +1 -1
  85. package/dist/src/view/unitView.js +5 -1
  86. package/dist/src/view/view.d.ts +13 -9
  87. package/dist/src/view/view.d.ts.map +1 -1
  88. package/dist/src/view/view.js +7 -1
  89. package/dist/src/view/viewError.d.ts +1 -1
  90. package/dist/src/view/viewError.d.ts.map +1 -1
  91. package/dist/src/view/viewFactory.d.ts +3 -44
  92. package/dist/src/view/viewFactory.d.ts.map +1 -1
  93. package/dist/src/view/viewFactory.js +28 -69
  94. package/dist/src/view/viewSelectors.d.ts.map +1 -1
  95. package/dist/src/view/viewSelectors.js +123 -160
  96. package/dist/src/view/viewSpecGuards.d.ts +43 -0
  97. package/dist/src/view/viewSpecGuards.d.ts.map +1 -0
  98. package/dist/src/view/viewSpecGuards.js +69 -0
  99. package/dist/src/view/viewUtils.d.ts +1 -1
  100. package/dist/src/view/viewUtils.d.ts.map +1 -1
  101. package/dist/src/view/viewUtils.js +4 -5
  102. package/dist/src/view/zoom.d.ts +1 -0
  103. package/dist/src/view/zoom.d.ts.map +1 -1
  104. package/dist/src/view/zoom.js +5 -1
  105. package/package.json +3 -3
  106. package/dist/bundle/index-ByuE8dvu.js +0 -332
  107. package/dist/bundle/index-D28m8tSW.js +0 -1607
  108. package/dist/src/data/collector.test.d.ts +0 -2
  109. package/dist/src/data/collector.test.d.ts.map +0 -1
  110. package/dist/src/data/dataFlow.test.d.ts +0 -2
  111. package/dist/src/data/dataFlow.test.d.ts.map +0 -1
  112. package/dist/src/data/flow.test.d.ts +0 -2
  113. package/dist/src/data/flow.test.d.ts.map +0 -1
  114. package/dist/src/data/flowInit.test.d.ts +0 -2
  115. package/dist/src/data/flowInit.test.d.ts.map +0 -1
  116. package/dist/src/data/flowNode.test.d.ts +0 -2
  117. package/dist/src/data/flowNode.test.d.ts.map +0 -1
  118. package/dist/src/data/flowOptimizer.test.d.ts +0 -2
  119. package/dist/src/data/flowOptimizer.test.d.ts.map +0 -1
  120. package/dist/src/data/formats/fasta.test.d.ts +0 -2
  121. package/dist/src/data/formats/fasta.test.d.ts.map +0 -1
  122. package/dist/src/data/keyIndex.test.d.ts +0 -2
  123. package/dist/src/data/keyIndex.test.d.ts.map +0 -1
  124. package/dist/src/data/sources/inlineSource.test.d.ts +0 -2
  125. package/dist/src/data/sources/inlineSource.test.d.ts.map +0 -1
  126. package/dist/src/data/sources/sequenceSource.test.d.ts +0 -2
  127. package/dist/src/data/sources/sequenceSource.test.d.ts.map +0 -1
  128. package/dist/src/data/transforms/aggregate.test.d.ts +0 -2
  129. package/dist/src/data/transforms/aggregate.test.d.ts.map +0 -1
  130. package/dist/src/data/transforms/clone.test.d.ts +0 -2
  131. package/dist/src/data/transforms/clone.test.d.ts.map +0 -1
  132. package/dist/src/data/transforms/coverage.test.d.ts +0 -2
  133. package/dist/src/data/transforms/coverage.test.d.ts.map +0 -1
  134. package/dist/src/data/transforms/filter.test.d.ts +0 -2
  135. package/dist/src/data/transforms/filter.test.d.ts.map +0 -1
  136. package/dist/src/data/transforms/filterScoredLabels.test.d.ts +0 -2
  137. package/dist/src/data/transforms/filterScoredLabels.test.d.ts.map +0 -1
  138. package/dist/src/data/transforms/flatten.test.d.ts +0 -2
  139. package/dist/src/data/transforms/flatten.test.d.ts.map +0 -1
  140. package/dist/src/data/transforms/flattenDelimited.test.d.ts +0 -2
  141. package/dist/src/data/transforms/flattenDelimited.test.d.ts.map +0 -1
  142. package/dist/src/data/transforms/flattenSequence.test.d.ts +0 -2
  143. package/dist/src/data/transforms/flattenSequence.test.d.ts.map +0 -1
  144. package/dist/src/data/transforms/formula.test.d.ts +0 -2
  145. package/dist/src/data/transforms/formula.test.d.ts.map +0 -1
  146. package/dist/src/data/transforms/identifier.test.d.ts +0 -2
  147. package/dist/src/data/transforms/identifier.test.d.ts.map +0 -1
  148. package/dist/src/data/transforms/pileup.test.d.ts +0 -2
  149. package/dist/src/data/transforms/pileup.test.d.ts.map +0 -1
  150. package/dist/src/data/transforms/project.test.d.ts +0 -2
  151. package/dist/src/data/transforms/project.test.d.ts.map +0 -1
  152. package/dist/src/data/transforms/regexExtract.test.d.ts +0 -2
  153. package/dist/src/data/transforms/regexExtract.test.d.ts.map +0 -1
  154. package/dist/src/data/transforms/regexFold.test.d.ts +0 -2
  155. package/dist/src/data/transforms/regexFold.test.d.ts.map +0 -1
  156. package/dist/src/data/transforms/sample.test.d.ts +0 -2
  157. package/dist/src/data/transforms/sample.test.d.ts.map +0 -1
  158. package/dist/src/data/transforms/stack.test.d.ts +0 -2
  159. package/dist/src/data/transforms/stack.test.d.ts.map +0 -1
  160. package/dist/src/encoder/accessor.test.d.ts +0 -2
  161. package/dist/src/encoder/accessor.test.d.ts.map +0 -1
  162. package/dist/src/encoder/encoder.test.d.ts +0 -2
  163. package/dist/src/encoder/encoder.test.d.ts.map +0 -1
  164. package/dist/src/encoder/metadataChannels.test.d.ts +0 -2
  165. package/dist/src/encoder/metadataChannels.test.d.ts.map +0 -1
  166. package/dist/src/genome/genome.test.d.ts +0 -2
  167. package/dist/src/genome/genome.test.d.ts.map +0 -1
  168. package/dist/src/genome/genomes.test.d.ts +0 -2
  169. package/dist/src/genome/genomes.test.d.ts.map +0 -1
  170. package/dist/src/genome/scaleIndex.test.d.ts +0 -2
  171. package/dist/src/genome/scaleIndex.test.d.ts.map +0 -1
  172. package/dist/src/genome/scaleLocus.test.d.ts +0 -2
  173. package/dist/src/genome/scaleLocus.test.d.ts.map +0 -1
  174. package/dist/src/genomeSpy/viewDataInit.test.d.ts +0 -2
  175. package/dist/src/genomeSpy/viewDataInit.test.d.ts.map +0 -1
  176. package/dist/src/paramRuntime/expressionRef.test.d.ts +0 -2
  177. package/dist/src/paramRuntime/expressionRef.test.d.ts.map +0 -1
  178. package/dist/src/paramRuntime/graphRuntime.test.d.ts +0 -2
  179. package/dist/src/paramRuntime/graphRuntime.test.d.ts.map +0 -1
  180. package/dist/src/paramRuntime/paramRuntime.test.d.ts +0 -2
  181. package/dist/src/paramRuntime/paramRuntime.test.d.ts.map +0 -1
  182. package/dist/src/paramRuntime/paramStore.test.d.ts +0 -2
  183. package/dist/src/paramRuntime/paramStore.test.d.ts.map +0 -1
  184. package/dist/src/scale/scale.test.d.ts +0 -2
  185. package/dist/src/scale/scale.test.d.ts.map +0 -1
  186. package/dist/src/scale/ticks.test.d.ts +0 -2
  187. package/dist/src/scale/ticks.test.d.ts.map +0 -1
  188. package/dist/src/scales/axisResolution.test.d.ts +0 -2
  189. package/dist/src/scales/axisResolution.test.d.ts.map +0 -1
  190. package/dist/src/scales/domainPlanner.test.d.ts +0 -2
  191. package/dist/src/scales/domainPlanner.test.d.ts.map +0 -1
  192. package/dist/src/scales/scaleInstanceManager.test.d.ts +0 -2
  193. package/dist/src/scales/scaleInstanceManager.test.d.ts.map +0 -1
  194. package/dist/src/scales/scaleInteractionController.test.d.ts +0 -2
  195. package/dist/src/scales/scaleInteractionController.test.d.ts.map +0 -1
  196. package/dist/src/scales/scaleResolution.test.d.ts +0 -2
  197. package/dist/src/scales/scaleResolution.test.d.ts.map +0 -1
  198. package/dist/src/scales/scaleRules.test.d.ts +0 -2
  199. package/dist/src/scales/scaleRules.test.d.ts.map +0 -1
  200. package/dist/src/selection/selection.test.d.ts +0 -2
  201. package/dist/src/selection/selection.test.d.ts.map +0 -1
  202. package/dist/src/tooltip/dataTooltipHandler.test.d.ts +0 -2
  203. package/dist/src/tooltip/dataTooltipHandler.test.d.ts.map +0 -1
  204. package/dist/src/tooltip/flattenDatumRows.test.d.ts +0 -2
  205. package/dist/src/tooltip/flattenDatumRows.test.d.ts.map +0 -1
  206. package/dist/src/tooltip/tooltipContext.test.d.ts +0 -2
  207. package/dist/src/tooltip/tooltipContext.test.d.ts.map +0 -1
  208. package/dist/src/utils/addBaseUrl.test.d.ts +0 -2
  209. package/dist/src/utils/addBaseUrl.test.d.ts.map +0 -1
  210. package/dist/src/utils/binnedIndex.test.d.ts +0 -2
  211. package/dist/src/utils/binnedIndex.test.d.ts.map +0 -1
  212. package/dist/src/utils/cloner.test.d.ts +0 -2
  213. package/dist/src/utils/cloner.test.d.ts.map +0 -1
  214. package/dist/src/utils/coalesce.test.d.ts +0 -2
  215. package/dist/src/utils/coalesce.test.d.ts.map +0 -1
  216. package/dist/src/utils/concatIterables.test.d.ts +0 -2
  217. package/dist/src/utils/concatIterables.test.d.ts.map +0 -1
  218. package/dist/src/utils/domainArray.test.d.ts +0 -2
  219. package/dist/src/utils/domainArray.test.d.ts.map +0 -1
  220. package/dist/src/utils/indexer.test.d.ts +0 -2
  221. package/dist/src/utils/indexer.test.d.ts.map +0 -1
  222. package/dist/src/utils/interactionEvent.test.d.ts +0 -2
  223. package/dist/src/utils/interactionEvent.test.d.ts.map +0 -1
  224. package/dist/src/utils/iterateNestedMaps.test.d.ts +0 -2
  225. package/dist/src/utils/iterateNestedMaps.test.d.ts.map +0 -1
  226. package/dist/src/utils/kWayMerge.test.d.ts +0 -2
  227. package/dist/src/utils/kWayMerge.test.d.ts.map +0 -1
  228. package/dist/src/utils/mergeObjects.test.d.ts +0 -2
  229. package/dist/src/utils/mergeObjects.test.d.ts.map +0 -1
  230. package/dist/src/utils/numberExtractor.test.d.ts +0 -2
  231. package/dist/src/utils/numberExtractor.test.d.ts.map +0 -1
  232. package/dist/src/utils/propertyCacher.test.d.ts +0 -2
  233. package/dist/src/utils/propertyCacher.test.d.ts.map +0 -1
  234. package/dist/src/utils/propertyCoalescer.test.d.ts +0 -2
  235. package/dist/src/utils/propertyCoalescer.test.d.ts.map +0 -1
  236. package/dist/src/utils/radixSort.test.d.ts +0 -2
  237. package/dist/src/utils/radixSort.test.d.ts.map +0 -1
  238. package/dist/src/utils/reservationMap.test.d.ts +0 -2
  239. package/dist/src/utils/reservationMap.test.d.ts.map +0 -1
  240. package/dist/src/utils/ringBuffer.test.d.ts +0 -2
  241. package/dist/src/utils/ringBuffer.test.d.ts.map +0 -1
  242. package/dist/src/utils/throttle.test.d.ts +0 -2
  243. package/dist/src/utils/throttle.test.d.ts.map +0 -1
  244. package/dist/src/utils/topK.test.d.ts +0 -2
  245. package/dist/src/utils/topK.test.d.ts.map +0 -1
  246. package/dist/src/utils/trees.test.d.ts +0 -2
  247. package/dist/src/utils/trees.test.d.ts.map +0 -1
  248. package/dist/src/utils/ui/tooltip.test.d.ts +0 -2
  249. package/dist/src/utils/ui/tooltip.test.d.ts.map +0 -1
  250. package/dist/src/utils/url.test.d.ts +0 -2
  251. package/dist/src/utils/url.test.d.ts.map +0 -1
  252. package/dist/src/utils/variableTools.test.d.ts +0 -2
  253. package/dist/src/utils/variableTools.test.d.ts.map +0 -1
  254. package/dist/src/view/concatView.test.d.ts +0 -2
  255. package/dist/src/view/concatView.test.d.ts.map +0 -1
  256. package/dist/src/view/dataReadiness.test.d.ts +0 -2
  257. package/dist/src/view/dataReadiness.test.d.ts.map +0 -1
  258. package/dist/src/view/flowBuilder.test.d.ts +0 -2
  259. package/dist/src/view/flowBuilder.test.d.ts.map +0 -1
  260. package/dist/src/view/gridView/gridView.test.d.ts +0 -2
  261. package/dist/src/view/gridView/gridView.test.d.ts.map +0 -1
  262. package/dist/src/view/gridView/selectionRect.test.d.ts +0 -2
  263. package/dist/src/view/gridView/selectionRect.test.d.ts.map +0 -1
  264. package/dist/src/view/layerView.test.d.ts +0 -2
  265. package/dist/src/view/layerView.test.d.ts.map +0 -1
  266. package/dist/src/view/layout/flexLayout.test.d.ts +0 -2
  267. package/dist/src/view/layout/flexLayout.test.d.ts.map +0 -1
  268. package/dist/src/view/layout/grid.test.d.ts +0 -2
  269. package/dist/src/view/layout/grid.test.d.ts.map +0 -1
  270. package/dist/src/view/layout/rectangle.test.d.ts +0 -2
  271. package/dist/src/view/layout/rectangle.test.d.ts.map +0 -1
  272. package/dist/src/view/multiscale.test.d.ts +0 -2
  273. package/dist/src/view/multiscale.test.d.ts.map +0 -1
  274. package/dist/src/view/view.test.d.ts +0 -2
  275. package/dist/src/view/view.test.d.ts.map +0 -1
  276. package/dist/src/view/viewDispose.test.d.ts +0 -2
  277. package/dist/src/view/viewDispose.test.d.ts.map +0 -1
  278. package/dist/src/view/viewFactory.test.d.ts +0 -2
  279. package/dist/src/view/viewFactory.test.d.ts.map +0 -1
  280. package/dist/src/view/viewParamRuntime.test.d.ts +0 -2
  281. package/dist/src/view/viewParamRuntime.test.d.ts.map +0 -1
  282. package/dist/src/view/viewSelectors.test.d.ts +0 -2
  283. package/dist/src/view/viewSelectors.test.d.ts.map +0 -1
  284. package/dist/src/view/viewUtils.test.d.ts +0 -2
  285. package/dist/src/view/viewUtils.test.d.ts.map +0 -1
@@ -0,0 +1,93 @@
1
+ export namespace DEFAULT_KEYBOARD_ZOOM_MOTION_CONFIG {
2
+ namespace pan {
3
+ let baseSpeed: number;
4
+ let maxExtraSpeed: number;
5
+ let pressHalfLifeMs: number;
6
+ let releaseHalfLifeMs: number;
7
+ let holdGrowthHalfLifeMs: number;
8
+ let stopVelocity: number;
9
+ }
10
+ namespace zoom {
11
+ let baseSpeed_1: number;
12
+ export { baseSpeed_1 as baseSpeed };
13
+ let maxExtraSpeed_1: number;
14
+ export { maxExtraSpeed_1 as maxExtraSpeed };
15
+ let pressHalfLifeMs_1: number;
16
+ export { pressHalfLifeMs_1 as pressHalfLifeMs };
17
+ let releaseHalfLifeMs_1: number;
18
+ export { releaseHalfLifeMs_1 as releaseHalfLifeMs };
19
+ let holdGrowthHalfLifeMs_1: number;
20
+ export { holdGrowthHalfLifeMs_1 as holdGrowthHalfLifeMs };
21
+ let stopVelocity_1: number;
22
+ export { stopVelocity_1 as stopVelocity };
23
+ }
24
+ }
25
+ /**
26
+ * Handles smooth WASD navigation motion with acceleration and braking.
27
+ */
28
+ export default class KeyboardZoomMotion {
29
+ /**
30
+ * @param {typeof DEFAULT_KEYBOARD_ZOOM_MOTION_CONFIG} [config]
31
+ */
32
+ constructor(config?: typeof DEFAULT_KEYBOARD_ZOOM_MOTION_CONFIG);
33
+ /**
34
+ * @param {string} code
35
+ */
36
+ isNavigationKey(code: string): code is "KeyW" | "KeyA" | "KeyS" | "KeyD";
37
+ /**
38
+ * @param {string} code
39
+ * @returns {boolean} true if the key state changed
40
+ */
41
+ handleKeyDown(code: string): boolean;
42
+ /**
43
+ * @param {string} code
44
+ * @returns {boolean} true if the key state changed
45
+ */
46
+ handleKeyUp(code: string): boolean;
47
+ reset(): void;
48
+ /**
49
+ * @param {number} dtMs
50
+ * @returns {MotionStep}
51
+ */
52
+ step(dtMs: number): MotionStep;
53
+ isActive(): boolean;
54
+ #private;
55
+ }
56
+ export type NavigationKeyCode = "KeyW" | "KeyA" | "KeyS" | "KeyD";
57
+ export type AxisProfile = {
58
+ /**
59
+ * Target speed reached rapidly after key press.
60
+ */
61
+ baseSpeed: number;
62
+ /**
63
+ * Additional speed gained during sustained hold.
64
+ */
65
+ maxExtraSpeed: number;
66
+ /**
67
+ * Half-life for accelerating toward target speed.
68
+ */
69
+ pressHalfLifeMs: number;
70
+ /**
71
+ * Half-life for braking velocity after release.
72
+ */
73
+ releaseHalfLifeMs: number;
74
+ /**
75
+ * Half-life for hold-time extra acceleration.
76
+ */
77
+ holdGrowthHalfLifeMs: number;
78
+ /**
79
+ * Velocity threshold below which motion snaps to zero.
80
+ */
81
+ stopVelocity: number;
82
+ };
83
+ export type AxisState = {
84
+ velocity: number;
85
+ holdMs: number;
86
+ direction: -1 | 0 | 1;
87
+ };
88
+ export type MotionStep = {
89
+ panDelta: number;
90
+ zoomDelta: number;
91
+ active: boolean;
92
+ };
93
+ //# sourceMappingURL=keyboardZoomMotion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyboardZoomMotion.d.ts","sourceRoot":"","sources":["../../../src/utils/keyboardZoomMotion.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAmDA;;GAEG;AACH;IAcI;;OAEG;IACH,qBAFW,OAAO,mCAAmC,EAwBpD;IAED;;OAEG;IACH,sBAFW,MAAM,6CAShB;IAED;;;OAGG;IACH,oBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;OAGG;IACH,kBAHW,MAAM,GACJ,OAAO,CAInB;IAED,cAaC;IAED;;;OAGG;IACH,WAHW,MAAM,GACJ,UAAU,CAwCtB;IAED,oBAWC;;CAqBJ;gCArNY,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM;;;;;eAKpC,MAAM;;;;mBACN,MAAM;;;;qBACN,MAAM;;;;uBACN,MAAM;;;;0BACN,MAAM;;;;kBACN,MAAM;;;cAKN,MAAM;YACN,MAAM;eACN,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;;;cAKV,MAAM;eACN,MAAM;YACN,OAAO"}
@@ -0,0 +1,285 @@
1
+ /**
2
+ * @typedef {"KeyW" | "KeyA" | "KeyS" | "KeyD"} NavigationKeyCode
3
+ */
4
+
5
+ /**
6
+ * @typedef {object} AxisProfile
7
+ * @prop {number} baseSpeed Target speed reached rapidly after key press.
8
+ * @prop {number} maxExtraSpeed Additional speed gained during sustained hold.
9
+ * @prop {number} pressHalfLifeMs Half-life for accelerating toward target speed.
10
+ * @prop {number} releaseHalfLifeMs Half-life for braking velocity after release.
11
+ * @prop {number} holdGrowthHalfLifeMs Half-life for hold-time extra acceleration.
12
+ * @prop {number} stopVelocity Velocity threshold below which motion snaps to zero.
13
+ */
14
+
15
+ /**
16
+ * @typedef {object} AxisState
17
+ * @prop {number} velocity
18
+ * @prop {number} holdMs
19
+ * @prop {-1 | 0 | 1} direction
20
+ */
21
+
22
+ /**
23
+ * @typedef {object} MotionStep
24
+ * @prop {number} panDelta
25
+ * @prop {number} zoomDelta
26
+ * @prop {boolean} active
27
+ */
28
+
29
+ /**
30
+ * Tuned for fast key-tap response, one-second-ish braking, and gradual
31
+ * acceleration during long key holds.
32
+ */
33
+ export const DEFAULT_KEYBOARD_ZOOM_MOTION_CONFIG = {
34
+ pan: {
35
+ baseSpeed: 1,
36
+ maxExtraSpeed: 3,
37
+ pressHalfLifeMs: 30,
38
+ releaseHalfLifeMs: 100,
39
+ holdGrowthHalfLifeMs: 800,
40
+ stopVelocity: 0.01,
41
+ },
42
+ zoom: {
43
+ baseSpeed: 3,
44
+ maxExtraSpeed: 15,
45
+ pressHalfLifeMs: 10,
46
+ releaseHalfLifeMs: 100,
47
+ holdGrowthHalfLifeMs: 600,
48
+ stopVelocity: 0.01,
49
+ },
50
+ };
51
+
52
+ /**
53
+ * Handles smooth WASD navigation motion with acceleration and braking.
54
+ */
55
+ export default class KeyboardZoomMotion {
56
+ /** @type {Record<NavigationKeyCode, boolean>} */
57
+ #pressed;
58
+
59
+ /** @type {AxisState} */
60
+ #pan;
61
+
62
+ /** @type {AxisState} */
63
+ #zoom;
64
+
65
+ #panProfile;
66
+
67
+ #zoomProfile;
68
+
69
+ /**
70
+ * @param {typeof DEFAULT_KEYBOARD_ZOOM_MOTION_CONFIG} [config]
71
+ */
72
+ constructor(config = DEFAULT_KEYBOARD_ZOOM_MOTION_CONFIG) {
73
+ this.#panProfile = config.pan;
74
+ this.#zoomProfile = config.zoom;
75
+
76
+ this.#pressed = {
77
+ KeyW: false,
78
+ KeyA: false,
79
+ KeyS: false,
80
+ KeyD: false,
81
+ };
82
+
83
+ this.#pan = {
84
+ velocity: 0,
85
+ holdMs: 0,
86
+ direction: 0,
87
+ };
88
+
89
+ this.#zoom = {
90
+ velocity: 0,
91
+ holdMs: 0,
92
+ direction: 0,
93
+ };
94
+ }
95
+
96
+ /**
97
+ * @param {string} code
98
+ */
99
+ isNavigationKey(code) {
100
+ return (
101
+ code === "KeyW" ||
102
+ code === "KeyA" ||
103
+ code === "KeyS" ||
104
+ code === "KeyD"
105
+ );
106
+ }
107
+
108
+ /**
109
+ * @param {string} code
110
+ * @returns {boolean} true if the key state changed
111
+ */
112
+ handleKeyDown(code) {
113
+ return this.#setPressed(code, true);
114
+ }
115
+
116
+ /**
117
+ * @param {string} code
118
+ * @returns {boolean} true if the key state changed
119
+ */
120
+ handleKeyUp(code) {
121
+ return this.#setPressed(code, false);
122
+ }
123
+
124
+ reset() {
125
+ this.#pressed.KeyW = false;
126
+ this.#pressed.KeyA = false;
127
+ this.#pressed.KeyS = false;
128
+ this.#pressed.KeyD = false;
129
+
130
+ this.#pan.velocity = 0;
131
+ this.#pan.holdMs = 0;
132
+ this.#pan.direction = 0;
133
+
134
+ this.#zoom.velocity = 0;
135
+ this.#zoom.holdMs = 0;
136
+ this.#zoom.direction = 0;
137
+ }
138
+
139
+ /**
140
+ * @param {number} dtMs
141
+ * @returns {MotionStep}
142
+ */
143
+ step(dtMs) {
144
+ if (dtMs <= 0) {
145
+ return {
146
+ panDelta: 0,
147
+ zoomDelta: 0,
148
+ active: this.isActive(),
149
+ };
150
+ } else {
151
+ const panDirection = axisDirection(
152
+ this.#pressed.KeyD,
153
+ this.#pressed.KeyA
154
+ );
155
+ const zoomDirection = axisDirection(
156
+ this.#pressed.KeyW,
157
+ this.#pressed.KeyS
158
+ );
159
+
160
+ const panVelocity = updateAxis(
161
+ this.#pan,
162
+ panDirection,
163
+ dtMs,
164
+ this.#panProfile
165
+ );
166
+ const zoomVelocity = updateAxis(
167
+ this.#zoom,
168
+ zoomDirection,
169
+ dtMs,
170
+ this.#zoomProfile
171
+ );
172
+
173
+ const dtSeconds = dtMs / 1000;
174
+
175
+ return {
176
+ panDelta: panVelocity * dtSeconds,
177
+ zoomDelta: zoomVelocity * dtSeconds,
178
+ active: this.isActive(),
179
+ };
180
+ }
181
+ }
182
+
183
+ isActive() {
184
+ if (
185
+ this.#pressed.KeyW ||
186
+ this.#pressed.KeyA ||
187
+ this.#pressed.KeyS ||
188
+ this.#pressed.KeyD
189
+ ) {
190
+ return true;
191
+ } else {
192
+ return this.#pan.velocity !== 0 || this.#zoom.velocity !== 0;
193
+ }
194
+ }
195
+
196
+ /**
197
+ * @param {string} code
198
+ * @param {boolean} pressed
199
+ * @returns {boolean}
200
+ */
201
+ #setPressed(code, pressed) {
202
+ if (!this.isNavigationKey(code)) {
203
+ return false;
204
+ } else {
205
+ const keyCode = /** @type {NavigationKeyCode} */ (code);
206
+ const previous = this.#pressed[keyCode];
207
+ if (previous === pressed) {
208
+ return false;
209
+ } else {
210
+ this.#pressed[keyCode] = pressed;
211
+ return true;
212
+ }
213
+ }
214
+ }
215
+ }
216
+
217
+ /**
218
+ * @param {boolean} negative
219
+ * @param {boolean} positive
220
+ * @returns {-1 | 0 | 1}
221
+ */
222
+ function axisDirection(negative, positive) {
223
+ if (negative === positive) {
224
+ return 0;
225
+ } else if (positive) {
226
+ return 1;
227
+ } else {
228
+ return -1;
229
+ }
230
+ }
231
+
232
+ /**
233
+ * @param {AxisState} axis
234
+ * @param {-1 | 0 | 1} direction
235
+ * @param {number} dtMs
236
+ * @param {AxisProfile} profile
237
+ * @returns {number}
238
+ */
239
+ function updateAxis(axis, direction, dtMs, profile) {
240
+ if (direction !== 0) {
241
+ if (axis.direction !== direction) {
242
+ axis.holdMs = 0;
243
+ }
244
+
245
+ axis.holdMs += dtMs;
246
+
247
+ const extraSpeed =
248
+ profile.maxExtraSpeed *
249
+ (1 - Math.pow(2, -axis.holdMs / profile.holdGrowthHalfLifeMs));
250
+
251
+ const target = direction * (profile.baseSpeed + extraSpeed);
252
+
253
+ axis.velocity = smoothApproach(
254
+ axis.velocity,
255
+ target,
256
+ dtMs,
257
+ profile.pressHalfLifeMs
258
+ );
259
+ } else {
260
+ axis.holdMs = 0;
261
+ axis.velocity = smoothApproach(
262
+ axis.velocity,
263
+ 0,
264
+ dtMs,
265
+ profile.releaseHalfLifeMs
266
+ );
267
+
268
+ if (Math.abs(axis.velocity) < profile.stopVelocity) {
269
+ axis.velocity = 0;
270
+ }
271
+ }
272
+
273
+ axis.direction = direction;
274
+ return axis.velocity;
275
+ }
276
+
277
+ /**
278
+ * @param {number} current
279
+ * @param {number} target
280
+ * @param {number} dtMs
281
+ * @param {number} halfLifeMs
282
+ */
283
+ function smoothApproach(current, target, dtMs, halfLifeMs) {
284
+ return target + (current - target) * Math.pow(2, -dtMs / halfLifeMs);
285
+ }
@@ -9,6 +9,18 @@
9
9
  * @param {string} append
10
10
  */
11
11
  export function concatUrl(base: string | (() => string), append: string): string;
12
+ /**
13
+ * Resolves a URL against a possibly relative base URL and runtime location.
14
+ *
15
+ * Unlike concatUrl, this function can normalize path segments ("..", ".")
16
+ * when enough context exists (absolute base or runtime base URI).
17
+ *
18
+ * @param {string | (() => string)} base
19
+ * @param {string} append
20
+ * @param {string | null} [runtimeBase]
21
+ * @returns {string}
22
+ */
23
+ export function resolveUrl(base: string | (() => string), append: string, runtimeBase?: string | null): string;
12
24
  /**
13
25
  * @param {string} url
14
26
  */
@@ -1 +1 @@
1
- {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../../src/utils/url.js"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,gCAHW,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,UACvB,MAAM,UAsBhB;AAED;;GAEG;AACH,kCAFW,MAAM,UAShB"}
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../../src/utils/url.js"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,gCAHW,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,UACvB,MAAM,UAsBhB;AAED;;;;;;;;;;GAUG;AACH,iCALW,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,UACvB,MAAM,gBACN,MAAM,GAAG,IAAI,GACX,MAAM,CAsBlB;AAED;;GAEG;AACH,kCAFW,MAAM,UAShB"}
@@ -32,6 +32,39 @@ export function concatUrl(base, append) {
32
32
  return getDirectory(baseString) + append;
33
33
  }
34
34
 
35
+ /**
36
+ * Resolves a URL against a possibly relative base URL and runtime location.
37
+ *
38
+ * Unlike concatUrl, this function can normalize path segments ("..", ".")
39
+ * when enough context exists (absolute base or runtime base URI).
40
+ *
41
+ * @param {string | (() => string)} base
42
+ * @param {string} append
43
+ * @param {string | null} [runtimeBase]
44
+ * @returns {string}
45
+ */
46
+ export function resolveUrl(base, append, runtimeBase = getRuntimeBase()) {
47
+ const baseString = typeof base == "function" ? base() : base;
48
+ if (!append) {
49
+ return baseString;
50
+ }
51
+
52
+ try {
53
+ if (baseString) {
54
+ const absoluteBase = runtimeBase
55
+ ? new URL(baseString, runtimeBase).href
56
+ : new URL(baseString).href;
57
+ return new URL(append, absoluteBase).href;
58
+ } else if (runtimeBase) {
59
+ return new URL(append, runtimeBase).href;
60
+ }
61
+ } catch (_error) {
62
+ // Fall back to simple concatenation below.
63
+ }
64
+
65
+ return concatUrl(baseString, append);
66
+ }
67
+
35
68
  /**
36
69
  * @param {string} url
37
70
  */
@@ -43,3 +76,15 @@ export function getDirectory(url) {
43
76
  ? url + "/"
44
77
  : directory;
45
78
  }
79
+
80
+ /**
81
+ * @returns {string | undefined}
82
+ */
83
+ function getRuntimeBase() {
84
+ if (typeof document !== "undefined" && document.baseURI) {
85
+ return document.baseURI;
86
+ }
87
+ if (typeof window !== "undefined" && window.location?.href) {
88
+ return window.location.href;
89
+ }
90
+ }
@@ -9,7 +9,7 @@
9
9
  * @typedef {import("../spec/axis.js").Axis} Axis
10
10
  * @typedef {import("../spec/axis.js").GenomeAxis} GenomeAxis
11
11
  */
12
- export default class AxisGridView extends LayerView {
12
+ export default class AxisGridView extends LayerView<import("../spec/view.js").LayerSpec> {
13
13
  /**
14
14
  * @param {Axis} axisProps
15
15
  * @param {import("../types/viewContext.js").default} context
@@ -253,7 +253,6 @@ function createAxisGrid(axisProps, type) {
253
253
 
254
254
  return {
255
255
  name: "grid_layers",
256
- configurableVisibility: false,
257
256
  resolve: {
258
257
  scale: {
259
258
  [orient2channel(axisProps.orient)]: "forced",
@@ -22,7 +22,7 @@ export const ORIENT_CHANNELS: Record<import("../spec/axis.js").AxisOrient, impor
22
22
  * TODO: Implement grid
23
23
  *
24
24
  */
25
- export default class AxisView extends LayerView {
25
+ export default class AxisView extends LayerView<import("../spec/view.js").LayerSpec> {
26
26
  /**
27
27
  *
28
28
  * @typedef {import("../spec/view.js").LayerSpec} LayerSpec
@@ -1,16 +1,19 @@
1
1
  /**
2
2
  * Creates a vertically or horizontally concatenated layout for children.
3
+ *
4
+ * @template {import("../spec/view.js").AnyConcatSpec} [TSpec=import("../spec/view.js").AnyConcatSpec]
5
+ * @extends {GridView<TSpec>}
3
6
  */
4
- export default class ConcatView extends GridView {
7
+ export default class ConcatView<TSpec extends import("../spec/view.js").AnyConcatSpec = import("../spec/view.js").AnyConcatSpec> extends GridView<TSpec> {
5
8
  /**
6
9
  *
7
- * @param {import("../spec/view.js").AnyConcatSpec} spec
10
+ * @param {TSpec} spec
8
11
  * @param {import("../types/viewContext.js").default} context
9
12
  * @param {import("./containerView.js").default} layoutParent
10
13
  * @param {import("./view.js").default} dataParent
11
14
  * @param {string} name
12
15
  */
13
- constructor(spec: import("../spec/view.js").AnyConcatSpec, context: import("../types/viewContext.js").default, layoutParent: import("./containerView.js").default, dataParent: import("./view.js").default, name: string);
16
+ constructor(spec: TSpec, context: import("../types/viewContext.js").default, layoutParent: import("./containerView.js").default, dataParent: import("./view.js").default, name: string);
14
17
  /**
15
18
  * Adds a child spec dynamically. Intended for post-initialization updates.
16
19
  *
@@ -1 +1 @@
1
- {"version":3,"file":"concatView.d.ts","sourceRoot":"","sources":["../../../src/view/concatView.js"],"names":[],"mappings":"AAIA;;GAEG;AACH;IACI;;;;;;;OAOG;IACH,kBANW,OAAO,iBAAiB,EAAE,aAAa,WACvC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,EAiBhB;IA6BD;;;;;;;;;OASG;IACH,wBAJW,OAAO,iBAAiB,EAAE,QAAQ,UAClC,MAAM,GACJ,OAAO,CAAC,OAAO,WAAW,EAAE,OAAO,CAAC,CAIhD;IAED;;;;OAIG;IACH,qBAFW,MAAM,iBAIhB;;CA2EJ;qBA3JoB,wBAAwB"}
1
+ {"version":3,"file":"concatView.d.ts","sourceRoot":"","sources":["../../../src/view/concatView.js"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,gCAHwD,KAAK,SAAhD,OAAQ,iBAAiB,EAAE,aAAc;IAIlD;;;;;;;OAOG;IACH,kBANW,KAAK,WACL,OAAO,yBAAyB,EAAE,OAAO,gBACzC,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,EAiBhB;IA6BD;;;;;;;;;OASG;IACH,wBAJW,OAAO,iBAAiB,EAAE,QAAQ,UAClC,MAAM,GACJ,OAAO,CAAC,OAAO,WAAW,EAAE,OAAO,CAAC,CAIhD;IAED;;;;OAIG;IACH,qBAFW,MAAM,iBAIhB;;CA2EJ;qBA9JoB,wBAAwB"}
@@ -1,14 +1,21 @@
1
- import { isConcatSpec, isHConcatSpec, isVConcatSpec } from "./viewFactory.js";
1
+ import {
2
+ isConcatSpec,
3
+ isHConcatSpec,
4
+ isVConcatSpec,
5
+ } from "./viewSpecGuards.js";
2
6
  import GridView from "./gridView/gridView.js";
3
7
  import ContainerMutationHelper from "./containerMutationHelper.js";
4
8
 
5
9
  /**
6
10
  * Creates a vertically or horizontally concatenated layout for children.
11
+ *
12
+ * @template {import("../spec/view.js").AnyConcatSpec} [TSpec=import("../spec/view.js").AnyConcatSpec]
13
+ * @extends {GridView<TSpec>}
7
14
  */
8
15
  export default class ConcatView extends GridView {
9
16
  /**
10
17
  *
11
- * @param {import("../spec/view.js").AnyConcatSpec} spec
18
+ * @param {TSpec} spec
12
19
  * @param {import("../types/viewContext.js").default} context
13
20
  * @param {import("./containerView.js").default} layoutParent
14
21
  * @param {import("./view.js").default} dataParent
@@ -35,23 +35,23 @@ export default class ContainerMutationHelper {
35
35
  insertAt: (index: number, spec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec) => void;
36
36
  removeAt: (index: number) => void;
37
37
  };
38
- insertView: (view: import("./view.js").default, index: number) => any;
38
+ insertView: (view: import("./view.js").default<import("../spec/view.js").ViewSpec>, index: number) => any;
39
39
  removeView: (index: number) => void;
40
- prepareView?: (view: import("./view.js").default, index: number, insertionResult: any) => Promise<void>;
40
+ prepareView?: (view: import("./view.js").default<import("../spec/view.js").ViewSpec>, index: number, insertionResult: any) => Promise<void>;
41
41
  afterRemove?: (index: number) => Promise<void>;
42
42
  defaultName?: (index: number, spec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec) => string;
43
43
  requestLayout?: boolean;
44
44
  });
45
- container: import("./containerView.js").default;
45
+ container: import("./containerView.js").default<import("../spec/view.js").ContainerSpec>;
46
46
  options: {
47
47
  getChildSpecs: () => {
48
48
  specs: (import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec)[];
49
49
  insertAt: (index: number, spec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec) => void;
50
50
  removeAt: (index: number) => void;
51
51
  };
52
- insertView: (view: import("./view.js").default, index: number) => any;
52
+ insertView: (view: import("./view.js").default<import("../spec/view.js").ViewSpec>, index: number) => any;
53
53
  removeView: (index: number) => void;
54
- prepareView?: (view: import("./view.js").default, index: number, insertionResult: any) => Promise<void>;
54
+ prepareView?: (view: import("./view.js").default<import("../spec/view.js").ViewSpec>, index: number, insertionResult: any) => Promise<void>;
55
55
  afterRemove?: (index: number) => Promise<void>;
56
56
  defaultName?: (index: number, spec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec) => string;
57
57
  requestLayout?: boolean;
@@ -63,7 +63,7 @@ export default class ContainerMutationHelper {
63
63
  * @param {number} [index]
64
64
  * @returns {Promise<View>}
65
65
  */
66
- addChildSpec(childSpec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec, index?: number): Promise<import("./view.js").default>;
66
+ addChildSpec(childSpec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec, index?: number): Promise<import("./view.js").default<import("../spec/view.js").ViewSpec>>;
67
67
  /**
68
68
  * Removes a child by index and updates the backing spec list.
69
69
  *
@@ -1 +1 @@
1
- {"version":3,"file":"containerMutationHelper.d.ts","sourceRoot":"","sources":["../../../src/view/containerMutationHelper.js"],"names":[],"mappings":"AAOA;;;GAGG;AACH;IACI;;;;;;;;;;OAUG;IAEH;;;;;;;;;;OAUG;IAEH;;;OAGG;IACH,uBAHW,OAAO,oBAAoB,EAAE,OAAO;uBAX3B;mBARR,CAAC,yEAAqB,CAAC,EAAE;sBACtB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,IAAI;sBACpD,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;SAMF;oBACnB,CAAC,IAAI,6BAAM,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG;oBAClC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;sBACrB,CAAC,IAAI,6BAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC;sBAClE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;sBAChC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,MAAM;wBACpD,OAAO;OAW3B;IAFG,gDAA0B;IAC1B;uBAhBgB;mBARR,CAAC,yEAAqB,CAAC,EAAE;sBACtB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,IAAI;sBACpD,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;SAMF;oBACnB,CAAC,IAAI,6BAAM,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG;oBAClC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;sBACrB,CAAC,IAAI,6BAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC;sBAClE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;sBAChC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,MAAM;wBACpD,OAAO;MAUF;IAG1B;;;;;;OAMG;IACH,wBAJW,OAAO,iBAAiB,EAAE,QAAQ,GAAG,OAAO,iBAAiB,EAAE,UAAU,UACzE,MAAM,GACJ,OAAO,6BAAM,CA8CzB;IAED;;;;OAIG;IACH,qBAFW,MAAM,iBAehB;CACJ"}
1
+ {"version":3,"file":"containerMutationHelper.d.ts","sourceRoot":"","sources":["../../../src/view/containerMutationHelper.js"],"names":[],"mappings":"AAOA;;;GAGG;AACH;IACI;;;;;;;;;;OAUG;IAEH;;;;;;;;;;OAUG;IAEH;;;OAGG;IACH,uBAHW,OAAO,oBAAoB,EAAE,OAAO;uBAX3B;mBARR,CAAC,yEAAqB,CAAC,EAAE;sBACtB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,IAAI;sBACpD,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;SAMF;oBACnB,CAAC,IAAI,iEAAM,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG;oBAClC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;sBACrB,CAAC,IAAI,iEAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC;sBAClE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;sBAChC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,MAAM;wBACpD,OAAO;OAW3B;IAFG,yFAA0B;IAC1B;uBAhBgB;mBARR,CAAC,yEAAqB,CAAC,EAAE;sBACtB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,IAAI;sBACpD,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;SAMF;oBACnB,CAAC,IAAI,iEAAM,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG;oBAClC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;sBACrB,CAAC,IAAI,iEAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC;sBAClE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;sBAChC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,MAAM;wBACpD,OAAO;MAUF;IAG1B;;;;;;OAMG;IACH,wBAJW,OAAO,iBAAiB,EAAE,QAAQ,GAAG,OAAO,iBAAiB,EAAE,UAAU,UACzE,MAAM,GACJ,OAAO,iEAAM,CA8CzB;IAED;;;;OAIG;IACH,qBAFW,MAAM,iBAehB;CACJ"}
@@ -1,18 +1,20 @@
1
1
  /**
2
2
  * Compositor view represents a non-leaf node in the view hierarchy.
3
+ *
4
+ * @template {import("../spec/view.js").ContainerSpec} [TSpec=import("../spec/view.js").ContainerSpec]
5
+ * @extends {View<TSpec>}
3
6
  */
4
- export default class ContainerView extends View {
7
+ export default class ContainerView<TSpec extends import("../spec/view.js").ContainerSpec = import("../spec/view.js").ContainerSpec> extends View<TSpec> {
5
8
  /**
6
9
  *
7
- * @param {import("../spec/view.js").ContainerSpec} spec
10
+ * @param {TSpec} spec
8
11
  * @param {import("../types/viewContext.js").default} context
9
12
  * @param {ContainerView} layoutParent
10
13
  * @param {import("./view.js").default} dataParent
11
14
  * @param {string} name
12
15
  * @param {import("./view.js").ViewOptions} [options]
13
16
  */
14
- constructor(spec: import("../spec/view.js").ContainerSpec, context: import("../types/viewContext.js").default, layoutParent: ContainerView, dataParent: import("./view.js").default, name: string, options?: import("./view.js").ViewOptions);
15
- spec: import("../spec/view.js").ContainerSpec;
17
+ constructor(spec: TSpec, context: import("../types/viewContext.js").default, layoutParent: ContainerView, dataParent: import("./view.js").default, name: string, options?: import("./view.js").ViewOptions);
16
18
  initializeChildren(): Promise<void>;
17
19
  /**
18
20
  * Generates an auto name that is guaranteed to be unique within this container
@@ -31,7 +33,7 @@ export default class ContainerView extends View {
31
33
  *
32
34
  * @param {string} name
33
35
  */
34
- findDescendantByName(name: string): View;
36
+ findDescendantByName(name: string): View<import("../spec/view.js").ViewSpec>;
35
37
  /**
36
38
  * @returns {IterableIterator<View>}
37
39
  */
@@ -1 +1 @@
1
- {"version":3,"file":"containerView.d.ts","sourceRoot":"","sources":["../../../src/view/containerView.js"],"names":[],"mappings":"AAEA;;GAEG;AACH;IAII;;;;;;;;OAQG;IACH,kBAPW,OAAO,iBAAiB,EAAE,aAAa,WACvC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,aAAa,cACb,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,YACN,OAAO,WAAW,EAAE,WAAW,EAMzC;IADG,8CAAgB;IAGpB,oCAEC;IAED;;;;;;OAMG;IACH,wBAHW,MAAM,GACJ,MAAM,CAMlB;IAsDD;;;OAGG;IACH,2BAHW,MAAM,EAAE,GACN,IAAI,CAsBhB;IAaD;;;OAGG;IACH,2BAFW,MAAM,QAchB;IAzGD;;OAEG;IACH,qBAFa,gBAAgB,CAAC,IAAI,CAAC,CAIlC;;CA8GJ;iBA5J4C,WAAW"}
1
+ {"version":3,"file":"containerView.d.ts","sourceRoot":"","sources":["../../../src/view/containerView.js"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,mCAHwD,KAAK,SAAhD,OAAQ,iBAAiB,EAAE,aAAc;IAOlD;;;;;;;;OAQG;IACH,kBAPW,KAAK,WACL,OAAO,yBAAyB,EAAE,OAAO,gBACzC,aAAa,cACb,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,YACN,OAAO,WAAW,EAAE,WAAW,EAMzC;IAED,oCAEC;IAED;;;;;;OAMG;IACH,wBAHW,MAAM,GACJ,MAAM,CAMlB;IAsDD;;;OAGG;IACH,2BAHW,MAAM,EAAE,GACN,IAAI,CAsBhB;IAaD;;;OAGG;IACH,2BAFW,MAAM,4CAchB;IAzGD;;OAEG;IACH,qBAFa,gBAAgB,CAAC,IAAI,CAAC,CAIlC;;CA8GJ;iBA/J4C,WAAW"}
@@ -2,6 +2,9 @@ import View, { VISIT_STOP, VISIT_SKIP } from "./view.js";
2
2
 
3
3
  /**
4
4
  * Compositor view represents a non-leaf node in the view hierarchy.
5
+ *
6
+ * @template {import("../spec/view.js").ContainerSpec} [TSpec=import("../spec/view.js").ContainerSpec]
7
+ * @extends {View<TSpec>}
5
8
  */
6
9
  export default class ContainerView extends View {
7
10
  /** @type {Map<string, number>} */
@@ -9,7 +12,7 @@ export default class ContainerView extends View {
9
12
 
10
13
  /**
11
14
  *
12
- * @param {import("../spec/view.js").ContainerSpec} spec
15
+ * @param {TSpec} spec
13
16
  * @param {import("../types/viewContext.js").default} context
14
17
  * @param {ContainerView} layoutParent
15
18
  * @param {import("./view.js").default} dataParent
@@ -13,7 +13,7 @@
13
13
  * @prop {FacetFieldDef} facetFieldDef
14
14
  *
15
15
  */
16
- export default class FacetView extends ContainerView {
16
+ export default class FacetView extends ContainerView<import("../spec/view.js").ContainerSpec> {
17
17
  /**
18
18
  * @typedef {import("./view.js").default} View
19
19
  * @typedef {import("./layerView.js").default} LayerView
@@ -5,7 +5,7 @@
5
5
  * @param {(view: View) => boolean} [viewFilter]
6
6
  * @param {(view: View) => boolean} [viewInitializationPredicate]
7
7
  */
8
- export function buildDataFlow(root: import("./view.js").default, existingFlow?: DataFlow, viewFilter?: (view: import("./view.js").default) => boolean, viewInitializationPredicate?: (view: import("./view.js").default) => boolean): DataFlow;
8
+ export function buildDataFlow(root: import("./view.js").default<import("../spec/view.js").ViewSpec>, existingFlow?: DataFlow, viewFilter?: (view: import("./view.js").default<import("../spec/view.js").ViewSpec>) => boolean, viewInitializationPredicate?: (view: import("./view.js").default<import("../spec/view.js").ViewSpec>) => boolean): DataFlow;
9
9
  /**
10
10
  * Changes the ChromPos channelDefs into FieldDefs and returns
11
11
  * LinearizeGenomicCoordinate transform(s) that should be inserted into