@amcharts/amcharts5 5.10.7 → 5.10.9

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 (215) hide show
  1. package/.internal/charts/map/MapChart.d.ts.map +1 -1
  2. package/.internal/charts/map/MapChart.js +8 -1
  3. package/.internal/charts/map/MapChart.js.map +1 -1
  4. package/.internal/charts/stock/StockChartDefaultTheme.d.ts.map +1 -1
  5. package/.internal/charts/stock/StockChartDefaultTheme.js +11 -1
  6. package/.internal/charts/stock/StockChartDefaultTheme.js.map +1 -1
  7. package/.internal/charts/stock/drawing/HorizontalLineSeries.d.ts +1 -0
  8. package/.internal/charts/stock/drawing/HorizontalLineSeries.d.ts.map +1 -1
  9. package/.internal/charts/stock/drawing/HorizontalLineSeries.js +17 -4
  10. package/.internal/charts/stock/drawing/HorizontalLineSeries.js.map +1 -1
  11. package/.internal/charts/stock/drawing/HorizontalRaySeries.d.ts +1 -0
  12. package/.internal/charts/stock/drawing/HorizontalRaySeries.d.ts.map +1 -1
  13. package/.internal/charts/stock/drawing/HorizontalRaySeries.js +14 -2
  14. package/.internal/charts/stock/drawing/HorizontalRaySeries.js.map +1 -1
  15. package/.internal/charts/stock/drawing/Measure.d.ts.map +1 -1
  16. package/.internal/charts/stock/drawing/Measure.js +1 -1
  17. package/.internal/charts/stock/drawing/Measure.js.map +1 -1
  18. package/.internal/charts/stock/indicators/HeikinAshi.d.ts +43 -0
  19. package/.internal/charts/stock/indicators/HeikinAshi.d.ts.map +1 -0
  20. package/.internal/charts/stock/indicators/HeikinAshi.js +109 -0
  21. package/.internal/charts/stock/indicators/HeikinAshi.js.map +1 -0
  22. package/.internal/charts/stock/toolbar/IndicatorControl.d.ts +1 -1
  23. package/.internal/charts/stock/toolbar/IndicatorControl.d.ts.map +1 -1
  24. package/.internal/charts/stock/toolbar/IndicatorControl.js +8 -0
  25. package/.internal/charts/stock/toolbar/IndicatorControl.js.map +1 -1
  26. package/.internal/charts/xy/XYChart.d.ts.map +1 -1
  27. package/.internal/charts/xy/XYChart.js +48 -2
  28. package/.internal/charts/xy/XYChart.js.map +1 -1
  29. package/.internal/charts/xy/axes/DateAxis.d.ts.map +1 -1
  30. package/.internal/charts/xy/axes/DateAxis.js +3 -0
  31. package/.internal/charts/xy/axes/DateAxis.js.map +1 -1
  32. package/.internal/charts/xy/series/BaseColumnSeries.d.ts.map +1 -1
  33. package/.internal/charts/xy/series/BaseColumnSeries.js +3 -0
  34. package/.internal/charts/xy/series/BaseColumnSeries.js.map +1 -1
  35. package/.internal/core/Classes.d.ts +2 -0
  36. package/.internal/core/Classes.d.ts.map +1 -1
  37. package/.internal/core/Classes.js.map +1 -1
  38. package/.internal/core/Registry.js +1 -1
  39. package/.internal/core/Registry.js.map +1 -1
  40. package/.internal/core/Root.d.ts +1 -1
  41. package/.internal/core/Root.d.ts.map +1 -1
  42. package/.internal/core/Root.js +56 -6
  43. package/.internal/core/Root.js.map +1 -1
  44. package/.internal/core/render/Graphics.d.ts +8 -0
  45. package/.internal/core/render/Graphics.d.ts.map +1 -1
  46. package/.internal/core/render/Graphics.js +5 -4
  47. package/.internal/core/render/Graphics.js.map +1 -1
  48. package/.internal/core/render/Label.js +2 -2
  49. package/.internal/core/render/Label.js.map +1 -1
  50. package/.internal/core/render/ZoomableContainer.d.ts.map +1 -1
  51. package/.internal/core/render/ZoomableContainer.js +10 -8
  52. package/.internal/core/render/ZoomableContainer.js.map +1 -1
  53. package/.internal/core/render/backend/CanvasRenderer.d.ts +2 -1
  54. package/.internal/core/render/backend/CanvasRenderer.d.ts.map +1 -1
  55. package/.internal/core/render/backend/CanvasRenderer.js +23 -6
  56. package/.internal/core/render/backend/CanvasRenderer.js.map +1 -1
  57. package/.internal/core/render/backend/Renderer.d.ts +2 -1
  58. package/.internal/core/render/backend/Renderer.d.ts.map +1 -1
  59. package/.internal/core/render/backend/Renderer.js.map +1 -1
  60. package/.internal/core/render/patterns/PicturePattern.d.ts.map +1 -1
  61. package/.internal/core/render/patterns/PicturePattern.js +5 -0
  62. package/.internal/core/render/patterns/PicturePattern.js.map +1 -1
  63. package/.internal/core/util/Accessibility.d.ts +7 -0
  64. package/.internal/core/util/Accessibility.d.ts.map +1 -1
  65. package/.internal/core/util/Accessibility.js.map +1 -1
  66. package/.internal/core/util/Timezone.d.ts.map +1 -1
  67. package/.internal/core/util/Timezone.js +2 -2
  68. package/.internal/core/util/Timezone.js.map +1 -1
  69. package/.internal/plugins/exporting/ExportingCSS.d.ts.map +1 -1
  70. package/.internal/plugins/exporting/ExportingCSS.js +110 -102
  71. package/.internal/plugins/exporting/ExportingCSS.js.map +1 -1
  72. package/CHANGELOG.md +38 -0
  73. package/examples/javascript/flow-arc-horizontal/package.json +1 -1
  74. package/examples/javascript/flow-arc-vertical/package.json +1 -1
  75. package/examples/javascript/flow-chord/package.json +1 -1
  76. package/examples/javascript/flow-chord-directed/package.json +1 -1
  77. package/examples/javascript/flow-chord-non-ribbon/package.json +1 -1
  78. package/examples/javascript/flow-sankey/package.json +1 -1
  79. package/examples/javascript/gauge/package.json +1 -1
  80. package/examples/javascript/gauge-bands/package.json +1 -1
  81. package/examples/javascript/hierarchy-force-directed/package.json +1 -1
  82. package/examples/javascript/hierarchy-pack/package.json +1 -1
  83. package/examples/javascript/hierarchy-partition/package.json +1 -1
  84. package/examples/javascript/hierarchy-sunburst/package.json +1 -1
  85. package/examples/javascript/hierarchy-tree/package.json +1 -1
  86. package/examples/javascript/hierarchy-treemap/package.json +1 -1
  87. package/examples/javascript/hierarchy-voronoi-treemap/package.json +1 -1
  88. package/examples/javascript/jest/package.json +1 -1
  89. package/examples/javascript/json-pie/package.json +1 -1
  90. package/examples/javascript/json-xy/package.json +1 -1
  91. package/examples/javascript/map-animating-along-lines/package.json +1 -1
  92. package/examples/javascript/map-clustered-points/package.json +1 -1
  93. package/examples/javascript/map-day-and-night/package.json +1 -1
  94. package/examples/javascript/map-globe-rotate-to-country/package.json +1 -1
  95. package/examples/javascript/map-globe-with-projected-circles/package.json +1 -1
  96. package/examples/javascript/map-with-bubbles/package.json +1 -1
  97. package/examples/javascript/map-zoom-to-country/package.json +1 -1
  98. package/examples/javascript/misc-40-charts/package.json +1 -1
  99. package/examples/javascript/misc-microchart-grid/package.json +1 -1
  100. package/examples/javascript/pie-chart/package.json +1 -1
  101. package/examples/javascript/pie-donut-chart/package.json +1 -1
  102. package/examples/javascript/pie-variable-radius/package.json +1 -1
  103. package/examples/javascript/radar-column-iwatch-style/package.json +1 -1
  104. package/examples/javascript/radar-heat-map/package.json +1 -1
  105. package/examples/javascript/radar-line/package.json +1 -1
  106. package/examples/javascript/radar-time-line/package.json +1 -1
  107. package/examples/javascript/sliced-funnel/package.json +1 -1
  108. package/examples/javascript/sliced-pictorial-stacked/package.json +1 -1
  109. package/examples/javascript/sliced-pyramid/package.json +1 -1
  110. package/examples/javascript/stock-chart/package.json +1 -1
  111. package/examples/javascript/stock-chart-comparing-stocks/package.json +1 -1
  112. package/examples/javascript/stock-chart-data-granularity/package.json +1 -1
  113. package/examples/javascript/stock-chart-data-grouping/package.json +1 -1
  114. package/examples/javascript/stock-chart-intraday/package.json +1 -1
  115. package/examples/javascript/stock-chart-live/package.json +1 -1
  116. package/examples/javascript/stock-chart-volume-separate-panel/package.json +1 -1
  117. package/examples/javascript/venn-diagram/package.json +1 -1
  118. package/examples/javascript/wordcloud-with-data/package.json +1 -1
  119. package/examples/javascript/wordcloud-with-text/package.json +1 -1
  120. package/examples/javascript/xy-100-percent-stacked-column/package.json +1 -1
  121. package/examples/javascript/xy-animated-bullet-at-the-end-of-the-series/package.json +1 -1
  122. package/examples/javascript/xy-bubble/package.json +1 -1
  123. package/examples/javascript/xy-candlestick/package.json +1 -1
  124. package/examples/javascript/xy-clustered-column/package.json +1 -1
  125. package/examples/javascript/xy-column/package.json +1 -1
  126. package/examples/javascript/xy-comparing-series-google-analytics-style/package.json +1 -1
  127. package/examples/javascript/xy-data-grouping/package.json +1 -1
  128. package/examples/javascript/xy-draggable-range/package.json +1 -1
  129. package/examples/javascript/xy-drawing-series-with-mouse-or-touch/package.json +1 -1
  130. package/examples/javascript/xy-dumbbell plot/package.json +1 -1
  131. package/examples/javascript/xy-evenly-spaced-date-axis/package.json +1 -1
  132. package/examples/javascript/xy-line/package.json +1 -1
  133. package/examples/javascript/xy-line-highlight-on-legend-hover/package.json +1 -1
  134. package/examples/javascript/xy-live-data/package.json +1 -1
  135. package/examples/javascript/xy-multiple-synced-value-axes/package.json +1 -1
  136. package/examples/javascript/xy-ohlc/package.json +1 -1
  137. package/examples/javascript/xy-real-time-data-sorting/package.json +1 -1
  138. package/examples/javascript/xy-smoothed-line/package.json +1 -1
  139. package/examples/javascript/xy-stacked-and-clustered-column/package.json +1 -1
  140. package/examples/javascript/xy-stacked-column/package.json +1 -1
  141. package/examples/javascript/xy-stacked-step/package.json +1 -1
  142. package/examples/javascript/xy-stock/package.json +1 -1
  143. package/examples/javascript/xy-stock-comparing/package.json +1 -1
  144. package/examples/typescript/flow-arc-horizontal/package.json +1 -1
  145. package/examples/typescript/flow-arc-vertical/package.json +1 -1
  146. package/examples/typescript/flow-chord/package.json +1 -1
  147. package/examples/typescript/flow-chord-directed/package.json +1 -1
  148. package/examples/typescript/flow-chord-non-ribbon/package.json +1 -1
  149. package/examples/typescript/flow-sankey/package.json +1 -1
  150. package/examples/typescript/gauge/package.json +1 -1
  151. package/examples/typescript/gauge-bands/package.json +1 -1
  152. package/examples/typescript/hierarchy-force-directed/package.json +1 -1
  153. package/examples/typescript/hierarchy-pack/package.json +1 -1
  154. package/examples/typescript/hierarchy-partition/package.json +1 -1
  155. package/examples/typescript/hierarchy-sunburst/package.json +1 -1
  156. package/examples/typescript/hierarchy-tree/package.json +1 -1
  157. package/examples/typescript/hierarchy-treemap/package.json +1 -1
  158. package/examples/typescript/hierarchy-voronoi-treemap/package.json +1 -1
  159. package/examples/typescript/jest/package.json +1 -1
  160. package/examples/typescript/json-pie/package.json +1 -1
  161. package/examples/typescript/json-xy/package.json +1 -1
  162. package/examples/typescript/map-animating-along-lines/package.json +1 -1
  163. package/examples/typescript/map-clustered-points/package.json +1 -1
  164. package/examples/typescript/map-day-and-night/package.json +1 -1
  165. package/examples/typescript/map-globe-rotate-to-country/package.json +1 -1
  166. package/examples/typescript/map-globe-with-projected-circles/package.json +1 -1
  167. package/examples/typescript/map-with-bubbles/package.json +1 -1
  168. package/examples/typescript/map-zoom-to-country/package.json +1 -1
  169. package/examples/typescript/misc-40-charts/package.json +1 -1
  170. package/examples/typescript/misc-microchart-grid/package.json +1 -1
  171. package/examples/typescript/pie-chart/package.json +1 -1
  172. package/examples/typescript/pie-donut-chart/package.json +1 -1
  173. package/examples/typescript/pie-variable-radius/package.json +1 -1
  174. package/examples/typescript/radar-column-iwatch-style/package.json +1 -1
  175. package/examples/typescript/radar-heat-map/package.json +1 -1
  176. package/examples/typescript/radar-line/package.json +1 -1
  177. package/examples/typescript/radar-time-line/package.json +1 -1
  178. package/examples/typescript/sliced-funnel/package.json +1 -1
  179. package/examples/typescript/sliced-pictorial-stacked/package.json +1 -1
  180. package/examples/typescript/sliced-pyramid/package.json +1 -1
  181. package/examples/typescript/stock-chart/package.json +1 -1
  182. package/examples/typescript/stock-chart-comparing-stocks/package.json +1 -1
  183. package/examples/typescript/stock-chart-data-granularity/package.json +1 -1
  184. package/examples/typescript/stock-chart-data-grouping/package.json +1 -1
  185. package/examples/typescript/stock-chart-intraday/package.json +1 -1
  186. package/examples/typescript/stock-chart-live/package.json +1 -1
  187. package/examples/typescript/stock-chart-volume-separate-panel/package.json +1 -1
  188. package/examples/typescript/venn-diagram/package.json +1 -1
  189. package/examples/typescript/wordcloud-with-data/package.json +1 -1
  190. package/examples/typescript/wordcloud-with-text/package.json +1 -1
  191. package/examples/typescript/xy-100-percent-stacked-column/package.json +1 -1
  192. package/examples/typescript/xy-animated-bullet-at-the-end-of-the-series/package.json +1 -1
  193. package/examples/typescript/xy-bubble/package.json +1 -1
  194. package/examples/typescript/xy-candlestick/package.json +1 -1
  195. package/examples/typescript/xy-clustered-column/package.json +1 -1
  196. package/examples/typescript/xy-column/package.json +1 -1
  197. package/examples/typescript/xy-comparing-series-google-analytics-style/package.json +1 -1
  198. package/examples/typescript/xy-data-grouping/package.json +1 -1
  199. package/examples/typescript/xy-draggable-range/package.json +1 -1
  200. package/examples/typescript/xy-drawing-series-with-mouse-or-touch/package.json +1 -1
  201. package/examples/typescript/xy-dumbbell plot/package.json +1 -1
  202. package/examples/typescript/xy-evenly-spaced-date-axis/package.json +1 -1
  203. package/examples/typescript/xy-line/package.json +1 -1
  204. package/examples/typescript/xy-line-highlight-on-legend-hover/package.json +1 -1
  205. package/examples/typescript/xy-live-data/package.json +1 -1
  206. package/examples/typescript/xy-multiple-synced-value-axes/package.json +1 -1
  207. package/examples/typescript/xy-ohlc/package.json +1 -1
  208. package/examples/typescript/xy-real-time-data-sorting/package.json +1 -1
  209. package/examples/typescript/xy-smoothed-line/package.json +1 -1
  210. package/examples/typescript/xy-stacked-and-clustered-column/package.json +1 -1
  211. package/examples/typescript/xy-stacked-column/package.json +1 -1
  212. package/examples/typescript/xy-stacked-step/package.json +1 -1
  213. package/examples/typescript/xy-stock/package.json +1 -1
  214. package/examples/typescript/xy-stock-comparing/package.json +1 -1
  215. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Root.js","sourceRoot":"","sources":["../../../../src/.internal/core/Root.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IAnimation } from \"./util/Animation\";\nimport type { Entity } from \"./util/Entity\";\nimport type { Sprite } from \"./render/Sprite\";\nimport type { Theme } from \"./Theme\";\nimport type { IPoint } from \"./util/IPoint\";\nimport type { IRenderer, IPointerEvent } from \"./render/backend/Renderer\";\nimport type { Timezone } from \"./util/Timezone\";\n\nimport { AnimationState } from \"./util/Animation\";\nimport { Container } from \"./render/Container\";\nimport { Text } from \"./render/Text\";\nimport { HorizontalLayout } from \"./render/HorizontalLayout\";\nimport { VerticalLayout } from \"./render/VerticalLayout\";\nimport { GridLayout } from \"./render/GridLayout\";\nimport { IDisposer, Disposer } from \"./util/Disposer\";\nimport { ResizeSensor } from \"./util/ResizeSensor\";\nimport { InterfaceColors } from \"./util/InterfaceColors\";\nimport { Graphics } from \"./render/Graphics\";\nimport { Rectangle } from \"./render/Rectangle\";\nimport { Tooltip } from \"./render/Tooltip\";\nimport { NumberFormatter } from \"./util/NumberFormatter\";\nimport { DateFormatter } from \"./util/DateFormatter\";\nimport { DurationFormatter } from \"./util/DurationFormatter\";\nimport { ILocale, Language } from \"./util/Language\";\nimport { Events, EventDispatcher } from \"./util/EventDispatcher\";\nimport { DefaultTheme } from \"../themes/DefaultTheme\";\nimport { CanvasRenderer } from \"./render/backend/CanvasRenderer\";\nimport { p100, percent, isPercent, Percent } from \"./util/Percent\";\nimport { color } from \"./util/Color\";\nimport { populateString } from \"./util/PopulateString\";\nimport { registry } from \"./Registry\";\n\nimport * as $order from \"./util/Order\";\nimport * as $array from \"./util/Array\";\nimport * as $object from \"./util/Object\";\nimport * as $utils from \"./util/Utils\";\nimport * as $type from \"./util/Type\";\n\n\nimport en from \"../../locales/en\";\n\n\nfunction rAF(fps: number | undefined, callback: (currentTime: number) => void): void {\n\tif (fps == null) {\n\t\trequestAnimationFrame(callback);\n\n\t} else {\n\t\tsetTimeout(() => {\n\t\t\trequestAnimationFrame(callback);\n\t\t}, 1000 / fps);\n\t}\n}\n\n\n/**\n * @ignore\n */\ninterface IParent extends Entity {\n\t_prepareChildren(): void;\n\t_updateChildren(): void;\n}\n\ninterface IBounds extends Entity {\n\tdepth(): number;\n\t_updateBounds(): void;\n}\n\n\nexport interface ISize {\n\twidth: number,\n\theight: number,\n}\n\n\nexport interface IRootEvents {\n\tframestarted: {\n\t\ttimestamp: number;\n\t};\n\tframeended: {\n\t\ttimestamp: number;\n\t};\n}\n\n\nexport interface IRootSettings {\n\n\t/**\n\t * Indicates whether chart should use \"safe\" resolution on some memory-limiting\n\t * platforms such as Safari.\n\t *\n\t * @default true\n\t */\n\tuseSafeResolution?: boolean;\n\n\t/**\n\t * Allows defining margins around chart area for tooltips to go outside the\n\t * chart itself.\n\t *\n\t * @since 5.2.24\n\t */\n\ttooltipContainerBounds?: { top: number, left: number, right: number, bottom: number };\n\n\t/**\n\t * Set to `false` to disable all accessibility features.\n\t *\n\t * NOTE: once disabled, accessibility cannot be re-enabled on a live `Root` object.\n\t *\n\t * @default true\n\t * @since 5.3.0\n\t */\n\taccessible?: boolean;\n\n\t/**\n\t * If set to `true`, the parent inner `<div>` element will become a focusable\n\t * element.\n\t *\n\t * @since 5.3.17\n\t * @default false\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/accessibility/#Accessibility_of_Root_element} for more info\n\t */\n\tfocusable?: boolean;\n\n\t/**\n\t * Distance between focused element and its highlight square in pixels.\n\t *\n\t * @since 5.6.0\n\t * @default 2\n\t */\n\tfocusPadding?: number;\n\n\t/**\n\t * If set to some string, it will be used as inner `<div>` ARIA-LABEL.\n\t *\n\t * Should be used in conjuction with `focusable`.\n\t *\n\t * @since 5.3.17\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/accessibility/#Accessibility_of_Root_element} for more info\n\t */\n\tariaLabel?: string;\n\n\t/**\n\t * Allows setting a \"role\" for the inner `<div>`.\n\t *\n\t * @since 5.3.17\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/accessibility/#Accessibility_of_Root_element} for more info\n\t */\n\trole?: string;\n\n\t/**\n\t * Allows for specifying a custom width / height for the chart.\n\t *\n\t * This function will be called automatically when the chart is resized.\n\t */\n\tcalculateSize?: (dimensions: DOMRect) => ISize;\n}\n\n\n// TODO implement Disposer\n/**\n * Root element of the chart.\n *\n * @see {@link https://www.amcharts.com/docs/v5/getting-started/#Root_element} for more info\n */\nexport class Root implements IDisposer {\n\n\t/**\n\t * A reference to original chart container (div element).\n\t */\n\tpublic dom: HTMLElement;\n\tpublic _inner: HTMLElement;\n\n\tprotected _settings: IRootSettings;\n\tprotected _isDirty: boolean = false;\n\tprotected _isDirtyParents: boolean = false;\n\tprotected _isDirtyAnimation: boolean = false;\n\tprotected _dirty: { [id: number]: Entity } = {};\n\tprotected _dirtyParents: { [id: number]: IParent } = {};\n\tprotected _dirtyBounds: { [id: number]: IBounds } = {};\n\tprotected _dirtyPositions: { [id: number]: Sprite } = {};\n\n\tprotected _ticker: ((currentTime: number) => void) | null = null;\n\tprotected _tickers: Array<(currentTime: number) => void> = [];\n\n\tprotected _updateTick: boolean = true;\n\n\t/**\n\t * Root's event dispatcher.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/events/} for more info\n\t */\n\tpublic events: EventDispatcher<Events<this, IRootEvents>> = new EventDispatcher();\n\n\t/**\n\t * @ignore\n\t * @todo needs description\n\t */\n\tpublic animationTime: number | null = null;\n\n\tprivate _animations: Array<IAnimation> = [];\n\n\tpublic _renderer: IRenderer;\n\n\tpublic _rootContainer!: Container;\n\n\t/**\n\t * Main content container.\n\t */\n\tpublic container!: Container;\n\n\t/**\n\t * A [[Container]] used to display tooltips in.\n\t */\n\tpublic tooltipContainer!: Container\n\tprotected _tooltipContainerSettings!: { top: number, left: number, right: number, bottom: number };\n\n\tpublic _tooltip!: Tooltip;\n\n\t// Locale-related\n\n\t/**\n\t * @ignore\n\t */\n\tpublic language: Language = Language.new(this, {});\n\n\t/**\n\t * Locale used by the chart.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/locales/}\n\t */\n\tpublic locale: ILocale = en;\n\n\t// Date-time related\n\n\t/**\n\t * Use UTC when formatting date/time.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/formatting-dates/#utc-and-time-zones} for more info\n\t */\n\tpublic utc: boolean = false;\n\n\t/**\n\t * If set, will format date/time in specific time zone.\n\t *\n\t * The value should be named time zone, e.g.:\n\t * `\"America/Vancouver\"`, `\"Australia/Sydney\"`, `\"UTC\"`.\n\t *\n\t * NOTE: Using time zone feature may noticeable affect performance of the\n\t * chart, especially with large data sets, since every single date will need\n\t * to be recalculated.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/getting-started/root-element/#time-zone} for more info\n\t * @since 5.1.0\n\t */\n\tpublic timezone?: Timezone;\n\n\t/**\n\t * The maximum FPS that the Root will run at.\n\t *\n\t * If `undefined` it will run at the highest FPS.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/getting-started/root-element/#Performance} for more info\n\t */\n\tpublic fps: number | undefined;\n\n\t/**\n\t * Number formatter.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/formatting-numbers/} for more info\n\t */\n\tpublic numberFormatter: NumberFormatter = NumberFormatter.new(this, {});\n\n\t/**\n\t * Date/time formatter.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/formatting-dates/} for more info\n\t */\n\tpublic dateFormatter: DateFormatter = DateFormatter.new(this, {});\n\n\t/**\n\t * Duration formatter.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/formatting-dates/} for more info\n\t */\n\tpublic durationFormatter: DurationFormatter = DurationFormatter.new(this, {});\n\n\n\t// Accessibility\n\n\t/**\n\t * Global tab index for using for the whole chart\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/accessibility/} for more info\n\t */\n\tpublic tabindex: number = 0;\n\n\t//@todo maybe make this better\n\tprotected _tabindexes: Sprite[] = [];\n\n\tprotected _a11yD: boolean = false;\n\tprotected _focusElementDirty: boolean = false;\n\tprotected _focusElementContainer: HTMLDivElement | undefined;\n\tprotected _focusedSprite: Sprite | undefined;\n\tprotected _isShift: boolean | undefined;\n\tprotected _keyboardDragPoint: IPoint | undefined;\n\tprotected _tooltipElementContainer: HTMLDivElement | undefined;\n\tprotected _readerAlertElement: HTMLDivElement | undefined;\n\n\tpublic _logo?: Container;\n\n\tpublic _tooltipDiv: HTMLDivElement | undefined;\n\n\t/**\n\t * Used for dynamically-created CSS and JavaScript with strict source policies.\n\t */\n\tpublic nonce?: string;\n\n\t/**\n\t * Special color set to be used for various controls.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/#Interface_colors} for more info\n\t */\n\tpublic interfaceColors: InterfaceColors;\n\n\t/**\n\t * An instance of vertical layout object that can be used to set `layout` setting\n\t * of a [[Container]].\n\t *\n\t * @default VerticalLayout.new()\n\t */\n\tpublic verticalLayout: VerticalLayout = VerticalLayout.new(this, {});\n\n\t/**\n\t * An instance of horizontal layout object that can be used to set `layout` setting\n\t * of a [[Container]].\n\t *\n\t * @default HorizontalLayout.new()\n\t */\n\tpublic horizontalLayout: VerticalLayout = HorizontalLayout.new(this, {});\n\n\t/**\n\t * An instance of grid layout object that can be used to set `layout` setting\n\t * of a [[Container]].\n\t *\n\t * @default VerticalLayout.new()\n\t */\n\tpublic gridLayout: VerticalLayout = GridLayout.new(this, {});\n\n\tpublic _paused: boolean = false;\n\n\t/**\n\t * Indicates whether chart should resized automatically when parent container\n\t * width and/or height changes.\n\t *\n\t * If disabled (`autoResize = false`) you can make the chart resize manually\n\t * by calling root element's `resize()` method.\n\t */\n\tpublic autoResize: boolean = true;\n\n\tprotected _fontHash: string = \"\";\n\n\tprotected _isDisposed: boolean = false;\n\tprotected _disposers: Array<IDisposer> = [];\n\n\tprotected _resizeSensorDisposer?: IDisposer;\n\n\tpublic _tooltips: Array<Tooltip> = [];\n\n\tprotected _htmlElementContainer: HTMLDivElement | undefined;\n\tprotected _htmlEnabledContainers: Container[] = [];\n\n\tprotected constructor(id: string | HTMLElement, settings: IRootSettings = {}, isReal: boolean) {\n\n\t\tif (!isReal) {\n\t\t\tthrow new Error(\"You cannot use `new Class()`, instead use `Class.new()`\");\n\t\t}\n\n\t\tthis._settings = settings;\n\n\t\tif (settings.accessible == false) {\n\t\t\tthis._a11yD = true;\n\t\t}\n\n\t\tif (settings.useSafeResolution == null) {\n\t\t\tsettings.useSafeResolution = true;\n\t\t}\n\n\t\tlet resolution;\n\n\t\tif (settings.useSafeResolution) {\n\t\t\tresolution = $utils.getSafeResolution();\n\t\t}\n\n\t\tthis._renderer = new CanvasRenderer(resolution);\n\n\t\tlet dom: HTMLElement | null;\n\n\t\tif (id instanceof HTMLElement) {\n\t\t\tdom = id;\n\t\t}\n\t\telse {\n\t\t\tdom = document.getElementById(id);\n\t\t}\n\n\t\t$array.each(registry.rootElements, (root) => {\n\t\t\tif (root.dom === dom) {\n\t\t\t\tthrow new Error(\"You cannot have multiple Roots on the same DOM node\");\n\t\t\t}\n\t\t});\n\n\t\tthis.interfaceColors = InterfaceColors.new(this, {});\n\n\t\tif (dom === null) {\n\t\t\tthrow new Error(\"Could not find HTML element with id `\" + id + \"`\");\n\t\t}\n\n\t\tthis.dom = dom;\n\n\t\tlet inner: HTMLDivElement = document.createElement(\"div\");\n\t\tinner.style.position = \"relative\";\n\t\tinner.style.width = \"100%\";\n\t\tinner.style.height = \"100%\";\n\t\tdom.appendChild(inner);\n\n\t\tconst tooltipContainerBounds = settings.tooltipContainerBounds;\n\t\tif (tooltipContainerBounds) {\n\t\t\tthis._tooltipContainerSettings = tooltipContainerBounds;\n\t\t}\n\n\t\tthis._inner = inner;\n\n\t\tthis._updateComputedStyles();\n\n\t\tregistry.rootElements.push(this);\n\t}\n\n\n\tpublic static new(id: string | HTMLElement, settings?: IRootSettings): Root {\n\t\tconst root = new Root(id, settings, true);\n\t\troot._init();\n\t\treturn root;\n\t}\n\n\tpublic moveDOM(id: string | HTMLElement): void {\n\t\tlet dom: HTMLElement | null;\n\n\t\tif (id instanceof HTMLElement) {\n\t\t\tdom = id;\n\t\t}\n\t\telse {\n\t\t\tdom = document.getElementById(id);\n\t\t}\n\n\t\tif (dom) {\n\t\t\twhile (this.dom.childNodes.length > 0) {\n\t\t\t\tdom.appendChild(this.dom.childNodes[0]);\n\t\t\t}\n\t\t\tthis.dom = dom;\n\t\t\tthis._initResizeSensor();\n\t\t\tthis.resize();\n\t\t}\n\n\t}\n\n\n\tprotected _handleLogo(): void {\n\t\tif (this._logo) {\n\t\t\tconst w = this.dom.offsetWidth;\n\t\t\tconst h = this.dom.offsetHeight;\n\t\t\tif ((w <= 150) || (h <= 60)) {\n\t\t\t\tthis._logo.hide();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._logo.show();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _showBranding(): void {\n\t\tif (!this._logo) {\n\t\t\tconst logo = this.tooltipContainer.children.push(Container.new(this, {\n\t\t\t\tinteractive: true,\n\t\t\t\tinteractiveChildren: false,\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tsetStateOnChildren: true,\n\t\t\t\tpaddingTop: 9,\n\t\t\t\tpaddingRight: 9,\n\t\t\t\tpaddingBottom: 9,\n\t\t\t\tpaddingLeft: 9,\n\t\t\t\tscale: .6,\n\t\t\t\ty: percent(100),\n\t\t\t\tcenterY: p100,\n\t\t\t\ttooltipText: \"Created using amCharts 5\",\n\t\t\t\ttooltipX: p100,\n\t\t\t\tcursorOverStyle: \"pointer\",\n\t\t\t\tbackground: Rectangle.new(this, {\n\t\t\t\t\tfill: color(0x474758),\n\t\t\t\t\tfillOpacity: 0,\n\t\t\t\t\ttooltipY: 5\n\t\t\t\t})\n\t\t\t}));\n\n\t\t\tconst tooltip = Tooltip.new(this, {\n\t\t\t\tpointerOrientation: \"horizontal\",\n\t\t\t\tpaddingTop: 4,\n\t\t\t\tpaddingRight: 7,\n\t\t\t\tpaddingBottom: 4,\n\t\t\t\tpaddingLeft: 7\n\t\t\t});\n\t\t\ttooltip.label.setAll({\n\t\t\t\tfontSize: 12\n\t\t\t});\n\t\t\ttooltip.get(\"background\")!.setAll({\n\t\t\t\tfill: this.interfaceColors.get(\"background\"),\n\t\t\t\tstroke: this.interfaceColors.get(\"grid\"),\n\t\t\t\tstrokeOpacity: 0.3\n\t\t\t})\n\t\t\tlogo.set(\"tooltip\", tooltip);\n\n\t\t\tlogo.events.on(\"click\", () => {\n\t\t\t\twindow.open(\"https://www.amcharts.com/\", \"_blank\");\n\t\t\t});\n\n\t\t\tlogo.states.create(\"hover\", {});\n\n\t\t\tconst m = logo.children.push(Graphics.new(this, {\n\t\t\t\tstroke: color(0xcccccc),\n\t\t\t\tstrokeWidth: 3,\n\t\t\t\tsvgPath: \"M5 25 L13 25h13.6c3.4 0 6 0 10.3-4.3s5.2-12 8.6-12c3.4 0 4.3 8.6 7.7 8.6M83.4 25H79.8c-3.4 0-6 0-10.3-4.3s-5.2-12-8.6-12-4.3 8.6-7.7 8.6\"\n\t\t\t}));\n\n\t\t\tm.states.create(\"hover\", { stroke: color(0x3CABFF) });\n\n\t\t\tconst a = logo.children.push(Graphics.new(this, {\n\t\t\t\tstroke: color(0x888888),\n\t\t\t\tstrokeWidth: 3,\n\t\t\t\tsvgPath: \"M83.4 25h-31C37 25 39.5 4.4 28.4 4.4S18.9 24.2 4.3 25H0\"\n\t\t\t}));\n\n\t\t\ta.states.create(\"hover\", { stroke: color(0x474758) });\n\n\t\t\t//logo.set(\"tooltip\", this._tooltip);\n\t\t\t//logo.setPrivate(\"tooltipTarget\", logo.get(\"background\"));\n\t\t\tthis._logo = logo;\n\n\t\t\tthis._handleLogo();\n\t\t}\n\t}\n\n\tprotected _getRealSize(): DOMRect {\n\t\treturn this.dom.getBoundingClientRect();\n\t}\n\n\tprotected _getCalculatedSize(rect: DOMRect): ISize {\n\t\tif (this._settings.calculateSize) {\n\t\t\treturn this._settings.calculateSize(rect);\n\n\t\t} else {\n\t\t\treturn {\n\t\t\t\twidth: rect.width,\n\t\t\t\theight: rect.height,\n\t\t\t};\n\t\t}\n\t}\n\n\tprotected _init(): void {\n\n\t\tconst settings = this._settings;\n\t\tif (settings.accessible !== false) {\n\t\t\tif (settings.focusable) {\n\t\t\t\tthis._inner.setAttribute(\"focusable\", \"true\");\n\t\t\t\tthis._inner.setAttribute(\"tabindex\", this.tabindex + \"\");\n\t\t\t}\n\n\t\t\tif (settings.ariaLabel) {\n\t\t\t\tthis._inner.setAttribute(\"aria-label\", settings.ariaLabel);\n\t\t\t}\n\n\t\t\tif (settings.role) {\n\t\t\t\tthis._inner.setAttribute(\"role\", settings.role);\n\t\t\t}\n\t\t}\n\n\t\tconst renderer = this._renderer;\n\n\t\tconst rect = this._getRealSize();\n\t\tconst size = this._getCalculatedSize(rect);\n\n\t\tconst width = Math.floor(size.width);\n\t\tconst height = Math.floor(size.height);\n\n\t\tconst realWidth = Math.floor(rect.width);\n\t\tconst realHeight = Math.floor(rect.height);\n\n\t\tconst rootContainer = Container.new(this, {\n\t\t\tvisible: true,\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t});\n\t\tthis._rootContainer = rootContainer;\n\t\tthis._rootContainer._defaultThemes.push(DefaultTheme.new(this));\n\n\t\tconst container = rootContainer.children.push(Container.new(this, { visible: true, width: p100, height: p100 }));\n\t\tthis.container = container;\n\n\t\trenderer.resize(realWidth, realHeight, width, height);\n\n\t\t//@todo: better appendChild - refer\n\t\tthis._inner.appendChild(renderer.view);\n\n\t\t// TODO: TMP TMP TMP for testing only, remove\n\t\t//renderer.debugGhostView = true;\n\n\t\tthis._initResizeSensor();\n\n\t\t// HTML content holder\n\t\tconst htmlElementContainer = document.createElement(\"div\");\n\t\tthis._htmlElementContainer = htmlElementContainer;\n\t\thtmlElementContainer.className = \"am5-html-container\";\n\t\thtmlElementContainer.style.position = \"absolute\";\n\t\thtmlElementContainer.style.pointerEvents = \"none\";\n\t\tif (!this._tooltipContainerSettings) {\n\t\t\thtmlElementContainer.style.overflow = \"hidden\";\n\t\t}\n\t\tthis._inner.appendChild(htmlElementContainer);\n\n\t\tif (this._a11yD !== true) {\n\n\t\t\t// Create element which is used to make announcements to screen reader\n\t\t\tconst readerAlertElement = document.createElement(\"div\");\n\t\t\treaderAlertElement.className = \"am5-reader-container\";\n\t\t\treaderAlertElement.setAttribute(\"role\", \"alert\");\n\t\t\t// readerAlertElement.style.zIndex = \"-100000\";\n\t\t\t// readerAlertElement.style.opacity = \"0\";\n\t\t\t// readerAlertElement.style.top = \"0\";\n\t\t\treaderAlertElement.style.position = \"absolute\";\n\t\t\treaderAlertElement.style.width = \"1px\";\n\t\t\treaderAlertElement.style.height = \"1px\";\n\t\t\treaderAlertElement.style.overflow = \"hidden\";\n\t\t\treaderAlertElement.style.clip = \"rect(1px, 1px, 1px, 1px)\";\n\t\t\tthis._readerAlertElement = readerAlertElement;\n\t\t\tthis._inner.appendChild(this._readerAlertElement);\n\n\t\t\tconst focusElementContainer = document.createElement(\"div\");\n\t\t\tfocusElementContainer.className = \"am5-focus-container\";\n\t\t\tfocusElementContainer.style.position = \"absolute\";\n\t\t\tfocusElementContainer.style.pointerEvents = \"none\";\n\t\t\tfocusElementContainer.style.top = \"0px\";\n\t\t\tfocusElementContainer.style.left = \"0px\";\n\t\t\tfocusElementContainer.style.overflow = \"hidden\";\n\t\t\tfocusElementContainer.style.width = width + \"px\";\n\t\t\tfocusElementContainer.style.height = height + \"px\";\n\n\t\t\tfocusElementContainer.setAttribute(\"role\", \"graphics-document\");\n\n\t\t\t$utils.setInteractive(focusElementContainer, false);\n\t\t\tthis._focusElementContainer = focusElementContainer;\n\t\t\tthis._inner.appendChild(this._focusElementContainer);\n\n\t\t\tconst tooltipElementContainer = document.createElement(\"div\");\n\t\t\tthis._tooltipElementContainer = tooltipElementContainer;\n\t\t\ttooltipElementContainer.className = \"am5-tooltip-container\";\n\t\t\tthis._inner.appendChild(tooltipElementContainer);\n\n\t\t\t// Add keyboard events for accessibility, e.g. simulating drag with arrow\n\t\t\t// keys and click with ENTER\n\t\t\tif ($utils.supports(\"keyboardevents\")) {\n\n\t\t\t\tthis._disposers.push($utils.addEventListener(window, \"keydown\", (ev: KeyboardEvent) => {\n\t\t\t\t\tconst eventKey = $utils.getEventKey(ev);\n\t\t\t\t\tif (eventKey == \"Shift\") {\n\t\t\t\t\t\tthis._isShift = true;\n\t\t\t\t\t}\n\t\t\t\t\telse if (eventKey == \"Tab\") {\n\t\t\t\t\t\tthis._isShift = ev.shiftKey;\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\t\tthis._disposers.push($utils.addEventListener(window, \"keyup\", (ev: KeyboardEvent) => {\n\t\t\t\t\tconst eventKey = $utils.getEventKey(ev);\n\t\t\t\t\tif (eventKey == \"Shift\") {\n\t\t\t\t\t\tthis._isShift = false;\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\t\tthis._disposers.push($utils.addEventListener(focusElementContainer, \"click\", () => {\n\t\t\t\t\t// Some screen readers convert ENTER (and some SPACE) press whil on\n\t\t\t\t\t// focused element to a \"click\" event, preventing actual \"keydown\"\n\t\t\t\t\t// event from firing. We're using this \"click\" event to still\n\t\t\t\t\t// generate internal click events.\n\t\t\t\t\tconst focusedSprite = this._focusedSprite;\n\t\t\t\t\tif (focusedSprite) {\n\t\t\t\t\t\tconst downEvent = renderer.getEvent(new MouseEvent(\"click\"));\n\t\t\t\t\t\tfocusedSprite.events.dispatch(\"click\", {\n\t\t\t\t\t\t\ttype: \"click\",\n\t\t\t\t\t\t\toriginalEvent: downEvent.event,\n\t\t\t\t\t\t\tpoint: downEvent.point,\n\t\t\t\t\t\t\tsimulated: true,\n\t\t\t\t\t\t\ttarget: focusedSprite\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\t\tthis._disposers.push($utils.addEventListener(focusElementContainer, \"keydown\", (ev: KeyboardEvent) => {\n\t\t\t\t\tconst focusedSprite = this._focusedSprite;\n\t\t\t\t\tif (focusedSprite) {\n\t\t\t\t\t\tif (ev.key == \"Escape\") {\n\t\t\t\t\t\t\t// ESC pressed - lose current focus\n\t\t\t\t\t\t\t$utils.blur();\n\t\t\t\t\t\t\tthis._focusedSprite = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet dragOffsetX = 0;\n\t\t\t\t\t\tlet dragOffsetY = 0;\n\t\t\t\t\t\t// TODO: figure out if using bogus MouseEvent is fine, or it will\n\t\t\t\t\t\t// fail on some platforms\n\t\t\t\t\t\tconst eventKey = $utils.getEventKey(ev);\n\t\t\t\t\t\tswitch (eventKey) {\n\t\t\t\t\t\t\tcase \"Enter\":\n\t\t\t\t\t\t\tcase \" \":\n\t\t\t\t\t\t\t\tif (eventKey == \" \" && focusedSprite.get(\"role\") != \"checkbox\") {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tev.preventDefault();\n\t\t\t\t\t\t\t\tconst downEvent = renderer.getEvent(new MouseEvent(\"mouse\"));\n\t\t\t\t\t\t\t\tfocusedSprite.events.dispatch(\"click\", {\n\t\t\t\t\t\t\t\t\ttype: \"click\",\n\t\t\t\t\t\t\t\t\toriginalEvent: downEvent.event,\n\t\t\t\t\t\t\t\t\tpoint: downEvent.point,\n\t\t\t\t\t\t\t\t\tsimulated: true,\n\t\t\t\t\t\t\t\t\ttarget: focusedSprite\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\tcase \"ArrowLeft\":\n\t\t\t\t\t\t\t\tdragOffsetX = -6;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"ArrowRight\":\n\t\t\t\t\t\t\t\tdragOffsetX = 6;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"ArrowUp\":\n\t\t\t\t\t\t\t\tdragOffsetY = -6;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"ArrowDown\":\n\t\t\t\t\t\t\t\tdragOffsetY = 6;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (dragOffsetX != 0 || dragOffsetY != 0) {\n\t\t\t\t\t\t\tev.preventDefault();\n\n\t\t\t\t\t\t\tif (!focusedSprite.isDragging()) {\n\t\t\t\t\t\t\t\t// Start dragging\n\t\t\t\t\t\t\t\tthis._keyboardDragPoint = {\n\t\t\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t\t\t\ty: 0\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst downEvent = renderer.getEvent(new MouseEvent(\"mousedown\", {\n\t\t\t\t\t\t\t\t\tclientX: 0,\n\t\t\t\t\t\t\t\t\tclientY: 0\n\t\t\t\t\t\t\t\t}));\n\n\t\t\t\t\t\t\t\tdownEvent.point = {\n\t\t\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t\t\t\ty: 0\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\tif (focusedSprite.events.isEnabled(\"pointerdown\")) {\n\t\t\t\t\t\t\t\t\tfocusedSprite.events.dispatch(\"pointerdown\", {\n\t\t\t\t\t\t\t\t\t\ttype: \"pointerdown\",\n\t\t\t\t\t\t\t\t\t\toriginalEvent: downEvent.event,\n\t\t\t\t\t\t\t\t\t\tpoint: downEvent.point,\n\t\t\t\t\t\t\t\t\t\tsimulated: true,\n\t\t\t\t\t\t\t\t\t\ttarget: focusedSprite\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t// Move focus marker\n\t\t\t\t\t\t\t\t//this._positionFocusElement(focusedSprite);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Move incrementally\n\t\t\t\t\t\t\tconst dragPoint = this._keyboardDragPoint!;\n\t\t\t\t\t\t\tdragPoint.x += dragOffsetX;\n\t\t\t\t\t\t\tdragPoint.y += dragOffsetY;\n\t\t\t\t\t\t\tconst moveEvent = renderer.getEvent(new MouseEvent(\"mousemove\", {\n\t\t\t\t\t\t\t\tclientX: dragPoint.x,\n\t\t\t\t\t\t\t\tclientY: dragPoint.y\n\t\t\t\t\t\t\t}), false);\n\n\t\t\t\t\t\t\tif (focusedSprite.events.isEnabled(\"globalpointermove\")) {\n\t\t\t\t\t\t\t\tfocusedSprite.events.dispatch(\"globalpointermove\", {\n\t\t\t\t\t\t\t\t\ttype: \"globalpointermove\",\n\t\t\t\t\t\t\t\t\toriginalEvent: moveEvent.event,\n\t\t\t\t\t\t\t\t\tpoint: moveEvent.point,\n\t\t\t\t\t\t\t\t\tsimulated: true,\n\t\t\t\t\t\t\t\t\ttarget: focusedSprite\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\t\tthis._disposers.push($utils.addEventListener(focusElementContainer, \"keyup\", (ev: KeyboardEvent) => {\n\t\t\t\t\tif (this._focusedSprite) {\n\t\t\t\t\t\tconst focusedSprite = this._focusedSprite;\n\t\t\t\t\t\tconst eventKey = $utils.getEventKey(ev);\n\t\t\t\t\t\tswitch (eventKey) {\n\t\t\t\t\t\t\tcase \"ArrowLeft\":\n\t\t\t\t\t\t\tcase \"ArrowRight\":\n\t\t\t\t\t\t\tcase \"ArrowTop\":\n\t\t\t\t\t\t\tcase \"ArrowDown\":\n\t\t\t\t\t\t\t\tif (focusedSprite.isDragging()) {\n\t\t\t\t\t\t\t\t\t// Simulate drag stop\n\t\t\t\t\t\t\t\t\tconst dragPoint = this._keyboardDragPoint!;\n\t\t\t\t\t\t\t\t\tconst upEvent = renderer.getEvent(new MouseEvent(\"mouseup\", {\n\t\t\t\t\t\t\t\t\t\tclientX: dragPoint.x,\n\t\t\t\t\t\t\t\t\t\tclientY: dragPoint.y\n\t\t\t\t\t\t\t\t\t}));\n\n\t\t\t\t\t\t\t\t\tif (focusedSprite.events.isEnabled(\"globalpointerup\")) {\n\t\t\t\t\t\t\t\t\t\tfocusedSprite.events.dispatch(\"globalpointerup\", {\n\t\t\t\t\t\t\t\t\t\t\ttype: \"globalpointerup\",\n\t\t\t\t\t\t\t\t\t\t\toriginalEvent: upEvent.event,\n\t\t\t\t\t\t\t\t\t\t\tpoint: upEvent.point,\n\t\t\t\t\t\t\t\t\t\t\tsimulated: true,\n\t\t\t\t\t\t\t\t\t\t\ttarget: focusedSprite\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t//this._positionFocusElement(focusedSprite);\n\t\t\t\t\t\t\t\t\tthis._keyboardDragPoint = undefined;\n\t\t\t\t\t\t\t\t\t// @todo dispatch mouseup event instead of calling dragStop?\n\t\t\t\t\t\t\t\t\t// this._dispatchEvent(\"globalpointerup\", target, upEvent);\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (focusedSprite.get(\"focusableGroup\")) {\n\t\t\t\t\t\t\t\t\t// Find next item in focusable group\n\t\t\t\t\t\t\t\t\tconst group = focusedSprite.get(\"focusableGroup\");\n\t\t\t\t\t\t\t\t\tconst items = this._tabindexes.filter((item) => {\n\t\t\t\t\t\t\t\t\t\treturn item.get(\"focusableGroup\") == group && item.getPrivate(\"focusable\") !== false && item.isVisibleDeep() ? true : false;\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tlet index = items.indexOf(focusedSprite);\n\t\t\t\t\t\t\t\t\tconst lastIndex = items.length - 1;\n\t\t\t\t\t\t\t\t\tindex += (eventKey == \"ArrowRight\" || eventKey == \"ArrowDown\") ? 1 : -1;\n\t\t\t\t\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\t\t\t\t\tindex = lastIndex;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (index > lastIndex) {\n\t\t\t\t\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t$utils.focus(items[index].getPrivate(\"focusElement\")!.dom);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\t\t}\n\n\t\tthis._startTicker();\n\t\tthis.setThemes([]);\n\n\t\tthis._addTooltip();\n\n\t\tif (!this._hasLicense()) {\n\t\t\tthis._showBranding();\n\t\t}\n\t}\n\n\tprivate _initResizeSensor(): void {\n\t\tif (this._resizeSensorDisposer) {\n\t\t\tthis._resizeSensorDisposer.dispose();\n\t\t}\n\t\tthis._resizeSensorDisposer = new ResizeSensor(this.dom, () => {\n\t\t\tif (this.autoResize) {\n\t\t\t\tthis.resize();\n\t\t\t}\n\t\t});\n\t\tthis._disposers.push(this._resizeSensorDisposer);\n\t}\n\n\t/**\n\t * If automatic resizing of char is disabled (`root.autoResize = false`), it\n\t * can be resized manually by calling this method.\n\t */\n\tpublic resize(): void {\n\t\tconst rect = this._getRealSize();\n\t\tconst size = this._getCalculatedSize(rect);\n\t\tconst w = Math.floor(size.width);\n\t\tconst h = Math.floor(size.height);\n\n\t\tif (w > 0 && h > 0) {\n\t\t\tconst realWidth = Math.floor(rect.width);\n\t\t\tconst realHeight = Math.floor(rect.height);\n\n\t\t\tconst htmlElementContainer = this._htmlElementContainer!;\n\t\t\thtmlElementContainer.style.width = w + \"px\";\n\t\t\thtmlElementContainer.style.height = h + \"px\";\n\n\t\t\tif (this._a11yD !== true) {\n\t\t\t\tconst focusElementContainer = this._focusElementContainer!;\n\t\t\t\tfocusElementContainer.style.width = w + \"px\";\n\t\t\t\tfocusElementContainer.style.height = h + \"px\";\n\t\t\t}\n\n\t\t\tthis._renderer.resize(realWidth, realHeight, w, h);\n\n\t\t\tconst rootContainer = this._rootContainer;\n\n\t\t\trootContainer.setPrivate(\"width\", w);\n\t\t\trootContainer.setPrivate(\"height\", h);\n\t\t\tthis._render();\n\t\t\tthis._handleLogo();\n\t\t}\n\t}\n\n\tprivate _render() {\n\t\tthis._renderer.render(this._rootContainer._display);\n\n\t\tif (this._focusElementDirty) {\n\t\t\tthis._updateCurrentFocus();\n\t\t\tthis._focusElementDirty = false;\n\t\t}\n\t}\n\n\tprivate _runTickers(currentTime: number) {\n\t\t$array.each(this._tickers, (f) => {\n\t\t\tf(currentTime);\n\t\t});\n\t}\n\n\tprivate _runAnimations(currentTime: number): boolean {\n\t\tlet running = 0;\n\n\t\t$array.keepIf(this._animations, (animation) => {\n\t\t\tconst state = animation._runAnimation(currentTime);\n\n\t\t\tif (state === AnimationState.Stopped) {\n\t\t\t\treturn false;\n\n\t\t\t} else if (state === AnimationState.Playing) {\n\t\t\t\t++running;\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t});\n\n\t\tthis._isDirtyAnimation = false;\n\n\t\treturn running === 0;\n\t}\n\n\tprivate _runDirties() {\n\t\t//console.log(\"tick **************************************************************\");\n\t\tlet allParents: { [id: number]: IParent } = {};\n\n\t\twhile (this._isDirtyParents) {\n\t\t\t// This must be before calling _prepareChildren\n\t\t\tthis._isDirtyParents = false;\n\n\t\t\t$object.keys(this._dirtyParents).forEach((key) => {\n\t\t\t\tconst parent = this._dirtyParents[key];\n\n\t\t\t\tdelete this._dirtyParents[key];\n\n\t\t\t\tif (!parent.isDisposed()) {\n\t\t\t\t\tallParents[parent.uid] = parent;\n\t\t\t\t\tparent._prepareChildren();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t$object.keys(allParents).forEach((key) => {\n\t\t\tallParents[key]._updateChildren();\n\t\t});\n\n\n\t\tconst objects: Array<Entity> = [];\n\n\t\t//\t\tconsole.log(\"_beforeChanged\")\n\t\t$object.keys(this._dirty).forEach((key) => {\n\t\t\tconst entity = this._dirty[key];\n\n\t\t\tif (entity.isDisposed()) {\n\t\t\t\tdelete this._dirty[entity.uid];\n\n\t\t\t} else {\n\t\t\t\tobjects.push(entity);\n\t\t\t\tentity._beforeChanged();\n\t\t\t}\n\t\t});\n\n\t\t//\t\tconsole.log(\"_changed\")\n\t\tobjects.forEach((entity) => {\n\t\t\tentity._changed();\n\t\t\tdelete this._dirty[entity.uid];\n\t\t\tentity._clearDirty();\n\t\t});\n\n\t\tthis._isDirty = false;\n\n\t\tconst depths: { [id: number]: number } = {};\n\t\tconst bounds: Array<IBounds> = [];\n\n\t\t$object.keys(this._dirtyBounds).forEach((key) => {\n\t\t\tconst entity = this._dirtyBounds[key];\n\n\t\t\tdelete this._dirtyBounds[key];\n\n\t\t\tif (!entity.isDisposed()) {\n\t\t\t\tdepths[entity.uid] = entity.depth();\n\t\t\t\tbounds.push(entity);\n\t\t\t}\n\t\t});\n\n\t\tthis._positionHTMLElements();\n\n\t\t// High depth -> low depth\n\t\tbounds.sort((x, y) => {\n\t\t\treturn $order.compare(depths[y.uid], depths[x.uid]);\n\t\t});\n\n\t\t//\t\tconsole.log(\"_updateBounds\")\n\t\tbounds.forEach((entity) => {\n\t\t\tentity._updateBounds();\n\t\t});\n\n\t\t//\t\tconsole.log(\"_updatePosition\")\n\t\tconst dirtyPositions = this._dirtyPositions;\n\t\t$object.keys(dirtyPositions).forEach((key) => {\n\t\t\tconst sprite = dirtyPositions[key];\n\n\t\t\tdelete dirtyPositions[key];\n\n\t\t\tif (!sprite.isDisposed()) {\n\t\t\t\tsprite._updatePosition();\n\t\t\t}\n\t\t});\n\n\t\t//\t\tconsole.log(\"_afterChanged\")\n\t\tobjects.forEach((entity) => {\n\t\t\tentity._afterChanged();\n\t\t});\n\t}\n\n\tprivate _renderFrame(currentTime: number): boolean {\n\t\tif (this._updateTick) {\n\t\t\tif (this.events.isEnabled(\"framestarted\")) {\n\t\t\t\tthis.events.dispatch(\"framestarted\", {\n\t\t\t\t\ttype: \"framestarted\",\n\t\t\t\t\ttarget: this,\n\t\t\t\t\ttimestamp: currentTime,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis._checkComputedStyles();\n\t\t\tthis._runTickers(currentTime);\n\n\t\t\tconst animationDone = this._runAnimations(currentTime);\n\n\t\t\tthis._runDirties();\n\t\t\tthis._render();\n\t\t\tthis._renderer.resetImageArray();\n\t\t\tthis._positionHTMLElements();\n\n\t\t\tif (this.events.isEnabled(\"frameended\")) {\n\t\t\t\tthis.events.dispatch(\"frameended\", {\n\t\t\t\t\ttype: \"frameended\",\n\t\t\t\t\ttarget: this,\n\t\t\t\t\ttimestamp: currentTime,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this._tickers.length === 0 &&\n\t\t\t\tanimationDone &&\n\t\t\t\t!this._isDirtyAnimation &&\n\t\t\t\t!this._isDirty;\n\n\t\t} else {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic _runTicker(currentTime: number, now?: boolean) {\n\t\tif (!this.isDisposed()) {\n\t\t\tthis.animationTime = currentTime;\n\n\t\t\tconst done = this._renderFrame(currentTime);\n\n\t\t\t// No more work to do\n\t\t\tif (done) {\n\t\t\t\tthis._ticker = null;\n\t\t\t\tthis.animationTime = null;\n\n\t\t\t} else {\n\t\t\t\tif (!this._paused) {\n\t\t\t\t\tif (now) {\n\t\t\t\t\t\tthis._ticker!\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\trAF(this.fps, this._ticker!);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _runTickerNow(timeout: number = 10000) {\n\t\tif (!this.isDisposed()) {\n\t\t\tconst endTime = performance.now() + timeout;\n\n\t\t\tfor (; ;) {\n\t\t\t\tconst currentTime = performance.now();\n\n\t\t\t\tif (currentTime >= endTime) {\n\t\t\t\t\tthis.animationTime = null;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tthis.animationTime = currentTime;\n\n\t\t\t\tconst done = this._renderFrame(currentTime);\n\n\t\t\t\tif (done) {\n\t\t\t\t\tthis.animationTime = null;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _startTicker() {\n\t\tif (this._ticker === null) {\n\t\t\tthis.animationTime = null;\n\n\t\t\tthis._ticker = (currentTime) => {\n\t\t\t\tthis._runTicker(currentTime);\n\t\t\t};\n\n\t\t\trAF(this.fps, this._ticker!);\n\t\t}\n\t}\n\n\t/**\n\t * Returns whether the root is updating or not.\n\t */\n\tpublic get updateTick(): boolean {\n\t\treturn this._updateTick;\n\t}\n\n\t/**\n\t * Enables or disables the root updating.\n\t */\n\tpublic set updateTick(value: boolean) {\n\t\tthis._updateTick = value;\n\n\t\tif (value) {\n\t\t\tthis._startTicker();\n\t\t}\n\t}\n\n\tpublic _addDirtyEntity(entity: Entity) {\n\t\tthis._isDirty = true;\n\n\t\tif (this._dirty[entity.uid] === undefined) {\n\t\t\tthis._dirty[entity.uid] = entity;\n\t\t}\n\n\t\tthis._startTicker();\n\t}\n\n\tpublic _addDirtyParent(parent: IParent) {\n\t\tthis._isDirty = true;\n\t\tthis._isDirtyParents = true;\n\n\t\tif (this._dirtyParents[parent.uid] === undefined) {\n\t\t\tthis._dirtyParents[parent.uid] = parent;\n\t\t}\n\n\t\tthis._startTicker();\n\t}\n\n\tpublic _addDirtyBounds(entity: IBounds) {\n\t\tthis._isDirty = true;\n\n\t\tif (this._dirtyBounds[entity.uid] === undefined) {\n\t\t\tthis._dirtyBounds[entity.uid] = entity;\n\t\t}\n\n\t\tthis._startTicker();\n\t}\n\n\tpublic _addDirtyPosition(sprite: Sprite) {\n\t\tthis._isDirty = true;\n\n\t\tif (this._dirtyPositions[sprite.uid] === undefined) {\n\t\t\tthis._dirtyPositions[sprite.uid] = sprite;\n\t\t}\n\n\t\tthis._startTicker();\n\t}\n\n\tpublic _addAnimation(animation: IAnimation) {\n\t\tthis._isDirtyAnimation = true;\n\n\t\t// TODO use numeric id instead\n\t\tif (this._animations.indexOf(animation) === -1) {\n\t\t\tthis._animations.push(animation);\n\t\t}\n\n\t\tthis._startTicker();\n\t}\n\n\tpublic _markDirty() {\n\t\tthis._isDirty = true;\n\t}\n\n\tpublic _markDirtyRedraw() {\n\t\tthis.events.once(\"frameended\", () => {\n\t\t\tthis._isDirty = true;\n\t\t\tthis._startTicker();\n\t\t})\n\t}\n\n\tpublic eachFrame(f: (currentTime: number) => void): IDisposer {\n\t\tthis._tickers.push(f);\n\t\tthis._startTicker();\n\n\t\treturn new Disposer(() => {\n\t\t\t$array.removeFirst(this._tickers, f);\n\t\t});\n\t}\n\n\tpublic markDirtyGlobal(container?: Container): void {\n\t\tif (!container) {\n\t\t\tcontainer = this.container;\n\t\t}\n\t\tcontainer.walkChildren((child) => {\n\t\t\tif (child instanceof Container) {\n\t\t\t\tthis.markDirtyGlobal(child);\n\t\t\t}\n\t\t\tchild.markDirty();\n\t\t\tchild.markDirtyBounds();\n\t\t});\n\t}\n\n\t/**\n\t * Returns width of the target container, in pixels.\n\t *\n\t * @return Width\n\t */\n\tpublic width(): number {\n\t\t// TODO make this more efficient, maybe just return the renderer's width ?\n\t\treturn Math.floor(this._getCalculatedSize(this._getRealSize()).width);\n\t}\n\n\t/**\n\t * Returns height of the target container, in pixels.\n\t *\n\t * @return Height\n\t */\n\tpublic height(): number {\n\t\t// TODO make this more efficient, maybe just return the renderer's height ?\n\t\treturn Math.floor(this._getCalculatedSize(this._getRealSize()).height);\n\t}\n\n\t/**\n\t * Disposes root and all the content in it.\n\t */\n\tpublic dispose(): void {\n\t\tif (!this._isDisposed) {\n\t\t\tthis._isDisposed = true;\n\n\t\t\tthis._rootContainer.dispose();\n\t\t\tthis._renderer.dispose();\n\t\t\tthis.horizontalLayout.dispose();\n\t\t\tthis.verticalLayout.dispose();\n\t\t\tthis.interfaceColors.dispose();\n\n\t\t\t$array.each(this._disposers, (x) => {\n\t\t\t\tx.dispose();\n\t\t\t});\n\n\t\t\tif (this._inner) {\n\t\t\t\t$utils.removeElement(this._inner);\n\t\t\t}\n\n\t\t\t$array.remove(registry.rootElements, this);\n\t\t}\n\t}\n\n\t/**\n\t * Returns `true` if root element is disposed.\n\t *\n\t * @return Disposed?\n\t */\n\tpublic isDisposed(): boolean {\n\t\treturn this._isDisposed;\n\t}\n\n\t/**\n\t * Triggers screen reader read out a message.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/accessibility/} for more info\n\t * @param text Alert text\n\t */\n\tpublic readerAlert(text: string): void {\n\t\tif (this._a11yD !== true) {\n\t\t\tthis._readerAlertElement!.innerHTML = $utils.stripTags(text);\n\t\t}\n\t}\n\n\t/**\n\t * Sets themes to be used for the chart.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/themes/} for more info\n\t * @param themes A list of themes\n\t */\n\tpublic setThemes(themes: Array<Theme>): void {\n\t\tthis._rootContainer.set(\"themes\", themes);\n\n\t\t// otherwise new themes are not applied\n\t\tconst tooltipContainer = this.tooltipContainer;\n\t\tif (tooltipContainer) {\n\t\t\ttooltipContainer._applyThemes();\n\t\t}\n\n\t\t// @todo review this\n\t\tconst interfaceColors = this.interfaceColors;\n\t\tif (interfaceColors) {\n\t\t\tinterfaceColors._applyThemes();\n\t\t}\n\n\n\t}\n\n\tprotected _addTooltip() {\n\t\tif (!this.tooltipContainer) {\n\t\t\tconst tooltipContainerSettings = this._tooltipContainerSettings;\n\t\t\tconst tooltipContainer = this._rootContainer.children.push(Container.new(this, {\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tisMeasured: false,\n\t\t\t\twidth: p100,\n\t\t\t\theight: p100,\n\t\t\t\tlayer: tooltipContainerSettings ? 35 : 30,\n\t\t\t\tlayerMargin: tooltipContainerSettings ? tooltipContainerSettings : undefined\n\t\t\t}));\n\t\t\tthis.tooltipContainer = tooltipContainer;\n\n\t\t\tconst tooltip = Tooltip.new(this, {});\n\t\t\tthis.container.set(\"tooltip\", tooltip);\n\t\t\ttooltip.hide(0);\n\t\t\tthis._tooltip = tooltip;\n\t\t}\n\t}\n\n\t/**\n\t * Accesibility\n\t */\n\n\tpublic _registerTabindexOrder(target: Sprite): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (target.get(\"focusable\")) {\n\t\t\t$array.pushOne(this._tabindexes, target);\n\t\t}\n\t\telse {\n\t\t\t$array.remove(this._tabindexes, target);\n\t\t}\n\t\tthis._invalidateTabindexes();\n\t}\n\n\tpublic _unregisterTabindexOrder(target: Sprite): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\t$array.remove(this._tabindexes, target);\n\t\tthis._invalidateTabindexes();\n\t}\n\n\tpublic _invalidateTabindexes(): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._tabindexes.sort((a: Sprite, b: Sprite) => {\n\t\t\tconst aindex = a.get(\"tabindexOrder\", 0);\n\t\t\tconst bindex = b.get(\"tabindexOrder\", 0);\n\t\t\tif (aindex == bindex) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\telse if (aindex > bindex) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t});\n\n\t\tconst groups: Array<string | number> = [];\n\t\t$array.each(this._tabindexes, (item, index) => {\n\t\t\tif (!item.getPrivate(\"focusElement\")) {\n\t\t\t\tthis._makeFocusElement(index, item);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._moveFocusElement(index, item);\n\t\t\t}\n\t\t\tconst group = item.get(\"focusableGroup\");\n\t\t\tif (group && item.getPrivate(\"focusable\") !== false) {\n\t\t\t\tif (groups.indexOf(group) !== -1) {\n\t\t\t\t\t// Non-first element in the group, make it not directly focusable\n\t\t\t\t\titem.getPrivate(\"focusElement\")!.dom.setAttribute(\"tabindex\", \"-1\");\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tgroups.push(group);\n\t\t\t\t}\n\t\t\t}\n\n\t\t});\n\n\t}\n\n\tpublic _updateCurrentFocus(): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._focusedSprite) {\n\t\t\tthis._decorateFocusElement(this._focusedSprite);\n\t\t\tthis._positionFocusElement(this._focusedSprite);\n\t\t}\n\t}\n\n\tpublic _decorateFocusElement(target: Sprite, focusElement?: HTMLDivElement): void {\n\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Decorate with proper accessibility attributes\n\t\tif (!focusElement) {\n\t\t\tfocusElement = target.getPrivate(\"focusElement\")!.dom;\n\t\t}\n\n\t\tif (!focusElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst role = target.get(\"role\");\n\t\tif (role) {\n\t\t\tfocusElement.setAttribute(\"role\", role);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"role\");\n\t\t}\n\n\t\tconst ariaLabel = target.get(\"ariaLabel\");\n\t\tif (ariaLabel) {\n\t\t\tconst label = populateString(target, ariaLabel);\n\t\t\tfocusElement.setAttribute(\"aria-label\", label);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-label\");\n\t\t}\n\n\t\tconst ariaLive = target.get(\"ariaLive\");\n\t\tif (ariaLive) {\n\t\t\tfocusElement.setAttribute(\"aria-live\", ariaLive);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-live\");\n\t\t}\n\n\t\tconst ariaChecked = target.get(\"ariaChecked\");\n\t\tif (ariaChecked != null && role && [\"checkbox\", \"option\", \"radio\", \"menuitemcheckbox\", \"menuitemradio\", \"treeitem\"].indexOf(role) !== -1) {\n\t\t\tfocusElement.setAttribute(\"aria-checked\", ariaChecked ? \"true\" : \"false\");\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-checked\");\n\t\t}\n\n\t\tconst ariaCurrent = target.get(\"ariaCurrent\");\n\t\tif (ariaCurrent != null) {\n\t\t\tfocusElement.setAttribute(\"aria-current\", ariaCurrent);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-current\");\n\t\t}\n\n\t\tconst ariaSelected = target.get(\"ariaSelected\");\n\t\tif (ariaSelected != null && role && [\"gridcell\", \"option\", \"row\", \"tab\", \"columnheader\", \"rowheader\", \"treeitem\"].indexOf(role) !== -1) {\n\t\t\tfocusElement.setAttribute(\"aria-selected\", ariaSelected ? \"true\" : \"false\");\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-selected\");\n\t\t}\n\n\t\tif (target.get(\"ariaHidden\")) {\n\t\t\tfocusElement.setAttribute(\"aria-hidden\", \"true\");\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-hidden\");\n\t\t}\n\n\t\tconst ariaOrientation = target.get(\"ariaOrientation\");\n\t\tif (ariaOrientation) {\n\t\t\tfocusElement.setAttribute(\"aria-orientation\", ariaOrientation);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-orientation\");\n\t\t}\n\n\t\tconst ariaValueNow = target.get(\"ariaValueNow\");\n\t\tif (ariaValueNow) {\n\t\t\tfocusElement.setAttribute(\"aria-valuenow\", ariaValueNow);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-valuenow\");\n\t\t}\n\n\t\tconst ariaValueMin = target.get(\"ariaValueMin\");\n\t\tif (ariaValueMin) {\n\t\t\tfocusElement.setAttribute(\"aria-valuemin\", ariaValueMin);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-valuemin\");\n\t\t}\n\n\t\tconst ariaValueMax = target.get(\"ariaValueMax\");\n\t\tif (ariaValueMax) {\n\t\t\tfocusElement.setAttribute(\"aria-valuemax\", ariaValueMax);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-valuemax\");\n\t\t}\n\n\t\tconst ariaValueText = target.get(\"ariaValueText\");\n\t\tif (ariaValueText) {\n\t\t\tfocusElement.setAttribute(\"aria-valuetext\", ariaValueText);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-valuetext\");\n\t\t}\n\n\t\tconst ariaControls = target.get(\"ariaControls\");\n\t\tif (ariaControls) {\n\t\t\tfocusElement.setAttribute(\"aria-controls\", ariaControls);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-controls\");\n\t\t}\n\n\t\tif (target.get(\"visible\") && target.get(\"opacity\") !== 0 && target.get(\"role\") != \"tooltip\" && !target.isHidden() && target.getPrivate(\"focusable\") !== false) {\n\t\t\tif (focusElement.getAttribute(\"tabindex\") != \"-1\") {\n\t\t\t\tfocusElement.setAttribute(\"tabindex\", \"\" + this.tabindex);\n\t\t\t}\n\t\t\tfocusElement.removeAttribute(\"aria-hidden\");\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"tabindex\");\n\t\t\tfocusElement.setAttribute(\"aria-hidden\", \"true\");\n\t\t}\n\t}\n\n\tpublic _makeFocusElement(index: number, target: Sprite): void {\n\n\t\tif (target.getPrivate(\"focusElement\") || this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Init\n\t\tconst focusElement = document.createElement(\"div\");\n\t\tif (target.get(\"role\") != \"tooltip\") {\n\t\t\tfocusElement.tabIndex = this.tabindex;\n\t\t}\n\t\tfocusElement.style.position = \"absolute\";\n\t\t$utils.setInteractive(focusElement, false);\n\n\t\tconst disposers: Array<IDisposer> = [];\n\n\t\ttarget.setPrivate(\"focusElement\", {\n\t\t\tdom: focusElement,\n\t\t\tdisposers,\n\t\t});\n\n\t\tthis._decorateFocusElement(target);\n\n\t\tdisposers.push($utils.addEventListener(focusElement, \"focus\", (ev: FocusEvent) => {\n\t\t\tthis._handleFocus(ev);\n\t\t}));\n\n\t\tdisposers.push($utils.addEventListener(focusElement, \"blur\", (ev: FocusEvent) => {\n\t\t\tthis._handleBlur(ev);\n\t\t}));\n\n\t\tthis._moveFocusElement(index, target);\n\n\t}\n\n\tpublic _removeFocusElement(target: Sprite): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\t$array.remove(this._tabindexes, target);\n\t\tconst focusElement = target.getPrivate(\"focusElement\");\n\t\tif (focusElement) {\n\t\t\tconst container = this._focusElementContainer!;\n\t\t\tcontainer.removeChild(focusElement.dom);\n\t\t\t$array.each(focusElement.disposers, (x) => {\n\t\t\t\tx.dispose();\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic _hideFocusElement(target: Sprite): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst focusElement = target.getPrivate(\"focusElement\")!;\n\t\tfocusElement.dom.style.display = \"none\";\n\t}\n\n\tprotected _moveFocusElement(index: number, target: Sprite): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Get container\n\t\tconst container = this._focusElementContainer!;\n\t\tconst focusElement = target.getPrivate(\"focusElement\")!.dom;\n\n\t\tif (focusElement === this._focusElementContainer!.children[index]) {\n\t\t\t// Nothing to do\n\t\t\treturn;\n\t\t}\n\n\t\tconst next = this._focusElementContainer!.children[index + 1];\n\t\tif (next) {\n\t\t\tcontainer.insertBefore(focusElement, next);\n\t\t}\n\t\telse {\n\t\t\tcontainer.append(focusElement);\n\t\t}\n\t}\n\n\tprotected _positionFocusElement(target: Sprite): void {\n\t\tif (this._a11yD == true || target == undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst bounds = target.globalBounds();\n\n\t\tlet width = bounds.right == bounds.left ? target.width() : bounds.right - bounds.left;\n\t\tlet height = bounds.top == bounds.bottom ? target.height() : bounds.bottom - bounds.top;\n\n\t\tconst padding = this._settings.focusPadding !== undefined ? this._settings.focusPadding : 2;\n\n\t\tlet x = bounds.left - padding;\n\t\tlet y = bounds.top - padding;\n\n\t\tif (width < 0) {\n\t\t\tx += width;\n\t\t\twidth = Math.abs(width);\n\t\t}\n\n\t\tif (height < 0) {\n\t\t\ty += height;\n\t\t\theight = Math.abs(height);\n\t\t}\n\n\t\tconst focusElement = target.getPrivate(\"focusElement\")!.dom;\n\t\tfocusElement.style.top = y + \"px\";\n\t\tfocusElement.style.left = x + \"px\";\n\t\tfocusElement.style.width = (width + padding * 2) + \"px\";\n\t\tfocusElement.style.height = (height + padding * 2) + \"px\";\n\n\t}\n\n\tprotected _getSpriteByFocusElement(target: any): Sprite | undefined {\n\t\tlet found: Sprite | undefined;\n\t\t$array.eachContinue(this._tabindexes, (item, _index) => {\n\t\t\tif (item.getPrivate(\"focusElement\")!.dom === target) {\n\t\t\t\tfound = item;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\t\treturn found;\n\t}\n\n\tprotected _handleFocus(ev: FocusEvent): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Get element\n\t\t//const focused = this._tabindexes[index];\n\t\tconst focused = this._getSpriteByFocusElement(ev.target);\n\n\t\tif (!focused) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Jump over hidden elements\n\t\tif (!focused.isVisibleDeep()) {\n\t\t\tthis._focusNext(<HTMLDivElement>ev.target, this._isShift ? -1 : 1);\n\t\t\treturn;\n\t\t}\n\n\t\t// Size and position\n\t\tthis._positionFocusElement(focused);\n\t\t//this._decorateFocusElement(focused);\n\n\t\tthis._focusedSprite = focused;\n\n\t\tif (focused.events.isEnabled(\"focus\")) {\n\t\t\tfocused.events.dispatch(\"focus\", {\n\t\t\t\ttype: \"focus\",\n\t\t\t\toriginalEvent: ev,\n\t\t\t\ttarget: focused\n\t\t\t});\n\t\t}\n\t}\n\n\tprotected _focusNext(el: HTMLDivElement, direction: 1 | -1): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst focusableElements = Array.from(document.querySelectorAll([\n\t\t\t'a[href]',\n\t\t\t'area[href]',\n\t\t\t'button:not([disabled])',\n\t\t\t'details',\n\t\t\t'input:not([disabled])',\n\t\t\t'iframe:not([disabled])',\n\t\t\t'select:not([disabled])',\n\t\t\t'textarea:not([disabled])',\n\t\t\t'[contentEditable=\"\"]',\n\t\t\t'[contentEditable=\"true\"]',\n\t\t\t'[contentEditable=\"TRUE\"]',\n\t\t\t'[tabindex]:not([tabindex^=\"-\"])',\n\t\t\t//':not([disabled])'\n\t\t].join(',')));\n\n\t\tlet index = focusableElements.indexOf(el) + direction;\n\n\t\tif (index < 0) {\n\t\t\tindex = focusableElements.length - 1;\n\t\t}\n\t\telse if (index >= focusableElements.length) {\n\t\t\tindex = 0;\n\t\t}\n\n\t\t(<HTMLElement>focusableElements[index]).focus();\n\t}\n\n\tprotected _handleBlur(ev: FocusEvent): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst focused = this._focusedSprite;\n\t\tif (focused && !focused.isDisposed() && focused.events.isEnabled(\"blur\")) {\n\t\t\tfocused.events.dispatch(\"blur\", {\n\t\t\t\ttype: \"blur\",\n\t\t\t\toriginalEvent: ev,\n\t\t\t\ttarget: focused\n\t\t\t});\n\t\t}\n\t\tthis._focusedSprite = undefined;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic updateTooltip(target: Text): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst text = $utils.stripTags(target._getText());\n\t\tlet tooltipElement = target.getPrivate(\"tooltipElement\");\n\t\tif (target.get(\"role\") == \"tooltip\" && text != \"\") {\n\t\t\tif (!tooltipElement) {\n\t\t\t\ttooltipElement = this._makeTooltipElement(target);\n\t\t\t}\n\t\t\tif (tooltipElement.innerHTML != text) {\n\t\t\t\ttooltipElement.innerHTML = text!;\n\t\t\t}\n\t\t\ttooltipElement.setAttribute(\"aria-hidden\", target.isVisibleDeep() ? \"false\" : \"true\");\n\t\t}\n\t\telse if (tooltipElement) {\n\t\t\ttooltipElement.remove();\n\t\t\ttarget.removePrivate(\"tooltipElement\");\n\t\t}\n\t}\n\n\tpublic _makeTooltipElement(target: Text): HTMLDivElement {\n\t\tconst container = this._tooltipElementContainer!;\n\t\tconst tooltipElement = document.createElement(\"div\");\n\t\ttooltipElement.style.position = \"absolute\";\n\t\ttooltipElement.style.width = \"1px\";\n\t\ttooltipElement.style.height = \"1px\";\n\t\ttooltipElement.style.overflow = \"hidden\";\n\t\ttooltipElement.style.clip = \"rect(1px, 1px, 1px, 1px)\";\n\n\t\t$utils.setInteractive(tooltipElement, false);\n\n\t\tthis._decorateFocusElement(target, tooltipElement);\n\t\tcontainer.append(tooltipElement);\n\t\ttarget.setPrivate(\"tooltipElement\", tooltipElement);\n\n\t\treturn tooltipElement;\n\t}\n\n\tpublic _removeTooltipElement(target: Text): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\t\tconst tooltipElement = target.getPrivate(\"tooltipElement\");\n\t\tif (tooltipElement) {\n\t\t\tconst parent = tooltipElement.parentElement;\n\t\t\tif (parent) {\n\t\t\t\tparent.removeChild(tooltipElement);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _invalidateAccessibility(target: Sprite): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\t\tthis._focusElementDirty = true;\n\t\tconst focusElement = target.getPrivate(\"focusElement\");\n\t\tif (target.get(\"focusable\")) {\n\t\t\tif (focusElement) {\n\t\t\t\tthis._decorateFocusElement(target);\n\t\t\t\tthis._positionFocusElement(target);\n\t\t\t}\n\t\t\t// else {\n\t\t\t// \tthis._renderer._makeFocusElement(0, this);\n\t\t\t// }\n\t\t}\n\t\telse if (focusElement) {\n\t\t\tthis._removeFocusElement(target);\n\t\t}\n\t\t//this.updateCurrentFocus();\n\t}\n\n\t/**\n\t * Returns `true` if `target` is currently focused.\n\t *\n\t * @param target Target\n\t * @return Focused?\n\t */\n\tpublic focused(target: Sprite): boolean {\n\t\treturn this._focusedSprite === target;\n\t}\n\n\t/**\n\t * Converts document coordinates to coordinates withing root element.\n\t *\n\t * @param point Document point\n\t * @return Root point\n\t */\n\tpublic documentPointToRoot(point: IPoint): IPoint {\n\t\tconst rect = this._getRealSize();\n\t\tconst size = this._getCalculatedSize(rect);\n\n\t\tconst scaleWidth = size.width / rect.width;\n\t\tconst scaleHeight = size.height / rect.height;\n\n\t\treturn {\n\t\t\tx: (point.x - rect.left) * scaleWidth,\n\t\t\ty: (point.y - rect.top) * scaleHeight,\n\t\t};\n\t}\n\n\t/**\n\t * Converts root coordinates to document\n\t *\n\t * @param point Document point\n\t * @return Root point\n\t */\n\tpublic rootPointToDocument(point: IPoint): IPoint {\n\t\tconst rect = this._getRealSize();\n\t\tconst size = this._getCalculatedSize(rect);\n\n\t\tconst scaleWidth = size.width / rect.width;\n\t\tconst scaleHeight = size.height / rect.height;\n\n\t\treturn {\n\t\t\tx: (point.x / scaleWidth) + rect.left,\n\t\t\ty: (point.y / scaleHeight) + rect.top\n\t\t};\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic addDisposer<T extends IDisposer>(disposer: T): T {\n\t\tthis._disposers.push(disposer);\n\t\treturn disposer;\n\t}\n\n\tprotected _updateComputedStyles(): boolean {\n\t\tconst styles = window.getComputedStyle(this.dom);\n\t\tlet fontHash = \"\";\n\t\t$object.each(styles, (key, val) => {\n\t\t\tif ($type.isString(key) && key.match(/^font/)) {\n\t\t\t\tfontHash += val;\n\t\t\t}\n\t\t})\n\t\tconst changed = fontHash != this._fontHash;\n\t\tif (changed) {\n\t\t\tthis._fontHash = fontHash;\n\t\t}\n\t\treturn changed;\n\t}\n\n\tprotected _checkComputedStyles(): void {\n\t\tif (this._updateComputedStyles()) {\n\t\t\tthis._invalidateLabelBounds(this.container);\n\t\t}\n\t}\n\n\tprotected _invalidateLabelBounds(target: Sprite): void {\n\t\tif (target instanceof Container) {\n\t\t\ttarget.children.each((child) => {\n\t\t\t\tthis._invalidateLabelBounds(child);\n\t\t\t});\n\t\t}\n\t\telse if (target instanceof Text) {\n\t\t\ttarget.markDirtyBounds();\n\t\t}\n\t}\n\n\t/**\n\t * To all the clever heads out there. Yes, we did not make any attempts to\n\t * scramble this.\n\t *\n\t * This is a part of a tool meant for our users to manage their commercial\n\t * licenses for removal of amCharts branding from charts.\n\t *\n\t * The only legit way to do so is to purchase a commercial license for amCharts:\n\t * https://www.amcharts.com/online-store/\n\t *\n\t * Removing or altering this code, or disabling amCharts branding in any other\n\t * way is against the license and thus illegal.\n\t */\n\tprotected _hasLicense(): boolean {\n\t\tfor (let i = 0; i < registry.licenses.length; i++) {\n\t\t\tif (registry.licenses[i].match(/^AM5C.{5,}/i)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic _licenseApplied(): void {\n\t\tif (this._logo) {\n\t\t\tthis._logo.set(\"forceHidden\", true);\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic get debugGhostView(): boolean {\n\t\treturn this._renderer.debugGhostView;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic set debugGhostView(value: boolean) {\n\t\tthis._renderer.debugGhostView = value;\n\t}\n\n\t/**\n\t * Set this to `true` if you need chart to require first a tap onto it before\n\t * touch gesture related functionality like zoom/pan is turned on.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/getting-started/root-element/#Touch_related_options} for more info\n\t * @default false\n\t * @since 5.2.9\n\t * @param value Needs a tap to activate touch functions\n\t */\n\tpublic set tapToActivate(value: boolean) {\n\t\tthis._renderer.tapToActivate = value;\n\t}\n\n\t/**\n\t * @return Needs a tap to activate touch functions\n\t */\n\tpublic get tapToActivate(): boolean {\n\t\treturn this._renderer.tapToActivate;\n\t}\n\n\t/**\n\t * If `tapToActivate` is set to `true`, this setting will determine number\n\t * of milliseconds the chart will stay \"active\", before releasing the\n\t * controls back to the page.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/getting-started/root-element/#Touch_related_options} for more info\n\t * @default 3000\n\t * @since 5.2.9\n\t * @param value Timeout\n\t */\n\tpublic set tapToActivateTimeout(value: number) {\n\t\tthis._renderer.tapToActivateTimeout = value;\n\t}\n\n\t/**\n\t * @return Timeout\n\t */\n\tpublic get tapToActivateTimeout(): number {\n\t\treturn this._renderer.tapToActivateTimeout;\n\t}\n\n\tpublic _makeHTMLElement(target: Container): HTMLDivElement {\n\n\t\t// Get container\n\t\tconst container = this._htmlElementContainer!;\n\n\t\t// Init\n\t\tconst htmlElement = document.createElement(\"div\");\n\t\ttarget.setPrivate(\"htmlElement\", htmlElement);\n\n\t\t//htmlElement.tabIndex = this.tabindex;\n\t\thtmlElement.style.position = \"absolute\";\n\t\thtmlElement.style.overflow = \"auto\";\n\t\thtmlElement.style.boxSizing = \"border-box\";\n\t\t$utils.setInteractive(htmlElement, target.get(\"interactive\", false));\n\n\t\t// Translate events\n\t\tif (target.events.isEnabled(\"click\")) {\n\t\t\t$utils.setInteractive(htmlElement, true);\n\t\t\tthis._disposers.push($utils.addEventListener<PointerEvent | MouseEvent>(htmlElement, \"click\", (ev: IPointerEvent) => {\n\t\t\t\tconst downEvent = this._renderer.getEvent(ev);\n\t\t\t\ttarget.events.dispatch(\"click\", {\n\t\t\t\t\ttype: \"click\",\n\t\t\t\t\toriginalEvent: downEvent.event,\n\t\t\t\t\tpoint: downEvent.point,\n\t\t\t\t\tsimulated: false,\n\t\t\t\t\ttarget: target\n\t\t\t\t});\n\t\t\t}));\n\t\t}\n\n\t\tthis._positionHTMLElement(target);\n\n\t\tcontainer.append(htmlElement);\n\n\t\t$array.pushOne(this._htmlEnabledContainers, target);\n\n\t\treturn htmlElement;\n\t}\n\n\tpublic _positionHTMLElements(): void {\n\t\t$array.each(this._htmlEnabledContainers, (target) => {\n\t\t\tthis._positionHTMLElement(target);\n\t\t});\n\t}\n\n\tpublic _positionHTMLElement(target: Container): void {\n\t\tconst htmlElement = target.getPrivate(\"htmlElement\");\n\t\tif (htmlElement) {\n\n\t\t\t// Translate settings\n\t\t\tconst visualSettings = [\"paddingTop\", \"paddingRight\", \"paddingBottom\", \"paddingLeft\", \"minWidth\", \"minHeight\", \"maxWidth\", \"maxHeight\"];\n\t\t\t$array.each(visualSettings, (setting: any) => {\n\t\t\t\tconst value = target.get(setting);\n\t\t\t\tif (value) {\n\t\t\t\t\thtmlElement.style[setting] = value + \"px\";\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\thtmlElement.style[setting] = \"\";\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Init and reset scale / rotation\n\t\t\tconst scale = target.compositeScale() || 1;\n\t\t\tconst rotation = target.compositeRotation() || 0;\n\t\t\thtmlElement.style.transform = \"\";\n\t\t\thtmlElement.style.transformOrigin = \"\";\n\n\t\t\t// Deal with opacity\n\t\t\tconst opacity = target.compositeOpacity();\n\t\t\tsetTimeout(() => {\n\t\t\t\thtmlElement.style.opacity = opacity + \"\";\n\t\t\t}, 10);\n\n\t\t\tconst visible = target.isVisibleDeep();\n\t\t\tif (visible) {\n\t\t\t\thtmlElement.style.display = \"block\";\n\t\t\t}\n\n\t\t\t// Deal with position\n\t\t\t// const bounds = target.globalBounds();\n\t\t\t// htmlElement.style.top = (bounds.top) + \"px\";\n\t\t\t// htmlElement.style.left = (bounds.left) + \"px\";\n\t\t\tlet pos = {\n\t\t\t\tx: target.x(),\n\t\t\t\ty: target.y()\n\t\t\t}\n\t\t\tif (target.parent) {\n\t\t\t\tpos = target.parent.toGlobal(pos)\n\t\t\t}\n\t\t\thtmlElement.style.top = pos.y + \"px\";\n\t\t\thtmlElement.style.left = pos.x + \"px\";\n\n\t\t\t// Use width/height if those are set\n\t\t\tconst width = target.get(\"width\");\n\t\t\tconst height = target.get(\"height\");\n\n\t\t\tlet w: number = 0;\n\t\t\tlet h: number = 0;\n\n\t\t\tif (width) {\n\t\t\t\tw = target.width();\n\t\t\t}\n\n\t\t\tif (height) {\n\t\t\t\th = target.height();\n\t\t\t}\n\n\n\t\t\tif (!width || !height) {\n\t\t\t\thtmlElement.style.position = \"fixed\";\n\t\t\t\thtmlElement.style.width = \"\";\n\t\t\t\thtmlElement.style.height = \"\";\n\t\t\t\tconst bbox = htmlElement.getBoundingClientRect();\n\t\t\t\thtmlElement.style.position = \"absolute\";\n\t\t\t\tif (!width) w = bbox.width;\n\t\t\t\tif (!height) h = bbox.height;\n\n\t\t\t\tlet lw = w / scale;\n\t\t\t\tlet lh = h / scale;\n\n\t\t\t\tlet cx = target.get(\"centerX\", 0);\n\t\t\t\tlet cy = target.get(\"centerY\", 0);\n\n\t\t\t\tlet ll = 0;\n\t\t\t\tlet lr = 0;\n\t\t\t\tlet lt = 0;\n\t\t\t\tlet lb = 0;\n\n\t\t\t\tif (cx instanceof Percent) {\n\t\t\t\t\tll = -cx.value * lw;\n\t\t\t\t\tlr = (1 - cx.value) * lw;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tll = -cx;\n\t\t\t\t\tlr = lw - cx;\n\t\t\t\t}\n\n\t\t\t\tif (cy instanceof Percent) {\n\t\t\t\t\tlt = -cy.value * lh;\n\t\t\t\t\tlb = (1 - cy.value) * lh;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlt = -cy;\n\t\t\t\t\tlb = lh - cy;\n\t\t\t\t}\n\n\t\t\t\ttarget._localBounds = { left: ll, right: lr, top: lt, bottom: lb };\n\t\t\t\t\n\t\t\t\tlet previousBounds = target._adjustedLocalBounds;\n\t\t\t\tlet newBounds = target._display.getAdjustedBounds(target._localBounds);\n\t\t\t\ttarget._adjustedLocalBounds = newBounds;\n\n\t\t\t\t// compare each value of the bounds\n\t\t\t\tif(previousBounds.left !== newBounds.left || previousBounds.right !== newBounds.right || previousBounds.top !== newBounds.top || previousBounds.bottom !== newBounds.bottom){\n\t\t\t\t\ttarget.markDirtyBounds();\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n\n\t\t\tif (w > 0) {\n\t\t\t\thtmlElement.style.minWidth = (w) + \"px\";\n\t\t\t}\n\t\t\tif (h > 0) {\n\t\t\t\thtmlElement.style.minHeight = (h) + \"px\";\n\t\t\t}\n\n\t\t\t// Hide or show\n\t\t\tif (!visible || opacity == 0) {\n\t\t\t\thtmlElement.style.display = \"none\";\n\t\t\t}\n\n\t\t\t// Center position\n\t\t\tconst x = target.get(\"centerX\", 0);\n\t\t\tconst originX = isPercent(x) ? (x as Percent).percent + \"%\" : x + \"px\";\n\t\t\tconst y = target.get(\"centerY\", 0);\n\t\t\tconst originY = isPercent(y) ? (y as Percent).percent + \"%\" : y + \"px\";\n\n\t\t\tif (x || y) {\n\t\t\t\thtmlElement.style.transform = \"translate(-\" + originX + \", -\" + originY + \")\" + htmlElement.style.transform;\n\t\t\t}\n\n\t\t\t// Deal with scale\n\t\t\tif (scale != 1) {\n\t\t\t\thtmlElement.style.transform += \"scale(\" + scale + \")\";\n\t\t\t}\n\n\t\t\tif (rotation != 0) {\n\t\t\t\thtmlElement.style.transform += \" rotate(\" + rotation + \"deg)\";\n\t\t\t}\n\n\t\t\tif (htmlElement.style.transform != \"\") {\n\t\t\t\thtmlElement.style.transformOrigin = originX + \" \" + originY;\n\t\t\t\t//htmlElement.style.transformOrigin = \"0% 0%\";\n\t\t\t}\n\n\n\t\t}\n\t}\n\n\tpublic _setHTMLContent(target: Container, html: string): void {\n\t\tlet htmlElement = target.getPrivate(\"htmlElement\");\n\t\tif (!htmlElement) {\n\t\t\thtmlElement = this._makeHTMLElement(target);\n\t\t}\n\t\tif (htmlElement.innerHTML != html) {\n\t\t\thtmlElement.innerHTML = html;\n\t\t}\n\t}\n\n\tpublic _removeHTMLContent(target: Container): void {\n\t\tlet htmlElement = target.getPrivate(\"htmlElement\");\n\t\tif (htmlElement) {\n\t\t\tthis._htmlElementContainer!.removeChild(htmlElement);\n\t\t\ttarget.removePrivate(\"htmlElement\");\n\t\t}\n\t\t$array.remove(this._htmlEnabledContainers, target);\n\t}\n}\n"]}
1
+ {"version":3,"file":"Root.js","sourceRoot":"","sources":["../../../../src/.internal/core/Root.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IAnimation } from \"./util/Animation\";\nimport type { Entity } from \"./util/Entity\";\nimport type { Sprite } from \"./render/Sprite\";\nimport type { Theme } from \"./Theme\";\nimport type { IPoint } from \"./util/IPoint\";\nimport type { IRenderer, IPointerEvent } from \"./render/backend/Renderer\";\nimport type { Timezone } from \"./util/Timezone\";\n\nimport { AnimationState } from \"./util/Animation\";\nimport { Container } from \"./render/Container\";\nimport { Text } from \"./render/Text\";\nimport { HorizontalLayout } from \"./render/HorizontalLayout\";\nimport { VerticalLayout } from \"./render/VerticalLayout\";\nimport { GridLayout } from \"./render/GridLayout\";\nimport { IDisposer, Disposer } from \"./util/Disposer\";\nimport { ResizeSensor } from \"./util/ResizeSensor\";\nimport { InterfaceColors } from \"./util/InterfaceColors\";\nimport { Graphics } from \"./render/Graphics\";\nimport { Rectangle } from \"./render/Rectangle\";\nimport { Tooltip } from \"./render/Tooltip\";\nimport { NumberFormatter } from \"./util/NumberFormatter\";\nimport { DateFormatter } from \"./util/DateFormatter\";\nimport { DurationFormatter } from \"./util/DurationFormatter\";\nimport { ILocale, Language } from \"./util/Language\";\nimport { Events, EventDispatcher } from \"./util/EventDispatcher\";\nimport { DefaultTheme } from \"../themes/DefaultTheme\";\nimport { CanvasRenderer } from \"./render/backend/CanvasRenderer\";\nimport { p100, percent, isPercent, Percent } from \"./util/Percent\";\nimport { color } from \"./util/Color\";\nimport { populateString } from \"./util/PopulateString\";\nimport { registry } from \"./Registry\";\n\nimport * as $order from \"./util/Order\";\nimport * as $array from \"./util/Array\";\nimport * as $object from \"./util/Object\";\nimport * as $utils from \"./util/Utils\";\nimport * as $type from \"./util/Type\";\n\n\nimport en from \"../../locales/en\";\n\n\nfunction rAF(fps: number | undefined, callback: (currentTime: number) => void): void {\n\tif (fps == null) {\n\t\trequestAnimationFrame(callback);\n\n\t} else {\n\t\tsetTimeout(() => {\n\t\t\trequestAnimationFrame(callback);\n\t\t}, 1000 / fps);\n\t}\n}\n\n\n/**\n * @ignore\n */\ninterface IParent extends Entity {\n\t_prepareChildren(): void;\n\t_updateChildren(): void;\n}\n\ninterface IBounds extends Entity {\n\tdepth(): number;\n\t_updateBounds(): void;\n}\n\n\nexport interface ISize {\n\twidth: number,\n\theight: number,\n}\n\n\nexport interface IRootEvents {\n\tframestarted: {\n\t\ttimestamp: number;\n\t};\n\tframeended: {\n\t\ttimestamp: number;\n\t};\n}\n\n\nexport interface IRootSettings {\n\n\t/**\n\t * Indicates whether chart should use \"safe\" resolution on some memory-limiting\n\t * platforms such as Safari.\n\t *\n\t * @default true\n\t */\n\tuseSafeResolution?: boolean;\n\n\t/**\n\t * Allows defining margins around chart area for tooltips to go outside the\n\t * chart itself.\n\t *\n\t * @since 5.2.24\n\t */\n\ttooltipContainerBounds?: { top: number, left: number, right: number, bottom: number };\n\n\t/**\n\t * Set to `false` to disable all accessibility features.\n\t *\n\t * NOTE: once disabled, accessibility cannot be re-enabled on a live `Root` object.\n\t *\n\t * @default true\n\t * @since 5.3.0\n\t */\n\taccessible?: boolean;\n\n\t/**\n\t * If set to `true`, the parent inner `<div>` element will become a focusable\n\t * element.\n\t *\n\t * @since 5.3.17\n\t * @default false\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/accessibility/#Accessibility_of_Root_element} for more info\n\t */\n\tfocusable?: boolean;\n\n\t/**\n\t * Distance between focused element and its highlight square in pixels.\n\t *\n\t * @since 5.6.0\n\t * @default 2\n\t */\n\tfocusPadding?: number;\n\n\t/**\n\t * If set to some string, it will be used as inner `<div>` ARIA-LABEL.\n\t *\n\t * Should be used in conjuction with `focusable`.\n\t *\n\t * @since 5.3.17\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/accessibility/#Accessibility_of_Root_element} for more info\n\t */\n\tariaLabel?: string;\n\n\t/**\n\t * Allows setting a \"role\" for the inner `<div>`.\n\t *\n\t * @since 5.3.17\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/accessibility/#Accessibility_of_Root_element} for more info\n\t */\n\trole?: string;\n\n\t/**\n\t * Allows for specifying a custom width / height for the chart.\n\t *\n\t * This function will be called automatically when the chart is resized.\n\t */\n\tcalculateSize?: (dimensions: DOMRect) => ISize;\n}\n\n\n// TODO implement Disposer\n/**\n * Root element of the chart.\n *\n * @see {@link https://www.amcharts.com/docs/v5/getting-started/#Root_element} for more info\n */\nexport class Root implements IDisposer {\n\n\t/**\n\t * A reference to original chart container (div element).\n\t */\n\tpublic dom: HTMLElement;\n\tpublic _inner: HTMLElement;\n\n\tprotected _settings: IRootSettings;\n\tprotected _isDirty: boolean = false;\n\tprotected _isDirtyParents: boolean = false;\n\tprotected _isDirtyAnimation: boolean = false;\n\tprotected _dirty: { [id: number]: Entity } = {};\n\tprotected _dirtyParents: { [id: number]: IParent } = {};\n\tprotected _dirtyBounds: { [id: number]: IBounds } = {};\n\tprotected _dirtyPositions: { [id: number]: Sprite } = {};\n\n\tprotected _ticker: ((currentTime: number) => void) | null = null;\n\tprotected _tickers: Array<(currentTime: number) => void> = [];\n\n\tprotected _updateTick: boolean = true;\n\n\t/**\n\t * Root's event dispatcher.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/events/} for more info\n\t */\n\tpublic events: EventDispatcher<Events<this, IRootEvents>> = new EventDispatcher();\n\n\t/**\n\t * @ignore\n\t * @todo needs description\n\t */\n\tpublic animationTime: number | null = null;\n\n\tprivate _animations: Array<IAnimation> = [];\n\n\tpublic _renderer: IRenderer;\n\n\tpublic _rootContainer!: Container;\n\n\t/**\n\t * Main content container.\n\t */\n\tpublic container!: Container;\n\n\t/**\n\t * A [[Container]] used to display tooltips in.\n\t */\n\tpublic tooltipContainer!: Container\n\tprotected _tooltipContainerSettings!: { top: number, left: number, right: number, bottom: number };\n\n\tpublic _tooltip!: Tooltip;\n\n\t// Locale-related\n\n\t/**\n\t * @ignore\n\t */\n\tpublic language: Language = Language.new(this, {});\n\n\t/**\n\t * Locale used by the chart.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/locales/}\n\t */\n\tpublic locale: ILocale = en;\n\n\t// Date-time related\n\n\t/**\n\t * Use UTC when formatting date/time.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/formatting-dates/#utc-and-time-zones} for more info\n\t */\n\tpublic utc: boolean = false;\n\n\t/**\n\t * If set, will format date/time in specific time zone.\n\t *\n\t * The value should be named time zone, e.g.:\n\t * `\"America/Vancouver\"`, `\"Australia/Sydney\"`, `\"UTC\"`.\n\t *\n\t * NOTE: Using time zone feature may noticeable affect performance of the\n\t * chart, especially with large data sets, since every single date will need\n\t * to be recalculated.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/getting-started/root-element/#time-zone} for more info\n\t * @since 5.1.0\n\t */\n\tpublic timezone?: Timezone;\n\n\t/**\n\t * The maximum FPS that the Root will run at.\n\t *\n\t * If `undefined` it will run at the highest FPS.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/getting-started/root-element/#Performance} for more info\n\t */\n\tpublic fps: number | undefined;\n\n\t/**\n\t * Number formatter.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/formatting-numbers/} for more info\n\t */\n\tpublic numberFormatter: NumberFormatter = NumberFormatter.new(this, {});\n\n\t/**\n\t * Date/time formatter.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/formatting-dates/} for more info\n\t */\n\tpublic dateFormatter: DateFormatter = DateFormatter.new(this, {});\n\n\t/**\n\t * Duration formatter.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/formatting-dates/} for more info\n\t */\n\tpublic durationFormatter: DurationFormatter = DurationFormatter.new(this, {});\n\n\n\t// Accessibility\n\n\t/**\n\t * Global tab index for using for the whole chart\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/accessibility/} for more info\n\t */\n\tpublic tabindex: number = 0;\n\n\t//@todo maybe make this better\n\tprotected _tabindexes: Sprite[] = [];\n\n\tprotected _a11yD: boolean = false;\n\tprotected _focusElementDirty: boolean = false;\n\tprotected _focusElementContainer: HTMLDivElement | undefined;\n\tprotected _focusedSprite: Sprite | undefined;\n\tprotected _isShift: boolean | undefined;\n\tprotected _keyboardDragPoint: IPoint | undefined;\n\tprotected _tooltipElementContainer: HTMLDivElement | undefined;\n\tprotected _readerAlertElement: HTMLDivElement | undefined;\n\n\tpublic _logo?: Container;\n\n\tpublic _tooltipDiv: HTMLDivElement | undefined;\n\n\t/**\n\t * Used for dynamically-created CSS and JavaScript with strict source policies.\n\t */\n\tpublic nonce?: string;\n\n\t/**\n\t * Special color set to be used for various controls.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/#Interface_colors} for more info\n\t */\n\tpublic interfaceColors: InterfaceColors;\n\n\t/**\n\t * An instance of vertical layout object that can be used to set `layout` setting\n\t * of a [[Container]].\n\t *\n\t * @default VerticalLayout.new()\n\t */\n\tpublic verticalLayout: VerticalLayout = VerticalLayout.new(this, {});\n\n\t/**\n\t * An instance of horizontal layout object that can be used to set `layout` setting\n\t * of a [[Container]].\n\t *\n\t * @default HorizontalLayout.new()\n\t */\n\tpublic horizontalLayout: VerticalLayout = HorizontalLayout.new(this, {});\n\n\t/**\n\t * An instance of grid layout object that can be used to set `layout` setting\n\t * of a [[Container]].\n\t *\n\t * @default VerticalLayout.new()\n\t */\n\tpublic gridLayout: VerticalLayout = GridLayout.new(this, {});\n\n\tpublic _paused: boolean = false;\n\n\t/**\n\t * Indicates whether chart should resized automatically when parent container\n\t * width and/or height changes.\n\t *\n\t * If disabled (`autoResize = false`) you can make the chart resize manually\n\t * by calling root element's `resize()` method.\n\t */\n\tpublic autoResize: boolean = true;\n\n\tprotected _fontHash: string = \"\";\n\n\tprotected _isDisposed: boolean = false;\n\tprotected _disposers: Array<IDisposer> = [];\n\n\tprotected _resizeSensorDisposer?: IDisposer;\n\n\tpublic _tooltips: Array<Tooltip> = [];\n\n\tprotected _htmlElementContainer: HTMLDivElement | undefined;\n\tprotected _htmlEnabledContainers: Container[] = [];\n\n\tprotected constructor(id: string | HTMLElement, settings: IRootSettings = {}, isReal: boolean) {\n\n\t\tif (!isReal) {\n\t\t\tthrow new Error(\"You cannot use `new Class()`, instead use `Class.new()`\");\n\t\t}\n\n\t\tthis._settings = settings;\n\n\t\tif (settings.accessible == false) {\n\t\t\tthis._a11yD = true;\n\t\t}\n\n\t\tif (settings.useSafeResolution == null) {\n\t\t\tsettings.useSafeResolution = true;\n\t\t}\n\n\t\tlet resolution;\n\n\t\tif (settings.useSafeResolution) {\n\t\t\tresolution = $utils.getSafeResolution();\n\t\t}\n\n\t\tthis._renderer = new CanvasRenderer(resolution);\n\n\t\tlet dom: HTMLElement | null;\n\n\t\tif (id instanceof HTMLElement) {\n\t\t\tdom = id;\n\t\t}\n\t\telse {\n\t\t\tdom = document.getElementById(id);\n\t\t}\n\n\t\t$array.each(registry.rootElements, (root) => {\n\t\t\tif (root.dom === dom) {\n\t\t\t\tthrow new Error(\"You cannot have multiple Roots on the same DOM node\");\n\t\t\t}\n\t\t});\n\n\t\tthis.interfaceColors = InterfaceColors.new(this, {});\n\n\t\tif (dom === null) {\n\t\t\tthrow new Error(\"Could not find HTML element with id `\" + id + \"`\");\n\t\t}\n\n\t\tthis.dom = dom;\n\n\t\tlet inner: HTMLDivElement = document.createElement(\"div\");\n\t\tinner.style.position = \"relative\";\n\t\tinner.style.width = \"100%\";\n\t\tinner.style.height = \"100%\";\n\t\tdom.appendChild(inner);\n\n\t\tconst tooltipContainerBounds = settings.tooltipContainerBounds;\n\t\tif (tooltipContainerBounds) {\n\t\t\tthis._tooltipContainerSettings = tooltipContainerBounds;\n\t\t}\n\n\t\tthis._inner = inner;\n\n\t\tthis._updateComputedStyles();\n\n\t\tregistry.rootElements.push(this);\n\t}\n\n\n\tpublic static new(id: string | HTMLElement, settings?: IRootSettings): Root {\n\t\tconst root = new Root(id, settings, true);\n\t\troot._init();\n\t\treturn root;\n\t}\n\n\tpublic moveDOM(id: string | HTMLElement): void {\n\t\tlet dom: HTMLElement | null;\n\n\t\tif (id instanceof HTMLElement) {\n\t\t\tdom = id;\n\t\t}\n\t\telse {\n\t\t\tdom = document.getElementById(id);\n\t\t}\n\n\t\tif (dom) {\n\t\t\twhile (this.dom.childNodes.length > 0) {\n\t\t\t\tdom.appendChild(this.dom.childNodes[0]);\n\t\t\t}\n\t\t\tthis.dom = dom;\n\t\t\tthis._initResizeSensor();\n\t\t\tthis.resize();\n\t\t}\n\n\t}\n\n\n\tprotected _handleLogo(): void {\n\t\tif (this._logo) {\n\t\t\tconst w = this.dom.offsetWidth;\n\t\t\tconst h = this.dom.offsetHeight;\n\t\t\tif ((w <= 150) || (h <= 60)) {\n\t\t\t\tthis._logo.hide();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._logo.show();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _showBranding(): void {\n\t\tif (!this._logo) {\n\t\t\tconst logo = this.tooltipContainer.children.push(Container.new(this, {\n\t\t\t\tinteractive: true,\n\t\t\t\tinteractiveChildren: false,\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tsetStateOnChildren: true,\n\t\t\t\tpaddingTop: 9,\n\t\t\t\tpaddingRight: 9,\n\t\t\t\tpaddingBottom: 9,\n\t\t\t\tpaddingLeft: 9,\n\t\t\t\tscale: .6,\n\t\t\t\ty: percent(100),\n\t\t\t\tcenterY: p100,\n\t\t\t\ttooltipText: \"Created using amCharts 5\",\n\t\t\t\ttooltipX: p100,\n\t\t\t\tcursorOverStyle: \"pointer\",\n\t\t\t\tbackground: Rectangle.new(this, {\n\t\t\t\t\tfill: color(0x474758),\n\t\t\t\t\tfillOpacity: 0,\n\t\t\t\t\ttooltipY: 5\n\t\t\t\t})\n\t\t\t}));\n\n\t\t\tconst tooltip = Tooltip.new(this, {\n\t\t\t\tpointerOrientation: \"horizontal\",\n\t\t\t\tpaddingTop: 4,\n\t\t\t\tpaddingRight: 7,\n\t\t\t\tpaddingBottom: 4,\n\t\t\t\tpaddingLeft: 7\n\t\t\t});\n\t\t\ttooltip.label.setAll({\n\t\t\t\tfontSize: 12\n\t\t\t});\n\t\t\ttooltip.get(\"background\")!.setAll({\n\t\t\t\tfill: this.interfaceColors.get(\"background\"),\n\t\t\t\tstroke: this.interfaceColors.get(\"grid\"),\n\t\t\t\tstrokeOpacity: 0.3\n\t\t\t})\n\t\t\tlogo.set(\"tooltip\", tooltip);\n\n\t\t\tlogo.events.on(\"click\", () => {\n\t\t\t\twindow.open(\"https://www.amcharts.com/\", \"_blank\");\n\t\t\t});\n\n\t\t\tlogo.states.create(\"hover\", {});\n\n\t\t\tconst m = logo.children.push(Graphics.new(this, {\n\t\t\t\tstroke: color(0xcccccc),\n\t\t\t\tstrokeWidth: 3,\n\t\t\t\tsvgPath: \"M5 25 L13 25h13.6c3.4 0 6 0 10.3-4.3s5.2-12 8.6-12c3.4 0 4.3 8.6 7.7 8.6M83.4 25H79.8c-3.4 0-6 0-10.3-4.3s-5.2-12-8.6-12-4.3 8.6-7.7 8.6\"\n\t\t\t}));\n\n\t\t\tm.states.create(\"hover\", { stroke: color(0x3CABFF) });\n\n\t\t\tconst a = logo.children.push(Graphics.new(this, {\n\t\t\t\tstroke: color(0x888888),\n\t\t\t\tstrokeWidth: 3,\n\t\t\t\tsvgPath: \"M83.4 25h-31C37 25 39.5 4.4 28.4 4.4S18.9 24.2 4.3 25H0\"\n\t\t\t}));\n\n\t\t\ta.states.create(\"hover\", { stroke: color(0x474758) });\n\n\t\t\t//logo.set(\"tooltip\", this._tooltip);\n\t\t\t//logo.setPrivate(\"tooltipTarget\", logo.get(\"background\"));\n\t\t\tthis._logo = logo;\n\n\t\t\tthis._handleLogo();\n\t\t}\n\t}\n\n\tprotected _getRealSize(): DOMRect {\n\t\treturn this.dom.getBoundingClientRect();\n\t}\n\n\tprotected _getCalculatedSize(rect: DOMRect): ISize {\n\t\tif (this._settings.calculateSize) {\n\t\t\treturn this._settings.calculateSize(rect);\n\n\t\t} else {\n\t\t\treturn {\n\t\t\t\twidth: rect.width,\n\t\t\t\theight: rect.height,\n\t\t\t};\n\t\t}\n\t}\n\n\tprotected _init(): void {\n\n\t\tconst settings = this._settings;\n\t\tif (settings.accessible !== false) {\n\t\t\tif (settings.focusable) {\n\t\t\t\tthis._inner.setAttribute(\"focusable\", \"true\");\n\t\t\t\tthis._inner.setAttribute(\"tabindex\", this.tabindex + \"\");\n\t\t\t}\n\n\t\t\tif (settings.ariaLabel) {\n\t\t\t\tthis._inner.setAttribute(\"aria-label\", settings.ariaLabel);\n\t\t\t}\n\n\t\t\tif (settings.role) {\n\t\t\t\tthis._inner.setAttribute(\"role\", settings.role);\n\t\t\t}\n\t\t}\n\n\t\tconst renderer = this._renderer;\n\n\t\tconst rect = this._getRealSize();\n\t\tconst size = this._getCalculatedSize(rect);\n\n\t\tconst width = Math.floor(size.width);\n\t\tconst height = Math.floor(size.height);\n\n\t\tconst realWidth = Math.floor(rect.width);\n\t\tconst realHeight = Math.floor(rect.height);\n\n\t\tconst rootContainer = Container.new(this, {\n\t\t\tvisible: true,\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t});\n\t\tthis._rootContainer = rootContainer;\n\t\tthis._rootContainer._defaultThemes.push(DefaultTheme.new(this));\n\n\t\tconst container = rootContainer.children.push(Container.new(this, { visible: true, width: p100, height: p100 }));\n\t\tthis.container = container;\n\n\t\trenderer.resize(realWidth, realHeight, width, height);\n\n\t\t//@todo: better appendChild - refer\n\t\tthis._inner.appendChild(renderer.view);\n\n\t\t// TODO: TMP TMP TMP for testing only, remove\n\t\t//renderer.debugGhostView = true;\n\n\t\tthis._initResizeSensor();\n\n\t\t// HTML content holder\n\t\tconst htmlElementContainer = document.createElement(\"div\");\n\t\tthis._htmlElementContainer = htmlElementContainer;\n\t\thtmlElementContainer.className = \"am5-html-container\";\n\t\thtmlElementContainer.style.position = \"absolute\";\n\t\thtmlElementContainer.style.pointerEvents = \"none\";\n\t\tif (!this._tooltipContainerSettings) {\n\t\t\thtmlElementContainer.style.overflow = \"hidden\";\n\t\t}\n\t\tthis._inner.appendChild(htmlElementContainer);\n\n\t\tif (this._a11yD !== true) {\n\n\t\t\t// Create element which is used to make announcements to screen reader\n\t\t\tconst readerAlertElement = document.createElement(\"div\");\n\t\t\treaderAlertElement.className = \"am5-reader-container\";\n\t\t\treaderAlertElement.setAttribute(\"role\", \"alert\");\n\t\t\t// readerAlertElement.style.zIndex = \"-100000\";\n\t\t\t// readerAlertElement.style.opacity = \"0\";\n\t\t\t// readerAlertElement.style.top = \"0\";\n\t\t\treaderAlertElement.style.position = \"absolute\";\n\t\t\treaderAlertElement.style.width = \"1px\";\n\t\t\treaderAlertElement.style.height = \"1px\";\n\t\t\treaderAlertElement.style.overflow = \"hidden\";\n\t\t\treaderAlertElement.style.clip = \"rect(1px, 1px, 1px, 1px)\";\n\t\t\tthis._readerAlertElement = readerAlertElement;\n\t\t\tthis._inner.appendChild(this._readerAlertElement);\n\n\t\t\tconst focusElementContainer = document.createElement(\"div\");\n\t\t\tfocusElementContainer.className = \"am5-focus-container\";\n\t\t\tfocusElementContainer.style.position = \"absolute\";\n\t\t\tfocusElementContainer.style.pointerEvents = \"none\";\n\t\t\tfocusElementContainer.style.top = \"0px\";\n\t\t\tfocusElementContainer.style.left = \"0px\";\n\t\t\tfocusElementContainer.style.overflow = \"hidden\";\n\t\t\tfocusElementContainer.style.width = width + \"px\";\n\t\t\tfocusElementContainer.style.height = height + \"px\";\n\n\t\t\tfocusElementContainer.setAttribute(\"role\", \"graphics-document\");\n\n\t\t\t$utils.setInteractive(focusElementContainer, false);\n\t\t\tthis._focusElementContainer = focusElementContainer;\n\t\t\tthis._inner.appendChild(this._focusElementContainer);\n\n\t\t\tconst tooltipElementContainer = document.createElement(\"div\");\n\t\t\tthis._tooltipElementContainer = tooltipElementContainer;\n\t\t\ttooltipElementContainer.className = \"am5-tooltip-container\";\n\t\t\tthis._inner.appendChild(tooltipElementContainer);\n\n\t\t\t// Add keyboard events for accessibility, e.g. simulating drag with arrow\n\t\t\t// keys and click with ENTER\n\t\t\tif ($utils.supports(\"keyboardevents\")) {\n\n\t\t\t\tthis._disposers.push($utils.addEventListener(window, \"keydown\", (ev: KeyboardEvent) => {\n\t\t\t\t\tconst eventKey = $utils.getEventKey(ev);\n\t\t\t\t\tif (eventKey == \"Shift\") {\n\t\t\t\t\t\tthis._isShift = true;\n\t\t\t\t\t}\n\t\t\t\t\telse if (eventKey == \"Tab\") {\n\t\t\t\t\t\tthis._isShift = ev.shiftKey;\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\t\tthis._disposers.push($utils.addEventListener(window, \"keyup\", (ev: KeyboardEvent) => {\n\t\t\t\t\tconst eventKey = $utils.getEventKey(ev);\n\t\t\t\t\tif (eventKey == \"Shift\") {\n\t\t\t\t\t\tthis._isShift = false;\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\t\tthis._disposers.push($utils.addEventListener(focusElementContainer, \"click\", () => {\n\t\t\t\t\t// Some screen readers convert ENTER (and some SPACE) press whil on\n\t\t\t\t\t// focused element to a \"click\" event, preventing actual \"keydown\"\n\t\t\t\t\t// event from firing. We're using this \"click\" event to still\n\t\t\t\t\t// generate internal click events.\n\t\t\t\t\tconst focusedSprite = this._focusedSprite;\n\t\t\t\t\tif (focusedSprite) {\n\t\t\t\t\t\tconst announceText = focusedSprite.get(\"clickAnnounceText\", \"\");\n\t\t\t\t\t\tif (announceText !== \"\") {\n\t\t\t\t\t\t\tthis.readerAlert(announceText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst downEvent = renderer.getEvent(new MouseEvent(\"click\"));\n\t\t\t\t\t\tfocusedSprite.events.dispatch(\"click\", {\n\t\t\t\t\t\t\ttype: \"click\",\n\t\t\t\t\t\t\toriginalEvent: downEvent.event,\n\t\t\t\t\t\t\tpoint: downEvent.point,\n\t\t\t\t\t\t\tsimulated: true,\n\t\t\t\t\t\t\ttarget: focusedSprite\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\t\tthis._disposers.push($utils.addEventListener(focusElementContainer, \"keydown\", (ev: KeyboardEvent) => {\n\t\t\t\t\tconst focusedSprite = this._focusedSprite;\n\t\t\t\t\tif (focusedSprite) {\n\t\t\t\t\t\tif (ev.key == \"Escape\") {\n\t\t\t\t\t\t\t// ESC pressed - lose current focus\n\t\t\t\t\t\t\t$utils.blur();\n\t\t\t\t\t\t\tthis._focusedSprite = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet dragOffsetX = 0;\n\t\t\t\t\t\tlet dragOffsetY = 0;\n\t\t\t\t\t\t// TODO: figure out if using bogus MouseEvent is fine, or it will\n\t\t\t\t\t\t// fail on some platforms\n\t\t\t\t\t\tconst eventKey = $utils.getEventKey(ev);\n\t\t\t\t\t\tswitch (eventKey) {\n\t\t\t\t\t\t\tcase \"Enter\":\n\t\t\t\t\t\t\tcase \" \":\n\t\t\t\t\t\t\t\tconst announceText = focusedSprite.get(\"clickAnnounceText\", \"\");\n\t\t\t\t\t\t\t\tif (announceText !== \"\") {\n\t\t\t\t\t\t\t\t\tthis.readerAlert(announceText);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (eventKey == \" \" && focusedSprite.get(\"role\") != \"checkbox\") {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tev.preventDefault();\n\t\t\t\t\t\t\t\tconst downEvent = renderer.getEvent(new MouseEvent(\"mouse\"));\n\t\t\t\t\t\t\t\tfocusedSprite.events.dispatch(\"click\", {\n\t\t\t\t\t\t\t\t\ttype: \"click\",\n\t\t\t\t\t\t\t\t\toriginalEvent: downEvent.event,\n\t\t\t\t\t\t\t\t\tpoint: downEvent.point,\n\t\t\t\t\t\t\t\t\tsimulated: true,\n\t\t\t\t\t\t\t\t\ttarget: focusedSprite\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\tcase \"ArrowLeft\":\n\t\t\t\t\t\t\t\tdragOffsetX = -6;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"ArrowRight\":\n\t\t\t\t\t\t\t\tdragOffsetX = 6;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"ArrowUp\":\n\t\t\t\t\t\t\t\tdragOffsetY = -6;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"ArrowDown\":\n\t\t\t\t\t\t\t\tdragOffsetY = 6;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (dragOffsetX != 0 || dragOffsetY != 0) {\n\t\t\t\t\t\t\tev.preventDefault();\n\n\t\t\t\t\t\t\tif (!focusedSprite.isDragging()) {\n\t\t\t\t\t\t\t\t// Start dragging\n\t\t\t\t\t\t\t\tthis._keyboardDragPoint = {\n\t\t\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t\t\t\ty: 0\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst downEvent = renderer.getEvent(new MouseEvent(\"mousedown\", {\n\t\t\t\t\t\t\t\t\tclientX: 0,\n\t\t\t\t\t\t\t\t\tclientY: 0\n\t\t\t\t\t\t\t\t}));\n\n\t\t\t\t\t\t\t\tdownEvent.point = {\n\t\t\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t\t\t\ty: 0\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\tif (focusedSprite.events.isEnabled(\"pointerdown\")) {\n\t\t\t\t\t\t\t\t\tfocusedSprite.events.dispatch(\"pointerdown\", {\n\t\t\t\t\t\t\t\t\t\ttype: \"pointerdown\",\n\t\t\t\t\t\t\t\t\t\toriginalEvent: downEvent.event,\n\t\t\t\t\t\t\t\t\t\tpoint: downEvent.point,\n\t\t\t\t\t\t\t\t\t\tsimulated: true,\n\t\t\t\t\t\t\t\t\t\ttarget: focusedSprite\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t// Move focus marker\n\t\t\t\t\t\t\t\t//this._positionFocusElement(focusedSprite);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Move incrementally\n\t\t\t\t\t\t\tconst dragPoint = this._keyboardDragPoint!;\n\t\t\t\t\t\t\tdragPoint.x += dragOffsetX;\n\t\t\t\t\t\t\tdragPoint.y += dragOffsetY;\n\t\t\t\t\t\t\tconst moveEvent = renderer.getEvent(new MouseEvent(\"mousemove\", {\n\t\t\t\t\t\t\t\tclientX: dragPoint.x,\n\t\t\t\t\t\t\t\tclientY: dragPoint.y\n\t\t\t\t\t\t\t}), false);\n\n\t\t\t\t\t\t\tif (focusedSprite.events.isEnabled(\"globalpointermove\")) {\n\t\t\t\t\t\t\t\tfocusedSprite.events.dispatch(\"globalpointermove\", {\n\t\t\t\t\t\t\t\t\ttype: \"globalpointermove\",\n\t\t\t\t\t\t\t\t\toriginalEvent: moveEvent.event,\n\t\t\t\t\t\t\t\t\tpoint: moveEvent.point,\n\t\t\t\t\t\t\t\t\tsimulated: true,\n\t\t\t\t\t\t\t\t\ttarget: focusedSprite\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\t\tthis._disposers.push($utils.addEventListener(focusElementContainer, \"keyup\", (ev: KeyboardEvent) => {\n\t\t\t\t\tif (this._focusedSprite) {\n\t\t\t\t\t\tconst focusedSprite = this._focusedSprite;\n\t\t\t\t\t\tconst eventKey = $utils.getEventKey(ev);\n\t\t\t\t\t\tswitch (eventKey) {\n\t\t\t\t\t\t\tcase \"ArrowLeft\":\n\t\t\t\t\t\t\tcase \"ArrowRight\":\n\t\t\t\t\t\t\tcase \"ArrowUp\":\n\t\t\t\t\t\t\tcase \"ArrowDown\":\n\t\t\t\t\t\t\t\tif (focusedSprite.isDragging()) {\n\t\t\t\t\t\t\t\t\t// Simulate drag stop\n\t\t\t\t\t\t\t\t\tconst dragPoint = this._keyboardDragPoint!;\n\t\t\t\t\t\t\t\t\tconst upEvent = renderer.getEvent(new MouseEvent(\"mouseup\", {\n\t\t\t\t\t\t\t\t\t\tclientX: dragPoint.x,\n\t\t\t\t\t\t\t\t\t\tclientY: dragPoint.y\n\t\t\t\t\t\t\t\t\t}));\n\n\t\t\t\t\t\t\t\t\tif (focusedSprite.events.isEnabled(\"globalpointerup\")) {\n\t\t\t\t\t\t\t\t\t\tfocusedSprite.events.dispatch(\"globalpointerup\", {\n\t\t\t\t\t\t\t\t\t\t\ttype: \"globalpointerup\",\n\t\t\t\t\t\t\t\t\t\t\toriginalEvent: upEvent.event,\n\t\t\t\t\t\t\t\t\t\t\tpoint: upEvent.point,\n\t\t\t\t\t\t\t\t\t\t\tsimulated: true,\n\t\t\t\t\t\t\t\t\t\t\ttarget: focusedSprite\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t//this._positionFocusElement(focusedSprite);\n\t\t\t\t\t\t\t\t\tthis._keyboardDragPoint = undefined;\n\t\t\t\t\t\t\t\t\t// @todo dispatch mouseup event instead of calling dragStop?\n\t\t\t\t\t\t\t\t\t// this._dispatchEvent(\"globalpointerup\", target, upEvent);\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (focusedSprite.get(\"focusableGroup\")) {\n\t\t\t\t\t\t\t\t\t// Find next item in focusable group\n\t\t\t\t\t\t\t\t\tconst group = focusedSprite.get(\"focusableGroup\");\n\t\t\t\t\t\t\t\t\tconst items = this._tabindexes.filter((item) => {\n\t\t\t\t\t\t\t\t\t\treturn item.get(\"focusableGroup\") == group && item.getPrivate(\"focusable\") !== false && item.isVisibleDeep() ? true : false;\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tlet index = items.indexOf(focusedSprite);\n\t\t\t\t\t\t\t\t\tconst lastIndex = items.length - 1;\n\t\t\t\t\t\t\t\t\tindex += (eventKey == \"ArrowRight\" || eventKey == \"ArrowDown\") ? 1 : -1;\n\t\t\t\t\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\t\t\t\t\tindex = lastIndex;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (index > lastIndex) {\n\t\t\t\t\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t$utils.focus(items[index].getPrivate(\"focusElement\")!.dom);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"Tab\":\n\t\t\t\t\t\t\t\tconst group = focusedSprite.get(\"focusableGroup\");\n\t\t\t\t\t\t\t\tif (group && this._isShift) {\n\t\t\t\t\t\t\t\t\tthis._focusNext(focusedSprite.getPrivate(\"focusElement\")!.dom, -1, group);\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\t\t}\n\n\t\tthis._startTicker();\n\t\tthis.setThemes([]);\n\n\t\tthis._addTooltip();\n\n\t\tif (!this._hasLicense()) {\n\t\t\tthis._showBranding();\n\t\t}\n\t}\n\n\tprivate _initResizeSensor(): void {\n\t\tif (this._resizeSensorDisposer) {\n\t\t\tthis._resizeSensorDisposer.dispose();\n\t\t}\n\t\tthis._resizeSensorDisposer = new ResizeSensor(this.dom, () => {\n\t\t\tif (this.autoResize) {\n\t\t\t\tthis.resize();\n\t\t\t}\n\t\t});\n\t\tthis._disposers.push(this._resizeSensorDisposer);\n\t}\n\n\t/**\n\t * If automatic resizing of char is disabled (`root.autoResize = false`), it\n\t * can be resized manually by calling this method.\n\t */\n\tpublic resize(): void {\n\t\tconst rect = this._getRealSize();\n\t\tconst size = this._getCalculatedSize(rect);\n\t\tconst w = Math.floor(size.width);\n\t\tconst h = Math.floor(size.height);\n\n\t\tif (w > 0 && h > 0) {\n\t\t\tconst realWidth = Math.floor(rect.width);\n\t\t\tconst realHeight = Math.floor(rect.height);\n\n\t\t\tconst htmlElementContainer = this._htmlElementContainer!;\n\t\t\thtmlElementContainer.style.width = w + \"px\";\n\t\t\thtmlElementContainer.style.height = h + \"px\";\n\n\t\t\tif (this._a11yD !== true) {\n\t\t\t\tconst focusElementContainer = this._focusElementContainer!;\n\t\t\t\tfocusElementContainer.style.width = w + \"px\";\n\t\t\t\tfocusElementContainer.style.height = h + \"px\";\n\t\t\t}\n\n\t\t\tthis._renderer.resize(realWidth, realHeight, w, h);\n\n\t\t\tconst rootContainer = this._rootContainer;\n\n\t\t\trootContainer.setPrivate(\"width\", w);\n\t\t\trootContainer.setPrivate(\"height\", h);\n\t\t\tthis._render();\n\t\t\tthis._handleLogo();\n\t\t}\n\t}\n\n\tprivate _render() {\n\t\tthis._renderer.render(this._rootContainer._display);\n\n\t\tif (this._focusElementDirty) {\n\t\t\tthis._updateCurrentFocus();\n\t\t\tthis._focusElementDirty = false;\n\t\t}\n\t}\n\n\tprivate _runTickers(currentTime: number) {\n\t\t$array.each(this._tickers, (f) => {\n\t\t\tf(currentTime);\n\t\t});\n\t}\n\n\tprivate _runAnimations(currentTime: number): boolean {\n\t\tlet running = 0;\n\n\t\t$array.keepIf(this._animations, (animation) => {\n\t\t\tconst state = animation._runAnimation(currentTime);\n\n\t\t\tif (state === AnimationState.Stopped) {\n\t\t\t\treturn false;\n\n\t\t\t} else if (state === AnimationState.Playing) {\n\t\t\t\t++running;\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t});\n\n\t\tthis._isDirtyAnimation = false;\n\n\t\treturn running === 0;\n\t}\n\n\tprivate _runDirties() {\n\t\t//console.log(\"tick **************************************************************\");\n\t\tlet allParents: { [id: number]: IParent } = {};\n\n\t\twhile (this._isDirtyParents) {\n\t\t\t// This must be before calling _prepareChildren\n\t\t\tthis._isDirtyParents = false;\n\n\t\t\t$object.keys(this._dirtyParents).forEach((key) => {\n\t\t\t\tconst parent = this._dirtyParents[key];\n\n\t\t\t\tdelete this._dirtyParents[key];\n\n\t\t\t\tif (!parent.isDisposed()) {\n\t\t\t\t\tallParents[parent.uid] = parent;\n\t\t\t\t\tparent._prepareChildren();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t$object.keys(allParents).forEach((key) => {\n\t\t\tallParents[key]._updateChildren();\n\t\t});\n\n\n\t\tconst objects: Array<Entity> = [];\n\n\t\t//\t\tconsole.log(\"_beforeChanged\")\n\t\t$object.keys(this._dirty).forEach((key) => {\n\t\t\tconst entity = this._dirty[key];\n\n\t\t\tif (entity.isDisposed()) {\n\t\t\t\tdelete this._dirty[entity.uid];\n\n\t\t\t} else {\n\t\t\t\tobjects.push(entity);\n\t\t\t\tentity._beforeChanged();\n\t\t\t}\n\t\t});\n\n\t\t//\t\tconsole.log(\"_changed\")\n\t\tobjects.forEach((entity) => {\n\t\t\tentity._changed();\n\t\t\tdelete this._dirty[entity.uid];\n\t\t\tentity._clearDirty();\n\t\t});\n\n\t\tthis._isDirty = false;\n\n\t\tconst depths: { [id: number]: number } = {};\n\t\tconst bounds: Array<IBounds> = [];\n\n\t\t$object.keys(this._dirtyBounds).forEach((key) => {\n\t\t\tconst entity = this._dirtyBounds[key];\n\n\t\t\tdelete this._dirtyBounds[key];\n\n\t\t\tif (!entity.isDisposed()) {\n\t\t\t\tdepths[entity.uid] = entity.depth();\n\t\t\t\tbounds.push(entity);\n\t\t\t}\n\t\t});\n\n\t\tthis._positionHTMLElements();\n\n\t\t// High depth -> low depth\n\t\tbounds.sort((x, y) => {\n\t\t\treturn $order.compare(depths[y.uid], depths[x.uid]);\n\t\t});\n\n\t\t//\t\tconsole.log(\"_updateBounds\")\n\t\tbounds.forEach((entity) => {\n\t\t\tentity._updateBounds();\n\t\t});\n\n\t\t//\t\tconsole.log(\"_updatePosition\")\n\t\tconst dirtyPositions = this._dirtyPositions;\n\t\t$object.keys(dirtyPositions).forEach((key) => {\n\t\t\tconst sprite = dirtyPositions[key];\n\n\t\t\tdelete dirtyPositions[key];\n\n\t\t\tif (!sprite.isDisposed()) {\n\t\t\t\tsprite._updatePosition();\n\t\t\t}\n\t\t});\n\n\t\t//\t\tconsole.log(\"_afterChanged\")\n\t\tobjects.forEach((entity) => {\n\t\t\tentity._afterChanged();\n\t\t});\n\t}\n\n\tprivate _renderFrame(currentTime: number): boolean {\n\t\tif (this._updateTick) {\n\t\t\tif (this.events.isEnabled(\"framestarted\")) {\n\t\t\t\tthis.events.dispatch(\"framestarted\", {\n\t\t\t\t\ttype: \"framestarted\",\n\t\t\t\t\ttarget: this,\n\t\t\t\t\ttimestamp: currentTime,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis._checkComputedStyles();\n\t\t\tthis._runTickers(currentTime);\n\n\t\t\tconst animationDone = this._runAnimations(currentTime);\n\n\t\t\tthis._runDirties();\n\t\t\tthis._render();\n\t\t\tthis._renderer.resetImageArray();\n\t\t\tthis._positionHTMLElements();\n\n\t\t\tif (this.events.isEnabled(\"frameended\")) {\n\t\t\t\tthis.events.dispatch(\"frameended\", {\n\t\t\t\t\ttype: \"frameended\",\n\t\t\t\t\ttarget: this,\n\t\t\t\t\ttimestamp: currentTime,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this._tickers.length === 0 &&\n\t\t\t\tanimationDone &&\n\t\t\t\t!this._isDirtyAnimation &&\n\t\t\t\t!this._isDirty;\n\n\t\t} else {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic _runTicker(currentTime: number, now?: boolean) {\n\t\tif (!this.isDisposed()) {\n\t\t\tthis.animationTime = currentTime;\n\n\t\t\tconst done = this._renderFrame(currentTime);\n\n\t\t\t// No more work to do\n\t\t\tif (done) {\n\t\t\t\tthis._ticker = null;\n\t\t\t\tthis.animationTime = null;\n\n\t\t\t} else {\n\t\t\t\tif (!this._paused) {\n\t\t\t\t\tif (now) {\n\t\t\t\t\t\tthis._ticker!\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\trAF(this.fps, this._ticker!);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _runTickerNow(timeout: number = 10000) {\n\t\tif (!this.isDisposed()) {\n\t\t\tconst endTime = performance.now() + timeout;\n\n\t\t\tfor (; ;) {\n\t\t\t\tconst currentTime = performance.now();\n\n\t\t\t\tif (currentTime >= endTime) {\n\t\t\t\t\tthis.animationTime = null;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tthis.animationTime = currentTime;\n\n\t\t\t\tconst done = this._renderFrame(currentTime);\n\n\t\t\t\tif (done) {\n\t\t\t\t\tthis.animationTime = null;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _startTicker() {\n\t\tif (this._ticker === null) {\n\t\t\tthis.animationTime = null;\n\n\t\t\tthis._ticker = (currentTime) => {\n\t\t\t\tthis._runTicker(currentTime);\n\t\t\t};\n\n\t\t\trAF(this.fps, this._ticker!);\n\t\t}\n\t}\n\n\t/**\n\t * Returns whether the root is updating or not.\n\t */\n\tpublic get updateTick(): boolean {\n\t\treturn this._updateTick;\n\t}\n\n\t/**\n\t * Enables or disables the root updating.\n\t */\n\tpublic set updateTick(value: boolean) {\n\t\tthis._updateTick = value;\n\n\t\tif (value) {\n\t\t\tthis._startTicker();\n\t\t}\n\t}\n\n\tpublic _addDirtyEntity(entity: Entity) {\n\t\tthis._isDirty = true;\n\n\t\tif (this._dirty[entity.uid] === undefined) {\n\t\t\tthis._dirty[entity.uid] = entity;\n\t\t}\n\n\t\tthis._startTicker();\n\t}\n\n\tpublic _addDirtyParent(parent: IParent) {\n\t\tthis._isDirty = true;\n\t\tthis._isDirtyParents = true;\n\n\t\tif (this._dirtyParents[parent.uid] === undefined) {\n\t\t\tthis._dirtyParents[parent.uid] = parent;\n\t\t}\n\n\t\tthis._startTicker();\n\t}\n\n\tpublic _addDirtyBounds(entity: IBounds) {\n\t\tthis._isDirty = true;\n\n\t\tif (this._dirtyBounds[entity.uid] === undefined) {\n\t\t\tthis._dirtyBounds[entity.uid] = entity;\n\t\t}\n\n\t\tthis._startTicker();\n\t}\n\n\tpublic _addDirtyPosition(sprite: Sprite) {\n\t\tthis._isDirty = true;\n\n\t\tif (this._dirtyPositions[sprite.uid] === undefined) {\n\t\t\tthis._dirtyPositions[sprite.uid] = sprite;\n\t\t}\n\n\t\tthis._startTicker();\n\t}\n\n\tpublic _addAnimation(animation: IAnimation) {\n\t\tthis._isDirtyAnimation = true;\n\n\t\t// TODO use numeric id instead\n\t\tif (this._animations.indexOf(animation) === -1) {\n\t\t\tthis._animations.push(animation);\n\t\t}\n\n\t\tthis._startTicker();\n\t}\n\n\tpublic _markDirty() {\n\t\tthis._isDirty = true;\n\t}\n\n\tpublic _markDirtyRedraw() {\n\t\tthis.events.once(\"frameended\", () => {\n\t\t\tthis._isDirty = true;\n\t\t\tthis._startTicker();\n\t\t})\n\t}\n\n\tpublic eachFrame(f: (currentTime: number) => void): IDisposer {\n\t\tthis._tickers.push(f);\n\t\tthis._startTicker();\n\n\t\treturn new Disposer(() => {\n\t\t\t$array.removeFirst(this._tickers, f);\n\t\t});\n\t}\n\n\tpublic markDirtyGlobal(container?: Container): void {\n\t\tif (!container) {\n\t\t\tcontainer = this.container;\n\t\t}\n\t\tcontainer.walkChildren((child) => {\n\t\t\tif (child instanceof Container) {\n\t\t\t\tthis.markDirtyGlobal(child);\n\t\t\t}\n\t\t\tchild.markDirty();\n\t\t\tchild.markDirtyBounds();\n\t\t});\n\t}\n\n\t/**\n\t * Returns width of the target container, in pixels.\n\t *\n\t * @return Width\n\t */\n\tpublic width(): number {\n\t\t// TODO make this more efficient, maybe just return the renderer's width ?\n\t\treturn Math.floor(this._getCalculatedSize(this._getRealSize()).width);\n\t}\n\n\t/**\n\t * Returns height of the target container, in pixels.\n\t *\n\t * @return Height\n\t */\n\tpublic height(): number {\n\t\t// TODO make this more efficient, maybe just return the renderer's height ?\n\t\treturn Math.floor(this._getCalculatedSize(this._getRealSize()).height);\n\t}\n\n\t/**\n\t * Disposes root and all the content in it.\n\t */\n\tpublic dispose(): void {\n\t\tif (!this._isDisposed) {\n\t\t\tthis._isDisposed = true;\n\n\t\t\tthis._rootContainer.dispose();\n\t\t\tthis._renderer.dispose();\n\t\t\tthis.horizontalLayout.dispose();\n\t\t\tthis.verticalLayout.dispose();\n\t\t\tthis.interfaceColors.dispose();\n\n\t\t\t$array.each(this._disposers, (x) => {\n\t\t\t\tx.dispose();\n\t\t\t});\n\n\t\t\tif (this._inner) {\n\t\t\t\t$utils.removeElement(this._inner);\n\t\t\t}\n\n\t\t\t$array.remove(registry.rootElements, this);\n\t\t}\n\t}\n\n\t/**\n\t * Returns `true` if root element is disposed.\n\t *\n\t * @return Disposed?\n\t */\n\tpublic isDisposed(): boolean {\n\t\treturn this._isDisposed;\n\t}\n\n\t/**\n\t * Triggers screen reader read out a message.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/accessibility/} for more info\n\t * @param text Alert text\n\t */\n\tpublic readerAlert(text: string): void {\n\t\tif (this._a11yD !== true) {\n\t\t\tthis._readerAlertElement!.innerHTML = $utils.stripTags(text);\n\t\t}\n\t}\n\n\t/**\n\t * Sets themes to be used for the chart.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/themes/} for more info\n\t * @param themes A list of themes\n\t */\n\tpublic setThemes(themes: Array<Theme>): void {\n\t\tthis._rootContainer.set(\"themes\", themes);\n\n\t\t// otherwise new themes are not applied\n\t\tconst tooltipContainer = this.tooltipContainer;\n\t\tif (tooltipContainer) {\n\t\t\ttooltipContainer._applyThemes();\n\t\t}\n\n\t\t// @todo review this\n\t\tconst interfaceColors = this.interfaceColors;\n\t\tif (interfaceColors) {\n\t\t\tinterfaceColors._applyThemes();\n\t\t}\n\n\n\t}\n\n\tprotected _addTooltip() {\n\t\tif (!this.tooltipContainer) {\n\t\t\tconst tooltipContainerSettings = this._tooltipContainerSettings;\n\t\t\tconst tooltipContainer = this._rootContainer.children.push(Container.new(this, {\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tisMeasured: false,\n\t\t\t\twidth: p100,\n\t\t\t\theight: p100,\n\t\t\t\tlayer: tooltipContainerSettings ? 35 : 30,\n\t\t\t\tlayerMargin: tooltipContainerSettings ? tooltipContainerSettings : undefined\n\t\t\t}));\n\t\t\tthis.tooltipContainer = tooltipContainer;\n\n\t\t\tconst tooltip = Tooltip.new(this, {});\n\t\t\tthis.container.set(\"tooltip\", tooltip);\n\t\t\ttooltip.hide(0);\n\t\t\tthis._tooltip = tooltip;\n\t\t}\n\t}\n\n\t/**\n\t * Accesibility\n\t */\n\n\tpublic _registerTabindexOrder(target: Sprite): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (target.get(\"focusable\")) {\n\t\t\t$array.pushOne(this._tabindexes, target);\n\t\t}\n\t\telse {\n\t\t\t$array.remove(this._tabindexes, target);\n\t\t}\n\t\tthis._invalidateTabindexes();\n\t}\n\n\tpublic _unregisterTabindexOrder(target: Sprite): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\t$array.remove(this._tabindexes, target);\n\t\tthis._invalidateTabindexes();\n\t}\n\n\tpublic _invalidateTabindexes(): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._tabindexes.sort((a: Sprite, b: Sprite) => {\n\t\t\tconst aindex = a.get(\"tabindexOrder\", 0);\n\t\t\tconst bindex = b.get(\"tabindexOrder\", 0);\n\t\t\tif (aindex == bindex) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\telse if (aindex > bindex) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t});\n\n\t\tconst groups: Array<string | number> = [];\n\t\t$array.each(this._tabindexes, (item, index) => {\n\t\t\tif (!item.getPrivate(\"focusElement\")) {\n\t\t\t\tthis._makeFocusElement(index, item);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._moveFocusElement(index, item);\n\t\t\t}\n\t\t\tconst group = item.get(\"focusableGroup\");\n\t\t\tif (group && item.getPrivate(\"focusable\") !== false) {\n\t\t\t\tif (groups.indexOf(group) !== -1) {\n\t\t\t\t\t// Non-first element in the group, make it not directly focusable\n\t\t\t\t\titem.getPrivate(\"focusElement\")!.dom.setAttribute(\"tabindex\", \"-1\");\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tgroups.push(group);\n\t\t\t\t}\n\t\t\t}\n\n\t\t});\n\n\t}\n\n\tpublic _updateCurrentFocus(): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._focusedSprite) {\n\t\t\tthis._decorateFocusElement(this._focusedSprite);\n\t\t\tthis._positionFocusElement(this._focusedSprite);\n\t\t}\n\t}\n\n\tpublic _decorateFocusElement(target: Sprite, focusElement?: HTMLDivElement): void {\n\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Decorate with proper accessibility attributes\n\t\tif (!focusElement) {\n\t\t\tfocusElement = target.getPrivate(\"focusElement\")!.dom;\n\t\t}\n\n\t\tif (!focusElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst role = target.get(\"role\");\n\t\tif (role) {\n\t\t\tfocusElement.setAttribute(\"role\", role);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"role\");\n\t\t}\n\n\t\tconst ariaLabel = target.get(\"ariaLabel\");\n\t\tif (ariaLabel) {\n\t\t\tconst label = populateString(target, ariaLabel);\n\t\t\tfocusElement.setAttribute(\"aria-label\", label);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-label\");\n\t\t}\n\n\t\tconst ariaLive = target.get(\"ariaLive\");\n\t\tif (ariaLive) {\n\t\t\tfocusElement.setAttribute(\"aria-live\", ariaLive);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-live\");\n\t\t}\n\n\t\tconst ariaChecked = target.get(\"ariaChecked\");\n\t\tif (ariaChecked != null && role && [\"checkbox\", \"option\", \"radio\", \"menuitemcheckbox\", \"menuitemradio\", \"treeitem\"].indexOf(role) !== -1) {\n\t\t\tfocusElement.setAttribute(\"aria-checked\", ariaChecked ? \"true\" : \"false\");\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-checked\");\n\t\t}\n\n\t\tconst ariaCurrent = target.get(\"ariaCurrent\");\n\t\tif (ariaCurrent != null) {\n\t\t\tfocusElement.setAttribute(\"aria-current\", ariaCurrent);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-current\");\n\t\t}\n\n\t\tconst ariaSelected = target.get(\"ariaSelected\");\n\t\tif (ariaSelected != null && role && [\"gridcell\", \"option\", \"row\", \"tab\", \"columnheader\", \"rowheader\", \"treeitem\"].indexOf(role) !== -1) {\n\t\t\tfocusElement.setAttribute(\"aria-selected\", ariaSelected ? \"true\" : \"false\");\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-selected\");\n\t\t}\n\n\t\tif (target.get(\"ariaHidden\")) {\n\t\t\tfocusElement.setAttribute(\"aria-hidden\", \"true\");\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-hidden\");\n\t\t}\n\n\t\tconst ariaOrientation = target.get(\"ariaOrientation\");\n\t\tif (ariaOrientation) {\n\t\t\tfocusElement.setAttribute(\"aria-orientation\", ariaOrientation);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-orientation\");\n\t\t}\n\n\t\tconst ariaValueNow = target.get(\"ariaValueNow\");\n\t\tif (ariaValueNow) {\n\t\t\tfocusElement.setAttribute(\"aria-valuenow\", ariaValueNow);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-valuenow\");\n\t\t}\n\n\t\tconst ariaValueMin = target.get(\"ariaValueMin\");\n\t\tif (ariaValueMin) {\n\t\t\tfocusElement.setAttribute(\"aria-valuemin\", ariaValueMin);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-valuemin\");\n\t\t}\n\n\t\tconst ariaValueMax = target.get(\"ariaValueMax\");\n\t\tif (ariaValueMax) {\n\t\t\tfocusElement.setAttribute(\"aria-valuemax\", ariaValueMax);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-valuemax\");\n\t\t}\n\n\t\tconst ariaValueText = target.get(\"ariaValueText\");\n\t\tif (ariaValueText) {\n\t\t\tfocusElement.setAttribute(\"aria-valuetext\", ariaValueText);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-valuetext\");\n\t\t}\n\n\t\tconst ariaControls = target.get(\"ariaControls\");\n\t\tif (ariaControls) {\n\t\t\tfocusElement.setAttribute(\"aria-controls\", ariaControls);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-controls\");\n\t\t}\n\n\t\tif (target.get(\"visible\") && target.get(\"opacity\") !== 0 && target.get(\"role\") != \"tooltip\" && !target.isHidden() && target.getPrivate(\"focusable\") !== false) {\n\t\t\tif (focusElement.getAttribute(\"tabindex\") != \"-1\") {\n\t\t\t\tfocusElement.setAttribute(\"tabindex\", \"\" + this.tabindex);\n\t\t\t}\n\t\t\tfocusElement.removeAttribute(\"aria-hidden\");\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"tabindex\");\n\t\t\tfocusElement.setAttribute(\"aria-hidden\", \"true\");\n\t\t}\n\t}\n\n\tpublic _makeFocusElement(index: number, target: Sprite): void {\n\n\t\tif (target.getPrivate(\"focusElement\") || this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Init\n\t\tconst focusElement = document.createElement(\"div\");\n\t\tif (target.get(\"role\") != \"tooltip\") {\n\t\t\tfocusElement.tabIndex = this.tabindex;\n\t\t}\n\t\tfocusElement.style.position = \"absolute\";\n\t\t$utils.setInteractive(focusElement, false);\n\n\t\tconst disposers: Array<IDisposer> = [];\n\n\t\ttarget.setPrivate(\"focusElement\", {\n\t\t\tdom: focusElement,\n\t\t\tdisposers,\n\t\t});\n\n\t\tthis._decorateFocusElement(target);\n\n\t\tdisposers.push($utils.addEventListener(focusElement, \"focus\", (ev: FocusEvent) => {\n\t\t\tthis._handleFocus(ev);\n\t\t}));\n\n\t\tdisposers.push($utils.addEventListener(focusElement, \"blur\", (ev: FocusEvent) => {\n\t\t\tthis._handleBlur(ev);\n\t\t}));\n\n\t\tthis._moveFocusElement(index, target);\n\n\t}\n\n\tpublic _removeFocusElement(target: Sprite): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\t$array.remove(this._tabindexes, target);\n\t\tconst focusElement = target.getPrivate(\"focusElement\");\n\t\tif (focusElement) {\n\t\t\tconst container = this._focusElementContainer!;\n\t\t\tcontainer.removeChild(focusElement.dom);\n\t\t\t$array.each(focusElement.disposers, (x) => {\n\t\t\t\tx.dispose();\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic _hideFocusElement(target: Sprite): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst focusElement = target.getPrivate(\"focusElement\")!;\n\t\tfocusElement.dom.style.display = \"none\";\n\t}\n\n\tprotected _moveFocusElement(index: number, target: Sprite): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Get container\n\t\tconst container = this._focusElementContainer!;\n\t\tconst focusElement = target.getPrivate(\"focusElement\")!.dom;\n\n\t\tif (focusElement === this._focusElementContainer!.children[index]) {\n\t\t\t// Nothing to do\n\t\t\treturn;\n\t\t}\n\n\t\tconst next = this._focusElementContainer!.children[index + 1];\n\t\tif (next) {\n\t\t\tcontainer.insertBefore(focusElement, next);\n\t\t}\n\t\telse {\n\t\t\tcontainer.append(focusElement);\n\t\t}\n\t}\n\n\tprotected _positionFocusElement(target: Sprite): void {\n\t\tif (this._a11yD == true || target == undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst bounds = target.globalBounds();\n\n\t\tlet width = bounds.right == bounds.left ? target.width() : bounds.right - bounds.left;\n\t\tlet height = bounds.top == bounds.bottom ? target.height() : bounds.bottom - bounds.top;\n\n\t\tconst padding = this._settings.focusPadding !== undefined ? this._settings.focusPadding : 2;\n\n\t\tlet x = bounds.left - padding;\n\t\tlet y = bounds.top - padding;\n\n\t\tif (width < 0) {\n\t\t\tx += width;\n\t\t\twidth = Math.abs(width);\n\t\t}\n\n\t\tif (height < 0) {\n\t\t\ty += height;\n\t\t\theight = Math.abs(height);\n\t\t}\n\n\t\tconst focusElement = target.getPrivate(\"focusElement\")!.dom;\n\t\tfocusElement.style.top = y + \"px\";\n\t\tfocusElement.style.left = x + \"px\";\n\t\tfocusElement.style.width = (width + padding * 2) + \"px\";\n\t\tfocusElement.style.height = (height + padding * 2) + \"px\";\n\n\t}\n\n\tprotected _getSpriteByFocusElement(target: any): Sprite | undefined {\n\t\tlet found: Sprite | undefined;\n\t\t$array.eachContinue(this._tabindexes, (item, _index) => {\n\t\t\tif (item.getPrivate(\"focusElement\")!.dom === target) {\n\t\t\t\tfound = item;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\t\treturn found;\n\t}\n\n\tprotected _handleFocus(ev: FocusEvent): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Get element\n\t\t//const focused = this._tabindexes[index];\n\t\tconst focused = this._getSpriteByFocusElement(ev.target);\n\n\t\tif (!focused) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Jump over hidden elements\n\t\tif (!focused.isVisibleDeep()) {\n\t\t\tthis._focusNext(<HTMLDivElement>ev.target, this._isShift ? -1 : 1);\n\t\t\treturn;\n\t\t}\n\n\t\t// Size and position\n\t\tthis._positionFocusElement(focused);\n\t\t//this._decorateFocusElement(focused);\n\n\t\tthis._focusedSprite = focused;\n\n\t\tif (focused.events.isEnabled(\"focus\")) {\n\t\t\tfocused.events.dispatch(\"focus\", {\n\t\t\t\ttype: \"focus\",\n\t\t\t\toriginalEvent: ev,\n\t\t\t\ttarget: focused\n\t\t\t});\n\t\t}\n\t}\n\n\tprotected _focusNext(el: HTMLDivElement, direction: 1 | -1, group?: string | number): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst focusableElements = Array.from(document.querySelectorAll([\n\t\t\t'a[href]',\n\t\t\t'area[href]',\n\t\t\t'button:not([disabled])',\n\t\t\t'details',\n\t\t\t'input:not([disabled])',\n\t\t\t'iframe:not([disabled])',\n\t\t\t'select:not([disabled])',\n\t\t\t'textarea:not([disabled])',\n\t\t\t'[contentEditable=\"\"]',\n\t\t\t'[contentEditable=\"true\"]',\n\t\t\t'[contentEditable=\"TRUE\"]',\n\t\t\t'[tabindex]:not([tabindex^=\"-\"])',\n\t\t\t//':not([disabled])'\n\t\t].join(',')));\n\n\t\tlet index = focusableElements.indexOf(el) + direction;\n\n\t\tif (index < 0) {\n\t\t\tindex = focusableElements.length - 1;\n\t\t}\n\t\telse if (index >= focusableElements.length) {\n\t\t\tindex = 0;\n\t\t}\n\n\t\tconst targetElement = (<HTMLDivElement>focusableElements[index]);\n\n\t\tif (group && direction == -1) {\n\t\t\tconst target = this._getSpriteByFocusElement(targetElement);\n\t\t\tif (target && target.get(\"focusableGroup\") == group) {\n\t\t\t\tthis._focusNext(targetElement, direction);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\ttargetElement.focus();\n\t}\n\n\tprotected _handleBlur(ev: FocusEvent): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst focused = this._focusedSprite;\n\t\tif (focused && !focused.isDisposed() && focused.events.isEnabled(\"blur\")) {\n\t\t\tfocused.events.dispatch(\"blur\", {\n\t\t\t\ttype: \"blur\",\n\t\t\t\toriginalEvent: ev,\n\t\t\t\ttarget: focused\n\t\t\t});\n\t\t}\n\t\tthis._focusedSprite = undefined;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic updateTooltip(target: Text): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst text = $utils.stripTags(target._getText());\n\t\tlet tooltipElement = target.getPrivate(\"tooltipElement\");\n\t\tif (target.get(\"role\") == \"tooltip\" && text != \"\") {\n\t\t\tif (!tooltipElement) {\n\t\t\t\ttooltipElement = this._makeTooltipElement(target);\n\t\t\t}\n\t\t\tif (tooltipElement.innerHTML != text) {\n\t\t\t\ttooltipElement.innerHTML = text!;\n\t\t\t}\n\t\t\ttooltipElement.setAttribute(\"aria-hidden\", target.isVisibleDeep() ? \"false\" : \"true\");\n\t\t}\n\t\telse if (tooltipElement) {\n\t\t\ttooltipElement.remove();\n\t\t\ttarget.removePrivate(\"tooltipElement\");\n\t\t}\n\t}\n\n\tpublic _makeTooltipElement(target: Text): HTMLDivElement {\n\t\tconst container = this._tooltipElementContainer!;\n\t\tconst tooltipElement = document.createElement(\"div\");\n\t\ttooltipElement.style.position = \"absolute\";\n\t\ttooltipElement.style.width = \"1px\";\n\t\ttooltipElement.style.height = \"1px\";\n\t\ttooltipElement.style.overflow = \"hidden\";\n\t\ttooltipElement.style.clip = \"rect(1px, 1px, 1px, 1px)\";\n\n\t\t$utils.setInteractive(tooltipElement, false);\n\n\t\tthis._decorateFocusElement(target, tooltipElement);\n\t\tcontainer.append(tooltipElement);\n\t\ttarget.setPrivate(\"tooltipElement\", tooltipElement);\n\n\t\treturn tooltipElement;\n\t}\n\n\tpublic _removeTooltipElement(target: Text): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\t\tconst tooltipElement = target.getPrivate(\"tooltipElement\");\n\t\tif (tooltipElement) {\n\t\t\tconst parent = tooltipElement.parentElement;\n\t\t\tif (parent) {\n\t\t\t\tparent.removeChild(tooltipElement);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _invalidateAccessibility(target: Sprite): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\t\tthis._focusElementDirty = true;\n\t\tconst focusElement = target.getPrivate(\"focusElement\");\n\t\tif (target.get(\"focusable\")) {\n\t\t\tif (focusElement) {\n\t\t\t\tthis._decorateFocusElement(target);\n\t\t\t\tthis._positionFocusElement(target);\n\t\t\t}\n\t\t\t// else {\n\t\t\t// \tthis._renderer._makeFocusElement(0, this);\n\t\t\t// }\n\t\t}\n\t\telse if (focusElement) {\n\t\t\tthis._removeFocusElement(target);\n\t\t}\n\t\t//this.updateCurrentFocus();\n\t}\n\n\t/**\n\t * Returns `true` if `target` is currently focused.\n\t *\n\t * @param target Target\n\t * @return Focused?\n\t */\n\tpublic focused(target: Sprite): boolean {\n\t\treturn this._focusedSprite === target;\n\t}\n\n\t/**\n\t * Converts document coordinates to coordinates withing root element.\n\t *\n\t * @param point Document point\n\t * @return Root point\n\t */\n\tpublic documentPointToRoot(point: IPoint): IPoint {\n\t\tconst rect = this._getRealSize();\n\t\tconst size = this._getCalculatedSize(rect);\n\n\t\tconst scaleWidth = size.width / rect.width;\n\t\tconst scaleHeight = size.height / rect.height;\n\n\t\treturn {\n\t\t\tx: (point.x - rect.left) * scaleWidth,\n\t\t\ty: (point.y - rect.top) * scaleHeight,\n\t\t};\n\t}\n\n\t/**\n\t * Converts root coordinates to document\n\t *\n\t * @param point Document point\n\t * @return Root point\n\t */\n\tpublic rootPointToDocument(point: IPoint): IPoint {\n\t\tconst rect = this._getRealSize();\n\t\tconst size = this._getCalculatedSize(rect);\n\n\t\tconst scaleWidth = size.width / rect.width;\n\t\tconst scaleHeight = size.height / rect.height;\n\n\t\treturn {\n\t\t\tx: (point.x / scaleWidth) + rect.left,\n\t\t\ty: (point.y / scaleHeight) + rect.top\n\t\t};\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic addDisposer<T extends IDisposer>(disposer: T): T {\n\t\tthis._disposers.push(disposer);\n\t\treturn disposer;\n\t}\n\n\tprotected _updateComputedStyles(): boolean {\n\t\tconst styles = window.getComputedStyle(this.dom);\n\t\tlet fontHash = \"\";\n\t\t$object.each(styles, (key, val) => {\n\t\t\tif ($type.isString(key) && key.match(/^font/)) {\n\t\t\t\tfontHash += val;\n\t\t\t}\n\t\t})\n\t\tconst changed = fontHash != this._fontHash;\n\t\tif (changed) {\n\t\t\tthis._fontHash = fontHash;\n\t\t}\n\t\treturn changed;\n\t}\n\n\tprotected _checkComputedStyles(): void {\n\t\tif (this._updateComputedStyles()) {\n\t\t\tthis._invalidateLabelBounds(this.container);\n\t\t}\n\t}\n\n\tprotected _invalidateLabelBounds(target: Sprite): void {\n\t\tif (target instanceof Container) {\n\t\t\ttarget.children.each((child) => {\n\t\t\t\tthis._invalidateLabelBounds(child);\n\t\t\t});\n\t\t}\n\t\telse if (target instanceof Text) {\n\t\t\ttarget.markDirtyBounds();\n\t\t}\n\t}\n\n\t/**\n\t * To all the clever heads out there. Yes, we did not make any attempts to\n\t * scramble this.\n\t *\n\t * This is a part of a tool meant for our users to manage their commercial\n\t * licenses for removal of amCharts branding from charts.\n\t *\n\t * The only legit way to do so is to purchase a commercial license for amCharts:\n\t * https://www.amcharts.com/online-store/\n\t *\n\t * Removing or altering this code, or disabling amCharts branding in any other\n\t * way is against the license and thus illegal.\n\t */\n\tprotected _hasLicense(): boolean {\n\t\tfor (let i = 0; i < registry.licenses.length; i++) {\n\t\t\tif (registry.licenses[i].match(/^AM5C.{5,}/i)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic _licenseApplied(): void {\n\t\tif (this._logo) {\n\t\t\tthis._logo.set(\"forceHidden\", true);\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic get debugGhostView(): boolean {\n\t\treturn this._renderer.debugGhostView;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic set debugGhostView(value: boolean) {\n\t\tthis._renderer.debugGhostView = value;\n\t}\n\n\t/**\n\t * Set this to `true` if you need chart to require first a tap onto it before\n\t * touch gesture related functionality like zoom/pan is turned on.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/getting-started/root-element/#Touch_related_options} for more info\n\t * @default false\n\t * @since 5.2.9\n\t * @param value Needs a tap to activate touch functions\n\t */\n\tpublic set tapToActivate(value: boolean) {\n\t\tthis._renderer.tapToActivate = value;\n\t}\n\n\t/**\n\t * @return Needs a tap to activate touch functions\n\t */\n\tpublic get tapToActivate(): boolean {\n\t\treturn this._renderer.tapToActivate;\n\t}\n\n\t/**\n\t * If `tapToActivate` is set to `true`, this setting will determine number\n\t * of milliseconds the chart will stay \"active\", before releasing the\n\t * controls back to the page.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/getting-started/root-element/#Touch_related_options} for more info\n\t * @default 3000\n\t * @since 5.2.9\n\t * @param value Timeout\n\t */\n\tpublic set tapToActivateTimeout(value: number) {\n\t\tthis._renderer.tapToActivateTimeout = value;\n\t}\n\n\t/**\n\t * @return Timeout\n\t */\n\tpublic get tapToActivateTimeout(): number {\n\t\treturn this._renderer.tapToActivateTimeout;\n\t}\n\n\tpublic _makeHTMLElement(target: Container): HTMLDivElement {\n\n\t\t// Get container\n\t\tconst container = this._htmlElementContainer!;\n\n\t\t// Init\n\t\tconst htmlElement = document.createElement(\"div\");\n\t\ttarget.setPrivate(\"htmlElement\", htmlElement);\n\n\t\t//htmlElement.tabIndex = this.tabindex;\n\t\thtmlElement.style.position = \"absolute\";\n\t\thtmlElement.style.overflow = \"auto\";\n\t\thtmlElement.style.boxSizing = \"border-box\";\n\t\t$utils.setInteractive(htmlElement, target.get(\"interactive\", false));\n\n\t\t// Translate events\n\t\tif (target.events.isEnabled(\"click\")) {\n\t\t\t$utils.setInteractive(htmlElement, true);\n\t\t\tthis._disposers.push($utils.addEventListener<PointerEvent | MouseEvent>(htmlElement, \"click\", (ev: IPointerEvent) => {\n\t\t\t\tconst downEvent = this._renderer.getEvent(ev);\n\t\t\t\ttarget.events.dispatch(\"click\", {\n\t\t\t\t\ttype: \"click\",\n\t\t\t\t\toriginalEvent: downEvent.event,\n\t\t\t\t\tpoint: downEvent.point,\n\t\t\t\t\tsimulated: false,\n\t\t\t\t\ttarget: target\n\t\t\t\t});\n\t\t\t}));\n\t\t}\n\n\t\tthis._positionHTMLElement(target);\n\n\t\tcontainer.append(htmlElement);\n\n\t\t$array.pushOne(this._htmlEnabledContainers, target);\n\n\t\treturn htmlElement;\n\t}\n\n\tpublic _positionHTMLElements(): void {\n\t\t$array.each(this._htmlEnabledContainers, (target) => {\n\t\t\tthis._positionHTMLElement(target);\n\t\t});\n\t}\n\n\tpublic _positionHTMLElement(target: Container): void {\n\t\tconst htmlElement = target.getPrivate(\"htmlElement\");\n\t\tif (htmlElement) {\n\n\t\t\t// Translate settings\n\t\t\tconst visualSettings = [\n\t\t\t\t\"paddingTop\",\n\t\t\t\t\"paddingRight\",\n\t\t\t\t\"paddingBottom\",\n\t\t\t\t\"paddingLeft\",\n\t\t\t\t\"minWidth\",\n\t\t\t\t\"minHeight\",\n\t\t\t\t\"maxWidth\",\n\t\t\t\t\"maxHeight\"\n\t\t\t];\n\t\t\t$array.each(visualSettings, (setting: any) => {\n\t\t\t\tconst value = target.get(setting);\n\t\t\t\tif (value) {\n\t\t\t\t\thtmlElement.style[setting] = value + \"px\";\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\thtmlElement.style[setting] = \"\";\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tconst strtingSettings = [\n\t\t\t\t\"fontFamily\",\n\t\t\t\t\"fontSize\",\n\t\t\t\t\"fontStyle\",\n\t\t\t\t\"fontWeight\",\n\t\t\t\t\"fontStyle\",\n\t\t\t\t\"fontVariant\",\n\t\t\t\t\"textDecoration\"\n\t\t\t];\n\t\t\t$array.each(strtingSettings, (setting: any) => {\n\t\t\t\tconst value = target.get(setting);\n\t\t\t\tif (value) {\n\t\t\t\t\thtmlElement.style[setting] = value + \"\";\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\thtmlElement.style[setting] = \"\";\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Init and reset scale / rotation\n\t\t\tconst scale = target.compositeScale() || 1;\n\t\t\tconst rotation = target.compositeRotation() || 0;\n\t\t\thtmlElement.style.transform = \"\";\n\t\t\thtmlElement.style.transformOrigin = \"\";\n\n\t\t\t// Deal with opacity\n\t\t\tconst opacity = target.compositeOpacity();\n\t\t\tsetTimeout(() => {\n\t\t\t\thtmlElement.style.opacity = opacity + \"\";\n\t\t\t}, 10);\n\n\t\t\tconst visible = target.isVisibleDeep();\n\t\t\tif (visible) {\n\t\t\t\thtmlElement.style.display = \"block\";\n\t\t\t}\n\n\t\t\t// Deal with position\n\t\t\t// const bounds = target.globalBounds();\n\t\t\t// htmlElement.style.top = (bounds.top) + \"px\";\n\t\t\t// htmlElement.style.left = (bounds.left) + \"px\";\n\t\t\tlet pos = {\n\t\t\t\tx: target.x() + target.get(\"dx\", 0),\n\t\t\t\ty: target.y() + target.get(\"dy\", 0)\n\t\t\t}\n\t\t\tif (target.parent) {\n\t\t\t\tpos = target.parent.toGlobal(pos)\n\t\t\t}\n\t\t\thtmlElement.style.top = pos.y + \"px\";\n\t\t\thtmlElement.style.left = pos.x + \"px\";\n\n\t\t\t// Use width/height if those are set\n\t\t\tconst width = target.get(\"width\");\n\t\t\tconst height = target.get(\"height\");\n\n\t\t\tlet w: number = 0;\n\t\t\tlet h: number = 0;\n\n\t\t\tif (width) {\n\t\t\t\tw = target.width();\n\t\t\t}\n\n\t\t\tif (height) {\n\t\t\t\th = target.height();\n\t\t\t}\n\n\n\t\t\tif (!width || !height) {\n\t\t\t\thtmlElement.style.position = \"fixed\";\n\t\t\t\thtmlElement.style.width = \"\";\n\t\t\t\thtmlElement.style.height = \"\";\n\t\t\t\tconst bbox = htmlElement.getBoundingClientRect();\n\t\t\t\thtmlElement.style.position = \"absolute\";\n\t\t\t\tif (!width) w = bbox.width;\n\t\t\t\tif (!height) h = bbox.height;\n\n\t\t\t\tlet lw = w / scale;\n\t\t\t\tlet lh = h / scale;\n\n\t\t\t\tlet cx = target.get(\"centerX\", 0);\n\t\t\t\tlet cy = target.get(\"centerY\", 0);\n\n\t\t\t\tlet ll = 0;\n\t\t\t\tlet lr = 0;\n\t\t\t\tlet lt = 0;\n\t\t\t\tlet lb = 0;\n\n\t\t\t\tif (cx instanceof Percent) {\n\t\t\t\t\tll = -cx.value * lw;\n\t\t\t\t\tlr = (1 - cx.value) * lw;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tll = -cx;\n\t\t\t\t\tlr = lw - cx;\n\t\t\t\t}\n\n\t\t\t\tif (cy instanceof Percent) {\n\t\t\t\t\tlt = -cy.value * lh;\n\t\t\t\t\tlb = (1 - cy.value) * lh;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlt = -cy;\n\t\t\t\t\tlb = lh - cy;\n\t\t\t\t}\n\n\t\t\t\ttarget._localBounds = { left: ll, right: lr, top: lt, bottom: lb };\n\n\t\t\t\tlet previousBounds = target._adjustedLocalBounds;\n\t\t\t\tlet newBounds = target._display.getAdjustedBounds(target._localBounds);\n\t\t\t\ttarget._adjustedLocalBounds = newBounds;\n\n\t\t\t\t// compare each value of the bounds\n\t\t\t\tif (previousBounds.left !== newBounds.left || previousBounds.right !== newBounds.right || previousBounds.top !== newBounds.top || previousBounds.bottom !== newBounds.bottom) {\n\t\t\t\t\ttarget.markDirtyBounds();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (w > 0) {\n\t\t\t\thtmlElement.style.minWidth = (w) + \"px\";\n\t\t\t}\n\t\t\tif (h > 0) {\n\t\t\t\thtmlElement.style.minHeight = (h) + \"px\";\n\t\t\t}\n\n\t\t\t// Hide or show\n\t\t\tif (!visible || opacity == 0) {\n\t\t\t\thtmlElement.style.display = \"none\";\n\t\t\t}\n\n\t\t\t// Center position\n\t\t\tconst x = target.get(\"centerX\", 0);\n\t\t\tconst originX = isPercent(x) ? (x as Percent).percent + \"%\" : x + \"px\";\n\t\t\tconst y = target.get(\"centerY\", 0);\n\t\t\tconst originY = isPercent(y) ? (y as Percent).percent + \"%\" : y + \"px\";\n\n\t\t\tif (x || y) {\n\t\t\t\thtmlElement.style.transform = \"translate(-\" + originX + \", -\" + originY + \")\" + htmlElement.style.transform;\n\t\t\t}\n\n\t\t\t// Deal with scale\n\t\t\tif (scale != 1) {\n\t\t\t\thtmlElement.style.transform += \"scale(\" + scale + \")\";\n\t\t\t}\n\n\t\t\tif (rotation != 0) {\n\t\t\t\thtmlElement.style.transform += \" rotate(\" + rotation + \"deg)\";\n\t\t\t}\n\n\t\t\tif (htmlElement.style.transform != \"\") {\n\t\t\t\thtmlElement.style.transformOrigin = originX + \" \" + originY;\n\t\t\t\t//htmlElement.style.transformOrigin = \"0% 0%\";\n\t\t\t}\n\n\n\t\t}\n\t}\n\n\tpublic _setHTMLContent(target: Container, html: string): void {\n\t\tlet htmlElement = target.getPrivate(\"htmlElement\");\n\t\tif (!htmlElement) {\n\t\t\thtmlElement = this._makeHTMLElement(target);\n\t\t}\n\t\tif (htmlElement.innerHTML != html) {\n\t\t\thtmlElement.innerHTML = html;\n\t\t}\n\t}\n\n\tpublic _removeHTMLContent(target: Container): void {\n\t\tlet htmlElement = target.getPrivate(\"htmlElement\");\n\t\tif (htmlElement) {\n\t\t\tthis._htmlElementContainer!.removeChild(htmlElement);\n\t\t\ttarget.removePrivate(\"htmlElement\");\n\t\t}\n\t\t$array.remove(this._htmlEnabledContainers, target);\n\t}\n}\n"]}
@@ -137,6 +137,14 @@ export interface IGraphicsSettings extends ISpriteSettings {
137
137
  * @since 5.2.10
138
138
  */
139
139
  lineJoin?: "miter" | "round" | "bevel";
140
+ /**
141
+ * This setting determines the shape used to draw the end points of lines.
142
+ *
143
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineCap} for more info
144
+ * @default "butt"
145
+ * @since 5.10.8
146
+ */
147
+ lineCap?: "butt" | "round" | "square";
140
148
  }
141
149
  export interface IGraphicsPrivate extends ISpritePrivate {
142
150
  }