@jbrowse/plugin-wiggle 2.0.1 → 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 (414) hide show
  1. package/dist/BigWigAdapter/BigWigAdapter.d.ts +8 -7
  2. package/dist/BigWigAdapter/BigWigAdapter.js +59 -29
  3. package/dist/BigWigAdapter/BigWigAdapter.js.map +1 -1
  4. package/dist/BigWigAdapter/configSchema.js +5 -0
  5. package/dist/BigWigAdapter/configSchema.js.map +1 -1
  6. package/dist/BigWigAdapter/index.d.ts +3 -1
  7. package/dist/BigWigAdapter/index.js +39 -3
  8. package/dist/BigWigAdapter/index.js.map +1 -1
  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 +12 -149
  23. package/dist/DensityRenderer/index.js.map +1 -1
  24. package/dist/LinePlotRenderer/LinePlotRenderer.d.ts +4 -2
  25. package/dist/LinePlotRenderer/LinePlotRenderer.js +4 -103
  26. package/dist/LinePlotRenderer/LinePlotRenderer.js.map +1 -1
  27. package/dist/LinePlotRenderer/configSchema.d.ts +2 -0
  28. package/dist/LinePlotRenderer/configSchema.js +16 -0
  29. package/dist/LinePlotRenderer/configSchema.js.map +1 -0
  30. package/dist/LinePlotRenderer/index.d.ts +3 -3
  31. package/dist/LinePlotRenderer/index.js +13 -14
  32. package/dist/LinePlotRenderer/index.js.map +1 -1
  33. package/dist/LinearWiggleDisplay/components/SetColorDialog.d.ts +6 -2
  34. package/dist/LinearWiggleDisplay/components/SetColorDialog.js +8 -16
  35. package/dist/LinearWiggleDisplay/components/SetColorDialog.js.map +1 -1
  36. package/dist/LinearWiggleDisplay/components/Tooltip.d.ts +6 -11
  37. package/dist/LinearWiggleDisplay/components/Tooltip.js +11 -122
  38. package/dist/LinearWiggleDisplay/components/Tooltip.js.map +1 -1
  39. package/dist/LinearWiggleDisplay/index.d.ts +7 -3
  40. package/dist/LinearWiggleDisplay/index.js +23 -8
  41. package/dist/LinearWiggleDisplay/index.js.map +1 -1
  42. package/dist/LinearWiggleDisplay/models/model.d.ts +24 -5
  43. package/dist/LinearWiggleDisplay/models/model.js +79 -126
  44. package/dist/LinearWiggleDisplay/models/model.js.map +1 -1
  45. package/dist/MultiDensityRenderer/MultiDensityRenderer.d.ts +7 -0
  46. package/dist/MultiDensityRenderer/MultiDensityRenderer.js +135 -0
  47. package/dist/MultiDensityRenderer/MultiDensityRenderer.js.map +1 -0
  48. package/dist/MultiDensityRenderer/configSchema.d.ts +2 -0
  49. package/dist/MultiDensityRenderer/configSchema.js +10 -0
  50. package/dist/MultiDensityRenderer/configSchema.js.map +1 -0
  51. package/dist/MultiDensityRenderer/index.d.ts +3 -0
  52. package/dist/MultiDensityRenderer/index.js +19 -0
  53. package/dist/MultiDensityRenderer/index.js.map +1 -0
  54. package/dist/MultiLineRenderer/MultiLineRenderer.d.ts +7 -0
  55. package/dist/MultiLineRenderer/MultiLineRenderer.js +124 -0
  56. package/dist/MultiLineRenderer/MultiLineRenderer.js.map +1 -0
  57. package/dist/MultiLineRenderer/configSchema.d.ts +2 -0
  58. package/dist/MultiLineRenderer/configSchema.js +23 -0
  59. package/dist/MultiLineRenderer/configSchema.js.map +1 -0
  60. package/dist/MultiLineRenderer/index.d.ts +3 -0
  61. package/dist/MultiLineRenderer/index.js +19 -0
  62. package/dist/MultiLineRenderer/index.js.map +1 -0
  63. package/dist/MultiLinearWiggleDisplay/components/SetColorDialog.d.ts +10 -0
  64. package/dist/MultiLinearWiggleDisplay/components/SetColorDialog.js +239 -0
  65. package/dist/MultiLinearWiggleDisplay/components/SetColorDialog.js.map +1 -0
  66. package/dist/MultiLinearWiggleDisplay/components/SetMinMaxDialog.d.ts +11 -0
  67. package/dist/MultiLinearWiggleDisplay/components/SetMinMaxDialog.js +91 -0
  68. package/dist/MultiLinearWiggleDisplay/components/SetMinMaxDialog.js.map +1 -0
  69. package/dist/MultiLinearWiggleDisplay/components/Tooltip.d.ts +25 -0
  70. package/dist/MultiLinearWiggleDisplay/components/Tooltip.js +78 -0
  71. package/dist/MultiLinearWiggleDisplay/components/Tooltip.js.map +1 -0
  72. package/dist/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +13 -0
  73. package/dist/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.js +144 -0
  74. package/dist/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.js.map +1 -0
  75. package/dist/MultiLinearWiggleDisplay/components/YScaleBar.d.ts +7 -0
  76. package/dist/MultiLinearWiggleDisplay/components/YScaleBar.js +26 -0
  77. package/dist/MultiLinearWiggleDisplay/components/YScaleBar.js.map +1 -0
  78. package/dist/MultiLinearWiggleDisplay/components/util.d.ts +10 -0
  79. package/dist/MultiLinearWiggleDisplay/components/util.js +38 -0
  80. package/dist/MultiLinearWiggleDisplay/components/util.js.map +1 -0
  81. package/dist/MultiLinearWiggleDisplay/index.d.ts +3 -0
  82. package/dist/MultiLinearWiggleDisplay/index.js +23 -0
  83. package/dist/MultiLinearWiggleDisplay/index.js.map +1 -0
  84. package/dist/MultiLinearWiggleDisplay/models/configSchema.d.ts +2 -0
  85. package/dist/MultiLinearWiggleDisplay/models/configSchema.js +77 -0
  86. package/dist/MultiLinearWiggleDisplay/models/configSchema.js.map +1 -0
  87. package/dist/MultiLinearWiggleDisplay/models/model.d.ts +339 -0
  88. package/dist/MultiLinearWiggleDisplay/models/model.js +675 -0
  89. package/dist/MultiLinearWiggleDisplay/models/model.js.map +1 -0
  90. package/dist/MultiQuantitativeTrack/index.d.ts +3 -0
  91. package/dist/MultiQuantitativeTrack/index.js +19 -0
  92. package/dist/MultiQuantitativeTrack/index.js.map +1 -0
  93. package/dist/MultiRowLineRenderer/MultiRowLineRenderer.d.ts +7 -0
  94. package/dist/MultiRowLineRenderer/MultiRowLineRenderer.js +131 -0
  95. package/dist/MultiRowLineRenderer/MultiRowLineRenderer.js.map +1 -0
  96. package/dist/MultiRowLineRenderer/configSchema.d.ts +2 -0
  97. package/dist/MultiRowLineRenderer/configSchema.js +23 -0
  98. package/dist/MultiRowLineRenderer/configSchema.js.map +1 -0
  99. package/dist/MultiRowLineRenderer/index.d.ts +3 -0
  100. package/dist/MultiRowLineRenderer/index.js +19 -0
  101. package/dist/MultiRowLineRenderer/index.js.map +1 -0
  102. package/dist/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.d.ts +7 -0
  103. package/dist/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js +164 -0
  104. package/dist/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js.map +1 -0
  105. package/dist/MultiRowXYPlotRenderer/configSchema.d.ts +2 -0
  106. package/dist/MultiRowXYPlotRenderer/configSchema.js +31 -0
  107. package/dist/MultiRowXYPlotRenderer/configSchema.js.map +1 -0
  108. package/dist/MultiRowXYPlotRenderer/index.d.ts +3 -0
  109. package/dist/MultiRowXYPlotRenderer/index.js +19 -0
  110. package/dist/MultiRowXYPlotRenderer/index.js.map +1 -0
  111. package/dist/MultiWiggleAdapter/MultiWiggleAdapter.d.ts +28 -0
  112. package/dist/MultiWiggleAdapter/MultiWiggleAdapter.js +244 -0
  113. package/dist/MultiWiggleAdapter/MultiWiggleAdapter.js.map +1 -0
  114. package/dist/MultiWiggleAdapter/configSchema.d.ts +2 -0
  115. package/dist/MultiWiggleAdapter/configSchema.js +14 -0
  116. package/dist/MultiWiggleAdapter/configSchema.js.map +1 -0
  117. package/dist/MultiWiggleAdapter/index.d.ts +3 -0
  118. package/dist/MultiWiggleAdapter/index.js +47 -0
  119. package/dist/MultiWiggleAdapter/index.js.map +1 -0
  120. package/dist/MultiWiggleAddTrackWidget/AddTrackWorkflow.d.ts +5 -0
  121. package/dist/MultiWiggleAddTrackWidget/AddTrackWorkflow.js +139 -0
  122. package/dist/MultiWiggleAddTrackWidget/AddTrackWorkflow.js.map +1 -0
  123. package/dist/MultiWiggleAddTrackWidget/index.d.ts +3 -0
  124. package/dist/MultiWiggleAddTrackWidget/index.js +19 -0
  125. package/dist/MultiWiggleAddTrackWidget/index.js.map +1 -0
  126. package/dist/MultiWiggleRendering.d.ts +21 -0
  127. package/dist/MultiWiggleRendering.js +164 -0
  128. package/dist/MultiWiggleRendering.js.map +1 -0
  129. package/dist/MultiXYPlotRenderer/MultiXYPlotRenderer.d.ts +7 -0
  130. package/dist/MultiXYPlotRenderer/MultiXYPlotRenderer.js +153 -0
  131. package/dist/MultiXYPlotRenderer/MultiXYPlotRenderer.js.map +1 -0
  132. package/dist/MultiXYPlotRenderer/configSchema.d.ts +2 -0
  133. package/dist/MultiXYPlotRenderer/configSchema.js +31 -0
  134. package/dist/MultiXYPlotRenderer/configSchema.js.map +1 -0
  135. package/dist/MultiXYPlotRenderer/index.d.ts +3 -0
  136. package/dist/MultiXYPlotRenderer/index.js +19 -0
  137. package/dist/MultiXYPlotRenderer/index.js.map +1 -0
  138. package/dist/QuantitativeTrack/index.d.ts +3 -0
  139. package/dist/QuantitativeTrack/index.js +19 -0
  140. package/dist/QuantitativeTrack/index.js.map +1 -0
  141. package/dist/Tooltip.d.ts +20 -0
  142. package/dist/Tooltip.js +124 -0
  143. package/dist/Tooltip.js.map +1 -0
  144. package/dist/WiggleBaseRenderer.d.ts +9 -10
  145. package/dist/WiggleBaseRenderer.js +23 -10
  146. package/dist/WiggleBaseRenderer.js.map +1 -1
  147. package/dist/WiggleRPC/rpcMethods.d.ts +17 -1
  148. package/dist/WiggleRPC/rpcMethods.js +91 -16
  149. package/dist/WiggleRPC/rpcMethods.js.map +1 -1
  150. package/dist/WiggleRendering.d.ts +1 -1
  151. package/dist/WiggleRendering.js +4 -8
  152. package/dist/WiggleRendering.js.map +1 -1
  153. package/dist/XYPlotRenderer/XYPlotRenderer.d.ts +4 -1
  154. package/dist/XYPlotRenderer/XYPlotRenderer.js +23 -126
  155. package/dist/XYPlotRenderer/XYPlotRenderer.js.map +1 -1
  156. package/dist/XYPlotRenderer/configSchema.d.ts +2 -0
  157. package/dist/XYPlotRenderer/configSchema.js +31 -0
  158. package/dist/XYPlotRenderer/configSchema.js.map +1 -0
  159. package/dist/XYPlotRenderer/index.d.ts +7 -3
  160. package/dist/XYPlotRenderer/index.js +17 -25
  161. package/dist/XYPlotRenderer/index.js.map +1 -1
  162. package/dist/configSchema.js +0 -5
  163. package/dist/configSchema.js.map +1 -1
  164. package/dist/drawxy.d.ts +50 -0
  165. package/dist/drawxy.js +411 -0
  166. package/dist/drawxy.js.map +1 -0
  167. package/dist/index.d.ts +79 -21
  168. package/dist/index.js +56 -89
  169. package/dist/index.js.map +1 -1
  170. package/dist/util.d.ts +34 -1
  171. package/dist/util.js +159 -1
  172. package/dist/util.js.map +1 -1
  173. package/esm/BigWigAdapter/BigWigAdapter.d.ts +8 -7
  174. package/esm/BigWigAdapter/BigWigAdapter.js +37 -18
  175. package/esm/BigWigAdapter/BigWigAdapter.js.map +1 -1
  176. package/esm/BigWigAdapter/configSchema.js +5 -0
  177. package/esm/BigWigAdapter/configSchema.js.map +1 -1
  178. package/esm/BigWigAdapter/index.d.ts +3 -1
  179. package/esm/BigWigAdapter/index.js +14 -1
  180. package/esm/BigWigAdapter/index.js.map +1 -1
  181. package/esm/CreateMultiWiggleExtension/ConfirmDialog.d.ts +9 -0
  182. package/esm/CreateMultiWiggleExtension/ConfirmDialog.js +26 -0
  183. package/esm/CreateMultiWiggleExtension/ConfirmDialog.js.map +1 -0
  184. package/esm/CreateMultiWiggleExtension/index.d.ts +2 -0
  185. package/esm/CreateMultiWiggleExtension/index.js +51 -0
  186. package/esm/CreateMultiWiggleExtension/index.js.map +1 -0
  187. package/esm/DensityRenderer/DensityRenderer.d.ts +6 -0
  188. package/esm/DensityRenderer/DensityRenderer.js +8 -0
  189. package/esm/DensityRenderer/DensityRenderer.js.map +1 -0
  190. package/esm/DensityRenderer/configSchema.d.ts +2 -0
  191. package/esm/DensityRenderer/configSchema.js +5 -0
  192. package/esm/DensityRenderer/configSchema.js.map +1 -0
  193. package/esm/DensityRenderer/index.d.ts +3 -6
  194. package/esm/DensityRenderer/index.js +11 -38
  195. package/esm/DensityRenderer/index.js.map +1 -1
  196. package/esm/LinePlotRenderer/LinePlotRenderer.d.ts +4 -2
  197. package/esm/LinePlotRenderer/LinePlotRenderer.js +7 -65
  198. package/esm/LinePlotRenderer/LinePlotRenderer.js.map +1 -1
  199. package/esm/LinePlotRenderer/configSchema.d.ts +2 -0
  200. package/esm/LinePlotRenderer/configSchema.js +11 -0
  201. package/esm/LinePlotRenderer/configSchema.js.map +1 -0
  202. package/esm/LinePlotRenderer/index.d.ts +3 -3
  203. package/esm/LinePlotRenderer/index.js +11 -11
  204. package/esm/LinePlotRenderer/index.js.map +1 -1
  205. package/esm/LinearWiggleDisplay/components/SetColorDialog.d.ts +6 -2
  206. package/esm/LinearWiggleDisplay/components/SetColorDialog.js +9 -16
  207. package/esm/LinearWiggleDisplay/components/SetColorDialog.js.map +1 -1
  208. package/esm/LinearWiggleDisplay/components/Tooltip.d.ts +6 -11
  209. package/esm/LinearWiggleDisplay/components/Tooltip.js +3 -76
  210. package/esm/LinearWiggleDisplay/components/Tooltip.js.map +1 -1
  211. package/esm/LinearWiggleDisplay/index.d.ts +7 -3
  212. package/esm/LinearWiggleDisplay/index.js +20 -3
  213. package/esm/LinearWiggleDisplay/index.js.map +1 -1
  214. package/esm/LinearWiggleDisplay/models/model.d.ts +24 -5
  215. package/esm/LinearWiggleDisplay/models/model.js +87 -133
  216. package/esm/LinearWiggleDisplay/models/model.js.map +1 -1
  217. package/esm/MultiDensityRenderer/MultiDensityRenderer.d.ts +7 -0
  218. package/esm/MultiDensityRenderer/MultiDensityRenderer.js +36 -0
  219. package/esm/MultiDensityRenderer/MultiDensityRenderer.js.map +1 -0
  220. package/esm/MultiDensityRenderer/configSchema.d.ts +2 -0
  221. package/esm/MultiDensityRenderer/configSchema.js +5 -0
  222. package/esm/MultiDensityRenderer/configSchema.js.map +1 -0
  223. package/esm/MultiDensityRenderer/index.d.ts +3 -0
  224. package/esm/MultiDensityRenderer/index.js +12 -0
  225. package/esm/MultiDensityRenderer/index.js.map +1 -0
  226. package/esm/MultiLineRenderer/MultiLineRenderer.d.ts +7 -0
  227. package/esm/MultiLineRenderer/MultiLineRenderer.js +25 -0
  228. package/esm/MultiLineRenderer/MultiLineRenderer.js.map +1 -0
  229. package/esm/MultiLineRenderer/configSchema.d.ts +2 -0
  230. package/esm/MultiLineRenderer/configSchema.js +18 -0
  231. package/esm/MultiLineRenderer/configSchema.js.map +1 -0
  232. package/esm/MultiLineRenderer/index.d.ts +3 -0
  233. package/esm/MultiLineRenderer/index.js +12 -0
  234. package/esm/MultiLineRenderer/index.js.map +1 -0
  235. package/esm/MultiLinearWiggleDisplay/components/SetColorDialog.d.ts +10 -0
  236. package/esm/MultiLinearWiggleDisplay/components/SetColorDialog.js +162 -0
  237. package/esm/MultiLinearWiggleDisplay/components/SetColorDialog.js.map +1 -0
  238. package/esm/MultiLinearWiggleDisplay/components/SetMinMaxDialog.d.ts +11 -0
  239. package/esm/MultiLinearWiggleDisplay/components/SetMinMaxDialog.js +46 -0
  240. package/esm/MultiLinearWiggleDisplay/components/SetMinMaxDialog.js.map +1 -0
  241. package/esm/MultiLinearWiggleDisplay/components/Tooltip.d.ts +25 -0
  242. package/esm/MultiLinearWiggleDisplay/components/Tooltip.js +43 -0
  243. package/esm/MultiLinearWiggleDisplay/components/Tooltip.js.map +1 -0
  244. package/esm/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +13 -0
  245. package/esm/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.js +99 -0
  246. package/esm/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.js.map +1 -0
  247. package/esm/MultiLinearWiggleDisplay/components/YScaleBar.d.ts +7 -0
  248. package/esm/MultiLinearWiggleDisplay/components/YScaleBar.js +9 -0
  249. package/esm/MultiLinearWiggleDisplay/components/YScaleBar.js.map +1 -0
  250. package/esm/MultiLinearWiggleDisplay/components/util.d.ts +10 -0
  251. package/esm/MultiLinearWiggleDisplay/components/util.js +31 -0
  252. package/esm/MultiLinearWiggleDisplay/components/util.js.map +1 -0
  253. package/esm/MultiLinearWiggleDisplay/index.d.ts +3 -0
  254. package/esm/MultiLinearWiggleDisplay/index.js +18 -0
  255. package/esm/MultiLinearWiggleDisplay/index.js.map +1 -0
  256. package/esm/MultiLinearWiggleDisplay/models/configSchema.d.ts +2 -0
  257. package/esm/MultiLinearWiggleDisplay/models/configSchema.js +74 -0
  258. package/esm/MultiLinearWiggleDisplay/models/configSchema.js.map +1 -0
  259. package/esm/MultiLinearWiggleDisplay/models/model.d.ts +339 -0
  260. package/esm/MultiLinearWiggleDisplay/models/model.js +570 -0
  261. package/esm/MultiLinearWiggleDisplay/models/model.js.map +1 -0
  262. package/esm/MultiQuantitativeTrack/index.d.ts +3 -0
  263. package/esm/MultiQuantitativeTrack/index.js +14 -0
  264. package/esm/MultiQuantitativeTrack/index.js.map +1 -0
  265. package/esm/MultiRowLineRenderer/MultiRowLineRenderer.d.ts +7 -0
  266. package/esm/MultiRowLineRenderer/MultiRowLineRenderer.js +33 -0
  267. package/esm/MultiRowLineRenderer/MultiRowLineRenderer.js.map +1 -0
  268. package/esm/MultiRowLineRenderer/configSchema.d.ts +2 -0
  269. package/esm/MultiRowLineRenderer/configSchema.js +18 -0
  270. package/esm/MultiRowLineRenderer/configSchema.js.map +1 -0
  271. package/esm/MultiRowLineRenderer/index.d.ts +3 -0
  272. package/esm/MultiRowLineRenderer/index.js +12 -0
  273. package/esm/MultiRowLineRenderer/index.js.map +1 -0
  274. package/esm/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.d.ts +7 -0
  275. package/esm/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js +39 -0
  276. package/esm/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.js.map +1 -0
  277. package/esm/MultiRowXYPlotRenderer/configSchema.d.ts +2 -0
  278. package/esm/MultiRowXYPlotRenderer/configSchema.js +26 -0
  279. package/esm/MultiRowXYPlotRenderer/configSchema.js.map +1 -0
  280. package/esm/MultiRowXYPlotRenderer/index.d.ts +3 -0
  281. package/esm/MultiRowXYPlotRenderer/index.js +12 -0
  282. package/esm/MultiRowXYPlotRenderer/index.js.map +1 -0
  283. package/esm/MultiWiggleAdapter/MultiWiggleAdapter.d.ts +28 -0
  284. package/esm/MultiWiggleAdapter/MultiWiggleAdapter.js +87 -0
  285. package/esm/MultiWiggleAdapter/MultiWiggleAdapter.js.map +1 -0
  286. package/esm/MultiWiggleAdapter/configSchema.d.ts +2 -0
  287. package/esm/MultiWiggleAdapter/configSchema.js +12 -0
  288. package/esm/MultiWiggleAdapter/configSchema.js.map +1 -0
  289. package/esm/MultiWiggleAdapter/index.d.ts +3 -0
  290. package/esm/MultiWiggleAdapter/index.js +15 -0
  291. package/esm/MultiWiggleAdapter/index.js.map +1 -0
  292. package/esm/MultiWiggleAddTrackWidget/AddTrackWorkflow.d.ts +5 -0
  293. package/esm/MultiWiggleAddTrackWidget/AddTrackWorkflow.js +87 -0
  294. package/esm/MultiWiggleAddTrackWidget/AddTrackWorkflow.js.map +1 -0
  295. package/esm/MultiWiggleAddTrackWidget/index.d.ts +3 -0
  296. package/esm/MultiWiggleAddTrackWidget/index.js +12 -0
  297. package/esm/MultiWiggleAddTrackWidget/index.js.map +1 -0
  298. package/esm/MultiWiggleRendering.d.ts +21 -0
  299. package/esm/MultiWiggleRendering.js +75 -0
  300. package/esm/MultiWiggleRendering.js.map +1 -0
  301. package/esm/MultiXYPlotRenderer/MultiXYPlotRenderer.d.ts +7 -0
  302. package/esm/MultiXYPlotRenderer/MultiXYPlotRenderer.js +28 -0
  303. package/esm/MultiXYPlotRenderer/MultiXYPlotRenderer.js.map +1 -0
  304. package/esm/MultiXYPlotRenderer/configSchema.d.ts +2 -0
  305. package/esm/MultiXYPlotRenderer/configSchema.js +26 -0
  306. package/esm/MultiXYPlotRenderer/configSchema.js.map +1 -0
  307. package/esm/MultiXYPlotRenderer/index.d.ts +3 -0
  308. package/esm/MultiXYPlotRenderer/index.js +12 -0
  309. package/esm/MultiXYPlotRenderer/index.js.map +1 -0
  310. package/esm/QuantitativeTrack/index.d.ts +3 -0
  311. package/esm/QuantitativeTrack/index.js +14 -0
  312. package/esm/QuantitativeTrack/index.js.map +1 -0
  313. package/esm/Tooltip.d.ts +20 -0
  314. package/esm/Tooltip.js +71 -0
  315. package/esm/Tooltip.js.map +1 -0
  316. package/esm/WiggleBaseRenderer.d.ts +9 -10
  317. package/esm/WiggleBaseRenderer.js +7 -5
  318. package/esm/WiggleBaseRenderer.js.map +1 -1
  319. package/esm/WiggleRPC/rpcMethods.d.ts +17 -1
  320. package/esm/WiggleRPC/rpcMethods.js +49 -7
  321. package/esm/WiggleRPC/rpcMethods.js.map +1 -1
  322. package/esm/WiggleRendering.d.ts +1 -1
  323. package/esm/WiggleRendering.js +4 -8
  324. package/esm/WiggleRendering.js.map +1 -1
  325. package/esm/XYPlotRenderer/XYPlotRenderer.d.ts +4 -1
  326. package/esm/XYPlotRenderer/XYPlotRenderer.js +16 -99
  327. package/esm/XYPlotRenderer/XYPlotRenderer.js.map +1 -1
  328. package/esm/XYPlotRenderer/configSchema.d.ts +2 -0
  329. package/esm/XYPlotRenderer/configSchema.js +26 -0
  330. package/esm/XYPlotRenderer/configSchema.js.map +1 -0
  331. package/esm/XYPlotRenderer/index.d.ts +7 -3
  332. package/esm/XYPlotRenderer/index.js +12 -22
  333. package/esm/XYPlotRenderer/index.js.map +1 -1
  334. package/esm/configSchema.js +0 -5
  335. package/esm/configSchema.js.map +1 -1
  336. package/esm/drawxy.d.ts +50 -0
  337. package/esm/drawxy.js +286 -0
  338. package/esm/drawxy.js.map +1 -0
  339. package/esm/index.d.ts +79 -21
  340. package/esm/index.js +49 -74
  341. package/esm/index.js.map +1 -1
  342. package/esm/util.d.ts +34 -1
  343. package/esm/util.js +108 -0
  344. package/esm/util.js.map +1 -1
  345. package/package.json +11 -5
  346. package/src/BigWigAdapter/BigWigAdapter.ts +53 -35
  347. package/src/BigWigAdapter/__snapshots__/BigWigAdapter.test.ts.snap +10 -10
  348. package/src/BigWigAdapter/configSchema.ts +5 -0
  349. package/src/BigWigAdapter/index.ts +19 -1
  350. package/src/CreateMultiWiggleExtension/ConfirmDialog.tsx +66 -0
  351. package/src/CreateMultiWiggleExtension/index.ts +57 -0
  352. package/src/DensityRenderer/DensityRenderer.test.js +8 -2
  353. package/src/DensityRenderer/DensityRenderer.ts +14 -0
  354. package/src/DensityRenderer/__snapshots__/DensityRenderer.test.js.snap +8 -0
  355. package/src/DensityRenderer/configSchema.ts +11 -0
  356. package/src/DensityRenderer/index.ts +14 -53
  357. package/src/LinePlotRenderer/LinePlotRenderer.ts +19 -0
  358. package/src/LinePlotRenderer/{index.js → configSchema.ts} +3 -4
  359. package/src/LinePlotRenderer/index.ts +16 -0
  360. package/src/LinearWiggleDisplay/components/SetColorDialog.tsx +17 -19
  361. package/src/LinearWiggleDisplay/components/Tooltip.tsx +6 -122
  362. package/src/LinearWiggleDisplay/index.ts +24 -3
  363. package/src/LinearWiggleDisplay/models/model.tsx +98 -174
  364. package/src/MultiDensityRenderer/MultiDensityRenderer.ts +39 -0
  365. package/src/MultiDensityRenderer/configSchema.ts +10 -0
  366. package/src/MultiDensityRenderer/index.ts +16 -0
  367. package/src/MultiLineRenderer/MultiLineRenderer.ts +29 -0
  368. package/src/MultiLineRenderer/configSchema.ts +24 -0
  369. package/src/MultiLineRenderer/index.ts +17 -0
  370. package/src/MultiLinearWiggleDisplay/components/SetColorDialog.tsx +322 -0
  371. package/src/MultiLinearWiggleDisplay/components/SetMinMaxDialog.tsx +113 -0
  372. package/src/MultiLinearWiggleDisplay/components/Tooltip.tsx +76 -0
  373. package/src/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.tsx +261 -0
  374. package/src/MultiLinearWiggleDisplay/components/YScaleBar.tsx +25 -0
  375. package/src/MultiLinearWiggleDisplay/components/declare.d.ts +1 -0
  376. package/src/MultiLinearWiggleDisplay/components/util.test.ts +69 -0
  377. package/src/MultiLinearWiggleDisplay/components/util.ts +33 -0
  378. package/src/MultiLinearWiggleDisplay/index.ts +20 -0
  379. package/src/MultiLinearWiggleDisplay/models/configSchema.ts +94 -0
  380. package/src/MultiLinearWiggleDisplay/models/model.tsx +721 -0
  381. package/src/MultiQuantitativeTrack/index.ts +26 -0
  382. package/src/MultiRowLineRenderer/MultiRowLineRenderer.ts +36 -0
  383. package/src/MultiRowLineRenderer/configSchema.ts +25 -0
  384. package/src/MultiRowLineRenderer/index.ts +16 -0
  385. package/src/MultiRowXYPlotRenderer/MultiRowXYPlotRenderer.ts +43 -0
  386. package/src/MultiRowXYPlotRenderer/configSchema.ts +33 -0
  387. package/src/MultiRowXYPlotRenderer/index.ts +16 -0
  388. package/src/MultiWiggleAdapter/MultiWiggleAdapter.ts +120 -0
  389. package/src/MultiWiggleAdapter/configSchema.ts +16 -0
  390. package/src/MultiWiggleAdapter/index.ts +20 -0
  391. package/src/MultiWiggleAdapter/test_data/volvox.bw +0 -0
  392. package/src/MultiWiggleAddTrackWidget/AddTrackWorkflow.tsx +130 -0
  393. package/src/MultiWiggleAddTrackWidget/index.ts +17 -0
  394. package/src/MultiWiggleRendering.tsx +125 -0
  395. package/src/MultiXYPlotRenderer/MultiXYPlotRenderer.ts +32 -0
  396. package/src/MultiXYPlotRenderer/configSchema.ts +31 -0
  397. package/src/MultiXYPlotRenderer/index.ts +17 -0
  398. package/src/QuantitativeTrack/index.ts +26 -0
  399. package/src/Tooltip.tsx +123 -0
  400. package/src/WiggleBaseRenderer.tsx +15 -9
  401. package/src/WiggleRPC/rpcMethods.ts +68 -17
  402. package/src/WiggleRendering.tsx +12 -18
  403. package/src/XYPlotRenderer/XYPlotRenderer.test.js +3 -1
  404. package/src/XYPlotRenderer/XYPlotRenderer.ts +19 -171
  405. package/src/XYPlotRenderer/__snapshots__/XYPlotRenderer.test.js.snap +8 -0
  406. package/src/XYPlotRenderer/configSchema.ts +32 -0
  407. package/src/XYPlotRenderer/index.ts +16 -27
  408. package/src/__snapshots__/WiggleRendering.test.js.snap +0 -2
  409. package/src/configSchema.ts +0 -5
  410. package/src/declare.d.ts +0 -1
  411. package/src/drawxy.ts +387 -0
  412. package/src/index.ts +75 -129
  413. package/src/util.ts +174 -0
  414. package/src/LinePlotRenderer/LinePlotRenderer.js +0 -91
@@ -0,0 +1,32 @@
1
+ import { ConfigurationSchema } from '@jbrowse/core/configuration'
2
+ import ConfigSchema from '../configSchema'
3
+ import { types } from 'mobx-state-tree'
4
+
5
+ const configSchema = ConfigurationSchema(
6
+ 'XYPlotRenderer',
7
+ {
8
+ filled: {
9
+ type: 'boolean',
10
+ defaultValue: true,
11
+ },
12
+ displayCrossHatches: {
13
+ type: 'boolean',
14
+ description: 'choose to draw cross hatches (sideways lines)',
15
+ defaultValue: false,
16
+ },
17
+ summaryScoreMode: {
18
+ type: 'stringEnum',
19
+ model: types.enumeration('Score type', ['max', 'min', 'avg', 'whiskers']),
20
+ description:
21
+ 'choose whether to use max/min/average or whiskers which combines all three into the same rendering',
22
+ defaultValue: 'whiskers',
23
+ },
24
+ minSize: {
25
+ type: 'number',
26
+ defaultValue: 0,
27
+ },
28
+ },
29
+ { baseConfiguration: ConfigSchema, explicitlyTyped: true },
30
+ )
31
+
32
+ export default configSchema
@@ -1,28 +1,17 @@
1
- import { ConfigurationSchema } from '@jbrowse/core/configuration'
2
- import ConfigSchema from '../configSchema'
3
- import { types } from 'mobx-state-tree'
4
- export { default as ReactComponent } from '../WiggleRendering'
5
- export { default } from './XYPlotRenderer'
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 }
6
6
 
7
- export const configSchema = ConfigurationSchema(
8
- 'XYPlotRenderer',
9
- {
10
- filled: {
11
- type: 'boolean',
12
- defaultValue: true,
13
- },
14
- displayCrossHatches: {
15
- type: 'boolean',
16
- description: 'choose to draw cross hatches (sideways lines)',
17
- defaultValue: false,
18
- },
19
- summaryScoreMode: {
20
- type: 'stringEnum',
21
- model: types.enumeration('Score type', ['max', 'min', 'avg', 'whiskers']),
22
- description:
23
- 'choose whether to use max/min/average or whiskers which combines all three into the same rendering',
24
- defaultValue: 'whiskers',
25
- },
26
- },
27
- { baseConfiguration: ConfigSchema, explicitlyTyped: true },
28
- )
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,11 +19,6 @@ 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',
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
+ }