@devexperts/dxcharts-lite 1.0.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (379) hide show
  1. package/README.md +4 -4
  2. package/dist/chart/animation/canvas-animation.d.ts +1 -1
  3. package/dist/chart/animation/canvas-animation.js +135 -2
  4. package/dist/chart/animation/types/animation.d.ts +1 -1
  5. package/dist/chart/animation/types/animation.js +44 -2
  6. package/dist/chart/animation/types/color-alpha-animation.d.ts +2 -2
  7. package/dist/chart/animation/types/color-alpha-animation.js +61 -2
  8. package/dist/chart/animation/types/color-transition-animation.d.ts +2 -2
  9. package/dist/chart/animation/types/color-transition-animation.js +87 -2
  10. package/dist/chart/animation/types/viewport-movement-animation.d.ts +1 -1
  11. package/dist/chart/animation/types/viewport-movement-animation.js +64 -2
  12. package/dist/chart/animation/viewport-model-animation.d.ts +1 -1
  13. package/dist/chart/animation/viewport-model-animation.js +21 -2
  14. package/dist/chart/bootstrap.d.ts +52 -49
  15. package/dist/chart/bootstrap.js +450 -2
  16. package/dist/chart/canvas/canvas-bounds-container.d.ts +1 -6
  17. package/dist/chart/canvas/canvas-bounds-container.js +816 -2
  18. package/dist/chart/canvas/canvas-chart-html.d.ts +1 -1
  19. package/dist/chart/canvas/canvas-chart-html.js +17 -19
  20. package/dist/chart/canvas/chart-elements.d.ts +2 -5
  21. package/dist/chart/canvas/chart-elements.js +23 -2
  22. package/dist/chart/canvas/cursor.handler.d.ts +1 -1
  23. package/dist/chart/canvas/cursor.handler.js +123 -2
  24. package/dist/chart/canvas/layout-creator.d.ts +1 -1
  25. package/dist/chart/canvas/layout-creator.js +35 -2
  26. package/dist/chart/canvas/y-axis-bounds.container.d.ts +3 -3
  27. package/dist/chart/canvas/y-axis-bounds.container.js +68 -2
  28. package/dist/chart/chart-container.d.ts +1 -1
  29. package/dist/chart/chart-container.js +2 -2
  30. package/dist/chart/chart.config.d.ts +5 -6
  31. package/dist/chart/chart.config.js +646 -2
  32. package/dist/chart/chart.d.ts +62 -0
  33. package/dist/chart/chart.js +106 -0
  34. package/dist/chart/components/chart/basic-scale.d.ts +3 -3
  35. package/dist/chart/components/chart/basic-scale.js +32 -2
  36. package/dist/chart/components/chart/candle-transformer.functions.d.ts +1 -1
  37. package/dist/chart/components/chart/candle-transformer.functions.js +16 -2
  38. package/dist/chart/components/chart/candle-width-calculator.functions.d.ts +1 -1
  39. package/dist/chart/components/chart/candle-width-calculator.functions.js +3 -2
  40. package/dist/chart/components/chart/candle.functions.d.ts +1 -1
  41. package/dist/chart/components/chart/candle.functions.js +45 -2
  42. package/dist/chart/components/chart/chart-area-pan.handler.d.ts +4 -4
  43. package/dist/chart/components/chart/chart-area-pan.handler.js +198 -2
  44. package/dist/chart/components/chart/chart-base.model.d.ts +1 -1
  45. package/dist/chart/components/chart/chart-base.model.js +67 -2
  46. package/dist/chart/components/chart/chart.component.d.ts +8 -4
  47. package/dist/chart/components/chart/chart.component.js +409 -2
  48. package/dist/chart/components/chart/chart.model.d.ts +5 -12
  49. package/dist/chart/components/chart/chart.model.js +955 -2
  50. package/dist/chart/components/chart/data-series.high-low-provider.d.ts +1 -1
  51. package/dist/chart/components/chart/data-series.high-low-provider.js +35 -2
  52. package/dist/chart/components/chart/fake-candles.d.ts +1 -1
  53. package/dist/chart/components/chart/fake-candles.js +98 -2
  54. package/dist/chart/components/chart/price.formatter.d.ts +1 -1
  55. package/dist/chart/components/chart/price.formatter.js +36 -2
  56. package/dist/chart/components/chart/secondary-chart-colors-pool.d.ts +1 -1
  57. package/dist/chart/components/chart/secondary-chart-colors-pool.js +69 -2
  58. package/dist/chart/components/cross_tool/cross-tool.component.d.ts +1 -1
  59. package/dist/chart/components/cross_tool/cross-tool.component.js +86 -2
  60. package/dist/chart/components/cross_tool/cross-tool.drawer.d.ts +1 -1
  61. package/dist/chart/components/cross_tool/cross-tool.drawer.js +33 -2
  62. package/dist/chart/components/cross_tool/cross-tool.model.d.ts +1 -1
  63. package/dist/chart/components/cross_tool/cross-tool.model.js +108 -2
  64. package/dist/chart/components/cross_tool/types/cross-and-labels.drawer.d.ts +1 -1
  65. package/dist/chart/components/cross_tool/types/cross-and-labels.drawer.js +138 -2
  66. package/dist/chart/components/cross_tool/types/none.drawer.d.ts +1 -1
  67. package/dist/chart/components/cross_tool/types/none.drawer.js +4 -2
  68. package/dist/chart/components/dran-n-drop_helper/drag-n-drop-x.component.d.ts +1 -1
  69. package/dist/chart/components/dran-n-drop_helper/drag-n-drop-x.component.js +29 -2
  70. package/dist/chart/components/dran-n-drop_helper/drag-n-drop-y.component.d.ts +1 -1
  71. package/dist/chart/components/dran-n-drop_helper/drag-n-drop-y.component.js +25 -2
  72. package/dist/chart/components/dran-n-drop_helper/drag-n-drop.component.d.ts +1 -1
  73. package/dist/chart/components/dran-n-drop_helper/drag-n-drop.component.js +54 -2
  74. package/dist/chart/components/dynamic-objects/dynamic-objects.component.d.ts +13 -0
  75. package/dist/chart/components/dynamic-objects/dynamic-objects.component.js +20 -0
  76. package/dist/chart/components/dynamic-objects/dynamic-objects.drawer.d.ts +18 -0
  77. package/dist/chart/components/dynamic-objects/dynamic-objects.drawer.js +23 -0
  78. package/dist/chart/components/dynamic-objects/dynamic-objects.model.d.ts +63 -0
  79. package/dist/chart/components/dynamic-objects/dynamic-objects.model.js +136 -0
  80. package/dist/chart/components/events/events-hit-test.drawer.d.ts +1 -1
  81. package/dist/chart/components/events/events-hit-test.drawer.js +64 -2
  82. package/dist/chart/components/events/events.component.d.ts +1 -1
  83. package/dist/chart/components/events/events.component.js +62 -2
  84. package/dist/chart/components/events/events.drawer.d.ts +1 -1
  85. package/dist/chart/components/events/events.drawer.js +196 -2
  86. package/dist/chart/components/events/events.model.d.ts +1 -1
  87. package/dist/chart/components/events/events.model.js +70 -2
  88. package/dist/chart/components/grid/grid.component.d.ts +3 -3
  89. package/dist/chart/components/grid/grid.component.js +32 -2
  90. package/dist/chart/components/grid/grid.drawer.d.ts +5 -4
  91. package/dist/chart/components/grid/grid.drawer.js +107 -2
  92. package/dist/chart/components/high_low/high-low.component.d.ts +1 -1
  93. package/dist/chart/components/high_low/high-low.component.js +13 -2
  94. package/dist/chart/components/high_low/high-low.drawer.d.ts +1 -1
  95. package/dist/chart/components/high_low/high-low.drawer.js +127 -2
  96. package/dist/chart/components/highlights/highlights.component.d.ts +1 -1
  97. package/dist/chart/components/highlights/highlights.component.js +47 -2
  98. package/dist/chart/components/highlights/highlights.drawer.d.ts +1 -1
  99. package/dist/chart/components/highlights/highlights.drawer.js +155 -2
  100. package/dist/chart/components/highlights/highlights.model.d.ts +1 -1
  101. package/dist/chart/components/highlights/highlights.model.js +76 -2
  102. package/dist/chart/components/labels_generator/numeric-axis-labels.generator.d.ts +2 -2
  103. package/dist/chart/components/labels_generator/numeric-axis-labels.generator.js +200 -2
  104. package/dist/chart/components/navigation_map/navigation-map-move.handler.d.ts +3 -3
  105. package/dist/chart/components/navigation_map/navigation-map-move.handler.js +109 -2
  106. package/dist/chart/components/navigation_map/navigation-map.component.d.ts +1 -1
  107. package/dist/chart/components/navigation_map/navigation-map.component.js +113 -2
  108. package/dist/chart/components/navigation_map/navigation-map.drawer.d.ts +1 -1
  109. package/dist/chart/components/navigation_map/navigation-map.drawer.js +245 -2
  110. package/dist/chart/components/navigation_map/navigation-map.model.d.ts +1 -1
  111. package/dist/chart/components/navigation_map/navigation-map.model.js +34 -3
  112. package/dist/chart/components/pan/chart-pan.component.d.ts +3 -3
  113. package/dist/chart/components/pan/chart-pan.component.js +52 -2
  114. package/dist/chart/components/pane/extent/y-extent-component.d.ts +13 -19
  115. package/dist/chart/components/pane/extent/y-extent-component.js +121 -2
  116. package/dist/chart/components/pane/pane-hit-test.controller.d.ts +1 -1
  117. package/dist/chart/components/pane/pane-hit-test.controller.js +56 -2
  118. package/dist/chart/components/pane/pane-manager.component.d.ts +11 -6
  119. package/dist/chart/components/pane/pane-manager.component.js +149 -2
  120. package/dist/chart/components/pane/pane.component.d.ts +18 -34
  121. package/dist/chart/components/pane/pane.component.js +279 -2
  122. package/dist/chart/components/resizer/bar-resizer.component.d.ts +1 -1
  123. package/dist/chart/components/resizer/bar-resizer.component.js +140 -2
  124. package/dist/chart/components/resizer/bar-resizer.drawer.d.ts +1 -1
  125. package/dist/chart/components/resizer/bar-resizer.drawer.js +47 -2
  126. package/dist/chart/components/snapshot/snapshot.component.d.ts +1 -1
  127. package/dist/chart/components/snapshot/snapshot.component.js +49 -2
  128. package/dist/chart/components/volumes/separate-volumes.component.d.ts +7 -11
  129. package/dist/chart/components/volumes/separate-volumes.component.js +64 -2
  130. package/dist/chart/components/volumes/volume-color-resolvers.functions.d.ts +1 -1
  131. package/dist/chart/components/volumes/volume-color-resolvers.functions.js +19 -2
  132. package/dist/chart/components/volumes/volumes.component.d.ts +9 -9
  133. package/dist/chart/components/volumes/volumes.component.js +95 -2
  134. package/dist/chart/components/volumes/volumes.drawer.d.ts +6 -13
  135. package/dist/chart/components/volumes/volumes.drawer.js +141 -2
  136. package/dist/chart/components/volumes/volumes.formatter.d.ts +1 -1
  137. package/dist/chart/components/volumes/volumes.formatter.js +32 -2
  138. package/dist/chart/components/volumes/volumes.model.d.ts +3 -3
  139. package/dist/chart/components/volumes/volumes.model.js +44 -2
  140. package/dist/chart/components/watermark/water-mark.component.d.ts +1 -1
  141. package/dist/chart/components/watermark/water-mark.component.js +104 -2
  142. package/dist/chart/components/watermark/water-mark.drawer.d.ts +1 -1
  143. package/dist/chart/components/watermark/water-mark.drawer.js +188 -2
  144. package/dist/chart/components/x_axis/numeric-x-axis-labels.generator.d.ts +1 -1
  145. package/dist/chart/components/x_axis/numeric-x-axis-labels.generator.js +28 -2
  146. package/dist/chart/components/x_axis/time/parser/time-formats-matchers.functions.d.ts +1 -1
  147. package/dist/chart/components/x_axis/time/parser/time-formats-matchers.functions.js +188 -2
  148. package/dist/chart/components/x_axis/time/parser/time-formats-parser.functions.d.ts +1 -1
  149. package/dist/chart/components/x_axis/time/parser/time-formats-parser.functions.js +77 -2
  150. package/dist/chart/components/x_axis/time/parser/time-formats-validators.functions.d.ts +1 -1
  151. package/dist/chart/components/x_axis/time/parser/time-formats-validators.functions.js +80 -2
  152. package/dist/chart/components/x_axis/time/parser/time-formats.model.d.ts +1 -1
  153. package/dist/chart/components/x_axis/time/parser/time-formats.model.js +15 -2
  154. package/dist/chart/components/x_axis/time/x-axis-weights.functions.d.ts +2 -2
  155. package/dist/chart/components/x_axis/time/x-axis-weights.functions.js +144 -2
  156. package/dist/chart/components/x_axis/time/x-axis-weights.generator.d.ts +1 -1
  157. package/dist/chart/components/x_axis/time/x-axis-weights.generator.js +74 -2
  158. package/dist/chart/components/x_axis/x-axis-draw.functions.d.ts +1 -1
  159. package/dist/chart/components/x_axis/x-axis-draw.functions.js +50 -2
  160. package/dist/chart/components/x_axis/x-axis-labels.drawer.d.ts +1 -1
  161. package/dist/chart/components/x_axis/x-axis-labels.drawer.js +71 -2
  162. package/dist/chart/components/x_axis/x-axis-labels.generator.d.ts +3 -3
  163. package/dist/chart/components/x_axis/x-axis-labels.generator.js +333 -2
  164. package/dist/chart/components/x_axis/x-axis-labels.model.d.ts +1 -1
  165. package/dist/chart/components/x_axis/x-axis-labels.model.js +36 -2
  166. package/dist/chart/components/x_axis/x-axis-scale.handler.d.ts +3 -3
  167. package/dist/chart/components/x_axis/x-axis-scale.handler.js +61 -2
  168. package/dist/chart/components/x_axis/x-axis-time-labels.drawer.d.ts +1 -1
  169. package/dist/chart/components/x_axis/x-axis-time-labels.drawer.js +83 -2
  170. package/dist/chart/components/x_axis/x-axis.component.d.ts +3 -3
  171. package/dist/chart/components/x_axis/x-axis.component.js +120 -2
  172. package/dist/chart/components/y_axis/label-color.functions.d.ts +1 -1
  173. package/dist/chart/components/y_axis/label-color.functions.js +54 -2
  174. package/dist/chart/components/y_axis/numeric-y-axis-labels.generator.d.ts +5 -5
  175. package/dist/chart/components/y_axis/numeric-y-axis-labels.generator.js +34 -2
  176. package/dist/chart/components/y_axis/price_labels/data-series-y-axis-labels.provider.d.ts +4 -4
  177. package/dist/chart/components/y_axis/price_labels/data-series-y-axis-labels.provider.js +68 -2
  178. package/dist/chart/components/y_axis/price_labels/labels-positions-calculator.d.ts +1 -1
  179. package/dist/chart/components/y_axis/price_labels/labels-positions-calculator.js +57 -2
  180. package/dist/chart/components/y_axis/price_labels/last-candle-labels.provider.d.ts +1 -1
  181. package/dist/chart/components/y_axis/price_labels/last-candle-labels.provider.js +96 -2
  182. package/dist/chart/components/y_axis/price_labels/price-label.drawer.d.ts +3 -3
  183. package/dist/chart/components/y_axis/price_labels/price-label.drawer.js +120 -2
  184. package/dist/chart/components/y_axis/price_labels/y-axis-labels.model.d.ts +10 -9
  185. package/dist/chart/components/y_axis/price_labels/y-axis-labels.model.js +202 -2
  186. package/dist/chart/components/y_axis/price_labels/y-axis-price-labels.drawer.d.ts +7 -8
  187. package/dist/chart/components/y_axis/price_labels/y-axis-price-labels.drawer.js +59 -2
  188. package/dist/chart/components/y_axis/y-axis-base-labels.model.d.ts +7 -5
  189. package/dist/chart/components/y_axis/y-axis-base-labels.model.js +48 -2
  190. package/dist/chart/components/y_axis/y-axis-labels.drawer.d.ts +5 -5
  191. package/dist/chart/components/y_axis/y-axis-labels.drawer.js +162 -2
  192. package/dist/chart/components/y_axis/y-axis-scale.handler.d.ts +3 -3
  193. package/dist/chart/components/y_axis/y-axis-scale.handler.js +73 -2
  194. package/dist/chart/components/y_axis/y-axis.component.d.ts +33 -42
  195. package/dist/chart/components/y_axis/y-axis.component.js +221 -2
  196. package/dist/chart/components/y_axis/y-axis.drawer.d.ts +10 -13
  197. package/dist/chart/components/y_axis/y-axis.drawer.js +97 -2
  198. package/dist/chart/components/y_axis/y-axis.model.d.ts +10 -18
  199. package/dist/chart/components/y_axis/y-axis.model.js +34 -2
  200. package/dist/chart/drawers/chart-background.drawer.d.ts +1 -1
  201. package/dist/chart/drawers/chart-background.drawer.js +70 -2
  202. package/dist/chart/drawers/chart-type-drawers/area.drawer.d.ts +1 -1
  203. package/dist/chart/drawers/chart-type-drawers/area.drawer.js +70 -2
  204. package/dist/chart/drawers/chart-type-drawers/bar.drawer.d.ts +1 -1
  205. package/dist/chart/drawers/chart-type-drawers/bar.drawer.js +58 -2
  206. package/dist/chart/drawers/chart-type-drawers/baseline.drawer.d.ts +1 -1
  207. package/dist/chart/drawers/chart-type-drawers/baseline.drawer.js +85 -2
  208. package/dist/chart/drawers/chart-type-drawers/candle.drawer.d.ts +1 -1
  209. package/dist/chart/drawers/chart-type-drawers/candle.drawer.js +163 -2
  210. package/dist/chart/drawers/chart-type-drawers/histogram.drawer.d.ts +1 -1
  211. package/dist/chart/drawers/chart-type-drawers/histogram.drawer.js +58 -2
  212. package/dist/chart/drawers/chart-type-drawers/line.drawer.d.ts +1 -1
  213. package/dist/chart/drawers/chart-type-drawers/line.drawer.js +39 -2
  214. package/dist/chart/drawers/chart-type-drawers/scatter-plot.drawer.d.ts +1 -1
  215. package/dist/chart/drawers/chart-type-drawers/scatter-plot.drawer.js +20 -2
  216. package/dist/chart/drawers/clear-canvas.drawer.d.ts +1 -1
  217. package/dist/chart/drawers/clear-canvas.drawer.js +15 -2
  218. package/dist/chart/drawers/composite.drawer.d.ts +1 -1
  219. package/dist/chart/drawers/composite.drawer.js +68 -2
  220. package/dist/chart/drawers/data-series-drawers/candle-series-wrapper.d.ts +1 -1
  221. package/dist/chart/drawers/data-series-drawers/candle-series-wrapper.js +51 -2
  222. package/dist/chart/drawers/data-series-drawers/color-candle.drawer.d.ts +1 -1
  223. package/dist/chart/drawers/data-series-drawers/color-candle.drawer.js +36 -2
  224. package/dist/chart/drawers/data-series-drawers/data-series-drawers.utils.d.ts +1 -1
  225. package/dist/chart/drawers/data-series-drawers/data-series-drawers.utils.js +17 -2
  226. package/dist/chart/drawers/data-series-drawers/difference-cloud.drawer.d.ts +1 -1
  227. package/dist/chart/drawers/data-series-drawers/difference-cloud.drawer.js +107 -2
  228. package/dist/chart/drawers/data-series-drawers/histogram.drawer.d.ts +1 -1
  229. package/dist/chart/drawers/data-series-drawers/histogram.drawer.js +24 -2
  230. package/dist/chart/drawers/data-series-drawers/linear.drawer.d.ts +1 -1
  231. package/dist/chart/drawers/data-series-drawers/linear.drawer.js +20 -2
  232. package/dist/chart/drawers/data-series-drawers/points.drawer.d.ts +1 -1
  233. package/dist/chart/drawers/data-series-drawers/points.drawer.js +20 -2
  234. package/dist/chart/drawers/data-series-drawers/rectangular-tool.drawer.d.ts +1 -1
  235. package/dist/chart/drawers/data-series-drawers/rectangular-tool.drawer.js +8 -2
  236. package/dist/chart/drawers/data-series-drawers/text.drawer.d.ts +1 -1
  237. package/dist/chart/drawers/data-series-drawers/text.drawer.js +26 -2
  238. package/dist/chart/drawers/data-series-drawers/trend-histogram.drawer.d.ts +1 -1
  239. package/dist/chart/drawers/data-series-drawers/trend-histogram.drawer.js +36 -2
  240. package/dist/chart/drawers/data-series-drawers/triangle.drawer.d.ts +1 -1
  241. package/dist/chart/drawers/data-series-drawers/triangle.drawer.js +23 -2
  242. package/dist/chart/drawers/data-series.drawer.d.ts +6 -8
  243. package/dist/chart/drawers/data-series.drawer.js +57 -2
  244. package/dist/chart/drawers/drawing-manager.d.ts +2 -2
  245. package/dist/chart/drawers/drawing-manager.js +178 -2
  246. package/dist/chart/drawers/ht-data-series.drawer.d.ts +1 -1
  247. package/dist/chart/drawers/ht-data-series.drawer.js +38 -2
  248. package/dist/chart/events/event-bus.d.ts +1 -1
  249. package/dist/chart/events/event-bus.js +74 -2
  250. package/dist/chart/events/events.d.ts +1 -1
  251. package/dist/chart/events/events.js +4 -2
  252. package/dist/chart/inputhandlers/candle-tap.handler.d.ts +1 -1
  253. package/dist/chart/inputhandlers/candle-tap.handler.js +47 -2
  254. package/dist/chart/inputhandlers/chart-resize.handler.d.ts +1 -1
  255. package/dist/chart/inputhandlers/chart-resize.handler.js +99 -2
  256. package/dist/chart/inputhandlers/cross-event-producer.component.d.ts +1 -1
  257. package/dist/chart/inputhandlers/cross-event-producer.component.js +68 -2
  258. package/dist/chart/inputhandlers/hover-producer.component.d.ts +3 -3
  259. package/dist/chart/inputhandlers/hover-producer.component.js +229 -2
  260. package/dist/chart/inputhandlers/main-canvas-touch.handler.d.ts +3 -3
  261. package/dist/chart/inputhandlers/main-canvas-touch.handler.js +81 -2
  262. package/dist/chart/inputlisteners/canvas-input-listener.component.d.ts +1 -1
  263. package/dist/chart/inputlisteners/canvas-input-listener.component.js +630 -2
  264. package/dist/chart/model/baseline.model.d.ts +1 -1
  265. package/dist/chart/model/baseline.model.js +89 -2
  266. package/dist/chart/model/bounds.model.d.ts +1 -1
  267. package/dist/chart/model/bounds.model.js +2 -2
  268. package/dist/chart/model/candle-hover.d.ts +1 -1
  269. package/dist/chart/model/candle-hover.js +71 -2
  270. package/dist/chart/model/candle-series-high-low.provider.d.ts +1 -1
  271. package/dist/chart/model/candle-series-high-low.provider.js +46 -2
  272. package/dist/chart/model/candle-series.model.d.ts +4 -4
  273. package/dist/chart/model/candle-series.model.js +246 -2
  274. package/dist/chart/model/candle.model.d.ts +1 -1
  275. package/dist/chart/model/candle.model.js +70 -2
  276. package/dist/chart/model/canvas.model.d.ts +1 -1
  277. package/dist/chart/model/canvas.model.js +229 -2
  278. package/dist/chart/model/chart-base-element.d.ts +1 -1
  279. package/dist/chart/model/chart-base-element.js +130 -2
  280. package/dist/chart/model/compare-series-hover.d.ts +1 -1
  281. package/dist/chart/model/compare-series-hover.js +26 -2
  282. package/dist/chart/model/data-series-view.d.ts +6 -6
  283. package/dist/chart/model/data-series-view.js +112 -2
  284. package/dist/chart/model/data-series.config.d.ts +1 -1
  285. package/dist/chart/model/data-series.config.js +15 -2
  286. package/dist/chart/model/data-series.model.d.ts +5 -5
  287. package/dist/chart/model/data-series.model.js +282 -2
  288. package/dist/chart/model/date-time.formatter.d.ts +1 -1
  289. package/dist/chart/model/date-time.formatter.js +152 -2
  290. package/dist/chart/model/hit-test-canvas.model.d.ts +2 -2
  291. package/dist/chart/model/hit-test-canvas.model.js +257 -2
  292. package/dist/chart/model/main-candle-series.model.d.ts +2 -2
  293. package/dist/chart/model/main-candle-series.model.js +30 -2
  294. package/dist/chart/model/scale.model.d.ts +3 -2
  295. package/dist/chart/model/scale.model.js +317 -2
  296. package/dist/chart/model/scaling/auto-scale.model.d.ts +1 -1
  297. package/dist/chart/model/scaling/auto-scale.model.js +98 -2
  298. package/dist/chart/model/scaling/constrait.functions.d.ts +1 -1
  299. package/dist/chart/model/scaling/constrait.functions.js +62 -2
  300. package/dist/chart/model/scaling/lock-ratio.model.d.ts +1 -1
  301. package/dist/chart/model/scaling/lock-ratio.model.js +18 -2
  302. package/dist/chart/model/scaling/move-chart.functions.d.ts +1 -1
  303. package/dist/chart/model/scaling/move-chart.functions.js +23 -2
  304. package/dist/chart/model/scaling/viewport.model.d.ts +3 -3
  305. package/dist/chart/model/scaling/viewport.model.js +280 -2
  306. package/dist/chart/model/scaling/x-zooming.functions.d.ts +1 -1
  307. package/dist/chart/model/scaling/x-zooming.functions.js +36 -2
  308. package/dist/chart/model/time-zone.model.d.ts +1 -1
  309. package/dist/chart/model/time-zone.model.js +110 -2
  310. package/dist/chart/model/visual-candle.d.ts +1 -1
  311. package/dist/chart/model/visual-candle.js +135 -2
  312. package/dist/chart/utils/__tests__/array.utils.test.d.ts +1 -1
  313. package/dist/chart/utils/__tests__/array.utils.test.js +136 -2
  314. package/dist/chart/utils/{perfomance/debounce.utils.js → __tests__/math.utils.test.d.ts} +2 -2
  315. package/dist/chart/utils/__tests__/math.utils.test.js +19 -0
  316. package/dist/chart/utils/__tests__/object.utils.test.d.ts +1 -1
  317. package/dist/chart/utils/__tests__/object.utils.test.js +12 -2
  318. package/dist/chart/utils/__tests__/priceIncrementsUtils.test.d.ts +1 -1
  319. package/dist/chart/utils/__tests__/priceIncrementsUtils.test.js +30 -2
  320. package/dist/chart/utils/array.utils.d.ts +2 -2
  321. package/dist/chart/utils/array.utils.js +270 -2
  322. package/dist/chart/utils/auto-period-detector.utils.d.ts +1 -1
  323. package/dist/chart/utils/auto-period-detector.utils.js +40 -2
  324. package/dist/chart/utils/candles-generator-ts.utils.d.ts +1 -1
  325. package/dist/chart/utils/candles-generator-ts.utils.js +21 -2
  326. package/dist/chart/utils/candles-generator.utils.d.ts +1 -1
  327. package/dist/chart/utils/candles-generator.utils.js +162 -2
  328. package/dist/chart/utils/candles.utils.d.ts +1 -1
  329. package/dist/chart/utils/candles.utils.js +43 -2
  330. package/dist/chart/utils/canvas/canvas-drawing-functions.utils.d.ts +1 -1
  331. package/dist/chart/utils/canvas/canvas-drawing-functions.utils.js +145 -2
  332. package/dist/chart/utils/canvas/canvas-font-measure-tool.utils.d.ts +1 -1
  333. package/dist/chart/utils/canvas/canvas-font-measure-tool.utils.js +52 -2
  334. package/dist/chart/utils/canvas/canvas-text-functions.utils.d.ts +1 -1
  335. package/dist/chart/utils/canvas/canvas-text-functions.utils.js +157 -2
  336. package/dist/chart/utils/color.utils.d.ts +1 -1
  337. package/dist/chart/utils/color.utils.js +32 -2
  338. package/dist/chart/utils/device/browser.utils.d.ts +1 -1
  339. package/dist/chart/utils/device/browser.utils.js +11 -2
  340. package/dist/chart/utils/device/device-detector.utils.d.ts +1 -1
  341. package/dist/chart/utils/device/device-detector.utils.js +25 -2
  342. package/dist/chart/utils/device/device-pixel-ratio.utils.d.ts +1 -1
  343. package/dist/chart/utils/device/device-pixel-ratio.utils.js +22 -2
  344. package/dist/chart/utils/device/touchpad.utils.d.ts +1 -1
  345. package/dist/chart/utils/device/touchpad.utils.js +92 -2
  346. package/dist/chart/utils/dom.utils.d.ts +1 -1
  347. package/dist/chart/utils/dom.utils.js +16 -2
  348. package/dist/chart/utils/function.utils.d.ts +1 -1
  349. package/dist/chart/utils/function.utils.js +17 -2
  350. package/dist/chart/utils/linkedList.utils.d.ts +28 -0
  351. package/dist/chart/utils/linkedList.utils.js +138 -0
  352. package/dist/chart/utils/math.utils.d.ts +1 -1
  353. package/dist/chart/utils/math.utils.js +116 -2
  354. package/dist/chart/utils/merge.utils.d.ts +1 -1
  355. package/dist/chart/utils/merge.utils.js +57 -2
  356. package/dist/chart/utils/object.utils.d.ts +1 -1
  357. package/dist/chart/utils/object.utils.js +44 -2
  358. package/dist/chart/utils/{perfomance → performance}/animation-frame-cache.utils.d.ts +1 -1
  359. package/dist/chart/utils/performance/animation-frame-cache.utils.js +77 -0
  360. package/dist/chart/utils/{perfomance → performance}/debounce.utils.d.ts +1 -1
  361. package/dist/chart/utils/performance/debounce.utils.js +12 -0
  362. package/dist/chart/utils/{perfomance → performance}/memoize.utils.d.ts +1 -1
  363. package/dist/chart/utils/performance/memoize.utils.js +74 -0
  364. package/dist/chart/utils/{perfomance → performance}/request-animation-frame-throttle.utils.d.ts +1 -1
  365. package/dist/chart/utils/performance/request-animation-frame-throttle.utils.js +43 -0
  366. package/dist/chart/utils/{perfomance → performance}/throttle.utils.d.ts +1 -1
  367. package/dist/chart/utils/performance/throttle.utils.js +26 -0
  368. package/dist/chart/utils/price-increments.utils.d.ts +2 -1
  369. package/dist/chart/utils/price-increments.utils.js +128 -2
  370. package/dist/chart/utils/uuid.utils.d.ts +1 -1
  371. package/dist/chart/utils/uuid.utils.js +5 -2
  372. package/dist/dxchart.min.js +10 -13
  373. package/dist/index.d.ts +4 -4
  374. package/dist/index.js +21 -2
  375. package/package.json +4 -4
  376. package/dist/chart/utils/perfomance/animation-frame-cache.utils.js +0 -6
  377. package/dist/chart/utils/perfomance/memoize.utils.js +0 -6
  378. package/dist/chart/utils/perfomance/request-animation-frame-throttle.utils.js +0 -6
  379. package/dist/chart/utils/perfomance/throttle.utils.js +0 -6
@@ -1,6 +1,204 @@
1
1
  /*
2
- * Copyright (C) 2002 - 2023 Devexperts LLC
2
+ * Copyright (C) 2019 - 2023 Devexperts Solutions IE Limited
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{logValueToUnit as u,percentToUnit as d,calcLogValue as b}from"../../model/scaling/viewport.model";import{AnimationFrameCache as g}from"../../utils/perfomance/animation-frame-cache.utils";import{identity as m}from"../../utils/function.utils";import{MathUtils as l}from"../../utils/math.utils";import{PriceIncrementsUtils as L}from"../../utils/price-increments.utils";const x=0,p=.01;export class NumericAxisLabelsGenerator{constructor(e,s,a,t,i=!1,r,n,c=m,o=23){this.increment=e,this.startEndProvider=s,this.lengthProvider=a,this.valueFormatter=t,this.withZero=i,this.axisTypeProvider=r,this.baseLineProvider=n,this.labelFilter=c,this.singleLabelHeightPixels=o,this.gridDistanceMultipliers=[2,4,5,10],this.lastSingleLabelHeightValue=0,this.distanceBetweenLabelsChangeSubject=new h,this.newGeneratedLabelsSubject=new h,this.lastStart=0,this.lastEnd=0,this.labelsCache=new g(()=>this.labelFilter(this.doGenerateLabels()))}generateRegularLabels(e,s,a){const t=[];this.withZero&&t.push({value:0,text:"0"});let i=l.roundToNearest(e,a);for(;i<s;){const r=l.roundToNearest(i,a),n=this.valueFormatter(r);t.push({value:r,text:n}),i=l.roundDecimal(i+a)}return t}generatePercentLabels(e,s,a){const t=[],i=this.baseLineProvider();let r=l.roundToNearest(e,a);for(;r<s;){const n=l.roundToNearest(r,a),c=d(n,i),o=this.valueFormatter(c);t.push({value:n,text:o}),r=l.roundDecimal(r+a)}return t}generateLogarithmLabels(e,s,a){const t=[];let i=l.roundToNearest(e,a);for(;i<s;){const r=u(i),n=this.valueFormatter(r);t.push({value:i,text:n}),i=l.roundDecimal(i+a)}return t}doGenerateLabels(){var e;const s=this.lengthProvider();if(s<=0)return[];const[a,t]=this.calculateMinMax(),i=this.getAxisStep(a,t,s);this.lastSingleLabelHeightValue||(this.lastSingleLabelHeightValue=i);let r;const n=this.axisTypeProvider();if(n==="logarithmic"?r=this.generateLogarithmLabels(a,t,i):n==="percent"?r=this.generatePercentLabels(a,t,i):r=this.generateRegularLabels(a,t,i),this.lastSingleLabelHeightValue!==i&&this.labelsCache.cache){const c=(e=this.labelsCache.getLastCachedValue())!==null&&e!==void 0?e:[];this.distanceBetweenLabelsChangeSubject.next([c,r]),this.lastSingleLabelHeightValue=i}return this.newGeneratedLabelsSubject.next(r),r}calculateMinMax(){const[e,s]=this.startEndProvider(),a=this.lengthProvider(),t=NumericAxisLabelsGenerator.getLabelBounds(e,s,a);return[t[0],t[1]]}getAxisStep(e,s,a){const t=s-e,i=a/this.singleLabelHeightPixels,r=this.calculateIncrement(t),n=t/i;return this.calculateAxisStep(n,r)}observeDistanceBetweenLabelsChanged(){return this.distanceBetweenLabelsChangeSubject.asObservable()}observeLabelsChanged(){return this.newGeneratedLabelsSubject.asObservable()}calculateIncrement(e){if(this.increment)return this.increment;if(!isNaN(e)){const s=L.autoDetectIncrementOfValueRange(e);return this.adjustIncrementOnAxisType(s)}return this.adjustIncrementOnAxisType(p)}adjustIncrementOnAxisType(e){switch(this.axisTypeProvider()){case"percent":return e;case"logarithmic":const[s]=this.calculateMinMax(),t=u(s)+e;return b(t)-s;case"regular":return e}}generateNumericLabels(){const[e,s]=this.startEndProvider();return(e!==this.lastStart||s!==this.lastEnd)&&this.labelsCache.invalidate(),this.lastStart=e,this.lastEnd=s,this.labelsCache.calculateOrGet()}static getLabelBounds(e,s,a){const t=Math.abs((s-e)*(x/a));return[e-t,s+t]}calculateAxisStep(e,s){if(s===0)return console.error("NumericAxisLabelsGenerator failed at calculateAxisStep: increment = 0"),0;let a=s,t=s,i=0;for(;a<e&&a>0;)i>=this.gridDistanceMultipliers.length&&(i=0,t*=10),a=t*this.gridDistanceMultipliers[i++];return a}}
6
+ import { Subject } from 'rxjs';
7
+ import { logValueToUnit, percentToUnit, calcLogValue } from '../../model/scaling/viewport.model';
8
+ import { AnimationFrameCache } from '../../utils/performance/animation-frame-cache.utils';
9
+ import { identity } from '../../utils/function.utils';
10
+ import { MathUtils } from '../../utils/math.utils';
11
+ import { PriceIncrementsUtils } from '../../utils/price-increments.utils';
12
+ const PIXEL_OFFSET = 0;
13
+ const DEFAULT_REGULAR_INCREMENT = 0.01;
14
+ /**
15
+ * Generator of axes labels.
16
+ */
17
+ export class NumericAxisLabelsGenerator {
18
+ constructor(increment, startEndProvider, lengthProvider, valueFormatter, withZero = false, axisTypeProvider, baseLineProvider, labelFilter = identity, singleLabelHeightPixels = 23) {
19
+ this.increment = increment;
20
+ this.startEndProvider = startEndProvider;
21
+ this.lengthProvider = lengthProvider;
22
+ this.valueFormatter = valueFormatter;
23
+ this.withZero = withZero;
24
+ this.axisTypeProvider = axisTypeProvider;
25
+ this.baseLineProvider = baseLineProvider;
26
+ this.labelFilter = labelFilter;
27
+ this.singleLabelHeightPixels = singleLabelHeightPixels;
28
+ /**
29
+ * Multipliers which are using for price increments to
30
+ * calculate horizontal grid and price lines step.
31
+ */
32
+ this.gridDistanceMultipliers = [2, 4, 5, 10];
33
+ this.lastSingleLabelHeightValue = 0;
34
+ this.distanceBetweenLabelsChangeSubject = new Subject();
35
+ this.newGeneratedLabelsSubject = new Subject();
36
+ // optimization to not recalculate labels on same viewport
37
+ // TODO rework, generate 1-2 screens outside viewport as well
38
+ this.lastStart = 0;
39
+ this.lastEnd = 0;
40
+ this.labelsCache = new AnimationFrameCache(() => this.labelFilter(this.doGenerateLabels()));
41
+ }
42
+ generateRegularLabels(min, max, singleLabelHeightValue) {
43
+ const newLabels = [];
44
+ this.withZero && newLabels.push({ value: 0, text: '0' });
45
+ let value = MathUtils.roundToNearest(min, singleLabelHeightValue);
46
+ while (value < max) {
47
+ // Adjust value to increment
48
+ const adjustedValue = MathUtils.roundToNearest(value, singleLabelHeightValue);
49
+ const labelText = this.valueFormatter(adjustedValue);
50
+ newLabels.push({
51
+ value: adjustedValue,
52
+ text: labelText,
53
+ });
54
+ value = MathUtils.roundDecimal(value + singleLabelHeightValue);
55
+ }
56
+ return newLabels;
57
+ }
58
+ generatePercentLabels(min, max, singleLabelHeightValue) {
59
+ const newLabels = [];
60
+ const baseLine = this.baseLineProvider();
61
+ let value = MathUtils.roundToNearest(min, singleLabelHeightValue);
62
+ while (value < max) {
63
+ // Adjust value to increment
64
+ const adjustedValue = MathUtils.roundToNearest(value, singleLabelHeightValue);
65
+ const valueUnit = percentToUnit(adjustedValue, baseLine);
66
+ const labelText = this.valueFormatter(valueUnit);
67
+ newLabels.push({
68
+ value: adjustedValue,
69
+ text: labelText,
70
+ });
71
+ value = MathUtils.roundDecimal(value + singleLabelHeightValue);
72
+ }
73
+ return newLabels;
74
+ }
75
+ generateLogarithmLabels(min, max, singleLabelHeightValue) {
76
+ const newLabels = [];
77
+ let value = MathUtils.roundToNearest(min, singleLabelHeightValue);
78
+ while (value < max) {
79
+ const realValue = logValueToUnit(value);
80
+ const labelText = this.valueFormatter(realValue);
81
+ newLabels.push({
82
+ value,
83
+ text: labelText,
84
+ });
85
+ value = MathUtils.roundDecimal(value + singleLabelHeightValue);
86
+ }
87
+ return newLabels;
88
+ }
89
+ doGenerateLabels() {
90
+ var _a;
91
+ const lengthPixels = this.lengthProvider();
92
+ if (lengthPixels <= 0) {
93
+ return [];
94
+ }
95
+ const [min, max] = this.calculateMinMax();
96
+ const axisStep = this.getAxisStep(min, max, lengthPixels);
97
+ if (!this.lastSingleLabelHeightValue) {
98
+ this.lastSingleLabelHeightValue = axisStep;
99
+ }
100
+ let newLabels;
101
+ const axisType = this.axisTypeProvider();
102
+ if (axisType === 'logarithmic') {
103
+ newLabels = this.generateLogarithmLabels(min, max, axisStep);
104
+ }
105
+ else if (axisType === 'percent') {
106
+ newLabels = this.generatePercentLabels(min, max, axisStep);
107
+ }
108
+ else {
109
+ newLabels = this.generateRegularLabels(min, max, axisStep);
110
+ }
111
+ if (this.lastSingleLabelHeightValue !== axisStep && this.labelsCache.cache) {
112
+ const currentLabels = (_a = this.labelsCache.getLastCachedValue()) !== null && _a !== void 0 ? _a : [];
113
+ this.distanceBetweenLabelsChangeSubject.next([currentLabels, newLabels]);
114
+ this.lastSingleLabelHeightValue = axisStep;
115
+ }
116
+ this.newGeneratedLabelsSubject.next(newLabels);
117
+ return newLabels;
118
+ }
119
+ calculateMinMax() {
120
+ const [min, max] = this.startEndProvider();
121
+ const lengthPixels = this.lengthProvider();
122
+ const labelBounds = NumericAxisLabelsGenerator.getLabelBounds(min, max, lengthPixels);
123
+ return [labelBounds[0], labelBounds[1]];
124
+ }
125
+ getAxisStep(min, max, lengthPixels) {
126
+ const valueRange = max - min;
127
+ const labelsCount = lengthPixels / this.singleLabelHeightPixels;
128
+ const increment = this.calculateIncrement(valueRange);
129
+ const singleLabelHeightValue = valueRange / labelsCount;
130
+ return this.calculateAxisStep(singleLabelHeightValue, increment);
131
+ }
132
+ observeDistanceBetweenLabelsChanged() {
133
+ return this.distanceBetweenLabelsChangeSubject.asObservable();
134
+ }
135
+ observeLabelsChanged() {
136
+ return this.newGeneratedLabelsSubject.asObservable();
137
+ }
138
+ calculateIncrement(valueLength) {
139
+ // provided increment
140
+ if (this.increment) {
141
+ return this.increment;
142
+ }
143
+ // auto-generated increment
144
+ if (!isNaN(valueLength)) {
145
+ const calculatedIncrement = PriceIncrementsUtils.autoDetectIncrementOfValueRange(valueLength);
146
+ return this.adjustIncrementOnAxisType(calculatedIncrement);
147
+ }
148
+ return this.adjustIncrementOnAxisType(DEFAULT_REGULAR_INCREMENT);
149
+ }
150
+ adjustIncrementOnAxisType(increment) {
151
+ switch (this.axisTypeProvider()) {
152
+ case 'percent':
153
+ return increment;
154
+ case 'logarithmic':
155
+ const [logMin] = this.calculateMinMax();
156
+ const regularMin = logValueToUnit(logMin);
157
+ const regularIncrementedValue = regularMin + increment;
158
+ const incrementedLogValue = calcLogValue(regularIncrementedValue);
159
+ return incrementedLogValue - logMin;
160
+ case 'regular':
161
+ return increment;
162
+ }
163
+ }
164
+ // TODO rework, generator should act as model and update itself on scaleChanged
165
+ // TODO this should be called 1-2 times and very rarely, there should be 1-3 viewport of labels
166
+ generateNumericLabels() {
167
+ const [start, end] = this.startEndProvider();
168
+ if (start !== this.lastStart || end !== this.lastEnd) {
169
+ this.labelsCache.invalidate();
170
+ }
171
+ this.lastStart = start;
172
+ this.lastEnd = end;
173
+ return this.labelsCache.calculateOrGet();
174
+ }
175
+ static getLabelBounds(start, end, lengthPixels) {
176
+ const offset = Math.abs((end - start) * (PIXEL_OFFSET / lengthPixels));
177
+ return [start - offset, end + offset];
178
+ }
179
+ /**
180
+ * Calculates the distance between two axis labels as:
181
+ * - Take increment (0.01 for price or 1 for natural number);
182
+ * - Take step which was calculated as (chart height / max lines count provided by config (or default 10));
183
+ * - Multiplying increment with gridDistanceMultipliers until it will greater then step
184
+ * @param step
185
+ * @param increment
186
+ */
187
+ calculateAxisStep(step, increment) {
188
+ if (increment === 0) {
189
+ console.error('NumericAxisLabelsGenerator failed at calculateAxisStep: increment = 0');
190
+ return 0;
191
+ }
192
+ let distance = increment;
193
+ let currentNumberOrder = increment;
194
+ let multipliersPointer = 0;
195
+ while (distance < step && distance > 0) {
196
+ if (multipliersPointer >= this.gridDistanceMultipliers.length) {
197
+ multipliersPointer = 0;
198
+ currentNumberOrder *= 10;
199
+ }
200
+ distance = currentNumberOrder * this.gridDistanceMultipliers[multipliersPointer++];
201
+ }
202
+ return distance;
203
+ }
204
+ }
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (C) 2002 - 2023 Devexperts LLC
2
+ * Copyright (C) 2019 - 2023 Devexperts Solutions IE Limited
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
  */
@@ -13,14 +13,14 @@ import { ChartPanComponent } from '../pan/chart-pan.component';
13
13
  export declare class NavigationMapMoveHandler extends ChartBaseElement {
14
14
  private bus;
15
15
  private chartModel;
16
- private scaleModel;
16
+ private scale;
17
17
  private canvasInputListeners;
18
18
  private canvasBoundsContainer;
19
19
  private chartPanComponent;
20
20
  private leftKnotDragStartXRelative;
21
21
  private rightKnotDragStartXRelative;
22
22
  private lastMousePosition;
23
- constructor(bus: EventBus, chartModel: ChartModel, scaleModel: ScaleModel, canvasInputListeners: CanvasInputListenerComponent, canvasBoundsContainer: CanvasBoundsContainer, chartPanComponent: ChartPanComponent);
23
+ constructor(bus: EventBus, chartModel: ChartModel, scale: ScaleModel, canvasInputListeners: CanvasInputListenerComponent, canvasBoundsContainer: CanvasBoundsContainer, chartPanComponent: ChartPanComponent);
24
24
  /**
25
25
  * Method that activates the navigation map buttons and subscribes to their click and touch events.
26
26
  * It also subscribes to the xChanged event of the scaleModel and updates the canvasBoundsContainer accordingly.
@@ -1,6 +1,113 @@
1
1
  /*
2
- * Copyright (C) 2002 - 2023 Devexperts LLC
2
+ * Copyright (C) 2019 - 2023 Devexperts Solutions IE Limited
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{CanvasElement as s}from"../../canvas/canvas-bounds-container";import{ChartBaseElement as B}from"../../model/chart-base-element";import{DragNDropXComponent as c}from"../dran-n-drop_helper/drag-n-drop-x.component";const d=4;export class NavigationMapMoveHandler extends B{constructor(o,r,n,l,u,g){super(),this.bus=o,this.chartModel=r,this.scaleModel=n,this.canvasInputListeners=l,this.canvasBoundsContainer=u,this.chartPanComponent=g,this.leftKnotDragStartXRelative=0,this.rightKnotDragStartXRelative=0,this.lastMousePosition=0,this.leftKnotDragStart=a=>{const t=this.canvasBoundsContainer.getBounds(s.N_MAP_CHART);this.leftKnotDragStartXRelative=a.x-t.x-d},this.leftKnotDragTick=a=>{const{delta:t}=a,i=this.canvasBoundsContainer.getBounds(s.N_MAP_CHART).width,e=(this.leftKnotDragStartXRelative+t)/i;this.canvasBoundsContainer.leftRatio=e,this.scaleModel.setXScale(Math.round(this.chartModel.mainCandleSeries.dataPoints.length*this.canvasBoundsContainer.leftRatio),this.scaleModel.xEnd)},this.rightKnotDragStart=a=>{const t=this.canvasBoundsContainer.getBounds(s.N_MAP_CHART);this.rightKnotDragStartXRelative=a.x-t.x+d},this.rightKnotDragTick=a=>{const{delta:t}=a,i=this.canvasBoundsContainer.getBounds(s.N_MAP_CHART).width,e=(this.rightKnotDragStartXRelative+t)/i;this.canvasBoundsContainer.rightRatio=e,this.scaleModel.setXScale(this.scaleModel.xStart,Math.round(this.chartModel.mainCandleSeries.dataPoints.length*this.canvasBoundsContainer.rightRatio))},this.sliderDragStart=()=>{this.lastMousePosition=0},this.sliderDragTick=a=>{const{delta:t}=a,h=this.canvasBoundsContainer.getBounds(s.N_MAP_CHART),i=this.chartModel.mainCandleSeries.meanCandleWidth/(h.width/this.chartModel.mainCandleSeries.dataPoints.length),e=(this.lastMousePosition-t)*i;this.scaleModel.moveXStart(this.scaleModel.xStart-e),this.lastMousePosition=t};const C=this.canvasBoundsContainer.getBoundsHitTest(s.N_MAP_KNOT_L),v=this.canvasBoundsContainer.getBoundsHitTest(s.N_MAP_KNOT_R),M=new c(C,{onDragStart:this.leftKnotDragStart,onDragTick:this.leftKnotDragTick},this.canvasInputListeners,this.chartPanComponent),S=new c(v,{onDragStart:this.rightKnotDragStart,onDragTick:this.rightKnotDragTick},this.canvasInputListeners,this.chartPanComponent);this.addChildEntity(M),this.addChildEntity(S);const p=this.canvasBoundsContainer.getBoundsHitTest(s.N_MAP_SLIDER_WINDOW),D=new c(p,{onDragStart:this.sliderDragStart,onDragTick:this.sliderDragTick},this.canvasInputListeners,this.chartPanComponent);this.addChildEntity(D)}doActivate(){super.doActivate();const o=this.canvasBoundsContainer.getBoundsHitTest(s.N_MAP_BTN_L);this.addRxSubscription(this.canvasInputListeners.observeClick(o).subscribe(()=>{this.scaleModel.moveXStart(this.scaleModel.xStart-1)})),this.addRxSubscription(this.canvasInputListeners.observeTouchStart(o).subscribe(()=>{this.scaleModel.moveXStart(this.scaleModel.xStart-1)}));const r=this.canvasBoundsContainer.getBoundsHitTest(s.N_MAP_BTN_R);this.addRxSubscription(this.canvasInputListeners.observeClick(r).subscribe(()=>{this.scaleModel.moveXStart(this.scaleModel.xStart+1)})),this.addRxSubscription(this.canvasInputListeners.observeTouchStart(r).subscribe(()=>{this.scaleModel.moveXStart(this.scaleModel.xStart+1)})),this.addRxSubscription(this.scaleModel.xChanged.subscribe(()=>{const n=this.chartModel.mainCandleSeries;this.canvasBoundsContainer.leftRatio=n.dataIdxStart/(n.dataPoints.length-1),this.canvasBoundsContainer.rightRatio=n.dataIdxEnd/(n.dataPoints.length-1),this.canvasBoundsContainer.recalculateNavigationMapElementBounds(),this.bus.fireDraw()}))}}
6
+ import { CanvasElement } from '../../canvas/canvas-bounds-container';
7
+ import { ChartBaseElement } from '../../model/chart-base-element';
8
+ import { DragNDropXComponent } from '../dran-n-drop_helper/drag-n-drop-x.component';
9
+ // TODO find out why do we need this correction
10
+ const NAV_MAP_KNOT_CORRECTION = 4;
11
+ export class NavigationMapMoveHandler extends ChartBaseElement {
12
+ constructor(bus, chartModel, scale, canvasInputListeners, canvasBoundsContainer, chartPanComponent) {
13
+ super();
14
+ this.bus = bus;
15
+ this.chartModel = chartModel;
16
+ this.scale = scale;
17
+ this.canvasInputListeners = canvasInputListeners;
18
+ this.canvasBoundsContainer = canvasBoundsContainer;
19
+ this.chartPanComponent = chartPanComponent;
20
+ this.leftKnotDragStartXRelative = 0;
21
+ this.rightKnotDragStartXRelative = 0;
22
+ this.lastMousePosition = 0;
23
+ this.leftKnotDragStart = (point) => {
24
+ const nMapChart = this.canvasBoundsContainer.getBounds(CanvasElement.N_MAP_CHART);
25
+ this.leftKnotDragStartXRelative = point.x - nMapChart.x - NAV_MAP_KNOT_CORRECTION;
26
+ };
27
+ this.leftKnotDragTick = (dragInfo) => {
28
+ const { delta: xDelta } = dragInfo;
29
+ const chart = this.canvasBoundsContainer.getBounds(CanvasElement.N_MAP_CHART);
30
+ const knotsWindowWidth = chart.width;
31
+ const moveLeftRatio = (this.leftKnotDragStartXRelative + xDelta) / knotsWindowWidth;
32
+ this.canvasBoundsContainer.leftRatio = moveLeftRatio;
33
+ this.scale.setXScale(Math.round(this.chartModel.mainCandleSeries.dataPoints.length * this.canvasBoundsContainer.leftRatio), this.scale.xEnd);
34
+ };
35
+ this.rightKnotDragStart = (point) => {
36
+ const nMapChart = this.canvasBoundsContainer.getBounds(CanvasElement.N_MAP_CHART);
37
+ this.rightKnotDragStartXRelative = point.x - nMapChart.x + NAV_MAP_KNOT_CORRECTION;
38
+ };
39
+ this.rightKnotDragTick = (dragInfo) => {
40
+ const { delta: xDelta } = dragInfo;
41
+ const nMapChart = this.canvasBoundsContainer.getBounds(CanvasElement.N_MAP_CHART);
42
+ const nMapChartWidth = nMapChart.width;
43
+ const moveRightRatio = (this.rightKnotDragStartXRelative + xDelta) / nMapChartWidth;
44
+ this.canvasBoundsContainer.rightRatio = moveRightRatio;
45
+ this.scale.setXScale(this.scale.xStart, Math.round(this.chartModel.mainCandleSeries.dataPoints.length * this.canvasBoundsContainer.rightRatio));
46
+ };
47
+ this.sliderDragStart = () => {
48
+ this.lastMousePosition = 0;
49
+ };
50
+ this.sliderDragTick = (dragInfo) => {
51
+ const { delta: absoluteXDelta } = dragInfo;
52
+ const navMap = this.canvasBoundsContainer.getBounds(CanvasElement.N_MAP_CHART);
53
+ const moveMultiplier = this.chartModel.mainCandleSeries.meanCandleWidth /
54
+ (navMap.width / this.chartModel.mainCandleSeries.dataPoints.length);
55
+ const step = (this.lastMousePosition - absoluteXDelta) * moveMultiplier;
56
+ this.scale.moveXStart(this.scale.xStart - step);
57
+ this.lastMousePosition = absoluteXDelta;
58
+ };
59
+ //#region knots
60
+ const knotLeftHitTest = this.canvasBoundsContainer.getBoundsHitTest(CanvasElement.N_MAP_KNOT_L);
61
+ const knotRightHitTest = this.canvasBoundsContainer.getBoundsHitTest(CanvasElement.N_MAP_KNOT_R);
62
+ const leftKnotDNDComponent = new DragNDropXComponent(knotLeftHitTest, {
63
+ onDragStart: this.leftKnotDragStart,
64
+ onDragTick: this.leftKnotDragTick,
65
+ }, this.canvasInputListeners, this.chartPanComponent);
66
+ const rightKnotDNDComponent = new DragNDropXComponent(knotRightHitTest, {
67
+ onDragStart: this.rightKnotDragStart,
68
+ onDragTick: this.rightKnotDragTick,
69
+ }, this.canvasInputListeners, this.chartPanComponent);
70
+ this.addChildEntity(leftKnotDNDComponent);
71
+ this.addChildEntity(rightKnotDNDComponent);
72
+ //#endregion
73
+ //#region slider
74
+ const sliderHitTest = this.canvasBoundsContainer.getBoundsHitTest(CanvasElement.N_MAP_SLIDER_WINDOW);
75
+ const sliderDNDComponent = new DragNDropXComponent(sliderHitTest, {
76
+ onDragStart: this.sliderDragStart,
77
+ onDragTick: this.sliderDragTick,
78
+ }, this.canvasInputListeners, this.chartPanComponent);
79
+ this.addChildEntity(sliderDNDComponent);
80
+ //#endregion
81
+ }
82
+ /**
83
+ * Method that activates the navigation map buttons and subscribes to their click and touch events.
84
+ * It also subscribes to the xChanged event of the scaleModel and updates the canvasBoundsContainer accordingly.
85
+ * @returns {void}
86
+ */
87
+ doActivate() {
88
+ super.doActivate();
89
+ //#region btns
90
+ const btnLeftHitTest = this.canvasBoundsContainer.getBoundsHitTest(CanvasElement.N_MAP_BTN_L);
91
+ this.addRxSubscription(this.canvasInputListeners.observeClick(btnLeftHitTest).subscribe(() => {
92
+ this.scale.moveXStart(this.scale.xStart - 1);
93
+ }));
94
+ this.addRxSubscription(this.canvasInputListeners.observeTouchStart(btnLeftHitTest).subscribe(() => {
95
+ this.scale.moveXStart(this.scale.xStart - 1);
96
+ }));
97
+ const btnRightHitTest = this.canvasBoundsContainer.getBoundsHitTest(CanvasElement.N_MAP_BTN_R);
98
+ this.addRxSubscription(this.canvasInputListeners.observeClick(btnRightHitTest).subscribe(() => {
99
+ this.scale.moveXStart(this.scale.xStart + 1);
100
+ }));
101
+ this.addRxSubscription(this.canvasInputListeners.observeTouchStart(btnRightHitTest).subscribe(() => {
102
+ this.scale.moveXStart(this.scale.xStart + 1);
103
+ }));
104
+ this.addRxSubscription(this.scale.xChanged.subscribe(() => {
105
+ const candleSeries = this.chartModel.mainCandleSeries;
106
+ this.canvasBoundsContainer.leftRatio = candleSeries.dataIdxStart / (candleSeries.dataPoints.length - 1);
107
+ this.canvasBoundsContainer.rightRatio = candleSeries.dataIdxEnd / (candleSeries.dataPoints.length - 1);
108
+ this.canvasBoundsContainer.recalculateNavigationMapElementBounds();
109
+ this.bus.fireDraw();
110
+ }));
111
+ //#endregion
112
+ }
113
+ }
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (C) 2002 - 2023 Devexperts LLC
2
+ * Copyright (C) 2019 - 2023 Devexperts Solutions IE Limited
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
  */
@@ -1,6 +1,117 @@
1
1
  /*
2
- * Copyright (C) 2002 - 2023 Devexperts LLC
2
+ * Copyright (C) 2019 - 2023 Devexperts Solutions IE Limited
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{merge as C}from"rxjs";import{filter as _,pairwise as N}from"rxjs/operators";import{ChartBaseElement as f}from"../../model/chart-base-element";import{CanvasElement as n}from"../../canvas/canvas-bounds-container";import{EVENT_RESIZED as g}from"../../events/events";import{NavigationMapDrawer as I}from"./navigation-map.drawer";import{NavigationMapMoveHandler as E}from"./navigation-map-move.handler";import{floor as A}from"../../utils/math.utils";export class NavigationMapComponent extends f{constructor(a,t,c,s,i,m,o,h,l,e){super(),this.eventBus=a,this.chartModel=t,this.canvasModel=c,this.config=s,this.canvasInputListeners=i,this.canvasBoundsContainer=m,this.chartPanComponent=l,this.visualCandles=[];const d=new I(s,t,c,m,h,()=>this.visualCandles);o.addDrawer(d,n.N_MAP_CHART),this.navigationMapMoveHandler=new E(this.eventBus,this.chartModel,this.chartModel.scaleModel,this.canvasInputListeners,this.canvasBoundsContainer,this.chartPanComponent),e.setCursorForCanvasEl(n.N_MAP_CHART,s.components.navigationMap.cursors.chart),e.setCursorForCanvasEl(n.N_MAP_BTN_L,s.components.navigationMap.cursors.buttonLeft),e.setCursorForCanvasEl(n.N_MAP_BTN_R,s.components.navigationMap.cursors.buttonRight),e.setCursorForCanvasEl(n.N_MAP_KNOT_L,s.components.navigationMap.cursors.leftResizer),e.setCursorForCanvasEl(n.N_MAP_KNOT_R,s.components.navigationMap.cursors.rightResizer),e.setCursorForCanvasEl(n.N_MAP_SLIDER_WINDOW,s.components.navigationMap.cursors.slider)}doActivate(){super.doActivate(),this.addRxSubscription(C(this.chartModel.observeCandlesChanged(),this.canvasBoundsContainer.observeBoundsChanged(n.N_MAP),this.chartModel.scaleModel.xChanged.pipe(N(),_(([a,t])=>{const s=a.start<0||a.end>0,i=t.start<0||t.end>0;return s&&!i||i}))).subscribe(()=>{this.config.components.navigationMap.visible&&(this.visualCandles=this.makeVisualCandles(),this.canvasModel.fireDraw())}))}makeVisualCandles(){var a;const t=this.chartModel.getCandles();if(!t.length)return[];const c=this.chartModel.mainCandleSeries.dataIdxStart,s=this.chartModel.mainCandleSeries.dataIdxEnd,i=Math.round(Math.max(-c,0)),m=Math.max(this.chartModel.getCandlesCountWithRightOffset(),s)+i;let o=Number.NEGATIVE_INFINITY,h=Number.POSITIVE_INFINITY;const l=this.canvasBoundsContainer.getBounds(n.N_MAP_CHART),e=l.width,d=[];let v=0,r,p;for(r=0;r<e;r++)p=A(r*m/e)-i,p in t?(d[r]=t[p].close,v=(a=d[r])!==null&&a!==void 0?a:0,o=Math.max(o,v),h=Math.min(h,v)):d[r]=0;return o-=h,d.map((u,M)=>[M+l.x,(o+h-u)*l.height/o+l.y])}setVisible(a=!0){var t;!((t=this.config.components)===null||t===void 0)&&t.navigationMap&&(this.config.components.navigationMap.visible=a,this.eventBus.fire(g),this.canvasModel.fireDraw())}}
6
+ import { merge } from 'rxjs';
7
+ import { filter, pairwise } from 'rxjs/operators';
8
+ import { ChartBaseElement } from '../../model/chart-base-element';
9
+ import { CanvasElement } from '../../canvas/canvas-bounds-container';
10
+ import { EVENT_RESIZED } from '../../events/events';
11
+ import { NavigationMapDrawer } from './navigation-map.drawer';
12
+ import { NavigationMapMoveHandler } from './navigation-map-move.handler';
13
+ import { floor } from '../../utils/math.utils';
14
+ /**
15
+ * Navigation map component for chart.
16
+ * Controls navigation map in the bottom.
17
+ */
18
+ export class NavigationMapComponent extends ChartBaseElement {
19
+ constructor(eventBus, chartModel, canvasModel, config, canvasInputListeners, canvasBoundsContainer, drawingManager, formatterFactory, chartPanComponent, cursorHandler) {
20
+ super();
21
+ this.eventBus = eventBus;
22
+ this.chartModel = chartModel;
23
+ this.canvasModel = canvasModel;
24
+ this.config = config;
25
+ this.canvasInputListeners = canvasInputListeners;
26
+ this.canvasBoundsContainer = canvasBoundsContainer;
27
+ this.chartPanComponent = chartPanComponent;
28
+ this.visualCandles = [];
29
+ const navigationMapDrawer = new NavigationMapDrawer(config, chartModel, canvasModel, canvasBoundsContainer, formatterFactory, () => this.visualCandles);
30
+ drawingManager.addDrawer(navigationMapDrawer, CanvasElement.N_MAP_CHART);
31
+ this.navigationMapMoveHandler = new NavigationMapMoveHandler(this.eventBus, this.chartModel, this.chartModel.scale, this.canvasInputListeners, this.canvasBoundsContainer, this.chartPanComponent);
32
+ cursorHandler.setCursorForCanvasEl(CanvasElement.N_MAP_CHART, config.components.navigationMap.cursors.chart);
33
+ cursorHandler.setCursorForCanvasEl(CanvasElement.N_MAP_BTN_L, config.components.navigationMap.cursors.buttonLeft);
34
+ cursorHandler.setCursorForCanvasEl(CanvasElement.N_MAP_BTN_R, config.components.navigationMap.cursors.buttonRight);
35
+ cursorHandler.setCursorForCanvasEl(CanvasElement.N_MAP_KNOT_L, config.components.navigationMap.cursors.leftResizer);
36
+ cursorHandler.setCursorForCanvasEl(CanvasElement.N_MAP_KNOT_R, config.components.navigationMap.cursors.rightResizer);
37
+ cursorHandler.setCursorForCanvasEl(CanvasElement.N_MAP_SLIDER_WINDOW, config.components.navigationMap.cursors.slider);
38
+ }
39
+ /**
40
+ * Method to activate the chart. It subscribes to the observables of the chartModel and canvasBoundsContainer.
41
+ * It also subscribes to the xChanged observable of the chartModel's scaleModel and filters the values to check
42
+ * if the previous viewport had no-candles area and current viewport contains only candles or if the current viewport
43
+ * has no-candles area. If the navigationMap component is visible, it makes visual candles and fires the draw event
44
+ * of the canvasModel.
45
+ */
46
+ doActivate() {
47
+ super.doActivate();
48
+ this.addRxSubscription(merge(this.chartModel.observeCandlesChanged(), this.canvasBoundsContainer.observeBoundsChanged(CanvasElement.N_MAP), this.chartModel.scale.xChanged.pipe(pairwise(), filter(([prevScale, curScale]) => {
49
+ // TODO rework
50
+ const itemsCount = 0; //this.chartModel.scale.getItemsCount();
51
+ const prev = prevScale.start < 0 || prevScale.end > itemsCount;
52
+ const cur = curScale.start < 0 || curScale.end > itemsCount;
53
+ // trigger recalculation visual candles for nav map if previous viewport had
54
+ // no-candles area and current viewport contains only candles.
55
+ // OR if current viewport has no-candles area.
56
+ return (prev && !cur) || cur;
57
+ }))).subscribe(() => {
58
+ if (this.config.components.navigationMap.visible) {
59
+ this.visualCandles = this.makeVisualCandles();
60
+ this.canvasModel.fireDraw();
61
+ }
62
+ }));
63
+ }
64
+ /**
65
+ * This function generates an array of visual candles based on the data provided by the chartModel.
66
+ * It calculates the maximum and minimum values of the candles and maps them to the canvas bounds.
67
+ * @returns {Array<[number, number]>} An array of tuples containing the x and y coordinates of each visual candle.
68
+ */
69
+ makeVisualCandles() {
70
+ var _a;
71
+ const candles = this.chartModel.getCandles();
72
+ if (!candles.length) {
73
+ return [];
74
+ }
75
+ const firstId = this.chartModel.mainCandleSeries.dataIdxStart;
76
+ const lastId = this.chartModel.mainCandleSeries.dataIdxEnd;
77
+ const leftSideOffsetVisible = Math.round(Math.max(-firstId, 0));
78
+ // take into account left offset and a new rule using which we can scroll to right, so only two candles on left are visible
79
+ const len = Math.max(this.chartModel.getCandlesCountWithRightOffset(), lastId) + leftSideOffsetVisible;
80
+ let max = Number.NEGATIVE_INFINITY;
81
+ let min = Number.POSITIVE_INFINITY;
82
+ const nMapChart = this.canvasBoundsContainer.getBounds(CanvasElement.N_MAP_CHART);
83
+ const width = nMapChart.width;
84
+ const res = [];
85
+ let candleClose = 0;
86
+ let x;
87
+ let idx;
88
+ for (x = 0; x < width; x++) {
89
+ idx = floor((x * len) / width) - leftSideOffsetVisible;
90
+ if (idx in candles) {
91
+ res[x] = candles[idx].close;
92
+ candleClose = (_a = res[x]) !== null && _a !== void 0 ? _a : 0;
93
+ max = Math.max(max, candleClose);
94
+ min = Math.min(min, candleClose);
95
+ }
96
+ else {
97
+ res[x] = 0;
98
+ }
99
+ }
100
+ max -= min;
101
+ return res.map((y, x) => {
102
+ return [x + nMapChart.x, ((max + min - y) * nMapChart.height) / max + nMapChart.y];
103
+ });
104
+ }
105
+ /**
106
+ * Sets the visibility of the navigation map component.
107
+ * @param {boolean} visible - Whether the navigation map component should be visible or not. Default is true.
108
+ */
109
+ setVisible(visible = true) {
110
+ var _a;
111
+ if ((_a = this.config.components) === null || _a === void 0 ? void 0 : _a.navigationMap) {
112
+ this.config.components.navigationMap.visible = visible;
113
+ this.eventBus.fire(EVENT_RESIZED);
114
+ this.canvasModel.fireDraw();
115
+ }
116
+ }
117
+ }
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (C) 2002 - 2023 Devexperts LLC
2
+ * Copyright (C) 2019 - 2023 Devexperts Solutions IE Limited
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
  */