@devexperts/dxcharts-lite 1.0.2 → 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 (255) hide show
  1. package/README.md +2 -2
  2. package/dist/chart/animation/canvas-animation.js +134 -1
  3. package/dist/chart/animation/types/animation.js +43 -1
  4. package/dist/chart/animation/types/color-alpha-animation.d.ts +1 -1
  5. package/dist/chart/animation/types/color-alpha-animation.js +60 -1
  6. package/dist/chart/animation/types/color-transition-animation.d.ts +1 -1
  7. package/dist/chart/animation/types/color-transition-animation.js +86 -1
  8. package/dist/chart/animation/types/viewport-movement-animation.js +63 -1
  9. package/dist/chart/animation/viewport-model-animation.js +20 -1
  10. package/dist/chart/bootstrap.d.ts +51 -48
  11. package/dist/chart/bootstrap.js +449 -1
  12. package/dist/chart/canvas/canvas-bounds-container.d.ts +0 -5
  13. package/dist/chart/canvas/canvas-bounds-container.js +815 -1
  14. package/dist/chart/canvas/canvas-chart-html.js +16 -18
  15. package/dist/chart/canvas/chart-elements.d.ts +1 -4
  16. package/dist/chart/canvas/chart-elements.js +22 -1
  17. package/dist/chart/canvas/cursor.handler.js +122 -1
  18. package/dist/chart/canvas/layout-creator.js +34 -1
  19. package/dist/chart/canvas/y-axis-bounds.container.d.ts +2 -2
  20. package/dist/chart/canvas/y-axis-bounds.container.js +67 -1
  21. package/dist/chart/chart-container.js +1 -1
  22. package/dist/chart/chart.config.d.ts +4 -5
  23. package/dist/chart/chart.config.js +645 -1
  24. package/dist/chart/chart.d.ts +62 -0
  25. package/dist/chart/chart.js +106 -0
  26. package/dist/chart/components/chart/basic-scale.d.ts +2 -2
  27. package/dist/chart/components/chart/basic-scale.js +31 -1
  28. package/dist/chart/components/chart/candle-transformer.functions.js +15 -1
  29. package/dist/chart/components/chart/candle-width-calculator.functions.js +2 -1
  30. package/dist/chart/components/chart/candle.functions.js +44 -1
  31. package/dist/chart/components/chart/chart-area-pan.handler.d.ts +3 -3
  32. package/dist/chart/components/chart/chart-area-pan.handler.js +197 -1
  33. package/dist/chart/components/chart/chart-base.model.js +66 -1
  34. package/dist/chart/components/chart/chart.component.d.ts +7 -3
  35. package/dist/chart/components/chart/chart.component.js +408 -1
  36. package/dist/chart/components/chart/chart.model.d.ts +4 -11
  37. package/dist/chart/components/chart/chart.model.js +954 -1
  38. package/dist/chart/components/chart/data-series.high-low-provider.js +34 -1
  39. package/dist/chart/components/chart/fake-candles.js +97 -1
  40. package/dist/chart/components/chart/price.formatter.js +35 -1
  41. package/dist/chart/components/chart/secondary-chart-colors-pool.js +68 -1
  42. package/dist/chart/components/cross_tool/cross-tool.component.js +85 -1
  43. package/dist/chart/components/cross_tool/cross-tool.drawer.js +32 -1
  44. package/dist/chart/components/cross_tool/cross-tool.model.js +107 -1
  45. package/dist/chart/components/cross_tool/types/cross-and-labels.drawer.js +137 -1
  46. package/dist/chart/components/cross_tool/types/none.drawer.js +3 -1
  47. package/dist/chart/components/dran-n-drop_helper/drag-n-drop-x.component.js +28 -1
  48. package/dist/chart/components/dran-n-drop_helper/drag-n-drop-y.component.js +24 -1
  49. package/dist/chart/components/dran-n-drop_helper/drag-n-drop.component.js +53 -1
  50. package/dist/chart/components/dynamic-objects/dynamic-objects.component.d.ts +13 -0
  51. package/dist/chart/components/dynamic-objects/dynamic-objects.component.js +20 -0
  52. package/dist/chart/components/dynamic-objects/dynamic-objects.drawer.d.ts +18 -0
  53. package/dist/chart/components/dynamic-objects/dynamic-objects.drawer.js +23 -0
  54. package/dist/chart/components/dynamic-objects/dynamic-objects.model.d.ts +63 -0
  55. package/dist/chart/components/dynamic-objects/dynamic-objects.model.js +136 -0
  56. package/dist/chart/components/events/events-hit-test.drawer.js +63 -1
  57. package/dist/chart/components/events/events.component.js +61 -1
  58. package/dist/chart/components/events/events.drawer.js +195 -1
  59. package/dist/chart/components/events/events.model.js +69 -1
  60. package/dist/chart/components/grid/grid.component.d.ts +2 -2
  61. package/dist/chart/components/grid/grid.component.js +31 -1
  62. package/dist/chart/components/grid/grid.drawer.d.ts +4 -3
  63. package/dist/chart/components/grid/grid.drawer.js +106 -1
  64. package/dist/chart/components/high_low/high-low.component.js +12 -1
  65. package/dist/chart/components/high_low/high-low.drawer.js +126 -1
  66. package/dist/chart/components/highlights/highlights.component.js +46 -1
  67. package/dist/chart/components/highlights/highlights.drawer.js +154 -1
  68. package/dist/chart/components/highlights/highlights.model.js +75 -1
  69. package/dist/chart/components/labels_generator/numeric-axis-labels.generator.d.ts +1 -1
  70. package/dist/chart/components/labels_generator/numeric-axis-labels.generator.js +199 -1
  71. package/dist/chart/components/navigation_map/navigation-map-move.handler.d.ts +2 -2
  72. package/dist/chart/components/navigation_map/navigation-map-move.handler.js +108 -1
  73. package/dist/chart/components/navigation_map/navigation-map.component.js +112 -1
  74. package/dist/chart/components/navigation_map/navigation-map.drawer.js +244 -1
  75. package/dist/chart/components/navigation_map/navigation-map.model.js +33 -2
  76. package/dist/chart/components/pan/chart-pan.component.d.ts +2 -2
  77. package/dist/chart/components/pan/chart-pan.component.js +51 -1
  78. package/dist/chart/components/pane/extent/y-extent-component.d.ts +12 -18
  79. package/dist/chart/components/pane/extent/y-extent-component.js +120 -1
  80. package/dist/chart/components/pane/pane-hit-test.controller.js +55 -1
  81. package/dist/chart/components/pane/pane-manager.component.d.ts +10 -5
  82. package/dist/chart/components/pane/pane-manager.component.js +148 -1
  83. package/dist/chart/components/pane/pane.component.d.ts +16 -32
  84. package/dist/chart/components/pane/pane.component.js +278 -1
  85. package/dist/chart/components/resizer/bar-resizer.component.js +139 -1
  86. package/dist/chart/components/resizer/bar-resizer.drawer.js +46 -1
  87. package/dist/chart/components/snapshot/snapshot.component.js +48 -1
  88. package/dist/chart/components/volumes/separate-volumes.component.d.ts +6 -10
  89. package/dist/chart/components/volumes/separate-volumes.component.js +63 -1
  90. package/dist/chart/components/volumes/volume-color-resolvers.functions.js +18 -1
  91. package/dist/chart/components/volumes/volumes.component.d.ts +6 -7
  92. package/dist/chart/components/volumes/volumes.component.js +94 -1
  93. package/dist/chart/components/volumes/volumes.drawer.d.ts +5 -12
  94. package/dist/chart/components/volumes/volumes.drawer.js +140 -1
  95. package/dist/chart/components/volumes/volumes.formatter.js +31 -1
  96. package/dist/chart/components/volumes/volumes.model.d.ts +2 -2
  97. package/dist/chart/components/volumes/volumes.model.js +43 -1
  98. package/dist/chart/components/watermark/water-mark.component.js +103 -1
  99. package/dist/chart/components/watermark/water-mark.drawer.js +187 -1
  100. package/dist/chart/components/x_axis/numeric-x-axis-labels.generator.js +27 -1
  101. package/dist/chart/components/x_axis/time/parser/time-formats-matchers.functions.js +187 -1
  102. package/dist/chart/components/x_axis/time/parser/time-formats-parser.functions.js +76 -1
  103. package/dist/chart/components/x_axis/time/parser/time-formats-validators.functions.js +79 -1
  104. package/dist/chart/components/x_axis/time/parser/time-formats.model.js +14 -1
  105. package/dist/chart/components/x_axis/time/x-axis-weights.functions.d.ts +1 -1
  106. package/dist/chart/components/x_axis/time/x-axis-weights.functions.js +143 -1
  107. package/dist/chart/components/x_axis/time/x-axis-weights.generator.js +73 -1
  108. package/dist/chart/components/x_axis/x-axis-draw.functions.js +49 -1
  109. package/dist/chart/components/x_axis/x-axis-labels.drawer.js +70 -1
  110. package/dist/chart/components/x_axis/x-axis-labels.generator.d.ts +2 -2
  111. package/dist/chart/components/x_axis/x-axis-labels.generator.js +332 -1
  112. package/dist/chart/components/x_axis/x-axis-labels.model.js +35 -1
  113. package/dist/chart/components/x_axis/x-axis-scale.handler.d.ts +2 -2
  114. package/dist/chart/components/x_axis/x-axis-scale.handler.js +60 -1
  115. package/dist/chart/components/x_axis/x-axis-time-labels.drawer.js +82 -1
  116. package/dist/chart/components/x_axis/x-axis.component.d.ts +2 -2
  117. package/dist/chart/components/x_axis/x-axis.component.js +119 -1
  118. package/dist/chart/components/y_axis/label-color.functions.js +53 -1
  119. package/dist/chart/components/y_axis/numeric-y-axis-labels.generator.d.ts +4 -4
  120. package/dist/chart/components/y_axis/numeric-y-axis-labels.generator.js +33 -1
  121. package/dist/chart/components/y_axis/price_labels/data-series-y-axis-labels.provider.d.ts +3 -3
  122. package/dist/chart/components/y_axis/price_labels/data-series-y-axis-labels.provider.js +67 -1
  123. package/dist/chart/components/y_axis/price_labels/labels-positions-calculator.js +56 -1
  124. package/dist/chart/components/y_axis/price_labels/last-candle-labels.provider.js +95 -1
  125. package/dist/chart/components/y_axis/price_labels/price-label.drawer.d.ts +2 -2
  126. package/dist/chart/components/y_axis/price_labels/price-label.drawer.js +119 -1
  127. package/dist/chart/components/y_axis/price_labels/y-axis-labels.model.d.ts +9 -8
  128. package/dist/chart/components/y_axis/price_labels/y-axis-labels.model.js +201 -1
  129. package/dist/chart/components/y_axis/price_labels/y-axis-price-labels.drawer.d.ts +6 -7
  130. package/dist/chart/components/y_axis/price_labels/y-axis-price-labels.drawer.js +58 -1
  131. package/dist/chart/components/y_axis/y-axis-base-labels.model.d.ts +6 -4
  132. package/dist/chart/components/y_axis/y-axis-base-labels.model.js +47 -1
  133. package/dist/chart/components/y_axis/y-axis-labels.drawer.d.ts +4 -4
  134. package/dist/chart/components/y_axis/y-axis-labels.drawer.js +161 -1
  135. package/dist/chart/components/y_axis/y-axis-scale.handler.d.ts +2 -2
  136. package/dist/chart/components/y_axis/y-axis-scale.handler.js +72 -1
  137. package/dist/chart/components/y_axis/y-axis.component.d.ts +32 -41
  138. package/dist/chart/components/y_axis/y-axis.component.js +220 -1
  139. package/dist/chart/components/y_axis/y-axis.drawer.d.ts +9 -12
  140. package/dist/chart/components/y_axis/y-axis.drawer.js +96 -1
  141. package/dist/chart/components/y_axis/y-axis.model.d.ts +9 -17
  142. package/dist/chart/components/y_axis/y-axis.model.js +33 -1
  143. package/dist/chart/drawers/chart-background.drawer.js +69 -1
  144. package/dist/chart/drawers/chart-type-drawers/area.drawer.js +69 -1
  145. package/dist/chart/drawers/chart-type-drawers/bar.drawer.js +57 -1
  146. package/dist/chart/drawers/chart-type-drawers/baseline.drawer.js +84 -1
  147. package/dist/chart/drawers/chart-type-drawers/candle.drawer.js +162 -1
  148. package/dist/chart/drawers/chart-type-drawers/histogram.drawer.js +57 -1
  149. package/dist/chart/drawers/chart-type-drawers/line.drawer.js +38 -1
  150. package/dist/chart/drawers/chart-type-drawers/scatter-plot.drawer.js +19 -1
  151. package/dist/chart/drawers/clear-canvas.drawer.js +14 -1
  152. package/dist/chart/drawers/composite.drawer.js +67 -1
  153. package/dist/chart/drawers/data-series-drawers/candle-series-wrapper.js +50 -1
  154. package/dist/chart/drawers/data-series-drawers/color-candle.drawer.js +35 -1
  155. package/dist/chart/drawers/data-series-drawers/data-series-drawers.utils.js +16 -1
  156. package/dist/chart/drawers/data-series-drawers/difference-cloud.drawer.js +106 -1
  157. package/dist/chart/drawers/data-series-drawers/histogram.drawer.js +23 -1
  158. package/dist/chart/drawers/data-series-drawers/linear.drawer.js +19 -1
  159. package/dist/chart/drawers/data-series-drawers/points.drawer.js +19 -1
  160. package/dist/chart/drawers/data-series-drawers/rectangular-tool.drawer.js +7 -1
  161. package/dist/chart/drawers/data-series-drawers/text.drawer.js +25 -1
  162. package/dist/chart/drawers/data-series-drawers/trend-histogram.drawer.js +35 -1
  163. package/dist/chart/drawers/data-series-drawers/triangle.drawer.js +22 -1
  164. package/dist/chart/drawers/data-series.drawer.d.ts +5 -7
  165. package/dist/chart/drawers/data-series.drawer.js +56 -1
  166. package/dist/chart/drawers/drawing-manager.d.ts +1 -1
  167. package/dist/chart/drawers/drawing-manager.js +177 -1
  168. package/dist/chart/drawers/ht-data-series.drawer.js +37 -1
  169. package/dist/chart/events/event-bus.js +73 -1
  170. package/dist/chart/events/events.js +3 -1
  171. package/dist/chart/inputhandlers/candle-tap.handler.js +46 -1
  172. package/dist/chart/inputhandlers/chart-resize.handler.js +98 -1
  173. package/dist/chart/inputhandlers/cross-event-producer.component.js +67 -1
  174. package/dist/chart/inputhandlers/hover-producer.component.d.ts +2 -2
  175. package/dist/chart/inputhandlers/hover-producer.component.js +228 -1
  176. package/dist/chart/inputhandlers/main-canvas-touch.handler.d.ts +2 -2
  177. package/dist/chart/inputhandlers/main-canvas-touch.handler.js +80 -1
  178. package/dist/chart/inputlisteners/canvas-input-listener.component.js +629 -1
  179. package/dist/chart/model/baseline.model.js +88 -1
  180. package/dist/chart/model/bounds.model.js +1 -1
  181. package/dist/chart/model/candle-hover.js +70 -1
  182. package/dist/chart/model/candle-series-high-low.provider.js +45 -1
  183. package/dist/chart/model/candle-series.model.d.ts +3 -3
  184. package/dist/chart/model/candle-series.model.js +245 -1
  185. package/dist/chart/model/candle.model.js +69 -1
  186. package/dist/chart/model/canvas.model.js +228 -1
  187. package/dist/chart/model/chart-base-element.js +129 -1
  188. package/dist/chart/model/compare-series-hover.js +25 -1
  189. package/dist/chart/model/data-series-view.d.ts +5 -5
  190. package/dist/chart/model/data-series-view.js +111 -1
  191. package/dist/chart/model/data-series.config.js +14 -1
  192. package/dist/chart/model/data-series.model.d.ts +4 -4
  193. package/dist/chart/model/data-series.model.js +281 -1
  194. package/dist/chart/model/date-time.formatter.js +151 -1
  195. package/dist/chart/model/hit-test-canvas.model.d.ts +1 -1
  196. package/dist/chart/model/hit-test-canvas.model.js +256 -1
  197. package/dist/chart/model/main-candle-series.model.d.ts +1 -1
  198. package/dist/chart/model/main-candle-series.model.js +29 -1
  199. package/dist/chart/model/scale.model.d.ts +2 -1
  200. package/dist/chart/model/scale.model.js +316 -1
  201. package/dist/chart/model/scaling/auto-scale.model.js +97 -1
  202. package/dist/chart/model/scaling/constrait.functions.js +61 -1
  203. package/dist/chart/model/scaling/lock-ratio.model.js +17 -1
  204. package/dist/chart/model/scaling/move-chart.functions.js +22 -1
  205. package/dist/chart/model/scaling/viewport.model.d.ts +2 -2
  206. package/dist/chart/model/scaling/viewport.model.js +279 -1
  207. package/dist/chart/model/scaling/x-zooming.functions.js +35 -1
  208. package/dist/chart/model/time-zone.model.js +109 -1
  209. package/dist/chart/model/visual-candle.js +134 -1
  210. package/dist/chart/utils/__tests__/array.utils.test.js +135 -1
  211. package/dist/chart/utils/__tests__/math.utils.test.js +14 -1
  212. package/dist/chart/utils/__tests__/object.utils.test.js +11 -1
  213. package/dist/chart/utils/__tests__/priceIncrementsUtils.test.js +29 -1
  214. package/dist/chart/utils/array.utils.d.ts +1 -1
  215. package/dist/chart/utils/array.utils.js +269 -1
  216. package/dist/chart/utils/auto-period-detector.utils.js +39 -1
  217. package/dist/chart/utils/candles-generator-ts.utils.js +20 -1
  218. package/dist/chart/utils/candles-generator.utils.js +161 -1
  219. package/dist/chart/utils/candles.utils.js +42 -1
  220. package/dist/chart/utils/canvas/canvas-drawing-functions.utils.js +144 -1
  221. package/dist/chart/utils/canvas/canvas-font-measure-tool.utils.js +51 -1
  222. package/dist/chart/utils/canvas/canvas-text-functions.utils.js +156 -1
  223. package/dist/chart/utils/color.utils.js +31 -1
  224. package/dist/chart/utils/device/browser.utils.js +10 -1
  225. package/dist/chart/utils/device/device-detector.utils.js +24 -1
  226. package/dist/chart/utils/device/device-pixel-ratio.utils.js +21 -1
  227. package/dist/chart/utils/device/touchpad.utils.js +91 -1
  228. package/dist/chart/utils/dom.utils.js +15 -1
  229. package/dist/chart/utils/function.utils.js +16 -1
  230. package/dist/chart/utils/linkedList.utils.d.ts +28 -0
  231. package/dist/chart/utils/linkedList.utils.js +138 -0
  232. package/dist/chart/utils/math.utils.js +115 -1
  233. package/dist/chart/utils/merge.utils.js +56 -1
  234. package/dist/chart/utils/object.utils.js +43 -1
  235. package/dist/chart/utils/performance/animation-frame-cache.utils.js +77 -0
  236. package/dist/chart/utils/{perfomance → performance}/debounce.utils.js +7 -1
  237. package/dist/chart/utils/performance/memoize.utils.js +74 -0
  238. package/dist/chart/utils/performance/request-animation-frame-throttle.utils.js +43 -0
  239. package/dist/chart/utils/performance/throttle.utils.js +26 -0
  240. package/dist/chart/utils/price-increments.utils.d.ts +1 -0
  241. package/dist/chart/utils/price-increments.utils.js +127 -1
  242. package/dist/chart/utils/uuid.utils.js +4 -1
  243. package/dist/dxchart.min.js +9 -12
  244. package/dist/index.d.ts +3 -3
  245. package/dist/index.js +20 -1
  246. package/package.json +4 -4
  247. package/dist/chart/utils/perfomance/animation-frame-cache.utils.js +0 -6
  248. package/dist/chart/utils/perfomance/memoize.utils.js +0 -6
  249. package/dist/chart/utils/perfomance/request-animation-frame-throttle.utils.js +0 -6
  250. package/dist/chart/utils/perfomance/throttle.utils.js +0 -6
  251. /package/dist/chart/utils/{perfomance → performance}/animation-frame-cache.utils.d.ts +0 -0
  252. /package/dist/chart/utils/{perfomance → performance}/debounce.utils.d.ts +0 -0
  253. /package/dist/chart/utils/{perfomance → performance}/memoize.utils.d.ts +0 -0
  254. /package/dist/chart/utils/{perfomance → performance}/request-animation-frame-throttle.utils.d.ts +0 -0
  255. /package/dist/chart/utils/{perfomance → performance}/throttle.utils.d.ts +0 -0
@@ -3,4 +3,164 @@
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{getFontFromConfig as M}from"../../chart.config";import{redrawBackgroundArea as q}from"../../drawers/chart-background.drawer";import{drawPriceLabel as z,drawRoundedRect as J}from"../../utils/canvas/canvas-drawing-functions.utils";import{calculateSymbolHeight as D,calculateTextWidth as X}from"../../utils/canvas/canvas-font-measure-tool.utils";import{getLabelTextColorByBackgroundColor as j}from"../../utils/canvas/canvas-text-functions.utils";import{round as G}from"../../utils/math.utils";export const DEFAULT_PRICE_LABEL_PADDING=4;export function drawBadgeLabel(o,t,m,n,l,d,b,R=!1){var _,a,g,p,v,h,s;const r=d.align,f=(_=l.textFont)!==null&&_!==void 0?_:M(d),B=l.bgColor,E=(a=l.textColor)!==null&&a!==void 0?a:j(B,b.labelTextColor,b.labelInvertedTextColor),F=(g=l.paddingTop)!==null&&g!==void 0?g:DEFAULT_PRICE_LABEL_PADDING,x=(p=l.paddingBottom)!==null&&p!==void 0?p:DEFAULT_PRICE_LABEL_PADDING,L=(v=l.paddingEnd)!==null&&v!==void 0?v:DEFAULT_PRICE_LABEL_PADDING,i=G(D(f,o)/2),e=n-i-F,C=n+i+x-e;if((n<t.y+C/2||n>t.y+t.height-C/2)&&!R)return;o.save(),o.fillStyle=B,o.strokeStyle=B;const c=G(t.width/6),u=r==="right"?t.x:t.x+t.width,w=r==="right"?u+c:u-c,H=d.labelBoxMargin.end,k=H-L,T=t.width-c-k;z(o,w,e,u,e+G(C/2),w,e+C,T,(s=(h=d.typeConfig.badge)===null||h===void 0?void 0:h.rounded)!==null&&s!==void 0?s:!1,r),o.fillStyle=E,o.font=f;const I=r==="right"?t.x+t.width-X(m,o,f)-H:t.x+H;o.fillText(m,I,n+i-1),o.restore()}export function drawRectLabel(o,t,m,n,l,d,b,R=!1){var _,a,g,p,v,h,s,r,f,B,E;const F=d.align,x=(_=l.textFont)!==null&&_!==void 0?_:M(d),L=l.bgColor,i=(a=l.textColor)!==null&&a!==void 0?a:j(L,b.labelTextColor,b.labelInvertedTextColor),e=(g=d.typeConfig.rectangle)===null||g===void 0?void 0:g.paddings,W=(v=(p=l.paddingTop)!==null&&p!==void 0?p:e==null?void 0:e.top)!==null&&v!==void 0?v:DEFAULT_PRICE_LABEL_PADDING,C=(s=(h=l.paddingBottom)!==null&&h!==void 0?h:e==null?void 0:e.bottom)!==null&&s!==void 0?s:DEFAULT_PRICE_LABEL_PADDING,c=(f=(r=l.paddingEnd)!==null&&r!==void 0?r:e==null?void 0:e.end)!==null&&f!==void 0?f:DEFAULT_PRICE_LABEL_PADDING,u=l.paddingStart,w=D(x,o),H=n-w/2-W,T=n+w/2+C-H,I=(B=l.rounded)!==null&&B!==void 0?B:(E=d.typeConfig.rectangle)===null||E===void 0?void 0:E.rounded;if((n<t.y+T/2||n>t.y+t.height-T/2)&&!R)return;o.save(),o.fillStyle=L,o.strokeStyle=L;const y=d.labelBoxMargin.end;o.font=x;const O=X(m,o,x),P=y-c,S=u!==void 0?O+u+c:t.width-P,N=F==="right"?t.x+t.width-P-S:t.x+P,U=F==="right"?t.x+t.width-O-y:y;I?J(o,N,H,S,T,4,!0):o.fillRect(N,H,S,T),o.fillStyle=i,o.fillText(m,U,n+w/2-1),o.restore()}export function drawPlainLabel(o,t,m,n,l,d,b,R=!1,_){var a,g,p,v,h,s,r,f,B;const E=d.align,F=(a=l.textFont)!==null&&a!==void 0?a:M(d),x=l.bgColor,L=(g=l.textColor)!==null&&g!==void 0?g:j(x,b.labelTextColor,b.labelInvertedTextColor),i=(p=d.typeConfig.rectangle)===null||p===void 0?void 0:p.paddings,e=(h=(v=l.paddingTop)!==null&&v!==void 0?v:i==null?void 0:i.top)!==null&&h!==void 0?h:DEFAULT_PRICE_LABEL_PADDING,W=(r=(s=l.paddingBottom)!==null&&s!==void 0?s:i==null?void 0:i.bottom)!==null&&r!==void 0?r:DEFAULT_PRICE_LABEL_PADDING,C=(B=(f=l.paddingEnd)!==null&&f!==void 0?f:i==null?void 0:i.end)!==null&&B!==void 0?B:DEFAULT_PRICE_LABEL_PADDING,c=l.paddingStart,u=D(F,o),w=n-u/2-e,k=n+u/2+W-w;if((n<t.y+k/2||n>t.y+t.height-k/2)&&!R)return;o.save(),o.fillStyle=x,o.strokeStyle=x;const T=d.labelBoxMargin.end;o.font=F;const I=X(m,o,F),y=T-C,O=c!==void 0?I+c+C:t.width-y,P=E==="right"?t.x+t.width-y-O:t.x+y,S=E==="right"?t.x+t.width-I-T:T;_&&q(_,o,P,w,O,k),o.fillStyle=L,o.fillText(m,S,n+u/2-1),o.restore()}export function getLabelYOffset(o,t,m=DEFAULT_PRICE_LABEL_PADDING){return D(o,t)/2+m}
6
+ import { getFontFromConfig } from '../../chart.config';
7
+ import { redrawBackgroundArea } from '../../drawers/chart-background.drawer';
8
+ import { drawPriceLabel, drawRoundedRect } from '../../utils/canvas/canvas-drawing-functions.utils';
9
+ import { calculateSymbolHeight, calculateTextWidth } from '../../utils/canvas/canvas-font-measure-tool.utils';
10
+ import { getLabelTextColorByBackgroundColor } from '../../utils/canvas/canvas-text-functions.utils';
11
+ import { round } from '../../utils/math.utils';
12
+ export const DEFAULT_PRICE_LABEL_PADDING = 4;
13
+ /**
14
+ * Draws badge label on Y axis with provided parameters.
15
+ * @param ctx - canvas 2D context to draw on
16
+ * @param bounds - bounds of Y axis
17
+ * @param text - text to draw
18
+ * @param centralY - y
19
+ * @param config - label styles config
20
+ * @param align
21
+ * @param yAxisState
22
+ */
23
+ export function drawBadgeLabel(ctx, bounds, text, centralY, config, yAxisState, yAxisColors, drawOutside = false) {
24
+ var _a, _b, _c, _d, _e, _f, _g;
25
+ const align = yAxisState.align;
26
+ const textFont = (_a = config.textFont) !== null && _a !== void 0 ? _a : getFontFromConfig(yAxisState);
27
+ const bgColor = config.bgColor;
28
+ const textColor = (_b = config.textColor) !== null && _b !== void 0 ? _b : getLabelTextColorByBackgroundColor(bgColor, yAxisColors.labelTextColor, yAxisColors.labelInvertedTextColor);
29
+ const paddingTop = (_c = config.paddingTop) !== null && _c !== void 0 ? _c : DEFAULT_PRICE_LABEL_PADDING;
30
+ const paddingBottom = (_d = config.paddingBottom) !== null && _d !== void 0 ? _d : DEFAULT_PRICE_LABEL_PADDING;
31
+ const paddingEnd = (_e = config.paddingEnd) !== null && _e !== void 0 ? _e : DEFAULT_PRICE_LABEL_PADDING;
32
+ const halfFontHeight = round(calculateSymbolHeight(textFont, ctx) / 2);
33
+ const labelBoxTopY = centralY - halfFontHeight - paddingTop;
34
+ const labelBoxBottomY = centralY + halfFontHeight + paddingBottom;
35
+ const labelBoxHeight = labelBoxBottomY - labelBoxTopY;
36
+ // do not draw, if label is out of bounds
37
+ if ((centralY < bounds.y + labelBoxHeight / 2 || centralY > bounds.y + bounds.height - labelBoxHeight / 2) &&
38
+ !drawOutside) {
39
+ return;
40
+ }
41
+ ctx.save();
42
+ ctx.fillStyle = bgColor;
43
+ ctx.strokeStyle = bgColor;
44
+ const labelForeWidth = round(bounds.width / 6);
45
+ const x1 = align === 'right' ? bounds.x : bounds.x + bounds.width;
46
+ const x2 = align === 'right' ? x1 + labelForeWidth : x1 - labelForeWidth;
47
+ const xTextOffset = yAxisState.labelBoxMargin.end;
48
+ const marginEnd = xTextOffset - paddingEnd;
49
+ // main body label width, without triangle
50
+ const width = bounds.width - labelForeWidth - marginEnd;
51
+ drawPriceLabel(ctx, x2, labelBoxTopY, x1, labelBoxTopY + round(labelBoxHeight / 2), x2, labelBoxTopY + labelBoxHeight, width, (_g = (_f = yAxisState.typeConfig.badge) === null || _f === void 0 ? void 0 : _f.rounded) !== null && _g !== void 0 ? _g : false, align);
52
+ ctx.fillStyle = textColor;
53
+ ctx.font = textFont;
54
+ const textX = align === 'right'
55
+ ? bounds.x + bounds.width - calculateTextWidth(text, ctx, textFont) - xTextOffset
56
+ : bounds.x + xTextOffset;
57
+ ctx.fillText(text, textX, centralY + halfFontHeight - 1); // -1 for font height adjustment
58
+ ctx.restore();
59
+ }
60
+ /**
61
+ * Draws rectangle label on Y axis with provided parameters.
62
+ * @param ctx - canvas 2D context to draw on
63
+ * @param bounds - bounds of Y axis
64
+ * @param text - text to draw
65
+ * @param centralY - y
66
+ * @param config - label styles config
67
+ * @param align
68
+ * @param yAxisState
69
+ */
70
+ export function drawRectLabel(ctx, bounds, text, centralY, config, yAxisState, yAxisColors, drawOutside = false) {
71
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
72
+ const align = yAxisState.align;
73
+ const textFont = (_a = config.textFont) !== null && _a !== void 0 ? _a : getFontFromConfig(yAxisState);
74
+ const bgColor = config.bgColor;
75
+ const textColor = (_b = config.textColor) !== null && _b !== void 0 ? _b : getLabelTextColorByBackgroundColor(bgColor, yAxisColors.labelTextColor, yAxisColors.labelInvertedTextColor);
76
+ const paddings = (_c = yAxisState.typeConfig.rectangle) === null || _c === void 0 ? void 0 : _c.paddings;
77
+ const paddingTop = (_e = (_d = config.paddingTop) !== null && _d !== void 0 ? _d : paddings === null || paddings === void 0 ? void 0 : paddings.top) !== null && _e !== void 0 ? _e : DEFAULT_PRICE_LABEL_PADDING;
78
+ const paddingBottom = (_g = (_f = config.paddingBottom) !== null && _f !== void 0 ? _f : paddings === null || paddings === void 0 ? void 0 : paddings.bottom) !== null && _g !== void 0 ? _g : DEFAULT_PRICE_LABEL_PADDING;
79
+ const paddingEnd = (_j = (_h = config.paddingEnd) !== null && _h !== void 0 ? _h : paddings === null || paddings === void 0 ? void 0 : paddings.end) !== null && _j !== void 0 ? _j : DEFAULT_PRICE_LABEL_PADDING;
80
+ const paddingStart = config.paddingStart;
81
+ const fontHeight = calculateSymbolHeight(textFont, ctx);
82
+ const labelBoxTopY = centralY - fontHeight / 2 - paddingTop;
83
+ const labelBoxBottomY = centralY + fontHeight / 2 + paddingBottom;
84
+ const labelBoxHeight = labelBoxBottomY - labelBoxTopY;
85
+ const rounded = (_k = config.rounded) !== null && _k !== void 0 ? _k : (_l = yAxisState.typeConfig.rectangle) === null || _l === void 0 ? void 0 : _l.rounded;
86
+ // do not draw, if label is out of bounds
87
+ if ((centralY < bounds.y + labelBoxHeight / 2 || centralY > bounds.y + bounds.height - labelBoxHeight / 2) &&
88
+ !drawOutside) {
89
+ return;
90
+ }
91
+ ctx.save();
92
+ ctx.fillStyle = bgColor;
93
+ ctx.strokeStyle = bgColor;
94
+ const xTextOffset = yAxisState.labelBoxMargin.end;
95
+ ctx.font = textFont;
96
+ const textWidth = calculateTextWidth(text, ctx, textFont);
97
+ const marginEnd = xTextOffset - paddingEnd;
98
+ const width = paddingStart !== undefined ? textWidth + paddingStart + paddingEnd : bounds.width - marginEnd;
99
+ const x = align === 'right' ? bounds.x + bounds.width - marginEnd - width : bounds.x + marginEnd;
100
+ const textX = align === 'right' ? bounds.x + bounds.width - textWidth - xTextOffset : xTextOffset;
101
+ if (rounded) {
102
+ drawRoundedRect(ctx, x, labelBoxTopY, width, labelBoxHeight, 4, true);
103
+ }
104
+ else {
105
+ ctx.fillRect(x, labelBoxTopY, width, labelBoxHeight);
106
+ }
107
+ ctx.fillStyle = textColor;
108
+ ctx.fillText(text, textX, centralY + fontHeight / 2 - 1); // -1 for font height adjustment
109
+ ctx.restore();
110
+ }
111
+ /**
112
+ * Draws rectangle label on Y axis with provided parameters but with transparent background.
113
+ * @param ctx - canvas 2D context to draw on
114
+ * @param bounds - bounds of Y axis
115
+ * @param text - text to draw
116
+ * @param centralY - y
117
+ * @param config - label styles config
118
+ * @param align
119
+ * @param yAxisState
120
+ */
121
+ export function drawPlainLabel(ctx, bounds, text, centralY, config, yAxisState, yAxisColors, drawOutside = false, backgroundCtx) {
122
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
123
+ const align = yAxisState.align;
124
+ const textFont = (_a = config.textFont) !== null && _a !== void 0 ? _a : getFontFromConfig(yAxisState);
125
+ const bgColor = config.bgColor;
126
+ const textColor = (_b = config.textColor) !== null && _b !== void 0 ? _b : getLabelTextColorByBackgroundColor(bgColor, yAxisColors.labelTextColor, yAxisColors.labelInvertedTextColor);
127
+ const paddings = (_c = yAxisState.typeConfig.rectangle) === null || _c === void 0 ? void 0 : _c.paddings;
128
+ const paddingTop = (_e = (_d = config.paddingTop) !== null && _d !== void 0 ? _d : paddings === null || paddings === void 0 ? void 0 : paddings.top) !== null && _e !== void 0 ? _e : DEFAULT_PRICE_LABEL_PADDING;
129
+ const paddingBottom = (_g = (_f = config.paddingBottom) !== null && _f !== void 0 ? _f : paddings === null || paddings === void 0 ? void 0 : paddings.bottom) !== null && _g !== void 0 ? _g : DEFAULT_PRICE_LABEL_PADDING;
130
+ const paddingEnd = (_j = (_h = config.paddingEnd) !== null && _h !== void 0 ? _h : paddings === null || paddings === void 0 ? void 0 : paddings.end) !== null && _j !== void 0 ? _j : DEFAULT_PRICE_LABEL_PADDING;
131
+ const paddingStart = config.paddingStart;
132
+ const fontHeight = calculateSymbolHeight(textFont, ctx);
133
+ const labelBoxTopY = centralY - fontHeight / 2 - paddingTop;
134
+ const labelBoxBottomY = centralY + fontHeight / 2 + paddingBottom;
135
+ const labelBoxHeight = labelBoxBottomY - labelBoxTopY;
136
+ // do not draw, if label is out of bounds
137
+ if ((centralY < bounds.y + labelBoxHeight / 2 || centralY > bounds.y + bounds.height - labelBoxHeight / 2) &&
138
+ !drawOutside) {
139
+ return;
140
+ }
141
+ ctx.save();
142
+ ctx.fillStyle = bgColor;
143
+ ctx.strokeStyle = bgColor;
144
+ const xTextOffset = yAxisState.labelBoxMargin.end;
145
+ ctx.font = textFont;
146
+ const textWidth = calculateTextWidth(text, ctx, textFont);
147
+ const marginEnd = xTextOffset - paddingEnd;
148
+ const width = paddingStart !== undefined ? textWidth + paddingStart + paddingEnd : bounds.width - marginEnd;
149
+ const x = align === 'right' ? bounds.x + bounds.width - marginEnd - width : bounds.x + marginEnd;
150
+ const textX = align === 'right' ? bounds.x + bounds.width - textWidth - xTextOffset : xTextOffset;
151
+ backgroundCtx && redrawBackgroundArea(backgroundCtx, ctx, x, labelBoxTopY, width, labelBoxHeight);
152
+ ctx.fillStyle = textColor;
153
+ ctx.fillText(text, textX, centralY + fontHeight / 2 - 1); // -1 for font height adjustment
154
+ ctx.restore();
155
+ }
156
+ /**
157
+ * Offset from the center of label to the top/bottom.
158
+ *
159
+ * @param font Label font
160
+ * @param ctx Drawing context
161
+ * @param paddingTop - extra padding from top
162
+ */
163
+ export function getLabelYOffset(font, ctx, paddingTop = DEFAULT_PRICE_LABEL_PADDING) {
164
+ const fontHeight = calculateSymbolHeight(font, ctx);
165
+ return fontHeight / 2 + paddingTop;
166
+ }
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { Subject } from 'rxjs';
7
7
  import { CanvasBoundsContainer, HitBoundsTest } from '../../canvas/canvas-bounds-container';
8
- import { ChartConfigComponentsYAxis } from '../../chart.config';
8
+ import { YAxisConfig } from '../../chart.config';
9
9
  import EventBus from '../../events/event-bus';
10
10
  import { ChartBaseElement } from '../../model/chart-base-element';
11
11
  import { CanvasInputListenerComponent } from '../../inputlisteners/canvas-input-listener.component';
@@ -25,7 +25,7 @@ export declare class YAxisScaleHandler extends ChartBaseElement {
25
25
  lastYEnd: Unit;
26
26
  lastYHeight: Unit;
27
27
  lastYPxHeight: Pixel;
28
- constructor(bus: EventBus, config: ChartConfigComponentsYAxis, chartPanComponent: ChartPanComponent, viewportModel: ViewportModel, canvasInputListener: CanvasInputListenerComponent, canvasBoundsContainer: CanvasBoundsContainer, hitTest: HitBoundsTest, autoScaleCallback: (auto: boolean) => void);
28
+ constructor(bus: EventBus, config: YAxisConfig, chartPanComponent: ChartPanComponent, viewportModel: ViewportModel, canvasInputListener: CanvasInputListenerComponent, canvasBoundsContainer: CanvasBoundsContainer, hitTest: HitBoundsTest, autoScaleCallback: (auto: boolean) => void);
29
29
  private onYDragStart;
30
30
  private onYDragTick;
31
31
  private onYDragEnd;
@@ -3,4 +3,75 @@
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 p}from"rxjs";import{CanvasElement as m}from"../../canvas/canvas-bounds-container";import{ChartBaseElement as E}from"../../model/chart-base-element";import{DragNDropYComponent as b}from"../dran-n-drop_helper/drag-n-drop-y.component";const d=10;export class YAxisScaleHandler extends E{constructor(i,t,Y,g,n,D,h,l){if(super(),this.bus=i,this.viewportModel=g,this.canvasBoundsContainer=D,this.autoScaleCallback=l,this.yAxisDragEndSubject=new p,this.lastYStart=0,this.lastYEnd=0,this.lastYHeight=0,this.lastYPxHeight=0,this.onYDragStart=()=>{this.lastYStart=this.viewportModel.yStart,this.lastYEnd=this.viewportModel.yEnd,this.lastYHeight=this.viewportModel.yEnd-this.viewportModel.yStart,this.lastYPxHeight=this.canvasBoundsContainer.getBounds(m.Y_AXIS).height},this.onYDragTick=s=>{const{delta:e}=s;let a;e<0?a=1/(1+-e/this.lastYPxHeight*(d-1)):a=1+e/this.lastYPxHeight*(d-1);const c=(this.lastYHeight*a-this.lastYHeight)/2,u=this.lastYStart-c,S=this.lastYEnd+c;this.autoScaleCallback(!1),this.viewportModel.setYScale(u,S),this.bus.fireDraw()},this.onYDragEnd=()=>{this.yAxisDragEndSubject.next()},t.customScale){const s=()=>t.type!=="percent",e=new b(h,{onDragTick:r(this.onYDragTick,s),onDragStart:r(this.onYDragStart,s),onDragEnd:r(this.onYDragEnd,s)},n,Y,{disableChartPanning:!1});this.addChildEntity(e),t.customScaleDblClick&&n.observeDbClick(h).subscribe(()=>{l(!0),this.bus.fireDraw()})}}}const r=(o,i)=>(...t)=>i()&&o(...t);
6
+ import { Subject } from 'rxjs';
7
+ import { CanvasElement } from '../../canvas/canvas-bounds-container';
8
+ import { ChartBaseElement } from '../../model/chart-base-element';
9
+ import { DragNDropYComponent } from '../dran-n-drop_helper/drag-n-drop-y.component';
10
+ // if you drag full Y height from top to bottom - you will have x3 zoom, and vice-versa
11
+ const FULL_Y_HEIGHT_ZOOM_FACTOR = 10;
12
+ /**
13
+ * Handles the mouse drag on Y axis - to zoom the viewport vertically.
14
+ * @doc-tags scaling,zoom,viewport
15
+ */
16
+ export class YAxisScaleHandler extends ChartBaseElement {
17
+ constructor(bus, config, chartPanComponent, viewportModel, canvasInputListener, canvasBoundsContainer, hitTest, autoScaleCallback) {
18
+ super();
19
+ this.bus = bus;
20
+ this.viewportModel = viewportModel;
21
+ this.canvasBoundsContainer = canvasBoundsContainer;
22
+ this.autoScaleCallback = autoScaleCallback;
23
+ this.yAxisDragEndSubject = new Subject();
24
+ this.lastYStart = 0;
25
+ this.lastYEnd = 0;
26
+ this.lastYHeight = 0;
27
+ this.lastYPxHeight = 0;
28
+ this.onYDragStart = () => {
29
+ this.lastYStart = this.viewportModel.yStart;
30
+ this.lastYEnd = this.viewportModel.yEnd;
31
+ this.lastYHeight = this.viewportModel.yEnd - this.viewportModel.yStart;
32
+ this.lastYPxHeight = this.canvasBoundsContainer.getBounds(CanvasElement.Y_AXIS).height;
33
+ };
34
+ this.onYDragTick = (dragInfo) => {
35
+ const { delta: absoluteYDelta } = dragInfo;
36
+ // 1/3..3
37
+ let zoomYMult;
38
+ if (absoluteYDelta < 0) {
39
+ // 1/3..1
40
+ zoomYMult = 1 / (1 + (-absoluteYDelta / this.lastYPxHeight) * (FULL_Y_HEIGHT_ZOOM_FACTOR - 1));
41
+ }
42
+ else {
43
+ // 1..3
44
+ zoomYMult = 1 + (absoluteYDelta / this.lastYPxHeight) * (FULL_Y_HEIGHT_ZOOM_FACTOR - 1);
45
+ }
46
+ const newYHeight = this.lastYHeight * zoomYMult;
47
+ const delta = (newYHeight - this.lastYHeight) / 2;
48
+ const newYStart = this.lastYStart - delta;
49
+ const newYEnd = this.lastYEnd + delta;
50
+ this.autoScaleCallback(false);
51
+ this.viewportModel.setYScale(newYStart, newYEnd);
52
+ this.bus.fireDraw();
53
+ };
54
+ this.onYDragEnd = () => {
55
+ this.yAxisDragEndSubject.next();
56
+ };
57
+ // drag to Y-scale and double click to auto scale
58
+ if (config.customScale) {
59
+ const dragPredicate = () => config.type !== 'percent';
60
+ const dragNDropYComponent = new DragNDropYComponent(hitTest, {
61
+ onDragTick: callIfPredicateTrue(this.onYDragTick, dragPredicate),
62
+ onDragStart: callIfPredicateTrue(this.onYDragStart, dragPredicate),
63
+ onDragEnd: callIfPredicateTrue(this.onYDragEnd, dragPredicate),
64
+ }, canvasInputListener, chartPanComponent, {
65
+ disableChartPanning: false,
66
+ });
67
+ this.addChildEntity(dragNDropYComponent);
68
+ if (config.customScaleDblClick) {
69
+ canvasInputListener.observeDbClick(hitTest).subscribe(() => {
70
+ autoScaleCallback(true);
71
+ this.bus.fireDraw();
72
+ });
73
+ }
74
+ }
75
+ }
76
+ }
77
+ const callIfPredicateTrue = (fun, predicate) => (...args) => predicate() && fun(...args);
@@ -6,64 +6,68 @@
6
6
  import { Subject } from 'rxjs';
7
7
  import { CanvasBoundsContainer } from '../../canvas/canvas-bounds-container';
8
8
  import { CursorHandler } from '../../canvas/cursor.handler';
9
- import { BarType, ChartConfigComponentsYAxis, FullChartColors, FullChartConfig, YAxisAlign, YAxisLabelAppearanceType, YAxisLabelMode, YAxisLabelType } from '../../chart.config';
10
- import { CompositeDrawer } from '../../drawers/composite.drawer';
11
- import { DrawingManager } from '../../drawers/drawing-manager';
9
+ import { YAxisWidthContributor } from '../../canvas/y-axis-bounds.container';
10
+ import { BarType, FullChartColors, FullChartConfig, YAxisAlign, YAxisConfig, YAxisLabelAppearanceType, YAxisLabelMode, YAxisLabelType } from '../../chart.config';
12
11
  import EventBus from '../../events/event-bus';
13
12
  import { CanvasInputListenerComponent } from '../../inputlisteners/canvas-input-listener.component';
14
13
  import { PriceMovement } from '../../model/candle-series.model';
15
14
  import { CanvasModel } from '../../model/canvas.model';
16
15
  import { ChartBaseElement } from '../../model/chart-base-element';
17
16
  import { DataSeriesType } from '../../model/data-series.config';
17
+ import { DataSeriesModel } from '../../model/data-series.model';
18
18
  import { ScaleModel } from '../../model/scale.model';
19
- import { ChartModel } from '../chart/chart.model';
20
19
  import { PriceAxisType } from '../labels_generator/numeric-axis-labels.generator';
21
20
  import { ChartPanComponent } from '../pan/chart-pan.component';
22
- import { PaneManager } from '../pane/pane-manager.component';
23
21
  import { VisualYAxisLabel, YAxisLabelsProvider } from './price_labels/y-axis-labels.model';
24
22
  import { YAxisScaleHandler } from './y-axis-scale.handler';
25
23
  import { YAxisModel } from './y-axis.model';
26
- import { YAxisWidthContributor } from '../../canvas/y-axis-bounds.container';
27
24
  export type LabelColorResolver = (priceMovement: PriceMovement, colors: FullChartColors) => string;
28
25
  /**
29
26
  * Y axis component. Contains all Y axis related logic.
30
27
  */
31
28
  export declare class YAxisComponent extends ChartBaseElement {
32
29
  private eventBus;
33
- private config;
34
30
  private canvasModel;
35
- private yAxisLabelsCanvasModel;
36
- private backgroundCanvasModel;
37
- private chartModel;
38
- private scaleModel;
31
+ scale: ScaleModel;
39
32
  private canvasBoundsContainer;
40
- private cursorHandler;
33
+ private cursors;
34
+ paneUUID: string;
35
+ extentIdx: number;
36
+ private labelsColorByChartTypeMap;
41
37
  yAxisScaleHandler: YAxisScaleHandler;
42
- yAxisModel: YAxisModel;
38
+ model: YAxisModel;
43
39
  axisTypeSetSubject: Subject<PriceAxisType>;
44
- readonly state: ChartConfigComponentsYAxis;
45
- private labelsColorByChartTypeMap;
46
- drawer: CompositeDrawer;
47
- constructor(eventBus: EventBus, config: FullChartConfig, canvasModel: CanvasModel, yAxisLabelsCanvasModel: CanvasModel, backgroundCanvasModel: CanvasModel, chartModel: ChartModel, scaleModel: ScaleModel, canvasInputListeners: CanvasInputListenerComponent, canvasBoundsContainer: CanvasBoundsContainer, drawingManager: DrawingManager, chartPanComponent: ChartPanComponent, paneManager: PaneManager, cursorHandler: CursorHandler);
40
+ readonly state: YAxisConfig;
41
+ constructor(eventBus: EventBus, config: FullChartConfig, canvasModel: CanvasModel, scale: ScaleModel, canvasInputListeners: CanvasInputListenerComponent, canvasBoundsContainer: CanvasBoundsContainer, chartPanComponent: ChartPanComponent, cursors: CursorHandler, valueFormatter: (value: number) => string, dataSeriesProvider: () => DataSeriesModel | undefined, paneUUID: string, extentIdx: number);
42
+ /**
43
+ * Registers default label color resolvers for different chart types.
44
+ * @private
45
+ * @function
46
+ * @name registerDefaultLabelColorResolver
47
+ * @returns {void}
48
+ */
49
+ private registerDefaultLabelColorResolvers;
50
+ protected doActivate(): void;
48
51
  private updateCursor;
49
52
  /**
50
53
  * Updates labels visual appearance on canvas
51
54
  */
52
55
  updateOrderedLabels(adjustYAxisWidth?: boolean): void;
53
56
  /**
54
- * Calls the parent class's doActivate method
55
- * @protected
57
+ * Registers a label color resolver for a specific chart type.
58
+ *
59
+ * @param {BarType} chartType - The type of chart for which the label color resolver is being registered.
60
+ * @param {LabelColorResolver} resolver - The function that will be used to resolve the color of the labels for the specified chart type.
56
61
  * @returns {void}
57
62
  */
58
- protected doActivate(): void;
63
+ registerLabelColorResolver(chartType: BarType, resolver: LabelColorResolver): void;
59
64
  /**
60
- * Registers default label color resolvers for different chart types.
61
- * @private
62
- * @function
63
- * @name registerDefaultLabelColorResolver
64
- * @returns {void}
65
+ * Returns a function that resolves the color for a label based on the type of data series.
66
+ * @param {DataSeriesType} candlesType - The type of data series.
67
+ * @returns {Function} - A function that resolves the color for a label.
68
+ * If there is no color mapping for the given data series type, it returns the default color resolver function.
65
69
  */
66
- private registerDefaultLabelColorResolver;
70
+ getLabelsColorResolver(candlesType: DataSeriesType): LabelColorResolver;
67
71
  /**
68
72
  * You can add a custom labels provider for additional labels on YAxis (like for drawings, symbol last price, studies, etc..)
69
73
  * @param groupName - a group in which labels position recalculation algorithm will be applied, usually it's subchart name
@@ -82,6 +86,7 @@ export declare class YAxisComponent extends ChartBaseElement {
82
86
  * @param name
83
87
  */
84
88
  deleteSimpleYAxisLabel(name: string): void;
89
+ getAxisType(): PriceAxisType;
85
90
  /**
86
91
  * Unregister a Y axis labels provider from the specified group.
87
92
  * @param {string} groupName - The name of the group from which to unregister the provider. Defaults to LabelsGroups.MAIN.
@@ -89,6 +94,7 @@ export declare class YAxisComponent extends ChartBaseElement {
89
94
  * @returns {string} - The ID of the unregistered provider.
90
95
  */
91
96
  unregisterYAxisLabelsProvider(groupName: string | undefined, id: string): string;
97
+ getBounds(): import("../../model/bounds.model").Bounds;
92
98
  /**
93
99
  * If custom pane has y-axis it has to register width contributor to correctly calculate overall y-axis width.
94
100
  * @param contributor
@@ -140,19 +146,4 @@ export declare class YAxisComponent extends ChartBaseElement {
140
146
  * @returns {void}
141
147
  */
142
148
  changeLabelsDescriptionVisibility(descVisibility: boolean): void;
143
- /**
144
- * Registers a label color resolver for a specific chart type.
145
- *
146
- * @param {BarType} chartType - The type of chart for which the label color resolver is being registered.
147
- * @param {LabelColorResolver} resolver - The function that will be used to resolve the color of the labels for the specified chart type.
148
- * @returns {void}
149
- */
150
- registerLabelColorResolver(chartType: BarType, resolver: LabelColorResolver): void;
151
- /**
152
- * Returns a function that resolves the color for a label based on the type of data series.
153
- * @param {DataSeriesType} candlesType - The type of data series.
154
- * @returns {Function} - A function that resolves the color for a label.
155
- * If there is no color mapping for the given data series type, it returns the default color resolver function.
156
- */
157
- getLabelsColorResolver(candlesType: DataSeriesType): LabelColorResolver;
158
149
  }
@@ -3,4 +3,223 @@
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 g}from"rxjs";import{CanvasElement as d,CHART_UUID as r}from"../../canvas/canvas-bounds-container";import{ClearCanvasDrawer as f}from"../../drawers/clear-canvas.drawer";import{CompositeDrawer as w}from"../../drawers/composite.drawer";import{ChartBaseElement as Y}from"../../model/chart-base-element";import{uuid as D}from"../../utils/uuid.utils";import{resolveColorForArea as S,resolveColorForBar as R,resolveColorForBaseLine as P,resolveColorForCandle as I,resolveColorForHistogram as B,resolveColorForLine as _,resolveColorForScatterPlot as T,resolveColorForTrendAndHollow as b,resolveDefaultColorForLabel as E}from"./label-color.functions";import{LastCandleLabelsProvider as F}from"./price_labels/last-candle-labels.provider";import{LabelsGroups as h}from"./price_labels/y-axis-labels.model";import{YAxisPriceLabelsDrawer as H}from"./price_labels/y-axis-price-labels.drawer";import{YAxisScaleHandler as U}from"./y-axis-scale.handler";import{YAxisDrawer as N}from"./y-axis.drawer";import{YAxisModel as X}from"./y-axis.model";export class YAxisComponent extends Y{constructor(e,s,t,A,x,l,a,C,i,c,L,n,p){super(),this.eventBus=e,this.config=s,this.canvasModel=t,this.yAxisLabelsCanvasModel=A,this.backgroundCanvasModel=x,this.chartModel=l,this.scaleModel=a,this.canvasBoundsContainer=i,this.cursorHandler=p,this.axisTypeSetSubject=new g,this.labelsColorByChartTypeMap={},this.state=s.components.yAxis;const o=new w;this.drawer=o;const y=new f(this.yAxisLabelsCanvasModel);o.addDrawer(y,"YAXIS_CLEAR"),this.registerDefaultLabelColorResolver(),c.addDrawer(o,"Y_AXIS"),this.yAxisScaleHandler=new U(e,this.state,L,a,C,i,i.getBoundsHitTest(d.PANE_UUID_Y_AXIS(r)),M=>a.autoScale(M)),this.addChildEntity(this.yAxisScaleHandler),this.yAxisModel=new X(n.paneComponents[r],e,this.config,i,t,l,a),this.addChildEntity(this.yAxisModel),n.paneComponents[r].yAxisLabelsGenerator=this.yAxisModel.yAxisLabelsGenerator;const u=new N(s,this.state,t,()=>this.yAxisModel.yAxisBaseLabelsModel.labels,()=>i.getBounds(d.Y_AXIS),()=>this.state.visible,l.pane.scaleModel.toY.bind(l.pane.scaleModel));o.addDrawer(u);const v=new H(()=>this.yAxisModel.yAxisLabelsModel.orderedLabels,this.yAxisLabelsCanvasModel,this.backgroundCanvasModel,this.state,this.canvasBoundsContainer,this.config.colors.yAxis,this.yAxisModel.yAxisLabelsModel.customLabels);o.addDrawer(v);const m=new F(this.chartModel,this.config,this.chartModel.lastCandleLabelsByChartType,this.getLabelsColorResolver.bind(this));this.registerYAxisLabelsProvider(m,h.MAIN),n.paneComponents[r].mainYExtentComponent.getAxisType=()=>this.state.type,this.updateCursor()}updateCursor(){this.state.type==="percent"?this.cursorHandler.setCursorForCanvasEl(d.PANE_UUID_Y_AXIS(r),this.config.components.yAxis.resizeDisabledCursor):this.cursorHandler.setCursorForCanvasEl(d.PANE_UUID_Y_AXIS(r),this.config.components.yAxis.cursor)}updateOrderedLabels(e=!1){this.yAxisModel.yAxisLabelsModel.updateLabels(e)}doActivate(){super.doActivate()}registerDefaultLabelColorResolver(){this.registerLabelColorResolver("candle",I),this.registerLabelColorResolver("bar",R),this.registerLabelColorResolver("line",_),this.registerLabelColorResolver("area",S),this.registerLabelColorResolver("scatterPlot",T),this.registerLabelColorResolver("histogram",B),this.registerLabelColorResolver("baseline",P),this.registerLabelColorResolver("trend",b),this.registerLabelColorResolver("hollow",b)}registerYAxisLabelsProvider(e,s=h.MAIN,t=D()){return this.yAxisModel.yAxisLabelsModel.registerYAxisLabelsProvider(s,e,t),t}addSimpleYAxisLabel(e,s){this.yAxisModel.yAxisLabelsModel.customLabels[e]=s,this.canvasModel.fireDraw()}deleteSimpleYAxisLabel(e){delete this.yAxisModel.yAxisLabelsModel.customLabels[e],this.canvasModel.fireDraw()}unregisterYAxisLabelsProvider(e=h.MAIN,s){return this.yAxisModel.yAxisLabelsModel.unregisterYAxisLabelsProvider(e,s),s}registerYAxisWidthContributor(e){this.canvasBoundsContainer.yAxisBoundsContainer.registerYAxisWidthContributor(e)}setAxisType(e){e!==this.state.type&&(this.state.type=e,this.axisTypeSetSubject.next(e),this.scaleModel.autoScale(!0),this.yAxisModel.yAxisLabelsModel.updateLabels(!0),this.updateCursor())}setYAxisAlign(e){this.state.align=e,this.canvasBoundsContainer.updateYAxisWidths(),this.eventBus.fireDraw()}setVisible(e){this.state.visible=e,this.eventBus.fireDraw()}isVisible(){return this.state.visible}setLockPriceToBarRatio(e=!1){this.scaleModel.setLockPriceToBarRatio(e)}changeLabelMode(e,s){this.state.labels.settings[e].mode=s,this.yAxisModel.yAxisLabelsModel.updateLabels()}changeLabelAppearance(e,s){this.state.labels.settings[e].type=s,this.yAxisModel.yAxisLabelsModel.updateLabels()}togglePriceScaleInverse(e){this.scaleModel.state.inverse=e,this.scaleModel.inverseY=e,this.scaleModel.scaleInversedSubject.next(e)}changeLabelsDescriptionVisibility(e){this.state.labels.descriptions=e,this.canvasModel.fireDraw()}registerLabelColorResolver(e,s){this.labelsColorByChartTypeMap[e]=s}getLabelsColorResolver(e){var s;return(s=this.labelsColorByChartTypeMap[e])!==null&&s!==void 0?s:E}}
6
+ import { Subject } from 'rxjs';
7
+ import { CanvasElement } from '../../canvas/canvas-bounds-container';
8
+ import { ChartBaseElement } from '../../model/chart-base-element';
9
+ import { cloneUnsafe } from '../../utils/object.utils';
10
+ import { uuid } from '../../utils/uuid.utils';
11
+ import { resolveColorForArea, resolveColorForBar, resolveColorForBaseLine, resolveColorForCandle, resolveColorForHistogram, resolveColorForLine, resolveColorForScatterPlot, resolveColorForTrendAndHollow, resolveDefaultColorForLabel } from './label-color.functions';
12
+ import { LabelsGroups } from './price_labels/y-axis-labels.model';
13
+ import { YAxisScaleHandler } from './y-axis-scale.handler';
14
+ import { YAxisModel } from './y-axis.model';
15
+ /**
16
+ * Y axis component. Contains all Y axis related logic.
17
+ */
18
+ export class YAxisComponent extends ChartBaseElement {
19
+ constructor(eventBus, config, canvasModel, scale, canvasInputListeners, canvasBoundsContainer, chartPanComponent, cursors, valueFormatter, dataSeriesProvider, paneUUID, extentIdx) {
20
+ super();
21
+ this.eventBus = eventBus;
22
+ this.canvasModel = canvasModel;
23
+ this.scale = scale;
24
+ this.canvasBoundsContainer = canvasBoundsContainer;
25
+ this.cursors = cursors;
26
+ this.paneUUID = paneUUID;
27
+ this.extentIdx = extentIdx;
28
+ this.labelsColorByChartTypeMap = {};
29
+ this.axisTypeSetSubject = new Subject();
30
+ this.state = cloneUnsafe(config.components.yAxis);
31
+ //#region init yAxisScaleHandler
32
+ this.yAxisScaleHandler = new YAxisScaleHandler(eventBus, this.state, chartPanComponent, scale, canvasInputListeners, canvasBoundsContainer, canvasBoundsContainer.getBoundsHitTest(CanvasElement.PANE_UUID_Y_AXIS(paneUUID, extentIdx)), auto => scale.autoScale(auto));
33
+ this.addChildEntity(this.yAxisScaleHandler);
34
+ //#endregion
35
+ this.model = new YAxisModel(this.paneUUID, eventBus, this.state, canvasBoundsContainer, canvasModel, scale, valueFormatter, dataSeriesProvider, extentIdx);
36
+ this.addChildEntity(this.model);
37
+ this.updateCursor();
38
+ this.registerDefaultLabelColorResolvers();
39
+ }
40
+ /**
41
+ * Registers default label color resolvers for different chart types.
42
+ * @private
43
+ * @function
44
+ * @name registerDefaultLabelColorResolver
45
+ * @returns {void}
46
+ */
47
+ registerDefaultLabelColorResolvers() {
48
+ this.registerLabelColorResolver('candle', resolveColorForCandle);
49
+ this.registerLabelColorResolver('bar', resolveColorForBar);
50
+ this.registerLabelColorResolver('line', resolveColorForLine);
51
+ this.registerLabelColorResolver('area', resolveColorForArea);
52
+ this.registerLabelColorResolver('scatterPlot', resolveColorForScatterPlot);
53
+ this.registerLabelColorResolver('histogram', resolveColorForHistogram);
54
+ this.registerLabelColorResolver('baseline', resolveColorForBaseLine);
55
+ this.registerLabelColorResolver('trend', resolveColorForTrendAndHollow);
56
+ this.registerLabelColorResolver('hollow', resolveColorForTrendAndHollow);
57
+ }
58
+ doActivate() {
59
+ this.addRxSubscription(this.scale.beforeStartAnimationSubject.subscribe(() => this.state.type === 'percent' && this.scale.haltAnimation()));
60
+ }
61
+ updateCursor() {
62
+ if (this.state.type === 'percent') {
63
+ this.cursors.setCursorForCanvasEl(CanvasElement.PANE_UUID_Y_AXIS(this.paneUUID, this.extentIdx), this.state.resizeDisabledCursor);
64
+ }
65
+ else {
66
+ this.cursors.setCursorForCanvasEl(CanvasElement.PANE_UUID_Y_AXIS(this.paneUUID, this.extentIdx), this.state.cursor);
67
+ }
68
+ }
69
+ /**
70
+ * Updates labels visual appearance on canvas
71
+ */
72
+ updateOrderedLabels(adjustYAxisWidth = false) {
73
+ this.model.fancyLabelsModel.updateLabels(adjustYAxisWidth);
74
+ }
75
+ /**
76
+ * Registers a label color resolver for a specific chart type.
77
+ *
78
+ * @param {BarType} chartType - The type of chart for which the label color resolver is being registered.
79
+ * @param {LabelColorResolver} resolver - The function that will be used to resolve the color of the labels for the specified chart type.
80
+ * @returns {void}
81
+ */
82
+ registerLabelColorResolver(chartType, resolver) {
83
+ this.labelsColorByChartTypeMap[chartType] = resolver;
84
+ }
85
+ /**
86
+ * Returns a function that resolves the color for a label based on the type of data series.
87
+ * @param {DataSeriesType} candlesType - The type of data series.
88
+ * @returns {Function} - A function that resolves the color for a label.
89
+ * If there is no color mapping for the given data series type, it returns the default color resolver function.
90
+ */
91
+ getLabelsColorResolver(candlesType) {
92
+ var _a;
93
+ return (_a = this.labelsColorByChartTypeMap[candlesType]) !== null && _a !== void 0 ? _a : resolveDefaultColorForLabel;
94
+ }
95
+ //#region public methods
96
+ /**
97
+ * You can add a custom labels provider for additional labels on YAxis (like for drawings, symbol last price, studies, etc..)
98
+ * @param groupName - a group in which labels position recalculation algorithm will be applied, usually it's subchart name
99
+ * @param provider
100
+ * @param id
101
+ */
102
+ registerYAxisLabelsProvider(provider, groupName = LabelsGroups.MAIN, id = uuid()) {
103
+ this.model.fancyLabelsModel.registerYAxisLabelsProvider(groupName, provider, id);
104
+ return id;
105
+ }
106
+ /**
107
+ * An easier way to manage custom y-axis labels, than y-axis labels providers.
108
+ * However, overlapping avoidance is not supported
109
+ * @param name
110
+ * @param label
111
+ */
112
+ addSimpleYAxisLabel(name, label) {
113
+ this.model.fancyLabelsModel.customLabels[name] = label;
114
+ this.canvasModel.fireDraw();
115
+ }
116
+ /**
117
+ * @param name
118
+ */
119
+ deleteSimpleYAxisLabel(name) {
120
+ delete this.model.fancyLabelsModel.customLabels[name];
121
+ this.canvasModel.fireDraw();
122
+ }
123
+ getAxisType() {
124
+ return this.state.type;
125
+ }
126
+ /**
127
+ * Unregister a Y axis labels provider from the specified group.
128
+ * @param {string} groupName - The name of the group from which to unregister the provider. Defaults to LabelsGroups.MAIN.
129
+ * @param {string} id - The ID of the provider to unregister.
130
+ * @returns {string} - The ID of the unregistered provider.
131
+ */
132
+ unregisterYAxisLabelsProvider(groupName = LabelsGroups.MAIN, id) {
133
+ this.model.fancyLabelsModel.unregisterYAxisLabelsProvider(groupName, id);
134
+ return id;
135
+ }
136
+ getBounds() {
137
+ return this.canvasBoundsContainer.getBounds(CanvasElement.PANE_UUID_Y_AXIS(this.paneUUID, this.extentIdx));
138
+ }
139
+ /**
140
+ * If custom pane has y-axis it has to register width contributor to correctly calculate overall y-axis width.
141
+ * @param contributor
142
+ */
143
+ registerYAxisWidthContributor(contributor) {
144
+ this.canvasBoundsContainer.yAxisBoundsContainer.registerYAxisWidthContributor(contributor);
145
+ }
146
+ /**
147
+ * Sets the type of axis: percent, regular or logarithmic.
148
+ * @param type - the type of axis
149
+ */
150
+ setAxisType(type) {
151
+ if (type !== this.state.type) {
152
+ this.state.type = type;
153
+ this.axisTypeSetSubject.next(type);
154
+ this.scale.autoScale(true);
155
+ this.model.fancyLabelsModel.updateLabels(true);
156
+ this.updateCursor();
157
+ }
158
+ }
159
+ /**
160
+ * Change YAxis position to left or to right
161
+ * @param align
162
+ */
163
+ setYAxisAlign(align) {
164
+ this.state.align = align;
165
+ this.canvasBoundsContainer.updateYAxisWidths();
166
+ this.eventBus.fireDraw();
167
+ }
168
+ /**
169
+ * Controls visibility of the y-axis
170
+ */
171
+ setVisible(isVisible) {
172
+ this.state.visible = isVisible;
173
+ this.eventBus.fireDraw();
174
+ }
175
+ /**
176
+ * If visible, when you can see the y-axis on the chart
177
+ */
178
+ isVisible() {
179
+ return this.state.visible;
180
+ }
181
+ /**
182
+ * Controls lockPriceToBarRatio of the y-axis
183
+ */
184
+ setLockPriceToBarRatio(value = false) {
185
+ this.scale.setLockPriceToBarRatio(value);
186
+ }
187
+ /**
188
+ * Changes the visual type of particular label.
189
+ * @param type - label type
190
+ * @param mode - visual mode
191
+ */
192
+ changeLabelMode(type, mode) {
193
+ this.state.labels.settings[type].mode = mode;
194
+ this.model.fancyLabelsModel.updateLabels();
195
+ }
196
+ /**
197
+ * Changes the visual type of particular label.
198
+ * @param type - label type
199
+ * @param mode - visual mode
200
+ */
201
+ changeLabelAppearance(type, mode) {
202
+ this.state.labels.settings[type].type = mode;
203
+ this.model.fancyLabelsModel.updateLabels();
204
+ }
205
+ /**
206
+ * Sets the inverse price scale mode. Inverts Y axis vertically.
207
+ * Inversion also works for candles, drawings and overlay studies.
208
+ * @param inverse - true or false
209
+ */
210
+ togglePriceScaleInverse(inverse) {
211
+ this.scale.state.inverse = inverse;
212
+ this.scale.inverseY = inverse;
213
+ this.scale.scaleInversedSubject.next(inverse);
214
+ }
215
+ /**
216
+ * Changes the visibility of the labels' descriptions.
217
+ * @param {boolean} descVisibility - A boolean value indicating whether the descriptions should be visible or not.
218
+ * @returns {void}
219
+ */
220
+ changeLabelsDescriptionVisibility(descVisibility) {
221
+ this.state.labels.descriptions = descVisibility;
222
+ // recalculating labels is not needed, so just redraw YAxis
223
+ this.canvasModel.fireDraw();
224
+ }
225
+ }