@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,140 @@
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{moveInArrayMutable as c,reorderArray as a,slice2DArray as s,arrayIntersect as n,eqeqeq as l}from"../array.utils";describe("array functions",()=>{describe("Intersection of arrays",()=>{it("Intersection of [1, 2, 3, 1] and [1, 2, 4, 5, 6] should be [1, 2]",()=>{const r=n([1,2,3,1],[1,2,4,5,6]);expect(r).toEqual([1,2])}),it("Intersection of [1, 2, 3] and [4, 5, 6] should be an empty array",()=>{const r=n([1,2,3],[4,5,6]);expect(r).toEqual([])}),it("Intersection of [1, 2, 2, 3] and [1, 1, 2, 2, 4, 5] with duplicates should be [1, 2, 2]",()=>{const r=n([1,2,2,3],[1,1,2,2,4,5],l,!1);expect(r).toEqual([1,2,2])}),it("Intersection of [] and [1, 1, 2] should be []",()=>{const r=n([],[1,1,2]);expect(r).toEqual([])}),it("Intersection of [1, 1, 2] and [] should be []",()=>{const r=n([1,1,2],[]);expect(r).toEqual([])}),it("Intersection with custom comparison function",()=>{const o=n([{id:1},{id:2},{id:3}],[{id:2},{id:4},{id:6}],(i,u)=>i.id===u.id);expect(o).toEqual([{id:2}])}),it("Intersection of arrays of strings",()=>{const r=n(["apple","banana","orange","pear"],["banana","orange","grape","kiwi"]);expect(r).toEqual(["banana","orange"])})}),describe("slice 2D array",()=>{it("should correctly slice arrays with correct indexes",()=>{const t=[[1,2],[3,4]],e=s(t,1,2);expect(e.toString()).toBe([[2],[3]].toString());const r=s(t,0,1);expect(r.toString()).toBe([[1,2]].toString());const o=s(t,2,3);expect(o.toString()).toBe([[3,4]].toString());const i=s(t,0,3);expect(i.toString()).toBe([[1,2],[3,4]].toString())}),it("should corrercly slice arrays with exceeding indexes",()=>{const t=[[1,2],[3,4]],e=s(t,-2,0);expect(e.toString()).toBe([[1]].toString());const r=s(t,3,4);expect(r.toString()).toBe([[4]].toString());const o=s(t,-2,4);expect(o.toString()).toBe([[1,2],[3,4]].toString())})}),describe("reorder array",()=>{it("Reorders source array according to newOrder",()=>{const t=["1","2","3"],e=a(t,["3","1"]);expect(e.toString()).toBe(["3","2","1"].toString());const r=a(t,["3","1","2"]);expect(r.toString()).toBe(["3","1","2"].toString());const o=a(t,["3"]);expect(o.toString()).toBe(["1","2","3"].toString())}),it("should return the reordered array even if newOrder contains duplicates",()=>{const t=["1","2","3"],e=["2","1","2"];expect(a(t,e)).toEqual(["2","1","3"])}),it("should return the reordered array even if newOrder contains extra elements",()=>{const t=["1","2","3"],e=["6","2","1","5"];expect(a(t,e)).toEqual(["2","1","3"])})}),describe("moveInArrayMutable",()=>{it("should move an item from start to end",()=>{const e=c([1,2,3,4,5],1,3);expect(e).toEqual([1,3,4,2,5])}),it("should move an item from end to start",()=>{const e=c([1,2,3,4,5],4,1);expect(e).toEqual([1,5,2,3,4])}),it("should move an item to the same position",()=>{const e=c([1,2,3,4,5],2,2);expect(e).toEqual([1,2,3,4,5])}),it("should clamp from and to if start and end are out of bounds",()=>{const e=c([1,2,3,4,5],-1,6);expect(e).toEqual([2,3,4,5,1])}),it("should return the same array if start and end are the same",()=>{const e=c([1,2,3,4,5],2,2);expect(e).toEqual([1,2,3,4,5])}),it("should return the same array if we try to move first element outside left bound",()=>{const e=c([1,2,3,4,5],0,-1);expect(e).toEqual([1,2,3,4,5])})})});
6
+ import { moveInArrayMutable, reorderArray, slice2DArray, arrayIntersect, eqeqeq } from '../array.utils';
7
+ describe('array functions', () => {
8
+ describe('Intersection of arrays', () => {
9
+ it('Intersection of [1, 2, 3, 1] and [1, 2, 4, 5, 6] should be [1, 2]', () => {
10
+ const source = [1, 2, 3, 1];
11
+ const target = [1, 2, 4, 5, 6];
12
+ const result = arrayIntersect(source, target);
13
+ expect(result).toEqual([1, 2]);
14
+ });
15
+ it('Intersection of [1, 2, 3] and [4, 5, 6] should be an empty array', () => {
16
+ const source = [1, 2, 3];
17
+ const target = [4, 5, 6];
18
+ const result = arrayIntersect(source, target);
19
+ expect(result).toEqual([]);
20
+ });
21
+ it('Intersection of [1, 2, 2, 3] and [1, 1, 2, 2, 4, 5] with duplicates should be [1, 2, 2]', () => {
22
+ const source = [1, 2, 2, 3];
23
+ const target = [1, 1, 2, 2, 4, 5];
24
+ const result = arrayIntersect(source, target, eqeqeq, false);
25
+ expect(result).toEqual([1, 2, 2]);
26
+ });
27
+ it('Intersection of [] and [1, 1, 2] should be []', () => {
28
+ const source = [];
29
+ const target = [1, 1, 2];
30
+ const result = arrayIntersect(source, target);
31
+ expect(result).toEqual([]);
32
+ });
33
+ it('Intersection of [1, 1, 2] and [] should be []', () => {
34
+ const source = [1, 1, 2];
35
+ const target = [];
36
+ const result = arrayIntersect(source, target);
37
+ expect(result).toEqual([]);
38
+ });
39
+ it('Intersection with custom comparison function', () => {
40
+ const source = [{ id: 1 }, { id: 2 }, { id: 3 }];
41
+ const target = [{ id: 2 }, { id: 4 }, { id: 6 }];
42
+ const compareFn = (a, b) => a.id === b.id;
43
+ const result = arrayIntersect(source, target, compareFn);
44
+ expect(result).toEqual([{ id: 2 }]);
45
+ });
46
+ it('Intersection of arrays of strings', () => {
47
+ const source = ['apple', 'banana', 'orange', 'pear'];
48
+ const target = ['banana', 'orange', 'grape', 'kiwi'];
49
+ const result = arrayIntersect(source, target);
50
+ expect(result).toEqual(['banana', 'orange']);
51
+ });
52
+ });
53
+ describe('slice 2D array', () => {
54
+ it('should correctly slice arrays with correct indexes', () => {
55
+ const array = [
56
+ [1, 2],
57
+ [3, 4],
58
+ ];
59
+ const result = slice2DArray(array, 1, 2);
60
+ expect(result.toString()).toBe([[2], [3]].toString());
61
+ const result2 = slice2DArray(array, 0, 1);
62
+ expect(result2.toString()).toBe([[1, 2]].toString());
63
+ const result3 = slice2DArray(array, 2, 3);
64
+ expect(result3.toString()).toBe([[3, 4]].toString());
65
+ const result4 = slice2DArray(array, 0, 3);
66
+ expect(result4.toString()).toBe([
67
+ [1, 2],
68
+ [3, 4],
69
+ ].toString());
70
+ });
71
+ it('should corrercly slice arrays with exceeding indexes', () => {
72
+ const array = [
73
+ [1, 2],
74
+ [3, 4],
75
+ ];
76
+ const result = slice2DArray(array, -2, 0);
77
+ expect(result.toString()).toBe([[1]].toString());
78
+ const result2 = slice2DArray(array, 3, 4);
79
+ expect(result2.toString()).toBe([[4]].toString());
80
+ const result3 = slice2DArray(array, -2, 4);
81
+ expect(result3.toString()).toBe([
82
+ [1, 2],
83
+ [3, 4],
84
+ ].toString());
85
+ });
86
+ });
87
+ describe('reorder array', () => {
88
+ it('Reorders source array according to newOrder', () => {
89
+ const array = ['1', '2', '3'];
90
+ const result1 = reorderArray(array, ['3', '1']);
91
+ expect(result1.toString()).toBe(['3', '2', '1'].toString());
92
+ const result2 = reorderArray(array, ['3', '1', '2']);
93
+ expect(result2.toString()).toBe(['3', '1', '2'].toString());
94
+ const result3 = reorderArray(array, ['3']);
95
+ expect(result3.toString()).toBe(['1', '2', '3'].toString());
96
+ });
97
+ it('should return the reordered array even if newOrder contains duplicates', () => {
98
+ const source = ['1', '2', '3'];
99
+ const newOrder = ['2', '1', '2'];
100
+ expect(reorderArray(source, newOrder)).toEqual(['2', '1', '3']);
101
+ });
102
+ it('should return the reordered array even if newOrder contains extra elements', () => {
103
+ const source = ['1', '2', '3'];
104
+ const newOrder = ['6', '2', '1', '5'];
105
+ expect(reorderArray(source, newOrder)).toEqual(['2', '1', '3']);
106
+ });
107
+ });
108
+ describe('moveInArrayMutable', () => {
109
+ it('should move an item from start to end', () => {
110
+ const arr = [1, 2, 3, 4, 5];
111
+ const result = moveInArrayMutable(arr, 1, 3);
112
+ expect(result).toEqual([1, 3, 4, 2, 5]);
113
+ });
114
+ it('should move an item from end to start', () => {
115
+ const arr = [1, 2, 3, 4, 5];
116
+ const result = moveInArrayMutable(arr, 4, 1);
117
+ expect(result).toEqual([1, 5, 2, 3, 4]);
118
+ });
119
+ it('should move an item to the same position', () => {
120
+ const arr = [1, 2, 3, 4, 5];
121
+ const result = moveInArrayMutable(arr, 2, 2);
122
+ expect(result).toEqual([1, 2, 3, 4, 5]);
123
+ });
124
+ it('should clamp from and to if start and end are out of bounds', () => {
125
+ const arr = [1, 2, 3, 4, 5];
126
+ const result = moveInArrayMutable(arr, -1, 6);
127
+ expect(result).toEqual([2, 3, 4, 5, 1]);
128
+ });
129
+ it('should return the same array if start and end are the same', () => {
130
+ const arr = [1, 2, 3, 4, 5];
131
+ const result = moveInArrayMutable(arr, 2, 2);
132
+ expect(result).toEqual([1, 2, 3, 4, 5]);
133
+ });
134
+ it('should return the same array if we try to move first element outside left bound', () => {
135
+ const arr = [1, 2, 3, 4, 5];
136
+ const result = moveInArrayMutable(arr, 0, -1);
137
+ expect(result).toEqual([1, 2, 3, 4, 5]);
138
+ });
139
+ });
140
+ });
@@ -1,6 +1,6 @@
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 debounce=(t,o)=>{let e=0;return(...u)=>{clearTimeout(e),e=+setTimeout(()=>t(...u),o)}};
6
+ export {};
@@ -0,0 +1,19 @@
1
+ /*
2
+ * Copyright (C) 2019 - 2023 Devexperts Solutions IE Limited
3
+ * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
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
+ */
6
+ import { clamp } from '../math.utils';
7
+ describe('math.utils', () => {
8
+ describe('clamp', () => {
9
+ it('should return the value if it is within the range', () => {
10
+ expect(clamp(5, 0, 10)).toEqual(5);
11
+ });
12
+ it('should return the min value if the value is less than the min', () => {
13
+ expect(clamp(-5, 0, 10)).toEqual(0);
14
+ });
15
+ it('should return the max value if the value is more than the max', () => {
16
+ expect(clamp(15, 0, 10)).toEqual(10);
17
+ });
18
+ });
19
+ });
@@ -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,16 @@
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{deepEqual as e}from"../object.utils";describe("object",()=>{describe("deepEqual",()=>{it("should deeply compare objects",()=>{expect(e({},{})).toBeTruthy(),expect(e({a:{foo:1}},{a:{foo:1}})).toBeTruthy(),expect(e({a:{foo:1}},{a:{foo:2}})).toBeFalsy(),expect(e({a:{foo:1}},{a:{bar:1}})).toBeFalsy()})})});
6
+ import { deepEqual } from '../object.utils';
7
+ describe('object', () => {
8
+ describe('deepEqual', () => {
9
+ it('should deeply compare objects', () => {
10
+ expect(deepEqual({}, {})).toBeTruthy();
11
+ expect(deepEqual({ a: { foo: 1 } }, { a: { foo: 1 } })).toBeTruthy(); //eslint-disable-line
12
+ expect(deepEqual({ a: { foo: 1 } }, { a: { foo: 2 } })).toBeFalsy(); //eslint-disable-line
13
+ expect(deepEqual({ a: { foo: 1 } }, { a: { bar: 1 } })).toBeFalsy(); //eslint-disable-line
14
+ });
15
+ });
16
+ });
@@ -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,34 @@
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{PriceIncrementsUtils as t}from"../price-increments.utils";describe("PriceIncrementsUtils",()=>{describe("autoDetectIncrementOfValueRange",()=>{it("should return increment=0.01 for range=0",()=>{const e=t.autoDetectIncrementOfValueRange(0);expect(e).toBeCloseTo(.01,10)}),it("should return increment=10 for range=6300.02931",()=>{const e=t.autoDetectIncrementOfValueRange(6300.02931);expect(e).toBeCloseTo(10,10)}),it("should return increment=1 for range=124.14",()=>{const e=t.autoDetectIncrementOfValueRange(124.14);expect(e).toBeCloseTo(1,10)}),it("should return increment=0.01 for range=5",()=>{const e=t.autoDetectIncrementOfValueRange(5);expect(e).toBeCloseTo(.01,10)}),it("should return increment=0.001 for range=0.5",()=>{const e=t.autoDetectIncrementOfValueRange(.5);expect(e).toBeCloseTo(.001,10)}),it("should return increment=0.00001 for range=0.0018",()=>{const e=t.autoDetectIncrementOfValueRange(.0018);expect(e).toBeCloseTo(1e-5,10)})})});
6
+ import { PriceIncrementsUtils } from '../price-increments.utils';
7
+ describe('PriceIncrementsUtils', () => {
8
+ describe('autoDetectIncrementOfValueRange', () => {
9
+ it('should return increment=0.01 for range=0', () => {
10
+ const result = PriceIncrementsUtils.autoDetectIncrementOfValueRange(0);
11
+ expect(result).toBeCloseTo(0.01, 10);
12
+ });
13
+ it('should return increment=10 for range=6300.02931', () => {
14
+ const result = PriceIncrementsUtils.autoDetectIncrementOfValueRange(6300.02931);
15
+ expect(result).toBeCloseTo(10, 10);
16
+ });
17
+ it('should return increment=1 for range=124.14', () => {
18
+ const result = PriceIncrementsUtils.autoDetectIncrementOfValueRange(124.14);
19
+ expect(result).toBeCloseTo(1, 10);
20
+ });
21
+ it('should return increment=0.01 for range=5', () => {
22
+ const result = PriceIncrementsUtils.autoDetectIncrementOfValueRange(5);
23
+ expect(result).toBeCloseTo(0.01, 10);
24
+ });
25
+ it('should return increment=0.001 for range=0.5', () => {
26
+ const result = PriceIncrementsUtils.autoDetectIncrementOfValueRange(0.5);
27
+ expect(result).toBeCloseTo(0.001, 10);
28
+ });
29
+ it('should return increment=0.00001 for range=0.0018', () => {
30
+ const result = PriceIncrementsUtils.autoDetectIncrementOfValueRange(0.0018);
31
+ expect(result).toBeCloseTo(0.00001, 10);
32
+ });
33
+ });
34
+ });
@@ -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
  */
@@ -50,7 +50,7 @@ type ItemFinder<T> = (item: T) => boolean;
50
50
  */
51
51
  export declare function replaceInArray<T>(arr: Array<T>, itemFinder: ItemFinder<T>, replace: T): T[];
52
52
  export declare const uniqueArray: <T extends string | number>(arr: T[]) => T[];
53
- export declare const groupBy: <T, KT extends T[keyof T] extends string | number ? T[keyof T] : never>(array: T[], key: keyof T) => Record<KT, T[]>;
53
+ export declare const groupBy: <T, K extends keyof T, KV extends T[K] extends string | number ? T[K] : never>(array: T[], key: K) => Record<KV, T[]>;
54
54
  /**
55
55
  * Inserts *something* between every two elements in the source array
56
56
  * Example: interleave(['first', 'second', 'third'], 'bar') => ['first', 'bar', 'second', 'bar', 'third']
@@ -1,6 +1,274 @@
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{identity as x}from"./function.utils";import{clamp as d,shiftRight as a}from"./math.utils";export function arrayIntersect(t,e,r=eqeqeq,n=!0){const i=t.filter(o=>e.some(c=>r(o,c)));return n?i.filter((o,c,u)=>u.indexOf(o)===c):i}export const reorderArray=(t,e)=>{const r=e.slice().filter(n=>t.find(i=>i===n));return t.map(n=>{var i;return e.indexOf(n)>=0&&(i=r.shift())!==null&&i!==void 0?i:n})},eqeqeq=(t,e)=>t===e,arraySubtract=(t,e,r)=>t.filter(n=>e.filter(i=>r(n,i)).length===0);const m=(t,e)=>t===e;export const arrayCompare=(t,e,r=m)=>t.length===e.length&&t.every((n,i)=>r(n,e[i]));export function moveInArray(t,e,r){const n=t.slice(),i=n[e];return n.splice(e,1),n.splice(r,0,i),n}export function moveInArrayMutable(t,e,r){const n=t.length,i=d(e,0,n-1),o=d(r,0,n-1),c=t[i];return t.splice(i,1),t.splice(o,0,c),t}export function replaceInArray(t,e,r){const n=t.slice(),i=n.findIndex(e);return i!==-1&&(n.splice(i,1),n.splice(i,0,r)),n}export const uniqueArray=t=>{const e={};return t.filter(r=>e[r]?!1:e[r]=!0)},groupBy=(t,e)=>t.reduce((r,n)=>((r[n[e]]=r[n[e]]||[]).push(n),r),{}),interleave=(t,e)=>[].concat(...t.map(r=>[r,e])).slice(0,-1),isTwoDimArray=t=>Array.isArray(t[0]),create2DArray=t=>Array.isArray(t[0])?t:[t],slice2DArray=(t,e,r)=>{const n=[];let i=0;for(const o of t){const c=Math.max(e-i,0),u=Math.max(r-i,-1),s=o.slice(c,u+1);s.length>0&&n.push(s),i+=o.length}return n},at=(t,e)=>t>=0?e[t]:e[e.length+t],flat=t=>Array.prototype.flat?t.flat():flatMap(t,x),flatMap=(t,e)=>{if(Array.prototype.flatMap)return t.flatMap(e);const r=[];for(let n=0;n<t.length;n++){const i=t[n];r.push(...e(i,n,t))}return r};export function binarySearch(t,e,r){const n=r!=null?r:x;return!t.length||e!==e?{index:-1,exact:!0}:p(t,e,0,t.length,n)}function p(t,e,r,n,i){const o=a(r+n,1),c=i(t[o]);return e===c?{index:o,exact:!0}:r===o?{index:r,exact:!1}:e<c?p(t,e,r,o,i):p(t,e,o,n,i)}export function lastOf(t){if(t&&t.length)return t[t.length-1]}export function arrayRemove(t){const e=this.indexOf(t);return e!==-1&&this.splice(e,1),this}export function arrayRemove2(t,e){if(!t)return;const r=t.indexOf(e);r!==-1&&t.splice(r,1)}export function firstOf(t){if(t)return t[0]}export function maxMin(t){function e(r,n){const i=t(n);return i==null||!isFinite(i)?r:[Math.max(r[0],i),Math.min(r[1],i)]}return function(r){const n=[Number.NEGATIVE_INFINITY,Number.POSITIVE_INFINITY];return r?r.reduce(e,n):n}}export function getElementsInRange(t,e,r,n=()=>0){const i=(c,u)=>{let s=0,l=c.length-1;for(;l>=s;){const f=Math.ceil((s+l)/2);n(c[f])<=u?s=f+1:l=f-1}return l},o=(c,u)=>{let s=0,l=c.length-1;for(;l>=s;){const f=Math.ceil((s+l)/2);n(c[f])>=u?l=f-1:s=f+1}return s};return t.slice(o(t,e),i(t,r)+1)}
6
+ import { identity } from './function.utils';
7
+ import { clamp, shiftRight } from './math.utils';
8
+ /**
9
+ * Intersects 2 arrays.
10
+ * Example:
11
+ * source: [1, 2, 3, 1]
12
+ * target: [1, 2, 4, 5, 6]
13
+ * result: [1, 2]
14
+ * result (with duplicates): [1, 1, 2]
15
+ * @param source
16
+ * @param target
17
+ * @param compareFn
18
+ * @param removeDuplicates
19
+ * @doc-tags fp,utility
20
+ */
21
+ export function arrayIntersect(source, target, compareFn = eqeqeq, removeDuplicates = true) {
22
+ const intersection = source.filter(a => target.some(b => compareFn(a, b)));
23
+ if (removeDuplicates) {
24
+ return intersection.filter((value, index, self) => self.indexOf(value) === index);
25
+ }
26
+ return intersection;
27
+ }
28
+ /**
29
+ * Reorders source array according to newOrder.
30
+ * Returns a reorder copy of the source array.
31
+ * Example:
32
+ * source: ['1', '2', '3']
33
+ * newOrder: ['3', '1']
34
+ * result: ['3', '2', '1']
35
+ */
36
+ export const reorderArray = (source, newOrder) => {
37
+ // filter out elements which are not presented in the source array
38
+ const order = newOrder.slice().filter(i => source.find(s => s === i));
39
+ return source.map(el => {
40
+ var _a;
41
+ if (newOrder.indexOf(el) >= 0) {
42
+ return (_a = order.shift()) !== null && _a !== void 0 ? _a : el;
43
+ }
44
+ return el;
45
+ });
46
+ };
47
+ export const eqeqeq = (a, b) => a === b;
48
+ /**
49
+ * Subtracts target from source array.
50
+ * Example:
51
+ * source: [1, 2, 3, 4]
52
+ * target: [2, 4, 6]
53
+ * result: [1, 3]
54
+ * @param source
55
+ * @param target
56
+ * @param compareFn
57
+ */
58
+ export const arraySubtract = (source, target, compareFn) => {
59
+ return source.filter(a => target.filter(b => compareFn(a, b)).length === 0);
60
+ };
61
+ const eqStrict = (a, b) => a === b;
62
+ export const arrayCompare = (source, target, compareFn = eqStrict) => {
63
+ return source.length === target.length && source.every((w, i) => compareFn(w, target[i]));
64
+ };
65
+ export function moveInArray(arr, from, to) {
66
+ const result = arr.slice();
67
+ const item = result[from];
68
+ result.splice(from, 1);
69
+ result.splice(to, 0, item);
70
+ return result;
71
+ }
72
+ export function moveInArrayMutable(arr, _from, _to) {
73
+ const n = arr.length;
74
+ const from = clamp(_from, 0, n - 1);
75
+ const to = clamp(_to, 0, n - 1);
76
+ const item = arr[from];
77
+ arr.splice(from, 1);
78
+ arr.splice(to, 0, item);
79
+ return arr;
80
+ }
81
+ /**
82
+ * Replaces item in array with another one.
83
+ * @param arr
84
+ * @param itemFinder - predicate to find item
85
+ * @param replace - item to replace
86
+ */
87
+ export function replaceInArray(arr, itemFinder, replace) {
88
+ const result = arr.slice();
89
+ const idx = result.findIndex(itemFinder);
90
+ if (idx !== -1) {
91
+ result.splice(idx, 1);
92
+ result.splice(idx, 0, replace);
93
+ }
94
+ return result;
95
+ }
96
+ export const uniqueArray = (arr) => {
97
+ const hashTable = {};
98
+ return arr.filter(item => (hashTable[item] ? false : (hashTable[item] = true)));
99
+ };
100
+ export const groupBy = (array, key) => {
101
+ return array.reduce((result, currentValue) => {
102
+ // If an array already present for key, push it to the array. Else create an array and push the object
103
+ (result[currentValue[key]] = result[currentValue[key]] || []).push(currentValue);
104
+ // Return the current iteration `result` value, this will be taken as next iteration `result` value and accumulate
105
+ return result;
106
+ // eslint-disable-next-line no-restricted-syntax
107
+ }, {}); // empty object is the initial value for result object
108
+ };
109
+ /**
110
+ * Inserts *something* between every two elements in the source array
111
+ * Example: interleave(['first', 'second', 'third'], 'bar') => ['first', 'bar', 'second', 'bar', 'third']
112
+ * @param arr
113
+ * @param something
114
+ */
115
+ export const interleave = (arr, something) =>
116
+ // eslint-disable-next-line no-restricted-syntax
117
+ [].concat(...arr.map(n => [n, something])).slice(0, -1);
118
+ export const isTwoDimArray = (arr) => Array.isArray(arr[0]);
119
+ // @ts-ignore
120
+ export const create2DArray = (arr) => (Array.isArray(arr[0]) ? arr : [arr]);
121
+ export const slice2DArray = (arr, startIdx, endIdx) => {
122
+ const result = [];
123
+ let pointsCurrentIdx = 0;
124
+ for (const arr1D of arr) {
125
+ const localIdxStart = Math.max(startIdx - pointsCurrentIdx, 0);
126
+ const localEndIdx = Math.max(endIdx - pointsCurrentIdx, -1);
127
+ const newPoints = arr1D.slice(localIdxStart, localEndIdx + 1);
128
+ newPoints.length > 0 && result.push(newPoints);
129
+ pointsCurrentIdx += arr1D.length;
130
+ }
131
+ return result;
132
+ };
133
+ // Array.at() polyfill (as of December 2022 method is not supported on iOS <= v15)
134
+ export const at = (idx, arr) => (idx >= 0 ? arr[idx] : arr[arr.length + idx]);
135
+ // Array.flat() polyfill (support for chrome 66)
136
+ export const flat = (arr) => {
137
+ // @ts-ignore
138
+ if (Array.prototype.flat) {
139
+ return arr.flat();
140
+ }
141
+ return flatMap(arr, identity);
142
+ };
143
+ // Array.flatMap() polyfill (support for chrome 66)
144
+ export const flatMap = (arr, callback) => {
145
+ // @ts-ignore
146
+ if (Array.prototype.flatMap) {
147
+ return arr.flatMap(callback);
148
+ }
149
+ const result = [];
150
+ for (let i = 0; i < arr.length; i++) {
151
+ const item = arr[i];
152
+ result.push(...callback(item, i, arr));
153
+ }
154
+ return result;
155
+ };
156
+ // eslint-disable-next-line no-redeclare
157
+ export function binarySearch(array, what, transform) {
158
+ // @ts-ignore
159
+ const applyTransform = transform !== null && transform !== void 0 ? transform : identity;
160
+ if (!array.length || what !== what) {
161
+ return {
162
+ index: -1,
163
+ exact: true,
164
+ };
165
+ }
166
+ return binarySearchFn(array, what, 0, array.length, applyTransform);
167
+ }
168
+ function binarySearchFn(array, what, from, to, transform) {
169
+ const center = shiftRight(from + to, 1);
170
+ const centerValue = transform(array[center]);
171
+ if (what === centerValue) {
172
+ return {
173
+ index: center,
174
+ exact: true,
175
+ };
176
+ }
177
+ else {
178
+ if (from === center) {
179
+ return {
180
+ index: from,
181
+ exact: false,
182
+ };
183
+ }
184
+ else {
185
+ if (what < centerValue) {
186
+ return binarySearchFn(array, what, from, center, transform);
187
+ }
188
+ else {
189
+ return binarySearchFn(array, what, center, to, transform);
190
+ }
191
+ }
192
+ }
193
+ }
194
+ export function lastOf(arr) {
195
+ if (arr && arr.length) {
196
+ return arr[arr.length - 1];
197
+ }
198
+ }
199
+ export function arrayRemove(element) {
200
+ const idx = this.indexOf(element);
201
+ if (idx !== -1) {
202
+ this.splice(idx, 1);
203
+ }
204
+ return this;
205
+ }
206
+ // ... and this is how a normal person would write "arrayRemove" function
207
+ export function arrayRemove2(array, element) {
208
+ if (!array) {
209
+ return;
210
+ }
211
+ const idx = array.indexOf(element);
212
+ if (idx !== -1) {
213
+ array.splice(idx, 1);
214
+ }
215
+ }
216
+ export function firstOf(arr) {
217
+ if (arr) {
218
+ return arr[0];
219
+ }
220
+ }
221
+ /**
222
+ @param {Function} gather - get the comparing value from the array
223
+ */
224
+ export function maxMin(gather) {
225
+ function reducer(a, b) {
226
+ const v = gather(b);
227
+ if (v === null || v === undefined || !isFinite(v)) {
228
+ return a;
229
+ }
230
+ else {
231
+ return [Math.max(a[0], v), Math.min(a[1], v)];
232
+ }
233
+ }
234
+ return function (arr) {
235
+ const defaultResult = [Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY];
236
+ if (arr) {
237
+ return arr.reduce(reducer, defaultResult);
238
+ }
239
+ return defaultResult;
240
+ };
241
+ }
242
+ export function getElementsInRange(array, leftBound, rightBound, transform = () => 0) {
243
+ const upperIndex = (arr, bound) => {
244
+ let l = 0;
245
+ let h = arr.length - 1;
246
+ while (h >= l) {
247
+ const midIndex = Math.ceil((l + h) / 2);
248
+ const mid = transform(arr[midIndex]);
249
+ if (mid <= bound) {
250
+ l = midIndex + 1;
251
+ }
252
+ else {
253
+ h = midIndex - 1;
254
+ }
255
+ }
256
+ return h;
257
+ };
258
+ const lowerIndex = (arr, bound) => {
259
+ let l = 0;
260
+ let h = arr.length - 1;
261
+ while (h >= l) {
262
+ const midIndex = Math.ceil((l + h) / 2);
263
+ const mid = transform(arr[midIndex]);
264
+ if (mid >= bound) {
265
+ h = midIndex - 1;
266
+ }
267
+ else {
268
+ l = midIndex + 1;
269
+ }
270
+ }
271
+ return l;
272
+ };
273
+ return array.slice(lowerIndex(array, leftBound), upperIndex(array, rightBound) + 1);
274
+ }
@@ -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,44 @@
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 function autoDetectPeriod(i){if(i.length>1){const f=i.reduce((t,e,o)=>{if(o!==i.length-1){const n=i[o+1].timestamp-e.timestamp;t[n]?t[n]++:t[n]=1}return t},{});let p=0,r;for(const t of Object.keys(f)){const e=parseInt(t,10),o=f[e];o>p&&e>0&&(p=o,r=e)}if(r)return r}}
6
+ /**
7
+ * Automatically detect period of candle source.
8
+ * Cannot just take first-second candles distance because of non-trading hours.
9
+ * Naive approach:
10
+ * 1. get all time distances between candles
11
+ * 2. the most frequent distance = period
12
+ * @param candles
13
+ * @doc-tags tricky,period
14
+ */
15
+ export function autoDetectPeriod(candles) {
16
+ if (candles.length > 1) {
17
+ // simply get distance between two candles
18
+ const periodToCount = candles.reduce((acc, candle, idx) => {
19
+ if (idx !== candles.length - 1) {
20
+ const period = candles[idx + 1].timestamp - candle.timestamp;
21
+ if (acc[period]) {
22
+ acc[period]++;
23
+ }
24
+ else {
25
+ acc[period] = 1;
26
+ }
27
+ }
28
+ return acc;
29
+ }, {});
30
+ let maxCount = 0;
31
+ let naivePeriod;
32
+ for (const _period of Object.keys(periodToCount)) {
33
+ const period = parseInt(_period, 10);
34
+ const count = periodToCount[period];
35
+ if (count > maxCount && period > 0) {
36
+ maxCount = count;
37
+ naivePeriod = period;
38
+ }
39
+ }
40
+ if (naivePeriod) {
41
+ return naivePeriod;
42
+ }
43
+ }
44
+ }
@@ -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,25 @@
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 a from"./candles-generator.utils.js";export function generateCandlesDataTS(e){return a(e)}
6
+ import generateCandlesData from './candles-generator.utils.js';
7
+ /**
8
+ * Generated mock candles data.
9
+ *
10
+ * @param config
11
+ * quantity - avg number of candles
12
+ * startY - avg candle Y to start generation with
13
+ * avgCandleSize - avg size of candle
14
+ * avgTrendLength:
15
+ * sw - avg length of SIDEWAYS trend
16
+ * down - avg length of DOWN trend
17
+ * up - avg length of UP trend
18
+ * withVolume - add random volumes or not
19
+ * period - specify distance between candles (60 for 1m, 3600 for 1h, 84600 for 1d)
20
+ * @return Array<Candle>
21
+ * @doc-tags tricky
22
+ */
23
+ export function generateCandlesDataTS(config) {
24
+ return generateCandlesData(config);
25
+ }
@@ -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
  */