@jbrowse/plugin-wiggle 1.7.11 → 2.1.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 (446) hide show
  1. package/dist/BigWigAdapter/BigWigAdapter.d.ts +8 -7
  2. package/dist/BigWigAdapter/BigWigAdapter.js +205 -283
  3. package/dist/BigWigAdapter/BigWigAdapter.js.map +1 -0
  4. package/dist/BigWigAdapter/configSchema.js +17 -21
  5. package/dist/BigWigAdapter/configSchema.js.map +1 -0
  6. package/dist/BigWigAdapter/index.d.ts +3 -1
  7. package/dist/BigWigAdapter/index.js +42 -12
  8. package/dist/BigWigAdapter/index.js.map +1 -0
  9. package/dist/CreateMultiWiggleExtension/ConfirmDialog.d.ts +9 -0
  10. package/dist/CreateMultiWiggleExtension/ConfirmDialog.js +68 -0
  11. package/dist/CreateMultiWiggleExtension/ConfirmDialog.js.map +1 -0
  12. package/dist/CreateMultiWiggleExtension/index.d.ts +2 -0
  13. package/dist/CreateMultiWiggleExtension/index.js +111 -0
  14. package/dist/CreateMultiWiggleExtension/index.js.map +1 -0
  15. package/dist/DensityRenderer/DensityRenderer.d.ts +6 -0
  16. package/dist/DensityRenderer/DensityRenderer.js +74 -0
  17. package/dist/DensityRenderer/DensityRenderer.js.map +1 -0
  18. package/dist/DensityRenderer/configSchema.d.ts +2 -0
  19. package/dist/DensityRenderer/configSchema.js +10 -0
  20. package/dist/DensityRenderer/configSchema.js.map +1 -0
  21. package/dist/DensityRenderer/index.d.ts +3 -6
  22. package/dist/DensityRenderer/index.js +17 -135
  23. package/dist/DensityRenderer/index.js.map +1 -0
  24. package/dist/LinePlotRenderer/LinePlotRenderer.d.ts +4 -2
  25. package/dist/LinePlotRenderer/LinePlotRenderer.js +83 -168
  26. package/dist/LinePlotRenderer/LinePlotRenderer.js.map +1 -0
  27. package/dist/LinePlotRenderer/configSchema.d.ts +2 -2
  28. package/dist/LinePlotRenderer/configSchema.js +15 -69
  29. package/dist/LinePlotRenderer/configSchema.js.map +1 -0
  30. package/dist/LinePlotRenderer/index.d.ts +3 -3
  31. package/dist/LinePlotRenderer/index.js +17 -32
  32. package/dist/LinePlotRenderer/index.js.map +1 -0
  33. package/dist/LinearWiggleDisplay/components/SetColorDialog.d.ts +6 -2
  34. package/dist/LinearWiggleDisplay/components/SetColorDialog.js +88 -106
  35. package/dist/LinearWiggleDisplay/components/SetColorDialog.js.map +1 -0
  36. package/dist/LinearWiggleDisplay/components/SetMinMaxDialog.js +86 -107
  37. package/dist/LinearWiggleDisplay/components/SetMinMaxDialog.js.map +1 -0
  38. package/dist/LinearWiggleDisplay/components/Tooltip.d.ts +6 -11
  39. package/dist/LinearWiggleDisplay/components/Tooltip.js +47 -163
  40. package/dist/LinearWiggleDisplay/components/Tooltip.js.map +1 -0
  41. package/dist/LinearWiggleDisplay/components/WiggleDisplayComponent.js +44 -50
  42. package/dist/LinearWiggleDisplay/components/WiggleDisplayComponent.js.map +1 -0
  43. package/dist/LinearWiggleDisplay/components/YScaleBar.js +24 -31
  44. package/dist/LinearWiggleDisplay/components/YScaleBar.js.map +1 -0
  45. package/dist/LinearWiggleDisplay/index.d.ts +7 -3
  46. package/dist/LinearWiggleDisplay/index.js +27 -41
  47. package/dist/LinearWiggleDisplay/index.js.map +1 -0
  48. package/dist/LinearWiggleDisplay/models/configSchema.js +65 -69
  49. package/dist/LinearWiggleDisplay/models/configSchema.js.map +1 -0
  50. package/dist/LinearWiggleDisplay/models/model.d.ts +39 -18
  51. package/dist/LinearWiggleDisplay/models/model.js +538 -696
  52. package/dist/LinearWiggleDisplay/models/model.js.map +1 -0
  53. package/dist/MultiDensityRenderer/MultiDensityRenderer.d.ts +7 -0
  54. package/dist/MultiDensityRenderer/MultiDensityRenderer.js +135 -0
  55. package/dist/MultiDensityRenderer/MultiDensityRenderer.js.map +1 -0
  56. package/dist/MultiDensityRenderer/configSchema.d.ts +2 -0
  57. package/dist/MultiDensityRenderer/configSchema.js +10 -0
  58. package/dist/MultiDensityRenderer/configSchema.js.map +1 -0
  59. package/dist/MultiDensityRenderer/index.d.ts +3 -0
  60. package/dist/MultiDensityRenderer/index.js +19 -0
  61. package/dist/MultiDensityRenderer/index.js.map +1 -0
  62. package/dist/MultiLineRenderer/MultiLineRenderer.d.ts +7 -0
  63. package/dist/MultiLineRenderer/MultiLineRenderer.js +124 -0
  64. package/dist/MultiLineRenderer/MultiLineRenderer.js.map +1 -0
  65. package/dist/MultiLineRenderer/configSchema.d.ts +2 -0
  66. package/dist/MultiLineRenderer/configSchema.js +23 -0
  67. package/dist/MultiLineRenderer/configSchema.js.map +1 -0
  68. package/dist/MultiLineRenderer/index.d.ts +3 -0
  69. package/dist/MultiLineRenderer/index.js +19 -0
  70. package/dist/MultiLineRenderer/index.js.map +1 -0
  71. package/dist/MultiLinearWiggleDisplay/components/SetColorDialog.d.ts +10 -0
  72. package/dist/MultiLinearWiggleDisplay/components/SetColorDialog.js +239 -0
  73. package/dist/MultiLinearWiggleDisplay/components/SetColorDialog.js.map +1 -0
  74. package/dist/MultiLinearWiggleDisplay/components/SetMinMaxDialog.d.ts +11 -0
  75. package/dist/MultiLinearWiggleDisplay/components/SetMinMaxDialog.js +91 -0
  76. package/dist/MultiLinearWiggleDisplay/components/SetMinMaxDialog.js.map +1 -0
  77. package/dist/MultiLinearWiggleDisplay/components/Tooltip.d.ts +25 -0
  78. package/dist/MultiLinearWiggleDisplay/components/Tooltip.js +78 -0
  79. package/dist/MultiLinearWiggleDisplay/components/Tooltip.js.map +1 -0
  80. package/dist/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +13 -0
  81. package/dist/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.js +144 -0
  82. package/dist/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.js.map +1 -0
  83. package/dist/MultiLinearWiggleDisplay/components/YScaleBar.d.ts +7 -0
  84. package/dist/MultiLinearWiggleDisplay/components/YScaleBar.js +26 -0
  85. package/dist/MultiLinearWiggleDisplay/components/YScaleBar.js.map +1 -0
  86. package/dist/MultiLinearWiggleDisplay/components/util.d.ts +10 -0
  87. package/dist/MultiLinearWiggleDisplay/components/util.js +38 -0
  88. package/dist/MultiLinearWiggleDisplay/components/util.js.map +1 -0
  89. package/dist/MultiLinearWiggleDisplay/index.d.ts +3 -0
  90. package/dist/MultiLinearWiggleDisplay/index.js +23 -0
  91. package/dist/MultiLinearWiggleDisplay/index.js.map +1 -0
  92. package/dist/MultiLinearWiggleDisplay/models/configSchema.d.ts +2 -0
  93. package/dist/MultiLinearWiggleDisplay/models/configSchema.js +77 -0
  94. package/dist/MultiLinearWiggleDisplay/models/configSchema.js.map +1 -0
  95. package/dist/MultiLinearWiggleDisplay/models/model.d.ts +339 -0
  96. package/dist/MultiLinearWiggleDisplay/models/model.js +675 -0
  97. package/dist/MultiLinearWiggleDisplay/models/model.js.map +1 -0
  98. package/dist/MultiQuantitativeTrack/index.d.ts +3 -0
  99. package/dist/MultiQuantitativeTrack/index.js +19 -0
  100. package/dist/MultiQuantitativeTrack/index.js.map +1 -0
  101. package/dist/MultiRowLineRenderer/MultiRowLineRenderer.d.ts +7 -0
  102. package/dist/MultiRowLineRenderer/MultiRowLineRenderer.js +131 -0
  103. package/dist/MultiRowLineRenderer/MultiRowLineRenderer.js.map +1 -0
  104. package/dist/MultiRowLineRenderer/configSchema.d.ts +2 -0
  105. package/dist/MultiRowLineRenderer/configSchema.js +23 -0
  106. package/dist/MultiRowLineRenderer/configSchema.js.map +1 -0
  107. package/dist/MultiRowLineRenderer/index.d.ts +3 -0
  108. package/dist/MultiRowLineRenderer/index.js +19 -0
  109. package/dist/MultiRowLineRenderer/index.js.map +1 -0
  110. package/dist/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.d.ts +7 -0
  111. package/dist/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js +164 -0
  112. package/dist/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js.map +1 -0
  113. package/dist/MultiRowXYPlotRenderer/configSchema.d.ts +2 -0
  114. package/dist/MultiRowXYPlotRenderer/configSchema.js +31 -0
  115. package/dist/MultiRowXYPlotRenderer/configSchema.js.map +1 -0
  116. package/dist/MultiRowXYPlotRenderer/index.d.ts +3 -0
  117. package/dist/MultiRowXYPlotRenderer/index.js +19 -0
  118. package/dist/MultiRowXYPlotRenderer/index.js.map +1 -0
  119. package/dist/MultiWiggleAdapter/MultiWiggleAdapter.d.ts +28 -0
  120. package/dist/MultiWiggleAdapter/MultiWiggleAdapter.js +244 -0
  121. package/dist/MultiWiggleAdapter/MultiWiggleAdapter.js.map +1 -0
  122. package/dist/MultiWiggleAdapter/configSchema.d.ts +2 -0
  123. package/dist/MultiWiggleAdapter/configSchema.js +14 -0
  124. package/dist/MultiWiggleAdapter/configSchema.js.map +1 -0
  125. package/dist/MultiWiggleAdapter/index.d.ts +3 -0
  126. package/dist/MultiWiggleAdapter/index.js +47 -0
  127. package/dist/MultiWiggleAdapter/index.js.map +1 -0
  128. package/dist/MultiWiggleAddTrackWidget/AddTrackWorkflow.d.ts +5 -0
  129. package/dist/MultiWiggleAddTrackWidget/AddTrackWorkflow.js +139 -0
  130. package/dist/MultiWiggleAddTrackWidget/AddTrackWorkflow.js.map +1 -0
  131. package/dist/MultiWiggleAddTrackWidget/index.d.ts +3 -0
  132. package/dist/MultiWiggleAddTrackWidget/index.js +19 -0
  133. package/dist/MultiWiggleAddTrackWidget/index.js.map +1 -0
  134. package/dist/MultiWiggleRendering.d.ts +21 -0
  135. package/dist/MultiWiggleRendering.js +164 -0
  136. package/dist/MultiWiggleRendering.js.map +1 -0
  137. package/dist/MultiXYPlotRenderer/MultiXYPlotRenderer.d.ts +7 -0
  138. package/dist/MultiXYPlotRenderer/MultiXYPlotRenderer.js +153 -0
  139. package/dist/MultiXYPlotRenderer/MultiXYPlotRenderer.js.map +1 -0
  140. package/dist/MultiXYPlotRenderer/configSchema.d.ts +2 -0
  141. package/dist/MultiXYPlotRenderer/configSchema.js +31 -0
  142. package/dist/MultiXYPlotRenderer/configSchema.js.map +1 -0
  143. package/dist/MultiXYPlotRenderer/index.d.ts +3 -0
  144. package/dist/MultiXYPlotRenderer/index.js +19 -0
  145. package/dist/MultiXYPlotRenderer/index.js.map +1 -0
  146. package/dist/QuantitativeTrack/index.d.ts +3 -0
  147. package/dist/QuantitativeTrack/index.js +19 -0
  148. package/dist/QuantitativeTrack/index.js.map +1 -0
  149. package/dist/Tooltip.d.ts +20 -0
  150. package/dist/Tooltip.js +124 -0
  151. package/dist/Tooltip.js.map +1 -0
  152. package/dist/WiggleBaseRenderer.d.ts +11 -12
  153. package/dist/WiggleBaseRenderer.js +132 -129
  154. package/dist/WiggleBaseRenderer.js.map +1 -0
  155. package/dist/WiggleRPC/rpcMethods.d.ts +17 -1
  156. package/dist/WiggleRPC/rpcMethods.js +258 -289
  157. package/dist/WiggleRPC/rpcMethods.js.map +1 -0
  158. package/dist/WiggleRendering.d.ts +1 -1
  159. package/dist/WiggleRendering.js +103 -102
  160. package/dist/WiggleRendering.js.map +1 -0
  161. package/dist/XYPlotRenderer/XYPlotRenderer.d.ts +4 -1
  162. package/dist/XYPlotRenderer/XYPlotRenderer.js +147 -194
  163. package/dist/XYPlotRenderer/XYPlotRenderer.js.map +1 -0
  164. package/dist/XYPlotRenderer/configSchema.d.ts +2 -0
  165. package/dist/XYPlotRenderer/configSchema.js +31 -0
  166. package/dist/XYPlotRenderer/configSchema.js.map +1 -0
  167. package/dist/XYPlotRenderer/index.d.ts +7 -3
  168. package/dist/XYPlotRenderer/index.js +21 -32
  169. package/dist/XYPlotRenderer/index.js.map +1 -0
  170. package/dist/configSchema.js +42 -74
  171. package/dist/configSchema.js.map +1 -0
  172. package/dist/drawxy.d.ts +50 -0
  173. package/dist/drawxy.js +411 -0
  174. package/dist/drawxy.js.map +1 -0
  175. package/dist/index.d.ts +194 -85
  176. package/dist/index.js +139 -247
  177. package/dist/index.js.map +1 -0
  178. package/dist/util.d.ts +34 -1
  179. package/dist/util.js +270 -143
  180. package/dist/util.js.map +1 -0
  181. package/esm/BigWigAdapter/BigWigAdapter.d.ts +25 -0
  182. package/esm/BigWigAdapter/BigWigAdapter.js +81 -0
  183. package/esm/BigWigAdapter/BigWigAdapter.js.map +1 -0
  184. package/esm/BigWigAdapter/configSchema.d.ts +2 -0
  185. package/esm/BigWigAdapter/configSchema.js +16 -0
  186. package/esm/BigWigAdapter/configSchema.js.map +1 -0
  187. package/esm/BigWigAdapter/index.d.ts +3 -0
  188. package/esm/BigWigAdapter/index.js +15 -0
  189. package/esm/BigWigAdapter/index.js.map +1 -0
  190. package/esm/CreateMultiWiggleExtension/ConfirmDialog.d.ts +9 -0
  191. package/esm/CreateMultiWiggleExtension/ConfirmDialog.js +26 -0
  192. package/esm/CreateMultiWiggleExtension/ConfirmDialog.js.map +1 -0
  193. package/esm/CreateMultiWiggleExtension/index.d.ts +2 -0
  194. package/esm/CreateMultiWiggleExtension/index.js +51 -0
  195. package/esm/CreateMultiWiggleExtension/index.js.map +1 -0
  196. package/esm/DensityRenderer/DensityRenderer.d.ts +6 -0
  197. package/esm/DensityRenderer/DensityRenderer.js +8 -0
  198. package/esm/DensityRenderer/DensityRenderer.js.map +1 -0
  199. package/esm/DensityRenderer/configSchema.d.ts +2 -0
  200. package/esm/DensityRenderer/configSchema.js +5 -0
  201. package/esm/DensityRenderer/configSchema.js.map +1 -0
  202. package/esm/DensityRenderer/index.d.ts +3 -0
  203. package/esm/DensityRenderer/index.js +12 -0
  204. package/esm/DensityRenderer/index.js.map +1 -0
  205. package/esm/LinePlotRenderer/LinePlotRenderer.d.ts +6 -0
  206. package/esm/LinePlotRenderer/LinePlotRenderer.js +13 -0
  207. package/esm/LinePlotRenderer/LinePlotRenderer.js.map +1 -0
  208. package/esm/LinePlotRenderer/configSchema.d.ts +2 -0
  209. package/esm/LinePlotRenderer/configSchema.js +11 -0
  210. package/esm/LinePlotRenderer/configSchema.js.map +1 -0
  211. package/esm/LinePlotRenderer/index.d.ts +3 -0
  212. package/esm/LinePlotRenderer/index.js +12 -0
  213. package/esm/LinePlotRenderer/index.js.map +1 -0
  214. package/esm/LinearWiggleDisplay/components/SetColorDialog.d.ts +14 -0
  215. package/esm/LinearWiggleDisplay/components/SetColorDialog.js +48 -0
  216. package/esm/LinearWiggleDisplay/components/SetColorDialog.js.map +1 -0
  217. package/esm/LinearWiggleDisplay/components/SetMinMaxDialog.d.ts +11 -0
  218. package/esm/LinearWiggleDisplay/components/SetMinMaxDialog.js +46 -0
  219. package/esm/LinearWiggleDisplay/components/SetMinMaxDialog.js.map +1 -0
  220. package/esm/LinearWiggleDisplay/components/Tooltip.d.ts +19 -0
  221. package/esm/LinearWiggleDisplay/components/Tooltip.js +34 -0
  222. package/esm/LinearWiggleDisplay/components/Tooltip.js.map +1 -0
  223. package/esm/LinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +8 -0
  224. package/esm/LinearWiggleDisplay/components/WiggleDisplayComponent.js +29 -0
  225. package/esm/LinearWiggleDisplay/components/WiggleDisplayComponent.js.map +1 -0
  226. package/esm/LinearWiggleDisplay/components/YScaleBar.d.ts +7 -0
  227. package/esm/LinearWiggleDisplay/components/YScaleBar.js +9 -0
  228. package/esm/LinearWiggleDisplay/components/YScaleBar.js.map +1 -0
  229. package/esm/LinearWiggleDisplay/index.d.ts +7 -0
  230. package/esm/LinearWiggleDisplay/index.js +21 -0
  231. package/esm/LinearWiggleDisplay/index.js.map +1 -0
  232. package/esm/LinearWiggleDisplay/models/configSchema.d.ts +2 -0
  233. package/esm/LinearWiggleDisplay/models/configSchema.js +64 -0
  234. package/esm/LinearWiggleDisplay/models/configSchema.js.map +1 -0
  235. package/esm/LinearWiggleDisplay/models/model.d.ts +309 -0
  236. package/esm/LinearWiggleDisplay/models/model.js +449 -0
  237. package/esm/LinearWiggleDisplay/models/model.js.map +1 -0
  238. package/esm/MultiDensityRenderer/MultiDensityRenderer.d.ts +7 -0
  239. package/esm/MultiDensityRenderer/MultiDensityRenderer.js +36 -0
  240. package/esm/MultiDensityRenderer/MultiDensityRenderer.js.map +1 -0
  241. package/esm/MultiDensityRenderer/configSchema.d.ts +2 -0
  242. package/esm/MultiDensityRenderer/configSchema.js +5 -0
  243. package/esm/MultiDensityRenderer/configSchema.js.map +1 -0
  244. package/esm/MultiDensityRenderer/index.d.ts +3 -0
  245. package/esm/MultiDensityRenderer/index.js +12 -0
  246. package/esm/MultiDensityRenderer/index.js.map +1 -0
  247. package/esm/MultiLineRenderer/MultiLineRenderer.d.ts +7 -0
  248. package/esm/MultiLineRenderer/MultiLineRenderer.js +25 -0
  249. package/esm/MultiLineRenderer/MultiLineRenderer.js.map +1 -0
  250. package/esm/MultiLineRenderer/configSchema.d.ts +2 -0
  251. package/esm/MultiLineRenderer/configSchema.js +18 -0
  252. package/esm/MultiLineRenderer/configSchema.js.map +1 -0
  253. package/esm/MultiLineRenderer/index.d.ts +3 -0
  254. package/esm/MultiLineRenderer/index.js +12 -0
  255. package/esm/MultiLineRenderer/index.js.map +1 -0
  256. package/esm/MultiLinearWiggleDisplay/components/SetColorDialog.d.ts +10 -0
  257. package/esm/MultiLinearWiggleDisplay/components/SetColorDialog.js +162 -0
  258. package/esm/MultiLinearWiggleDisplay/components/SetColorDialog.js.map +1 -0
  259. package/esm/MultiLinearWiggleDisplay/components/SetMinMaxDialog.d.ts +11 -0
  260. package/esm/MultiLinearWiggleDisplay/components/SetMinMaxDialog.js +46 -0
  261. package/esm/MultiLinearWiggleDisplay/components/SetMinMaxDialog.js.map +1 -0
  262. package/esm/MultiLinearWiggleDisplay/components/Tooltip.d.ts +25 -0
  263. package/esm/MultiLinearWiggleDisplay/components/Tooltip.js +43 -0
  264. package/esm/MultiLinearWiggleDisplay/components/Tooltip.js.map +1 -0
  265. package/esm/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +13 -0
  266. package/esm/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.js +99 -0
  267. package/esm/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.js.map +1 -0
  268. package/esm/MultiLinearWiggleDisplay/components/YScaleBar.d.ts +7 -0
  269. package/esm/MultiLinearWiggleDisplay/components/YScaleBar.js +9 -0
  270. package/esm/MultiLinearWiggleDisplay/components/YScaleBar.js.map +1 -0
  271. package/esm/MultiLinearWiggleDisplay/components/util.d.ts +10 -0
  272. package/esm/MultiLinearWiggleDisplay/components/util.js +31 -0
  273. package/esm/MultiLinearWiggleDisplay/components/util.js.map +1 -0
  274. package/esm/MultiLinearWiggleDisplay/index.d.ts +3 -0
  275. package/esm/MultiLinearWiggleDisplay/index.js +18 -0
  276. package/esm/MultiLinearWiggleDisplay/index.js.map +1 -0
  277. package/esm/MultiLinearWiggleDisplay/models/configSchema.d.ts +2 -0
  278. package/esm/MultiLinearWiggleDisplay/models/configSchema.js +74 -0
  279. package/esm/MultiLinearWiggleDisplay/models/configSchema.js.map +1 -0
  280. package/esm/MultiLinearWiggleDisplay/models/model.d.ts +339 -0
  281. package/esm/MultiLinearWiggleDisplay/models/model.js +570 -0
  282. package/esm/MultiLinearWiggleDisplay/models/model.js.map +1 -0
  283. package/esm/MultiQuantitativeTrack/index.d.ts +3 -0
  284. package/esm/MultiQuantitativeTrack/index.js +14 -0
  285. package/esm/MultiQuantitativeTrack/index.js.map +1 -0
  286. package/esm/MultiRowLineRenderer/MultiRowLineRenderer.d.ts +7 -0
  287. package/esm/MultiRowLineRenderer/MultiRowLineRenderer.js +33 -0
  288. package/esm/MultiRowLineRenderer/MultiRowLineRenderer.js.map +1 -0
  289. package/esm/MultiRowLineRenderer/configSchema.d.ts +2 -0
  290. package/esm/MultiRowLineRenderer/configSchema.js +18 -0
  291. package/esm/MultiRowLineRenderer/configSchema.js.map +1 -0
  292. package/esm/MultiRowLineRenderer/index.d.ts +3 -0
  293. package/esm/MultiRowLineRenderer/index.js +12 -0
  294. package/esm/MultiRowLineRenderer/index.js.map +1 -0
  295. package/esm/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.d.ts +7 -0
  296. package/esm/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js +39 -0
  297. package/esm/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js.map +1 -0
  298. package/esm/MultiRowXYPlotRenderer/configSchema.d.ts +2 -0
  299. package/esm/MultiRowXYPlotRenderer/configSchema.js +26 -0
  300. package/esm/MultiRowXYPlotRenderer/configSchema.js.map +1 -0
  301. package/esm/MultiRowXYPlotRenderer/index.d.ts +3 -0
  302. package/esm/MultiRowXYPlotRenderer/index.js +12 -0
  303. package/esm/MultiRowXYPlotRenderer/index.js.map +1 -0
  304. package/esm/MultiWiggleAdapter/MultiWiggleAdapter.d.ts +28 -0
  305. package/esm/MultiWiggleAdapter/MultiWiggleAdapter.js +87 -0
  306. package/esm/MultiWiggleAdapter/MultiWiggleAdapter.js.map +1 -0
  307. package/esm/MultiWiggleAdapter/configSchema.d.ts +2 -0
  308. package/esm/MultiWiggleAdapter/configSchema.js +12 -0
  309. package/esm/MultiWiggleAdapter/configSchema.js.map +1 -0
  310. package/esm/MultiWiggleAdapter/index.d.ts +3 -0
  311. package/esm/MultiWiggleAdapter/index.js +15 -0
  312. package/esm/MultiWiggleAdapter/index.js.map +1 -0
  313. package/esm/MultiWiggleAddTrackWidget/AddTrackWorkflow.d.ts +5 -0
  314. package/esm/MultiWiggleAddTrackWidget/AddTrackWorkflow.js +87 -0
  315. package/esm/MultiWiggleAddTrackWidget/AddTrackWorkflow.js.map +1 -0
  316. package/esm/MultiWiggleAddTrackWidget/index.d.ts +3 -0
  317. package/esm/MultiWiggleAddTrackWidget/index.js +12 -0
  318. package/esm/MultiWiggleAddTrackWidget/index.js.map +1 -0
  319. package/esm/MultiWiggleRendering.d.ts +21 -0
  320. package/esm/MultiWiggleRendering.js +75 -0
  321. package/esm/MultiWiggleRendering.js.map +1 -0
  322. package/esm/MultiXYPlotRenderer/MultiXYPlotRenderer.d.ts +7 -0
  323. package/esm/MultiXYPlotRenderer/MultiXYPlotRenderer.js +28 -0
  324. package/esm/MultiXYPlotRenderer/MultiXYPlotRenderer.js.map +1 -0
  325. package/esm/MultiXYPlotRenderer/configSchema.d.ts +2 -0
  326. package/esm/MultiXYPlotRenderer/configSchema.js +26 -0
  327. package/esm/MultiXYPlotRenderer/configSchema.js.map +1 -0
  328. package/esm/MultiXYPlotRenderer/index.d.ts +3 -0
  329. package/esm/MultiXYPlotRenderer/index.js +12 -0
  330. package/esm/MultiXYPlotRenderer/index.js.map +1 -0
  331. package/esm/QuantitativeTrack/index.d.ts +3 -0
  332. package/esm/QuantitativeTrack/index.js +14 -0
  333. package/esm/QuantitativeTrack/index.js.map +1 -0
  334. package/esm/Tooltip.d.ts +20 -0
  335. package/esm/Tooltip.js +71 -0
  336. package/esm/Tooltip.js.map +1 -0
  337. package/esm/WiggleBaseRenderer.d.ts +54 -0
  338. package/esm/WiggleBaseRenderer.js +36 -0
  339. package/esm/WiggleBaseRenderer.js.map +1 -0
  340. package/esm/WiggleRPC/rpcMethods.d.ts +47 -0
  341. package/esm/WiggleRPC/rpcMethods.js +112 -0
  342. package/esm/WiggleRPC/rpcMethods.js.map +1 -0
  343. package/esm/WiggleRendering.d.ts +16 -0
  344. package/esm/WiggleRendering.js +36 -0
  345. package/esm/WiggleRendering.js.map +1 -0
  346. package/esm/XYPlotRenderer/XYPlotRenderer.d.ts +7 -0
  347. package/esm/XYPlotRenderer/XYPlotRenderer.js +26 -0
  348. package/esm/XYPlotRenderer/XYPlotRenderer.js.map +1 -0
  349. package/esm/XYPlotRenderer/configSchema.d.ts +2 -0
  350. package/esm/XYPlotRenderer/configSchema.js +26 -0
  351. package/esm/XYPlotRenderer/configSchema.js.map +1 -0
  352. package/esm/XYPlotRenderer/index.d.ts +7 -0
  353. package/esm/XYPlotRenderer/index.js +13 -0
  354. package/esm/XYPlotRenderer/index.js.map +1 -0
  355. package/esm/configSchema.d.ts +2 -0
  356. package/esm/configSchema.js +41 -0
  357. package/esm/configSchema.js.map +1 -0
  358. package/esm/drawxy.d.ts +50 -0
  359. package/esm/drawxy.js +286 -0
  360. package/esm/drawxy.js.map +1 -0
  361. package/esm/index.d.ts +975 -0
  362. package/esm/index.js +90 -0
  363. package/esm/index.js.map +1 -0
  364. package/esm/util.d.ts +74 -0
  365. package/esm/util.js +231 -0
  366. package/esm/util.js.map +1 -0
  367. package/package.json +32 -18
  368. package/src/BigWigAdapter/BigWigAdapter.ts +53 -35
  369. package/src/BigWigAdapter/__snapshots__/BigWigAdapter.test.ts.snap +10 -10
  370. package/src/BigWigAdapter/configSchema.ts +5 -0
  371. package/src/BigWigAdapter/index.ts +19 -1
  372. package/src/CreateMultiWiggleExtension/ConfirmDialog.tsx +66 -0
  373. package/src/CreateMultiWiggleExtension/index.ts +57 -0
  374. package/src/DensityRenderer/DensityRenderer.test.js +8 -2
  375. package/src/DensityRenderer/DensityRenderer.ts +14 -0
  376. package/src/DensityRenderer/__snapshots__/DensityRenderer.test.js.snap +8 -0
  377. package/src/{LinePlotRenderer/index.js → DensityRenderer/configSchema.ts} +5 -5
  378. package/src/DensityRenderer/index.ts +14 -53
  379. package/src/LinePlotRenderer/LinePlotRenderer.ts +19 -0
  380. package/src/LinePlotRenderer/configSchema.ts +16 -0
  381. package/src/LinePlotRenderer/index.ts +16 -0
  382. package/src/LinearWiggleDisplay/components/SetColorDialog.tsx +26 -31
  383. package/src/LinearWiggleDisplay/components/SetMinMaxDialog.tsx +13 -11
  384. package/src/LinearWiggleDisplay/components/Tooltip.tsx +6 -121
  385. package/src/LinearWiggleDisplay/components/WiggleDisplayComponent.tsx +9 -4
  386. package/src/LinearWiggleDisplay/index.ts +24 -3
  387. package/src/LinearWiggleDisplay/models/model.tsx +139 -224
  388. package/src/MultiDensityRenderer/MultiDensityRenderer.ts +39 -0
  389. package/src/MultiDensityRenderer/configSchema.ts +10 -0
  390. package/src/MultiDensityRenderer/index.ts +16 -0
  391. package/src/MultiLineRenderer/MultiLineRenderer.ts +29 -0
  392. package/src/MultiLineRenderer/configSchema.ts +24 -0
  393. package/src/MultiLineRenderer/index.ts +17 -0
  394. package/src/MultiLinearWiggleDisplay/components/SetColorDialog.tsx +322 -0
  395. package/src/MultiLinearWiggleDisplay/components/SetMinMaxDialog.tsx +113 -0
  396. package/src/MultiLinearWiggleDisplay/components/Tooltip.tsx +76 -0
  397. package/src/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.tsx +261 -0
  398. package/src/MultiLinearWiggleDisplay/components/YScaleBar.tsx +25 -0
  399. package/src/MultiLinearWiggleDisplay/components/declare.d.ts +1 -0
  400. package/src/MultiLinearWiggleDisplay/components/util.test.ts +69 -0
  401. package/src/MultiLinearWiggleDisplay/components/util.ts +33 -0
  402. package/src/MultiLinearWiggleDisplay/index.ts +20 -0
  403. package/src/MultiLinearWiggleDisplay/models/configSchema.ts +94 -0
  404. package/src/MultiLinearWiggleDisplay/models/model.tsx +721 -0
  405. package/src/MultiQuantitativeTrack/index.ts +26 -0
  406. package/src/MultiRowLineRenderer/MultiRowLineRenderer.ts +36 -0
  407. package/src/MultiRowLineRenderer/configSchema.ts +25 -0
  408. package/src/MultiRowLineRenderer/index.ts +16 -0
  409. package/src/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.ts +43 -0
  410. package/src/MultiRowXYPlotRenderer/configSchema.ts +33 -0
  411. package/src/MultiRowXYPlotRenderer/index.ts +16 -0
  412. package/src/MultiWiggleAdapter/MultiWiggleAdapter.ts +120 -0
  413. package/src/MultiWiggleAdapter/configSchema.ts +16 -0
  414. package/src/MultiWiggleAdapter/index.ts +20 -0
  415. package/src/MultiWiggleAdapter/test_data/volvox.bw +0 -0
  416. package/src/MultiWiggleAddTrackWidget/AddTrackWorkflow.tsx +130 -0
  417. package/src/MultiWiggleAddTrackWidget/index.ts +17 -0
  418. package/src/MultiWiggleRendering.tsx +125 -0
  419. package/src/MultiXYPlotRenderer/MultiXYPlotRenderer.ts +32 -0
  420. package/src/MultiXYPlotRenderer/configSchema.ts +31 -0
  421. package/src/MultiXYPlotRenderer/index.ts +17 -0
  422. package/src/QuantitativeTrack/index.ts +26 -0
  423. package/src/Tooltip.tsx +123 -0
  424. package/src/WiggleBaseRenderer.tsx +17 -11
  425. package/src/WiggleRPC/rpcMethods.ts +68 -17
  426. package/src/WiggleRendering.tsx +12 -18
  427. package/src/XYPlotRenderer/XYPlotRenderer.test.js +3 -1
  428. package/src/XYPlotRenderer/XYPlotRenderer.ts +19 -124
  429. package/src/XYPlotRenderer/__snapshots__/XYPlotRenderer.test.js.snap +8 -0
  430. package/src/XYPlotRenderer/configSchema.ts +32 -0
  431. package/src/XYPlotRenderer/index.ts +16 -10
  432. package/src/__snapshots__/WiggleRendering.test.js.snap +0 -2
  433. package/src/configSchema.ts +0 -28
  434. package/src/declare.d.ts +0 -1
  435. package/src/drawxy.ts +387 -0
  436. package/src/index.ts +75 -129
  437. package/src/util.ts +174 -0
  438. package/dist/BigWigAdapter/BigWigAdapter.test.js +0 -157
  439. package/dist/DensityRenderer/DensityRenderer.test.js +0 -88
  440. package/dist/WiggleRendering.test.js +0 -52
  441. package/dist/XYPlotRenderer/XYPlotRenderer.test.js +0 -87
  442. package/dist/declare.d.js +0 -1
  443. package/dist/index.test.js +0 -24
  444. package/dist/util.test.js +0 -66
  445. package/src/LinePlotRenderer/LinePlotRenderer.js +0 -91
  446. package/src/LinePlotRenderer/configSchema.js +0 -68
@@ -1,11 +1,17 @@
1
- import { ConfigurationSchema } from '@jbrowse/core/configuration'
2
- import ConfigSchema from '../configSchema'
1
+ import ReactComponent from '../WiggleRendering'
2
+ import PluginManager from '@jbrowse/core/PluginManager'
3
+ import XYPlotRenderer from './XYPlotRenderer'
4
+ import configSchema from './configSchema'
5
+ export { XYPlotRenderer, configSchema, ReactComponent }
3
6
 
4
- export { default as ReactComponent } from '../WiggleRendering'
5
- export { default } from './XYPlotRenderer'
6
-
7
- export const configSchema = ConfigurationSchema(
8
- 'XYPlotRenderer',
9
- {},
10
- { baseConfiguration: ConfigSchema, explicitlyTyped: true },
11
- )
7
+ export default (pluginManager: PluginManager) => {
8
+ pluginManager.addRendererType(
9
+ () =>
10
+ new XYPlotRenderer({
11
+ name: 'XYPlotRenderer',
12
+ ReactComponent,
13
+ configSchema,
14
+ pluginManager,
15
+ }),
16
+ )
17
+ }
@@ -2,9 +2,7 @@
2
2
 
3
3
  exports[`one 1`] = `
4
4
  <div
5
- class="WiggleRendering"
6
5
  data-testid="wiggle-rendering-test"
7
- role="presentation"
8
6
  style="overflow: visible; position: relative; height: 500px;"
9
7
  >
10
8
  <canvas
@@ -19,27 +19,11 @@ export default ConfigurationSchema(
19
19
  description: 'the color to use when the score is negative',
20
20
  defaultValue: 'red',
21
21
  },
22
- highlightColor: {
23
- type: 'color',
24
- description: 'the color of highlights over the wiggle track',
25
- defaultValue: 'rgba(255,255,0,0.5)',
26
- },
27
22
  clipColor: {
28
23
  type: 'color',
29
24
  description: 'the color of the clipping marker',
30
25
  defaultValue: 'red',
31
26
  },
32
- renderType: {
33
- type: 'stringEnum',
34
- model: types.enumeration('Rendering type', ['xyplot', 'density', 'line']),
35
- description: 'The type of rendering for wiggle data to use',
36
- defaultValue: 'xyplot',
37
- },
38
- filled: {
39
- type: 'boolean',
40
- description: 'fill in histogram',
41
- defaultValue: true,
42
- },
43
27
  bicolorPivot: {
44
28
  type: 'stringEnum',
45
29
  model: types.enumeration('Scale type', [
@@ -56,18 +40,6 @@ export default ConfigurationSchema(
56
40
  defaultValue: 0,
57
41
  description: 'value to use for bicolor pivot',
58
42
  },
59
- summaryScoreMode: {
60
- type: 'stringEnum',
61
- model: types.enumeration('Score type', ['max', 'min', 'avg', 'whiskers']),
62
- description:
63
- 'choose whether to use max/min/average or whiskers which combines all three into the same rendering',
64
- defaultValue: 'whiskers',
65
- },
66
- displayCrossHatches: {
67
- type: 'boolean',
68
- description: 'choose to draw cross hatches (sideways lines)',
69
- defaultValue: false,
70
- },
71
43
  },
72
44
  { explicitlyTyped: true },
73
45
  )
package/src/declare.d.ts CHANGED
@@ -1,3 +1,2 @@
1
1
  declare module '@jbrowse/core/util/offscreenCanvasPonyfill'
2
2
  declare module '@jbrowse/core/util/QuickLRU'
3
- declare module 'react-d3-axis-mod'
package/src/drawxy.ts ADDED
@@ -0,0 +1,387 @@
1
+ import {
2
+ AnyConfigurationModel,
3
+ readConfObject,
4
+ } from '@jbrowse/core/configuration'
5
+ import { clamp, featureSpanPx, Feature, Region } from '@jbrowse/core/util'
6
+ import { getOrigin, getScale, ScaleOpts } from './util'
7
+
8
+ function fillRectCtx(
9
+ x: number,
10
+ y: number,
11
+ width: number,
12
+ height: number,
13
+ ctx: CanvasRenderingContext2D,
14
+ color?: string,
15
+ ) {
16
+ if (width < 0) {
17
+ x += width
18
+ width = -width
19
+ }
20
+ if (height < 0) {
21
+ y += height
22
+ height = -height
23
+ }
24
+
25
+ if (color) {
26
+ ctx.fillStyle = color
27
+ }
28
+ ctx.fillRect(x, y, width, height)
29
+ }
30
+
31
+ const fudgeFactor = 0.4
32
+ const clipHeight = 2
33
+
34
+ export function drawXY(
35
+ ctx: CanvasRenderingContext2D,
36
+ props: {
37
+ features: Map<string, Feature> | Feature[]
38
+ bpPerPx: number
39
+ regions: Region[]
40
+ scaleOpts: ScaleOpts
41
+ height: number
42
+ ticks: { values: number[] }
43
+ config: AnyConfigurationModel
44
+ displayCrossHatches: boolean
45
+ offset?: number
46
+ colorCallback: (f: Feature, score: number) => string
47
+ Color: typeof import('color')
48
+ },
49
+ ) {
50
+ const {
51
+ features,
52
+ bpPerPx,
53
+ regions,
54
+ scaleOpts,
55
+ height: unadjustedHeight,
56
+ config,
57
+ ticks,
58
+ displayCrossHatches,
59
+ offset = 0,
60
+ colorCallback,
61
+ Color,
62
+ } = props
63
+ const [region] = regions
64
+ const width = (region.end - region.start) / bpPerPx
65
+
66
+ // the adjusted height takes into account YSCALEBAR_LABEL_OFFSET from the
67
+ // wiggle display, and makes the height of the actual drawn area add
68
+ // "padding" to the top and bottom of the display
69
+ const height = unadjustedHeight - offset * 2
70
+
71
+ const filled = readConfObject(config, 'filled')
72
+ const clipColor = readConfObject(config, 'clipColor')
73
+ const summaryScoreMode = readConfObject(config, 'summaryScoreMode')
74
+ const pivotValue = readConfObject(config, 'bicolorPivotValue')
75
+ const minSize = readConfObject(config, 'minSize')
76
+
77
+ const scale = getScale({ ...scaleOpts, range: [0, height] })
78
+ const originY = getOrigin(scaleOpts.scaleType)
79
+ const [niceMin, niceMax] = scale.domain()
80
+
81
+ const toY = (n: number) => clamp(height - (scale(n) || 0), 0, height) + offset
82
+ const toOrigin = (n: number) => toY(originY) - toY(n)
83
+ const getHeight = (n: number) => (filled ? toOrigin(n) : Math.max(minSize, 1))
84
+ let hasClipping = false
85
+
86
+ let prevLeftPx = 0
87
+ const reducedFeatures = []
88
+ const crossingOrigin = niceMin < pivotValue && niceMax > pivotValue
89
+
90
+ // we handle whiskers separately to render max row, min row, and avg in three
91
+ // passes. this reduces subpixel rendering issues. note: for stylistic
92
+ // reasons, clipping indicator is only drawn for score, not min/max score
93
+ if (summaryScoreMode === 'whiskers') {
94
+ let lastCol
95
+ let lastMix
96
+ for (const feature of features.values()) {
97
+ const [leftPx, rightPx] = featureSpanPx(feature, region, bpPerPx)
98
+ if (feature.get('summary')) {
99
+ const w = rightPx - leftPx + fudgeFactor
100
+ const max = feature.get('maxScore')
101
+ const c = colorCallback(feature, max)
102
+ const effectiveC = crossingOrigin
103
+ ? c
104
+ : c === lastCol
105
+ ? lastMix
106
+ : (lastMix = Color(c).lighten(0.4).toString())
107
+ fillRectCtx(leftPx, toY(max), w, getHeight(max), ctx, effectiveC)
108
+ lastCol = c
109
+ }
110
+ }
111
+ lastMix = undefined
112
+ lastCol = undefined
113
+ for (const feature of features.values()) {
114
+ const [leftPx, rightPx] = featureSpanPx(feature, region, bpPerPx)
115
+ const score = feature.get('score')
116
+ const max = feature.get('maxScore')
117
+ const min = feature.get('minScore')
118
+ const summary = feature.get('summary')
119
+ const c = colorCallback(feature, score)
120
+ const effectiveC =
121
+ crossingOrigin && summary
122
+ ? c === lastCol
123
+ ? lastMix
124
+ : (lastMix = Color(colorCallback(feature, max))
125
+ .mix(Color(colorCallback(feature, min)))
126
+ .toString())
127
+ : c
128
+ const w = Math.max(rightPx - leftPx + fudgeFactor, minSize)
129
+ // create reduced features, avoiding multiple features per px
130
+ if (Math.floor(leftPx) !== Math.floor(prevLeftPx)) {
131
+ reducedFeatures.push(feature)
132
+ prevLeftPx = leftPx
133
+ }
134
+ hasClipping = hasClipping || score < niceMin || score > niceMax
135
+ fillRectCtx(leftPx, toY(score), w, getHeight(score), ctx, effectiveC)
136
+ lastCol = c
137
+ }
138
+ lastMix = undefined
139
+ lastCol = undefined
140
+ for (const feature of features.values()) {
141
+ const [leftPx, rightPx] = featureSpanPx(feature, region, bpPerPx)
142
+
143
+ if (feature.get('summary')) {
144
+ const min = feature.get('minScore')
145
+ const c = colorCallback(feature, min)
146
+ const w = Math.max(rightPx - leftPx + fudgeFactor, minSize)
147
+ const effectiveC = crossingOrigin
148
+ ? c
149
+ : c === lastCol
150
+ ? lastMix
151
+ : (lastMix = Color(c).darken(0.4).toString())
152
+
153
+ fillRectCtx(leftPx, toY(min), w, getHeight(min), ctx, effectiveC)
154
+ lastCol = c
155
+ }
156
+ }
157
+ } else {
158
+ for (const feature of features.values()) {
159
+ const [leftPx, rightPx] = featureSpanPx(feature, region, bpPerPx)
160
+
161
+ // create reduced features, avoiding multiple features per px
162
+ if (Math.floor(leftPx) !== Math.floor(prevLeftPx)) {
163
+ reducedFeatures.push(feature)
164
+ prevLeftPx = leftPx
165
+ }
166
+
167
+ const score = feature.get('score')
168
+ const c = colorCallback(feature, score)
169
+
170
+ hasClipping = hasClipping || score < niceMin || score > niceMax
171
+ const w = Math.max(rightPx - leftPx + fudgeFactor, minSize)
172
+
173
+ if (summaryScoreMode === 'max') {
174
+ const s = feature.get('summary') ? feature.get('maxScore') : score
175
+ fillRectCtx(leftPx, toY(s), w, getHeight(s), ctx, c)
176
+ } else if (summaryScoreMode === 'min') {
177
+ const s = feature.get('summary') ? feature.get('minScore') : score
178
+ fillRectCtx(leftPx, toY(s), w, getHeight(s), ctx, c)
179
+ } else {
180
+ fillRectCtx(leftPx, toY(score), w, getHeight(score), ctx, c)
181
+ }
182
+ }
183
+ }
184
+
185
+ // second pass: draw clipping
186
+ // avoid persisting the red fillstyle with save/restore
187
+ ctx.save()
188
+ if (hasClipping) {
189
+ ctx.fillStyle = clipColor
190
+ for (const feature of features.values()) {
191
+ const [leftPx, rightPx] = featureSpanPx(feature, region, bpPerPx)
192
+ const w = rightPx - leftPx + fudgeFactor
193
+ const score = feature.get('score')
194
+ if (score > niceMax) {
195
+ fillRectCtx(leftPx, offset, w, clipHeight, ctx)
196
+ } else if (score < niceMin && scaleOpts.scaleType !== 'log') {
197
+ fillRectCtx(leftPx, unadjustedHeight, w, clipHeight, ctx)
198
+ }
199
+ }
200
+ }
201
+ ctx.restore()
202
+
203
+ if (displayCrossHatches) {
204
+ ctx.lineWidth = 1
205
+ ctx.strokeStyle = 'rgba(200,200,200,0.5)'
206
+ ticks.values.forEach(tick => {
207
+ ctx.beginPath()
208
+ ctx.moveTo(0, Math.round(toY(tick)))
209
+ ctx.lineTo(width, Math.round(toY(tick)))
210
+ ctx.stroke()
211
+ })
212
+ }
213
+
214
+ return { reducedFeatures }
215
+ }
216
+
217
+ export function drawLine(
218
+ ctx: CanvasRenderingContext2D,
219
+ props: {
220
+ features: Map<string, Feature> | Feature[]
221
+ regions: Region[]
222
+ bpPerPx: number
223
+ scaleOpts: ScaleOpts
224
+ height: number
225
+ ticks: { values: number[] }
226
+ displayCrossHatches: boolean
227
+ colorCallback: (f: Feature, score: number) => string
228
+ config: AnyConfigurationModel
229
+ offset?: number
230
+ },
231
+ ) {
232
+ const {
233
+ features,
234
+ regions,
235
+ bpPerPx,
236
+ scaleOpts,
237
+ height: unadjustedHeight,
238
+ ticks: { values },
239
+ displayCrossHatches,
240
+ colorCallback,
241
+ config,
242
+ offset = 0,
243
+ } = props
244
+ const [region] = regions
245
+ const width = (region.end - region.start) / bpPerPx
246
+
247
+ // the adjusted height takes into account YSCALEBAR_LABEL_OFFSET from the
248
+ // wiggle display, and makes the height of the actual drawn area add
249
+ // "padding" to the top and bottom of the display
250
+ const height = unadjustedHeight - offset * 2
251
+ const clipColor = readConfObject(config, 'clipColor')
252
+ const scale = getScale({ ...scaleOpts, range: [0, height] })
253
+ const [niceMin, niceMax] = scale.domain()
254
+ const toY = (n: number) => clamp(height - (scale(n) || 0), 0, height) + offset
255
+
256
+ let lastVal
257
+
258
+ let prevLeftPx = 0
259
+ const reducedFeatures = []
260
+ for (const feature of features.values()) {
261
+ const [leftPx, rightPx] = featureSpanPx(feature, region, bpPerPx)
262
+
263
+ // create reduced features, avoiding multiple features per px
264
+ if (Math.floor(leftPx) !== Math.floor(prevLeftPx)) {
265
+ reducedFeatures.push(feature)
266
+ prevLeftPx = leftPx
267
+ }
268
+ const score = feature.get('score')
269
+ const lowClipping = score < niceMin
270
+ const highClipping = score > niceMax
271
+ const w = rightPx - leftPx + fudgeFactor
272
+
273
+ const c = colorCallback(feature, score)
274
+
275
+ ctx.beginPath()
276
+ ctx.strokeStyle = c
277
+ const startPos = typeof lastVal !== 'undefined' ? lastVal : score
278
+ if (!region.reversed) {
279
+ ctx.moveTo(leftPx, toY(startPos))
280
+ ctx.lineTo(leftPx, toY(score))
281
+ ctx.lineTo(rightPx, toY(score))
282
+ } else {
283
+ ctx.moveTo(rightPx, toY(startPos))
284
+ ctx.lineTo(rightPx, toY(score))
285
+ ctx.lineTo(leftPx, toY(score))
286
+ }
287
+ ctx.stroke()
288
+ lastVal = score
289
+
290
+ if (highClipping) {
291
+ ctx.fillStyle = clipColor
292
+ ctx.fillRect(leftPx, offset, w, clipHeight)
293
+ } else if (lowClipping && scaleOpts.scaleType !== 'log') {
294
+ ctx.fillStyle = clipColor
295
+ ctx.fillRect(leftPx, height - clipHeight, w, height)
296
+ }
297
+ }
298
+
299
+ if (displayCrossHatches) {
300
+ ctx.lineWidth = 1
301
+ ctx.strokeStyle = 'rgba(200,200,200,0.5)'
302
+ values.forEach(tick => {
303
+ ctx.beginPath()
304
+ ctx.moveTo(0, Math.round(toY(tick)))
305
+ ctx.lineTo(width, Math.round(toY(tick)))
306
+ ctx.stroke()
307
+ })
308
+ }
309
+ return { reducedFeatures }
310
+ }
311
+
312
+ export function drawDensity(
313
+ ctx: CanvasRenderingContext2D,
314
+ props: {
315
+ features: Map<string, Feature> | Feature[]
316
+ regions: Region[]
317
+ bpPerPx: number
318
+ scaleOpts: ScaleOpts
319
+ height: number
320
+ ticks: { values: number[] }
321
+ displayCrossHatches: boolean
322
+ config: AnyConfigurationModel
323
+ },
324
+ ) {
325
+ const { features, regions, bpPerPx, scaleOpts, height, config } = props
326
+ const [region] = regions
327
+ const pivot = readConfObject(config, 'bicolorPivot')
328
+ const pivotValue = readConfObject(config, 'bicolorPivotValue')
329
+ const negColor = readConfObject(config, 'negColor')
330
+ const posColor = readConfObject(config, 'posColor')
331
+ const color = readConfObject(config, 'color')
332
+ const clipColor = readConfObject(config, 'clipColor')
333
+ const crossing = pivot !== 'none' && scaleOpts.scaleType !== 'log'
334
+ const scale = getScale({
335
+ ...scaleOpts,
336
+ pivotValue: crossing ? pivotValue : undefined,
337
+ range: crossing ? [negColor, 'white', posColor] : ['white', posColor],
338
+ })
339
+
340
+ const scale2 = getScale({ ...scaleOpts, range: [0, height] })
341
+ let cb
342
+ if (color === '#f0f') {
343
+ cb = (_feature: Feature, score: number) => scale(score)
344
+ } else {
345
+ cb = (feature: Feature, score: number) =>
346
+ readConfObject(config, 'color', { feature, score })
347
+ }
348
+ const [niceMin, niceMax] = scale2.domain()
349
+
350
+ let prevLeftPx = 0
351
+ let hasClipping = false
352
+ const reducedFeatures = []
353
+ for (const feature of features.values()) {
354
+ const [leftPx, rightPx] = featureSpanPx(feature, region, bpPerPx)
355
+
356
+ // create reduced features, avoiding multiple features per px
357
+ if (Math.floor(leftPx) !== Math.floor(prevLeftPx)) {
358
+ reducedFeatures.push(feature)
359
+ prevLeftPx = leftPx
360
+ }
361
+ const score = feature.get('score')
362
+ hasClipping = hasClipping || score > niceMax || score < niceMin
363
+ const w = rightPx - leftPx + fudgeFactor
364
+ ctx.fillStyle = cb(feature, score)
365
+ ctx.fillRect(leftPx, 0, w, height)
366
+ }
367
+
368
+ // second pass: draw clipping
369
+ // avoid persisting the red fillstyle with save/restore
370
+ ctx.save()
371
+ if (hasClipping) {
372
+ ctx.fillStyle = clipColor
373
+ for (const feature of features.values()) {
374
+ const [leftPx, rightPx] = featureSpanPx(feature, region, bpPerPx)
375
+ const w = rightPx - leftPx + fudgeFactor
376
+ const score = feature.get('score')
377
+ if (score > niceMax) {
378
+ fillRectCtx(leftPx, 0, w, clipHeight, ctx)
379
+ } else if (score < niceMin && scaleOpts.scaleType !== 'log') {
380
+ fillRectCtx(leftPx, 0, w, clipHeight, ctx)
381
+ }
382
+ }
383
+ }
384
+ ctx.restore()
385
+
386
+ return { reducedFeatures }
387
+ }