@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,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,84 @@
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
- export const validateParsedTimeFormat=e=>{switch(e.key){case"second":case"minute":return a(e.value);case"hour":return o(e.value);case"day":return s(e.value);case"month":return u(e.value);case"year":return d(e.value);case"week-weekday":const r=c(e.week),n=i(e.weekday);return r&&n;case"lessThanSecond":return!0;default:return!1}};const a=e=>e>0&&e<=60,o=e=>e>0&&e<=24,s=e=>e>0&&e<=31,i=e=>t(e)?e>=1&&e<=7:!1,c=e=>e==="$"?!0:t(e)?e>=1&&e<=6:!1,u=e=>e>0&&e<=12,d=e=>e>0,t=e=>!isNaN(e)&&isFinite(e);
6
+ /**
7
+ * Validators are aimed to check if the `ParsedTimeFormat` is correct
8
+ *
9
+ * @example
10
+ * const timeFormat: ParsedTimeFormat = {
11
+ * key: 'day',
12
+ * value: 13,
13
+ * exact: true
14
+ * };
15
+ * // valid, because day should be between 1 and 31
16
+ * const valid = validateParsedTimeFormat(timeFormat); // true
17
+ *
18
+ * @example
19
+ * const timeFormat: ParsedTimeFormat = {
20
+ * key: 'minute',
21
+ * value: 255,
22
+ * exact: true
23
+ * };
24
+ * // INvalid, because minute should be between 1 and 60
25
+ * const valid = validateParsedTimeFormat(timeFormat); // false
26
+ */
27
+ export const validateParsedTimeFormat = (parsed) => {
28
+ switch (parsed.key) {
29
+ case 'second':
30
+ case 'minute':
31
+ return secondsAndMinutesValidator(parsed.value);
32
+ case 'hour':
33
+ return hoursValidator(parsed.value);
34
+ case 'day':
35
+ return dayValidatior(parsed.value);
36
+ case 'month':
37
+ return monthValidatior(parsed.value);
38
+ case 'year':
39
+ return yearValidatior(parsed.value);
40
+ case 'week-weekday':
41
+ const weekValid = weekValidator(parsed.week);
42
+ const weekdayValid = weekdayValidator(parsed.weekday);
43
+ return weekValid && weekdayValid;
44
+ case 'lessThanSecond':
45
+ return true;
46
+ default:
47
+ return false;
48
+ }
49
+ };
50
+ //#region validators
51
+ const secondsAndMinutesValidator = (value) => {
52
+ return value > 0 && value <= 60;
53
+ };
54
+ const hoursValidator = (value) => {
55
+ return value > 0 && value <= 24;
56
+ };
57
+ const dayValidatior = (value) => {
58
+ return value > 0 && value <= 31;
59
+ };
60
+ const weekdayValidator = (value) => {
61
+ if (!isValidNumber(value)) {
62
+ return false;
63
+ }
64
+ return value >= 1 && value <= 7;
65
+ };
66
+ const weekValidator = (value) => {
67
+ if (value === '$') {
68
+ return true;
69
+ }
70
+ if (!isValidNumber(value)) {
71
+ return false;
72
+ }
73
+ return value >= 1 && value <= 6;
74
+ };
75
+ const monthValidatior = (value) => {
76
+ return value > 0 && value <= 12;
77
+ };
78
+ const yearValidatior = (value) => {
79
+ return value > 0;
80
+ };
81
+ const isValidNumber = (value) => {
82
+ return !isNaN(value) && isFinite(value);
83
+ };
84
+ //#endregion validators
@@ -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,19 @@
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
- const a="week-weekday",r=["second","minute","hour","day","month","year"],t=["lessThanSecond"];export const timeFormatConfirugableGuard=e=>r.some(o=>o===e),weekWeekdayGuard=e=>e==="week-weekday",timeFormatNoNConfirugableGuard=e=>t.some(o=>o===e);
6
+ const weekWeekday = 'week-weekday';
7
+ const timeFormatsConfirugable = ['second', 'minute', 'hour', 'day', 'month', 'year'];
8
+ const timeFormatsNoNConfirugable = ['lessThanSecond'];
9
+ //#region `ParsedTimeFormat` guards
10
+ export const timeFormatConfirugableGuard = (key) => {
11
+ return timeFormatsConfirugable.some(type => type === key);
12
+ };
13
+ export const weekWeekdayGuard = (key) => {
14
+ return key === 'week-weekday';
15
+ };
16
+ export const timeFormatNoNConfirugableGuard = (key) => {
17
+ return timeFormatsNoNConfirugable.some(type => type === key);
18
+ };
19
+ //#endregion guards
@@ -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
  */
@@ -59,4 +59,4 @@ export declare const filterMapGroupedLabelsByCoverUpLevel: (labelsGroupedByWeigh
59
59
  * @param {ScaleModel} scaleModel - chart scale model
60
60
  * @returns
61
61
  */
62
- export declare const overlappingPredicate: (ctx: CanvasRenderingContext2D, config: FullChartConfig, label: NumericAxisLabel, nextLabel: NumericAxisLabel, scaleModel: ScaleModel, overlapingDistance: number) => boolean;
62
+ export declare const overlappingPredicate: (ctx: CanvasRenderingContext2D, config: FullChartConfig, label: NumericAxisLabel, nextLabel: NumericAxisLabel, scale: ScaleModel, overlapingDistance: number) => boolean;
@@ -1,6 +1,148 @@
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{calculateTextWidth as w}from"../../../utils/canvas/canvas-font-measure-tool.utils";import{XAxisTimeLabelsDrawer as W}from"../x-axis-time-labels.drawer";const d={lessThanSecond:0,second:100,minute:200,hour:300,day:400,"week-weekday":500,month:600,year:1e4};export const getWeightFromTimeFormat=e=>{switch(e.key){case"second":case"minute":case"hour":case"day":case"month":case"year":return d[e.key]+e.value;case"lessThanSecond":return d[e.key];case"week-weekday":return d[e.key]+(e.week==="$"?9:e.week)+e.weekday*10}},groupLabelsByWeight=e=>{const s={};return e.forEach(n=>{const t=s[n.weight];t===void 0?s[n.weight]=[n]:t.push(n)}),s},filterMapGroupedLabelsByCoverUpLevel=(e,s)=>{const n=Object.keys(e).map(o=>parseInt(o,10)).sort((o,i)=>i-o);let t=[];for(const o of n){const i=e[o];if(!i)continue;const c=[...t];t=[];const a=c.length,l=i.length;let r=0,h=1/0,p=-1/0;for(let g=0;g<l;g++){const y=i[g],u=y.idx;for(;r<a;){const k=c[r],x=k.idx;if(u>x)r++,t.push(k),p=x,h=1/0;else{h=x;break}}h-u>=s&&u-p>=s&&(t.push(y),p=u)}for(;r<a;)t.push(c[r]),r++}return t},overlappingPredicate=(e,s,n,t,o,i)=>{const c=W.getFontFromConfig(s),a=w(n.text,e,c),l=w(t.text,e,c),r=o.toX(n.value)+a/2;return o.toX(t.value)-l/2-r<i};
6
+ import { calculateTextWidth } from '../../../utils/canvas/canvas-font-measure-tool.utils';
7
+ import { XAxisTimeLabelsDrawer } from '../x-axis-time-labels.drawer';
8
+ const timeFormatToWeightMap = {
9
+ lessThanSecond: 0,
10
+ second: 100,
11
+ minute: 200,
12
+ hour: 300,
13
+ day: 400,
14
+ 'week-weekday': 500,
15
+ month: 600,
16
+ year: 10000,
17
+ };
18
+ /**
19
+ * Generates `weight` based on the {@link ParsedTimeFormat}
20
+ * @example
21
+ * const timeFormat: ParsedTimeFormat = {
22
+ * key: 'day',
23
+ * value: 15,
24
+ * exact: false
25
+ * }
26
+ * const weight = getWeightFromTimeFormat(timeFormat); // 415
27
+ */
28
+ export const getWeightFromTimeFormat = (format) => {
29
+ switch (format.key) {
30
+ case 'second':
31
+ case 'minute':
32
+ case 'hour':
33
+ case 'day':
34
+ case 'month':
35
+ case 'year':
36
+ return timeFormatToWeightMap[format.key] + format.value;
37
+ case 'lessThanSecond':
38
+ return timeFormatToWeightMap[format.key];
39
+ case 'week-weekday':
40
+ return timeFormatToWeightMap[format.key] + (format.week === '$' ? 9 : format.week) + format.weekday * 10;
41
+ }
42
+ };
43
+ /**
44
+ * Group {@link XAxisLabelWeighted} by `weight` in a `Record<number, XAxisLabelWeighted[]>`
45
+ * @example
46
+ * const groupedLabels = {
47
+ * 601: Array(359),
48
+ * 415: Array(1685),
49
+ * ...
50
+ * }
51
+ */
52
+ export const groupLabelsByWeight = (weightedLabels) => {
53
+ const labelsGroupedByWeight = {};
54
+ weightedLabels.forEach(weightedLabel => {
55
+ const labelsByWeight = labelsGroupedByWeight[weightedLabel.weight];
56
+ if (labelsByWeight === undefined) {
57
+ labelsGroupedByWeight[weightedLabel.weight] = [weightedLabel];
58
+ }
59
+ else {
60
+ labelsByWeight.push(weightedLabel);
61
+ }
62
+ });
63
+ return labelsGroupedByWeight;
64
+ };
65
+ /**
66
+ * FilterMap grouped {@link XAxisLabelWeighted} labels by `coverUpLevel` value
67
+ *
68
+ * @see
69
+ * `coverUpLevel` - is a ratio, which tells us how much more space the widest label
70
+ * will take relative to the candle width
71
+ * @example
72
+ * const maxLabelWidthPx = 10;
73
+ * const meanCandleWidthPx = 5;
74
+ * const coverUpLevel = Math.round(10 / 5); // 2
75
+ *
76
+ * // `coverUpLebel = 2` means that label for a candle take `2x` more width
77
+ * // than the candle on the screen for that label.
78
+ * // That kind of fact give us a hint, that we can't draw labels for `i - 1` and `i + 1` candles,
79
+ * // because it wouldn't be enough space (`i` candle label will take all the place).
80
+ * // But we can draw labels for `i - 2` and `i + 2` candles.
81
+ * @see
82
+ * That algorightm do exactly that - it filters out labels (taking in mind its weight, weight is a priority) that couldn't be drawn
83
+ * because there's not enough space for them.
84
+ */
85
+ export const filterMapGroupedLabelsByCoverUpLevel = (labelsGroupedByWeight, coverUpLevel) => {
86
+ const weights = Object.keys(labelsGroupedByWeight)
87
+ .map(item => parseInt(item, 10))
88
+ .sort((a, b) => b - a);
89
+ let labels = [];
90
+ // TODO: ADD COMMENTS, WE NEED COMMENTS
91
+ for (const weight of weights) {
92
+ const currentWeightLabels = labelsGroupedByWeight[weight];
93
+ if (!currentWeightLabels) {
94
+ continue;
95
+ }
96
+ const previousWeightLabels = [...labels];
97
+ labels = [];
98
+ const previousWeightLabelsLength = previousWeightLabels.length;
99
+ const currentWeightLength = currentWeightLabels.length;
100
+ let previousWeightLabelsPointer = 0;
101
+ let rightIndex = Infinity;
102
+ let leftIndex = -Infinity;
103
+ for (let i = 0; i < currentWeightLength; i++) {
104
+ const mark = currentWeightLabels[i];
105
+ const currentIndex = mark.idx;
106
+ while (previousWeightLabelsPointer < previousWeightLabelsLength) {
107
+ const lastMark = previousWeightLabels[previousWeightLabelsPointer];
108
+ const lastIndex = lastMark.idx;
109
+ if (currentIndex > lastIndex) {
110
+ previousWeightLabelsPointer++;
111
+ labels.push(lastMark);
112
+ leftIndex = lastIndex;
113
+ rightIndex = Infinity;
114
+ }
115
+ else {
116
+ rightIndex = lastIndex;
117
+ break;
118
+ }
119
+ }
120
+ if (rightIndex - currentIndex >= coverUpLevel && currentIndex - leftIndex >= coverUpLevel) {
121
+ labels.push(mark);
122
+ leftIndex = currentIndex;
123
+ }
124
+ }
125
+ while (previousWeightLabelsPointer < previousWeightLabelsLength) {
126
+ labels.push(previousWeightLabels[previousWeightLabelsPointer]);
127
+ previousWeightLabelsPointer++;
128
+ }
129
+ }
130
+ return labels;
131
+ };
132
+ /**
133
+ * The function compares 2 labels and checks if they overlap each other
134
+ * @param {CanvasRenderingContext2D} ctx - canvas context
135
+ * @param {FullChartConfig} config - chart config
136
+ * @param {NumericAxisLabel} label - first label to compare
137
+ * @param {NumericAxisLabel} nextLabel - second label to compare
138
+ * @param {ScaleModel} scaleModel - chart scale model
139
+ * @returns
140
+ */
141
+ export const overlappingPredicate = (ctx, config, label, nextLabel, scale, overlapingDistance) => {
142
+ const font = XAxisTimeLabelsDrawer.getFontFromConfig(config);
143
+ const currentLabelTextWidth = calculateTextWidth(label.text, ctx, font);
144
+ const nextLabelTextWidth = calculateTextWidth(nextLabel.text, ctx, font);
145
+ const curPx = scale.toX(label.value) + currentLabelTextWidth / 2;
146
+ const nextPx = scale.toX(nextLabel.value) - nextLabelTextWidth / 2;
147
+ return nextPx - curPx < overlapingDistance;
148
+ };
@@ -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,78 @@
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{typedEntries_UNSAFE as g}from"../../../utils/object.utils";import{timeFormatMatcherFactory as f}from"./parser/time-formats-matchers.functions";import{parseTimeFormatsFromKey as h}from"./parser/time-formats-parser.functions";import{validateParsedTimeFormat as l}from"./parser/time-formats-validators.functions";import{getWeightFromTimeFormat as p}from"./x-axis-weights.functions";const F=(o,m,e,n)=>{var r,t;const a=n(o.getTime()),i=n(m.getTime());for(const[c,s]of e)if(s(a,i))return c;return(t=(r=e[e.length-1])===null||r===void 0?void 0:r[0])!==null&&t!==void 0?t:0};export function mapCandlesToWeightedPoints(o,m,e){const n=new Array(o.length);let r=new Date(0);for(let t=0;t<o.length;t++){const a=o[t],i=new Date(a.candle.timestamp),c={weight:F(i,r,m,e)};n[t]=c,r=i}return n}export const generateWeightsMapForConfig=o=>{const m={},e={};return g(o).forEach(([n,r])=>{const t=h(n),a=t===null?!1:l(t);if(t&&a){const i=p(t);m[i]=r,e[i]=f(t)}}),{weightToTimeFormatsDict:m,weightToTimeFormatMatcherDict:e}};
6
+ import { typedEntries_UNSAFE } from '../../../utils/object.utils';
7
+ import { timeFormatMatcherFactory } from './parser/time-formats-matchers.functions';
8
+ import { parseTimeFormatsFromKey } from './parser/time-formats-parser.functions';
9
+ import { validateParsedTimeFormat } from './parser/time-formats-validators.functions';
10
+ import { getWeightFromTimeFormat } from './x-axis-weights.functions';
11
+ /**
12
+ * Returns the weight for a given date.
13
+ * Under the hood compares given date and previous date, to prevent generating the same label twice.
14
+ * It loops through the record of `weight` and corresponding {@link TimeFormatMatcher} pair, and tests the given date, if all the
15
+ * conditions are true, and it match some matcher, the weight returned for the given date.
16
+ * @see
17
+ * Weights order matters!
18
+ * @see
19
+ * returns `null` if date doesn't match any condition
20
+ */
21
+ const getWeightByDate = (currentDate, previousDate, sortedWeights, tzOffset) => {
22
+ var _a, _b;
23
+ const offsetCurrentDate = tzOffset(currentDate.getTime());
24
+ const offsetPrevDate = tzOffset(previousDate.getTime());
25
+ for (const [weight, timeMatcher] of sortedWeights) {
26
+ if (timeMatcher(offsetCurrentDate, offsetPrevDate)) {
27
+ return weight;
28
+ }
29
+ }
30
+ // if date doesn't match any condition get the lowest weight
31
+ return (_b = (_a = sortedWeights[sortedWeights.length - 1]) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : 0;
32
+ };
33
+ /**
34
+ * Transforms {@link VisualCandle} to {@link WeightedPoint}
35
+ */
36
+ export function mapCandlesToWeightedPoints(visualCandles, sortedWeights, tzOffset) {
37
+ const result = new Array(visualCandles.length);
38
+ // assume that candles` timestamp before the first visual candle is unreachable
39
+ let prevDate = new Date(0);
40
+ for (let i = 0; i < visualCandles.length; i++) {
41
+ const currentCandle = visualCandles[i];
42
+ const currentDate = new Date(currentCandle.candle.timestamp);
43
+ const currentWeightedPoint = {
44
+ weight: getWeightByDate(currentDate, prevDate, sortedWeights, tzOffset),
45
+ };
46
+ result[i] = currentWeightedPoint;
47
+ prevDate = currentDate;
48
+ }
49
+ return result;
50
+ }
51
+ /**
52
+ * Generates two maps for a given config.
53
+ * 1st map is { [weight]: [format] } to control which format should be used for a given weight;
54
+ * 2nd map is { [weight]: [Matcher] } to test a date for a match for a given weight;
55
+ *
56
+ * @example
57
+ * const config: Record<TimeFormatWithDuration, string> = {
58
+ * 'day_15': 'dd.MM',
59
+ * 'month_7!': 'MMM'
60
+ * }
61
+ * const { map1, map2 } = generateWeightsMapForConfig(config);
62
+ * // map1 = { 415: 'dd.MM', 607: 'MMM' };
63
+ * // map2 = { 415: DayMatcher, 607: MonthMatcher }
64
+ */
65
+ export const generateWeightsMapForConfig = (config) => {
66
+ const weightToTimeFormatsDict = {};
67
+ const weightToTimeFormatMatcherDict = {};
68
+ typedEntries_UNSAFE(config).forEach(([item, format]) => {
69
+ const timeFormat = parseTimeFormatsFromKey(item);
70
+ const validFormat = timeFormat === null ? false : validateParsedTimeFormat(timeFormat);
71
+ if (timeFormat && validFormat) {
72
+ const weight = getWeightFromTimeFormat(timeFormat);
73
+ weightToTimeFormatsDict[weight] = format;
74
+ weightToTimeFormatMatcherDict[weight] = timeFormatMatcherFactory(timeFormat);
75
+ }
76
+ });
77
+ return { weightToTimeFormatsDict, weightToTimeFormatMatcherDict };
78
+ };
@@ -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,54 @@
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 A}from"../../canvas/canvas-bounds-container";import{redrawBackgroundArea as u}from"../../drawers/chart-background.drawer";const f={x:4,y:4};export function drawXAxisLabel(m,o,y,h,e){var i,r;const d=(i=e.alignType)!==null&&i!==void 0?i:"middle",{fontSize:l,fontFamily:p,padding:x}=h.components.xAxis,T=(r=x.top)!==null&&r!==void 0?r:0,t=y.getBounds(A.X_AXIS);o.save(),o.font=`bold ${l}px ${p}`;const a=o.measureText(e.text).width+f.x*2;let n=0;const s=e.x;switch(d){case"start":n=s-a;break;case"end":n=s;break;case"middle":default:n=s-a/2;break}u(m,o,n,t.y,a,t.height-1),d!=="middle"&&(o.strokeStyle=e.color,o.beginPath(),o.moveTo(s,t.y),o.lineTo(s,t.y+t.height),o.stroke()),o.fillStyle=e.color;const c=n+f.x,g=t.y+T+l;o.fillText(e.text,c,g),o.restore()}
6
+ import { CanvasElement } from '../../canvas/canvas-bounds-container';
7
+ import { redrawBackgroundArea } from '../../drawers/chart-background.drawer';
8
+ const DEFAULT_X_LABEL_PADDING = { x: 4, y: 4 };
9
+ /**
10
+ * Draws the label on X axis.
11
+ * @param ctx
12
+ * @param canvasBoundsContainer
13
+ * @param config
14
+ * @param label
15
+ */
16
+ export function drawXAxisLabel(backgroundCtx, ctx, canvasBoundsContainer, config, label) {
17
+ var _a, _b;
18
+ const alignType = (_a = label.alignType) !== null && _a !== void 0 ? _a : 'middle';
19
+ const { fontSize, fontFamily, padding } = config.components.xAxis;
20
+ const offsetTop = (_b = padding.top) !== null && _b !== void 0 ? _b : 0;
21
+ const xAxis = canvasBoundsContainer.getBounds(CanvasElement.X_AXIS);
22
+ ctx.save();
23
+ ctx.font = `bold ${fontSize}px ${fontFamily}`;
24
+ const labelWidth = ctx.measureText(label.text).width;
25
+ const boxWidth = labelWidth + DEFAULT_X_LABEL_PADDING.x * 2;
26
+ let boxStart = 0;
27
+ const x = label.x;
28
+ switch (alignType) {
29
+ case 'start':
30
+ boxStart = x - boxWidth;
31
+ break;
32
+ case 'end':
33
+ boxStart = x;
34
+ break;
35
+ case 'middle':
36
+ default:
37
+ boxStart = x - boxWidth / 2;
38
+ break;
39
+ }
40
+ // label can overlap with regular x-axis label, so we need to hide regular x-axis label
41
+ redrawBackgroundArea(backgroundCtx, ctx, boxStart, xAxis.y, boxWidth, xAxis.height - 1);
42
+ if (alignType !== 'middle') {
43
+ ctx.strokeStyle = label.color;
44
+ ctx.beginPath();
45
+ ctx.moveTo(x, xAxis.y);
46
+ ctx.lineTo(x, xAxis.y + xAxis.height);
47
+ ctx.stroke();
48
+ }
49
+ ctx.fillStyle = label.color;
50
+ const xTextPos = boxStart + DEFAULT_X_LABEL_PADDING.x;
51
+ const yTextPos = xAxis.y + offsetTop + fontSize; // -2 for vertical adjustment
52
+ ctx.fillText(label.text, xTextPos, yTextPos);
53
+ ctx.restore();
54
+ }
@@ -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,75 @@
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{drawXAxisLabel as i}from"./x-axis-draw.functions";import{CanvasElement as r}from"../../canvas/canvas-bounds-container";import*as d from"color";import{fillRect as l}from"../../utils/canvas/canvas-drawing-functions.utils";export class XAxisLabelsDrawer{constructor(a,e,n,o,s){this.backgroundCanvasModel=a,this.config=e,this.canvasModel=n,this.canvasBoundsContainer=o,this.xAxisLabelsModel=s}draw(){const a=this.canvasModel.ctx;this.drawHighlightedBackgroundBetweenLabels(),this.xAxisLabelsModel.labels.forEach(e=>{i(this.backgroundCanvasModel.ctx,a,this.canvasBoundsContainer,this.config,e)})}drawHighlightedBackgroundBetweenLabels(){const a=this.canvasModel.ctx,e={},n=this.xAxisLabelsModel.labels.reduce((o,s)=>{if(s.subGroupId!==void 0){let t=o[s.subGroupId];t||(t=[],o[s.subGroupId]=t),t.push(s)}return o},e);Object.keys(n).forEach(o=>{const s=n[o];if(s.length===2){const t=this.canvasBoundsContainer.getBounds(r.X_AXIS);a.fillStyle=d.rgb(s[0].color).alpha(.1).toString(),l(a,{x:s[0].x,y:t.y},{x:s[1].x,y:t.y+t.height})}})}getCanvasIds(){return[this.canvasModel.canvasId]}}
6
+ import { drawXAxisLabel } from './x-axis-draw.functions';
7
+ import { CanvasElement } from '../../canvas/canvas-bounds-container';
8
+ import Color from 'color';
9
+ import { fillRect } from '../../utils/canvas/canvas-drawing-functions.utils';
10
+ /**
11
+ * This drawer draws custom labels for X Axis, using labels from XAxisLabelModel.
12
+ * By default labels for drawings are drawn by this drawer.
13
+ */
14
+ export class XAxisLabelsDrawer {
15
+ constructor(backgroundCanvasModel, config, canvasModel, canvasBoundsContainer, xAxisLabelsModel) {
16
+ this.backgroundCanvasModel = backgroundCanvasModel;
17
+ this.config = config;
18
+ this.canvasModel = canvasModel;
19
+ this.canvasBoundsContainer = canvasBoundsContainer;
20
+ this.xAxisLabelsModel = xAxisLabelsModel;
21
+ }
22
+ /**
23
+ * Draws the X axis labels on the canvas.
24
+ * @function
25
+ * @name draw
26
+ * @memberof XAxisLabelsDrawer
27
+ * @returns {void}
28
+ */
29
+ draw() {
30
+ const ctx = this.canvasModel.ctx;
31
+ this.drawHighlightedBackgroundBetweenLabels();
32
+ this.xAxisLabelsModel.labels.forEach(l => {
33
+ drawXAxisLabel(this.backgroundCanvasModel.ctx, ctx, this.canvasBoundsContainer, this.config, l);
34
+ });
35
+ }
36
+ // this is a very simple solution which matches 2 labels with same "subGroupId"
37
+ // in future we may want to change it, but for now it's enough
38
+ /**
39
+ * Draws a highlighted background between two labels with the same "subGroupId".
40
+ *
41
+ * @returns {void}
42
+ */
43
+ drawHighlightedBackgroundBetweenLabels() {
44
+ const ctx = this.canvasModel.ctx;
45
+ const initial = {};
46
+ const groupedLabels = this.xAxisLabelsModel.labels.reduce((acc, label) => {
47
+ if (label.subGroupId !== undefined) {
48
+ let group = acc[label.subGroupId];
49
+ if (!group) {
50
+ group = [];
51
+ acc[label.subGroupId] = group;
52
+ }
53
+ group.push(label);
54
+ }
55
+ return acc;
56
+ }, initial);
57
+ Object.keys(groupedLabels).forEach(subGroupId => {
58
+ const labels = groupedLabels[subGroupId];
59
+ // expect 2 labels only
60
+ if (labels.length === 2) {
61
+ const xAxisBounds = this.canvasBoundsContainer.getBounds(CanvasElement.X_AXIS);
62
+ ctx.fillStyle = Color.rgb(labels[0].color).alpha(0.1).toString();
63
+ fillRect(ctx, { x: labels[0].x, y: xAxisBounds.y }, { x: labels[1].x, y: xAxisBounds.y + xAxisBounds.height });
64
+ }
65
+ });
66
+ }
67
+ /**
68
+ * Returns an array with the ID of the canvas model.
69
+ *
70
+ * @returns {Array} An array with the ID of the canvas model.
71
+ */
72
+ getCanvasIds() {
73
+ return [this.canvasModel.canvasId];
74
+ }
75
+ }
@@ -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
  */
@@ -45,7 +45,7 @@ export declare class XAxisTimeLabelsGenerator implements XAxisLabelsGenerator {
45
45
  private eventBus;
46
46
  private config;
47
47
  private chartModel;
48
- private scaleModel;
48
+ private scale;
49
49
  private timeZoneModel;
50
50
  private canvasModel;
51
51
  private labelsGroupedByWeight;
@@ -56,7 +56,7 @@ export declare class XAxisTimeLabelsGenerator implements XAxisLabelsGenerator {
56
56
  private weightToTimeFormatMatcherArray;
57
57
  private weightToTimeFormatsDict;
58
58
  private extendedLabelsFilterConfig;
59
- constructor(eventBus: EventBus, config: FullChartConfig, chartModel: ChartModel, scaleModel: ScaleModel, timeZoneModel: TimeZoneModel, canvasModel: CanvasModel);
59
+ constructor(eventBus: EventBus, config: FullChartConfig, chartModel: ChartModel, scale: ScaleModel, timeZoneModel: TimeZoneModel, canvasModel: CanvasModel);
60
60
  private getLabelsFromChartType;
61
61
  /**
62
62
  * Make a prediction(750) about how many candles we need to fake to fill all X axis by labels