@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,284 @@
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 n}from"rxjs";import{distinctUntilChanged as o,map as r,share as h}from"rxjs/operators";import{ChartBaseElement as a}from"../chart-base-element";import{keys as d}from"../../utils/object.utils";export const calculateZoom=(e,t)=>e/t,unitToPixels=(e,t)=>e/t,pixelsToUnits=(e,t)=>e*t,unitToPercent=(e,t)=>(e-t)*100/t,percentToUnit=(e,t)=>e*t/100+t,calcLogValue=e=>Math.log2(e),logValueToUnit=e=>Math.pow(2,e);export class ViewportModel extends a{constructor(){super(...arguments),this._xStart=0,this._xEnd=0,this._yStart=0,this._yEnd=0,this._zoomX=1,this._zoomY=1,this._inverseY=!1,this.changed=new n,this.xChanged=this.changed.pipe(r(()=>({start:this.xStart,end:this.xEnd})),o((t,s)=>t.start===s.start&&t.end===s.end),h()),this.yChanged=this.changed.pipe(r(()=>({start:this.yStart,end:this.yEnd})),o((t,s)=>t.start===s.start&&t.end===s.end),h())}toX(t){return this.getBounds().x+unitToPixels(t-this.xStart,this.zoomX)}xPixels(t){return unitToPixels(t,this.zoomX)}toY(t){return this.inverseY?this.getBounds().y+unitToPixels(t-this.yStart,this.zoomY):this.getBounds().y+this.getBounds().height-unitToPixels(t-this.yStart,this.zoomY)}yPixels(t){return unitToPixels(t,this.zoomY)}fromX(t){const s=t-this.getBounds().x;return pixelsToUnits(s+unitToPixels(this.xStart,this.zoomX),this.zoomX)}fromY(t){const s=t-this.getBounds().y;return this.inverseY?pixelsToUnits(s+unitToPixels(this.yStart,this.zoomY),this.zoomY):pixelsToUnits(this.getBounds().height-s+unitToPixels(this.yStart,this.zoomY),this.zoomY)}recalculateZoomX(){this.zoomX=this.calculateZoomX(this.xStart,this.xEnd)}recalculateZoomY(){this.zoomY=this.calculateZoomY(this.yStart,this.yEnd)}calculateZoomX(t,s){return calculateZoom(s-t,this.getBounds().width)}calculateZoomY(t,s){return calculateZoom(s-t,this.getBounds().height)}recalculateZoom(t=!0){this.recalculateZoomX(),this.recalculateZoomY(),t&&this.fireChanged()}setXScale(t,s,i=!0){this.xStart=t,this.xEnd=s,this.recalculateZoomX(),i&&this.fireChanged()}setYScale(t,s,i=!0){this.yStart=t,this.yEnd=s,this.recalculateZoomY(),i&&this.fireChanged()}export(){return{xStart:this.xStart,xEnd:this.xEnd,yStart:this.yStart,yEnd:this.yEnd,zoomX:this.zoomX,zoomY:this.zoomY,inverseY:this.inverseY}}apply(t){this.xStart=t.xStart,this.xEnd=t.xEnd,this.yStart=t.yStart,this.yEnd=t.yEnd,this.zoomX=t.zoomX,this.zoomY=t.zoomY,this.inverseY=t.inverseY,this.fireChanged()}fireChanged(){this.changed.next()}get xStart(){return this._xStart}set xStart(t){this._xStart=t}get xEnd(){return this._xEnd}set xEnd(t){this._xEnd=t}get yStart(){return this._yStart}set yStart(t){this._yStart=t}get yEnd(){return this._yEnd}set yEnd(t){this._yEnd=t}get zoomX(){return this._zoomX}set zoomX(t){this._zoomX=t}get zoomY(){return this._zoomY}set zoomY(t){this._zoomY=t}get inverseY(){return this._inverseY}set inverseY(t){this._inverseY=t}isViewportValid(){return this.xStart!==this.xEnd&&this.yStart!==this.yEnd&&isFinite(this.yStart)&&isFinite(this.yEnd)}}export const compareStates=(e,t)=>!d(e).some(s=>e[s]!==t[s]);
6
+ import { Subject } from 'rxjs';
7
+ import { distinctUntilChanged, map, share } from 'rxjs/operators';
8
+ import { ChartBaseElement } from '../chart-base-element';
9
+ import { keys } from '../../utils/object.utils';
10
+ export const calculateZoom = (viewportUnits, viewportPixels) => viewportUnits / viewportPixels;
11
+ export const unitToPixels = (units, zoom) => units / zoom;
12
+ export const pixelsToUnits = (px, zoom) => px * zoom;
13
+ export const unitToPercent = (value, baseline) => ((value - baseline) * 100) / baseline;
14
+ export const percentToUnit = (percent, baseline) => (percent * baseline) / 100 + baseline;
15
+ // log calculations
16
+ export const calcLogValue = (value) => Math.log2(value);
17
+ export const logValueToUnit = (logValue) => Math.pow(2, logValue);
18
+ /**
19
+ * Abstract viewport model.
20
+ * Viewport has 4 coordinates: xStart, xEnd, yStart and yEnd - all stored in {@link Unit}.
21
+ * Main methods:
22
+ * - {@link toX} - converts xUnits to xPixels
23
+ * - {@link toY} - converts yUnits to yPixels
24
+ * - {@link fromX} - converts xPixels to xUnits
25
+ * - {@link fromY} - converts yPixels to yUnits
26
+ *
27
+ * To convert unit-pixels and vice versa uses {@link getBounds} method.
28
+ * zoomX and zoomY are proportions between units and pixels.
29
+ */
30
+ export class ViewportModel extends ChartBaseElement {
31
+ constructor() {
32
+ super(...arguments);
33
+ //region base viewport model props
34
+ this._xStart = 0;
35
+ this._xEnd = 0;
36
+ this._yStart = 0;
37
+ this._yEnd = 0;
38
+ this._zoomX = 1;
39
+ this._zoomY = 1;
40
+ //endregion
41
+ // toggle Y inverse mode
42
+ this._inverseY = false;
43
+ //region subjects
44
+ this.changed = new Subject();
45
+ this.xChanged = this.changed.pipe(map(() => ({
46
+ start: this.xStart,
47
+ end: this.xEnd,
48
+ })), distinctUntilChanged((p, c) => p.start === c.start && p.end === c.end), share());
49
+ this.yChanged = this.changed.pipe(map(() => ({
50
+ start: this.yStart,
51
+ end: this.yEnd,
52
+ })), distinctUntilChanged((p, c) => p.start === c.start && p.end === c.end), share());
53
+ }
54
+ //endregion
55
+ //region conversion methods
56
+ /**
57
+ * Converts a unit value to pixels based on the current zoom level and xStart value.
58
+ * @param {Unit} unit - The unit value to be converted to pixels.
59
+ * @returns {Pixel} - The converted pixel value.
60
+ */
61
+ toX(unit) {
62
+ return this.getBounds().x + unitToPixels(unit - this.xStart, this.zoomX);
63
+ }
64
+ /**
65
+ * Converts a unit value to pixels based on the current zoom level in the x-axis.
66
+ * @param {Unit} unit - The unit value to be converted to pixels.
67
+ * @returns {Pixel} - The converted value in pixels.
68
+ */
69
+ xPixels(unit) {
70
+ return unitToPixels(unit, this.zoomX);
71
+ }
72
+ /**
73
+ * Converts a given unit value to pixel value in the Y-axis.
74
+ * @param {Unit} unit - The unit value to be converted to pixel value.
75
+ * @returns {Pixel} - The pixel value of the given unit value in the Y-axis.
76
+ */
77
+ toY(unit) {
78
+ if (this.inverseY) {
79
+ return this.getBounds().y + unitToPixels(unit - this.yStart, this.zoomY);
80
+ }
81
+ else {
82
+ // inverse by default because canvas calculation [0,0] point starts from top-left corner
83
+ return this.getBounds().y + this.getBounds().height - unitToPixels(unit - this.yStart, this.zoomY);
84
+ }
85
+ }
86
+ /**
87
+ * Converts a unit value to pixels based on the current zoom level in the Y axis.
88
+ * @param {Unit} unit - The unit value to be converted to pixels.
89
+ * @returns {Pixel} - The converted value in pixels.
90
+ */
91
+ yPixels(unit) {
92
+ return unitToPixels(unit, this.zoomY);
93
+ }
94
+ /**
95
+ * Converts a pixel value to a unit value based on the current zoom level and xStart value.
96
+ * @param {Pixel} px - The pixel value to convert to unit value.
97
+ * @returns {Unit} - The converted unit value.
98
+ */
99
+ fromX(px) {
100
+ const normalizedPx = px - this.getBounds().x;
101
+ return pixelsToUnits(normalizedPx + unitToPixels(this.xStart, this.zoomX), this.zoomX);
102
+ }
103
+ /**
104
+ * Converts a pixel value to a unit value along the y-axis.
105
+ * @param {Pixel} px - The pixel value to be converted.
106
+ * @returns {void}
107
+ */
108
+ fromY(px) {
109
+ const normalizedPx = px - this.getBounds().y;
110
+ if (this.inverseY) {
111
+ return pixelsToUnits(normalizedPx + unitToPixels(this.yStart, this.zoomY), this.zoomY);
112
+ }
113
+ else {
114
+ // inverse by default because canvas calculation [0,0] point starts from top-left corner
115
+ return pixelsToUnits(this.getBounds().height - normalizedPx + unitToPixels(this.yStart, this.zoomY), this.zoomY);
116
+ }
117
+ }
118
+ //endregion
119
+ /**
120
+ * Recalculates the zoom factor for the x-axis based on the start and end values of the x-axis.
121
+ * @function
122
+ * @name recalculateZoomX
123
+ * @memberof ClassName
124
+ * @instance
125
+ * @returns {void}
126
+ */
127
+ recalculateZoomX() {
128
+ this.zoomX = this.calculateZoomX(this.xStart, this.xEnd);
129
+ }
130
+ /**
131
+ * Recalculates the zoomY property of the object.
132
+ * The zoomY property is calculated using the yStart and yEnd properties of the object.
133
+ * @function
134
+ * @name recalculateZoomY
135
+ * @memberof Object
136
+ * @instance
137
+ * @returns {void}
138
+ */
139
+ recalculateZoomY() {
140
+ this.zoomY = this.calculateZoomY(this.yStart, this.yEnd);
141
+ }
142
+ /**
143
+ * Calculates the zoom factor for the x-axis based on the start and end units.
144
+ * @param {Unit} start - The start unit.
145
+ * @param {Unit} end - The end unit.
146
+ * @returns {Zoom} The zoom factor for the x-axis.
147
+ */
148
+ calculateZoomX(start, end) {
149
+ return calculateZoom(end - start, this.getBounds().width);
150
+ }
151
+ /**
152
+ * Calculates the zoom factor for the Y axis based on the start and end units.
153
+ * @param {Unit} start - The start unit.
154
+ * @param {Unit} end - The end unit.
155
+ * @returns {Zoom} The zoom factor for the Y axis.
156
+ */
157
+ calculateZoomY(start, end) {
158
+ return calculateZoom(end - start, this.getBounds().height);
159
+ }
160
+ /**
161
+ * Should be called when x/y start/end changes.
162
+ */
163
+ recalculateZoom(fireChanged = true) {
164
+ this.recalculateZoomX();
165
+ this.recalculateZoomY();
166
+ fireChanged && this.fireChanged();
167
+ }
168
+ /**
169
+ * Moves the viewport to exactly xStart..xEnd place.
170
+ * (you need to fire DRAW event after this)
171
+ * @param xStart - viewport start in units
172
+ * @param xEnd - viewport end in units
173
+ * @param fireChanged - fire changed event
174
+ */
175
+ setXScale(xStart, xEnd, fireChanged = true) {
176
+ this.xStart = xStart;
177
+ this.xEnd = xEnd;
178
+ this.recalculateZoomX();
179
+ fireChanged && this.fireChanged();
180
+ }
181
+ /**
182
+ * Moves the viewport to exactly yStart..yEnd place.
183
+ * (you need to fire DRAW event after this)
184
+ * @param yStart - viewport start in units
185
+ * @param yEnd - viewport end in units
186
+ * @param fireChanged - fire changed event
187
+ */
188
+ setYScale(yStart, yEnd, fireChanged = true) {
189
+ this.yStart = yStart;
190
+ this.yEnd = yEnd;
191
+ this.recalculateZoomY();
192
+ fireChanged && this.fireChanged();
193
+ }
194
+ /**
195
+ * Exports current state of VM.
196
+ */
197
+ export() {
198
+ return {
199
+ xStart: this.xStart,
200
+ xEnd: this.xEnd,
201
+ yStart: this.yStart,
202
+ yEnd: this.yEnd,
203
+ zoomX: this.zoomX,
204
+ zoomY: this.zoomY,
205
+ inverseY: this.inverseY,
206
+ };
207
+ }
208
+ /**
209
+ * Applies the state to current VM.
210
+ * @param state
211
+ */
212
+ apply(state) {
213
+ this.xStart = state.xStart;
214
+ this.xEnd = state.xEnd;
215
+ this.yStart = state.yStart;
216
+ this.yEnd = state.yEnd;
217
+ this.zoomX = state.zoomX;
218
+ this.zoomY = state.zoomY;
219
+ this.inverseY = state.inverseY;
220
+ this.fireChanged();
221
+ }
222
+ /**
223
+ * Emits a notification that the object has changed.
224
+ * @function
225
+ * @name fireChanged
226
+ * @memberof ClassName
227
+ * @instance
228
+ * @returns {void}
229
+ */
230
+ fireChanged() {
231
+ this.changed.next();
232
+ }
233
+ get xStart() {
234
+ return this._xStart;
235
+ }
236
+ set xStart(value) {
237
+ this._xStart = value;
238
+ }
239
+ get xEnd() {
240
+ return this._xEnd;
241
+ }
242
+ set xEnd(value) {
243
+ this._xEnd = value;
244
+ }
245
+ get yStart() {
246
+ return this._yStart;
247
+ }
248
+ set yStart(value) {
249
+ this._yStart = value;
250
+ }
251
+ get yEnd() {
252
+ return this._yEnd;
253
+ }
254
+ set yEnd(value) {
255
+ this._yEnd = value;
256
+ }
257
+ get zoomX() {
258
+ return this._zoomX;
259
+ }
260
+ set zoomX(value) {
261
+ this._zoomX = value;
262
+ }
263
+ get zoomY() {
264
+ return this._zoomY;
265
+ }
266
+ set zoomY(value) {
267
+ this._zoomY = value;
268
+ }
269
+ get inverseY() {
270
+ return this._inverseY;
271
+ }
272
+ set inverseY(value) {
273
+ this._inverseY = value;
274
+ }
275
+ /**
276
+ * Checks if the viewport is valid.
277
+ *
278
+ * @returns {boolean} - Returns true if the viewport is valid, false otherwise.
279
+ */
280
+ isViewportValid() {
281
+ return this.xStart !== this.xEnd && this.yStart !== this.yEnd && isFinite(this.yStart) && isFinite(this.yEnd);
282
+ }
283
+ }
284
+ export const compareStates = (a, b) => !keys(a).some(k => a[k] !== b[k]);
@@ -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,40 @@
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 zoomXToPercentViewportCalculator=(n,o,r,x,E)=>{const d=(o.xEnd-o.xStart)*x,l=d*r,c=d*(1-r);return E?(o.xStart=o.xStart+l,o.xEnd=o.xEnd-c):(o.xStart=o.xStart-l,o.xEnd=o.xEnd+c),o.zoomX=n.calculateZoomX(o.xStart,o.xEnd),o},zoomXToEndViewportCalculator=(n,o,r,x)=>zoomXToPercentViewportCalculator(n,o,1,r,x);
6
+ /**
7
+ * Zooms to percentage of viewport proportionally.
8
+ * @param vm
9
+ * @param state
10
+ * @param viewportPercent
11
+ * @param zoomStrength - 0..1 number, 1=max strength
12
+ * @param zoomIn
13
+ * @doc-tags viewport,zoom,scaling
14
+ */
15
+ export const zoomXToPercentViewportCalculator = (vm, state, viewportPercent, zoomStrength, zoomIn) => {
16
+ const deltaWidth = (state.xEnd - state.xStart) * zoomStrength;
17
+ const deltaStart = deltaWidth * viewportPercent;
18
+ const deltaEnd = deltaWidth * (1 - viewportPercent);
19
+ if (zoomIn) {
20
+ state.xStart = state.xStart + deltaStart;
21
+ state.xEnd = state.xEnd - deltaEnd;
22
+ }
23
+ else {
24
+ state.xStart = state.xStart - deltaStart;
25
+ state.xEnd = state.xEnd + deltaEnd;
26
+ }
27
+ state.zoomX = vm.calculateZoomX(state.xStart, state.xEnd);
28
+ return state;
29
+ };
30
+ /**
31
+ * Zooms to viewports end.
32
+ * @param vm
33
+ * @param state
34
+ * @param zoomStrength - 0..1 number, 1=max strength
35
+ * @param zoomIn
36
+ * @doc-tags viewport,zoom,scaling
37
+ */
38
+ export const zoomXToEndViewportCalculator = (vm, state, zoomStrength, zoomIn) => {
39
+ return zoomXToPercentViewportCalculator(vm, state, 1, zoomStrength, zoomIn);
40
+ };
@@ -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,114 @@
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{getTimezoneOffset as n}from"date-fns-tz";import{ReplaySubject as s}from"rxjs";import{memoize as f}from"../utils/perfomance/memoize.utils";import{dateTimeFormatterFactory as c}from"./date-time.formatter";export const memoizedTZOffset=f(n),getTimezoneOffset=(r,e)=>new Date(e).getTimezoneOffset()*60*1e3+memoizedTZOffset(r,e);export class TimeZoneModel{constructor(e){this.config=e,this.timeZoneChangedSubject=new s,this.currentTzOffset=t=>this.getOffset(this.config.timezone,t),this.formatterCache={},this.getOffset=(t,i)=>getTimezoneOffset(t,i),this.dateTimeFormatterFactory=this.initFormatterFactory(this.config.dateFormatter)}setTimeZone(e){this.config.timezone=e,this.formatterCache={},this.timeZoneChangedSubject.next(e)}observeTimeZoneChanged(){return this.timeZoneChangedSubject.asObservable()}initFormatterFactory(e){let t;if(e&&typeof e=="function")t=e;else if(e&&e.createFormatterFunction&&typeof e.createFormatterFunction=="function"){const i=e.createFormatterFunction;t=o=>i(o).bind(e)}else t=c(this.config,this.tzOffset);return t}getFormatterFactory(){return this.dateTimeFormatterFactory}getDateTimeFormatter(e){return this.formatterCache[e]===void 0&&(this.formatterCache[e]=this.dateTimeFormatterFactory(e)),this.formatterCache[e]}tzOffset(e){const t=o=>-new Date(o).getTimezoneOffset()*a;let i;return e?i=o=>memoizedTZOffset(e,o):i=t,o=>new Date(+o+i(o)-t(o))}}const a=60*1e3;
6
+ import { getTimezoneOffset as getTimezoneOffsetDateFnsTz } from 'date-fns-tz';
7
+ import { ReplaySubject } from 'rxjs';
8
+ import { memoize } from '../utils/performance/memoize.utils';
9
+ import { dateTimeFormatterFactory } from './date-time.formatter';
10
+ export const memoizedTZOffset = memoize(getTimezoneOffsetDateFnsTz);
11
+ export const getTimezoneOffset = (timezone, time) => {
12
+ // we must pass time here, because we can have daylight saving time, otherwise we will get wrong offset
13
+ const localOffset = new Date(time).getTimezoneOffset() * 60 * 1000;
14
+ return localOffset + memoizedTZOffset(timezone, time);
15
+ };
16
+ export class TimeZoneModel {
17
+ constructor(config) {
18
+ this.config = config;
19
+ this.timeZoneChangedSubject = new ReplaySubject();
20
+ this.currentTzOffset = (time) => this.getOffset(this.config.timezone, time);
21
+ this.formatterCache = {};
22
+ /**
23
+ * Calculates the offset of a given timezone from the local timezone.
24
+ * @private
25
+ * @param {string} timezone - The timezone to calculate the offset for.
26
+ */
27
+ this.getOffset = (timezone, time) => getTimezoneOffset(timezone, time);
28
+ this.dateTimeFormatterFactory = this.initFormatterFactory(this.config.dateFormatter);
29
+ }
30
+ /**
31
+ * Sets the timezone for the configuration and updates the current timezone offset.
32
+ * @param {string} timeZone - The timezone to set.
33
+ * @returns {void}
34
+ */
35
+ setTimeZone(timeZone) {
36
+ this.config.timezone = timeZone;
37
+ this.formatterCache = {};
38
+ this.timeZoneChangedSubject.next(timeZone);
39
+ }
40
+ /**
41
+ * Returns an Observable that emits a string value when the time zone is changed.
42
+ * The Observable is created from the timeZoneChangedSubject Subject.
43
+ * @returns {Observable<string>} An Observable that emits a string value when the time zone is changed.
44
+ */
45
+ observeTimeZoneChanged() {
46
+ return this.timeZoneChangedSubject.asObservable();
47
+ }
48
+ /**
49
+ * Initializes a DateTimeFormatterFactory object.
50
+ * @param {DateFormatter} [dateFormatter] - Optional DateFormatter object.
51
+ * @returns {DateTimeFormatterFactory} - Returns a DateTimeFormatterFactory object.
52
+ * If a plain function is provided as the dateFormatter parameter, it will be used as a date formatter without applying UTC datetime override for candles more than 1d period.
53
+ * If a custom date formatter exists, it will be used for datetime formatting applying optionally UTC datetime override for candles more than 1d period.
54
+ * If no dateFormatter is provided, a default DateTimeFormatterFactory object will be returned.
55
+ */
56
+ initFormatterFactory(dateFormatter) {
57
+ let result;
58
+ if (dateFormatter && typeof dateFormatter === 'function') {
59
+ // backward compatibility - if date formatter is a plain function then there is no need to use UTC datetime
60
+ // override for candles more than 1d period
61
+ result = dateFormatter;
62
+ }
63
+ else if (dateFormatter &&
64
+ dateFormatter.createFormatterFunction &&
65
+ typeof dateFormatter.createFormatterFunction === 'function') {
66
+ // if custom date formatter exists we use it for datetime formatting applying optionally
67
+ // UTC datetime override for candles more than 1d period
68
+ const createFormatter = dateFormatter.createFormatterFunction;
69
+ result = (pattern) => createFormatter(pattern).bind(dateFormatter);
70
+ }
71
+ else {
72
+ result = dateTimeFormatterFactory(this.config, this.tzOffset);
73
+ }
74
+ return result;
75
+ }
76
+ /**
77
+ * Returns the DateTimeFormatterFactory instance used by this class.
78
+ *
79
+ * @returns {DateTimeFormatterFactory} The DateTimeFormatterFactory instance used by this class.
80
+ */
81
+ getFormatterFactory() {
82
+ return this.dateTimeFormatterFactory;
83
+ }
84
+ getDateTimeFormatter(format) {
85
+ if (this.formatterCache[format] === undefined) {
86
+ this.formatterCache[format] = this.dateTimeFormatterFactory(format);
87
+ }
88
+ return this.formatterCache[format];
89
+ }
90
+ /**
91
+ * Gets the timezone offset value in milliseconds
92
+ * @param {string} timezone name
93
+ * @returns {function(time:Number):Date}
94
+ */
95
+ tzOffset(timezone) {
96
+ // we must pass time here, because we can have daylight saving time, otherwise we will get wrong offset
97
+ const localOffset = (time) => -new Date(time).getTimezoneOffset() * timeMultiplier;
98
+ let offset;
99
+ if (!timezone) {
100
+ offset = localOffset;
101
+ }
102
+ else {
103
+ // we must pass time here, because we can have daylight saving time, otherwise we will get wrong offset
104
+ offset = (time) => memoizedTZOffset(timezone, time);
105
+ }
106
+ // In JS Date object is created with local tz offset,
107
+ // so we have to subtract localOffset from current time
108
+ return time => {
109
+ return new Date(+time + offset(time) - localOffset(time));
110
+ };
111
+ }
112
+ }
113
+ // 1 hour in milliseconds
114
+ const timeMultiplier = 60 * 1000;
@@ -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,139 @@
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{floorToDPR as s,roundToDPR as l}from"../utils/device/device-pixel-ratio.utils";import{VisualSeriesPoint as u}from"./data-series.model";export default class y extends u{constructor(t,o,h,i,n,r,e,d,a=!1,c=!1,Y=!1){super(t,i),this.startUnit=t-o/2,this.width=o,this.open=h,this.high=n,this.low=r,this.name=e,this.candle=d,this.hasBorder=a,this.isActive=c,this.isHollow=Y}bodyHeight(t){return s(Math.abs(t.toY(this.open)-t.toY(this.close)))}candleHeight(t){return s(Math.abs(t.toY(this.high)-t.toY(this.low)))}bodyAsVLine(t){if(this.width<2)return[this.centerUnit,this.yLineStart(t),this.width,this.candleHeight(t)]}bodyRect(t){return[this.startUnit,this.yBodyStart(t),this.width,this.bodyHeight(t)]}getCandle(){return this.candle}yBodyKeyPoints(t){const o=s(t.toY(this.high)),h=s(t.toY(this.low)),i=s(t.toY(this.open)),n=s(t.toY(this.close)),[r,e]=i>n?[n,i]:[i,n],[d,a]=o>h?[h,o]:[o,h];return[d,r,e,a]}yLineEnd(t){return s(Math.max(t.toY(this.high),t.toY(this.low)))}yLineStart(t){return s(Math.min(t.toY(this.high),t.toY(this.low)))}yBodyStart(t){return s(Math.min(t.toY(this.open),t.toY(this.close)))}yBodyEnd(t){return s(Math.max(t.toY(this.open),t.toY(this.close)))}xCenter(t){return this.x(t)}xStart(t){return l(t.toX(this.startUnit))}}
6
+ import { floorToDPR, roundToDPR } from '../utils/device/device-pixel-ratio.utils';
7
+ import { VisualSeriesPoint } from './data-series.model';
8
+ /**
9
+ * Candle's visual representation. Candle's coordinates are adjusted by .5 unit to prevent anti-aliasing effect for
10
+ * lines with 1px width
11
+ *
12
+ * @param x wick location on X-axis
13
+ * @param width candle's width
14
+ * @param op open price location on Y axis
15
+ * @param cl close price location on Y axis
16
+ * @param lineStart wick's top location on Y axis
17
+ * @param lineEnd wick's bottom location on Y axis
18
+ * @param name candle's direction: up | down | none
19
+ * @param candle original candle
20
+ * @param hasBorder flag denoting if border should be drawn
21
+ * @constructor
22
+ */
23
+ export default class VisualCandle extends VisualSeriesPoint {
24
+ constructor(x, width, open, close, high, low, name, candle, hasBorder = false, isActive = false, isHollow = false) {
25
+ super(x, close);
26
+ this.startUnit = x - width / 2;
27
+ this.width = width;
28
+ this.open = open;
29
+ this.high = high;
30
+ this.low = low;
31
+ this.name = name;
32
+ this.candle = candle;
33
+ this.hasBorder = hasBorder;
34
+ this.isActive = isActive;
35
+ this.isHollow = isHollow;
36
+ }
37
+ /**
38
+ * Calculates the height of the body of a viewable element.
39
+ * @param {Viewable} viewable - The viewable element.
40
+ * @returns {Pixel} - The height of the body in pixels.
41
+ */
42
+ bodyHeight(viewable) {
43
+ return floorToDPR(Math.abs(viewable.toY(this.open) - viewable.toY(this.close)));
44
+ }
45
+ /**
46
+ * Calculates the height of a candle in pixels based on the high and low values of the candle and the viewable area.
47
+ *
48
+ * @param {Viewable} viewable - The viewable area object.
49
+ * @returns {Pixel} - The height of the candle in pixels.
50
+ */
51
+ candleHeight(viewable) {
52
+ return floorToDPR(Math.abs(viewable.toY(this.high) - viewable.toY(this.low)));
53
+ }
54
+ /**
55
+ * Returns coordinates of vertical line used to draw candle's body in case of small candle width
56
+ * @returns {[x,y,x2,y2]}
57
+ */
58
+ bodyAsVLine(viewable) {
59
+ if (this.width < 2) {
60
+ return [this.centerUnit, this.yLineStart(viewable), this.width, this.candleHeight(viewable)];
61
+ }
62
+ }
63
+ /**
64
+ * Returns rectangle used to draw candles' body
65
+ * @returns {[x,y,width,height]}
66
+ */
67
+ bodyRect(viewable) {
68
+ // candle is drawn using wick as center
69
+ return [this.startUnit, this.yBodyStart(viewable), this.width, this.bodyHeight(viewable)];
70
+ }
71
+ /**
72
+ * Returns the current candle object.
73
+ *
74
+ * @returns {Candle} The current candle object.
75
+ */
76
+ getCandle() {
77
+ return this.candle;
78
+ }
79
+ /**
80
+ * Returns candle Y points in ascending order
81
+ */
82
+ yBodyKeyPoints(viewable) {
83
+ const highY = floorToDPR(viewable.toY(this.high));
84
+ const lowY = floorToDPR(viewable.toY(this.low));
85
+ const openY = floorToDPR(viewable.toY(this.open));
86
+ const closeY = floorToDPR(viewable.toY(this.close));
87
+ const [bodyStart, bodyEnd] = openY > closeY ? [closeY, openY] : [openY, closeY];
88
+ const [lineStart, lineEnd] = highY > lowY ? [lowY, highY] : [highY, lowY];
89
+ return [lineStart, bodyStart, bodyEnd, lineEnd];
90
+ }
91
+ /**
92
+ * Calculates the y-coordinate of the end of a line segment that is within the viewable area.
93
+ * @param {Viewable} viewable - The viewable area object.
94
+ * @returns {Pixel} - The y-coordinate of the end of the line segment in pixels.
95
+ */
96
+ yLineEnd(viewable) {
97
+ return floorToDPR(Math.max(viewable.toY(this.high), viewable.toY(this.low)));
98
+ }
99
+ /**
100
+ * Returns the pixel value of the starting point of the y-axis line on the given viewable area.
101
+ * @param {Viewable} viewable - The viewable area to calculate the pixel value on.
102
+ * @returns {Pixel} - The pixel value of the starting point of the y-axis line.
103
+ */
104
+ yLineStart(viewable) {
105
+ return floorToDPR(Math.min(viewable.toY(this.high), viewable.toY(this.low)));
106
+ }
107
+ /**
108
+ * Calculates the starting y-coordinate of the body of a viewable object.
109
+ * @param {Viewable} viewable - The viewable object for which the starting y-coordinate of the body is to be calculated.
110
+ * @returns {Pixel} - The starting y-coordinate of the body of the viewable object.
111
+ */
112
+ yBodyStart(viewable) {
113
+ return floorToDPR(Math.min(viewable.toY(this.open), viewable.toY(this.close)));
114
+ }
115
+ /**
116
+ * Calculates the maximum pixel value of the y-coordinate of the viewable object's end point and the open and close values of the current object.
117
+ * @param {Viewable} viewable - The viewable object whose end point is to be compared with the open and close values of the current object.
118
+ * @returns {Pixel} - The maximum pixel value of the y-coordinate of the viewable object's end point and the open and close values of the current object.
119
+ */
120
+ yBodyEnd(viewable) {
121
+ return floorToDPR(Math.max(viewable.toY(this.open), viewable.toY(this.close)));
122
+ }
123
+ /**
124
+ * Calculates the x-coordinate of the center of a viewable object in pixels.
125
+ * @param {Viewable} viewable - The viewable object whose center is to be calculated.
126
+ * @returns {Pixel} - The x-coordinate of the center of the viewable object in pixels.
127
+ */
128
+ xCenter(viewable) {
129
+ return this.x(viewable);
130
+ }
131
+ /**
132
+ * Returns the starting pixel position of a viewable object
133
+ * @param {Viewable} viewable - The viewable object to get the starting pixel position from
134
+ * @returns {Pixel} - The starting pixel position of the viewable object
135
+ */
136
+ xStart(viewable) {
137
+ return roundToDPR(viewable.toX(this.startUnit));
138
+ }
139
+ }
@@ -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
  */