@tetacom/svg-charts 1.0.2 → 1.1.3

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 (265) hide show
  1. package/{dist/chart → chart}/base/series-base.component.d.ts +4 -1
  2. package/{dist/chart → chart}/chart/chart.component.d.ts +12 -9
  3. package/chart/chart-container/chart-container.component.d.ts +37 -0
  4. package/chart/chart-container/gridlines/gridlines.component.d.ts +14 -0
  5. package/{dist/chart/chart-container/plotband/plotband.component.d.ts → chart/chart-container/plotband/plot-band.component.d.ts} +11 -10
  6. package/{dist/chart → chart}/chart-container/plotline/plotline.component.d.ts +5 -5
  7. package/{dist/chart → chart}/chart-container/series/bar/bar-series.component.d.ts +0 -0
  8. package/{dist/chart → chart}/chart-container/series/line/line-series.component.d.ts +2 -2
  9. package/chart/chart-container/series/scatter-series/scatter-series.component.d.ts +28 -0
  10. package/{dist/chart → chart}/chart-container/series-host/series-host.component.d.ts +4 -1
  11. package/{dist/chart → chart}/chart-container/tooltip/tooltip.component.d.ts +6 -3
  12. package/chart/chart-container/x-axis/x-axis.component.d.ts +19 -0
  13. package/chart/chart-container/y-axis/y-axis.component.d.ts +20 -0
  14. package/{dist/chart → chart}/chart.module.d.ts +4 -3
  15. package/{dist/chart → chart}/core/axis/axis.d.ts +8 -3
  16. package/{dist/chart → chart}/core/axis/builders/axis-size-builder.d.ts +0 -0
  17. package/{dist/chart → chart}/core/axis/builders/extremes-builder.d.ts +0 -0
  18. package/{dist/chart → chart}/core/axis/builders/public-api.d.ts +0 -0
  19. package/{dist/chart → chart}/core/utils/generate-ticks.d.ts +0 -0
  20. package/{dist/chart → chart}/core/utils/get-text-width.d.ts +0 -0
  21. package/{dist/chart → chart}/core/utils/public-api.d.ts +0 -0
  22. package/chart/default/default-axis-config.d.ts +2 -0
  23. package/chart/default/default-chart-config.d.ts +2 -0
  24. package/chart/default/default-series-config.d.ts +3 -0
  25. package/{dist/chart → chart}/directives/brushable.directive.d.ts +2 -1
  26. package/{dist/chart → chart}/directives/zoomable.directive.d.ts +1 -3
  27. package/{dist/chart → chart}/legend/legend.component.d.ts +1 -3
  28. package/chart/model/axis-options.d.ts +19 -0
  29. package/{dist/chart → chart}/model/base-point.d.ts +1 -1
  30. package/{dist/chart → chart}/model/chart-bounds.d.ts +0 -0
  31. package/{dist/chart → chart}/model/enum/axis-orientation.d.ts +0 -0
  32. package/{dist/chart → chart}/model/enum/brush-type.d.ts +0 -0
  33. package/{dist/chart → chart}/model/enum/drag-point-type.d.ts +0 -0
  34. package/{dist/chart → chart}/model/enum/public-api.d.ts +1 -1
  35. package/chart/model/enum/scale-type.d.ts +8 -0
  36. package/{dist/chart → chart}/model/enum/series-type.d.ts +2 -1
  37. package/{dist/chart → chart}/model/enum/tooltip-tracking.d.ts +0 -0
  38. package/{dist/chart → chart}/model/enum/zoom-type.d.ts +0 -0
  39. package/chart/model/i-broadcast-message.d.ts +17 -0
  40. package/{dist/chart → chart}/model/i-builder.d.ts +0 -0
  41. package/{dist/chart → chart}/model/i-chart-config.d.ts +1 -0
  42. package/{dist/chart → chart}/model/i-chart-event.d.ts +0 -0
  43. package/{dist/chart → chart}/model/i-display-tooltip.d.ts +0 -0
  44. package/{dist/chart → chart}/model/i-point-move.d.ts +0 -0
  45. package/{dist/chart → chart}/model/marker-options.d.ts +0 -0
  46. package/{dist/chart/model/plotband.d.ts → chart/model/plot-band.d.ts} +7 -5
  47. package/{dist/chart/model/plotline.d.ts → chart/model/plot-line.d.ts} +3 -1
  48. package/{dist/chart → chart}/model/public-api.d.ts +2 -2
  49. package/{dist/chart → chart}/model/series.d.ts +0 -0
  50. package/{dist/chart → chart}/model/svg-attributes.d.ts +0 -0
  51. package/{dist/chart → chart}/model/tooltip-options.d.ts +0 -0
  52. package/{dist/chart → chart}/service/broadcast.service.d.ts +0 -0
  53. package/{dist/chart → chart}/service/brush.service.d.ts +2 -5
  54. package/{dist/chart → chart}/service/chart.service.d.ts +16 -17
  55. package/chart/service/scale.service.d.ts +19 -0
  56. package/{dist/chart → chart}/service/zoom.service.d.ts +6 -14
  57. package/esm2020/chart/base/series-base.component.mjs +32 -0
  58. package/esm2020/chart/chart/chart.component.mjs +71 -0
  59. package/esm2020/chart/chart-container/chart-container.component.mjs +133 -0
  60. package/esm2020/chart/chart-container/gridlines/gridlines.component.mjs +29 -0
  61. package/esm2020/chart/chart-container/plotband/plot-band.component.mjs +150 -0
  62. package/esm2020/chart/chart-container/plotline/plotline.component.mjs +76 -0
  63. package/esm2020/chart/chart-container/series/bar/bar-series.component.mjs +48 -0
  64. package/esm2020/chart/chart-container/series/line/line-series.component.mjs +152 -0
  65. package/esm2020/chart/chart-container/series/scatter-series/scatter-series.component.mjs +174 -0
  66. package/esm2020/chart/chart-container/series-host/series-host.component.mjs +68 -0
  67. package/esm2020/chart/chart-container/tooltip/tooltip.component.mjs +83 -0
  68. package/esm2020/chart/chart-container/x-axis/x-axis.component.mjs +53 -0
  69. package/esm2020/chart/chart-container/y-axis/y-axis.component.mjs +58 -0
  70. package/{dist/esm2020 → esm2020}/chart/chart.module.mjs +8 -5
  71. package/esm2020/chart/core/axis/axis.mjs +105 -0
  72. package/{dist/esm2020 → esm2020}/chart/core/axis/builders/axis-size-builder.mjs +0 -0
  73. package/esm2020/chart/core/axis/builders/extremes-builder.mjs +31 -0
  74. package/{dist/esm2020 → esm2020}/chart/core/axis/builders/public-api.mjs +0 -0
  75. package/{dist/esm2020 → esm2020}/chart/core/utils/generate-ticks.mjs +0 -0
  76. package/{dist/esm2020 → esm2020}/chart/core/utils/get-text-width.mjs +0 -0
  77. package/{dist/esm2020 → esm2020}/chart/core/utils/public-api.mjs +0 -0
  78. package/esm2020/chart/default/default-axis-config.mjs +9 -0
  79. package/esm2020/chart/default/default-chart-config.mjs +23 -0
  80. package/esm2020/chart/default/default-series-config.mjs +8 -0
  81. package/{dist/esm2020 → esm2020}/chart/directives/brushable.directive.mjs +5 -3
  82. package/esm2020/chart/directives/zoomable.directive.mjs +36 -0
  83. package/esm2020/chart/legend/legend.component.mjs +27 -0
  84. package/esm2020/chart/model/axis-options.mjs +2 -0
  85. package/{dist/esm2020 → esm2020}/chart/model/base-point.mjs +1 -1
  86. package/{dist/esm2020 → esm2020}/chart/model/chart-bounds.mjs +0 -0
  87. package/{dist/esm2020 → esm2020}/chart/model/enum/axis-orientation.mjs +0 -0
  88. package/{dist/esm2020 → esm2020}/chart/model/enum/brush-type.mjs +0 -0
  89. package/{dist/esm2020 → esm2020}/chart/model/enum/drag-point-type.mjs +0 -0
  90. package/{dist/esm2020 → esm2020}/chart/model/enum/public-api.mjs +2 -2
  91. package/esm2020/chart/model/enum/scale-type.mjs +10 -0
  92. package/{dist/esm2020 → esm2020}/chart/model/enum/series-type.mjs +2 -1
  93. package/{dist/esm2020 → esm2020}/chart/model/enum/tooltip-tracking.mjs +0 -0
  94. package/{dist/esm2020 → esm2020}/chart/model/enum/zoom-type.mjs +0 -0
  95. package/esm2020/chart/model/i-broadcast-message.mjs +2 -0
  96. package/{dist/esm2020 → esm2020}/chart/model/i-builder.mjs +0 -0
  97. package/{dist/esm2020 → esm2020}/chart/model/i-chart-config.mjs +1 -1
  98. package/{dist/esm2020 → esm2020}/chart/model/i-chart-event.mjs +0 -0
  99. package/{dist/esm2020 → esm2020}/chart/model/i-display-tooltip.mjs +0 -0
  100. package/{dist/esm2020 → esm2020}/chart/model/i-point-move.mjs +0 -0
  101. package/{dist/esm2020 → esm2020}/chart/model/marker-options.mjs +0 -0
  102. package/esm2020/chart/model/plot-band.mjs +17 -0
  103. package/esm2020/chart/model/plot-line.mjs +13 -0
  104. package/{dist/esm2020 → esm2020}/chart/model/public-api.mjs +3 -3
  105. package/{dist/esm2020 → esm2020}/chart/model/series.mjs +0 -0
  106. package/{dist/esm2020 → esm2020}/chart/model/svg-attributes.mjs +0 -0
  107. package/{dist/esm2020 → esm2020}/chart/model/tooltip-options.mjs +0 -0
  108. package/esm2020/chart/service/broadcast.service.mjs +23 -0
  109. package/esm2020/chart/service/brush.service.mjs +70 -0
  110. package/esm2020/chart/service/chart.service.mjs +95 -0
  111. package/esm2020/chart/service/scale.service.mjs +152 -0
  112. package/esm2020/chart/service/zoom.service.mjs +114 -0
  113. package/esm2020/public-api.mjs +9 -0
  114. package/{dist/esm2020 → esm2020}/tetacom-svg-charts.mjs +0 -0
  115. package/fesm2015/tetacom-svg-charts.mjs +1912 -0
  116. package/fesm2015/tetacom-svg-charts.mjs.map +1 -0
  117. package/fesm2020/tetacom-svg-charts.mjs +1887 -0
  118. package/fesm2020/tetacom-svg-charts.mjs.map +1 -0
  119. package/package.json +22 -2
  120. package/{dist/public-api.d.ts → public-api.d.ts} +0 -0
  121. package/{dist/tetacom-svg-charts.d.ts → tetacom-svg-charts.d.ts} +0 -0
  122. package/dist/README.md +0 -24
  123. package/dist/chart/chart-container/chart-container.component.d.ts +0 -42
  124. package/dist/chart/chart-container/gridlines/gridlines.component.d.ts +0 -23
  125. package/dist/chart/chart-container/x-axis/x-axis.component.d.ts +0 -23
  126. package/dist/chart/chart-container/y-axis/y-axis.component.d.ts +0 -24
  127. package/dist/chart/model/axis-options.d.ts +0 -17
  128. package/dist/chart/model/enum/axis-type.d.ts +0 -7
  129. package/dist/chart/model/i-broadcast-message.d.ts +0 -5
  130. package/dist/chart/service/axes.service.d.ts +0 -11
  131. package/dist/chart/service/scale.service.d.ts +0 -14
  132. package/dist/esm2020/chart/base/series-base.component.mjs +0 -34
  133. package/dist/esm2020/chart/chart/chart.component.mjs +0 -73
  134. package/dist/esm2020/chart/chart-container/chart-container.component.mjs +0 -151
  135. package/dist/esm2020/chart/chart-container/gridlines/gridlines.component.mjs +0 -41
  136. package/dist/esm2020/chart/chart-container/plotband/plotband.component.mjs +0 -139
  137. package/dist/esm2020/chart/chart-container/plotline/plotline.component.mjs +0 -79
  138. package/dist/esm2020/chart/chart-container/series/bar/bar-series.component.mjs +0 -48
  139. package/dist/esm2020/chart/chart-container/series/line/line-series.component.mjs +0 -148
  140. package/dist/esm2020/chart/chart-container/series-host/series-host.component.mjs +0 -59
  141. package/dist/esm2020/chart/chart-container/tooltip/tooltip.component.mjs +0 -81
  142. package/dist/esm2020/chart/chart-container/x-axis/x-axis.component.mjs +0 -56
  143. package/dist/esm2020/chart/chart-container/y-axis/y-axis.component.mjs +0 -63
  144. package/dist/esm2020/chart/core/axis/axis.mjs +0 -96
  145. package/dist/esm2020/chart/core/axis/builders/extremes-builder.mjs +0 -32
  146. package/dist/esm2020/chart/directives/zoomable.directive.mjs +0 -37
  147. package/dist/esm2020/chart/legend/legend.component.mjs +0 -30
  148. package/dist/esm2020/chart/model/axis-options.mjs +0 -2
  149. package/dist/esm2020/chart/model/enum/axis-type.mjs +0 -9
  150. package/dist/esm2020/chart/model/i-broadcast-message.mjs +0 -2
  151. package/dist/esm2020/chart/model/plotband.mjs +0 -16
  152. package/dist/esm2020/chart/model/plotline.mjs +0 -12
  153. package/dist/esm2020/chart/service/axes.service.mjs +0 -29
  154. package/dist/esm2020/chart/service/broadcast.service.mjs +0 -25
  155. package/dist/esm2020/chart/service/brush.service.mjs +0 -67
  156. package/dist/esm2020/chart/service/chart.service.mjs +0 -76
  157. package/dist/esm2020/chart/service/scale.service.mjs +0 -64
  158. package/dist/esm2020/chart/service/zoom.service.mjs +0 -117
  159. package/dist/esm2020/public-api.mjs +0 -8
  160. package/dist/fesm2015/tetacom-svg-charts.mjs +0 -1617
  161. package/dist/fesm2015/tetacom-svg-charts.mjs.map +0 -1
  162. package/dist/fesm2020/tetacom-svg-charts.mjs +0 -1603
  163. package/dist/fesm2020/tetacom-svg-charts.mjs.map +0 -1
  164. package/dist/package.json +0 -35
  165. package/karma.conf.js +0 -44
  166. package/ng-package.json +0 -7
  167. package/src/chart/Chart.stories.ts +0 -397
  168. package/src/chart/base/series-base.component.ts +0 -41
  169. package/src/chart/chart/chart.component.html +0 -5
  170. package/src/chart/chart/chart.component.scss +0 -6
  171. package/src/chart/chart/chart.component.spec.ts +0 -25
  172. package/src/chart/chart/chart.component.ts +0 -97
  173. package/src/chart/chart-container/chart-container.component.html +0 -78
  174. package/src/chart/chart-container/chart-container.component.scss +0 -15
  175. package/src/chart/chart-container/chart-container.component.spec.ts +0 -25
  176. package/src/chart/chart-container/chart-container.component.ts +0 -242
  177. package/src/chart/chart-container/gridlines/gridlines.component.html +0 -7
  178. package/src/chart/chart-container/gridlines/gridlines.component.scss +0 -8
  179. package/src/chart/chart-container/gridlines/gridlines.component.spec.ts +0 -25
  180. package/src/chart/chart-container/gridlines/gridlines.component.ts +0 -55
  181. package/src/chart/chart-container/plotband/plotband.component.html +0 -58
  182. package/src/chart/chart-container/plotband/plotband.component.scss +0 -13
  183. package/src/chart/chart-container/plotband/plotband.component.spec.ts +0 -25
  184. package/src/chart/chart-container/plotband/plotband.component.ts +0 -206
  185. package/src/chart/chart-container/plotline/plotline.component.html +0 -22
  186. package/src/chart/chart-container/plotline/plotline.component.scss +0 -6
  187. package/src/chart/chart-container/plotline/plotline.component.spec.ts +0 -25
  188. package/src/chart/chart-container/plotline/plotline.component.ts +0 -113
  189. package/src/chart/chart-container/series/bar/bar-series.component.html +0 -3
  190. package/src/chart/chart-container/series/bar/bar-series.component.scss +0 -0
  191. package/src/chart/chart-container/series/bar/bar-series.component.ts +0 -71
  192. package/src/chart/chart-container/series/line/line-series.component.html +0 -38
  193. package/src/chart/chart-container/series/line/line-series.component.scss +0 -9
  194. package/src/chart/chart-container/series/line/line-series.component.spec.ts +0 -25
  195. package/src/chart/chart-container/series/line/line-series.component.ts +0 -245
  196. package/src/chart/chart-container/series-host/series-host.component.ts +0 -80
  197. package/src/chart/chart-container/tooltip/tooltip.component.html +0 -14
  198. package/src/chart/chart-container/tooltip/tooltip.component.scss +0 -7
  199. package/src/chart/chart-container/tooltip/tooltip.component.spec.ts +0 -25
  200. package/src/chart/chart-container/tooltip/tooltip.component.ts +0 -134
  201. package/src/chart/chart-container/x-axis/x-axis.component.html +0 -1
  202. package/src/chart/chart-container/x-axis/x-axis.component.scss +0 -3
  203. package/src/chart/chart-container/x-axis/x-axis.component.spec.ts +0 -25
  204. package/src/chart/chart-container/x-axis/x-axis.component.ts +0 -80
  205. package/src/chart/chart-container/y-axis/y-axis.component.html +0 -4
  206. package/src/chart/chart-container/y-axis/y-axis.component.scss +0 -13
  207. package/src/chart/chart-container/y-axis/y-axis.component.spec.ts +0 -25
  208. package/src/chart/chart-container/y-axis/y-axis.component.ts +0 -90
  209. package/src/chart/chart.module.ts +0 -40
  210. package/src/chart/core/axis/axis.ts +0 -132
  211. package/src/chart/core/axis/builders/axis-size-builder.ts +0 -37
  212. package/src/chart/core/axis/builders/extremes-builder.ts +0 -45
  213. package/src/chart/core/axis/builders/public-api.ts +0 -2
  214. package/src/chart/core/utils/generate-ticks.ts +0 -14
  215. package/src/chart/core/utils/get-text-width.ts +0 -10
  216. package/src/chart/core/utils/public-api.ts +0 -2
  217. package/src/chart/default/default-chart-config.ts +0 -12
  218. package/src/chart/directives/brushable.directive.ts +0 -30
  219. package/src/chart/directives/zoomable.directive.ts +0 -31
  220. package/src/chart/legend/legend.component.html +0 -6
  221. package/src/chart/legend/legend.component.scss +0 -20
  222. package/src/chart/legend/legend.component.spec.ts +0 -25
  223. package/src/chart/legend/legend.component.ts +0 -35
  224. package/src/chart/model/axis-options.ts +0 -18
  225. package/src/chart/model/base-point.ts +0 -10
  226. package/src/chart/model/chart-bounds.ts +0 -18
  227. package/src/chart/model/enum/axis-orientation.ts +0 -4
  228. package/src/chart/model/enum/axis-type.ts +0 -7
  229. package/src/chart/model/enum/brush-type.ts +0 -5
  230. package/src/chart/model/enum/drag-point-type.ts +0 -5
  231. package/src/chart/model/enum/public-api.ts +0 -7
  232. package/src/chart/model/enum/series-type.ts +0 -4
  233. package/src/chart/model/enum/tooltip-tracking.ts +0 -4
  234. package/src/chart/model/enum/zoom-type.ts +0 -5
  235. package/src/chart/model/i-broadcast-message.ts +0 -5
  236. package/src/chart/model/i-builder.ts +0 -3
  237. package/src/chart/model/i-chart-config.ts +0 -33
  238. package/src/chart/model/i-chart-event.ts +0 -4
  239. package/src/chart/model/i-display-tooltip.ts +0 -7
  240. package/src/chart/model/i-drag-event.ts +0 -5
  241. package/src/chart/model/i-point-move.ts +0 -7
  242. package/src/chart/model/marker-options.ts +0 -8
  243. package/src/chart/model/plotband.ts +0 -45
  244. package/src/chart/model/plotline.ts +0 -29
  245. package/src/chart/model/public-api.ts +0 -14
  246. package/src/chart/model/series.ts +0 -18
  247. package/src/chart/model/svg-attributes.ts +0 -14
  248. package/src/chart/model/tooltip-options.ts +0 -37
  249. package/src/chart/service/axes.service.spec.ts +0 -16
  250. package/src/chart/service/axes.service.ts +0 -27
  251. package/src/chart/service/broadcast.service.spec.ts +0 -16
  252. package/src/chart/service/broadcast.service.ts +0 -24
  253. package/src/chart/service/brush.service.spec.ts +0 -16
  254. package/src/chart/service/brush.service.ts +0 -87
  255. package/src/chart/service/chart.service.spec.ts +0 -16
  256. package/src/chart/service/chart.service.ts +0 -100
  257. package/src/chart/service/scale.service.spec.ts +0 -16
  258. package/src/chart/service/scale.service.ts +0 -74
  259. package/src/chart/service/zoom.service.spec.ts +0 -16
  260. package/src/chart/service/zoom.service.ts +0 -153
  261. package/src/public-api.ts +0 -8
  262. package/src/test.ts +0 -27
  263. package/tsconfig.lib.json +0 -15
  264. package/tsconfig.lib.prod.json +0 -10
  265. package/tsconfig.spec.json +0 -17
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tetacom-svg-charts.mjs","sources":["../../src/chart/model/enum/zoom-type.ts","../../src/chart/model/chart-bounds.ts","../../src/chart/model/enum/tooltip-tracking.ts","../../src/chart/default/default-chart-config.ts","../../src/chart/model/enum/scale-type.ts","../../src/chart/default/default-axis-config.ts","../../src/chart/model/enum/series-type.ts","../../src/chart/default/default-series-config.ts","../../src/chart/service/chart.service.ts","../../src/chart/model/enum/axis-orientation.ts","../../src/chart/core/utils/get-text-width.ts","../../src/chart/core/utils/generate-ticks.ts","../../src/chart/core/axis/builders/axis-size-builder.ts","../../src/chart/core/axis/builders/extremes-builder.ts","../../src/chart/core/axis/axis.ts","../../src/chart/model/enum/brush-type.ts","../../src/chart/service/broadcast.service.ts","../../src/chart/service/zoom.service.ts","../../src/chart/service/scale.service.ts","../../src/chart/service/brush.service.ts","../../src/chart/chart-container/tooltip/tooltip.component.ts","../../src/chart/chart-container/tooltip/tooltip.component.html","../../src/chart/chart-container/y-axis/y-axis.component.ts","../../src/chart/chart-container/y-axis/y-axis.component.html","../../src/chart/chart-container/x-axis/x-axis.component.ts","../../src/chart/chart-container/x-axis/x-axis.component.html","../../src/chart/chart-container/gridlines/gridlines.component.ts","../../src/chart/chart-container/gridlines/gridlines.component.html","../../src/chart/chart-container/plotline/plotline.component.ts","../../src/chart/chart-container/plotline/plotline.component.html","../../src/chart/chart-container/plotband/plot-band.component.ts","../../src/chart/chart-container/plotband/plot-band.component.html","../../src/chart/base/series-base.component.ts","../../src/chart/model/enum/drag-point-type.ts","../../src/chart/chart-container/series/line/line-series.component.ts","../../src/chart/chart-container/series/line/line-series.component.html","../../src/chart/chart-container/series/bar/bar-series.component.ts","../../src/chart/chart-container/series/bar/bar-series.component.html","../../src/chart/chart-container/series/scatter-series/scatter-series.component.ts","../../src/chart/chart-container/series/scatter-series/scatter-series.component.html","../../src/chart/chart-container/series-host/series-host.component.ts","../../src/chart/directives/zoomable.directive.ts","../../src/chart/directives/brushable.directive.ts","../../src/chart/chart-container/chart-container.component.ts","../../src/chart/chart-container/chart-container.component.html","../../src/chart/legend/legend.component.ts","../../src/chart/legend/legend.component.html","../../src/chart/chart/chart.component.ts","../../src/chart/chart/chart.component.html","../../src/chart/chart.module.ts","../../src/chart/model/plot-band.ts","../../src/chart/model/plot-line.ts","../../src/public-api.ts","../../src/tetacom-svg-charts.ts"],"sourcesContent":["export enum ZoomType {\n x,\n y,\n xy,\n}\n","export class ChartBounds {\n top = 0;\n right = 30;\n bottom = 0;\n left = 0;\n\n constructor(options?: {\n top?: number;\n right?: number;\n bottom?: number;\n left: number;\n }) {\n this.top = options?.top || this.top;\n this.right = options?.right || this.right;\n this.bottom = options?.bottom || this.bottom;\n this.left = options?.left || this.left;\n }\n}\n","export enum TooltipTracking {\n x,\n y,\n}\n","import { IChartConfig } from '../model/i-chart-config';\nimport {ZoomType} from '../model/enum/zoom-type';\nimport {ChartBounds} from '../model/chart-bounds';\nimport {TooltipTracking} from '../model/enum/tooltip-tracking';\n\nexport const defaultChartConfig: IChartConfig = {\n zoom: {\n enable: true,\n type: ZoomType.x,\n },\n bounds: new ChartBounds(),\n legend: {\n enable: true,\n },\n tooltip: {\n enable: true,\n showMarkers: true,\n tracking: TooltipTracking.x,\n },\n xAxis: [],\n yAxis: [],\n series: [],\n gridLines: true,\n};\n","export enum ScaleType {\n linear,\n log,\n pow,\n sqrt,\n time,\n category,\n}\n","import { AxisOptions } from '../model/axis-options';\nimport { ScaleType } from '../model/enum/scale-type';\n\nexport const defaultAxisConfig: AxisOptions = {\n visible: true,\n zoom: true,\n scaleType: {\n type: ScaleType.linear,\n },\n};\n","export enum SeriesType {\n line,\n bar,\n scatter\n}\n","import { Series } from '../model/series';\nimport { BasePoint } from '../model/base-point';\nimport { SeriesType } from '../model/enum/series-type';\n\nexport const defaultSeriesConfig: Series<BasePoint> = {\n data: [],\n type: SeriesType.line,\n xAxisIndex: 0,\n yAxisIndex: 0,\n};\n","import { Injectable } from '@angular/core';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { BehaviorSubject, filter, map, Observable, Subject } from 'rxjs';\nimport { IChartEvent } from '../model/i-chart-event';\nimport { IDisplayTooltip } from '../model/i-display-tooltip';\nimport { PlotBand } from '../model/plot-band';\nimport { PlotLine } from '../model/plot-line';\nimport { IPointMove } from '../model/i-point-move';\nimport { defaultChartConfig } from '../default/default-chart-config';\nimport { defaultAxisConfig } from '../default/default-axis-config';\nimport { defaultSeriesConfig } from '../default/default-series-config';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ChartService {\n public config: Observable<IChartConfig>;\n public size: Observable<DOMRect>;\n public pointerMove: Observable<PointerEvent>;\n public tooltips: Observable<IDisplayTooltip>;\n public plotBandEvent: Observable<IChartEvent<PlotBand>>;\n public plotLineMove: Observable<IChartEvent<PlotLine>>;\n public plotBandClick: Observable<IChartEvent<PlotBand>>;\n public pointMove: Observable<IChartEvent<IPointMove>>;\n\n private config$ = new BehaviorSubject<IChartConfig>(defaultChartConfig);\n private size$ = new BehaviorSubject<DOMRect>(new DOMRectReadOnly());\n private pointerMove$ = new BehaviorSubject<PointerEvent>(null);\n private tooltips$ = new Subject<IDisplayTooltip>();\n private plotBandEvent$ = new Subject<IChartEvent<PlotBand>>();\n private plotLineMove$ = new Subject<IChartEvent<PlotLine>>();\n private pointMove$ = new Subject<IChartEvent<IPointMove>>();\n\n constructor() {\n this.config = this.config$\n .asObservable()\n .pipe(map(this.setDefaults), map(this.setpreparationData));\n this.size = this.size$.asObservable().pipe(\n filter((_) => {\n return _.height > 0 && _.width > 0;\n })\n );\n\n this.pointerMove = this.pointerMove$.asObservable();\n this.tooltips = this.tooltips$.asObservable();\n this.plotBandEvent = this.plotBandEvent$.asObservable();\n this.plotLineMove = this.plotLineMove$.asObservable();\n this.pointMove = this.pointMove$.asObservable();\n this.plotBandClick = this.plotBandEvent$\n .asObservable()\n .pipe(filter((_) => _?.event?.type === 'click'));\n }\n\n public setConfig(config: IChartConfig) {\n this.config$.next(config);\n }\n\n public setSize(size: DOMRect) {\n this.size$.next(size);\n }\n\n public setPointerMove(event: PointerEvent) {\n this.pointerMove$.next(event);\n }\n\n public setTooltip(tooltip: IDisplayTooltip) {\n this.tooltips$.next(tooltip);\n }\n\n public emitPlotband(event: IChartEvent<PlotBand>) {\n this.plotBandEvent$.next(event);\n }\n\n public emitPlotline(event: IChartEvent<PlotLine>) {\n this.plotLineMove$.next(event);\n }\n\n public emitPoint(event: IChartEvent<IPointMove>) {\n this.pointMove$.next(event);\n }\n\n private setDefaults(config: IChartConfig): IChartConfig {\n const defaultConfig = (defaultConfig) => {\n return (source) => {\n return Object.assign({}, defaultConfig, source);\n };\n };\n config = Object.assign({}, defaultChartConfig, config);\n\n config.xAxis = config.xAxis.map(defaultConfig(defaultAxisConfig));\n config.yAxis = config.yAxis.map(defaultConfig(defaultAxisConfig));\n config.series = config.series.map(defaultConfig(defaultSeriesConfig));\n\n config.tooltip = Object.assign(\n {},\n defaultChartConfig.tooltip,\n config.tooltip\n );\n\n return config;\n }\n\n private setpreparationData(config: IChartConfig): IChartConfig {\n if (config.inverted) {\n config.series = config.series?.map((serie) => {\n return {\n ...serie,\n data: serie?.data?.map((point) => {\n return {\n ...point,\n x: point?.y,\n y: point?.x,\n };\n }),\n };\n });\n }\n\n if (config.brush?.enable) {\n config.yAxis = config.yAxis.map((_) => ({ ..._, zoom: false }));\n config.xAxis = config.xAxis.map((_) => ({ ..._, zoom: false }));\n }\n\n return config;\n }\n}\n","export enum AxisOrientation {\n x,\n y\n}\n","export const getTextWidth = (\n inputText?: string | number | null,\n backupRatio = 0.5,\n fontSize = 11\n): number => {\n let text = inputText ?? '';\n text = text.toString();\n\n return fontSize * backupRatio * text.length;\n};\n","import * as d3 from 'd3';\n\nexport function generateTicks(extremes: number[]) {\n const [min, max] = extremes;\n\n const tickCount = 10;\n const tickStep = (max - min) / tickCount;\n\n const ticks = d3\n .range(min, max + tickStep, tickStep)\n .filter((step) => step <= max);\n\n return ticks;\n}\n","import { Axis } from '../axis';\nimport { AxisOrientation } from '../../../model/enum/axis-orientation';\nimport { maxIndex } from 'd3-array';\nimport { getTextWidth } from '../../utils/public-api';\nimport { IBuilder } from '../../../model/i-builder';\n\nexport class AxisSizeBuilder implements IBuilder<Axis, number> {\n private titlePadding = 8;\n private basePadding = 16;\n private backupRatio = 0.58;\n\n build(settings: Axis): number {\n let finalPadding = this.basePadding;\n\n if (settings.orientation === AxisOrientation.y) {\n const formatter = settings.defaultFormatter();\n\n finalPadding += settings.options.title ? this.titlePadding : 0;\n\n const maxElementLengthIndex = maxIndex(\n settings.tickValues,\n (_) => formatter(_).length\n );\n\n finalPadding += getTextWidth(\n formatter(settings.tickValues[maxElementLengthIndex]),\n this.backupRatio\n );\n }\n\n if (settings.orientation === AxisOrientation.x) {\n finalPadding += finalPadding + 20;\n }\n\n return finalPadding;\n }\n}\n","import {IBuilder} from '../../../model/i-builder';\nimport {Axis} from '../axis';\nimport {BasePoint} from '../../../model/base-point';\nimport {AxisOrientation} from '../../../model/enum/axis-orientation';\n\nimport * as d3 from 'd3';\n\nexport class ExtremesBuilder implements IBuilder<Axis, [number, number]> {\n private extentAccessorMap = new Map<AxisOrientation,\n (point: BasePoint) => number>()\n .set(AxisOrientation.x, (_) => _.x)\n .set(AxisOrientation.y, (_) => _.y);\n\n private extremes: [number, number] = [0, 0];\n\n build(settings: Axis): [number, number] {\n const options = settings.options;\n\n const hasMin = options?.min != null;\n const hasMax = options?.max != null;\n\n if (!hasMin || !hasMax) {\n const linkedSeries = settings.linkedSeries();\n const data = linkedSeries.reduce((acc: BasePoint[], current) => {\n return acc.concat(current.data);\n }, []);\n const accessor = this.extentAccessorMap.get(settings.orientation);\n this.extremes = data.length > 1 ? d3.extent(data, accessor) : [0, 0];\n }\n\n if (hasMin) {\n this.extremes[0] = options?.min;\n }\n\n if (hasMax) {\n this.extremes[1] = options?.max;\n }\n return this.extremes;\n }\n}\n","import { IChartConfig } from '../../model/i-chart-config';\nimport { AxisOrientation } from '../../model/enum/axis-orientation';\nimport { Series } from '../../model/series';\nimport { BasePoint } from '../../model/base-point';\nimport * as d3 from 'd3';\nimport { AxisOptions } from '../../model/axis-options';\nimport { AxisSizeBuilder, ExtremesBuilder } from './builders/public-api';\nimport { generateTicks } from '../utils/public-api';\nimport { ScaleType } from '../../model/enum/scale-type';\n\nexport class Axis {\n private chartConfig: IChartConfig;\n private _orientation: AxisOrientation;\n private _index: number;\n private _extremes: [number, number] = [0, 0];\n private _selfSize: number;\n private _ticksValues: number[];\n private _options: AxisOptions;\n private _isFake: boolean;\n\n private defaultFormatters = new Map<ScaleType, any>()\n .set(ScaleType.linear, d3.format(',.2f'))\n .set(ScaleType.time, d3.timeFormat('%B %d, %Y'))\n .set(ScaleType.log, d3.format(',.2f'))\n .set(ScaleType.pow, d3.format(',.2f'))\n .set(ScaleType.sqrt, d3.format(',.2f'));\n\n constructor(config: IChartConfig) {\n this.chartConfig = config;\n }\n\n /**\n * Factory for creating x,y axes\n * @param {AxisOrientation} orientation\n * Axis type\n * @param {IChartConfig} config\n * Chart config\n * @param {number} index\n * Index axis\n * @param {boolean} isFake\n * @return {Axis}\n * New generated axis\n */\n public static createAxis(\n orientation: AxisOrientation,\n config: IChartConfig,\n index: number,\n isFake = false\n ): Axis {\n const axis = new Axis(config);\n axis.setLocate(orientation);\n axis.setIndex(index);\n\n axis.setOptions();\n axis.setExtremes();\n axis.setTicksValues();\n axis.setSelfSize();\n\n axis._isFake = isFake;\n\n return axis;\n }\n\n /**\n *\n * @param {orientation} orientation\n * Set locate axis x or y\n */\n private setLocate(orientation: AxisOrientation): void {\n this._orientation = orientation;\n }\n\n /**\n *\n * @param {number} index\n * Index axis\n */\n private setIndex(index: number): void {\n this._index = index;\n }\n\n /**\n * @return {Array<Series<BasePoint>>}\n * Linked series\n */\n public linkedSeries(): Array<Series<BasePoint>> {\n const linkedFilter = (serie: Series<BasePoint>) =>\n serie[\n this._orientation === AxisOrientation.y ? 'yAxisIndex' : 'xAxisIndex'\n ] === this._index;\n\n return this.chartConfig?.series.filter(linkedFilter);\n }\n\n private setExtremes(): void {\n const builder = new ExtremesBuilder();\n this._extremes = builder.build(this);\n }\n\n private setSelfSize(): void {\n this._selfSize = new AxisSizeBuilder().build(this);\n }\n\n private setTicksValues(): void {\n this._ticksValues = generateTicks(this._extremes);\n }\n\n private setOptions(): void {\n const options =\n this.orientation === AxisOrientation.x\n ? this.chartConfig.xAxis[this.index]\n : this.chartConfig.yAxis[this.index];\n\n this._options = options;\n }\n\n get extremes(): Array<number> {\n return this._extremes;\n }\n\n get orientation(): AxisOrientation {\n return this._orientation;\n }\n\n get selfSize(): number {\n return this._selfSize;\n }\n\n get tickValues(): number[] {\n return this._ticksValues;\n }\n\n get index(): number {\n return this._index;\n }\n\n get options(): AxisOptions {\n return this._options;\n }\n\n get isFake(): boolean {\n return this._isFake;\n }\n\n public defaultFormatter() {\n return this.defaultFormatters.get(this.options.scaleType.type);\n }\n}\n","export enum BrushType {\n x,\n y,\n xy,\n}\n","import { Injectable } from '@angular/core';\nimport { IBroadcastMessage } from '../model/i-broadcast-message';\nimport { filter, Observable, shareReplay, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BroadcastService {\n private emitter: Subject<IBroadcastMessage>;\n\n constructor() {\n this.emitter = new Subject<IBroadcastMessage>();\n }\n\n broadcast(value: IBroadcastMessage) {\n this.emitter.next(value);\n }\n\n subscribeToChannel(channel: string): Observable<IBroadcastMessage> {\n return this.emitter.asObservable().pipe(\n filter((msg) => channel && msg.channel === channel),\n shareReplay(1)\n );\n }\n}\n","import { ElementRef, Injectable } from '@angular/core';\nimport * as d3 from 'd3';\nimport { D3ZoomEvent, zoomIdentity, zoomTransform } from 'd3';\nimport {\n BehaviorSubject,\n filter,\n map,\n Observable,\n shareReplay,\n Subscription,\n} from 'rxjs';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { BroadcastService } from './broadcast.service';\nimport { Axis } from '../core/axis/axis';\nimport { IChartEvent } from '../model/i-chart-event';\nimport { AxisOrientation } from '../model/enum/axis-orientation';\nimport { ZoomType } from '../model/enum/zoom-type';\nimport { IBroadcastMessage, ZoomMessage } from '../model/i-broadcast-message';\nimport { BrushType } from '../model/enum/brush-type';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ZoomService {\n broadcastSubscription: Subscription[] = [];\n\n zoomed: Observable<IChartEvent<Axis>>;\n private zoomed$ = new BehaviorSubject<IChartEvent<Axis>>(null);\n\n constructor(private broadcastService: BroadcastService) {\n this.zoomed = this.zoomed$.asObservable().pipe(shareReplay(1));\n }\n\n applyZoom(\n svgElement: ElementRef,\n config: IChartConfig,\n size: DOMRect,\n axis?: Axis\n ) {\n const enable = axis?.options?.zoom || config?.zoom?.enable;\n\n const fakeAxis = Axis.createAxis(\n config?.zoom.type === ZoomType.x ? AxisOrientation.x : AxisOrientation.y,\n config,\n 0,\n true\n );\n\n const _axis = axis ? axis : fakeAxis;\n\n const zoom = d3\n .zoom()\n .scaleExtent([1, 50])\n .extent([\n [0, 0],\n [size.width, size.height],\n ]);\n\n if (config?.zoom?.enable) {\n this.zoomed\n .pipe(\n filter(\n (_) =>\n (_?.target?.orientation === AxisOrientation.x &&\n _?.target.index === 0 &&\n config?.zoom.type === ZoomType.x &&\n _axis.orientation === AxisOrientation.x) ||\n (_?.target?.orientation === AxisOrientation.y &&\n _?.target.index === 0 &&\n config?.zoom.type === ZoomType.y &&\n _axis.orientation === AxisOrientation.y)\n ),\n filter((_) => _?.event?.type === 'end'),\n map((_) => {\n const eventTransform = _?.event.transform;\n const currentTransform = zoomTransform(svgElement.nativeElement);\n\n if (currentTransform !== eventTransform) {\n d3.select(svgElement.nativeElement).call(\n zoom.transform,\n eventTransform\n );\n }\n })\n )\n .subscribe();\n }\n\n const zoomed = (event: D3ZoomEvent<any, any>) => {\n if (enable) {\n if (event.sourceEvent) {\n this.zoomed$.next({\n event,\n target: _axis,\n });\n\n const message: ZoomMessage = {\n event: event,\n axis: _axis,\n };\n\n this.broadcastService.broadcast({\n channel: config?.zoom?.syncChannel,\n message,\n });\n }\n }\n };\n\n if (enable) {\n const element = d3.select(svgElement.nativeElement);\n zoom.on('start zoom end', zoomed);\n element.call(zoom);\n\n const subscription = this.broadcastService\n .subscribeToChannel(config?.zoom?.syncChannel)\n .pipe(\n filter((_) => {\n if ('axis' in _.message) {\n return (\n _axis.index === _.message?.axis?.index &&\n _axis.orientation === _.message?.axis?.orientation\n );\n }\n if ('selection' in _.message) {\n return (\n _axis.index === 0 && _axis.orientation === AxisOrientation.x\n );\n }\n return false;\n }),\n map((broadcaseMessage: IBroadcastMessage) => {\n if ('axis' in broadcaseMessage.message) {\n const currentTransform = d3.zoomTransform(\n svgElement.nativeElement\n );\n\n if (\n currentTransform !== broadcaseMessage.message.event?.transform\n ) {\n d3.select(svgElement.nativeElement).call(\n zoom.transform,\n broadcaseMessage.message.event?.transform,\n null,\n {}\n );\n }\n }\n\n if ('selection' in broadcaseMessage.message) {\n const s = broadcaseMessage.message.selection;\n const domain = broadcaseMessage.message.brushScale.domain();\n\n const scale = (domain[1] - domain[0]) / (s[1] - s[0]);\n let transform = zoomIdentity.scale(scale);\n\n if (broadcaseMessage.message?.brushType === BrushType.x) {\n transform = transform.translate(\n -broadcaseMessage.message.brushScale(s[0]),\n 0\n );\n }\n if (broadcaseMessage.message?.brushType === BrushType.y) {\n transform = transform.translate(\n 0,\n -broadcaseMessage.message.brushScale(s[0])\n );\n }\n\n d3.select(svgElement.nativeElement).call(\n zoom.transform,\n transform,\n null,\n {}\n );\n }\n\n this.broadcastSubscription.push(subscription);\n })\n )\n .subscribe();\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as d3 from 'd3';\nimport { D3ZoomEvent, ZoomTransform } from 'd3';\nimport { Axis } from '../core/axis/axis';\nimport { AxisOrientation } from '../model/enum/axis-orientation';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { ChartService } from './chart.service';\nimport {\n combineLatest,\n map,\n Observable,\n shareReplay,\n withLatestFrom,\n} from 'rxjs';\nimport { IChartEvent } from '../model/i-chart-event';\nimport { ZoomService } from './zoom.service';\nimport { ScaleType } from '../model/enum/scale-type';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ScaleService {\n public yAxisMap: Observable<Map<number, Axis>>;\n public xAxisMap: Observable<Map<number, Axis>>;\n\n public yScaleMap: Observable<Map<number, any>>;\n public xScaleMap: Observable<Map<number, any>>;\n\n private transformCacheX = new Map<number, ZoomTransform>();\n private transformCacheY = new Map<number, ZoomTransform>();\n\n private scaleMapping = new Map<ScaleType, any>()\n .set(ScaleType.linear, d3.scaleLinear)\n .set(ScaleType.time, d3.scaleTime)\n .set(ScaleType.category, d3.scaleOrdinal)\n .set(ScaleType.log, d3.scaleLog)\n .set(ScaleType.pow, d3.scalePow)\n .set(ScaleType.sqrt, d3.scaleSqrt);\n\n constructor(\n private chartService: ChartService,\n private zoomService: ZoomService\n ) {\n this.xAxisMap = combineLatest([\n this.chartService.size,\n this.chartService.config,\n ]).pipe(\n map((data: [DOMRectReadOnly, IChartConfig]) => {\n const [, config] = data;\n const map = new Map<number, Axis>();\n config.xAxis.map((_, index) => {\n map.set(index, Axis.createAxis(AxisOrientation.x, config, index));\n });\n return map;\n })\n );\n\n this.yAxisMap = combineLatest([\n this.chartService.size,\n this.chartService.config,\n ]).pipe(\n map((data: [DOMRectReadOnly, IChartConfig]) => {\n const [, config] = data;\n const map = new Map<number, Axis>();\n config.yAxis.map((_, index) => {\n map.set(index, Axis.createAxis(AxisOrientation.y, config, index));\n });\n\n return map;\n })\n );\n\n this.xScaleMap = combineLatest([\n this.chartService.size,\n this.chartService.config,\n this.zoomService.zoomed,\n ]).pipe(\n withLatestFrom(this.yAxisMap, this.xAxisMap),\n map(\n (\n data: [\n [DOMRectReadOnly, IChartConfig, IChartEvent<Axis>],\n Map<number, Axis>,\n Map<number, Axis>\n ]\n ) => {\n const [[size, config, zoom], yAxes, xAxes] = data;\n\n const map = new Map<number, any>();\n\n const left = [...yAxes.values()]\n .filter((_) => _.options?.visible && _.options?.opposite)\n .reduce((acc, cur) => acc + cur.selfSize, 0);\n\n const right = [...yAxes.values()]\n .filter((_) => _.options?.visible && _.options?.opposite !== true)\n .reduce((acc, cur) => acc + cur.selfSize, 0);\n\n const finalWidth = (size.width || 0) - left - right;\n\n xAxes.forEach((axis) => {\n let domain = axis.extremes;\n\n if (axis?.options.inverted) {\n domain = [...axis.extremes].reverse();\n }\n\n const scale = this.scaleMapping\n .get(axis.options.scaleType.type)()\n .domain(domain)\n .range([0, finalWidth]);\n\n if (axis.options.scaleType.type === ScaleType.log) {\n scale.base(axis.options.scaleType.base);\n }\n\n map.set(axis.index, scale);\n\n const hasCache = this.transformCacheX.has(axis.index);\n const shouldRestore =\n zoom?.target?.orientation !== AxisOrientation.x ||\n zoom.target?.index !== axis.index;\n\n if (hasCache && shouldRestore) {\n const restoredTransform = this.transformCacheX.get(axis.index);\n map.set(axis.index, restoredTransform.rescaleX(scale));\n }\n });\n\n if (zoom) {\n const event = zoom.event as D3ZoomEvent<any, any>;\n\n if (zoom.target?.orientation === AxisOrientation.x) {\n const currentScale = map.get(zoom.target.index);\n const rescaled = event.transform.rescaleX(currentScale);\n map.set(zoom.target.index, rescaled);\n\n const axis = xAxes.get(zoom.target.index);\n this.transformCacheX.set(axis.index, event.transform);\n }\n }\n\n return map;\n }\n ),\n shareReplay(1)\n );\n\n this.yScaleMap = combineLatest([\n this.chartService.size,\n this.chartService.config,\n this.zoomService.zoomed,\n ]).pipe(\n withLatestFrom(this.yAxisMap, this.xAxisMap),\n map(\n (\n data: [\n [DOMRectReadOnly, IChartConfig, IChartEvent<Axis>],\n Map<number, Axis>,\n Map<number, Axis>\n ]\n ) => {\n const [[size, config, zoom], yAxes, xAxes] = data;\n\n const map = new Map<number, any>();\n\n const top = [...xAxes.values()]\n .filter((_) => _.options?.visible && _.options?.opposite)\n .reduce((acc, cur) => acc + cur.selfSize, 0);\n\n const bottom = [...xAxes.values()]\n .filter((_) => _.options?.visible && _.options?.opposite !== true)\n .reduce((acc, cur) => acc + cur.selfSize, 0);\n\n const finalHeight = (size.height || 0) - top - bottom;\n\n yAxes.forEach((axis) => {\n let domain = axis.extremes;\n\n if (axis.orientation === AxisOrientation.y) {\n domain = [...axis.extremes].reverse();\n }\n\n if (axis?.options.inverted) {\n domain = domain.reverse();\n }\n\n const scale = this.scaleMapping\n .get(axis.options.scaleType.type)()\n .domain(domain)\n .range([0, finalHeight]);\n\n if (axis.options.scaleType.type === ScaleType.log) {\n scale.base(axis.options.scaleType.base);\n }\n\n map.set(axis.index, scale);\n\n const hasCache = this.transformCacheY.has(axis.index);\n\n const shouldRestore =\n zoom?.target?.orientation !== AxisOrientation.y ||\n zoom.target?.index !== axis.index;\n\n if (hasCache && shouldRestore) {\n const restoredTransform = this.transformCacheY.get(axis.index);\n map.set(axis.index, restoredTransform.rescaleY(scale));\n }\n });\n\n if (zoom) {\n const event = zoom.event as D3ZoomEvent<any, any>;\n\n if (zoom.target?.orientation === AxisOrientation.y) {\n const currentScale = map.get(zoom.target.index);\n const rescaled = event.transform.rescaleY(currentScale);\n map.set(zoom.target.index, rescaled);\n\n const axis = yAxes.get(zoom.target.index);\n this.transformCacheY.set(axis.index, event.transform);\n }\n }\n\n return map;\n }\n ),\n shareReplay(1)\n );\n }\n}\n","import { ElementRef, Injectable } from '@angular/core';\nimport { BrushType } from '../model/enum/brush-type';\nimport * as d3 from 'd3';\nimport { map, shareReplay, Subscription, withLatestFrom } from 'rxjs';\nimport { BroadcastService } from './broadcast.service';\nimport { IChartConfig } from '../model/i-chart-config';\nimport {\n BrushMessage,\n IBroadcastMessage,\n ZoomMessage,\n} from '../model/i-broadcast-message';\nimport { AxisOrientation } from '../model/enum/axis-orientation';\nimport { ScaleService } from './scale.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BrushService {\n broadcastSubscribtion: Subscription;\n\n private brushMap = new Map<BrushType, d3.BrushBehavior<any>>()\n .set(BrushType.x, d3.brushX())\n .set(BrushType.y, d3.brushY());\n\n constructor(private broadcastService: BroadcastService) {}\n\n applyBrush(svgElement: ElementRef, config: IChartConfig, brushScale: any) {\n this.broadcastSubscribtion?.unsubscribe();\n\n if (config.brush?.enable) {\n const brush = this.brushMap.get(config?.brush?.type ?? BrushType.x);\n\n const container = d3.select(svgElement.nativeElement);\n\n const brushBehavior = brush.on(\n 'start brush end',\n (_: d3.D3BrushEvent<any>) => {\n if (_.sourceEvent) {\n const [from, to] = _.selection as number[];\n\n if (to - from < 5) {\n container.call(brush.move, [from, to]);\n return;\n }\n\n const brushMessage: BrushMessage = {\n event: _,\n selection: [brushScale.invert(from), brushScale.invert(to)],\n brushType: config?.brush?.type ?? BrushType.x,\n brushScale,\n };\n\n this.broadcastService.broadcast({\n channel: config?.zoom?.syncChannel,\n message: brushMessage,\n });\n }\n }\n );\n\n setTimeout(() => {\n container.call(brushBehavior);\n container.call(brush.move, brushScale.domain().map(brushScale), {});\n }, 0);\n\n this.broadcastSubscribtion = this.broadcastService\n .subscribeToChannel(config?.zoom?.syncChannel)\n .pipe(\n map((_) => {\n if ('axis' in _.message) {\n if (\n _.message.axis.orientation === AxisOrientation.x &&\n _.message.axis.index === 0\n ) {\n const rescaled = _.message.event.transform.rescaleX(brushScale);\n\n const domain = rescaled.domain();\n\n container.call(brush.move, [\n brushScale(domain[0]),\n brushScale(domain[1]),\n ]);\n }\n }\n })\n )\n .subscribe();\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { filter, map, merge, Observable, takeWhile, tap } from 'rxjs';\nimport { ChartService } from '../../service/chart.service';\nimport { ZoomService } from '../../service/zoom.service';\nimport { IDisplayTooltip } from '../../model/i-display-tooltip';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { IChartConfig } from '../../model/i-chart-config';\n\n@Component({\n selector: 'teta-tooltip',\n templateUrl: './tooltip.component.html',\n styleUrls: ['./tooltip.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TooltipComponent implements OnInit, OnDestroy {\n @Input() size: DOMRect;\n @Input() config: IChartConfig;\n\n position: Observable<{\n left: string;\n top: string;\n bottom: string;\n right: string;\n }>;\n\n displayTooltips: Observable<string>;\n\n tooltips = [];\n\n private alive = true;\n\n display: Observable<number>;\n\n constructor(\n private svc: ChartService,\n private cdr: ChangeDetectorRef,\n private zoomService: ZoomService,\n private sanitizer: DomSanitizer,\n private _zone: NgZone\n ) {}\n\n ngOnInit(): void {\n this.display = this.svc.pointerMove.pipe(\n map((event: PointerEvent) => {\n return event.type === 'mousemove' ? 1 : 0;\n }),\n tap(() => {\n setTimeout(() => {\n this.cdr.detectChanges();\n });\n })\n );\n\n this.position = this.svc.pointerMove.pipe(\n filter((event) => !!event),\n map((_) => {\n return this.getPoisition(_);\n }),\n tap(() => this.cdr.detectChanges())\n );\n\n const transformHtml = (html) => {\n return this.sanitizer.bypassSecurityTrustHtml(html);\n };\n\n const defaultFormatter = (tooltips: IDisplayTooltip[]) => {\n let html = '';\n\n tooltips.forEach((_) => {\n const indicatorStyle = `display:block; width: 10px; height: 2px; background-color: ${_?.series?.color}`;\n\n html += `<div class=\"display-flex align-center\"><span class=\"margin-right-1\" style=\"${indicatorStyle}\"></span>\n <span class=\"font-title-3\">${_.series.name}\n <span class=\"font-body-3\">x: ${_.point.x?.toFixed(\n 2\n )} y: ${_.point.y?.toFixed(2)}</span></span></div>`;\n });\n\n return transformHtml(html);\n };\n\n const formatter = this.config?.tooltip?.format;\n\n this.displayTooltips = merge(\n this.svc.pointerMove.pipe(tap((_) => (this.tooltips = []))),\n this.svc.tooltips\n ).pipe(\n takeWhile((_) => this.alive),\n filter((data) => !(data instanceof MouseEvent)),\n map((tooltip: any) => {\n if (tooltip) {\n this.tooltips.push(tooltip);\n }\n\n const formatted = formatter\n ? formatter(this.tooltips)\n : defaultFormatter(this.tooltips);\n\n return formatted;\n })\n );\n }\n\n private getPoisition(event: PointerEvent) {\n const centerX = this.size.width / 2;\n const centerY = this.size.height / 2;\n\n const padding = { x: 10, y: 10 };\n\n const scene = {\n left: event.pageX > centerX ? 'initial' : `${event.pageX + padding.x}px`,\n top: event.pageY > centerY ? 'initial' : `${event.pageY + padding.y}px`,\n bottom:\n event.pageY > centerY\n ? `${window.innerHeight - event.pageY}px`\n : 'initial',\n right:\n event.pageX > centerX\n ? `${window.innerWidth - event.pageX + padding.x}px`\n : 'initial',\n };\n\n return scene;\n }\n\n ngOnDestroy() {\n this.alive = false;\n }\n}\n","<ng-container *ngIf=\"position | async as p\">\n\n <div class=\"chart-tooltip color-text-90 bg-background-50 shadow-2 padding-2 border-radius-1\"\n [style.position]=\"'fixed'\"\n [style.opacity]=\"display | async\"\n style=\"pointer-events: none; min-width: 200px;\"\n [style.left]=\"p.left\"\n [style.top]=\"p.top\"\n [style.bottom]=\"p.bottom\"\n [style.right]=\"p.right\"\n [innerHTML]=\"displayTooltips | async\">\n </div>\n</ng-container>\n\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { Axis } from '../../core/axis/axis';\nimport * as d3 from 'd3';\n\n@Component({\n selector: '[teta-y-axis]',\n templateUrl: './y-axis.component.html',\n styleUrls: ['./y-axis.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class YAxisComponent implements OnInit, AfterViewInit {\n @Input() axis: Axis;\n @Input() set scale(scale: any) {\n this._scale = scale;\n this.draw();\n }\n\n get scale() {\n return this._scale;\n }\n @Input() size: DOMRect;\n @ViewChild('svg', { static: false }) node: ElementRef;\n\n private _alive = true;\n private _scale: any;\n\n constructor() {}\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n\n ngAfterViewInit() {\n this.draw();\n }\n\n getLabelTransform() {\n return `translate(${\n this.axis.options.opposite\n ? this.axis.selfSize - 24\n : -this.axis.selfSize + 24\n }, ${this.size.height / 2}) rotate(${\n this.axis.options.opposite ? '90' : '-90'\n })`;\n }\n\n private draw() {\n if (!this.node || !this.axis) {\n return;\n }\n\n const axis = this.axis.options.opposite\n ? d3\n .axisRight(this.scale)\n .tickFormat(\n this.axis.options.tickFormat ?? this.axis.defaultFormatter()\n )\n : d3\n .axisLeft(this.scale)\n .tickFormat(\n this.axis.options.tickFormat ?? this.axis.defaultFormatter()\n );\n\n d3.select(this.node.nativeElement)\n .call(axis)\n .call((_) => _.select('.domain').remove());\n }\n}\n","<svg:g #svg></svg:g>\n<svg:g class=\"label-axis font-caption\" [attr.transform]=\"getLabelTransform()\">\n <text dy=\"-8px\" text-anchor=\"middle\" dominant-baseline=\"middle\">{{ axis.options.title }}</text>\n</svg:g>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { Axis } from '../../core/axis/axis';\nimport { ScaleService } from '../../service/scale.service';\nimport { ChartService } from '../../service/chart.service';\nimport * as d3 from 'd3';\nimport { ZoomService } from '../../service/zoom.service';\nimport { merge, takeWhile, tap } from 'rxjs';\n\n@Component({\n selector: '[teta-x-axis]',\n templateUrl: './x-axis.component.html',\n styleUrls: ['./x-axis.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class XAxisComponent implements OnInit, OnDestroy, AfterViewInit {\n @Input() axis: Axis;\n @Input() set scale(scale: any) {\n this._scale = scale;\n\n this.draw();\n }\n\n get scale() {\n return this._scale;\n }\n\n @Input() size: DOMRect;\n @ViewChild('svg') node: ElementRef;\n\n private _scale: any;\n private _alive = true;\n\n constructor() {}\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n\n ngAfterViewInit() {\n this.draw();\n }\n\n private draw() {\n if (!this.node || !this.axis) {\n return;\n }\n\n const axis = this.axis.options.opposite\n ? d3\n .axisTop(this.scale)\n .tickFormat(\n this.axis.options.tickFormat ?? this.axis.defaultFormatter()\n )\n : d3\n .axisBottom(this.scale)\n .tickFormat(\n this.axis.options.tickFormat ?? this.axis.defaultFormatter()\n );\n\n d3.select(this.node.nativeElement)\n .call(axis)\n .call((_) => _.select('.domain').remove());\n }\n}\n","<svg:g #svg></svg:g>\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n SimpleChanges,\n} from '@angular/core';\n\n@Component({\n selector: '[teta-gridlines]',\n templateUrl: './gridlines.component.html',\n styleUrls: ['./gridlines.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GridlinesComponent {\n @Input() size: DOMRect;\n @Input() xScaleMap: Map<number, any>;\n @Input() yScaleMap: Map<number, any>;\n\n tickYValues: number[];\n tickXValues: number[];\n\n constructor() {}\n\n draw() {\n this.tickYValues = this.yScaleMap.get(0).ticks();\n this.tickXValues = this.xScaleMap.get(0).ticks();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (\n changes.hasOwnProperty('xScaleMap') &&\n changes.hasOwnProperty('yScaleMap')\n ) {\n this.draw();\n }\n }\n}\n","<ng-container *ngFor=\"let tick of tickYValues\">\n <svg:line [attr.x1]=\"0\" stroke=\"red\"\n [attr.y1]=\"yScaleMap.get(0)(tick)\"\n [attr.x2]=\"size?.width\"\n [attr.y2]=\"yScaleMap.get(0)(tick)\"></svg:line>\n</ng-container>\n\n<ng-container *ngFor=\"let tick of tickXValues\">\n <svg:line [attr.x1]=\"xScaleMap.get(0)(tick)\"\n stroke=\"red\"\n [attr.y1]=\"0\"\n [attr.x2]=\"xScaleMap.get(0)(tick)\"\n [attr.y2]=\"size?.height\"></svg:line>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnInit,\n} from '@angular/core';\nimport { PlotLine } from '../../model/plot-line';\nimport { Axis } from '../../core/axis/axis';\nimport { AxisOrientation } from '../../model/enum/axis-orientation';\nimport { ZoomService } from '../../service/zoom.service';\nimport { ScaleService } from '../../service/scale.service';\nimport * as d3 from 'd3';\nimport { IChartEvent } from '../../model/i-chart-event';\nimport { ChartService } from '../../service/chart.service';\n\n@Component({\n selector: '[teta-plot-line]',\n templateUrl: './plotline.component.html',\n styleUrls: ['./plotline.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PlotlineComponent implements OnInit {\n @Input() plotLine: PlotLine;\n @Input() size: DOMRect;\n @Input() axis: Axis;\n @Input() scale: any;\n orientation = AxisOrientation;\n\n private _domain: number[];\n\n constructor(\n private cdr: ChangeDetectorRef,\n private zoomService: ZoomService,\n private scaleService: ScaleService,\n private chartService: ChartService,\n private element: ElementRef\n ) {}\n\n ngOnInit(): void {\n this._domain = this.scale.domain();\n\n const plotlineElement = d3\n .select(this.element.nativeElement)\n .select('.plotline');\n\n const grabElement = d3\n .select(this.element.nativeElement)\n .selectAll('.grabber');\n\n const drag = d3\n .drag()\n .subject(() => {\n if (this.axis.orientation === AxisOrientation.y) {\n return { y: plotlineElement.attr('y1') };\n }\n if (this.axis.orientation === AxisOrientation.x) {\n return { x: plotlineElement.attr('x1') };\n }\n })\n .on(\n 'start drag end',\n (event: d3.D3DragEvent<any, PlotLine, any>, d: PlotLine) => {\n d.value = this.scale.invert(\n event[AxisOrientation[this.axis.orientation]]\n );\n\n this.emit({\n event,\n target: d,\n });\n\n this.cdr.detectChanges();\n }\n );\n\n plotlineElement.datum<PlotLine>(this.plotLine);\n grabElement.datum<PlotLine>(this.plotLine);\n\n if (this.plotLine.draggable) {\n grabElement.call(drag);\n }\n }\n\n emit(event: IChartEvent<PlotLine>) {\n this.chartService.emitPlotline(event);\n }\n\n get value() {\n return this.scale(this.plotLine.value);\n }\n\n get height(): number {\n return this.size.height;\n }\n\n get width(): number {\n return this.size.width;\n }\n}\n","<svg:line class=\"plotline\"\n [attr.stroke]=\"plotLine.style?.stroke || 'red'\"\n [attr.stroke-width]=\"plotLine.style?.strokeWidth || 4\"\n [attr.stroke-dasharray]=\"plotLine.style?.strokeDasharray\"\n [attr.x1]=\"axis.orientation === orientation.x ? value : 0\"\n [attr.x2]=\"axis.orientation === orientation.x ? value : width\"\n [attr.y1]=\"axis.orientation === orientation.x ? 0 : value\"\n [attr.y2]=\"axis.orientation === orientation.x ? height : value\">\n</svg:line>\n\n<svg:line class=\"grabber\"\n\n [class.x-grabber]=\"axis.orientation === orientation.x\"\n [class.y-grabber]=\"axis.orientation === orientation.y\"\n [attr.stroke]=\"'red'\"\n [attr.stroke-width]=\"8\"\n opacity=\"0\"\n [attr.x1]=\"axis.orientation === orientation.x ? value : 0\"\n [attr.x2]=\"axis.orientation === orientation.x ? value : width\"\n [attr.y1]=\"axis.orientation === orientation.x ? 0 : value\"\n [attr.y2]=\"axis.orientation === orientation.x ? height : value\">\n</svg:line>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef, HostListener,\n Input,\n OnInit,\n} from '@angular/core';\n\nimport * as d3 from 'd3';\nimport { PlotBand } from '../../model/plot-band';\nimport { ScaleService } from '../../service/scale.service';\n\nimport { Axis } from '../../core/axis/axis';\nimport { ZoomService } from '../../service/zoom.service';\nimport { AxisOrientation } from '../../model/enum/axis-orientation';\nimport { IChartEvent } from '../../model/i-chart-event';\nimport { ChartService } from '../../service/chart.service';\n\n@Component({\n selector: '[teta-plot-band]',\n templateUrl: './plot-band.component.html',\n styleUrls: ['./plot-band.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PlotBandComponent implements AfterViewInit {\n @Input() plotBand: PlotBand;\n @Input() axis: Axis;\n @Input() scale: any;\n @Input() size: DOMRect;\n orientation = AxisOrientation;\n\n domain: number[];\n\n constructor(\n private scaleService: ScaleService,\n private zoomService: ZoomService,\n private chartService: ChartService,\n private cdr: ChangeDetectorRef,\n private element: ElementRef\n ) {}\n\n @HostListener('click', ['$event']) click(event: MouseEvent) {\n this.emit({\n target: this.plotBand,\n event\n })\n }\n\n emit(event: IChartEvent<PlotBand>) {\n this.chartService.emitPlotband(event);\n }\n\n ngAfterViewInit(): void {\n this.domain = this.scale.domain();\n\n const plotbandElement = d3\n .select(this.element.nativeElement)\n .select('.plotband');\n // .on('click', (event, d: PlotBand) => {\n // this.emit({\n // event,\n // target: d,\n // });\n // });\n\n const grabElements = d3\n .select(this.element.nativeElement)\n .selectAll('.grabber');\n\n const drag = d3\n .drag()\n .subject(() => {\n if (this.axis.orientation === AxisOrientation.x) {\n return { x: plotbandElement.attr('x') };\n }\n\n if (this.axis.orientation === AxisOrientation.y) {\n return { y: plotbandElement.attr('y') };\n }\n })\n .on(\n 'start drag end',\n (event: d3.D3DragEvent<any, PlotBand, any>, d: PlotBand) => {\n let bandSize = parseFloat(\n plotbandElement.attr(\n this.axis.orientation === AxisOrientation.x ? 'width' : 'height'\n )\n );\n\n d.to = this.scale.invert(\n event[AxisOrientation[this.axis.orientation]] +\n (this.axis.orientation === AxisOrientation.x ? bandSize : 0)\n );\n\n d.from = this.scale.invert(\n event[AxisOrientation[this.axis.orientation]] +\n (this.axis.orientation === AxisOrientation.y ? bandSize : 0)\n );\n\n this.emit({\n event,\n target: d,\n });\n\n this.cdr.detectChanges();\n }\n );\n\n let grabberKey;\n\n const resize = d3\n .drag()\n .on(\n 'start drag end',\n (event: d3.D3DragEvent<any, PlotBand, any>, d: PlotBand) => {\n requestAnimationFrame(() => {\n if (event?.type === 'start') {\n const { grabber } = event?.sourceEvent?.target?.dataset;\n grabberKey = grabber;\n }\n\n const min = Math.min(...this.domain);\n const max = Math.max(...this.domain);\n\n const minValue = d.min ?? min;\n const maxValue = d.max ?? max;\n d[grabberKey] = this.scale.invert(\n event[AxisOrientation[this.axis.orientation]]\n );\n\n if (grabberKey === 'from') {\n const borderMin = d.from <= minValue;\n\n if (d.from >= d.to) {\n d.from = d.to;\n }\n\n if (borderMin) {\n d.from = minValue;\n }\n }\n\n if (grabberKey === 'to') {\n const borderMax = d.to >= maxValue;\n\n if (borderMax) {\n d.to = maxValue;\n }\n\n if (d.to <= d.from) {\n d.to = d.from;\n }\n }\n\n this.emit({\n event,\n target: d,\n });\n\n this.cdr.detectChanges();\n });\n }\n );\n\n plotbandElement.datum<PlotBand>(this.plotBand);\n grabElements.datum<PlotBand>(this.plotBand);\n\n if (this.plotBand.draggable) {\n plotbandElement.call(drag);\n }\n\n if (this.plotBand.resizable) {\n grabElements.call(resize);\n }\n }\n\n get bandSize(): number {\n return Math.abs(\n this.scale(this.plotBand.to) - this.scale(this.plotBand.from)\n );\n }\n\n get height(): number {\n return this.size.height;\n }\n\n get width(): number {\n return this.size.width;\n }\n\n get from(): number {\n return this.scale(this.plotBand.from);\n }\n\n get to(): number {\n return this.scale(this.plotBand.to);\n }\n\n getFill(d: PlotBand): string {\n if (d.style?.plotBand?.patternImage) {\n return `url(#${d.style.plotBand?.patternImage})`;\n }\n return d.style.plotBand?.fill;\n }\n}\n","<svg:rect\n class=\"plotband\"\n [class.draggable]=\"plotBand?.draggable === true\"\n [attr.fill]=\"getFill(plotBand)\"\n [attr.opacity]=\"plotBand.style?.plotBand?.opacity\"\n [attr.height]=\"axis.orientation === orientation.x ? height : bandSize\"\n [attr.width]=\"axis.orientation === orientation.x ? bandSize : width\"\n [attr.y]=\"axis.orientation === orientation.y ? to : null\"\n [attr.x]=\"axis.orientation === orientation.x ? from : null\">\n</svg:rect>\n\n<svg:line class=\"display-grabber\"\n *ngIf=\"plotBand.showGrabbers\"\n [attr.stroke]=\"plotBand.style?.grabbers?.stroke || 'red'\"\n [attr.stroke-width]=\"plotBand.style?.grabbers?.strokeWidth || 4\"\n [attr.stroke-dasharray]=\"plotBand.style?.grabbers?.strokeDasharray\"\n [attr.x1]=\"axis.orientation === orientation.x ? from : 0\"\n [attr.x2]=\"axis.orientation === orientation.x ? from : width\"\n [attr.data-grabber]=\"'from'\"\n [attr.y1]=\"axis.orientation === orientation.x ? 0 : from\"\n [attr.y2]=\"axis.orientation === orientation.x ? height : from\">\n</svg:line>\n\n<svg:line class=\"display-grabber\"\n *ngIf=\"plotBand.showGrabbers\"\n [attr.stroke]=\"plotBand.style?.grabbers?.stroke || 'red'\"\n [attr.stroke-width]=\"plotBand.style?.grabbers?.strokeWidth || 4\"\n [attr.stroke-dasharray]=\"plotBand.style?.grabbers?.strokeDasharray\"\n [attr.x1]=\"axis.orientation === orientation.x ? to : 0\"\n [attr.x2]=\"axis.orientation === orientation.x ? to : width\"\n [attr.data-grabber]=\"'to'\"\n [attr.y1]=\"axis.orientation === orientation.x ? 0 : to\"\n [attr.y2]=\"axis.orientation === orientation.x ? height : to\">\n</svg:line>\n\n<svg:line class=\"grabber\"\n [class.x-grabber]=\"axis.orientation === orientation.x\"\n [class.y-grabber]=\"axis.orientation === orientation.y\"\n [class.resizeable]=\"plotBand?.resizable\"\n [attr.stroke]=\"'red'\"\n [attr.stroke-width]=\"8\"\n opacity=\"0\"\n [attr.x1]=\"axis.orientation === orientation.x ? from : 0\"\n [attr.x2]=\"axis.orientation === orientation.x ? from : width\"\n [attr.data-grabber]=\"'from'\"\n [attr.y1]=\"axis.orientation === orientation.x ? 0 : from\"\n [attr.y2]=\"axis.orientation === orientation.x ? height : from\">\n</svg:line>\n\n<svg:line class=\"grabber\"\n [class.x-grabber]=\"axis.orientation === orientation.x\"\n [class.y-grabber]=\"axis.orientation === orientation.y\"\n [class.resizeable]=\"plotBand?.resizable\"\n [attr.stroke]=\"'red'\"\n [attr.stroke-width]=\"8\"\n opacity=\"0\"\n [attr.x1]=\"axis.orientation === orientation.x ? to : 0\"\n [attr.x2]=\"axis.orientation === orientation.x ? to : width\"\n [attr.data-grabber]=\"'to'\"\n [attr.y1]=\"axis.orientation === orientation.x ? 0 : to\"\n [attr.y2]=\"axis.orientation === orientation.x ? height : to\">\n</svg:line>\n\n\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnInit,\n} from '@angular/core';\nimport { ChartService } from '../service/chart.service';\nimport { Series } from '../model/series';\nimport { BasePoint } from '../model/base-point';\nimport { ScaleService } from '../service/scale.service';\nimport { ZoomService } from '../service/zoom.service';\nimport { Observable, tap } from 'rxjs';\nimport { IChartConfig } from '../model/i-chart-config';\n\n@Component({\n template: '',\n})\nexport class SeriesBaseComponent<T extends BasePoint> implements OnInit {\n @Input() config: IChartConfig;\n @Input() series: Series<T>;\n @Input() size: DOMRect;\n @Input() rect: any;\n\n zoom: Observable<any>;\n\n constructor(\n protected svc: ChartService,\n protected cdr: ChangeDetectorRef,\n protected scaleService: ScaleService,\n protected zoomService: ZoomService,\n protected element: ElementRef\n ) {}\n\n ngOnInit(): void {}\n}\n","export enum DragPointType {\n x,\n y,\n xy,\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n OnInit,\n} from '@angular/core';\nimport * as d3 from 'd3';\nimport {SeriesBaseComponent} from '../../../base/series-base.component';\nimport {ChartService} from '../../../service/chart.service';\nimport {BasePoint} from '../../../model/base-point';\nimport {ScaleService} from '../../../service/scale.service';\nimport {\n combineLatest,\n map,\n Observable,\n tap,\n withLatestFrom,\n} from 'rxjs';\n\nimport {ZoomService} from '../../../service/zoom.service';\nimport {TooltipTracking} from '../../../model/enum/tooltip-tracking';\nimport {DragPointType} from '../../../model/enum/drag-point-type';\n\n@Component({\n selector: 'svg:svg[teta-line-series]',\n templateUrl: './line-series.component.html',\n styleUrls: ['./line-series.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LineSeriesComponent<T extends BasePoint>\n extends SeriesBaseComponent<T>\n implements OnInit, AfterViewInit {\n transform: Observable<Pick<BasePoint, 'x' | 'y'>>;\n display: Observable<number>;\n path: Observable<string>;\n svgElement: SVGGeometryElement;\n x: any;\n y: any;\n\n constructor(\n protected override svc: ChartService,\n protected override cdr: ChangeDetectorRef,\n protected override scaleService: ScaleService,\n protected override zoomService: ZoomService,\n protected override element: ElementRef\n ) {\n super(svc, cdr, scaleService, zoomService, element);\n }\n\n override ngOnInit(): void {\n this.transform = this.svc.pointerMove.pipe(\n withLatestFrom(this.scaleService.xScaleMap, this.scaleService.yScaleMap),\n map(\n (\n data: [\n PointerEvent,\n Map<number, any>,\n Map<number, any>\n ]\n ) => {\n const [event, x, y] = data;\n\n return this.getTransform(event, x, y);\n }\n ),\n tap(() => this.cdr.detectChanges())\n );\n\n this.path = combineLatest([\n this.scaleService.xScaleMap,\n this.scaleService.yScaleMap,\n ]).pipe(\n map((data: [Map<number, any>, Map<number, any>]) => {\n const [x, y] = data;\n this.x = x.get(this.series.xAxisIndex);\n this.y = y.get(this.series.yAxisIndex);\n\n const line = d3\n .line<BasePoint>()\n .defined((point) => point.x !== null && point.y !== null && !isNaN(point.x) && !isNaN(point.y))\n .x((point) => this.x(point.x))\n .y((point) => this.y(point.y));\n\n return line(this.series.data);\n })\n );\n }\n\n ngAfterViewInit() {\n const drag = (node, event: d3.D3DragEvent<any, any, any>, d: BasePoint) => {\n if (\n d.marker?.dragType === DragPointType.x ||\n d.marker?.dragType === DragPointType.xy\n ) {\n d.x = this.x.invert(event.x);\n }\n\n if (\n d.marker?.dragType === DragPointType.y ||\n d.marker?.dragType === DragPointType.xy\n ) {\n d.y = this.y.invert(event.y);\n }\n\n this.svc.emitPoint({\n target: {\n series: this.series,\n point: d,\n },\n event,\n });\n\n this.cdr.detectChanges();\n };\n\n const dragMarkers = d3\n .drag()\n .subject(function (event, d: BasePoint) {\n const node = d3.select(this);\n return {x: node.attr('cx'), y: node.attr('cy')};\n })\n .on(\n 'start drag end',\n function (event: d3.D3DragEvent<any, any, any>, d: BasePoint) {\n const node = d3.select(this);\n\n drag(node, event, d);\n }\n );\n\n const draggableMarkers = this.series.data?.filter(\n (_) => _?.marker && _?.marker?.draggable\n );\n\n const element = d3\n .select(this.element.nativeElement)\n .selectAll('.draggable-marker')\n .data(draggableMarkers);\n\n element.call(dragMarkers as any);\n\n this.svgElement = d3\n .select(this.element.nativeElement)\n .select('.line')\n .node() as SVGGeometryElement;\n }\n\n getMarkers() {\n return this.series.data?.filter((_) => _?.marker);\n }\n\n getTransform(\n event: any,\n x: Map<number, any>,\n y: Map<number, any>\n ): Pick<BasePoint, 'x' | 'y'> {\n const mouse = [event?.offsetX, event?.offsetY];\n\n const foundX = x.get(this.series.xAxisIndex);\n const foundY = y.get(this.series.yAxisIndex);\n\n const tooltipTracking = this.config?.tooltip?.tracking;\n\n const lineIntersection = (\n p0_x,\n p0_y,\n p1_x,\n p1_y,\n p2_x,\n p2_y,\n p3_x,\n p3_y\n ) => {\n const rV = {} as any;\n let s1_x, s1_y, s2_x, s2_y;\n s1_x = p1_x - p0_x;\n s1_y = p1_y - p0_y;\n s2_x = p3_x - p2_x;\n s2_y = p3_y - p2_y;\n\n let s, t;\n s =\n (-s1_y * (p0_x - p2_x) + s1_x * (p0_y - p2_y)) /\n (-s2_x * s1_y + s1_x * s2_y);\n t =\n (s2_x * (p0_y - p2_y) - s2_y * (p0_x - p2_x)) /\n (-s2_x * s1_y + s1_x * s2_y);\n\n if (s >= 0 && s <= 1 && t >= 0 && t <= 1) {\n // Collision detected\n rV.x = p0_x + t * s1_x;\n rV.y = p0_y + t * s1_y;\n }\n\n return rV;\n };\n\n if (tooltipTracking === TooltipTracking.x) {\n const bisect = d3.bisector((_: BasePoint) => _.x).right;\n const pointer = mouse[0];\n\n const x0 = foundX.invert(pointer);\n\n const rightId = bisect(this.series.data, x0);\n\n const range = foundY.range();\n\n const intersect = lineIntersection(\n pointer,\n range[0],\n pointer,\n range[1],\n foundX(this.series.data[rightId - 1]?.x),\n foundY(this.series.data[rightId - 1]?.y),\n foundX(this.series.data[rightId]?.x),\n foundY(this.series.data[rightId]?.y)\n );\n this.svc.setTooltip({\n point: {x: foundX.invert(intersect.x), y: foundY.invert(intersect.y)},\n series: this.series,\n });\n\n return {\n x: intersect.x,\n y: intersect.y,\n };\n }\n\n if (tooltipTracking === TooltipTracking.y) {\n const bisect = d3.bisector((_: BasePoint) => _.y).right;\n\n const y0 = foundY.invert(mouse[1]);\n\n const rightId = bisect(this.series.data, y0);\n const range = foundX.range();\n\n const intersect = lineIntersection(\n range[0],\n mouse[1],\n range[1],\n mouse[1],\n foundX(this.series.data[rightId - 1]?.x),\n foundY(this.series.data[rightId - 1]?.y),\n foundX(this.series.data[rightId]?.x),\n foundY(this.series.data[rightId]?.y)\n );\n\n this.svc.setTooltip({\n point: {\n x: foundX.invert(intersect.x),\n y: foundY.invert(intersect.y),\n },\n series: this.series,\n });\n\n return {\n x: intersect.x,\n y: intersect.y,\n };\n }\n }\n}\n","\n <svg:path\n class=\"line\"\n [attr.d]=\"path | async\"\n [attr.stroke]=\"series.color\"\n [attr.stroke-width]=\"series.style?.strokeWidth\"\n fill=\"none\">\n </svg:path>\n <ng-container *ngIf=\"transform | async as t\">\n <svg:circle\n *ngIf=\"t.x !== undefined && t.y!== undefined\"\n r=\"3\"\n [attr.fill]=\"series.color\"\n [attr.transform]=\"'translate('+ t.x +', '+ t.y +')'\"\n >\n </svg:circle>\n </ng-container>\n\n <ng-container *ngIf=\"getMarkers() as markers\">\n <svg:circle\n class=\"marker\"\n *ngFor=\"let point of markers\"\n [class.draggable-marker]=\"point?.marker?.draggable\"\n [attr.r]=\"point.marker.style?.radius ?? 5\"\n [attr.fill]=\"point.marker.style?.fill ?? 'transparent'\"\n [attr.stroke]=\"point.marker.style?.stroke ?? 'none'\"\n [attr.stroke-width]=\"point.marker.style?.strokeWidth\"\n [attr.stroke-dasharray]=\"point.marker.style?.strokeDasharray\"\n [attr.cx]=\"x(point.x)\"\n [attr.cy]=\"y(point.y)\"\n >\n </svg:circle>\n </ng-container>\n\n\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n OnChanges,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport * as d3 from 'd3';\nimport { SeriesBaseComponent } from '../../../base/series-base.component';\nimport { BasePoint } from '../../../model/base-point';\nimport { ChartService } from '../../../service/chart.service';\nimport { ScaleService } from '../../../service/scale.service';\nimport { ZoomService } from '../../../service/zoom.service';\n\n@Component({\n selector: 'svg:svg[teta-bar-series]',\n templateUrl: './bar-series.component.html',\n styleUrls: ['./bar-series.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BarSeriesComponent<T extends BasePoint>\n extends SeriesBaseComponent<T>\n implements OnInit, OnChanges\n{\n private scaleBand: d3.ScaleBand<any>;\n private y: any;\n\n constructor(\n protected override svc: ChartService,\n protected override cdr: ChangeDetectorRef,\n protected override scaleService: ScaleService,\n protected override zoomService: ZoomService,\n protected override element: ElementRef\n ) {\n super(svc, cdr, scaleService, zoomService, element);\n }\n\n override ngOnInit(): void {\n // const x = this.scaleService.xScaleMap.get(this.series.xAxisIndex);\n // const y = this.scaleService.yScaleMap.get(this.series.yAxisIndex);\n //\n // const domain = this.series.data?.map((_: BasePoint) => _.x);\n // const range = [x(domain[0]), x(domain[domain?.length - 1])];\n //\n // this.scaleBand = d3.scaleBand<number>().domain(domain).range(range);\n //\n // this.y = y;\n }\n\n width() {\n return this.scaleBand.bandwidth();\n }\n\n height(point: BasePoint) {\n return Math.abs(this.y(0) - this.y(point.y));\n }\n\n getX(point: BasePoint) {\n return this.scaleBand(point.x);\n }\n\n getY(point: BasePoint) {\n return this.y(point.y);\n }\n\n ngOnChanges(changes: SimpleChanges) {}\n}\n","<svg:rect *ngFor=\"let point of series.data\" [attr.y]=\"getY(point)\" [attr.x]=\"getX(point)\" [attr.width]=\"width()\"\n [attr.height]=\"height(point)\"\n [attr.fill]=\"point.color\"></svg:rect>\n","import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, OnInit} from '@angular/core';\nimport {BasePoint} from '../../../model/base-point';\nimport {SeriesBaseComponent} from '../../../base/series-base.component';\nimport {combineLatest, map, Observable, tap, withLatestFrom} from 'rxjs';\nimport {ChartService} from '../../../service/chart.service';\nimport {ScaleService} from '../../../service/scale.service';\nimport {ZoomService} from '../../../service/zoom.service';\nimport * as d3 from 'd3';\nimport {DragPointType} from '../../../model/enum/drag-point-type';\nimport {TooltipTracking} from '../../../model/enum/tooltip-tracking';\n\n@Component({\n selector: 'svg:svg[teta-scatter-series]',\n templateUrl: './scatter-series.component.html',\n styleUrls: ['./scatter-series.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ScatterSeriesComponent<T extends BasePoint>\n extends SeriesBaseComponent<T>\n implements OnInit, AfterViewInit\n{\n transform: Observable<Pick<BasePoint, 'x' | 'y'>>;\n display: Observable<number>;\n path: Observable<string>;\n svgElement: SVGGeometryElement;\n x: Observable<any>;\n y: Observable<any>;\n\n constructor(\n protected override svc: ChartService,\n protected override cdr: ChangeDetectorRef,\n protected override scaleService: ScaleService,\n protected override zoomService: ZoomService,\n protected override element: ElementRef\n ) {\n super(svc, cdr, scaleService, zoomService, element);\n }\n\n override ngOnInit(): void {\n this.transform = this.svc.pointerMove.pipe(\n withLatestFrom(this.scaleService.xScaleMap, this.scaleService.yScaleMap),\n map(\n (\n data: [\n PointerEvent,\n Map<number, any>,\n Map<number, any>\n ]\n ) => {\n const [event, x, y] = data;\n\n return this.getTransform(event, x, y);\n }\n ),\n tap(() => this.cdr.detectChanges())\n );\n\n this.x = this.scaleService.xScaleMap.pipe(map(_ => _.get(this.series.xAxisIndex)));\n this.y = this.scaleService.yScaleMap.pipe(map(_ => _.get(this.series.yAxisIndex)));\n\n // this.path = combineLatest([\n // ,\n // this.scaleService.yScaleMap,\n // ]).pipe(\n // map((data: [Map<number, any>, Map<number, any>]) => {\n // const [x, y] = data;\n // this.x = x.get(this.series.xAxisIndex);\n // this.y = y.get(this.series.yAxisIndex);\n //\n // const line = d3\n // .line<BasePoint>()\n // .defined((point) => point.x !== null || point.y !== null)\n // .x((point) => this.x(point.x))\n // .y((point) => this.y(point.y));\n //\n // return line(this.series.data);\n // })\n // );\n }\n\n ngAfterViewInit() {\n // const drag = (node, event: d3.D3DragEvent<any, any, any>, d: BasePoint) => {\n // if (\n // d.marker?.dragType === DragPointType.x ||\n // d.marker?.dragType === DragPointType.xy\n // ) {\n // d.x = this.x.invert(event.x);\n // }\n //\n // if (\n // d.marker?.dragType === DragPointType.y ||\n // d.marker?.dragType === DragPointType.xy\n // ) {\n // d.y = this.y.invert(event.y);\n // }\n //\n // this.svc.emitPoint({\n // target: {\n // series: this.series,\n // point: d,\n // },\n // event,\n // });\n //\n // this.cdr.detectChanges();\n // };\n\n // // const dragMarkers = d3\n // // .drag()\n // // .subject(function (event, d: BasePoint) {\n // // const node = d3.select(this);\n // // return { x: node.attr('cx'), y: node.attr('cy') };\n // // })\n // // .on(\n // // 'start drag end',\n // // function (event: d3.D3DragEvent<any, any, any>, d: BasePoint) {\n // // const node = d3.select(this);\n // //\n // // drag(node, event, d);\n // // }\n // // );\n //\n // const draggableMarkers = this.series.data?.filter(\n // (_) => _?.marker && _?.marker?.draggable\n // );\n //\n // const element = d3\n // .select(this.element.nativeElement)\n // .selectAll('.draggable-marker')\n // .data(draggableMarkers);\n //\n // element.call(dragMarkers as any);\n //\n // this.svgElement = d3\n // .select(this.element.nativeElement)\n // .select('.line')\n // .node() as SVGGeometryElement;\n }\n\n getMarkers() {\n return this.series.data?.filter((_) => _?.marker);\n }\n\n getTransform(\n event: any,\n x: Map<number, any>,\n y: Map<number, any>\n ): Pick<BasePoint, 'x' | 'y'> {\n const mouse = [event?.offsetX, event?.offsetY];\n\n const foundX = x.get(this.series.xAxisIndex);\n const foundY = y.get(this.series.yAxisIndex);\n\n const tooltipTracking = this.config?.tooltip?.tracking;\n\n const lineIntersection = (\n p0_x,\n p0_y,\n p1_x,\n p1_y,\n p2_x,\n p2_y,\n p3_x,\n p3_y\n ) => {\n const rV = {} as any;\n let s1_x, s1_y, s2_x, s2_y;\n s1_x = p1_x - p0_x;\n s1_y = p1_y - p0_y;\n s2_x = p3_x - p2_x;\n s2_y = p3_y - p2_y;\n\n let s, t;\n s =\n (-s1_y * (p0_x - p2_x) + s1_x * (p0_y - p2_y)) /\n (-s2_x * s1_y + s1_x * s2_y);\n t =\n (s2_x * (p0_y - p2_y) - s2_y * (p0_x - p2_x)) /\n (-s2_x * s1_y + s1_x * s2_y);\n\n if (s >= 0 && s <= 1 && t >= 0 && t <= 1) {\n // Collision detected\n rV.x = p0_x + t * s1_x;\n rV.y = p0_y + t * s1_y;\n }\n\n return rV;\n };\n\n if (tooltipTracking === TooltipTracking.x) {\n const bisect = d3.bisector((_: BasePoint) => _.x).right;\n const pointer = mouse[0];\n\n const x0 = foundX.invert(pointer);\n\n const rightId = bisect(this.series.data, x0);\n\n const range = foundY.range();\n\n const intersect = lineIntersection(\n pointer,\n range[0],\n pointer,\n range[1],\n foundX(this.series.data[rightId - 1]?.x),\n foundY(this.series.data[rightId - 1]?.y),\n foundX(this.series.data[rightId]?.x),\n foundY(this.series.data[rightId]?.y)\n );\n this.svc.setTooltip({\n point: { x: foundX.invert(intersect.x), y: foundY.invert(intersect.y) },\n series: this.series,\n });\n\n return {\n x: intersect.x,\n y: intersect.y,\n };\n }\n\n if (tooltipTracking === TooltipTracking.y) {\n const bisect = d3.bisector((_: BasePoint) => _.y).right;\n\n const y0 = foundY.invert(mouse[1]);\n\n const rightId = bisect(this.series.data, y0);\n const range = foundX.range();\n\n const intersect = lineIntersection(\n range[0],\n mouse[1],\n range[1],\n mouse[1],\n foundX(this.series.data[rightId - 1]?.x),\n foundY(this.series.data[rightId - 1]?.y),\n foundX(this.series.data[rightId]?.x),\n foundY(this.series.data[rightId]?.y)\n );\n\n this.svc.setTooltip({\n point: {\n x: foundX.invert(intersect.x),\n y: foundY.invert(intersect.y),\n },\n series: this.series,\n });\n\n return {\n x: intersect.x,\n y: intersect.y,\n };\n }\n }\n}\n","<ng-container *ngIf=\"{\n y: y | async,\n x: x | async\n} as scales\">\n <svg:circle\n class=\"line\"\n *ngFor=\"let point of series.data\"\n [attr.cx]=\"scales.x(point.x)\"\n [attr.cy]=\"scales.y(point.y)\"\n r=\"1\"\n [attr.stroke]=\"series.color\"\n [attr.fill]=\"series.color\"\n [attr.stroke-width]=\"series.style?.strokeWidth\">\n </svg:circle>\n</ng-container>\n<!--<ng-container *ngIf=\"transform | async as t\">-->\n<!-- <svg:circle-->\n<!-- *ngIf=\"t.x !== undefined && t.y!== undefined\"-->\n<!-- r=\"3\"-->\n<!-- [attr.fill]=\"series.color\"-->\n<!-- [attr.transform]=\"'translate('+ t.x +', '+ t.y +')'\"-->\n<!-- >-->\n<!-- </svg:circle>-->\n<!--</ng-container>-->\n\n<!--<ng-container *ngIf=\"getMarkers() as markers\">-->\n<!-- <svg:circle-->\n<!-- class=\"marker\"-->\n<!-- *ngFor=\"let point of markers\"-->\n<!-- [class.draggable-marker]=\"point?.marker?.draggable\"-->\n<!-- [attr.r]=\"point.marker.style?.radius ?? 5\"-->\n<!-- [attr.fill]=\"point.marker.style?.fill ?? 'transparent'\"-->\n<!-- [attr.stroke]=\"point.marker.style?.stroke ?? 'none'\"-->\n<!-- [attr.stroke-width]=\"point.marker.style?.strokeWidth\"-->\n<!-- [attr.stroke-dasharray]=\"point.marker.style?.strokeDasharray\"-->\n<!-- [attr.cx]=\"x(point.x)\"-->\n<!-- [attr.cy]=\"y(point.y)\"-->\n<!-- >-->\n<!-- </svg:circle>-->\n<!--</ng-container>-->\n\n\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n Input,\n OnInit,\n SimpleChanges,\n ViewContainerRef,\n} from '@angular/core';\nimport { SeriesBaseComponent } from '../../base/series-base.component';\nimport { LineSeriesComponent } from '../series/line/line-series.component';\nimport { BarSeriesComponent } from '../series/bar/bar-series.component';\n\nimport { Series } from '../../model/series';\nimport { BasePoint } from '../../model/base-point';\nimport { ChartService } from '../../service/chart.service';\nimport { tap } from 'rxjs';\nimport { throttleTime } from 'rxjs/operators';\nimport { SeriesType } from '../../model/enum/series-type';\nimport { IChartConfig } from '../../model/i-chart-config';\nimport { ScatterSeriesComponent } from '../series/scatter-series/scatter-series.component';\n\n@Component({\n selector: '[teta-series-host]',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SeriesHostComponent<T extends BasePoint> implements OnInit {\n @Input() config: IChartConfig;\n @Input() series: Series<T>;\n @Input() size: DOMRect;\n @Input() rect: any;\n\n private defaultSeriesTypeMapping = new Map<\n SeriesType,\n typeof SeriesBaseComponent\n >()\n .set(SeriesType.line, LineSeriesComponent)\n .set(SeriesType.bar, BarSeriesComponent)\n .set(SeriesType.scatter, ScatterSeriesComponent);\n\n private _init = false;\n private _componentRef: ComponentRef<any>;\n\n constructor(\n private viewContainerRef: ViewContainerRef,\n private chartService: ChartService\n ) {\n this.chartService.size\n .pipe(\n tap(() => {\n this._componentRef?.injector.get(ChangeDetectorRef).detectChanges();\n })\n )\n .subscribe();\n }\n\n ngOnInit(): void {\n if (!SeriesBaseComponent.isPrototypeOf(this.series.component)) {\n this.series.component =\n this.defaultSeriesTypeMapping.get(this.series.type) ||\n LineSeriesComponent;\n }\n\n this._componentRef = this.viewContainerRef.createComponent(\n this.series.component\n );\n this._componentRef.instance.config = this.config;\n this._componentRef.instance.series = this.series;\n this._componentRef.instance.size = this.size;\n this._componentRef.instance.rect = this.rect;\n this._init = true;\n }\n\n ngOnDestroy(): void {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this._init && changes.hasOwnProperty('series')) {\n this._componentRef.instance.config = this.config;\n this._componentRef.instance.series = this.series;\n this._componentRef.instance.size = this.size;\n this._componentRef.instance.rect = this.rect;\n\n this._componentRef.injector.get(ChangeDetectorRef).markForCheck();\n this._componentRef.injector.get(ChangeDetectorRef).detectChanges();\n }\n }\n}\n","import { Directive, ElementRef, HostBinding, Input } from '@angular/core';\nimport { ZoomService } from '../service/zoom.service';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { Axis } from '../core/axis/axis';\nimport { ZoomType } from '../model/enum/zoom-type';\n\n@Directive({\n selector: '[tetaZoomable]',\n})\nexport class ZoomableDirective {\n @Input() config?: IChartConfig;\n @Input() axis?: Axis;\n @Input() size?: DOMRect;\n\n @HostBinding('class.zoomable') private zoomable = false;\n\n constructor(private element: ElementRef, private svc: ZoomService) {}\n\n ngOnInit() {\n let enable = this.axis?.options?.zoom || this.config?.zoom?.enable;\n\n if (enable) {\n this.zoomable = true;\n this.svc.applyZoom(this.element, this.config, this.size, this.axis);\n }\n }\n ngAfterViewInit() {}\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n Input,\n OnInit,\n} from '@angular/core';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { BrushService } from '../service/brush.service';\nimport { ChartService } from '../service/chart.service';\n\n@Directive({\n selector: 'svg:svg[tetaBrushable]',\n})\nexport class BrushableDirective implements OnInit, AfterViewInit {\n @Input() config?: IChartConfig;\n @Input() size?: DOMRect;\n @Input() brushScale: any;\n\n constructor(\n private brushService: BrushService,\n private chartService: ChartService,\n private element: ElementRef\n ) {}\n\n ngOnInit() {}\n\n ngAfterViewInit() {\n this.brushService.applyBrush(this.element, this.config, this.brushScale);\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n OnInit,\n} from '@angular/core';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { ChartService } from '../service/chart.service';\nimport { combineLatest, filter, map, Observable, tap } from 'rxjs';\nimport { Axis } from '../core/axis/axis';\nimport { AxisOrientation } from '../model/enum/axis-orientation';\nimport { ScaleService } from '../service/scale.service';\nimport { IChartEvent } from '../model/i-chart-event';\nimport { ZoomService } from '../service/zoom.service';\n\ntype Opposite = boolean;\n\n@Component({\n selector: 'teta-chart-container',\n templateUrl: './chart-container.component.html',\n styleUrls: ['./chart-container.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartContainerComponent implements OnInit {\n config: Observable<IChartConfig>;\n\n yAxisMap: Observable<Map<number, Axis>>;\n xAxisMap: Observable<Map<number, Axis>>;\n yScaleMap: Observable<Map<number, any>>;\n xScaleMap: Observable<Map<number, any>>;\n size: Observable<DOMRect>;\n visibleRect: Observable<any>;\n\n brushScale: Observable<any>;\n\n private _observer: ResizeObserver;\n private uniqId: string;\n\n private filterPositionMap = new Map<\n Opposite,\n (axis: Axis) => (_: Axis) => boolean\n >()\n .set(\n true,\n (axis) => (_: Axis) =>\n _.options.opposite && _.options.visible && axis.index <= _.index\n )\n .set(\n false,\n (axis) => (_: Axis) =>\n _.options.opposite !== true &&\n _.options.visible &&\n _.index <= axis.index\n );\n\n constructor(\n private _svc: ChartService,\n private _cdr: ChangeDetectorRef,\n private _scaleService: ScaleService,\n private _zoomService: ZoomService,\n private _elementRef: ElementRef\n ) {\n this.config = this._svc.config;\n this.size = this._svc.size;\n this.yAxisMap = this._scaleService.yAxisMap;\n this.xAxisMap = this._scaleService.xAxisMap;\n this.yScaleMap = this._scaleService.yScaleMap;\n this.xScaleMap = this._scaleService.xScaleMap;\n\n this.brushScale = this._scaleService.xScaleMap.pipe(\n map((map) => {\n return map.get(0);\n })\n );\n\n this.visibleRect = combineLatest([\n this.size,\n this.xAxisMap,\n this.yAxisMap,\n this._zoomService.zoomed,\n ]).pipe(\n map(\n (\n data: [DOMRect, Map<number, any>, Map<number, any>, IChartEvent<Axis>]\n ) => {\n const [size, x, y] = data;\n const yAxesArray = [...y.values()];\n const xAxesArray = [...x.values()];\n const left = yAxesArray\n .filter((_) => _.options.opposite !== true && _.options.visible)\n .reduce(this.sumSize, 0);\n\n const right = yAxesArray\n .filter((_) => _.options.opposite && _.options.visible)\n .reduce(this.sumSize, 0);\n\n const bottom = xAxesArray\n .filter((_) => _.options.opposite !== true && _.options.visible)\n .reduce(this.sumSize, 0);\n\n const top = xAxesArray\n .filter((_) => _.options.opposite && _.options.visible)\n .reduce(this.sumSize, 0);\n\n return {\n x: left,\n y: top,\n width: size.width - left - right + 1,\n height: size.height - top - bottom + 1,\n };\n }\n ),\n tap((_) => this._cdr.detectChanges())\n );\n }\n\n ngOnInit(): void {\n this.uniqId = (Date.now() + Math.random()).toString(36);\n this._observer = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n if (!Array.isArray(entries) || !entries.length) {\n return;\n }\n\n this._svc.setSize(entries[0].contentRect);\n });\n this._observer.observe(this._elementRef.nativeElement);\n }\n\n ngAfterViewInit() {}\n\n private sumSize = (acc, curr) => acc + curr.selfSize;\n\n getTranslate(axis?: Axis, size?: DOMRect): Observable<string> {\n return combineLatest([this.xAxisMap, this.yAxisMap]).pipe(\n map((data: [Map<number, Axis>, Map<number, Axis>]) => {\n const [x, y] = data;\n const xAxesArray = [...x.values()];\n const yAxesArray = [...y.values()];\n\n const oppositeFilter = this.filterPositionMap.get(true);\n const nonOppositeFilter = this.filterPositionMap.get(false);\n\n const oppositeOffsetY = yAxesArray.filter(oppositeFilter(axis));\n const nonOppositeOffsetY = yAxesArray.filter(nonOppositeFilter(axis));\n\n const oppositeOffsetX = xAxesArray.filter(oppositeFilter(axis));\n const nonOppositeOffsetX = xAxesArray.filter(nonOppositeFilter(axis));\n\n const oppositeTranslateY = oppositeOffsetY.reduce(\n (acc, curr) => acc + curr.selfSize,\n 0\n );\n const nonOppisteTranslateY = nonOppositeOffsetY.reduce(\n (acc, curr) => acc + curr.selfSize,\n 0\n );\n\n const oppositeTranslateX = oppositeOffsetX.reduce(\n (acc, curr) => acc + curr.selfSize,\n 0\n );\n\n const nonOppisteTranslateX = nonOppositeOffsetX.reduce(\n (acc, curr) => acc + curr.selfSize,\n 0\n );\n\n const left = yAxesArray\n .filter((_) => _.options.visible && _.options.opposite !== true)\n .reduce((acc, curr) => acc + curr.selfSize, 0);\n\n const top = xAxesArray\n .filter((_) => _.options.visible && _.options.opposite === true)\n .reduce((acc, curr) => acc + curr.selfSize, 0);\n\n if (axis.orientation === AxisOrientation.x) {\n return `translate(${left}, ${\n axis.options.opposite\n ? oppositeTranslateX\n : size.height - nonOppisteTranslateX\n })`;\n }\n\n if (axis.orientation === AxisOrientation.y) {\n return `translate(${\n axis.options.opposite\n ? size.width - oppositeTranslateY\n : nonOppisteTranslateY\n }, ${top})`;\n }\n\n return 'translate(0, 0)';\n })\n );\n }\n\n identify(index, item) {\n return item.value.index;\n }\n\n mouseMove(event) {\n this._svc.setPointerMove(event);\n }\n\n mouseLeave(event) {\n this._svc.setPointerMove(event);\n }\n\n id(): string {\n return this.uniqId;\n }\n}\n","<ng-container *ngIf=\"{\n size: size | async,\n config: config | async,\n xAxisMap: xAxisMap | async,\n yAxisMap: yAxisMap | async,\n xScaleMap: xScaleMap | async,\n yScaleMap: yScaleMap | async\n} as data\">\n\n <teta-tooltip *ngIf=\"data.config?.tooltip?.enable\" [size]=\"data.size\" [config]=\"data.config\"></teta-tooltip>\n <svg height=\"100%\" width=\"100%\" class=\"position-absolute\">\n <g class=\"y-axis-container\">\n <ng-container *ngFor=\"let item of data.yAxisMap | keyvalue; trackBy: identify\">\n <g\n teta-y-axis\n [axis]=\"item.value\"\n [scale]=\"data.yScaleMap.get(item.key)\"\n [size]=\"data.size\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></g>\n <rect\n tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"config | async\"\n [size]=\"data.size\"\n [attr.x]=\"item.value.options.opposite ? 0 : -item.value.selfSize\"\n [attr.y]=\"0\"\n [attr.height]=\"data.size.width\"\n [attr.width]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></rect>\n </ng-container>\n </g>\n <g class=\"x-axis-container\">\n <ng-container *ngFor=\"let item of data.xAxisMap | keyvalue; trackBy: identify\">\n <g\n teta-x-axis\n [axis]=\"item.value\"\n [scale]=\"data.xScaleMap.get(item.key)\"\n [size]=\"data.size\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></g>\n\n <rect\n tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"config | async\"\n [size]=\"data.size\"\n [attr.x]=\"0\"\n [attr.y]=\"0\"\n [attr.width]=\"data.size.width\"\n [attr.height]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></rect>\n </ng-container>\n </g>\n </svg>\n <ng-container *ngIf=\"visibleRect | async as rect\">\n <svg\n tetaBrushable\n tetaZoomable\n [size]=\"data.size\"\n [brushScale]=\"brushScale | async\"\n [config]=\"config | async\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.transform]=\"'translate('+ rect.x +', '+ rect.y +')'\"\n [attr.viewBox]=\"'0 0 ' + rect.width + ' ' + rect.height\"\n (mouseleave)=\"mouseLeave($event)\"\n (mousemove)=\"mouseMove($event)\">\n <g>\n <g>\n <g class=\"gridlines\"\n teta-gridlines\n [size]=\"data.size\"\n [xScaleMap]=\"data.xScaleMap\"\n [yScaleMap]=\"data.yScaleMap\"></g>\n <g class=\"x-axis-plotline-container\">\n <ng-container *ngFor=\"let axis of data.config.xAxis; let i = index\">\n <g teta-plot-line *ngFor=\"let plotLine of axis.plotLines\"\n [plotLine]=\"plotLine\"\n [scale]=\"data.xScaleMap.get(i)\"\n [size]=\"data.size\"\n [axis]=\"data.xAxisMap.get(i)\"></g>\n </ng-container>\n </g>\n <g class=\"y-axis-plotline-container\">\n <ng-container *ngFor=\"let axis of data.config.yAxis; let i = index\">\n <g teta-plot-line *ngFor=\"let plotLine of axis.plotLines\"\n [plotLine]=\"plotLine\"\n [scale]=\"data.yScaleMap.get(i)\"\n [size]=\"data.size\"\n [axis]=\"data.yAxisMap.get(i)\"></g>\n </ng-container>\n </g>\n\n <g class=\"x-axis-plotband-container\">\n <ng-container *ngFor=\"let axis of data.config.xAxis; let i = index\">\n <g teta-plot-band *ngFor=\"let plotBand of axis.plotBands\"\n [plotBand]=\"plotBand\"\n [scale]=\"data.xScaleMap.get(i)\"\n [size]=\"data.size\"\n [axis]=\"data.xAxisMap.get(i)\"></g>\n </ng-container>\n </g>\n <g class=\"y-axis-plotband-container\">\n <ng-container *ngFor=\"let axis of data.config.yAxis; let i = index\">\n <g teta-plot-band *ngFor=\"let plotBand of axis.plotBands\"\n [plotBand]=\"plotBand\"\n [scale]=\"data.yScaleMap.get(i)\"\n [size]=\"data.size\"\n [axis]=\"data.yAxisMap.get(i)\"></g>\n </ng-container>\n </g>\n <g class=\"series-container\">\n <g teta-series-host\n *ngFor=\"let series of data.config.series\"\n [config]=\"data.config\"\n [series]=\"series\"\n [size]=\"data.size\"></g>\n </g>\n </g>\n </g>\n </svg>\n </ng-container>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n OnInit,\n} from '@angular/core';\nimport { Series } from '../model/series';\nimport { BasePoint } from '../model/base-point';\nimport { SeriesType } from '../model/enum/series-type';\n\n@Component({\n selector: 'teta-legend',\n templateUrl: './legend.component.html',\n styleUrls: ['./legend.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LegendComponent {\n private sizeMapping = new Map<SeriesType, number>()\n .set(SeriesType.line, 2)\n .set(SeriesType.bar, 12);\n\n @Input() series: Array<Series<BasePoint>>;\n @HostBinding('class.padding-bottom-4') classLegend = true;\n\n constructor() {}\n\n getHeight(serie: Series<BasePoint>) {\n return this.sizeMapping.get(serie.type ?? SeriesType.line);\n }\n}\n","<ng-container *ngFor=\"let serie of series\" class=\"padding-bottom-4\">\n <div *ngIf=\"serie?.showInLegend !== false\">\n <div class=\"legend-item\">\n <div class=\"legend-icon-form\" [style.height.px]=\"getHeight(serie)\" [style.background-color]=\"serie.color\"></div>\n <div class=\"legend-label\">{{ serie.name }}</div>\n </div>\n </div>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { ChartService } from '../service/chart.service';\nimport { IChartConfig } from '../model/i-chart-config';\nimport { BasePoint } from '../model/base-point';\nimport { Series } from '../model/series';\nimport { ZoomService } from '../service/zoom.service';\nimport { ScaleService } from '../service/scale.service';\nimport { BrushService } from '../service/brush.service';\nimport { IChartEvent } from '../model/i-chart-event';\nimport { PlotLine } from '../model/plot-line';\nimport { PlotBand } from '../model/plot-band';\nimport { IPointMove } from '../model/i-point-move';\nimport { map, Observable, takeWhile, tap } from 'rxjs';\n\n@Component({\n selector: 'teta-svg-chart',\n templateUrl: './chart.component.html',\n styleUrls: ['./chart.component.scss'],\n providers: [ChartService, ZoomService, ScaleService, BrushService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartComponent implements OnInit, OnChanges, OnDestroy {\n legendSeries: Array<Series<BasePoint>>;\n hasSeriesData: Observable<boolean>;\n svcConfig: Observable<IChartConfig>;\n @Output()\n plotBandsMove: EventEmitter<IChartEvent<PlotBand>> = new EventEmitter<\n IChartEvent<PlotBand>\n >();\n\n @Output()\n plotBandsClick: EventEmitter<IChartEvent<PlotBand>> = new EventEmitter<\n IChartEvent<PlotBand>\n >();\n\n @Output()\n plotLinesMove: EventEmitter<IChartEvent<PlotLine>> = new EventEmitter<\n IChartEvent<PlotLine>\n >();\n\n @Output()\n pointMove: EventEmitter<IChartEvent<IPointMove>> = new EventEmitter<\n IChartEvent<IPointMove>\n >();\n\n @Input() set config(config: IChartConfig) {\n this._svc.setConfig(config);\n }\n\n private _alive = true;\n\n constructor(private _svc: ChartService, private _zoomService: ZoomService) {\n this.svcConfig = this._svc.config;\n this.hasSeriesData = this.svcConfig.pipe(\n map(\n (_) => _.series?.length > 0 && _.series?.some((_) => _.data?.length > 0)\n )\n );\n }\n\n ngOnChanges(changes: SimpleChanges) {}\n\n ngOnInit(): void {\n this._svc.plotBandEvent\n .pipe(takeWhile(() => this._alive))\n .subscribe((_) => {\n this.plotBandsMove.emit(_);\n });\n\n this._svc.plotLineMove.pipe(takeWhile(() => this._alive)).subscribe((_) => {\n this.plotLinesMove.emit(_);\n });\n\n this._svc.pointMove.pipe(takeWhile(() => this._alive)).subscribe((_) => {\n this.pointMove.emit(_);\n });\n\n this._svc.plotBandClick\n .pipe(takeWhile(() => this._alive))\n .subscribe((_) => {\n this.plotBandsClick.emit(_);\n });\n }\n\n ngAfterViewInit() {}\n\n ngOnDestroy() {\n this._alive = false;\n this._zoomService.broadcastSubscription?.forEach((sub) => {\n sub.unsubscribe();\n });\n }\n}\n","<ng-container *ngIf=\"{\n hasSeriesData: hasSeriesData | async,\n svcConfig: svcConfig | async\n} as data\">\n <ng-container *ngIf=\"data.hasSeriesData === true else noData\">\n <div class=\"column column_auto\">\n <teta-chart-container class=\"chart-container\"></teta-chart-container>\n </div>\n <teta-legend *ngIf=\"data.svcConfig.legend?.enable === true\" [series]=\"data.svcConfig.series\"></teta-legend>\n </ng-container>\n</ng-container>\n<ng-template #noData>\n <div class=\"column column_auto align-center justify-content-center\">\n <span class=\"font-body-3 color-text-40\">Данные отсутствуют</span>\n </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ChartComponent } from './chart/chart.component';\nimport { SeriesHostComponent } from './chart-container/series-host/series-host.component';\nimport { ChartContainerComponent } from './chart-container/chart-container.component';\nimport { LegendComponent } from './legend/legend.component';\nimport { SeriesBaseComponent } from './base/series-base.component';\nimport { LineSeriesComponent } from './chart-container/series/line/line-series.component';\nimport { GridlinesComponent } from './chart-container/gridlines/gridlines.component';\nimport { XAxisComponent } from './chart-container/x-axis/x-axis.component';\nimport { YAxisComponent } from './chart-container/y-axis/y-axis.component';\nimport { PlotlineComponent } from './chart-container/plotline/plotline.component';\nimport { PlotBandComponent } from './chart-container/plotband/plot-band.component';\nimport { BarSeriesComponent } from './chart-container/series/bar/bar-series.component';\nimport { TooltipComponent } from './chart-container/tooltip/tooltip.component';\nimport { ZoomableDirective } from './directives/zoomable.directive';\nimport { BrushableDirective } from './directives/brushable.directive';\nimport { ScatterSeriesComponent } from './chart-container/series/scatter-series/scatter-series.component';\n\n@NgModule({\n declarations: [\n ChartComponent,\n SeriesHostComponent,\n ChartContainerComponent,\n LegendComponent,\n SeriesBaseComponent,\n LineSeriesComponent,\n GridlinesComponent,\n XAxisComponent,\n YAxisComponent,\n PlotlineComponent,\n PlotBandComponent,\n BarSeriesComponent,\n TooltipComponent,\n ZoomableDirective,\n BrushableDirective,\n ScatterSeriesComponent,\n ],\n exports: [ChartComponent],\n imports: [CommonModule],\n})\nexport class ChartModule {}\n","import { SvgAttributes } from './svg-attributes';\n\nexport class PlotBand {\n id?: number | string;\n name?: string;\n from: number;\n to: number;\n label?: string;\n showGrabbers?: boolean;\n draggable?: boolean;\n resizable?: boolean;\n min?: number;\n max?: number;\n style?: {\n plotBand?: SvgAttributes;\n grabbers?: SvgAttributes;\n };\n\n constructor(options?: {\n id?: number | string;\n name?: string;\n from: number;\n to: number;\n label?: string;\n showGrabbers?: boolean;\n draggable?: boolean;\n resizable?: boolean;\n min?: number;\n max?: number;\n style?: {\n plotBand?: SvgAttributes;\n grabbers?: SvgAttributes;\n };\n }) {\n this.id = options?.id;\n this.name = options?.name;\n this.from = options?.from;\n this.to = options?.to;\n this.label = options?.label;\n this.showGrabbers =\n options?.showGrabbers != null ? options.showGrabbers : true;\n this.draggable = options?.draggable != null ? options?.draggable : false;\n this.resizable = options?.resizable != null ? options?.resizable : true;\n this.min = options?.min;\n this.max = options?.max;\n this.style = options?.style;\n }\n}\n","import {SvgAttributes} from './svg-attributes';\n\nexport class PlotLine {\n id?: number | string;\n name?: string;\n value: number;\n label?: string;\n min?: number;\n max?: number;\n draggable?: boolean;\n style?: SvgAttributes;\n\n constructor(options?: {\n id?: number | string;\n name?: string;\n value: number;\n label?: string;\n min?: number;\n max?: number;\n draggable?: boolean;\n style?: SvgAttributes;\n }) {\n this.id = options?.id;\n this.name = options?.name;\n this.value = options?.value;\n this.label = options?.label;\n this.min = options?.min;\n this.max = options?.max;\n this.draggable = options?.draggable;\n this.style = options?.style;\n }\n}\n","/*\n * Public API Surface of chart\n */\n\n(window as any).__zone_symbol__BLACK_LISTED_EVENTS = ['mousemove'];\n\n\nexport * from './chart/chart.module';\nexport * from './chart/service/chart.service';\nexport * from './chart/chart/chart.component';\nexport * from './chart/model/public-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}