@amcharts/amcharts5 5.11.2 → 5.12.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 (283) hide show
  1. package/.internal/charts/radar/RadarChart.d.ts +1 -0
  2. package/.internal/charts/radar/RadarChart.d.ts.map +1 -1
  3. package/.internal/charts/radar/RadarChart.js +4 -0
  4. package/.internal/charts/radar/RadarChart.js.map +1 -1
  5. package/.internal/charts/stock/SettingsModal.d.ts +1 -0
  6. package/.internal/charts/stock/SettingsModal.d.ts.map +1 -1
  7. package/.internal/charts/stock/SettingsModal.js +11 -3
  8. package/.internal/charts/stock/SettingsModal.js.map +1 -1
  9. package/.internal/charts/stock/indicators/Indicator.d.ts +1 -1
  10. package/.internal/charts/stock/indicators/Indicator.d.ts.map +1 -1
  11. package/.internal/charts/stock/indicators/Indicator.js.map +1 -1
  12. package/.internal/charts/stock/toolbar/DrawingControl.d.ts.map +1 -1
  13. package/.internal/charts/stock/toolbar/DrawingControl.js +6 -3
  14. package/.internal/charts/stock/toolbar/DrawingControl.js.map +1 -1
  15. package/.internal/charts/timeline/AxisRendererCurveX.d.ts +132 -0
  16. package/.internal/charts/timeline/AxisRendererCurveX.d.ts.map +1 -0
  17. package/.internal/charts/timeline/AxisRendererCurveX.js +537 -0
  18. package/.internal/charts/timeline/AxisRendererCurveX.js.map +1 -0
  19. package/.internal/charts/timeline/AxisRendererCurveY.d.ts +132 -0
  20. package/.internal/charts/timeline/AxisRendererCurveY.d.ts.map +1 -0
  21. package/.internal/charts/timeline/AxisRendererCurveY.js +308 -0
  22. package/.internal/charts/timeline/AxisRendererCurveY.js.map +1 -0
  23. package/.internal/charts/timeline/CurveChart.d.ts +63 -0
  24. package/.internal/charts/timeline/CurveChart.d.ts.map +1 -0
  25. package/.internal/charts/timeline/CurveChart.js +123 -0
  26. package/.internal/charts/timeline/CurveChart.js.map +1 -0
  27. package/.internal/charts/timeline/CurveColumnSeries.d.ts +66 -0
  28. package/.internal/charts/timeline/CurveColumnSeries.d.ts.map +1 -0
  29. package/.internal/charts/timeline/CurveColumnSeries.js +163 -0
  30. package/.internal/charts/timeline/CurveColumnSeries.js.map +1 -0
  31. package/.internal/charts/timeline/CurveCursor.d.ts +61 -0
  32. package/.internal/charts/timeline/CurveCursor.d.ts.map +1 -0
  33. package/.internal/charts/timeline/CurveCursor.js +134 -0
  34. package/.internal/charts/timeline/CurveCursor.js.map +1 -0
  35. package/.internal/charts/timeline/CurveDefaultTheme.d.ts +8 -0
  36. package/.internal/charts/timeline/CurveDefaultTheme.d.ts.map +1 -0
  37. package/.internal/charts/timeline/CurveDefaultTheme.js +72 -0
  38. package/.internal/charts/timeline/CurveDefaultTheme.js.map +1 -0
  39. package/.internal/charts/timeline/CurveLineSeries.d.ts +40 -0
  40. package/.internal/charts/timeline/CurveLineSeries.d.ts.map +1 -0
  41. package/.internal/charts/timeline/CurveLineSeries.js +101 -0
  42. package/.internal/charts/timeline/CurveLineSeries.js.map +1 -0
  43. package/.internal/charts/timeline/SerpentineChart.d.ts +60 -0
  44. package/.internal/charts/timeline/SerpentineChart.d.ts.map +1 -0
  45. package/.internal/charts/timeline/SerpentineChart.js +146 -0
  46. package/.internal/charts/timeline/SerpentineChart.js.map +1 -0
  47. package/.internal/charts/timeline/SpiralChart.d.ts +60 -0
  48. package/.internal/charts/timeline/SpiralChart.d.ts.map +1 -0
  49. package/.internal/charts/timeline/SpiralChart.js +58 -0
  50. package/.internal/charts/timeline/SpiralChart.js.map +1 -0
  51. package/.internal/charts/xy/axes/DateAxis.d.ts.map +1 -1
  52. package/.internal/charts/xy/axes/DateAxis.js +1 -0
  53. package/.internal/charts/xy/axes/DateAxis.js.map +1 -1
  54. package/.internal/charts/xy/series/BaseColumnSeries.d.ts.map +1 -1
  55. package/.internal/charts/xy/series/BaseColumnSeries.js +3 -1
  56. package/.internal/charts/xy/series/BaseColumnSeries.js.map +1 -1
  57. package/.internal/core/Classes.d.ts +16 -0
  58. package/.internal/core/Classes.d.ts.map +1 -1
  59. package/.internal/core/Classes.js.map +1 -1
  60. package/.internal/core/Registry.js +1 -1
  61. package/.internal/core/Registry.js.map +1 -1
  62. package/.internal/core/render/SerialChart.d.ts.map +1 -1
  63. package/.internal/core/render/SerialChart.js +12 -0
  64. package/.internal/core/render/SerialChart.js.map +1 -1
  65. package/.internal/core/render/Sprite.d.ts +7 -0
  66. package/.internal/core/render/Sprite.d.ts.map +1 -1
  67. package/.internal/core/render/Sprite.js +10 -0
  68. package/.internal/core/render/Sprite.js.map +1 -1
  69. package/.internal/core/util/List.d.ts +12 -0
  70. package/.internal/core/util/List.d.ts.map +1 -1
  71. package/.internal/core/util/List.js +23 -2
  72. package/.internal/core/util/List.js.map +1 -1
  73. package/.internal/core/util/Math.d.ts.map +1 -1
  74. package/.internal/core/util/Math.js +12 -5
  75. package/.internal/core/util/Math.js.map +1 -1
  76. package/.internal/plugins/json/Classes-script.d.ts +16 -0
  77. package/.internal/plugins/json/Classes-script.d.ts.map +1 -1
  78. package/.internal/plugins/json/Classes-script.js +8 -0
  79. package/.internal/plugins/json/Classes-script.js.map +1 -1
  80. package/.internal/plugins/json/Classes.d.ts +16 -0
  81. package/.internal/plugins/json/Classes.d.ts.map +1 -1
  82. package/.internal/plugins/json/Classes.js +8 -0
  83. package/.internal/plugins/json/Classes.js.map +1 -1
  84. package/CHANGELOG.md +24 -0
  85. package/examples/javascript/flow-arc-horizontal/package.json +1 -1
  86. package/examples/javascript/flow-arc-vertical/package.json +1 -1
  87. package/examples/javascript/flow-chord/package.json +1 -1
  88. package/examples/javascript/flow-chord-directed/package.json +1 -1
  89. package/examples/javascript/flow-chord-non-ribbon/package.json +1 -1
  90. package/examples/javascript/flow-sankey/package.json +1 -1
  91. package/examples/javascript/gauge/package.json +1 -1
  92. package/examples/javascript/gauge-bands/package.json +1 -1
  93. package/examples/javascript/hierarchy-force-directed/package.json +1 -1
  94. package/examples/javascript/hierarchy-pack/package.json +1 -1
  95. package/examples/javascript/hierarchy-partition/package.json +1 -1
  96. package/examples/javascript/hierarchy-sunburst/package.json +1 -1
  97. package/examples/javascript/hierarchy-tree/package.json +1 -1
  98. package/examples/javascript/hierarchy-treemap/package.json +1 -1
  99. package/examples/javascript/hierarchy-voronoi-treemap/package.json +1 -1
  100. package/examples/javascript/jest/package.json +1 -1
  101. package/examples/javascript/json-pie/package.json +1 -1
  102. package/examples/javascript/json-xy/package.json +1 -1
  103. package/examples/javascript/map-animating-along-lines/package.json +1 -1
  104. package/examples/javascript/map-clustered-points/package.json +1 -1
  105. package/examples/javascript/map-day-and-night/package.json +1 -1
  106. package/examples/javascript/map-globe-rotate-to-country/package.json +1 -1
  107. package/examples/javascript/map-globe-with-projected-circles/package.json +1 -1
  108. package/examples/javascript/map-with-bubbles/package.json +1 -1
  109. package/examples/javascript/map-zoom-to-country/package.json +1 -1
  110. package/examples/javascript/misc-40-charts/package.json +1 -1
  111. package/examples/javascript/misc-microchart-grid/package.json +1 -1
  112. package/examples/javascript/pie-chart/package.json +1 -1
  113. package/examples/javascript/pie-donut-chart/package.json +1 -1
  114. package/examples/javascript/pie-variable-radius/package.json +1 -1
  115. package/examples/javascript/radar-column-iwatch-style/package.json +1 -1
  116. package/examples/javascript/radar-heat-map/package.json +1 -1
  117. package/examples/javascript/radar-line/package.json +1 -1
  118. package/examples/javascript/radar-time-line/package.json +1 -1
  119. package/examples/javascript/sliced-funnel/package.json +1 -1
  120. package/examples/javascript/sliced-pictorial-stacked/package.json +1 -1
  121. package/examples/javascript/sliced-pyramid/package.json +1 -1
  122. package/examples/javascript/stock-chart/package.json +1 -1
  123. package/examples/javascript/stock-chart-comparing-stocks/package.json +1 -1
  124. package/examples/javascript/stock-chart-data-granularity/package.json +1 -1
  125. package/examples/javascript/stock-chart-data-grouping/package.json +1 -1
  126. package/examples/javascript/stock-chart-intraday/package.json +1 -1
  127. package/examples/javascript/stock-chart-live/package.json +1 -1
  128. package/examples/javascript/stock-chart-volume-separate-panel/package.json +1 -1
  129. package/examples/javascript/timeline-horizontal-serpentine-chart/README.md +6 -0
  130. package/examples/javascript/timeline-horizontal-serpentine-chart/index.css +11 -0
  131. package/examples/javascript/timeline-horizontal-serpentine-chart/index.html +12 -0
  132. package/examples/javascript/timeline-horizontal-serpentine-chart/index.js +268 -0
  133. package/examples/javascript/timeline-horizontal-serpentine-chart/package.json +16 -0
  134. package/examples/javascript/timeline-horizontal-serpentine-chart/webpack.config.js +38 -0
  135. package/examples/javascript/timeline-linear-process-diagram/README.md +6 -0
  136. package/examples/javascript/timeline-linear-process-diagram/index.css +11 -0
  137. package/examples/javascript/timeline-linear-process-diagram/index.html +12 -0
  138. package/examples/javascript/timeline-linear-process-diagram/index.js +365 -0
  139. package/examples/javascript/timeline-linear-process-diagram/package.json +16 -0
  140. package/examples/javascript/timeline-linear-process-diagram/webpack.config.js +38 -0
  141. package/examples/javascript/timeline-serpentine-chart/README.md +6 -0
  142. package/examples/javascript/timeline-serpentine-chart/index.css +11 -0
  143. package/examples/javascript/timeline-serpentine-chart/index.html +12 -0
  144. package/examples/javascript/timeline-serpentine-chart/index.js +274 -0
  145. package/examples/javascript/timeline-serpentine-chart/package.json +16 -0
  146. package/examples/javascript/timeline-serpentine-chart/webpack.config.js +38 -0
  147. package/examples/javascript/timeline-spiral-chart/README.md +6 -0
  148. package/examples/javascript/timeline-spiral-chart/index.css +11 -0
  149. package/examples/javascript/timeline-spiral-chart/index.html +12 -0
  150. package/examples/javascript/timeline-spiral-chart/index.js +274 -0
  151. package/examples/javascript/timeline-spiral-chart/package.json +16 -0
  152. package/examples/javascript/timeline-spiral-chart/webpack.config.js +38 -0
  153. package/examples/javascript/venn-diagram/package.json +1 -1
  154. package/examples/javascript/wordcloud-with-data/package.json +1 -1
  155. package/examples/javascript/wordcloud-with-text/package.json +1 -1
  156. package/examples/javascript/xy-100-percent-stacked-column/package.json +1 -1
  157. package/examples/javascript/xy-animated-bullet-at-the-end-of-the-series/package.json +1 -1
  158. package/examples/javascript/xy-bubble/package.json +1 -1
  159. package/examples/javascript/xy-candlestick/package.json +1 -1
  160. package/examples/javascript/xy-clustered-column/package.json +1 -1
  161. package/examples/javascript/xy-column/package.json +1 -1
  162. package/examples/javascript/xy-comparing-series-google-analytics-style/package.json +1 -1
  163. package/examples/javascript/xy-data-grouping/package.json +1 -1
  164. package/examples/javascript/xy-draggable-range/package.json +1 -1
  165. package/examples/javascript/xy-drawing-series-with-mouse-or-touch/package.json +1 -1
  166. package/examples/javascript/xy-dumbbell plot/package.json +1 -1
  167. package/examples/javascript/xy-evenly-spaced-date-axis/package.json +1 -1
  168. package/examples/javascript/xy-line/package.json +1 -1
  169. package/examples/javascript/xy-line-highlight-on-legend-hover/package.json +1 -1
  170. package/examples/javascript/xy-live-data/package.json +1 -1
  171. package/examples/javascript/xy-multiple-synced-value-axes/package.json +1 -1
  172. package/examples/javascript/xy-ohlc/package.json +1 -1
  173. package/examples/javascript/xy-real-time-data-sorting/package.json +1 -1
  174. package/examples/javascript/xy-smoothed-line/package.json +1 -1
  175. package/examples/javascript/xy-stacked-and-clustered-column/package.json +1 -1
  176. package/examples/javascript/xy-stacked-column/package.json +1 -1
  177. package/examples/javascript/xy-stacked-step/package.json +1 -1
  178. package/examples/javascript/xy-stock/package.json +1 -1
  179. package/examples/javascript/xy-stock-comparing/package.json +1 -1
  180. package/examples/typescript/flow-arc-horizontal/package.json +1 -1
  181. package/examples/typescript/flow-arc-vertical/package.json +1 -1
  182. package/examples/typescript/flow-chord/package.json +1 -1
  183. package/examples/typescript/flow-chord-directed/package.json +1 -1
  184. package/examples/typescript/flow-chord-non-ribbon/package.json +1 -1
  185. package/examples/typescript/flow-sankey/package.json +1 -1
  186. package/examples/typescript/gauge/package.json +1 -1
  187. package/examples/typescript/gauge-bands/package.json +1 -1
  188. package/examples/typescript/hierarchy-force-directed/package.json +1 -1
  189. package/examples/typescript/hierarchy-pack/package.json +1 -1
  190. package/examples/typescript/hierarchy-partition/package.json +1 -1
  191. package/examples/typescript/hierarchy-sunburst/package.json +1 -1
  192. package/examples/typescript/hierarchy-tree/package.json +1 -1
  193. package/examples/typescript/hierarchy-treemap/package.json +1 -1
  194. package/examples/typescript/hierarchy-voronoi-treemap/package.json +1 -1
  195. package/examples/typescript/jest/package.json +1 -1
  196. package/examples/typescript/json-pie/package.json +1 -1
  197. package/examples/typescript/json-xy/package.json +1 -1
  198. package/examples/typescript/map-animating-along-lines/package.json +1 -1
  199. package/examples/typescript/map-clustered-points/package.json +1 -1
  200. package/examples/typescript/map-day-and-night/package.json +1 -1
  201. package/examples/typescript/map-globe-rotate-to-country/package.json +1 -1
  202. package/examples/typescript/map-globe-with-projected-circles/package.json +1 -1
  203. package/examples/typescript/map-with-bubbles/package.json +1 -1
  204. package/examples/typescript/map-zoom-to-country/package.json +1 -1
  205. package/examples/typescript/misc-40-charts/package.json +1 -1
  206. package/examples/typescript/misc-microchart-grid/package.json +1 -1
  207. package/examples/typescript/pie-chart/package.json +1 -1
  208. package/examples/typescript/pie-donut-chart/package.json +1 -1
  209. package/examples/typescript/pie-variable-radius/package.json +1 -1
  210. package/examples/typescript/radar-column-iwatch-style/package.json +1 -1
  211. package/examples/typescript/radar-heat-map/package.json +1 -1
  212. package/examples/typescript/radar-line/package.json +1 -1
  213. package/examples/typescript/radar-time-line/package.json +1 -1
  214. package/examples/typescript/sliced-funnel/package.json +1 -1
  215. package/examples/typescript/sliced-pictorial-stacked/package.json +1 -1
  216. package/examples/typescript/sliced-pyramid/package.json +1 -1
  217. package/examples/typescript/stock-chart/package.json +1 -1
  218. package/examples/typescript/stock-chart-comparing-stocks/package.json +1 -1
  219. package/examples/typescript/stock-chart-data-granularity/package.json +1 -1
  220. package/examples/typescript/stock-chart-data-grouping/package.json +1 -1
  221. package/examples/typescript/stock-chart-intraday/package.json +1 -1
  222. package/examples/typescript/stock-chart-live/package.json +1 -1
  223. package/examples/typescript/stock-chart-volume-separate-panel/package.json +1 -1
  224. package/examples/typescript/timeline-horizontal-serpentine-chart/README.md +6 -0
  225. package/examples/typescript/timeline-horizontal-serpentine-chart/index.css +11 -0
  226. package/examples/typescript/timeline-horizontal-serpentine-chart/index.html +12 -0
  227. package/examples/typescript/timeline-horizontal-serpentine-chart/index.ts +268 -0
  228. package/examples/typescript/timeline-horizontal-serpentine-chart/package.json +18 -0
  229. package/examples/typescript/timeline-horizontal-serpentine-chart/tsconfig.json +12 -0
  230. package/examples/typescript/timeline-horizontal-serpentine-chart/webpack.config.js +45 -0
  231. package/examples/typescript/timeline-linear-process-diagram/README.md +6 -0
  232. package/examples/typescript/timeline-linear-process-diagram/index.css +11 -0
  233. package/examples/typescript/timeline-linear-process-diagram/index.html +12 -0
  234. package/examples/typescript/timeline-linear-process-diagram/index.ts +365 -0
  235. package/examples/typescript/timeline-linear-process-diagram/package.json +18 -0
  236. package/examples/typescript/timeline-linear-process-diagram/tsconfig.json +12 -0
  237. package/examples/typescript/timeline-linear-process-diagram/webpack.config.js +45 -0
  238. package/examples/typescript/timeline-serpentine-chart/README.md +6 -0
  239. package/examples/typescript/timeline-serpentine-chart/index.css +11 -0
  240. package/examples/typescript/timeline-serpentine-chart/index.html +12 -0
  241. package/examples/typescript/timeline-serpentine-chart/index.ts +274 -0
  242. package/examples/typescript/timeline-serpentine-chart/package.json +18 -0
  243. package/examples/typescript/timeline-serpentine-chart/tsconfig.json +12 -0
  244. package/examples/typescript/timeline-serpentine-chart/webpack.config.js +45 -0
  245. package/examples/typescript/timeline-spiral-chart/README.md +6 -0
  246. package/examples/typescript/timeline-spiral-chart/index.css +11 -0
  247. package/examples/typescript/timeline-spiral-chart/index.html +12 -0
  248. package/examples/typescript/timeline-spiral-chart/index.ts +274 -0
  249. package/examples/typescript/timeline-spiral-chart/package.json +18 -0
  250. package/examples/typescript/timeline-spiral-chart/tsconfig.json +12 -0
  251. package/examples/typescript/timeline-spiral-chart/webpack.config.js +45 -0
  252. package/examples/typescript/venn-diagram/package.json +1 -1
  253. package/examples/typescript/wordcloud-with-data/package.json +1 -1
  254. package/examples/typescript/wordcloud-with-text/package.json +1 -1
  255. package/examples/typescript/xy-100-percent-stacked-column/package.json +1 -1
  256. package/examples/typescript/xy-animated-bullet-at-the-end-of-the-series/package.json +1 -1
  257. package/examples/typescript/xy-bubble/package.json +1 -1
  258. package/examples/typescript/xy-candlestick/package.json +1 -1
  259. package/examples/typescript/xy-clustered-column/package.json +1 -1
  260. package/examples/typescript/xy-column/package.json +1 -1
  261. package/examples/typescript/xy-comparing-series-google-analytics-style/package.json +1 -1
  262. package/examples/typescript/xy-data-grouping/package.json +1 -1
  263. package/examples/typescript/xy-draggable-range/package.json +1 -1
  264. package/examples/typescript/xy-drawing-series-with-mouse-or-touch/package.json +1 -1
  265. package/examples/typescript/xy-dumbbell plot/package.json +1 -1
  266. package/examples/typescript/xy-evenly-spaced-date-axis/package.json +1 -1
  267. package/examples/typescript/xy-line/package.json +1 -1
  268. package/examples/typescript/xy-line-highlight-on-legend-hover/package.json +1 -1
  269. package/examples/typescript/xy-live-data/package.json +1 -1
  270. package/examples/typescript/xy-multiple-synced-value-axes/package.json +1 -1
  271. package/examples/typescript/xy-ohlc/package.json +1 -1
  272. package/examples/typescript/xy-real-time-data-sorting/package.json +1 -1
  273. package/examples/typescript/xy-smoothed-line/package.json +1 -1
  274. package/examples/typescript/xy-stacked-and-clustered-column/package.json +1 -1
  275. package/examples/typescript/xy-stacked-column/package.json +1 -1
  276. package/examples/typescript/xy-stacked-step/package.json +1 -1
  277. package/examples/typescript/xy-stock/package.json +1 -1
  278. package/examples/typescript/xy-stock-comparing/package.json +1 -1
  279. package/package.json +1 -1
  280. package/timeline.d.ts +11 -0
  281. package/timeline.d.ts.map +1 -0
  282. package/timeline.js +11 -0
  283. package/timeline.js.map +1 -0
@@ -0,0 +1,537 @@
1
+ import { Slice } from "../../core/render/Slice";
2
+ import { AxisRenderer } from "../xy/axes/AxisRenderer";
3
+ import { AxisLabel } from "../xy/axes/AxisLabel";
4
+ import { ListTemplate } from "../../core/util/List";
5
+ import { Template } from "../../core/util/Template";
6
+ import * as $utils from "../../core/util/Utils";
7
+ import * as $math from "../../core/util/Math";
8
+ import * as $array from "../../core/util/Array";
9
+ /**
10
+ * Renderer for [[CurveChart]] "horizontal" axes.
11
+ *
12
+ * @see {@link https://www.amcharts.com/docs/v5/charts/timeline/} for more info
13
+ * @since 5.12.0
14
+ * @important
15
+ */
16
+ export class AxisRendererCurveX extends AxisRenderer {
17
+ constructor() {
18
+ super(...arguments);
19
+ /**
20
+ * A list of labels in the axis.
21
+ *
22
+ * `labels.template` can be used to configure labels.
23
+ *
24
+ * @default new ListTemplate<AxisLabelRadial>
25
+ */
26
+ Object.defineProperty(this, "labels", {
27
+ enumerable: true,
28
+ configurable: true,
29
+ writable: true,
30
+ value: this.addDisposer(new ListTemplate(Template.new({}), () => AxisLabel._new(this._root, {
31
+ themeTags: $utils.mergeTags(this.labels.template.get("themeTags", []), this.get("themeTags", []))
32
+ }, [this.labels.template])))
33
+ });
34
+ /**
35
+ * A list of fills in the axis.
36
+ *
37
+ * `axisFills.template` can be used to configure axis fills.
38
+ *
39
+ * @default new ListTemplate<Slice>
40
+ */
41
+ Object.defineProperty(this, "axisFills", {
42
+ enumerable: true,
43
+ configurable: true,
44
+ writable: true,
45
+ value: this.addDisposer(new ListTemplate(Template.new({}), () => Slice._new(this._root, {
46
+ themeTags: $utils.mergeTags(this.axisFills.template.get("themeTags", ["fill"]), this.get("themeTags", []))
47
+ }, [this.axisFills.template])))
48
+ });
49
+ Object.defineProperty(this, "pointPostion", {
50
+ enumerable: true,
51
+ configurable: true,
52
+ writable: true,
53
+ value: []
54
+ });
55
+ Object.defineProperty(this, "pointDistance", {
56
+ enumerable: true,
57
+ configurable: true,
58
+ writable: true,
59
+ value: []
60
+ });
61
+ Object.defineProperty(this, "_normalizedPoints", {
62
+ enumerable: true,
63
+ configurable: true,
64
+ writable: true,
65
+ value: []
66
+ });
67
+ }
68
+ _afterNew() {
69
+ this._settings.themeTags = $utils.mergeTags(this._settings.themeTags, ["renderer", "circular"]);
70
+ super._afterNew();
71
+ this.setPrivateRaw("letter", "X");
72
+ this.setRaw("position", "absolute");
73
+ }
74
+ _beforeChanged() {
75
+ super._beforeChanged();
76
+ if (this.isDirty("points")) {
77
+ this._updateLayout();
78
+ }
79
+ if (this.isDirty("yRenderer")) {
80
+ const yRenderer = this.get("yRenderer");
81
+ yRenderer.set("xRenderer", this);
82
+ }
83
+ }
84
+ /**
85
+ * @ignore
86
+ */
87
+ processAxis() {
88
+ super.processAxis();
89
+ const axis = this.axis;
90
+ axis.labelsContainer.set("isMeasured", false);
91
+ }
92
+ /**
93
+ * @ignore
94
+ */
95
+ _updateLayout() {
96
+ const chart = this.chart;
97
+ if (chart) {
98
+ const points = this.get("points");
99
+ if (points) {
100
+ // find extreme points
101
+ let minX = Infinity;
102
+ let minY = Infinity;
103
+ let maxX = -Infinity;
104
+ let maxY = -Infinity;
105
+ let axisLength = 0;
106
+ let prevPoint = points[0];
107
+ $array.each(points, (point, i) => {
108
+ minX = Math.min(minX, point.x);
109
+ minY = Math.min(minY, point.y);
110
+ maxX = Math.max(maxX, point.x);
111
+ maxY = Math.max(maxY, point.y);
112
+ axisLength += Math.hypot(point.x - prevPoint.x, point.y - prevPoint.y);
113
+ this.pointDistance[i] = axisLength;
114
+ prevPoint = point;
115
+ });
116
+ $array.each(points, (_p, i) => {
117
+ this.pointPostion[i] = this.pointDistance[i] / axisLength;
118
+ });
119
+ let yAxisLenght = this.get("yRenderer").get("axisLength", 0);
120
+ let aw = maxX - minX + 2 * yAxisLenght;
121
+ let ah = maxY - minY + 2 * yAxisLenght;
122
+ // calculate center
123
+ let centerX = (minX + maxX) / 2;
124
+ let centerY = (minY + maxY) / 2;
125
+ // take width and height of a chart
126
+ let width = chart.innerWidth();
127
+ let height = chart.innerHeight();
128
+ // calculate scale
129
+ let scaleX = width / aw;
130
+ let scaleY = height / ah;
131
+ // calculate scale
132
+ let scale = Math.min(scaleX, scaleY);
133
+ if (!this.getPrivate("autoScale", true)) {
134
+ scale = 1;
135
+ }
136
+ this.axis.setPrivateRaw("width", aw * scale);
137
+ this.axis.setPrivateRaw("height", ah * scale);
138
+ this.setPrivateRaw("centerX", centerX);
139
+ this.setPrivateRaw("centerY", centerY);
140
+ this.setPrivateRaw("scale", scale);
141
+ this.setPrivateRaw("axisLength", axisLength);
142
+ this.set("draw", (display) => {
143
+ display.moveTo((points[0].x - centerX) * scale, (points[0].y - centerY) * scale);
144
+ $array.each(points, (point) => {
145
+ display.lineTo((point.x - centerX) * scale, (point.y - centerY) * scale);
146
+ });
147
+ });
148
+ prevPoint = points[0];
149
+ this._normalizedPoints = [];
150
+ $array.each(points, (point) => {
151
+ let distance = Math.hypot(point.x - prevPoint.x, point.y - prevPoint.y);
152
+ for (let i = 1; i < distance; i++) {
153
+ let x = ((prevPoint.x + (point.x - prevPoint.x) * i / distance) - centerX) * scale;
154
+ let y = ((prevPoint.y + (point.y - prevPoint.y) * i / distance) - centerY) * scale;
155
+ // check distance to previous normalized point
156
+ const prevNormalized = this._normalizedPoints[this._normalizedPoints.length - 1];
157
+ if (prevNormalized) {
158
+ let distance = Math.hypot(x - prevNormalized.x, y - prevNormalized.y);
159
+ if (distance < .5) {
160
+ continue;
161
+ }
162
+ }
163
+ this._normalizedPoints.push({ x: x, y: y });
164
+ }
165
+ prevPoint = point;
166
+ });
167
+ this.axis.markDirtySize();
168
+ }
169
+ }
170
+ }
171
+ /**
172
+ * @ignore
173
+ */
174
+ updateGrid(grid, position, endPosition) {
175
+ if (grid) {
176
+ if (position == null) {
177
+ position = 0;
178
+ }
179
+ let location = grid.get("location", 0.5);
180
+ if (endPosition != null && endPosition != position) {
181
+ position = position + (endPosition - position) * location;
182
+ }
183
+ this.toggleVisibility(grid, position, 0, 1);
184
+ const p0 = this.positionToPoint(position, 0);
185
+ const p1 = this.positionToPoint(position, 1);
186
+ grid.set("draw", (display) => {
187
+ display.moveTo(p0.x, p0.y);
188
+ display.lineTo(p1.x, p1.y);
189
+ });
190
+ }
191
+ }
192
+ /**
193
+ * Converts relative position to angle.
194
+ *
195
+ * @param position Position
196
+ * @return Angle
197
+ */
198
+ positionToAngle(position) {
199
+ position = this.toGlobalPosition(position);
200
+ let points = this.get("points");
201
+ let axisLength = this.getPrivate("axisLength", 0);
202
+ let angle = 0;
203
+ // find which segment the position is in
204
+ if (points) {
205
+ let totalLength = 0;
206
+ let prevPoint = points[0];
207
+ $array.eachContinue(points, (point) => {
208
+ let segmentLength = Math.hypot(point.x - prevPoint.x, point.y - prevPoint.y);
209
+ totalLength += segmentLength;
210
+ if (totalLength > position * axisLength) {
211
+ angle = $math.getAngle(prevPoint, point) + 90;
212
+ return false;
213
+ }
214
+ prevPoint = point;
215
+ return true;
216
+ });
217
+ }
218
+ return angle;
219
+ }
220
+ getPoints(positionX, positionY, endPositionX, endPositionY) {
221
+ let yRenderer = this.get("yRenderer");
222
+ let points = [];
223
+ if (positionX > endPositionX) {
224
+ [positionX, endPositionX] = [endPositionX, positionX];
225
+ }
226
+ if (positionY > endPositionY) {
227
+ [positionY, endPositionY] = [endPositionY, positionY];
228
+ }
229
+ if (yRenderer) {
230
+ let indexStart = this.positionToIndex(positionX);
231
+ let indexEnd = this.positionToIndex(endPositionX);
232
+ points.push(this.positionToPoint(positionX, positionY));
233
+ for (let i = indexStart; i <= indexEnd + 1; i++) {
234
+ let position = this.indexToPosition(i);
235
+ if (position > positionX && position < endPositionX) {
236
+ points.push(this.positionToPoint(position, positionY));
237
+ }
238
+ }
239
+ points.push(this.positionToPoint(endPositionX, positionY));
240
+ if (endPositionY != positionY) {
241
+ points.push(this.positionToPoint(endPositionX, endPositionY));
242
+ for (let i = indexEnd + 1; i >= indexStart; i--) {
243
+ let position = this.indexToPosition(i);
244
+ if (position > positionX && position < endPositionX) {
245
+ points.push(this.positionToPoint(position, endPositionY));
246
+ }
247
+ }
248
+ points.push(this.positionToPoint(positionX, endPositionY));
249
+ points.push(points[0]);
250
+ }
251
+ }
252
+ return points;
253
+ }
254
+ // do not delete
255
+ _handleOpposite() { }
256
+ positionToIndex(position) {
257
+ let points = this.get("points");
258
+ let axisLength = this.getPrivate("axisLength", 0);
259
+ let index = 0;
260
+ position = this.toGlobalPosition(position);
261
+ if (points && points.length > 1) {
262
+ let totalLength = 0;
263
+ let prevPoint = points[0];
264
+ if (position <= 0) {
265
+ index = 0;
266
+ }
267
+ else if (position >= 1) {
268
+ const len = points.length;
269
+ index = len - 1;
270
+ }
271
+ else {
272
+ let i = 0;
273
+ $array.eachContinue(points, (point) => {
274
+ let segmentLength = Math.hypot(point.x - prevPoint.x, point.y - prevPoint.y);
275
+ totalLength += segmentLength;
276
+ if (totalLength >= position * axisLength) {
277
+ index = i;
278
+ return false;
279
+ }
280
+ prevPoint = point;
281
+ i++;
282
+ return true;
283
+ });
284
+ }
285
+ }
286
+ return index;
287
+ }
288
+ indexToPosition(index) {
289
+ let points = this.get("points");
290
+ let axisLength = this.getPrivate("axisLength", 0);
291
+ let position = 0;
292
+ if (points && points.length > 1) {
293
+ let totalLength = 0;
294
+ let prevPoint = points[0];
295
+ let i = 0;
296
+ $array.eachContinue(points, (point) => {
297
+ position = totalLength / axisLength;
298
+ if (i == index) {
299
+ return false;
300
+ }
301
+ let segmentLength = Math.hypot(point.x - prevPoint.x, point.y - prevPoint.y);
302
+ totalLength += segmentLength;
303
+ prevPoint = point;
304
+ i++;
305
+ return true;
306
+ });
307
+ }
308
+ return this.toAxisPosition(position);
309
+ }
310
+ pointToPosition(point) {
311
+ let minDistance = Infinity;
312
+ let index = 0;
313
+ let prevPoint = this._normalizedPoints[0];
314
+ let angle = 0;
315
+ $array.each(this._normalizedPoints, (normalizedPoint, i) => {
316
+ let distance = Math.hypot(normalizedPoint.x - point.x, normalizedPoint.y - point.y);
317
+ if (distance < minDistance) {
318
+ minDistance = distance;
319
+ index = i;
320
+ angle = $math.getAngle(point, normalizedPoint) - $math.getAngle(prevPoint, normalizedPoint);
321
+ }
322
+ prevPoint = normalizedPoint;
323
+ });
324
+ const yRenderer = this.get("yRenderer");
325
+ const scale = this.getPrivate("scale", 1);
326
+ const rendererY = this.get("yRenderer");
327
+ const y = -minDistance / (yRenderer.get("axisLength", 0) * scale) * $math.sin(angle) + rendererY.get("axisLocation", 0);
328
+ return { x: index / this._normalizedPoints.length, y: y };
329
+ }
330
+ /**
331
+ * Converts relative position to an X/Y coordinate.
332
+ *
333
+ * @param position Position
334
+ * @return Point
335
+ */
336
+ positionToPoint(position, positionY, doNotFix) {
337
+ if (positionY == undefined) {
338
+ positionY = 0;
339
+ }
340
+ const rendererY = this.get("yRenderer");
341
+ if (!doNotFix) {
342
+ position = this.toGlobalPosition(position);
343
+ }
344
+ positionY = rendererY.toGlobalPosition(positionY);
345
+ positionY -= rendererY.get("axisLocation", 0);
346
+ let points = this.get("points");
347
+ let axisLength = this.getPrivate("axisLength", 0);
348
+ let scale = this.getPrivate("scale", 1);
349
+ let pointOfPosition = { x: 0, y: 0 };
350
+ let angle = 0;
351
+ // find which segment the position is in
352
+ if (points && points.length > 1) {
353
+ let totalLength = 0;
354
+ let prevPoint = points[0];
355
+ if (position <= 0) {
356
+ angle = $math.getAngle(points[0], points[1]) + 90;
357
+ pointOfPosition = points[0];
358
+ }
359
+ else if (position >= 1) {
360
+ const len = points.length;
361
+ angle = $math.getAngle(points[len - 2], points[len - 1]) + 90;
362
+ pointOfPosition = points[len - 1];
363
+ }
364
+ else {
365
+ $array.eachContinue(points, (point) => {
366
+ let segmentLength = Math.hypot(point.x - prevPoint.x, point.y - prevPoint.y);
367
+ totalLength += segmentLength;
368
+ if (totalLength >= position * axisLength) {
369
+ let segementStartPosition = (totalLength - segmentLength) / axisLength;
370
+ let segmentPosition = (position * axisLength - segementStartPosition * axisLength) / segmentLength;
371
+ pointOfPosition = { x: prevPoint.x + (point.x - prevPoint.x) * segmentPosition, y: prevPoint.y + (point.y - prevPoint.y) * segmentPosition };
372
+ angle = $math.getAngle(prevPoint, point) + 90;
373
+ return false;
374
+ }
375
+ prevPoint = point;
376
+ return true;
377
+ });
378
+ }
379
+ }
380
+ let centerX = this.getPrivate("centerX", 0);
381
+ let centerY = this.getPrivate("centerY", 0);
382
+ let axisX = (pointOfPosition.x - centerX) * scale;
383
+ let axisY = (pointOfPosition.y - centerY) * scale;
384
+ if (positionY == null) {
385
+ positionY = 0;
386
+ }
387
+ let lengthY = -rendererY.get("axisLength", 0);
388
+ let dy = lengthY * positionY * scale;
389
+ let x = axisX + $math.cos(angle) * dy;
390
+ let y = axisY + $math.sin(angle) * dy;
391
+ return { x: x, y: y };
392
+ }
393
+ /**
394
+ * @ignore
395
+ */
396
+ updateLabel(label, position, endPosition, count) {
397
+ if (label) {
398
+ if (position == null) {
399
+ position = 0;
400
+ }
401
+ let location = 0.5;
402
+ if (count != null && count > 1) {
403
+ location = label.get("multiLocation", location);
404
+ }
405
+ else {
406
+ location = label.get("location", location);
407
+ }
408
+ if (endPosition != null && endPosition != position) {
409
+ position = position + (endPosition - position) * location;
410
+ }
411
+ const angle = this.positionToAngle(position);
412
+ const rendererY = this.get("yRenderer");
413
+ const axisY = rendererY.axis;
414
+ const point = this.positionToPoint(position, axisY.get("start", 0) + rendererY.get("axisLocation", 0));
415
+ label.setAll({
416
+ x: point.x,
417
+ y: point.y
418
+ });
419
+ if (this.get("rotateLabels", true)) {
420
+ label.set("rotation", angle - 90);
421
+ }
422
+ this.toggleVisibility(label, position, label.get("minPosition", 0), label.get("maxPosition", 1));
423
+ }
424
+ }
425
+ /**
426
+ * @ignore
427
+ */
428
+ updateTick(tick, position, endPosition, count) {
429
+ if (tick) {
430
+ if (position == null) {
431
+ position = 0;
432
+ }
433
+ let location = 0.5;
434
+ if (count != null && count > 1) {
435
+ location = tick.get("multiLocation", location);
436
+ }
437
+ else {
438
+ location = tick.get("location", location);
439
+ }
440
+ if (endPosition != null && endPosition != position) {
441
+ position = position + (endPosition - position) * location;
442
+ }
443
+ let length = tick.get("length", 0);
444
+ const inside = tick.get("inside");
445
+ if (inside) {
446
+ length *= -1;
447
+ }
448
+ let angle = this.positionToAngle(position);
449
+ this.toggleVisibility(tick, position, tick.get("minPosition", 0), tick.get("maxPosition", 1));
450
+ const rendererY = this.get("yRenderer");
451
+ const axisY = rendererY.axis;
452
+ const point = this.positionToPoint(position, axisY.get("start"));
453
+ tick.set("draw", (display) => {
454
+ display.moveTo(point.x, point.y);
455
+ display.lineTo(point.x - length * $math.cos(angle), point.y - length * $math.sin(angle));
456
+ });
457
+ }
458
+ }
459
+ /**
460
+ * @ignore
461
+ */
462
+ updateBullet(bullet, position, endPosition) {
463
+ if (bullet) {
464
+ const sprite = bullet.get("sprite");
465
+ if (sprite) {
466
+ if (position == null) {
467
+ position = 0;
468
+ }
469
+ let location = bullet.get("location", 0.5);
470
+ if (endPosition != null && endPosition != position) {
471
+ position = position + (endPosition - position) * location;
472
+ }
473
+ const rendererY = this.get("yRenderer");
474
+ const axisY = rendererY.axis;
475
+ const point = this.positionToPoint(position, axisY.get("start"));
476
+ sprite.setAll({ x: point.x, y: point.y });
477
+ this.toggleVisibility(sprite, position, 0, 1);
478
+ }
479
+ }
480
+ }
481
+ /**
482
+ * @ignore
483
+ */
484
+ updateFill(fill, position, endPosition) {
485
+ if (fill) {
486
+ if (position == null) {
487
+ position = 0;
488
+ }
489
+ if (endPosition == null) {
490
+ endPosition = 1;
491
+ }
492
+ const yRenderer = this.get("yRenderer");
493
+ const yAxis = yRenderer.axis;
494
+ const points = this.getPoints(position, yAxis.get("start", 0), endPosition, yAxis.get("end", 1));
495
+ fill.set("draw", (display) => {
496
+ display.moveTo(points[0].x, points[0].y);
497
+ $array.each(points, (point) => {
498
+ display.lineTo(point.x, point.y);
499
+ });
500
+ display.closePath();
501
+ });
502
+ }
503
+ }
504
+ /**
505
+ * Returns axis length in pixels.
506
+ *
507
+ * @return Length
508
+ */
509
+ axisLength() {
510
+ return this.getPrivate("axisLength", 0);
511
+ }
512
+ /**
513
+ * @ignore
514
+ */
515
+ positionTooltip(tooltip, position) {
516
+ const point = this.positionToPoint(position, this.get("yRenderer").axis.get("start", 0));
517
+ this._positionTooltip(tooltip, point);
518
+ }
519
+ /**
520
+ * @ignore
521
+ */
522
+ updateTooltipBounds(_tooltip) {
523
+ }
524
+ }
525
+ Object.defineProperty(AxisRendererCurveX, "className", {
526
+ enumerable: true,
527
+ configurable: true,
528
+ writable: true,
529
+ value: "AxisRendererCurveX"
530
+ });
531
+ Object.defineProperty(AxisRendererCurveX, "classNames", {
532
+ enumerable: true,
533
+ configurable: true,
534
+ writable: true,
535
+ value: AxisRenderer.classNames.concat([AxisRendererCurveX.className])
536
+ });
537
+ //# sourceMappingURL=AxisRendererCurveX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AxisRendererCurveX.js","sourceRoot":"","sources":["../../../../../src/.internal/charts/timeline/AxisRendererCurveX.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CurveChart } from \"./CurveChart\";\nimport type { Grid } from \"../xy/axes/Grid\";\nimport type { IPoint } from \"../../core/util/IPoint\";\nimport type { AxisTick } from \"../xy/axes/AxisTick\";\nimport type { AxisBullet } from \"../xy/axes/AxisBullet\";\nimport type { Tooltip } from \"../../core/render/Tooltip\";\nimport type { AxisRendererCurveY } from \"./AxisRendererCurveY\";\n\nimport { Slice } from \"../../core/render/Slice\";\nimport { AxisRenderer, IAxisRendererSettings, IAxisRendererPrivate } from \"../xy/axes/AxisRenderer\";\nimport { AxisLabel } from \"../xy/axes/AxisLabel\";\nimport { ListTemplate } from \"../../core/util/List\";\nimport { Template } from \"../../core/util/Template\";\n\nimport * as $utils from \"../../core/util/Utils\";\nimport * as $math from \"../../core/util/Math\";\nimport * as $array from \"../../core/util/Array\";\n\nexport interface IAxisRendererCurveXSettings extends IAxisRendererSettings {\n\t/**\n\t * Array of control points to draw axis along.\n\t */\n\tpoints?: Array<IPoint>;\n\n\t/**\n\t * Y renderer of a Y axis. Must be defined!\n\t */\n\tyRenderer: AxisRendererCurveY;\n\n\t/**\n\t * If labels rotation should be adjusted to the axis rotation\n\t */\n\trotateLabels?: boolean;\n}\n\nexport interface IAxisRendererCurveXPrivate extends IAxisRendererPrivate {\n\tscale?: number;\n\tcenterX?: number;\n\tcenterY?: number;\n\taxisLength?: number;\n\tautoScale?: boolean;\n}\n\n/**\n * Renderer for [[CurveChart]] \"horizontal\" axes.\n *\n * @see {@link https://www.amcharts.com/docs/v5/charts/timeline/} for more info\n * @since 5.12.0\n * @important\n */\nexport class AxisRendererCurveX extends AxisRenderer {\n\n\t/**\n\t * Chart this renderer is for.\n\t */\n\tdeclare public chart: CurveChart | undefined;\n\n\t/**\n\t * A list of labels in the axis.\n\t *\n\t * `labels.template` can be used to configure labels.\n\t *\n\t * @default new ListTemplate<AxisLabelRadial>\n\t */\n\tpublic readonly labels: ListTemplate<AxisLabel> = this.addDisposer(new ListTemplate(\n\t\tTemplate.new({}),\n\t\t() => AxisLabel._new(this._root, {\n\t\t\tthemeTags: $utils.mergeTags(this.labels.template.get(\"themeTags\", []), this.get(\"themeTags\", []))\n\t\t}, [this.labels.template])\n\t));\n\n\n\t/**\n\t * A list of fills in the axis.\n\t *\n\t * `axisFills.template` can be used to configure axis fills.\n\t *\n\t * @default new ListTemplate<Slice>\n\t */\n\tpublic readonly axisFills: ListTemplate<Slice> = this.addDisposer(new ListTemplate(\n\t\tTemplate.new({}),\n\t\t() => Slice._new(this._root, {\n\t\t\tthemeTags: $utils.mergeTags(this.axisFills.template.get(\"themeTags\", [\"fill\"]), this.get(\"themeTags\", []))\n\t\t}, [this.axisFills.template])\n\t));\n\n\n\tpublic static className: string = \"AxisRendererCurveX\";\n\tpublic static classNames: Array<string> = AxisRenderer.classNames.concat([AxisRendererCurveX.className]);\n\n\tdeclare public _settings: IAxisRendererCurveXSettings;\n\tdeclare public _privateSettings: IAxisRendererCurveXPrivate;\n\n\tpublic pointPostion: Array<number> = [];\n\n\tpublic pointDistance: Array<number> = [];\n\n\tprotected _normalizedPoints: Array<IPoint> = [];\n\n\tpublic _afterNew() {\n\t\tthis._settings.themeTags = $utils.mergeTags(this._settings.themeTags, [\"renderer\", \"circular\"]);\n\t\tsuper._afterNew();\n\t\tthis.setPrivateRaw(\"letter\", \"X\");\n\t\tthis.setRaw(\"position\", \"absolute\");\n\t}\n\n\tpublic _beforeChanged() {\n\t\tsuper._beforeChanged();\n\n\t\tif (this.isDirty(\"points\")) {\n\t\t\tthis._updateLayout();\n\t\t}\n\n\t\tif (this.isDirty(\"yRenderer\")) {\n\t\t\tconst yRenderer = this.get(\"yRenderer\");\n\t\t\tyRenderer.set(\"xRenderer\", this);\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic processAxis() {\n\t\tsuper.processAxis();\n\t\tconst axis = this.axis;\n\t\taxis.labelsContainer.set(\"isMeasured\", false);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic _updateLayout() {\n\t\tconst chart = this.chart;\n\t\tif (chart) {\n\t\t\tconst points = this.get(\"points\");\n\n\t\t\tif (points) {\n\t\t\t\t// find extreme points\n\t\t\t\tlet minX = Infinity;\n\t\t\t\tlet minY = Infinity;\n\t\t\t\tlet maxX = -Infinity;\n\t\t\t\tlet maxY = -Infinity;\n\n\t\t\t\tlet axisLength = 0;\n\n\t\t\t\tlet prevPoint = points[0];\n\n\t\t\t\t$array.each(points, (point, i) => {\n\t\t\t\t\tminX = Math.min(minX, point.x);\n\t\t\t\t\tminY = Math.min(minY, point.y);\n\t\t\t\t\tmaxX = Math.max(maxX, point.x);\n\t\t\t\t\tmaxY = Math.max(maxY, point.y);\n\t\t\t\t\taxisLength += Math.hypot(point.x - prevPoint.x, point.y - prevPoint.y);\n\t\t\t\t\tthis.pointDistance[i] = axisLength;\n\t\t\t\t\tprevPoint = point;\n\t\t\t\t});\n\n\t\t\t\t$array.each(points, (_p, i) => {\n\t\t\t\t\tthis.pointPostion[i] = this.pointDistance[i] / axisLength;\n\t\t\t\t});\n\n\t\t\t\tlet yAxisLenght = this.get(\"yRenderer\").get(\"axisLength\", 0);\n\t\t\t\tlet aw = maxX - minX + 2 * yAxisLenght;\n\t\t\t\tlet ah = maxY - minY + 2 * yAxisLenght;\t\n\n\t\t\t\t// calculate center\n\t\t\t\tlet centerX = (minX + maxX) / 2;\n\t\t\t\tlet centerY = (minY + maxY) / 2;\n\n\t\t\t\t// take width and height of a chart\n\t\t\t\tlet width = chart.innerWidth();\n\t\t\t\tlet height = chart.innerHeight();\n\n\t\t\t\t// calculate scale\n\t\t\t\tlet scaleX = width / aw;\n\t\t\t\tlet scaleY = height / ah;\n\n\t\t\t\t// calculate scale\n\t\t\t\tlet scale = Math.min(scaleX, scaleY);\n\n\t\t\t\tif (!this.getPrivate(\"autoScale\", true)) {\n\t\t\t\t\tscale = 1;\n\t\t\t\t}\n\n\t\t\t\tthis.axis.setPrivateRaw(\"width\", aw * scale);\n\t\t\t\tthis.axis.setPrivateRaw(\"height\", ah * scale);\n\t\t\t\tthis.setPrivateRaw(\"centerX\", centerX);\n\t\t\t\tthis.setPrivateRaw(\"centerY\", centerY);\n\t\t\t\tthis.setPrivateRaw(\"scale\", scale);\n\t\t\t\tthis.setPrivateRaw(\"axisLength\", axisLength);\n\n\t\t\t\tthis.set(\"draw\", (display) => {\n\t\t\t\t\tdisplay.moveTo((points[0].x - centerX) * scale, (points[0].y - centerY) * scale);\n\t\t\t\t\t$array.each(points, (point) => {\n\t\t\t\t\t\tdisplay.lineTo((point.x - centerX) * scale, (point.y - centerY) * scale);\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tprevPoint = points[0];\n\n\t\t\t\tthis._normalizedPoints = [];\n\t\t\t\t$array.each(points, (point) => {\n\t\t\t\t\tlet distance = Math.hypot(point.x - prevPoint.x, point.y - prevPoint.y);\n\t\t\t\t\tfor (let i = 1; i < distance; i++) {\n\t\t\t\t\t\tlet x = ((prevPoint.x + (point.x - prevPoint.x) * i / distance) - centerX) * scale;\n\t\t\t\t\t\tlet y = ((prevPoint.y + (point.y - prevPoint.y) * i / distance) - centerY) * scale;\n\n\t\t\t\t\t\t// check distance to previous normalized point\n\t\t\t\t\t\tconst prevNormalized = this._normalizedPoints[this._normalizedPoints.length - 1];\n\t\t\t\t\t\tif (prevNormalized) {\n\t\t\t\t\t\t\tlet distance = Math.hypot(x - prevNormalized.x, y - prevNormalized.y);\n\t\t\t\t\t\t\tif (distance < .5) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._normalizedPoints.push({ x: x, y: y });\n\t\t\t\t\t}\n\t\t\t\t\tprevPoint = point;\n\t\t\t\t})\n\n\t\t\t\tthis.axis.markDirtySize();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic updateGrid(grid?: Grid, position?: number, endPosition?: number) {\n\t\tif (grid) {\n\t\t\tif (position == null) {\n\t\t\t\tposition = 0;\n\t\t\t}\n\n\t\t\tlet location = grid.get(\"location\", 0.5);\n\t\t\tif (endPosition != null && endPosition != position) {\n\t\t\t\tposition = position + (endPosition - position) * location;\n\t\t\t}\n\n\t\t\tthis.toggleVisibility(grid, position, 0, 1);\n\n\t\t\tconst p0 = this.positionToPoint(position, 0);\n\t\t\tconst p1 = this.positionToPoint(position, 1);\n\n\t\t\tgrid.set(\"draw\", (display) => {\n\t\t\t\tdisplay.moveTo(p0.x, p0.y);\n\t\t\t\tdisplay.lineTo(p1.x, p1.y);\n\t\t\t})\n\t\t}\n\t}\n\n\t/**\n\t * Converts relative position to angle.\n\t *\n\t * @param position Position\n\t * @return Angle\n\t */\n\tpublic positionToAngle(position: number): number {\n\n\t\tposition = this.toGlobalPosition(position);\n\n\t\tlet points = this.get(\"points\");\n\t\tlet axisLength = this.getPrivate(\"axisLength\", 0);\n\t\tlet angle = 0;\n\n\t\t// find which segment the position is in\n\t\tif (points) {\n\t\t\tlet totalLength = 0;\n\t\t\tlet prevPoint = points[0];\n\n\t\t\t$array.eachContinue(points, (point) => {\n\t\t\t\tlet segmentLength = Math.hypot(point.x - prevPoint.x, point.y - prevPoint.y);\n\t\t\t\ttotalLength += segmentLength;\n\t\t\t\tif (totalLength > position * axisLength) {\n\t\t\t\t\tangle = $math.getAngle(prevPoint, point) + 90;\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tprevPoint = point;\n\t\t\t\treturn true;\n\t\t\t})\n\n\t\t}\n\n\t\treturn angle;\n\t}\n\n\tpublic getPoints(positionX: number, positionY: number, endPositionX: number, endPositionY: number) {\n\t\tlet yRenderer = this.get(\"yRenderer\");\n\t\tlet points = [];\n\n\t\tif (positionX > endPositionX) {\n\t\t\t[positionX, endPositionX] = [endPositionX, positionX];\n\t\t}\n\n\t\tif (positionY > endPositionY) {\n\t\t\t[positionY, endPositionY] = [endPositionY, positionY];\n\t\t}\n\n\t\tif (yRenderer) {\n\t\t\tlet indexStart = this.positionToIndex(positionX);\n\t\t\tlet indexEnd = this.positionToIndex(endPositionX);\n\n\t\t\tpoints.push(this.positionToPoint(positionX, positionY));\n\n\t\t\tfor (let i = indexStart; i <= indexEnd + 1; i++) {\n\t\t\t\tlet position = this.indexToPosition(i);\n\t\t\t\tif (position > positionX && position < endPositionX) {\n\t\t\t\t\tpoints.push(this.positionToPoint(position, positionY));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpoints.push(this.positionToPoint(endPositionX, positionY));\n\n\t\t\tif (endPositionY != positionY) {\n\t\t\t\tpoints.push(this.positionToPoint(endPositionX, endPositionY));\n\t\t\t\tfor (let i = indexEnd + 1; i >= indexStart; i--) {\n\t\t\t\t\tlet position = this.indexToPosition(i);\n\t\t\t\t\tif (position > positionX && position < endPositionX) {\n\t\t\t\t\t\tpoints.push(this.positionToPoint(position, endPositionY));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpoints.push(this.positionToPoint(positionX, endPositionY));\n\t\t\t\tpoints.push(points[0]);\n\t\t\t}\n\t\t}\n\n\t\treturn points;\n\t}\n\n\t// do not delete\n\tprotected _handleOpposite() { }\n\n\n\tpublic positionToIndex(position: number): number {\n\t\tlet points = this.get(\"points\");\n\t\tlet axisLength = this.getPrivate(\"axisLength\", 0);\n\t\tlet index = 0;\n\n\t\tposition = this.toGlobalPosition(position);\n\n\t\tif (points && points.length > 1) {\n\t\t\tlet totalLength = 0;\n\t\t\tlet prevPoint = points[0];\n\n\t\t\tif (position <= 0) {\n\t\t\t\tindex = 0;\n\t\t\t}\n\t\t\telse if (position >= 1) {\n\t\t\t\tconst len = points.length\n\t\t\t\tindex = len - 1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet i = 0;\n\t\t\t\t$array.eachContinue(points, (point) => {\n\t\t\t\t\tlet segmentLength = Math.hypot(point.x - prevPoint.x, point.y - prevPoint.y);\n\t\t\t\t\ttotalLength += segmentLength;\n\t\t\t\t\tif (totalLength >= position * axisLength) {\n\t\t\t\t\t\tindex = i;\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\tprevPoint = point;\n\t\t\t\t\ti++;\n\t\t\t\t\treturn true;\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn index;\n\t}\n\n\tpublic indexToPosition(index: number): number {\n\t\tlet points = this.get(\"points\");\n\t\tlet axisLength = this.getPrivate(\"axisLength\", 0);\n\t\tlet position = 0;\n\n\t\tif (points && points.length > 1) {\n\t\t\tlet totalLength = 0;\n\t\t\tlet prevPoint = points[0];\n\n\t\t\tlet i = 0;\n\t\t\t$array.eachContinue(points, (point) => {\n\t\t\t\tposition = totalLength / axisLength;\n\t\t\t\tif (i == index) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tlet segmentLength = Math.hypot(point.x - prevPoint.x, point.y - prevPoint.y);\n\t\t\t\ttotalLength += segmentLength;\n\t\t\t\tprevPoint = point;\n\t\t\t\ti++;\n\t\t\t\treturn true;\n\t\t\t})\n\t\t}\n\n\t\treturn this.toAxisPosition(position);\n\t}\n\n\tpublic pointToPosition(point: IPoint): IPoint {\n\t\tlet minDistance = Infinity;\n\t\tlet index = 0;\n\t\tlet prevPoint = this._normalizedPoints[0];\n\t\tlet angle = 0;\n\t\t$array.each(this._normalizedPoints, (normalizedPoint, i) => {\n\t\t\tlet distance = Math.hypot(normalizedPoint.x - point.x, normalizedPoint.y - point.y);\n\t\t\tif (distance < minDistance) {\n\t\t\t\tminDistance = distance;\n\t\t\t\tindex = i;\n\t\t\t\tangle = $math.getAngle(point, normalizedPoint) - $math.getAngle(prevPoint, normalizedPoint);\n\t\t\t}\n\t\t\tprevPoint = normalizedPoint;\n\t\t})\n\n\t\tconst yRenderer = this.get(\"yRenderer\");\n\t\tconst scale = this.getPrivate(\"scale\", 1);\n\t\tconst rendererY = this.get(\"yRenderer\");\n\n\t\tconst y = -minDistance / (yRenderer.get(\"axisLength\", 0) * scale) * $math.sin(angle) + rendererY.get(\"axisLocation\", 0);\n\t\treturn { x: index / this._normalizedPoints.length, y: y };\n\t}\n\n\n\t/**\n\t * Converts relative position to an X/Y coordinate.\n\t *\n\t * @param position Position\n\t * @return Point\n\t */\n\tpublic positionToPoint(position: number, positionY?: number, doNotFix?: boolean): IPoint {\n\n\t\tif (positionY == undefined) {\n\t\t\tpositionY = 0;\n\t\t}\n\n\t\tconst rendererY = this.get(\"yRenderer\");\n\t\tif (!doNotFix) {\n\t\t\tposition = this.toGlobalPosition(position);\n\t\t}\n\t\tpositionY = rendererY.toGlobalPosition(positionY);\n\t\tpositionY -= rendererY.get(\"axisLocation\", 0);\n\n\t\tlet points = this.get(\"points\");\n\t\tlet axisLength = this.getPrivate(\"axisLength\", 0);\n\t\tlet scale = this.getPrivate(\"scale\", 1);\n\t\tlet pointOfPosition: IPoint = { x: 0, y: 0 };\n\t\tlet angle = 0;\n\n\t\t// find which segment the position is in\n\t\tif (points && points.length > 1) {\n\t\t\tlet totalLength = 0;\n\t\t\tlet prevPoint = points[0];\n\n\t\t\tif (position <= 0) {\n\t\t\t\tangle = $math.getAngle(points[0], points[1]) + 90;\n\t\t\t\tpointOfPosition = points[0];\n\t\t\t}\n\t\t\telse if (position >= 1) {\n\t\t\t\tconst len = points.length;\n\t\t\t\tangle = $math.getAngle(points[len - 2], points[len - 1]) + 90;\n\t\t\t\tpointOfPosition = points[len - 1];\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$array.eachContinue(points, (point) => {\n\t\t\t\t\tlet segmentLength = Math.hypot(point.x - prevPoint.x, point.y - prevPoint.y);\n\t\t\t\t\ttotalLength += segmentLength;\n\t\t\t\t\tif (totalLength >= position * axisLength) {\n\t\t\t\t\t\tlet segementStartPosition = (totalLength - segmentLength) / axisLength;\n\t\t\t\t\t\tlet segmentPosition = (position * axisLength - segementStartPosition * axisLength) / segmentLength;\n\n\t\t\t\t\t\tpointOfPosition = { x: prevPoint.x + (point.x - prevPoint.x) * segmentPosition, y: prevPoint.y + (point.y - prevPoint.y) * segmentPosition };\n\t\t\t\t\t\tangle = $math.getAngle(prevPoint, point) + 90;\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\tprevPoint = point;\n\t\t\t\t\treturn true;\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tlet centerX = this.getPrivate(\"centerX\", 0);\n\t\tlet centerY = this.getPrivate(\"centerY\", 0);\n\n\t\tlet axisX = (pointOfPosition.x - centerX) * scale;\n\t\tlet axisY = (pointOfPosition.y - centerY) * scale;\n\n\t\tif (positionY == null) {\n\t\t\tpositionY = 0;\n\t\t}\n\n\t\tlet lengthY = -rendererY.get(\"axisLength\", 0);\n\n\t\tlet dy = lengthY * positionY * scale;\n\n\t\tlet x = axisX + $math.cos(angle) * dy;\n\t\tlet y = axisY + $math.sin(angle) * dy;\n\n\t\treturn { x: x, y: y };\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic updateLabel(label?: AxisLabel, position?: number, endPosition?: number, count?: number) {\n\t\tif (label) {\n\t\t\tif (position == null) {\n\t\t\t\tposition = 0;\n\t\t\t}\n\n\t\t\tlet location = 0.5;\n\t\t\tif (count != null && count > 1) {\n\t\t\t\tlocation = label.get(\"multiLocation\", location);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlocation = label.get(\"location\", location);\n\t\t\t}\n\n\t\t\tif (endPosition != null && endPosition != position) {\n\t\t\t\tposition = position + (endPosition - position) * location;\n\t\t\t}\n\n\t\t\tconst angle = this.positionToAngle(position);\n\n\t\t\tconst rendererY = this.get(\"yRenderer\");\n\t\t\tconst axisY = rendererY.axis;\n\n\t\t\tconst point = this.positionToPoint(position, axisY.get(\"start\", 0) + rendererY.get(\"axisLocation\", 0));\n\n\t\t\tlabel.setAll({\n\t\t\t\tx: point.x,\n\t\t\t\ty: point.y\n\t\t\t});\n\n\t\t\tif (this.get(\"rotateLabels\", true)) {\n\t\t\t\tlabel.set(\"rotation\", angle - 90);\n\t\t\t}\n\n\t\t\tthis.toggleVisibility(label, position, label.get(\"minPosition\", 0), label.get(\"maxPosition\", 1));\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic updateTick(tick?: AxisTick, position?: number, endPosition?: number, count?: number) {\n\t\tif (tick) {\n\t\t\tif (position == null) {\n\t\t\t\tposition = 0;\n\t\t\t}\n\n\t\t\tlet location = 0.5;\n\t\t\tif (count != null && count > 1) {\n\t\t\t\tlocation = tick.get(\"multiLocation\", location);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlocation = tick.get(\"location\", location);\n\t\t\t}\n\n\t\t\tif (endPosition != null && endPosition != position) {\n\t\t\t\tposition = position + (endPosition - position) * location;\n\t\t\t}\n\n\t\t\tlet length = tick.get(\"length\", 0);\n\t\t\tconst inside = tick.get(\"inside\");\n\n\t\t\tif (inside) {\n\t\t\t\tlength *= -1;\n\t\t\t}\n\n\t\t\tlet angle = this.positionToAngle(position);\n\n\t\t\tthis.toggleVisibility(tick, position, tick.get(\"minPosition\", 0), tick.get(\"maxPosition\", 1));\n\n\t\t\tconst rendererY = this.get(\"yRenderer\");\n\t\t\tconst axisY = rendererY.axis;\n\n\t\t\tconst point = this.positionToPoint(position, axisY.get(\"start\"));\n\n\t\t\ttick.set(\"draw\", (display) => {\n\t\t\t\tdisplay.moveTo(point.x, point.y);\n\t\t\t\tdisplay.lineTo(point.x - length * $math.cos(angle), point.y - length * $math.sin(angle));\n\t\t\t})\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic updateBullet(bullet?: AxisBullet, position?: number, endPosition?: number) {\n\t\tif (bullet) {\n\t\t\tconst sprite = bullet.get(\"sprite\");\n\n\n\t\t\tif (sprite) {\n\t\t\t\tif (position == null) {\n\t\t\t\t\tposition = 0;\n\t\t\t\t}\n\n\t\t\t\tlet location = bullet.get(\"location\", 0.5);\n\t\t\t\tif (endPosition != null && endPosition != position) {\n\t\t\t\t\tposition = position + (endPosition - position) * location;\n\t\t\t\t}\n\n\t\t\t\tconst rendererY = this.get(\"yRenderer\");\n\t\t\t\tconst axisY = rendererY.axis;\n\n\t\t\t\tconst point = this.positionToPoint(position, axisY.get(\"start\"));\n\t\t\t\tsprite.setAll({ x: point.x, y: point.y });\n\n\t\t\t\tthis.toggleVisibility(sprite, position, 0, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic updateFill(fill?: Slice, position?: number, endPosition?: number) {\n\t\tif (fill) {\n\t\t\tif (position == null) {\n\t\t\t\tposition = 0;\n\t\t\t}\n\t\t\tif (endPosition == null) {\n\t\t\t\tendPosition = 1;\n\t\t\t}\n\n\t\t\tconst yRenderer = this.get(\"yRenderer\");\n\t\t\tconst yAxis = yRenderer.axis\n\n\t\t\tconst points = this.getPoints(position, yAxis.get(\"start\", 0), endPosition, yAxis.get(\"end\", 1));\n\n\t\t\tfill.set(\"draw\", (display) => {\n\t\t\t\tdisplay.moveTo(points[0].x, points[0].y);\n\t\t\t\t$array.each(points, (point) => {\n\t\t\t\t\tdisplay.lineTo(point.x, point.y);\n\t\t\t\t})\n\t\t\t\tdisplay.closePath();\n\t\t\t})\n\t\t}\n\t}\n\n\n\t/**\n\t * Returns axis length in pixels.\n\t *\n\t * @return Length\n\t */\n\tpublic axisLength(): number {\n\t\treturn this.getPrivate(\"axisLength\", 0);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic positionTooltip(tooltip: Tooltip, position: number) {\n\t\tconst point = this.positionToPoint(position, this.get(\"yRenderer\").axis.get(\"start\", 0));\n\t\tthis._positionTooltip(tooltip, point);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic updateTooltipBounds(_tooltip: Tooltip) {\n\n\t}\n}\n"]}