@devexperts/dxcharts-lite 1.0.2 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/README.md +2 -2
  2. package/dist/chart/animation/canvas-animation.js +134 -1
  3. package/dist/chart/animation/types/animation.js +43 -1
  4. package/dist/chart/animation/types/color-alpha-animation.d.ts +1 -1
  5. package/dist/chart/animation/types/color-alpha-animation.js +60 -1
  6. package/dist/chart/animation/types/color-transition-animation.d.ts +1 -1
  7. package/dist/chart/animation/types/color-transition-animation.js +86 -1
  8. package/dist/chart/animation/types/viewport-movement-animation.js +63 -1
  9. package/dist/chart/animation/viewport-model-animation.js +20 -1
  10. package/dist/chart/bootstrap.d.ts +51 -48
  11. package/dist/chart/bootstrap.js +449 -1
  12. package/dist/chart/canvas/canvas-bounds-container.d.ts +0 -5
  13. package/dist/chart/canvas/canvas-bounds-container.js +815 -1
  14. package/dist/chart/canvas/canvas-chart-html.js +16 -18
  15. package/dist/chart/canvas/chart-elements.d.ts +1 -4
  16. package/dist/chart/canvas/chart-elements.js +22 -1
  17. package/dist/chart/canvas/cursor.handler.js +122 -1
  18. package/dist/chart/canvas/layout-creator.js +34 -1
  19. package/dist/chart/canvas/y-axis-bounds.container.d.ts +2 -2
  20. package/dist/chart/canvas/y-axis-bounds.container.js +67 -1
  21. package/dist/chart/chart-container.js +1 -1
  22. package/dist/chart/chart.config.d.ts +4 -5
  23. package/dist/chart/chart.config.js +645 -1
  24. package/dist/chart/chart.d.ts +62 -0
  25. package/dist/chart/chart.js +106 -0
  26. package/dist/chart/components/chart/basic-scale.d.ts +2 -2
  27. package/dist/chart/components/chart/basic-scale.js +31 -1
  28. package/dist/chart/components/chart/candle-transformer.functions.js +15 -1
  29. package/dist/chart/components/chart/candle-width-calculator.functions.js +2 -1
  30. package/dist/chart/components/chart/candle.functions.js +44 -1
  31. package/dist/chart/components/chart/chart-area-pan.handler.d.ts +3 -3
  32. package/dist/chart/components/chart/chart-area-pan.handler.js +197 -1
  33. package/dist/chart/components/chart/chart-base.model.js +66 -1
  34. package/dist/chart/components/chart/chart.component.d.ts +7 -3
  35. package/dist/chart/components/chart/chart.component.js +408 -1
  36. package/dist/chart/components/chart/chart.model.d.ts +4 -11
  37. package/dist/chart/components/chart/chart.model.js +954 -1
  38. package/dist/chart/components/chart/data-series.high-low-provider.js +34 -1
  39. package/dist/chart/components/chart/fake-candles.js +97 -1
  40. package/dist/chart/components/chart/price.formatter.js +35 -1
  41. package/dist/chart/components/chart/secondary-chart-colors-pool.js +68 -1
  42. package/dist/chart/components/cross_tool/cross-tool.component.js +85 -1
  43. package/dist/chart/components/cross_tool/cross-tool.drawer.js +32 -1
  44. package/dist/chart/components/cross_tool/cross-tool.model.js +107 -1
  45. package/dist/chart/components/cross_tool/types/cross-and-labels.drawer.js +137 -1
  46. package/dist/chart/components/cross_tool/types/none.drawer.js +3 -1
  47. package/dist/chart/components/dran-n-drop_helper/drag-n-drop-x.component.js +28 -1
  48. package/dist/chart/components/dran-n-drop_helper/drag-n-drop-y.component.js +24 -1
  49. package/dist/chart/components/dran-n-drop_helper/drag-n-drop.component.js +53 -1
  50. package/dist/chart/components/dynamic-objects/dynamic-objects.component.d.ts +13 -0
  51. package/dist/chart/components/dynamic-objects/dynamic-objects.component.js +20 -0
  52. package/dist/chart/components/dynamic-objects/dynamic-objects.drawer.d.ts +18 -0
  53. package/dist/chart/components/dynamic-objects/dynamic-objects.drawer.js +23 -0
  54. package/dist/chart/components/dynamic-objects/dynamic-objects.model.d.ts +63 -0
  55. package/dist/chart/components/dynamic-objects/dynamic-objects.model.js +136 -0
  56. package/dist/chart/components/events/events-hit-test.drawer.js +63 -1
  57. package/dist/chart/components/events/events.component.js +61 -1
  58. package/dist/chart/components/events/events.drawer.js +195 -1
  59. package/dist/chart/components/events/events.model.js +69 -1
  60. package/dist/chart/components/grid/grid.component.d.ts +2 -2
  61. package/dist/chart/components/grid/grid.component.js +31 -1
  62. package/dist/chart/components/grid/grid.drawer.d.ts +4 -3
  63. package/dist/chart/components/grid/grid.drawer.js +106 -1
  64. package/dist/chart/components/high_low/high-low.component.js +12 -1
  65. package/dist/chart/components/high_low/high-low.drawer.js +126 -1
  66. package/dist/chart/components/highlights/highlights.component.js +46 -1
  67. package/dist/chart/components/highlights/highlights.drawer.js +154 -1
  68. package/dist/chart/components/highlights/highlights.model.js +75 -1
  69. package/dist/chart/components/labels_generator/numeric-axis-labels.generator.d.ts +1 -1
  70. package/dist/chart/components/labels_generator/numeric-axis-labels.generator.js +199 -1
  71. package/dist/chart/components/navigation_map/navigation-map-move.handler.d.ts +2 -2
  72. package/dist/chart/components/navigation_map/navigation-map-move.handler.js +108 -1
  73. package/dist/chart/components/navigation_map/navigation-map.component.js +112 -1
  74. package/dist/chart/components/navigation_map/navigation-map.drawer.js +244 -1
  75. package/dist/chart/components/navigation_map/navigation-map.model.js +33 -2
  76. package/dist/chart/components/pan/chart-pan.component.d.ts +2 -2
  77. package/dist/chart/components/pan/chart-pan.component.js +51 -1
  78. package/dist/chart/components/pane/extent/y-extent-component.d.ts +12 -18
  79. package/dist/chart/components/pane/extent/y-extent-component.js +120 -1
  80. package/dist/chart/components/pane/pane-hit-test.controller.d.ts +2 -2
  81. package/dist/chart/components/pane/pane-hit-test.controller.js +55 -1
  82. package/dist/chart/components/pane/pane-manager.component.d.ts +12 -6
  83. package/dist/chart/components/pane/pane-manager.component.js +149 -1
  84. package/dist/chart/components/pane/pane.component.d.ts +16 -32
  85. package/dist/chart/components/pane/pane.component.js +278 -1
  86. package/dist/chart/components/resizer/bar-resizer.component.js +139 -1
  87. package/dist/chart/components/resizer/bar-resizer.drawer.js +46 -1
  88. package/dist/chart/components/snapshot/snapshot.component.js +48 -1
  89. package/dist/chart/components/volumes/separate-volumes.component.d.ts +6 -10
  90. package/dist/chart/components/volumes/separate-volumes.component.js +63 -1
  91. package/dist/chart/components/volumes/volume-color-resolvers.functions.js +18 -1
  92. package/dist/chart/components/volumes/volumes.component.d.ts +6 -7
  93. package/dist/chart/components/volumes/volumes.component.js +94 -1
  94. package/dist/chart/components/volumes/volumes.drawer.d.ts +5 -12
  95. package/dist/chart/components/volumes/volumes.drawer.js +140 -1
  96. package/dist/chart/components/volumes/volumes.formatter.js +31 -1
  97. package/dist/chart/components/volumes/volumes.model.d.ts +2 -2
  98. package/dist/chart/components/volumes/volumes.model.js +43 -1
  99. package/dist/chart/components/watermark/water-mark.component.js +103 -1
  100. package/dist/chart/components/watermark/water-mark.drawer.js +187 -1
  101. package/dist/chart/components/x_axis/numeric-x-axis-labels.generator.js +27 -1
  102. package/dist/chart/components/x_axis/time/parser/time-formats-matchers.functions.js +187 -1
  103. package/dist/chart/components/x_axis/time/parser/time-formats-parser.functions.js +76 -1
  104. package/dist/chart/components/x_axis/time/parser/time-formats-validators.functions.js +79 -1
  105. package/dist/chart/components/x_axis/time/parser/time-formats.model.js +14 -1
  106. package/dist/chart/components/x_axis/time/x-axis-weights.functions.d.ts +1 -1
  107. package/dist/chart/components/x_axis/time/x-axis-weights.functions.js +143 -1
  108. package/dist/chart/components/x_axis/time/x-axis-weights.generator.js +73 -1
  109. package/dist/chart/components/x_axis/x-axis-draw.functions.js +49 -1
  110. package/dist/chart/components/x_axis/x-axis-labels.drawer.js +70 -1
  111. package/dist/chart/components/x_axis/x-axis-labels.generator.d.ts +2 -2
  112. package/dist/chart/components/x_axis/x-axis-labels.generator.js +332 -1
  113. package/dist/chart/components/x_axis/x-axis-labels.model.js +35 -1
  114. package/dist/chart/components/x_axis/x-axis-scale.handler.d.ts +2 -2
  115. package/dist/chart/components/x_axis/x-axis-scale.handler.js +60 -1
  116. package/dist/chart/components/x_axis/x-axis-time-labels.drawer.js +82 -1
  117. package/dist/chart/components/x_axis/x-axis.component.d.ts +2 -2
  118. package/dist/chart/components/x_axis/x-axis.component.js +119 -1
  119. package/dist/chart/components/y_axis/label-color.functions.js +53 -1
  120. package/dist/chart/components/y_axis/numeric-y-axis-labels.generator.d.ts +4 -4
  121. package/dist/chart/components/y_axis/numeric-y-axis-labels.generator.js +33 -1
  122. package/dist/chart/components/y_axis/price_labels/data-series-y-axis-labels.provider.d.ts +3 -3
  123. package/dist/chart/components/y_axis/price_labels/data-series-y-axis-labels.provider.js +67 -1
  124. package/dist/chart/components/y_axis/price_labels/labels-positions-calculator.js +56 -1
  125. package/dist/chart/components/y_axis/price_labels/last-candle-labels.provider.d.ts +4 -3
  126. package/dist/chart/components/y_axis/price_labels/last-candle-labels.provider.js +96 -1
  127. package/dist/chart/components/y_axis/price_labels/price-label.drawer.d.ts +2 -2
  128. package/dist/chart/components/y_axis/price_labels/price-label.drawer.js +119 -1
  129. package/dist/chart/components/y_axis/price_labels/y-axis-labels.model.d.ts +9 -8
  130. package/dist/chart/components/y_axis/price_labels/y-axis-labels.model.js +201 -1
  131. package/dist/chart/components/y_axis/price_labels/y-axis-price-labels.drawer.d.ts +6 -7
  132. package/dist/chart/components/y_axis/price_labels/y-axis-price-labels.drawer.js +58 -1
  133. package/dist/chart/components/y_axis/y-axis-base-labels.model.d.ts +6 -4
  134. package/dist/chart/components/y_axis/y-axis-base-labels.model.js +47 -1
  135. package/dist/chart/components/y_axis/y-axis-labels.drawer.d.ts +4 -4
  136. package/dist/chart/components/y_axis/y-axis-labels.drawer.js +161 -1
  137. package/dist/chart/components/y_axis/y-axis-scale.handler.d.ts +2 -2
  138. package/dist/chart/components/y_axis/y-axis-scale.handler.js +72 -1
  139. package/dist/chart/components/y_axis/y-axis.component.d.ts +32 -41
  140. package/dist/chart/components/y_axis/y-axis.component.js +220 -1
  141. package/dist/chart/components/y_axis/y-axis.drawer.d.ts +9 -12
  142. package/dist/chart/components/y_axis/y-axis.drawer.js +96 -1
  143. package/dist/chart/components/y_axis/y-axis.model.d.ts +10 -17
  144. package/dist/chart/components/y_axis/y-axis.model.js +34 -1
  145. package/dist/chart/drawers/chart-background.drawer.js +69 -1
  146. package/dist/chart/drawers/chart-type-drawers/area.drawer.js +69 -1
  147. package/dist/chart/drawers/chart-type-drawers/bar.drawer.js +57 -1
  148. package/dist/chart/drawers/chart-type-drawers/baseline.drawer.js +84 -1
  149. package/dist/chart/drawers/chart-type-drawers/candle.drawer.js +162 -1
  150. package/dist/chart/drawers/chart-type-drawers/histogram.drawer.js +57 -1
  151. package/dist/chart/drawers/chart-type-drawers/line.drawer.js +38 -1
  152. package/dist/chart/drawers/chart-type-drawers/scatter-plot.drawer.js +19 -1
  153. package/dist/chart/drawers/clear-canvas.drawer.js +14 -1
  154. package/dist/chart/drawers/composite.drawer.js +67 -1
  155. package/dist/chart/drawers/data-series-drawers/candle-series-wrapper.js +50 -1
  156. package/dist/chart/drawers/data-series-drawers/color-candle.drawer.js +35 -1
  157. package/dist/chart/drawers/data-series-drawers/data-series-drawers.utils.js +16 -1
  158. package/dist/chart/drawers/data-series-drawers/difference-cloud.drawer.js +106 -1
  159. package/dist/chart/drawers/data-series-drawers/histogram.drawer.js +23 -1
  160. package/dist/chart/drawers/data-series-drawers/linear.drawer.js +19 -1
  161. package/dist/chart/drawers/data-series-drawers/points.drawer.js +19 -1
  162. package/dist/chart/drawers/data-series-drawers/rectangular-tool.drawer.js +7 -1
  163. package/dist/chart/drawers/data-series-drawers/text.drawer.js +25 -1
  164. package/dist/chart/drawers/data-series-drawers/trend-histogram.drawer.js +35 -1
  165. package/dist/chart/drawers/data-series-drawers/triangle.drawer.js +22 -1
  166. package/dist/chart/drawers/data-series.drawer.d.ts +5 -7
  167. package/dist/chart/drawers/data-series.drawer.js +56 -1
  168. package/dist/chart/drawers/drawing-manager.d.ts +1 -1
  169. package/dist/chart/drawers/drawing-manager.js +177 -1
  170. package/dist/chart/drawers/ht-data-series.drawer.js +37 -1
  171. package/dist/chart/events/event-bus.js +73 -1
  172. package/dist/chart/events/events.js +3 -1
  173. package/dist/chart/inputhandlers/candle-tap.handler.js +46 -1
  174. package/dist/chart/inputhandlers/chart-resize.handler.js +98 -1
  175. package/dist/chart/inputhandlers/cross-event-producer.component.js +67 -1
  176. package/dist/chart/inputhandlers/hover-producer.component.d.ts +2 -2
  177. package/dist/chart/inputhandlers/hover-producer.component.js +228 -1
  178. package/dist/chart/inputhandlers/main-canvas-touch.handler.d.ts +2 -2
  179. package/dist/chart/inputhandlers/main-canvas-touch.handler.js +80 -1
  180. package/dist/chart/inputlisteners/canvas-input-listener.component.js +629 -1
  181. package/dist/chart/model/baseline.model.js +88 -1
  182. package/dist/chart/model/bounds.model.js +1 -1
  183. package/dist/chart/model/candle-hover.js +70 -1
  184. package/dist/chart/model/candle-series-high-low.provider.js +45 -1
  185. package/dist/chart/model/candle-series.model.d.ts +3 -3
  186. package/dist/chart/model/candle-series.model.js +245 -1
  187. package/dist/chart/model/candle.model.js +69 -1
  188. package/dist/chart/model/canvas.model.js +228 -1
  189. package/dist/chart/model/chart-base-element.js +129 -1
  190. package/dist/chart/model/compare-series-hover.js +25 -1
  191. package/dist/chart/model/data-series-view.d.ts +5 -5
  192. package/dist/chart/model/data-series-view.js +111 -1
  193. package/dist/chart/model/data-series.config.js +14 -1
  194. package/dist/chart/model/data-series.model.d.ts +4 -4
  195. package/dist/chart/model/data-series.model.js +281 -1
  196. package/dist/chart/model/date-time.formatter.js +151 -1
  197. package/dist/chart/model/hit-test-canvas.model.d.ts +1 -1
  198. package/dist/chart/model/hit-test-canvas.model.js +256 -1
  199. package/dist/chart/model/main-candle-series.model.d.ts +1 -1
  200. package/dist/chart/model/main-candle-series.model.js +29 -1
  201. package/dist/chart/model/scale.model.d.ts +3 -2
  202. package/dist/chart/model/scale.model.js +316 -1
  203. package/dist/chart/model/scaling/auto-scale.model.d.ts +2 -4
  204. package/dist/chart/model/scaling/auto-scale.model.js +91 -1
  205. package/dist/chart/model/scaling/constrait.functions.js +61 -1
  206. package/dist/chart/model/scaling/lock-ratio.model.js +17 -1
  207. package/dist/chart/model/scaling/move-chart.functions.js +22 -1
  208. package/dist/chart/model/scaling/viewport.model.d.ts +2 -2
  209. package/dist/chart/model/scaling/viewport.model.js +279 -1
  210. package/dist/chart/model/scaling/x-zooming.functions.js +35 -1
  211. package/dist/chart/model/time-zone.model.js +109 -1
  212. package/dist/chart/model/visual-candle.js +134 -1
  213. package/dist/chart/utils/__tests__/array.utils.test.js +135 -1
  214. package/dist/chart/utils/__tests__/math.utils.test.js +14 -1
  215. package/dist/chart/utils/__tests__/object.utils.test.js +11 -1
  216. package/dist/chart/utils/__tests__/priceIncrementsUtils.test.js +29 -1
  217. package/dist/chart/utils/array.utils.d.ts +1 -1
  218. package/dist/chart/utils/array.utils.js +269 -1
  219. package/dist/chart/utils/auto-period-detector.utils.js +39 -1
  220. package/dist/chart/utils/candles-generator-ts.utils.js +20 -1
  221. package/dist/chart/utils/candles-generator.utils.js +161 -1
  222. package/dist/chart/utils/candles.utils.js +42 -1
  223. package/dist/chart/utils/canvas/canvas-drawing-functions.utils.js +144 -1
  224. package/dist/chart/utils/canvas/canvas-font-measure-tool.utils.js +51 -1
  225. package/dist/chart/utils/canvas/canvas-text-functions.utils.js +156 -1
  226. package/dist/chart/utils/color.utils.js +31 -1
  227. package/dist/chart/utils/device/browser.utils.js +10 -1
  228. package/dist/chart/utils/device/device-detector.utils.js +24 -1
  229. package/dist/chart/utils/device/device-pixel-ratio.utils.js +21 -1
  230. package/dist/chart/utils/device/touchpad.utils.js +91 -1
  231. package/dist/chart/utils/dom.utils.js +15 -1
  232. package/dist/chart/utils/function.utils.js +16 -1
  233. package/dist/chart/utils/linkedList.utils.d.ts +28 -0
  234. package/dist/chart/utils/linkedList.utils.js +138 -0
  235. package/dist/chart/utils/math.utils.js +115 -1
  236. package/dist/chart/utils/merge.utils.js +56 -1
  237. package/dist/chart/utils/object.utils.js +43 -1
  238. package/dist/chart/utils/performance/animation-frame-cache.utils.js +77 -0
  239. package/dist/chart/utils/{perfomance → performance}/debounce.utils.js +7 -1
  240. package/dist/chart/utils/performance/memoize.utils.js +74 -0
  241. package/dist/chart/utils/performance/request-animation-frame-throttle.utils.js +43 -0
  242. package/dist/chart/utils/performance/throttle.utils.js +26 -0
  243. package/dist/chart/utils/price-increments.utils.d.ts +1 -0
  244. package/dist/chart/utils/price-increments.utils.js +127 -1
  245. package/dist/chart/utils/uuid.utils.js +4 -1
  246. package/dist/dxchart.min.js +9 -12
  247. package/dist/index.d.ts +3 -3
  248. package/dist/index.js +20 -1
  249. package/package.json +4 -4
  250. package/dist/chart/utils/perfomance/animation-frame-cache.utils.js +0 -6
  251. package/dist/chart/utils/perfomance/memoize.utils.js +0 -6
  252. package/dist/chart/utils/perfomance/request-animation-frame-throttle.utils.js +0 -6
  253. package/dist/chart/utils/perfomance/throttle.utils.js +0 -6
  254. /package/dist/chart/utils/{perfomance → performance}/animation-frame-cache.utils.d.ts +0 -0
  255. /package/dist/chart/utils/{perfomance → performance}/debounce.utils.d.ts +0 -0
  256. /package/dist/chart/utils/{perfomance → performance}/memoize.utils.d.ts +0 -0
  257. /package/dist/chart/utils/{perfomance → performance}/request-animation-frame-throttle.utils.d.ts +0 -0
  258. /package/dist/chart/utils/{perfomance → performance}/throttle.utils.d.ts +0 -0
@@ -3,4 +3,22 @@
3
3
  * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
4
4
  * If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
5
  */
6
- import{setLineWidth as s}from"../data-series.drawer";import{buildLinePath as l}from"./data-series-drawers.utils";export class LinearDrawer{constructor(){}draw(i,e,r,n){e.forEach((a,h)=>{var o;const t=r.getPaintConfig(h);s(i,t.lineWidth,r,n,t.hoveredLineWidth),i.strokeStyle=(o=n.singleColor)!==null&&o!==void 0?o:t.color,this.drawLinePath(i,a,r.view)})}drawLinePath(i,e,r){i.beginPath(),l(e,i,r),i.stroke()}}
6
+ import { setLineWidth } from '../data-series.drawer';
7
+ import { buildLinePath } from './data-series-drawers.utils';
8
+ export class LinearDrawer {
9
+ constructor() { }
10
+ draw(ctx, allPoints, model, drawerConfig) {
11
+ allPoints.forEach((points, idx) => {
12
+ var _a;
13
+ const config = model.getPaintConfig(idx);
14
+ setLineWidth(ctx, config.lineWidth, model, drawerConfig, config.hoveredLineWidth);
15
+ ctx.strokeStyle = (_a = drawerConfig.singleColor) !== null && _a !== void 0 ? _a : config.color;
16
+ this.drawLinePath(ctx, points, model.view);
17
+ });
18
+ }
19
+ drawLinePath(ctx, points, view) {
20
+ ctx.beginPath();
21
+ buildLinePath(points, ctx, view);
22
+ ctx.stroke();
23
+ }
24
+ }
@@ -3,4 +3,22 @@
3
3
  * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
4
4
  * If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
5
  */
6
- export class PointsDrawer{constructor(){}draw(o,a,i,l){a.forEach((e,s)=>{var n;const t=i.getPaintConfig(s),c=t.lineWidth;o.fillStyle=(n=l.singleColor)!==null&&n!==void 0?n:t.color,o.lineWidth=1,e.forEach(r=>{o.beginPath();const f=i.view.toX(r.centerUnit),h=i.view.toY(r.close);o.arc(f,h,c,0,Math.PI*2),o.fill()})})}}
6
+ export class PointsDrawer {
7
+ constructor() { }
8
+ draw(ctx, allPoints, model, drawerConfig) {
9
+ allPoints.forEach((points, idx) => {
10
+ var _a;
11
+ const config = model.getPaintConfig(idx);
12
+ const radius = config.lineWidth;
13
+ ctx.fillStyle = (_a = drawerConfig.singleColor) !== null && _a !== void 0 ? _a : config.color;
14
+ ctx.lineWidth = 1;
15
+ points.forEach(p => {
16
+ ctx.beginPath();
17
+ const x = model.view.toX(p.centerUnit);
18
+ const y = model.view.toY(p.close);
19
+ ctx.arc(x, y, radius, 0, Math.PI * 2);
20
+ ctx.fill();
21
+ });
22
+ });
23
+ }
24
+ }
@@ -3,4 +3,10 @@
3
3
  * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
4
4
  * If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
5
  */
6
- export class RectangularToolDrawer{draw(){}}
6
+ export class RectangularToolDrawer {
7
+ // private lastDrawnTimelineX: number = -1;
8
+ // private regularZoneOpacity: number = 0.3;
9
+ // private lastZoneOpacity: number = 0.4;
10
+ // constructor(private chartModel: ChartModel, private chartBoundsContainer: CanvasBoundsContainer) {}
11
+ draw() { }
12
+ }
@@ -3,4 +3,28 @@
3
3
  * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
4
4
  * If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
5
  */
6
- import{calculateSymbolHeight as y,calculateTextWidth as u}from"../../utils/canvas/canvas-font-measure-tool.utils";export class TextDrawer{constructor(t){this.config=t}draw(t,r,o,l){t.save(),r.forEach((a,f)=>{var e;const s=o.getPaintConfig(f);t.fillStyle=(e=l.singleColor)!==null&&e!==void 0?e:s.color;const i=s.lineWidth+"px "+this.config.components.yAxis.fontFamily;t.font=i,a.forEach(n=>{const c=o.getTextForPoint(n),g=u(c,t,i),h=y(i,t),v=o.view.toX(n.centerUnit)-g/2,x=o.view.toY(n.close)+h;t.fillText(c,v,x)})}),t.restore()}}
6
+ import { calculateSymbolHeight, calculateTextWidth } from '../../utils/canvas/canvas-font-measure-tool.utils';
7
+ export class TextDrawer {
8
+ constructor(config) {
9
+ this.config = config;
10
+ }
11
+ draw(ctx, allPoints, model, drawerConfig) {
12
+ ctx.save();
13
+ allPoints.forEach((points, idx) => {
14
+ var _a;
15
+ const config = model.getPaintConfig(idx);
16
+ ctx.fillStyle = (_a = drawerConfig.singleColor) !== null && _a !== void 0 ? _a : config.color;
17
+ const font = config.lineWidth + 'px ' + this.config.components.yAxis.fontFamily;
18
+ ctx.font = font;
19
+ points.forEach(p => {
20
+ const text = model.getTextForPoint(p);
21
+ const textWidth = calculateTextWidth(text, ctx, font);
22
+ const textHeight = calculateSymbolHeight(font, ctx);
23
+ const x = model.view.toX(p.centerUnit) - textWidth / 2;
24
+ const y = model.view.toY(p.close) + textHeight;
25
+ ctx.fillText(text, x, y);
26
+ });
27
+ });
28
+ ctx.restore();
29
+ }
30
+ }
@@ -3,4 +3,38 @@
3
3
  * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
4
4
  * If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
5
  */
6
- import{flat as v}from"../../utils/array.utils";import{floor as c}from"../../utils/math.utils";export class TrendHistogramDrawer{constructor(){}draw(o,e,s){const f=s.view.toY(0),h=v(e),i=[[],[]];h.forEach((n,r,t)=>{i[n.close<this.previousValue(t,r)?1:0].push(n)}),i.forEach((n,r)=>{const t=s.getPaintConfig(r);o.strokeStyle=r===0?t.color:t.aditionalColor||"#FF00FF",o.lineWidth=t.lineWidth,o.beginPath(),n.forEach(l=>{const a=s.view.toX(l.centerUnit),u=s.view.toY(l.close);o.moveTo(a,c(f)),o.lineTo(a,c(u))}),o.stroke()})}previousValue(o,e){do e--;while(e>=0&&!isFinite(o[e]&&o[e].close));return o[e]?o[e].close:Number.NaN}}
6
+ import { flat } from '../../utils/array.utils';
7
+ import { floor } from '../../utils/math.utils';
8
+ export class TrendHistogramDrawer {
9
+ constructor() { }
10
+ draw(ctx, allPoints, model) {
11
+ const zero = model.view.toY(0);
12
+ // here I do flat, thinks that there is no more that 1 series
13
+ const allPointsFlat = flat(allPoints);
14
+ const items = [[], []];
15
+ allPointsFlat.forEach((item, idx, array) => {
16
+ items[item.close < this.previousValue(array, idx) ? 1 : 0].push(item);
17
+ });
18
+ items.forEach((points, idx) => {
19
+ // odd width is crucial to draw histogram without antialiasing
20
+ const config = model.getPaintConfig(idx);
21
+ ctx.strokeStyle = idx === 0 ? config.color : config.aditionalColor || '#FF00FF';
22
+ ctx.lineWidth = config.lineWidth;
23
+ ctx.beginPath();
24
+ points.forEach(p => {
25
+ const x = model.view.toX(p.centerUnit);
26
+ const y = model.view.toY(p.close);
27
+ ctx.moveTo(x, floor(zero));
28
+ ctx.lineTo(x, floor(y));
29
+ });
30
+ ctx.stroke();
31
+ });
32
+ }
33
+ //weird but works
34
+ previousValue(arr, idx) {
35
+ do {
36
+ idx--;
37
+ } while (idx >= 0 && !isFinite(arr[idx] && arr[idx].close));
38
+ return arr[idx] ? arr[idx].close : Number.NaN;
39
+ }
40
+ }
@@ -3,4 +3,25 @@
3
3
  * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
4
4
  * If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
5
  */
6
- export class TriangleDrawer{constructor(){}draw(o,e,n,l){e.forEach((s,c)=>{var i;const r=n.getPaintConfig(c);o.fillStyle=(i=l.singleColor)!==null&&i!==void 0?i:r.color,s.forEach(a=>{const t=n.view.toX(a.centerUnit),f=n.view.toY(a.close);this.drawCandleTriangle(o,t,f,r.lineWidth)})})}drawCandleTriangle(o,e,n,l){o.beginPath(),o.moveTo(e-l/2,n),o.lineTo(e,n-l),o.lineTo(e+l/2,n),o.fill()}}
6
+ export class TriangleDrawer {
7
+ constructor() { }
8
+ draw(ctx, allPoints, model, drawerConfig) {
9
+ allPoints.forEach((points, idx) => {
10
+ var _a;
11
+ const config = model.getPaintConfig(idx);
12
+ ctx.fillStyle = (_a = drawerConfig.singleColor) !== null && _a !== void 0 ? _a : config.color;
13
+ points.forEach(p => {
14
+ const x = model.view.toX(p.centerUnit);
15
+ const y = model.view.toY(p.close);
16
+ this.drawCandleTriangle(ctx, x, y, config.lineWidth);
17
+ });
18
+ });
19
+ }
20
+ drawCandleTriangle(ctx, x, y, triangleWidth) {
21
+ ctx.beginPath();
22
+ ctx.moveTo(x - triangleWidth / 2, y);
23
+ ctx.lineTo(x, y - triangleWidth);
24
+ ctx.lineTo(x + triangleWidth / 2, y);
25
+ ctx.fill();
26
+ }
27
+ }
@@ -3,11 +3,11 @@
3
3
  * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
4
4
  * If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
5
  */
6
+ import { DynamicModelDrawer } from '../components/dynamic-objects/dynamic-objects.drawer';
6
7
  import { PaneManager } from '../components/pane/pane-manager.component';
7
8
  import { Bounds } from '../model/bounds.model';
8
- import { DataSeriesModel, VisualSeriesPoint } from '../model/data-series.model';
9
9
  import { CanvasModel } from '../model/canvas.model';
10
- import { Drawer } from './drawing-manager';
10
+ import { DataSeriesModel, VisualSeriesPoint } from '../model/data-series.model';
11
11
  export interface ChartDrawerConfig {
12
12
  singleColor?: string;
13
13
  forceBold?: number;
@@ -26,14 +26,12 @@ export declare const transformToTwoDimension: (points: VisualSeriesPoint[] | Vis
26
26
  *
27
27
  * (may support multiple layers in future)
28
28
  */
29
- export declare class DataSeriesDrawer implements Drawer {
29
+ export declare class DataSeriesDrawer implements DynamicModelDrawer<DataSeriesModel> {
30
30
  private paneManager;
31
- private canvasModel;
32
31
  private readonly seriesDrawers;
33
- constructor(paneManager: PaneManager, canvasModel: CanvasModel, seriesDrawers: Record<string, SeriesDrawer>);
34
- draw(): void;
32
+ constructor(paneManager: PaneManager, seriesDrawers: Record<string, SeriesDrawer>);
33
+ draw(canvasModel: CanvasModel, model: DataSeriesModel, paneUUID?: string): void;
35
34
  drawSeries(ctx: CanvasRenderingContext2D, series: DataSeriesModel): void;
36
- getCanvasIds(): Array<string>;
37
35
  }
38
36
  export declare const clipToBounds: (ctx: CanvasRenderingContext2D, bounds: Bounds) => void;
39
37
  export declare const setLineWidth: (ctx: CanvasRenderingContext2D, lineWidth: number, dataSeries: DataSeriesModel, drawerConfig: ChartDrawerConfig, seriesSelectedWidth?: number) => void;
@@ -3,4 +3,59 @@
3
3
  * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
4
4
  * If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
5
  */
6
- import{flatMap as i}from"../utils/array.utils";export const transformToTwoDimension=r=>Array.isArray(r[0])?r:[r];export class DataSeriesDrawer{constructor(e,t,a){this.paneManager=e,this.canvasModel=t,this.seriesDrawers=a}draw(){const e=this.canvasModel.ctx;i(Object.values(this.paneManager.paneComponents),t=>t.yExtentComponents).forEach(t=>{e.save(),clipToBounds(e,t.getBounds()),t.dataSeries.forEach(a=>this.drawSeries(e,a)),e.restore()})}drawSeries(e,t){if(t.config.visible){const a=t.config.type,s=this.seriesDrawers[a];if(s){const o=t.getSeriesInViewport(t.scaleModel.xStart-1,t.scaleModel.xEnd+1);o&&o.length>=1&&s.draw(e,o,t,{})}else console.error(`Data series drawer with type ${a} isn't registered!`)}}getCanvasIds(){return[this.canvasModel.canvasId]}}export const clipToBounds=(r,e)=>{r.beginPath(),r.rect(e.x,e.y,e.width,e.height),r.clip(),r.closePath()},setLineWidth=(r,e,t,a,s=e)=>{a.forceBold?r.lineWidth=a.forceBold:t.hovered?r.lineWidth=s:r.lineWidth=e};
6
+ export const transformToTwoDimension = (points) => (Array.isArray(points[0]) ? points : [points]);
7
+ /**
8
+ * Basic data series drawer.
9
+ * Have multiple paint tools: linear, histogram, points, text above/below candle and others.
10
+ *
11
+ * (may support multiple layers in future)
12
+ */
13
+ export class DataSeriesDrawer {
14
+ constructor(paneManager, seriesDrawers) {
15
+ this.paneManager = paneManager;
16
+ this.seriesDrawers = seriesDrawers;
17
+ }
18
+ draw(canvasModel, model, paneUUID) {
19
+ const ctx = canvasModel.ctx;
20
+ const pane = paneUUID && this.paneManager.panes[paneUUID];
21
+ if (model) {
22
+ ctx.save();
23
+ pane && clipToBounds(ctx, pane.getBounds());
24
+ this.drawSeries(ctx, model);
25
+ ctx.restore();
26
+ }
27
+ }
28
+ drawSeries(ctx, series) {
29
+ if (series.config.visible) {
30
+ const paintTool = series.config.type;
31
+ const drawer = this.seriesDrawers[paintTool];
32
+ if (drawer) {
33
+ const viewportSeries = series.getSeriesInViewport(series.scale.xStart - 1, series.scale.xEnd + 1);
34
+ if (viewportSeries && viewportSeries.length >= 1) {
35
+ // +- 1 to correctly draw points which are partly inside bounds
36
+ drawer.draw(ctx, viewportSeries, series, {});
37
+ }
38
+ }
39
+ else {
40
+ console.error(`Data series drawer with type ${paintTool} isn't registered!`);
41
+ }
42
+ }
43
+ }
44
+ }
45
+ export const clipToBounds = (ctx, bounds) => {
46
+ ctx.beginPath();
47
+ ctx.rect(bounds.x, bounds.y, bounds.width, bounds.height);
48
+ ctx.clip();
49
+ ctx.closePath();
50
+ };
51
+ export const setLineWidth = (ctx, lineWidth, dataSeries, drawerConfig, seriesSelectedWidth = lineWidth) => {
52
+ if (drawerConfig.forceBold) {
53
+ ctx.lineWidth = drawerConfig.forceBold;
54
+ }
55
+ else if (dataSeries.hovered) {
56
+ ctx.lineWidth = seriesSelectedWidth;
57
+ }
58
+ else {
59
+ ctx.lineWidth = lineWidth;
60
+ }
61
+ };
@@ -6,7 +6,7 @@
6
6
  import EventBus from '../events/event-bus';
7
7
  import { ChartResizeHandler } from '../inputhandlers/chart-resize.handler';
8
8
  export declare const HIT_TEST_PREFIX = "HIT_TEST_";
9
- declare const drawerTypes: readonly ["MAIN_BACKGROUND", "MAIN_CLEAR", "HIT_TEST_CLEAR", "YAXIS_CLEAR", "SERIES_CLEAR", "OVER_SERIES_CLEAR", "HIT_TEST_DRAWINGS", "GRID", "VOLUMES", "UNDERLAY_VOLUMES_AREA", "X_AXIS", "Y_AXIS", "HIGH_LOW", "DRAWINGS", "DATA_SERIES", "N_MAP_CHART", "PL_CHART", "WATERMARK", "EMPTY_CHART", "OFFLINE_CHART", "LABELS", "EVENTS", "HIT_TEST_EVENTS", "ZERO_LINE", "PL_ZERO_LINE_BACKGROUND", "CROSS_TOOL"];
9
+ declare const drawerTypes: readonly ["MAIN_BACKGROUND", "MAIN_CLEAR", "HIT_TEST_CLEAR", "YAXIS_CLEAR", "SERIES_CLEAR", "OVER_SERIES_CLEAR", "HIT_TEST_DRAWINGS", "GRID", "UNDERLAY_VOLUMES_AREA", "X_AXIS", "Y_AXIS", "HIGH_LOW", "DYNAMIC_OBJECTS", "N_MAP_CHART", "PL_CHART", "WATERMARK", "EMPTY_CHART", "OFFLINE_CHART", "LABELS", "EVENTS", "HIT_TEST_EVENTS", "ZERO_LINE", "PL_ZERO_LINE_BACKGROUND", "CROSS_TOOL"];
10
10
  export type DrawerType = typeof drawerTypes[number];
11
11
  /**
12
12
  * Manages the drawing process.
@@ -3,4 +3,180 @@
3
3
  * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
4
4
  * If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
5
  */
6
- import{EVENT_DRAW as h}from"../events/events";import{MIN_SUPPORTED_CANVAS_SIZE as t}from"../model/canvas.model";import{arrayIntersect as w,reorderArray as o}from"../utils/array.utils";import{animationFrameThrottled as E}from"../utils/perfomance/request-animation-frame-throttle.utils";import{uuid as d}from"../utils/uuid.utils";export const HIT_TEST_PREFIX="HIT_TEST_";const I=["MAIN_BACKGROUND","MAIN_CLEAR","HIT_TEST_CLEAR","YAXIS_CLEAR","SERIES_CLEAR","OVER_SERIES_CLEAR","HIT_TEST_DRAWINGS","GRID","VOLUMES","UNDERLAY_VOLUMES_AREA","X_AXIS","Y_AXIS","HIGH_LOW","DRAWINGS","DATA_SERIES","N_MAP_CHART","PL_CHART","WATERMARK","EMPTY_CHART","OFFLINE_CHART","LABELS","EVENTS","HIT_TEST_EVENTS","ZERO_LINE","PL_ZERO_LINE_BACKGROUND","CROSS_TOOL"];export class DrawingManager{constructor(i,r){this.chartResizeHandler=r,this.drawingOrder=[],this.drawersMap={},this.canvasIdsList=[],this.animFrameId=`draw_${d()}`,this.drawHitTestCanvas=()=>{this.drawingOrder.forEach(e=>{e.indexOf(HIT_TEST_PREFIX)!==-1&&this.drawersMap[e].draw()})},i.on(h,e=>{r.wasResized()&&(this.canvasIdsList&&(e&&e.length!==0?this.canvasIdsList=this.canvasIdsList.concat(e):this.canvasIdsList=void 0),E(this.animFrameId,()=>{this.forceDraw(this.canvasIdsList),this.canvasIdsList=[],this.drawHitTestCanvas()}))})}redrawCanvasesImmediate(){this.chartResizeHandler.fireUpdates(),this.forceDraw()}drawLastBar(){this.drawingOrder.forEach(i=>{if(i.indexOf(HIT_TEST_PREFIX)===-1){const r=this.drawersMap[i];r.drawLastBar&&r.drawLastBar()}})}forceDraw(i){this.isDrawable()&&this.drawingOrder.forEach(r=>{if(r.indexOf(HIT_TEST_PREFIX)===-1){const e=this.drawersMap[r];if(!i||i.length===0){e.draw();return}w(i,e.getCanvasIds()).length&&e.draw()}})}isDrawable(){var i,r,e,s;return((r=(i=this.chartResizeHandler.previousBCR)===null||i===void 0?void 0:i.height)!==null&&r!==void 0?r:0)>t.width&&((s=(e=this.chartResizeHandler.previousBCR)===null||e===void 0?void 0:e.width)!==null&&s!==void 0?s:0)>t.height}drawHitTestOnly(){this.drawHitTestCanvas()}addDrawer(i,r=d()){this.drawingOrder.indexOf(r)===-1&&this.drawingOrder.push(r),this.drawersMap[r]=i}addDrawerAfter(i,r,e){this.addDrawer(i,r);const s=this.drawingOrder.indexOf(r);this.drawingOrder.splice(s,1);const a=this.drawingOrder.indexOf(e);this.drawingOrder.splice(a+1,0,r),this.reorderDrawers(this.drawingOrder)}addDrawerBefore(i,r,e){this.addDrawer(i,r);const s=this.drawingOrder.indexOf(e);if(s!==-1){const a=this.drawingOrder.indexOf(r);return this.drawingOrder.splice(a,1),this.drawingOrder.splice(s,0,r),this.reorderDrawers(this.drawingOrder),!0}return!1}getDrawerByName(i){return this.drawersMap[i]}getNameByDrawer(i){for(const r in this.drawersMap)if(this.drawersMap[r]===i)return r}removeDrawerByName(i){const r=this.drawersMap[i];this.removeDrawer(r)}removeDrawer(i){Object.keys(this.drawersMap).forEach(r=>{if(this.drawersMap[r]===i){delete this.drawersMap[r];const e=this.drawingOrder.indexOf(r);e!==-1&&this.drawingOrder.splice(e,1)}})}reorderDrawers(i){this.drawingOrder=o(this.drawingOrder,i)}}export class DynamicDrawerType{static paneResizer(i){return`PANE_RESIZER_${i}`}}
6
+ import { EVENT_DRAW } from '../events/events';
7
+ import { MIN_SUPPORTED_CANVAS_SIZE } from '../model/canvas.model';
8
+ import { arrayIntersect, reorderArray } from '../utils/array.utils';
9
+ import { animationFrameThrottled } from '../utils/performance/request-animation-frame-throttle.utils';
10
+ import { uuid } from '../utils/uuid.utils';
11
+ export const HIT_TEST_PREFIX = 'HIT_TEST_';
12
+ const drawerTypes = [
13
+ 'MAIN_BACKGROUND',
14
+ 'MAIN_CLEAR',
15
+ 'HIT_TEST_CLEAR',
16
+ 'YAXIS_CLEAR',
17
+ 'SERIES_CLEAR',
18
+ 'OVER_SERIES_CLEAR',
19
+ 'HIT_TEST_DRAWINGS',
20
+ 'GRID',
21
+ 'UNDERLAY_VOLUMES_AREA',
22
+ 'X_AXIS',
23
+ 'Y_AXIS',
24
+ 'HIGH_LOW',
25
+ 'DYNAMIC_OBJECTS',
26
+ 'N_MAP_CHART',
27
+ 'PL_CHART',
28
+ 'WATERMARK',
29
+ 'EMPTY_CHART',
30
+ 'OFFLINE_CHART',
31
+ 'LABELS',
32
+ 'EVENTS',
33
+ 'HIT_TEST_EVENTS',
34
+ 'ZERO_LINE',
35
+ 'PL_ZERO_LINE_BACKGROUND',
36
+ 'CROSS_TOOL',
37
+ ];
38
+ /**
39
+ * Manages the drawing process.
40
+ * Can re-order drawers to make one be on top of the other.
41
+ */
42
+ export class DrawingManager {
43
+ constructor(eventBus, chartResizeHandler) {
44
+ this.chartResizeHandler = chartResizeHandler;
45
+ this.drawingOrder = [];
46
+ this.drawersMap = {};
47
+ this.canvasIdsList = [];
48
+ this.animFrameId = `draw_${uuid()}`;
49
+ // eventBus.on(EVENT_DRAW_LAST_CANDLE, () => animationFrameThrottled(this.animFrameId + 'last', () => this.drawLastBar()));
50
+ this.drawHitTestCanvas = () => {
51
+ this.drawingOrder.forEach(drawer => {
52
+ if (drawer.indexOf(HIT_TEST_PREFIX) !== -1) {
53
+ this.drawersMap[drawer].draw();
54
+ }
55
+ });
56
+ };
57
+ eventBus.on(EVENT_DRAW, (canvasIds) => {
58
+ if (chartResizeHandler.wasResized()) {
59
+ // if we fire bus.fireDraw() without arguments(undefined) we need to keep canvasIdsList empty
60
+ if (this.canvasIdsList) {
61
+ if (canvasIds && canvasIds.length !== 0) {
62
+ this.canvasIdsList = this.canvasIdsList.concat(canvasIds);
63
+ }
64
+ else {
65
+ // make this undefined until the end of frame - this will redraw everything
66
+ this.canvasIdsList = undefined;
67
+ }
68
+ }
69
+ animationFrameThrottled(this.animFrameId, () => {
70
+ this.forceDraw(this.canvasIdsList);
71
+ this.canvasIdsList = [];
72
+ this.drawHitTestCanvas();
73
+ });
74
+ }
75
+ });
76
+ }
77
+ /**
78
+ * Updates canvases' sizes and executes redraw without animation frame.
79
+ * This is required for multi-chart canvas update synchronization.
80
+ * If all canvases update in separate animation frames - we see visual lag. Instead we should do all updates and then redraw.
81
+ * @doc-tags tricky,canvas,resize
82
+ */
83
+ redrawCanvasesImmediate() {
84
+ this.chartResizeHandler.fireUpdates();
85
+ this.forceDraw();
86
+ }
87
+ drawLastBar() {
88
+ this.drawingOrder.forEach(drawerName => {
89
+ if (drawerName.indexOf(HIT_TEST_PREFIX) === -1) {
90
+ const drawer = this.drawersMap[drawerName];
91
+ drawer.drawLastBar && drawer.drawLastBar();
92
+ }
93
+ });
94
+ }
95
+ forceDraw(canvasIds) {
96
+ if (!this.isDrawable()) {
97
+ return;
98
+ }
99
+ this.drawingOrder.forEach(drawerName => {
100
+ if (drawerName.indexOf(HIT_TEST_PREFIX) === -1) {
101
+ const drawer = this.drawersMap[drawerName];
102
+ // draw if not canvas specified
103
+ if (!canvasIds || canvasIds.length === 0) {
104
+ drawer.draw();
105
+ return;
106
+ }
107
+ // draw if at least 1 canvas is touched (intersection)
108
+ if (arrayIntersect(canvasIds, drawer.getCanvasIds()).length) {
109
+ drawer.draw();
110
+ }
111
+ }
112
+ });
113
+ }
114
+ /**
115
+ * Indicates whether it is possible to draw chart or not.
116
+ * @returns {boolean} true if chart is drawable
117
+ */
118
+ isDrawable() {
119
+ var _a, _b, _c, _d;
120
+ return (((_b = (_a = this.chartResizeHandler.previousBCR) === null || _a === void 0 ? void 0 : _a.height) !== null && _b !== void 0 ? _b : 0) > MIN_SUPPORTED_CANVAS_SIZE.width &&
121
+ ((_d = (_c = this.chartResizeHandler.previousBCR) === null || _c === void 0 ? void 0 : _c.width) !== null && _d !== void 0 ? _d : 0) > MIN_SUPPORTED_CANVAS_SIZE.height);
122
+ }
123
+ drawHitTestOnly() {
124
+ this.drawHitTestCanvas();
125
+ }
126
+ addDrawer(drawer, name = uuid()) {
127
+ this.drawingOrder.indexOf(name) === -1 && this.drawingOrder.push(name);
128
+ this.drawersMap[name] = drawer;
129
+ }
130
+ addDrawerAfter(drawer, newDrawerName, drawerToPutAfterName) {
131
+ this.addDrawer(drawer, newDrawerName);
132
+ const newDrawerIdx = this.drawingOrder.indexOf(newDrawerName);
133
+ this.drawingOrder.splice(newDrawerIdx, 1);
134
+ const idx = this.drawingOrder.indexOf(drawerToPutAfterName);
135
+ this.drawingOrder.splice(idx + 1, 0, newDrawerName);
136
+ this.reorderDrawers(this.drawingOrder);
137
+ }
138
+ addDrawerBefore(drawer, newDrawerName, drawerToPutBeforeName) {
139
+ this.addDrawer(drawer, newDrawerName);
140
+ const idx = this.drawingOrder.indexOf(drawerToPutBeforeName);
141
+ if (idx !== -1) {
142
+ const newDrawerIdx = this.drawingOrder.indexOf(newDrawerName);
143
+ this.drawingOrder.splice(newDrawerIdx, 1);
144
+ this.drawingOrder.splice(idx, 0, newDrawerName);
145
+ this.reorderDrawers(this.drawingOrder);
146
+ return true;
147
+ }
148
+ return false;
149
+ }
150
+ getDrawerByName(name) {
151
+ return this.drawersMap[name];
152
+ }
153
+ getNameByDrawer(drawer) {
154
+ for (const drawerName in this.drawersMap) {
155
+ if (this.drawersMap[drawerName] === drawer) {
156
+ return drawerName;
157
+ }
158
+ }
159
+ }
160
+ removeDrawerByName(name) {
161
+ const drawer = this.drawersMap[name];
162
+ this.removeDrawer(drawer);
163
+ }
164
+ removeDrawer(drawer) {
165
+ Object.keys(this.drawersMap).forEach(name => {
166
+ if (this.drawersMap[name] === drawer) {
167
+ delete this.drawersMap[name];
168
+ const drawerIdx = this.drawingOrder.indexOf(name);
169
+ drawerIdx !== -1 && this.drawingOrder.splice(drawerIdx, 1);
170
+ }
171
+ });
172
+ }
173
+ reorderDrawers(newOrder) {
174
+ this.drawingOrder = reorderArray(this.drawingOrder, newOrder);
175
+ }
176
+ }
177
+ // use this to create dynamic names
178
+ export class DynamicDrawerType {
179
+ static paneResizer(id) {
180
+ return `PANE_RESIZER_${id}`;
181
+ }
182
+ }
@@ -3,4 +3,40 @@
3
3
  * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
4
4
  * If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
5
  */
6
- import{flatMap as s}from"../utils/array.utils";import{clipToBounds as n}from"./data-series.drawer";export class HTDataSeriesDrawer{constructor(o,a,t){this.seriesDrawers=o,this.canvasModel=a,this.paneManager=t}draw(){const o=this.canvasModel.ctx;s(Object.values(this.paneManager.paneComponents),a=>a.yExtentComponents).forEach(a=>{o.save(),n(o,a.getBounds()),a.dataSeries.forEach(t=>this.drawSeries(o,t)),o.restore()})}drawSeries(o,a){if(a.config.visible){const t=a.config.type,e=this.seriesDrawers[t];if(e){const r={singleColor:this.canvasModel.idToColor(a.id),forceBold:7};e.draw(o,a.getSeriesInViewport(a.scaleModel.xStart-1,a.scaleModel.xEnd+1),a,r)}}}getCanvasIds(){return[this.canvasModel.canvasId]}}
6
+ import { clipToBounds } from './data-series.drawer';
7
+ /***
8
+ * HitTest Chart drawer. It's used to draw hit test for chart types on the hit-test canvas.
9
+ */
10
+ export class HTDataSeriesDrawer {
11
+ constructor(seriesDrawers, canvasModel, paneManager) {
12
+ this.seriesDrawers = seriesDrawers;
13
+ this.canvasModel = canvasModel;
14
+ this.paneManager = paneManager;
15
+ }
16
+ draw() {
17
+ const ctx = this.canvasModel.ctx;
18
+ this.paneManager.yExtents.forEach(comp => {
19
+ ctx.save();
20
+ clipToBounds(ctx, comp.getBounds());
21
+ comp.dataSeries.forEach(series => this.drawSeries(ctx, series));
22
+ ctx.restore();
23
+ });
24
+ }
25
+ drawSeries(ctx, series) {
26
+ if (series.config.visible) {
27
+ const paintTool = series.config.type;
28
+ const drawer = this.seriesDrawers[paintTool];
29
+ if (drawer) {
30
+ const drawConfig = {
31
+ singleColor: this.canvasModel.idToColor(series.id),
32
+ forceBold: 7,
33
+ };
34
+ // +- 1 to correctly draw points which are partly inside bounds
35
+ drawer.draw(ctx, series.getSeriesInViewport(series.scale.xStart - 1, series.scale.xEnd + 1), series, drawConfig);
36
+ }
37
+ }
38
+ }
39
+ getCanvasIds() {
40
+ return [this.canvasModel.canvasId];
41
+ }
42
+ }
@@ -3,4 +3,76 @@
3
3
  * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
4
4
  * If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
5
  */
6
- import{Subject as h}from"rxjs";import{arrayRemove as r}from"../utils/array.utils";import{EVENT_DRAW as u}from"./events";export default class d{constructor(){this.UNKNOWN_ARR=[],this.handlers={},this.muted=!1,this.unsub=(t,s)=>{const i=this.handlers[t];i!==void 0&&r.call(i,s)},this.add=(t,s,i)=>(s in this.handlers?t.call(this.handlers[s],i):this.handlers[s]=[i],this.unsub.bind(this,s,i)),this.on=(t,s)=>this.add(this.UNKNOWN_ARR.push,t,s),this.observe=t=>{const s=new h,i=s.next.bind(s),n=s.unsubscribe.bind(s);return this.on(t,i),s.unsubscribe=()=>{this.unsub(t,i),n()},s.asObservable()},this.onPrior=(t,s)=>this.add(this.UNKNOWN_ARR.unshift,t,s),this.off=this.unsub,this.fire=(t,...s)=>{var i;if(!this.muted){const n=(i=this.handlers[t])!==null&&i!==void 0?i:[];let e;for(e=0,n.length;e<n.length;e++)n[e].apply(null,s)}},this.fireAsync=(t,s)=>{if(!this.muted)return window.setTimeout(this.fire.bind(this,t,s),0)},this.setMuted=t=>{this.muted=t},this.clear=()=>{this.handlers={}}}fireDraw(t){this.fire(u,t)}}
6
+ import { Subject } from 'rxjs';
7
+ import { arrayRemove } from '../utils/array.utils';
8
+ import { EVENT_DRAW } from './events';
9
+ /**
10
+ * Event bus for chart.
11
+ * @doc-tags core-components
12
+ */
13
+ export default class EventBus {
14
+ constructor() {
15
+ this.UNKNOWN_ARR = [];
16
+ /** Registered event handlers. */
17
+ this.handlers = {};
18
+ /** State which can enable / disable events processing. */
19
+ this.muted = false;
20
+ this.unsub = (type, fn) => {
21
+ const handler = this.handlers[type];
22
+ handler !== undefined && arrayRemove.call(handler, fn);
23
+ };
24
+ this.add = (method, type, fn) => {
25
+ if (type in this.handlers) {
26
+ method.call(this.handlers[type], fn);
27
+ }
28
+ else {
29
+ this.handlers[type] = [fn];
30
+ }
31
+ return this.unsub.bind(this, type, fn);
32
+ };
33
+ this.on = (type, fn) => this.add(this.UNKNOWN_ARR.push, type, fn);
34
+ this.observe = (type) => {
35
+ const result = new Subject();
36
+ const subjectFn = result.next.bind(result);
37
+ const originalUnsubscribe = result.unsubscribe.bind(result);
38
+ this.on(type, subjectFn);
39
+ result.unsubscribe = () => {
40
+ this.unsub(type, subjectFn);
41
+ originalUnsubscribe();
42
+ };
43
+ return result.asObservable();
44
+ };
45
+ this.onPrior = (type, fn) => this.add(this.UNKNOWN_ARR.unshift, type, fn);
46
+ this.off = this.unsub;
47
+ this.fire = (type, ...args) => {
48
+ var _a;
49
+ if (!this.muted) {
50
+ const arr = (_a = this.handlers[type]) !== null && _a !== void 0 ? _a : [];
51
+ let i;
52
+ for (i = 0, arr.length; i < arr.length; i++) {
53
+ // call each handler with arguments
54
+ const fn = arr[i];
55
+ fn.apply(null, args);
56
+ }
57
+ }
58
+ };
59
+ this.fireAsync = (type, event) => {
60
+ if (!this.muted) {
61
+ return window.setTimeout(this.fire.bind(this, type, event), 0);
62
+ }
63
+ };
64
+ this.setMuted = (val) => {
65
+ this.muted = val;
66
+ };
67
+ this.clear = () => {
68
+ this.handlers = {};
69
+ };
70
+ }
71
+ /**
72
+ * Triggers the draw event for the specified canvas IDs.
73
+ * @param {Array<string>} canvasIds - An optional array of canvas IDs to trigger the draw event for.
74
+ */
75
+ fireDraw(canvasIds) {
76
+ this.fire(EVENT_DRAW, canvasIds);
77
+ }
78
+ }
@@ -3,4 +3,6 @@
3
3
  * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
4
4
  * If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
5
  */
6
- export const EVENT_RESIZED="resized_local",EVENT_DRAW="draw",EVENT_DRAW_LAST_CANDLE="draw_last_candle";
6
+ export const EVENT_RESIZED = 'resized_local';
7
+ export const EVENT_DRAW = 'draw';
8
+ export const EVENT_DRAW_LAST_CANDLE = 'draw_last_candle';
@@ -3,4 +3,49 @@
3
3
  * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
4
4
  * If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
5
  */
6
- import{ChartBaseElement as i}from"../model/chart-base-element";import{map as l,distinctUntilChanged as r}from"rxjs/operators";export class CandleTapHandler extends i{constructor(t,c,e,n){super(),e.observeTouchStart().pipe(l(o=>n.components.chart.highlightActiveCandle?o:void 0),r()).subscribe(o=>{o&&this.setCandleAsActive(o,t,c)})}setCandleAsActive(t,c,e){if(t.touches.length===1){const n=t.touches.item(0);if(n!==null){const o=this.getTouchXPosition(n,c),s=e.candleFromX(o);s&&e.mainCandleSeries.setActiveCandle(s)}}}getTouchXPosition(t,c){const e=c.getBoundingClientRect(),n=document.body.scrollLeft||document.documentElement.scrollLeft;return t.pageX-e.left-n}}
6
+ import { ChartBaseElement } from '../model/chart-base-element';
7
+ import { map, distinctUntilChanged } from 'rxjs/operators';
8
+ export class CandleTapHandler extends ChartBaseElement {
9
+ constructor(mainCanvasParent, chartModel, canvasInputListeners, config) {
10
+ super();
11
+ canvasInputListeners
12
+ .observeTouchStart()
13
+ .pipe(map(e => (config.components.chart.highlightActiveCandle ? e : undefined)), distinctUntilChanged())
14
+ .subscribe(e => {
15
+ if (e) {
16
+ this.setCandleAsActive(e, mainCanvasParent, chartModel);
17
+ }
18
+ });
19
+ }
20
+ /**
21
+ * Sets the candle as active when a touch event occurs on the chart.
22
+ * @param {TouchEvent} e - The touch event that occurred on the chart.
23
+ * @param {Element} mainCanvasParent - The parent element of the main canvas.
24
+ * @param {ChartModel} chartModel - The chart model object.
25
+ */
26
+ setCandleAsActive(e, mainCanvasParent, chartModel) {
27
+ if (e.touches.length === 1) {
28
+ const touch = e.touches.item(0);
29
+ if (touch !== null) {
30
+ const xTouchPosition = this.getTouchXPosition(touch, mainCanvasParent);
31
+ const candle = chartModel.candleFromX(xTouchPosition);
32
+ if (candle) {
33
+ chartModel.mainCandleSeries.setActiveCandle(candle);
34
+ }
35
+ }
36
+ }
37
+ }
38
+ // TO DO: check if this body calculations can potentially works wrong in widget
39
+ /**
40
+ * Calculates the X position of a touch event relative to the main canvas parent element.
41
+ * @param {Touch} touch - The touch event object.
42
+ * @param {Element} mainCanvasParent - The parent element of the main canvas.
43
+ * @returns {number} - The X position of the touch event relative to the main canvas parent element.
44
+ * @todo Check if this body calculations can potentially work incorrectly in the widget.
45
+ */
46
+ getTouchXPosition(touch, mainCanvasParent) {
47
+ const rect = mainCanvasParent.getBoundingClientRect();
48
+ const scrollLeft = document.body.scrollLeft || document.documentElement.scrollLeft;
49
+ return touch.pageX - rect.left - scrollLeft;
50
+ }
51
+ }