@genome-spy/core 0.36.1 → 0.37.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 (523) hide show
  1. package/README.md +1 -0
  2. package/dist/{index.es.js → bundle/index.es.js} +2253 -2115
  3. package/dist/{index.js → bundle/index.js} +180 -44
  4. package/dist/src/data/collector.d.ts +36 -0
  5. package/dist/src/data/collector.d.ts.map +1 -0
  6. package/dist/src/data/collector.js +184 -0
  7. package/dist/src/data/collector.test.js +84 -0
  8. package/dist/src/data/dataFlow.d.ts +65 -0
  9. package/dist/src/data/dataFlow.d.ts.map +1 -0
  10. package/dist/src/data/dataFlow.js +142 -0
  11. package/dist/src/data/dataFlow.test.js +5 -0
  12. package/dist/src/data/facetNode.d.ts +17 -0
  13. package/dist/src/data/facetNode.d.ts.map +1 -0
  14. package/dist/src/data/facetNode.js +17 -0
  15. package/dist/src/data/flow.test.js +72 -0
  16. package/dist/src/data/flowNode.d.ts +136 -0
  17. package/dist/src/data/flowNode.d.ts.map +1 -0
  18. package/dist/src/data/flowNode.js +286 -0
  19. package/dist/src/data/flowNode.test.js +50 -0
  20. package/dist/src/data/flowOptimizer.d.ts +27 -0
  21. package/dist/src/data/flowOptimizer.d.ts.map +1 -0
  22. package/dist/src/data/flowOptimizer.js +133 -0
  23. package/dist/src/data/flowOptimizer.test.js +193 -0
  24. package/dist/src/data/flowTestUtils.d.ts +30 -0
  25. package/dist/src/data/flowTestUtils.d.ts.map +1 -0
  26. package/dist/src/data/flowTestUtils.js +63 -0
  27. package/dist/src/data/formats/fasta.d.ts +20 -0
  28. package/dist/src/data/formats/fasta.d.ts.map +1 -0
  29. package/dist/src/data/formats/fasta.js +32 -0
  30. package/dist/src/data/formats/fasta.test.js +27 -0
  31. package/dist/src/data/sources/dataSource.d.ts +12 -0
  32. package/dist/src/data/sources/dataSource.d.ts.map +1 -0
  33. package/dist/src/data/sources/dataSource.js +25 -0
  34. package/dist/src/data/sources/dataSourceFactory.d.ts +16 -0
  35. package/dist/src/data/sources/dataSourceFactory.d.ts.map +1 -0
  36. package/dist/src/data/sources/dataSourceFactory.js +127 -0
  37. package/dist/src/data/sources/dataUtils.d.ts +50 -0
  38. package/dist/src/data/sources/dataUtils.d.ts.map +1 -0
  39. package/dist/src/data/sources/dataUtils.js +83 -0
  40. package/dist/src/data/sources/dynamic/README.md +3 -0
  41. package/dist/src/data/sources/dynamic/axisGenomeSource.d.ts +13 -0
  42. package/dist/src/data/sources/dynamic/axisGenomeSource.d.ts.map +1 -0
  43. package/dist/src/data/sources/dynamic/axisGenomeSource.js +19 -0
  44. package/dist/src/data/sources/dynamic/axisTickSource.d.ts +18 -0
  45. package/dist/src/data/sources/dynamic/axisTickSource.d.ts.map +1 -0
  46. package/dist/src/data/sources/dynamic/axisTickSource.js +73 -0
  47. package/dist/src/data/sources/dynamic/bamSource.d.ts +46 -0
  48. package/dist/src/data/sources/dynamic/bamSource.d.ts.map +1 -0
  49. package/dist/src/data/sources/dynamic/bamSource.js +115 -0
  50. package/dist/src/data/sources/dynamic/bigBedSource.d.ts +51 -0
  51. package/dist/src/data/sources/dynamic/bigBedSource.d.ts.map +1 -0
  52. package/dist/src/data/sources/dynamic/bigBedSource.js +128 -0
  53. package/dist/src/data/sources/dynamic/bigWigSource.d.ts +58 -0
  54. package/dist/src/data/sources/dynamic/bigWigSource.d.ts.map +1 -0
  55. package/dist/src/data/sources/dynamic/bigWigSource.js +166 -0
  56. package/dist/src/data/sources/dynamic/gff3Source.d.ts +8 -0
  57. package/dist/src/data/sources/dynamic/gff3Source.d.ts.map +1 -0
  58. package/dist/src/data/sources/dynamic/gff3Source.js +19 -0
  59. package/dist/src/data/sources/dynamic/indexedFastaSource.d.ts +30 -0
  60. package/dist/src/data/sources/dynamic/indexedFastaSource.d.ts.map +1 -0
  61. package/dist/src/data/sources/dynamic/indexedFastaSource.js +86 -0
  62. package/dist/src/data/sources/dynamic/singleAxisLazySource.d.ts +42 -0
  63. package/dist/src/data/sources/dynamic/singleAxisLazySource.d.ts.map +1 -0
  64. package/dist/src/data/sources/dynamic/singleAxisLazySource.js +129 -0
  65. package/dist/src/data/sources/dynamic/tabixSource.d.ts +54 -0
  66. package/dist/src/data/sources/dynamic/tabixSource.d.ts.map +1 -0
  67. package/dist/src/data/sources/dynamic/tabixSource.js +140 -0
  68. package/dist/src/data/sources/dynamic/windowedMixin.d.ts +32 -0
  69. package/dist/src/data/sources/dynamic/windowedMixin.d.ts.map +1 -0
  70. package/dist/src/data/sources/dynamic/windowedMixin.js +53 -0
  71. package/dist/src/data/sources/inlineSource.d.ts +16 -0
  72. package/dist/src/data/sources/inlineSource.d.ts.map +1 -0
  73. package/dist/src/data/sources/inlineSource.js +68 -0
  74. package/dist/src/data/sources/inlineSource.test.js +56 -0
  75. package/dist/src/data/sources/namedSource.d.ts +25 -0
  76. package/dist/src/data/sources/namedSource.d.ts.map +1 -0
  77. package/dist/src/data/sources/namedSource.js +80 -0
  78. package/dist/src/data/sources/sequenceSource.d.ts +17 -0
  79. package/dist/src/data/sources/sequenceSource.d.ts.map +1 -0
  80. package/dist/src/data/sources/sequenceSource.js +47 -0
  81. package/dist/src/data/sources/sequenceSource.test.js +46 -0
  82. package/dist/src/data/sources/urlSource.d.ts +16 -0
  83. package/dist/src/data/sources/urlSource.d.ts.map +1 -0
  84. package/dist/src/data/sources/urlSource.js +74 -0
  85. package/dist/src/data/transforms/aggregate.d.ts +18 -0
  86. package/dist/src/data/transforms/aggregate.d.ts.map +1 -0
  87. package/dist/src/data/transforms/aggregate.js +67 -0
  88. package/dist/src/data/transforms/clone.d.ts +15 -0
  89. package/dist/src/data/transforms/clone.d.ts.map +1 -0
  90. package/dist/src/data/transforms/clone.js +40 -0
  91. package/dist/src/data/transforms/clone.test.js +11 -0
  92. package/dist/src/data/transforms/coverage.d.ts +30 -0
  93. package/dist/src/data/transforms/coverage.d.ts.map +1 -0
  94. package/dist/src/data/transforms/coverage.js +183 -0
  95. package/dist/src/data/transforms/coverage.test.js +123 -0
  96. package/dist/src/data/transforms/filter.d.ts +12 -0
  97. package/dist/src/data/transforms/filter.d.ts.map +1 -0
  98. package/dist/src/data/transforms/filter.js +33 -0
  99. package/dist/src/data/transforms/filter.test.js +18 -0
  100. package/dist/src/data/transforms/filterScoredLabels.d.ts +29 -0
  101. package/dist/src/data/transforms/filterScoredLabels.d.ts.map +1 -0
  102. package/dist/src/data/transforms/filterScoredLabels.js +134 -0
  103. package/dist/src/data/transforms/flatten.d.ts +10 -0
  104. package/dist/src/data/transforms/flatten.d.ts.map +1 -0
  105. package/dist/src/data/transforms/flatten.js +68 -0
  106. package/dist/src/data/transforms/flatten.test.js +93 -0
  107. package/dist/src/data/transforms/flattenCompressedExons.d.ts +19 -0
  108. package/dist/src/data/transforms/flattenCompressedExons.d.ts.map +1 -0
  109. package/dist/src/data/transforms/flattenCompressedExons.js +53 -0
  110. package/dist/src/data/transforms/flattenDelimited.d.ts +10 -0
  111. package/dist/src/data/transforms/flattenDelimited.d.ts.map +1 -0
  112. package/dist/src/data/transforms/flattenDelimited.js +66 -0
  113. package/dist/src/data/transforms/flattenDelimited.test.js +87 -0
  114. package/dist/src/data/transforms/flattenSequence.d.ts +11 -0
  115. package/dist/src/data/transforms/flattenSequence.d.ts.map +1 -0
  116. package/dist/src/data/transforms/flattenSequence.js +35 -0
  117. package/dist/src/data/transforms/flattenSequence.test.js +34 -0
  118. package/dist/src/data/transforms/formula.d.ts +13 -0
  119. package/dist/src/data/transforms/formula.d.ts.map +1 -0
  120. package/dist/src/data/transforms/formula.js +35 -0
  121. package/dist/src/data/transforms/formula.test.js +19 -0
  122. package/dist/src/data/transforms/identifier.d.ts +40 -0
  123. package/dist/src/data/transforms/identifier.d.ts.map +1 -0
  124. package/dist/src/data/transforms/identifier.js +106 -0
  125. package/dist/src/data/transforms/identifier.test.js +83 -0
  126. package/dist/src/data/transforms/linearizeGenomicCoordinate.d.ts +10 -0
  127. package/dist/src/data/transforms/linearizeGenomicCoordinate.d.ts.map +1 -0
  128. package/dist/src/data/transforms/linearizeGenomicCoordinate.js +97 -0
  129. package/dist/src/data/transforms/measureText.d.ts +18 -0
  130. package/dist/src/data/transforms/measureText.d.ts.map +1 -0
  131. package/dist/src/data/transforms/measureText.js +42 -0
  132. package/dist/src/data/transforms/pileup.d.ts +10 -0
  133. package/dist/src/data/transforms/pileup.d.ts.map +1 -0
  134. package/dist/src/data/transforms/pileup.js +126 -0
  135. package/dist/src/data/transforms/pileup.test.js +70 -0
  136. package/dist/src/data/transforms/project.d.ts +13 -0
  137. package/dist/src/data/transforms/project.d.ts.map +1 -0
  138. package/dist/src/data/transforms/project.js +38 -0
  139. package/dist/src/data/transforms/project.test.js +32 -0
  140. package/dist/src/data/transforms/regexExtract.d.ts +13 -0
  141. package/dist/src/data/transforms/regexExtract.d.ts.map +1 -0
  142. package/dist/src/data/transforms/regexExtract.js +57 -0
  143. package/dist/src/data/transforms/regexExtract.test.js +67 -0
  144. package/dist/src/data/transforms/regexFold.d.ts +14 -0
  145. package/dist/src/data/transforms/regexFold.d.ts.map +1 -0
  146. package/dist/src/data/transforms/regexFold.js +139 -0
  147. package/dist/src/data/transforms/regexFold.test.js +160 -0
  148. package/dist/src/data/transforms/sample.d.ts +42 -0
  149. package/dist/src/data/transforms/sample.d.ts.map +1 -0
  150. package/dist/src/data/transforms/sample.js +99 -0
  151. package/dist/src/data/transforms/sample.test.js +38 -0
  152. package/dist/src/data/transforms/stack.d.ts +11 -0
  153. package/dist/src/data/transforms/stack.d.ts.map +1 -0
  154. package/dist/src/data/transforms/stack.js +134 -0
  155. package/dist/src/data/transforms/stack.test.js +91 -0
  156. package/dist/src/data/transforms/transformFactory.d.ts +12 -0
  157. package/dist/src/data/transforms/transformFactory.d.ts.map +1 -0
  158. package/dist/src/data/transforms/transformFactory.js +59 -0
  159. package/dist/src/encoder/accessor.d.ts +15 -0
  160. package/dist/src/encoder/accessor.d.ts.map +1 -0
  161. package/dist/src/encoder/accessor.js +76 -0
  162. package/dist/src/encoder/accessor.test.js +47 -0
  163. package/dist/src/encoder/encoder.d.ts +144 -0
  164. package/dist/src/encoder/encoder.d.ts.map +1 -0
  165. package/dist/src/encoder/encoder.js +400 -0
  166. package/dist/src/encoder/encoder.test.js +98 -0
  167. package/dist/src/fonts/Lato-Regular.json +1267 -0
  168. package/dist/src/fonts/Lato-Regular.png +0 -0
  169. package/dist/src/fonts/OFL.txt +93 -0
  170. package/dist/src/fonts/README.md +3 -0
  171. package/dist/src/fonts/bmFontManager.d.ts +182 -0
  172. package/dist/src/fonts/bmFontManager.d.ts.map +1 -0
  173. package/dist/src/fonts/bmFontManager.js +359 -0
  174. package/dist/src/fonts/bmFontMetrics.d.ts +45 -0
  175. package/dist/src/fonts/bmFontMetrics.d.ts.map +1 -0
  176. package/dist/src/fonts/bmFontMetrics.js +108 -0
  177. package/dist/src/genome/genome.d.ts +172 -0
  178. package/dist/src/genome/genome.d.ts.map +1 -0
  179. package/dist/src/genome/genome.js +379 -0
  180. package/dist/src/genome/genome.test.js +226 -0
  181. package/dist/src/genome/genomeStore.d.ts +20 -0
  182. package/dist/src/genome/genomeStore.d.ts.map +1 -0
  183. package/dist/src/genome/genomeStore.js +54 -0
  184. package/dist/src/genome/locusFormat.d.ts +14 -0
  185. package/dist/src/genome/locusFormat.d.ts.map +1 -0
  186. package/dist/src/genome/locusFormat.js +37 -0
  187. package/dist/src/genome/scaleIndex.d.ts +6 -0
  188. package/dist/src/genome/scaleIndex.d.ts.map +1 -0
  189. package/dist/src/genome/scaleIndex.js +165 -0
  190. package/dist/src/genome/scaleIndex.test.js +78 -0
  191. package/dist/src/genome/scaleLocus.d.ts +3 -0
  192. package/dist/src/genome/scaleLocus.d.ts.map +1 -0
  193. package/dist/src/genome/scaleLocus.js +101 -0
  194. package/dist/src/genome/scaleLocus.test.js +4 -0
  195. package/dist/src/genomeSpy.d.ts +141 -0
  196. package/dist/src/genomeSpy.d.ts.map +1 -0
  197. package/dist/src/genomeSpy.js +788 -0
  198. package/dist/src/gl/arrayBuilder.d.ts +71 -0
  199. package/dist/src/gl/arrayBuilder.d.ts.map +1 -0
  200. package/dist/src/gl/arrayBuilder.js +199 -0
  201. package/dist/src/gl/dataToVertices.d.ts +194 -0
  202. package/dist/src/gl/dataToVertices.d.ts.map +1 -0
  203. package/dist/src/gl/dataToVertices.js +639 -0
  204. package/dist/src/gl/includes/common.glsl.js +2 -0
  205. package/dist/src/gl/includes/picking.fragment.glsl.js +2 -0
  206. package/dist/src/gl/includes/picking.vertex.glsl.js +2 -0
  207. package/dist/src/gl/includes/sampleFacet.glsl.js +2 -0
  208. package/dist/src/gl/includes/scales.glsl.js +2 -0
  209. package/dist/src/gl/link.fragment.glsl.js +2 -0
  210. package/dist/src/gl/link.vertex.glsl.js +2 -0
  211. package/dist/src/gl/point.fragment.glsl.js +2 -0
  212. package/dist/src/gl/point.vertex.glsl.js +2 -0
  213. package/dist/src/gl/rect.fragment.glsl.js +2 -0
  214. package/dist/src/gl/rect.vertex.glsl.js +2 -0
  215. package/dist/src/gl/rule.fragment.glsl.js +2 -0
  216. package/dist/src/gl/rule.vertex.glsl.js +2 -0
  217. package/dist/src/gl/text.fragment.glsl.js +2 -0
  218. package/dist/src/gl/text.vertex.glsl.js +2 -0
  219. package/dist/src/gl/webGLHelper.d.ts +118 -0
  220. package/dist/src/gl/webGLHelper.d.ts.map +1 -0
  221. package/dist/src/gl/webGLHelper.js +513 -0
  222. package/dist/src/img/bowtie.svg +1 -0
  223. package/dist/src/img/genomespy-favicon.svg +34 -0
  224. package/dist/src/index.d.ts +15 -0
  225. package/dist/src/index.d.ts.map +1 -0
  226. package/dist/src/index.html +11 -0
  227. package/dist/src/index.js +129 -0
  228. package/dist/src/marks/link.d.ts +11 -0
  229. package/dist/src/marks/link.d.ts.map +1 -0
  230. package/dist/src/marks/link.js +175 -0
  231. package/dist/src/marks/mark.d.ts +226 -0
  232. package/dist/src/marks/mark.d.ts.map +1 -0
  233. package/dist/src/marks/mark.js +1004 -0
  234. package/dist/src/marks/markUtils.d.ts +23 -0
  235. package/dist/src/marks/markUtils.d.ts.map +1 -0
  236. package/dist/src/marks/markUtils.js +125 -0
  237. package/dist/src/marks/pointMark.d.ts +11 -0
  238. package/dist/src/marks/pointMark.d.ts.map +1 -0
  239. package/dist/src/marks/pointMark.js +251 -0
  240. package/dist/src/marks/rectMark.d.ts +18 -0
  241. package/dist/src/marks/rectMark.d.ts.map +1 -0
  242. package/dist/src/marks/rectMark.js +255 -0
  243. package/dist/src/marks/rule.d.ts +6 -0
  244. package/dist/src/marks/rule.d.ts.map +1 -0
  245. package/dist/src/marks/rule.js +250 -0
  246. package/dist/src/marks/text.d.ts +13 -0
  247. package/dist/src/marks/text.d.ts.map +1 -0
  248. package/dist/src/marks/text.js +279 -0
  249. package/dist/src/scale/colorUtils.d.ts +34 -0
  250. package/dist/src/scale/colorUtils.d.ts.map +1 -0
  251. package/dist/src/scale/colorUtils.js +184 -0
  252. package/dist/src/scale/glslScaleGenerator.d.ts +45 -0
  253. package/dist/src/scale/glslScaleGenerator.d.ts.map +1 -0
  254. package/dist/src/scale/glslScaleGenerator.js +506 -0
  255. package/dist/src/scale/scale.d.ts +10 -0
  256. package/dist/src/scale/scale.d.ts.map +1 -0
  257. package/dist/src/scale/scale.js +456 -0
  258. package/dist/src/scale/scale.test.js +324 -0
  259. package/dist/src/scale/ticks.d.ts +47 -0
  260. package/dist/src/scale/ticks.d.ts.map +1 -0
  261. package/dist/src/scale/ticks.js +203 -0
  262. package/dist/src/scale/ticks.test.js +40 -0
  263. package/dist/src/singlePageApp.d.ts +2 -0
  264. package/dist/src/singlePageApp.d.ts.map +1 -0
  265. package/dist/src/singlePageApp.js +13 -0
  266. package/dist/src/spec/axis.d.ts +402 -0
  267. package/dist/src/spec/channel.d.ts +440 -0
  268. package/dist/src/spec/data.d.ts +370 -0
  269. package/dist/src/spec/font.d.ts +15 -0
  270. package/dist/src/spec/genome.d.ts +35 -0
  271. package/dist/src/spec/mark.d.ts +435 -0
  272. package/dist/src/spec/root.d.ts +22 -0
  273. package/dist/src/spec/sampleView.d.ts +185 -0
  274. package/dist/src/spec/scale.d.ts +273 -0
  275. package/dist/src/spec/title.d.ts +102 -0
  276. package/dist/src/spec/tooltip.d.ts +9 -0
  277. package/dist/src/spec/transform.d.ts +504 -0
  278. package/dist/src/spec/view.d.ts +214 -0
  279. package/dist/src/styles/genome-spy.css.d.ts +3 -0
  280. package/dist/src/styles/genome-spy.css.d.ts.map +1 -0
  281. package/dist/src/styles/genome-spy.css.js +114 -0
  282. package/dist/src/styles/genome-spy.scss +153 -0
  283. package/dist/src/tooltip/dataTooltipHandler.d.ts +2 -0
  284. package/dist/src/tooltip/dataTooltipHandler.d.ts.map +1 -0
  285. package/dist/src/tooltip/dataTooltipHandler.js +64 -0
  286. package/dist/src/tooltip/refseqGeneTooltipHandler.d.ts +2 -0
  287. package/dist/src/tooltip/refseqGeneTooltipHandler.d.ts.map +1 -0
  288. package/dist/src/tooltip/refseqGeneTooltipHandler.js +78 -0
  289. package/dist/src/tooltip/tooltipHandler.d.ts +9 -0
  290. package/dist/src/tooltip/tooltipHandler.d.ts.map +1 -0
  291. package/dist/src/tooltip/tooltipHandler.ts +12 -0
  292. package/dist/src/types/bmFont.d.ts +58 -0
  293. package/dist/src/types/embedApi.d.ts +67 -0
  294. package/dist/src/types/encoder.d.ts +84 -0
  295. package/dist/src/types/flowBatch.d.ts +40 -0
  296. package/dist/src/types/rendering.d.ts +65 -0
  297. package/dist/src/types/scaleResolutionApi.d.ts +40 -0
  298. package/dist/src/types/viewContext.d.ts +85 -0
  299. package/dist/src/utils/addBaseUrl.d.ts +6 -0
  300. package/dist/src/utils/addBaseUrl.d.ts.map +1 -0
  301. package/dist/src/utils/addBaseUrl.js +19 -0
  302. package/dist/src/utils/addBaseUrl.test.js +22 -0
  303. package/dist/src/utils/animator.d.ts +41 -0
  304. package/dist/src/utils/animator.d.ts.map +1 -0
  305. package/dist/src/utils/animator.js +83 -0
  306. package/dist/src/utils/arrayUtils.d.ts +34 -0
  307. package/dist/src/utils/arrayUtils.d.ts.map +1 -0
  308. package/dist/src/utils/arrayUtils.js +61 -0
  309. package/dist/src/utils/binnedIndex.d.ts +23 -0
  310. package/dist/src/utils/binnedIndex.d.ts.map +1 -0
  311. package/dist/src/utils/binnedIndex.js +167 -0
  312. package/dist/src/utils/binnedIndex.test.js +155 -0
  313. package/dist/src/utils/clamp.d.ts +7 -0
  314. package/dist/src/utils/clamp.d.ts.map +1 -0
  315. package/dist/src/utils/clamp.js +8 -0
  316. package/dist/src/utils/cloner.d.ts +16 -0
  317. package/dist/src/utils/cloner.d.ts.map +1 -0
  318. package/dist/src/utils/cloner.js +34 -0
  319. package/dist/src/utils/cloner.test.js +24 -0
  320. package/dist/src/utils/coalesce.d.ts +6 -0
  321. package/dist/src/utils/coalesce.d.ts.map +1 -0
  322. package/dist/src/utils/coalesce.js +11 -0
  323. package/dist/src/utils/coalesce.test.js +16 -0
  324. package/dist/src/utils/concatIterables.d.ts +8 -0
  325. package/dist/src/utils/concatIterables.d.ts.map +1 -0
  326. package/dist/src/utils/concatIterables.js +26 -0
  327. package/dist/src/utils/concatIterables.test.js +8 -0
  328. package/dist/src/utils/debounce.d.ts +8 -0
  329. package/dist/src/utils/debounce.d.ts.map +1 -0
  330. package/dist/src/utils/debounce.js +37 -0
  331. package/dist/src/utils/domainArray.d.ts +61 -0
  332. package/dist/src/utils/domainArray.d.ts.map +1 -0
  333. package/dist/src/utils/domainArray.js +216 -0
  334. package/dist/src/utils/domainArray.test.js +130 -0
  335. package/dist/src/utils/eerp.d.ts +12 -0
  336. package/dist/src/utils/eerp.d.ts.map +1 -0
  337. package/dist/src/utils/eerp.js +13 -0
  338. package/dist/src/utils/expression.d.ts +9 -0
  339. package/dist/src/utils/expression.d.ts.map +1 -0
  340. package/dist/src/utils/expression.js +32 -0
  341. package/dist/src/utils/field.d.ts +17 -0
  342. package/dist/src/utils/field.d.ts.map +1 -0
  343. package/dist/src/utils/field.js +28 -0
  344. package/dist/src/utils/formatObject.d.ts +7 -0
  345. package/dist/src/utils/formatObject.d.ts.map +1 -0
  346. package/dist/src/utils/formatObject.js +37 -0
  347. package/dist/src/utils/indexer.d.ts +16 -0
  348. package/dist/src/utils/indexer.d.ts.map +1 -0
  349. package/dist/src/utils/indexer.js +43 -0
  350. package/dist/src/utils/indexer.test.js +47 -0
  351. package/dist/src/utils/inertia.d.ts +42 -0
  352. package/dist/src/utils/inertia.d.ts.map +1 -0
  353. package/dist/src/utils/inertia.js +124 -0
  354. package/dist/src/utils/interactionEvent.d.ts +26 -0
  355. package/dist/src/utils/interactionEvent.d.ts.map +1 -0
  356. package/dist/src/utils/interactionEvent.js +33 -0
  357. package/dist/src/utils/iterateNestedMaps.d.ts +11 -0
  358. package/dist/src/utils/iterateNestedMaps.d.ts.map +1 -0
  359. package/dist/src/utils/iterateNestedMaps.js +21 -0
  360. package/dist/src/utils/iterateNestedMaps.test.js +33 -0
  361. package/dist/src/utils/kWayMerge.d.ts +9 -0
  362. package/dist/src/utils/kWayMerge.d.ts.map +1 -0
  363. package/dist/src/utils/kWayMerge.js +42 -0
  364. package/dist/src/utils/kWayMerge.test.js +26 -0
  365. package/dist/src/utils/layout/flexLayout.d.ts +182 -0
  366. package/dist/src/utils/layout/flexLayout.d.ts.map +1 -0
  367. package/dist/src/utils/layout/flexLayout.js +381 -0
  368. package/dist/src/utils/layout/flexLayout.test.js +323 -0
  369. package/dist/src/utils/layout/grid.d.ts +29 -0
  370. package/dist/src/utils/layout/grid.d.ts.map +1 -0
  371. package/dist/src/utils/layout/grid.js +95 -0
  372. package/dist/src/utils/layout/grid.test.js +71 -0
  373. package/dist/src/utils/layout/padding.d.ts +83 -0
  374. package/dist/src/utils/layout/padding.d.ts.map +1 -0
  375. package/dist/src/utils/layout/padding.js +155 -0
  376. package/dist/src/utils/layout/point.d.ts +16 -0
  377. package/dist/src/utils/layout/point.d.ts.map +1 -0
  378. package/dist/src/utils/layout/point.js +23 -0
  379. package/dist/src/utils/layout/rectangle.d.ts +142 -0
  380. package/dist/src/utils/layout/rectangle.d.ts.map +1 -0
  381. package/dist/src/utils/layout/rectangle.js +296 -0
  382. package/dist/src/utils/layout/rectangle.test.js +172 -0
  383. package/dist/src/utils/mergeObjects.d.ts +15 -0
  384. package/dist/src/utils/mergeObjects.d.ts.map +1 -0
  385. package/dist/src/utils/mergeObjects.js +99 -0
  386. package/dist/src/utils/mergeObjects.test.js +42 -0
  387. package/dist/src/utils/numberExtractor.d.ts +9 -0
  388. package/dist/src/utils/numberExtractor.d.ts.map +1 -0
  389. package/dist/src/utils/numberExtractor.js +24 -0
  390. package/dist/src/utils/numberExtractor.test.js +6 -0
  391. package/dist/src/utils/point.d.ts +9 -0
  392. package/dist/src/utils/point.d.ts.map +1 -0
  393. package/dist/src/utils/point.js +14 -0
  394. package/dist/src/utils/propertyCacher.d.ts +30 -0
  395. package/dist/src/utils/propertyCacher.d.ts.map +1 -0
  396. package/dist/src/utils/propertyCacher.js +70 -0
  397. package/dist/src/utils/propertyCacher.test.js +85 -0
  398. package/dist/src/utils/propertyCoalescer.d.ts +15 -0
  399. package/dist/src/utils/propertyCoalescer.d.ts.map +1 -0
  400. package/dist/src/utils/propertyCoalescer.js +42 -0
  401. package/dist/src/utils/propertyCoalescer.test.js +22 -0
  402. package/dist/src/utils/reservationMap.d.ts +42 -0
  403. package/dist/src/utils/reservationMap.d.ts.map +1 -0
  404. package/dist/src/utils/reservationMap.js +103 -0
  405. package/dist/src/utils/reservationMap.test.js +20 -0
  406. package/dist/src/utils/scaleNull.d.ts +13 -0
  407. package/dist/src/utils/scaleNull.d.ts.map +1 -0
  408. package/dist/src/utils/scaleNull.js +21 -0
  409. package/dist/src/utils/setOperations.d.ts +31 -0
  410. package/dist/src/utils/setOperations.d.ts.map +1 -0
  411. package/dist/src/utils/setOperations.js +75 -0
  412. package/dist/src/utils/smoothstep.d.ts +7 -0
  413. package/dist/src/utils/smoothstep.d.ts.map +1 -0
  414. package/dist/src/utils/smoothstep.js +10 -0
  415. package/dist/src/utils/throttle.d.ts +8 -0
  416. package/dist/src/utils/throttle.d.ts.map +1 -0
  417. package/dist/src/utils/throttle.js +34 -0
  418. package/dist/src/utils/topK.d.ts +22 -0
  419. package/dist/src/utils/topK.d.ts.map +1 -0
  420. package/dist/src/utils/topK.js +76 -0
  421. package/dist/src/utils/topK.test.js +64 -0
  422. package/dist/src/utils/transition.d.ts +44 -0
  423. package/dist/src/utils/transition.d.ts.map +1 -0
  424. package/dist/src/utils/transition.js +74 -0
  425. package/dist/src/utils/trees.d.ts +56 -0
  426. package/dist/src/utils/trees.d.ts.map +1 -0
  427. package/dist/src/utils/trees.js +92 -0
  428. package/dist/src/utils/trees.test.js +130 -0
  429. package/dist/src/utils/ui/tooltip.d.ts +50 -0
  430. package/dist/src/utils/ui/tooltip.d.ts.map +1 -0
  431. package/dist/src/utils/ui/tooltip.js +189 -0
  432. package/dist/src/utils/url.d.ts +9 -0
  433. package/dist/src/utils/url.d.ts.map +1 -0
  434. package/dist/src/utils/url.js +22 -0
  435. package/dist/src/utils/variableTools.d.ts +14 -0
  436. package/dist/src/utils/variableTools.d.ts.map +1 -0
  437. package/dist/src/utils/variableTools.js +24 -0
  438. package/dist/src/utils/variableTools.test.js +13 -0
  439. package/dist/src/view/axisGridView.d.ts +39 -0
  440. package/dist/src/view/axisGridView.d.ts.map +1 -0
  441. package/dist/src/view/axisGridView.js +246 -0
  442. package/dist/src/view/axisResolution.d.ts +24 -0
  443. package/dist/src/view/axisResolution.d.ts.map +1 -0
  444. package/dist/src/view/axisResolution.js +141 -0
  445. package/dist/src/view/axisResolution.test.js +201 -0
  446. package/dist/src/view/axisView.d.ts +49 -0
  447. package/dist/src/view/axisView.d.ts.map +1 -0
  448. package/dist/src/view/axisView.js +629 -0
  449. package/dist/src/view/concatView.d.ts +16 -0
  450. package/dist/src/view/concatView.d.ts.map +1 -0
  451. package/dist/src/view/concatView.js +84 -0
  452. package/dist/src/view/containerView.d.ts +43 -0
  453. package/dist/src/view/containerView.d.ts.map +1 -0
  454. package/dist/src/view/containerView.js +137 -0
  455. package/dist/src/view/facetView.d.ts +71 -0
  456. package/dist/src/view/facetView.d.ts.map +1 -0
  457. package/dist/src/view/facetView.js +492 -0
  458. package/dist/src/view/flowBuilder.d.ts +37 -0
  459. package/dist/src/view/flowBuilder.d.ts.map +1 -0
  460. package/dist/src/view/flowBuilder.js +383 -0
  461. package/dist/src/view/flowBuilder.test.js +125 -0
  462. package/dist/src/view/gridView.d.ts +111 -0
  463. package/dist/src/view/gridView.d.ts.map +1 -0
  464. package/dist/src/view/gridView.js +1086 -0
  465. package/dist/src/view/implicitRootView.d.ts +9 -0
  466. package/dist/src/view/implicitRootView.d.ts.map +1 -0
  467. package/dist/src/view/implicitRootView.js +23 -0
  468. package/dist/src/view/importView.d.ts +17 -0
  469. package/dist/src/view/importView.d.ts.map +1 -0
  470. package/dist/src/view/importView.js +22 -0
  471. package/dist/src/view/layerView.d.ts +25 -0
  472. package/dist/src/view/layerView.d.ts.map +1 -0
  473. package/dist/src/view/layerView.js +77 -0
  474. package/dist/src/view/renderingContext/bufferedViewRenderingContext.d.ts +30 -0
  475. package/dist/src/view/renderingContext/bufferedViewRenderingContext.d.ts.map +1 -0
  476. package/dist/src/view/renderingContext/bufferedViewRenderingContext.js +175 -0
  477. package/dist/src/view/renderingContext/compositeViewRenderingContext.d.ts +14 -0
  478. package/dist/src/view/renderingContext/compositeViewRenderingContext.d.ts.map +1 -0
  479. package/dist/src/view/renderingContext/compositeViewRenderingContext.js +51 -0
  480. package/dist/src/view/renderingContext/debuggingViewRenderingContext.d.ts +51 -0
  481. package/dist/src/view/renderingContext/debuggingViewRenderingContext.d.ts.map +1 -0
  482. package/dist/src/view/renderingContext/debuggingViewRenderingContext.js +94 -0
  483. package/dist/src/view/renderingContext/layoutRecorderViewRenderingContext.d.ts +60 -0
  484. package/dist/src/view/renderingContext/layoutRecorderViewRenderingContext.d.ts.map +1 -0
  485. package/dist/src/view/renderingContext/layoutRecorderViewRenderingContext.js +128 -0
  486. package/dist/src/view/renderingContext/simpleViewRenderingContext.d.ts +19 -0
  487. package/dist/src/view/renderingContext/simpleViewRenderingContext.d.ts.map +1 -0
  488. package/dist/src/view/renderingContext/simpleViewRenderingContext.js +64 -0
  489. package/dist/src/view/renderingContext/svgViewRenderingContext.d.ts +22 -0
  490. package/dist/src/view/renderingContext/svgViewRenderingContext.d.ts.map +1 -0
  491. package/dist/src/view/renderingContext/svgViewRenderingContext.js +125 -0
  492. package/dist/src/view/renderingContext/viewRenderingContext.d.ts +33 -0
  493. package/dist/src/view/renderingContext/viewRenderingContext.d.ts.map +1 -0
  494. package/dist/src/view/renderingContext/viewRenderingContext.js +41 -0
  495. package/dist/src/view/scaleResolution.d.ts +170 -0
  496. package/dist/src/view/scaleResolution.d.ts.map +1 -0
  497. package/dist/src/view/scaleResolution.js +874 -0
  498. package/dist/src/view/scaleResolution.test.js +658 -0
  499. package/dist/src/view/testUtils.d.ts +30 -0
  500. package/dist/src/view/testUtils.d.ts.map +1 -0
  501. package/dist/src/view/testUtils.js +101 -0
  502. package/dist/src/view/title.d.ts +6 -0
  503. package/dist/src/view/title.d.ts.map +1 -0
  504. package/dist/src/view/title.js +165 -0
  505. package/dist/src/view/unitView.d.ts +93 -0
  506. package/dist/src/view/unitView.d.ts.map +1 -0
  507. package/dist/src/view/unitView.js +345 -0
  508. package/dist/src/view/view.d.ts +291 -0
  509. package/dist/src/view/view.d.ts.map +1 -0
  510. package/dist/src/view/view.js +691 -0
  511. package/dist/src/view/view.test.js +214 -0
  512. package/dist/src/view/viewFactory.d.ts +76 -0
  513. package/dist/src/view/viewFactory.d.ts.map +1 -0
  514. package/dist/src/view/viewFactory.js +178 -0
  515. package/dist/src/view/viewFactory.test.js +17 -0
  516. package/dist/src/view/viewUtils.d.ts +90 -0
  517. package/dist/src/view/viewUtils.d.ts.map +1 -0
  518. package/dist/src/view/viewUtils.js +326 -0
  519. package/dist/src/view/zoom.d.ts +23 -0
  520. package/dist/src/view/zoom.d.ts.map +1 -0
  521. package/dist/src/view/zoom.js +89 -0
  522. package/package.json +17 -12
  523. package/dist/style.css +0 -1
@@ -0,0 +1,345 @@
1
+ import RectMark from "../marks/rectMark";
2
+ import PointMark from "../marks/pointMark";
3
+ import RuleMark from "../marks/rule";
4
+ import LinkMark from "../marks/link";
5
+ import TextMark from "../marks/text";
6
+
7
+ import ContainerView from "./containerView";
8
+ import ScaleResolution from "./scaleResolution";
9
+ import {
10
+ isSecondaryChannel,
11
+ secondaryChannels,
12
+ isPositionalChannel,
13
+ isChannelDefWithScale,
14
+ primaryPositionalChannels,
15
+ getPrimaryChannel,
16
+ isChannelWithScale,
17
+ isPrimaryPositionalChannel,
18
+ } from "../encoder/encoder";
19
+ import createDomain from "../utils/domainArray";
20
+ import AxisResolution from "./axisResolution";
21
+
22
+ /**
23
+ *
24
+ * @type {Object.<string, typeof import("../marks/mark").default>}
25
+ * TODO: Find a proper place, make extendible
26
+ */
27
+ export const markTypes = {
28
+ point: PointMark,
29
+ rect: RectMark,
30
+ rule: RuleMark,
31
+ link: LinkMark,
32
+ text: TextMark,
33
+ };
34
+
35
+ export default class UnitView extends ContainerView {
36
+ /**
37
+ * @typedef {import("../spec/channel").Channel} Channel
38
+ * @typedef {import("./view").default} View
39
+ * @typedef {import("./layerView").default} LayerView
40
+ * @typedef {import("../utils/domainArray").DomainArray} DomainArray
41
+ * @typedef {import("../spec/view").ResolutionTarget} ResolutionTarget
42
+ *
43
+ */
44
+ /**
45
+ *
46
+ * @param {import("../spec/view").UnitSpec} spec
47
+ * @param {import("../types/viewContext").default} context
48
+ * @param {import("./containerView").default} layoutParent
49
+ * @param {import("./view").default} dataParent
50
+ * @param {string} name
51
+ */
52
+ constructor(spec, context, layoutParent, dataParent, name) {
53
+ super(spec, context, layoutParent, dataParent, name);
54
+
55
+ this.spec = spec; // Set here again to keep types happy
56
+
57
+ const Mark = markTypes[this.getMarkType()];
58
+ if (Mark) {
59
+ /** @type {import("../marks/mark").default} */
60
+ this.mark = new Mark(this);
61
+ } else {
62
+ throw new Error(`No such mark: ${this.getMarkType()}`);
63
+ }
64
+
65
+ /**
66
+ * Not nice! Inconsistent when faceting!
67
+ * TODO: Something. Maybe store only width/height
68
+ * @type {import("../utils/layout/rectangle").default}
69
+ */
70
+ this.coords = undefined;
71
+
72
+ this.needsAxes = { x: true, y: true };
73
+ }
74
+
75
+ /**
76
+ * @param {import("./renderingContext/viewRenderingContext").default} context
77
+ * @param {import("../utils/layout/rectangle").default} coords
78
+ * @param {import("../types/rendering").RenderingOptions} [options]
79
+ */
80
+ render(context, coords, options = {}) {
81
+ if (!this.isConfiguredVisible()) {
82
+ return;
83
+ }
84
+
85
+ this.coords = coords;
86
+
87
+ context.pushView(this, coords);
88
+ context.renderMark(this.mark, options);
89
+ context.popView(this);
90
+ }
91
+
92
+ getMarkType() {
93
+ return typeof this.spec.mark == "object"
94
+ ? this.spec.mark.type
95
+ : this.spec.mark;
96
+ }
97
+
98
+ /**
99
+ * Pulls scales and axes up in the view hierarcy according to the resolution rules, using dataParents.
100
+ * TODO: legends
101
+ *
102
+ * @param {ResolutionTarget} type
103
+ */
104
+ resolve(type) {
105
+ // TODO: Complain about nonsensical configuration, e.g. shared parent has independent children.
106
+
107
+ const encoding = this.mark.encoding;
108
+
109
+ for (const [channel, channelDef] of Object.entries(encoding)) {
110
+ if (!isChannelDefWithScale(channelDef)) {
111
+ continue;
112
+ }
113
+
114
+ const targetChannel = getPrimaryChannel(
115
+ channelDef.resolutionChannel ?? channel
116
+ );
117
+
118
+ if (!isChannelWithScale(targetChannel)) {
119
+ continue;
120
+ }
121
+
122
+ if (type == "axis" && !isPositionalChannel(targetChannel)) {
123
+ continue;
124
+ }
125
+
126
+ // eslint-disable-next-line consistent-this
127
+ let view = this;
128
+ while (
129
+ (view.getConfiguredOrDefaultResolution(targetChannel, type) ==
130
+ "forced" ||
131
+ (view.dataParent instanceof ContainerView &&
132
+ ["shared", "excluded", "forced"].includes(
133
+ view.dataParent.getConfiguredOrDefaultResolution(
134
+ targetChannel,
135
+ type
136
+ )
137
+ ))) &&
138
+ view.getConfiguredOrDefaultResolution(targetChannel, type) !=
139
+ "excluded"
140
+ ) {
141
+ // @ts-ignore
142
+ view = view.dataParent;
143
+ }
144
+
145
+ // Quite a bit of redundancy, but makes type checker happy.
146
+ if (
147
+ type == "axis" &&
148
+ isPositionalChannel(channel) &&
149
+ isPrimaryPositionalChannel(targetChannel)
150
+ ) {
151
+ if (!view.resolutions[type][targetChannel]) {
152
+ view.resolutions[type][targetChannel] = new AxisResolution(
153
+ targetChannel
154
+ );
155
+ }
156
+ view.resolutions[type][targetChannel].pushUnitView(
157
+ this,
158
+ channel
159
+ );
160
+ } else if (type == "scale" && isChannelWithScale(channel)) {
161
+ if (!view.resolutions[type][targetChannel]) {
162
+ view.resolutions[type][targetChannel] = new ScaleResolution(
163
+ targetChannel
164
+ );
165
+ }
166
+ view.resolutions[type][targetChannel].pushUnitView(
167
+ this,
168
+ channel
169
+ );
170
+ }
171
+ }
172
+ }
173
+
174
+ /**
175
+ *
176
+ * @param {Channel} channel
177
+ */
178
+ getAccessor(channel) {
179
+ return this._cache("accessor/" + channel, () => {
180
+ const encoding = this.mark.encoding; // Mark provides encodings with defaults and possible modifications
181
+ if (encoding && encoding[channel]) {
182
+ return this.context.accessorFactory.createAccessor(
183
+ encoding[channel]
184
+ );
185
+ }
186
+ });
187
+ }
188
+
189
+ /**
190
+ * Returns an accessor that returns a (composite) key for partitioning the data
191
+ *
192
+ * @param {View} [whoIsAsking]
193
+ * @returns {function(object):any}
194
+ */
195
+ getFacetAccessor(whoIsAsking) {
196
+ // TODO: Rewrite, call getFacetFields
197
+ const sampleAccessor = this.getAccessor("sample");
198
+ if (sampleAccessor) {
199
+ return sampleAccessor;
200
+ }
201
+
202
+ return super.getFacetAccessor(this);
203
+ }
204
+
205
+ /**
206
+ * Returns a collector that is associated with this view.
207
+ */
208
+ getCollector() {
209
+ return this.context.dataFlow.findCollectorByKey(this);
210
+ }
211
+
212
+ /**
213
+ * @param {Channel} channel A primary channel
214
+ */
215
+ _validateDomainQuery(channel) {
216
+ if (isSecondaryChannel(channel)) {
217
+ throw new Error(
218
+ `getDomain(${channel}), must only be called for primary channels!`
219
+ );
220
+ }
221
+
222
+ const channelDef = this.mark.encoding[channel];
223
+ // TODO: Broken. Fix.
224
+ if (!isChannelDefWithScale(channelDef)) {
225
+ throw new Error("The channel has no scale, cannot get domain!");
226
+ }
227
+
228
+ return channelDef;
229
+ }
230
+
231
+ /**
232
+ * Returns the domain of the specified channel of this domain/mark.
233
+ *
234
+ * @param {import("../spec/channel").ChannelWithScale} channel A primary channel
235
+ * @returns {DomainArray}
236
+ */
237
+ getConfiguredDomain(channel) {
238
+ const channelDef = this._validateDomainQuery(channel);
239
+
240
+ const specDomain =
241
+ channelDef && channelDef.scale && channelDef.scale.domain;
242
+ if (specDomain) {
243
+ const scaleResolution = this.getScaleResolution(
244
+ channelDef.resolutionChannel ?? channel
245
+ );
246
+ return createDomain(
247
+ channelDef.type ?? "nominal",
248
+ // Chrom/pos must be linearized first
249
+ scaleResolution.fromComplexInterval(specDomain)
250
+ );
251
+ }
252
+ }
253
+
254
+ /**
255
+ * Extracts the domain from the data.
256
+ *
257
+ * TODO: Optimize! Now this performs redundant work if multiple views share the same collector.
258
+ * Also, all relevant fields should be processed in one iteration: https://jsbench.me/y5kkqy52jo/1
259
+ * In fact, domain extraction could be a responsibility of the collector: As it handles data items,
260
+ * it extracts domains for all fields (and data types) that need extracted domains.
261
+ * Alternatively, extractor nodes could be added to the data flow, just like Vega does
262
+ * (with aggregate and extent).
263
+ *
264
+ * @param {Channel} channel
265
+ * @returns {DomainArray}
266
+ */
267
+ extractDataDomain(channel) {
268
+ const channelDef = this._validateDomainQuery(channel);
269
+ const type = channelDef.type ?? "nominal"; // TODO: Should check that this is a channel without scale
270
+
271
+ /** @param {Channel} channel */
272
+ const extract = (channel) => {
273
+ /** @type {DomainArray} */
274
+ let domain;
275
+
276
+ const encodingSpec = this.mark.encoding[channel];
277
+
278
+ if (encodingSpec) {
279
+ const accessor =
280
+ this.context.accessorFactory.createAccessor(encodingSpec);
281
+ if (accessor) {
282
+ domain = createDomain(type);
283
+
284
+ if (accessor.constant) {
285
+ domain.extend(accessor({}));
286
+ } else {
287
+ const collector = this.getCollector();
288
+ if (collector?.completed) {
289
+ collector.visitData((d) =>
290
+ domain.extend(accessor(d))
291
+ );
292
+ }
293
+ }
294
+ }
295
+ }
296
+ return domain;
297
+ };
298
+
299
+ let domain = extract(channel);
300
+
301
+ const secondaryChannel = secondaryChannels[channel];
302
+ if (secondaryChannel) {
303
+ const secondaryDomain = extract(secondaryChannel);
304
+ if (secondaryDomain) {
305
+ domain.extendAll(secondaryDomain);
306
+ }
307
+ }
308
+
309
+ return domain;
310
+ }
311
+
312
+ getZoomLevel() {
313
+ /** @param {import("../spec/channel").ChannelWithScale} channel */
314
+ const getZoomLevel = (channel) =>
315
+ this.getScaleResolution(channel)?.getZoomLevel() ?? 1.0;
316
+
317
+ return primaryPositionalChannels
318
+ .map(getZoomLevel)
319
+ .reduce((a, c) => a * c, 1);
320
+ }
321
+
322
+ /**
323
+ * @param {import("../utils/interactionEvent").default} event
324
+ */
325
+ propagateInteractionEvent(event) {
326
+ this.handleInteractionEvent(undefined, event, true);
327
+ event.target = this;
328
+
329
+ if (event.stopped) {
330
+ return;
331
+ }
332
+
333
+ this.handleInteractionEvent(undefined, event, false);
334
+ }
335
+
336
+ /**
337
+ * @param {string} channel
338
+ * @param {ResolutionTarget} resolutionType
339
+ * @returns {import("../spec/view").ResolutionBehavior}
340
+ */
341
+ getDefaultResolution(channel, resolutionType) {
342
+ // This affects the sample aggregate views.
343
+ return channel == "x" ? "shared" : "independent";
344
+ }
345
+ }
@@ -0,0 +1,291 @@
1
+ /** Skip children */
2
+ export const VISIT_SKIP: "VISIT_SKIP";
3
+ /** Stop further visits */
4
+ export const VISIT_STOP: "VISIT_STOP";
5
+ /**
6
+ * @typedef {VISIT_SKIP|VISIT_STOP|void} VisitResult
7
+ *
8
+ * @callback VisitorCallback
9
+ * @param {View} view
10
+ * @returns {VisitResult}
11
+ *
12
+ * @typedef {VisitorCallback & {
13
+ * postOrder?: function(View):void,
14
+ * beforeChildren?: function(View):void,
15
+ * afterChildren?: function(View):void}
16
+ * } Visitor
17
+ *
18
+ * @typedef {object} BroadcastMessage
19
+ * @prop {import("../genomeSpy").BroadcastEventType} type Broadcast type
20
+ * @prop {any} [payload] Anything
21
+ *
22
+ * @callback InteractionEventListener
23
+ * @param {import("../utils/layout/rectangle").default} coords
24
+ * Coordinates of the view
25
+ * @param {import("../utils/interactionEvent").default} event
26
+ */
27
+ export default class View {
28
+ /**
29
+ *
30
+ * @param {import("../spec/view").ViewSpec} spec
31
+ * @param {import("../types/viewContext").default} context
32
+ * @param {import("./containerView").default} layoutParent Parent that handles rendering of this view
33
+ * @param {import("./view").default} dataParent Parent that provides data, encodings, and is used in scale resolution
34
+ * @param {string} name
35
+ */
36
+ constructor(spec: import("../spec/view").ViewSpec, context: import("../types/viewContext").default, layoutParent: import("./containerView").default, dataParent: import("./view").default, name: string);
37
+ /**
38
+ * @type {function(number):number}
39
+ */
40
+ opacityFunction: (arg0: number) => number;
41
+ context: import("../types/viewContext").default;
42
+ layoutParent: import("./containerView").default;
43
+ dataParent: View;
44
+ name: string;
45
+ spec: import("../spec/view").ViewSpec;
46
+ resolutions: {
47
+ /**
48
+ * Channel-specific scale resolutions
49
+ * @type {Partial<Record<import("../spec/channel").ChannelWithScale, import("./scaleResolution").default>>}
50
+ */
51
+ scale: Partial<Record<import("../spec/channel").ChannelWithScale, import("./scaleResolution").default>>;
52
+ /**
53
+ * Channel-specific axis resolutions
54
+ * @type {Partial<Record<import("../spec/channel").PrimaryPositionalChannel, import("./axisResolution").default>>}
55
+ */
56
+ axis: Partial<Record<import("../spec/channel").PrimaryPositionalChannel, import("./axisResolution").default>>;
57
+ };
58
+ /**
59
+ * Don't inherit encodings from parent.
60
+ * TODO: Make configurable through spec. Allow more fine-grained control.
61
+ */
62
+ blockEncodingInheritance: boolean;
63
+ /**
64
+ * Whether ScaleResolution should include this view or its children in the domain.
65
+ * This is mainly used to block axis views from contributing to the domain.
66
+ */
67
+ contributesToScaleDomain: boolean;
68
+ /**
69
+ * Whether GridView or equivalent should draw axis and grid lines for this view.
70
+ * @type {Record<import("../spec/channel").PrimaryPositionalChannel, boolean>}
71
+ */
72
+ needsAxes: Record<import("../spec/channel").PrimaryPositionalChannel, boolean>;
73
+ getPadding(): Padding;
74
+ /**
75
+ * Returns a padding that indicates how much axes and titles extend over the plot area.
76
+ *
77
+ * @returns {Padding}
78
+ */
79
+ getOverhang(): Padding;
80
+ /**
81
+ * Returns the configured size, if present. Otherwise a computed or default
82
+ * height is returned.
83
+ *
84
+ * @returns {FlexDimensions}
85
+ */
86
+ getSize(): FlexDimensions;
87
+ isConfiguredVisible(): boolean;
88
+ isVisibleInSpec(): boolean;
89
+ /**
90
+ * Returns the effective visibility of this view, e.g., whether this view
91
+ * and all its ancestors are visible.
92
+ *
93
+ * When doing a depth-first traversal on the view hierarchy, it's best to
94
+ * use `isConfiguredVisible()` instead of this method.
95
+ *
96
+ * @returns {boolean}
97
+ */
98
+ isVisible(): boolean;
99
+ /**
100
+ * Returns the effective opacity of this view, e.g., view's opacity multiplied
101
+ * by opacities of its ancestors.
102
+ *
103
+ * TODO: This methods makes sense only in Unit and Layer views.
104
+ *
105
+ * @returns {number}
106
+ */
107
+ getEffectiveOpacity(): number;
108
+ getPathString(): string;
109
+ /**
110
+ * Returns the ancestor views, starting with this view.
111
+ */
112
+ getLayoutAncestors(): View[];
113
+ /**
114
+ * Returns the ancestor views, starting with this view.
115
+ */
116
+ getDataAncestors(): View[];
117
+ /**
118
+ * Handles a broadcast message that is intended for the whole view hierarchy.
119
+ *
120
+ * @param {BroadcastMessage} message
121
+ */
122
+ handleBroadcast(message: BroadcastMessage): void;
123
+ /**
124
+ *
125
+ * @param {string} type
126
+ * @param {function(BroadcastMessage):void} handler
127
+ */
128
+ _addBroadcastHandler(type: string, handler: (arg0: BroadcastMessage) => void): void;
129
+ /**
130
+ * Handles an interactionEvent
131
+ *
132
+ * @param {import("../utils/layout/rectangle").default} coords
133
+ * Coordinates of the view
134
+ * @param {import("../utils/interactionEvent").default} event
135
+ * @param {boolean} capturing
136
+ */
137
+ handleInteractionEvent(coords: import("../utils/layout/rectangle").default, event: import("../utils/interactionEvent").default, capturing: boolean): void;
138
+ /**
139
+ * Add an "interaction" event listener that mimics DOM's event model inside
140
+ * the view hierarchy.
141
+ *
142
+ * This is intended for GenomeSpy's internal use. It allows the views to handle
143
+ * low level interactions such as dragging, wheeling, etc.
144
+ *
145
+ * @param {string} type
146
+ * @param {InteractionEventListener} listener
147
+ * @param {boolean} [useCapture]
148
+ */
149
+ addInteractionEventListener(type: string, listener: InteractionEventListener, useCapture?: boolean): void;
150
+ /**
151
+ * Visits child views in depth-first order. Visitor's return value
152
+ * controls the traversal.
153
+ *
154
+ * @param {Visitor} visitor
155
+ * @returns {VisitResult}
156
+ *
157
+ */
158
+ visit(visitor: Visitor): VisitResult;
159
+ /**
160
+ * Get all descendants of this view in depth-first order.
161
+ */
162
+ getDescendants(): View[];
163
+ /**
164
+ * Called after all scales in the view hierarchy have been resolved.
165
+ */
166
+ onScalesResolved(): void;
167
+ /**
168
+ * ViewRenderingContext calls this method once for each view during each rendering
169
+ * pass. The order is depth first, pre order.
170
+ */
171
+ onBeforeRender(): void;
172
+ render(context: ViewRenderingContext, coords: import("../utils/layout/rectangle").default, options?: import("../types/rendering").RenderingOptions): void;
173
+ /**
174
+ * Returns the encodings specified in this view combined with the inherited
175
+ * encodings. However, this does not contain any defaults or inferred/adjusted/fixed
176
+ * encodings. Those are available in Mark's encoding property.
177
+ *
178
+ * @return {import("../spec/channel").Encoding}
179
+ */
180
+ getEncoding(): import("../spec/channel").Encoding;
181
+ /**
182
+ * @param {View} [whoIsAsking] Passed to the immediate parent. Allows for
183
+ * selectively breaking the inheritance.
184
+ * @return {function(object):any}
185
+ */
186
+ getFacetAccessor(whoIsAsking?: View): (arg0: object) => any;
187
+ /**
188
+ * Returns the fields that should be used for partitioning the data for facets.
189
+ *
190
+ * @param {View} [whoIsAsking]
191
+ * @returns {string[]}
192
+ */
193
+ getFacetFields(whoIsAsking?: View): string[];
194
+ /**
195
+ * Returns a texture that has a mapping for the sample locations. This is implemented
196
+ * only in the SampleView of GenomeSpy App.
197
+ *
198
+ * Background:
199
+ * There are to ways to manage how sample facets are drawn in the App:
200
+ *
201
+ * 1) Use one draw call for each facet and pass the location data as a uniform.
202
+ * 2) Draw all facets with one call and pass the facet locations as a texture.
203
+ *
204
+ * The former is suitable for large datasets, which can be subsetted for better
205
+ * performance. The latter one is more performant for cases where each facet
206
+ * consists of few data items (sample attributes / metadata).
207
+ *
208
+ * @return {WebGLTexture}
209
+ */
210
+ getSampleFacetTexture(): WebGLTexture;
211
+ /**
212
+ * @param {import("../spec/channel").ChannelWithScale} channel
213
+ */
214
+ getScaleResolution(channel: import("../spec/channel").ChannelWithScale): import("./scaleResolution").default;
215
+ /**
216
+ * @param {import("../spec/channel").PositionalChannel} channel
217
+ */
218
+ getAxisResolution(channel: import("../spec/channel").PositionalChannel): import("./axisResolution").default;
219
+ /**
220
+ * @param {import("../spec/channel").Channel | "default"} channel
221
+ * @param {import("../spec/view").ResolutionTarget} resolutionType
222
+ * @returns {import("../spec/view").ResolutionBehavior}
223
+ */
224
+ getConfiguredResolution(channel: import("../spec/channel").Channel | "default", resolutionType: import("../spec/view").ResolutionTarget): import("../spec/view").ResolutionBehavior;
225
+ /**
226
+ * @param {import("../spec/channel").Channel} channel
227
+ * @param {import("../spec/view").ResolutionTarget} resolutionType
228
+ * @returns {import("../spec/view").ResolutionBehavior}
229
+ */
230
+ getConfiguredOrDefaultResolution(channel: import("../spec/channel").Channel, resolutionType: import("../spec/view").ResolutionTarget): import("../spec/view").ResolutionBehavior;
231
+ /**
232
+ * @param {import("../spec/channel").Channel} channel
233
+ * @param {import("../spec/view").ResolutionTarget} resolutionType
234
+ * @returns {import("../spec/view").ResolutionBehavior}
235
+ */
236
+ getDefaultResolution(channel: import("../spec/channel").Channel, resolutionType: import("../spec/view").ResolutionTarget): import("../spec/view").ResolutionBehavior;
237
+ /**
238
+ * @returns {string}
239
+ */
240
+ getBaseUrl(): string;
241
+ /**
242
+ * Returns `true` if this view and its children supports picking.
243
+ */
244
+ isPickingSupported(): boolean;
245
+ getTitleText(): string;
246
+ /**
247
+ * @param {any} key string
248
+ * @param {function(key?):T} callable A function that produces a value to be cached
249
+ * @returns {T}
250
+ * @template T
251
+ * @protected
252
+ */
253
+ protected _cache<T>(key: any, callable: (arg0: any | null) => T): T;
254
+ /**
255
+ *
256
+ * @param {string} key
257
+ * @param {"self" | "progeny" | "ancestors"} [direction]
258
+ */
259
+ _invalidateCacheByPrefix(key: string, direction?: "self" | "progeny" | "ancestors"): void;
260
+ invalidateSizeCache(): void;
261
+ /**
262
+ * Broadcasts a message to views that include the given (x, y) point.
263
+ * This is mainly intended for mouse events.
264
+ *
265
+ * @param {import("../utils/interactionEvent").default} event
266
+ */
267
+ propagateInteractionEvent(event: import("../utils/interactionEvent").default): void;
268
+ #private;
269
+ }
270
+ export function isStepSize(size: any): size is import("../spec/view").Step;
271
+ export type VisitResult = "VISIT_SKIP" | "VISIT_STOP" | void;
272
+ export type VisitorCallback = (view: View) => VisitResult;
273
+ export type Visitor = VisitorCallback & {
274
+ postOrder?: (arg0: View) => void;
275
+ beforeChildren?: (arg0: View) => void;
276
+ afterChildren?: (arg0: View) => void;
277
+ };
278
+ export type BroadcastMessage = {
279
+ /**
280
+ * Broadcast type
281
+ */
282
+ type: import("../genomeSpy").BroadcastEventType;
283
+ /**
284
+ * Anything
285
+ */
286
+ payload?: any;
287
+ };
288
+ export type InteractionEventListener = (coords: import("../utils/layout/rectangle").default, event: import("../utils/interactionEvent").default) => any;
289
+ import Padding from "../utils/layout/padding";
290
+ import { FlexDimensions } from "../utils/layout/flexLayout";
291
+ //# sourceMappingURL=view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/view/view.js"],"names":[],"mappings":"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"}