@amcharts/amcharts5 5.2.49 → 5.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (887) hide show
  1. package/.internal/charts/flow/Chord.js +151 -199
  2. package/.internal/charts/flow/Chord.js.map +1 -1
  3. package/.internal/charts/flow/ChordDirected.js +46 -66
  4. package/.internal/charts/flow/ChordDirected.js.map +1 -1
  5. package/.internal/charts/flow/ChordLink.js +32 -42
  6. package/.internal/charts/flow/ChordLink.js.map +1 -1
  7. package/.internal/charts/flow/ChordLinkDirected.js +17 -29
  8. package/.internal/charts/flow/ChordLinkDirected.js.map +1 -1
  9. package/.internal/charts/flow/ChordNodes.js +70 -86
  10. package/.internal/charts/flow/ChordNodes.js.map +1 -1
  11. package/.internal/charts/flow/ChordNonRibbon.js +63 -91
  12. package/.internal/charts/flow/ChordNonRibbon.js.map +1 -1
  13. package/.internal/charts/flow/Flow.js +289 -356
  14. package/.internal/charts/flow/Flow.js.map +1 -1
  15. package/.internal/charts/flow/FlowDefaultTheme.js +187 -199
  16. package/.internal/charts/flow/FlowDefaultTheme.js.map +1 -1
  17. package/.internal/charts/flow/FlowLink.js +34 -49
  18. package/.internal/charts/flow/FlowLink.js.map +1 -1
  19. package/.internal/charts/flow/FlowNode.js +17 -22
  20. package/.internal/charts/flow/FlowNode.js.map +1 -1
  21. package/.internal/charts/flow/FlowNodes.js +141 -202
  22. package/.internal/charts/flow/FlowNodes.js.map +1 -1
  23. package/.internal/charts/flow/Sankey.js +165 -203
  24. package/.internal/charts/flow/Sankey.js.map +1 -1
  25. package/.internal/charts/flow/SankeyLink.js +207 -229
  26. package/.internal/charts/flow/SankeyLink.js.map +1 -1
  27. package/.internal/charts/flow/SankeyNodes.js +70 -90
  28. package/.internal/charts/flow/SankeyNodes.js.map +1 -1
  29. package/.internal/charts/funnel/FunnelSeries.js +353 -447
  30. package/.internal/charts/funnel/FunnelSeries.js.map +1 -1
  31. package/.internal/charts/funnel/FunnelSlice.js +96 -117
  32. package/.internal/charts/funnel/FunnelSlice.js.map +1 -1
  33. package/.internal/charts/funnel/PictorialStackedSeries.js +59 -79
  34. package/.internal/charts/funnel/PictorialStackedSeries.js.map +1 -1
  35. package/.internal/charts/funnel/PyramidSeries.js +106 -122
  36. package/.internal/charts/funnel/PyramidSeries.js.map +1 -1
  37. package/.internal/charts/funnel/SlicedChart.js +17 -29
  38. package/.internal/charts/funnel/SlicedChart.js.map +1 -1
  39. package/.internal/charts/hierarchy/BreadcrumbBar.js +69 -96
  40. package/.internal/charts/hierarchy/BreadcrumbBar.js.map +1 -1
  41. package/.internal/charts/hierarchy/ForceDirected.js +255 -370
  42. package/.internal/charts/hierarchy/ForceDirected.js.map +1 -1
  43. package/.internal/charts/hierarchy/Hierarchy.js +476 -640
  44. package/.internal/charts/hierarchy/Hierarchy.js.map +1 -1
  45. package/.internal/charts/hierarchy/HierarchyDefaultTheme.js +337 -349
  46. package/.internal/charts/hierarchy/HierarchyDefaultTheme.js.map +1 -1
  47. package/.internal/charts/hierarchy/HierarchyLink.js +43 -61
  48. package/.internal/charts/hierarchy/HierarchyLink.js.map +1 -1
  49. package/.internal/charts/hierarchy/HierarchyNode.js +57 -74
  50. package/.internal/charts/hierarchy/HierarchyNode.js.map +1 -1
  51. package/.internal/charts/hierarchy/LinkedHierarchy.js +229 -323
  52. package/.internal/charts/hierarchy/LinkedHierarchy.js.map +1 -1
  53. package/.internal/charts/hierarchy/LinkedHierarchyNode.js +48 -80
  54. package/.internal/charts/hierarchy/LinkedHierarchyNode.js.map +1 -1
  55. package/.internal/charts/hierarchy/Pack.js +105 -147
  56. package/.internal/charts/hierarchy/Pack.js.map +1 -1
  57. package/.internal/charts/hierarchy/Partition.js +183 -230
  58. package/.internal/charts/hierarchy/Partition.js.map +1 -1
  59. package/.internal/charts/hierarchy/Sunburst.js +259 -323
  60. package/.internal/charts/hierarchy/Sunburst.js.map +1 -1
  61. package/.internal/charts/hierarchy/Tree.js +49 -69
  62. package/.internal/charts/hierarchy/Tree.js.map +1 -1
  63. package/.internal/charts/hierarchy/Treemap.js +168 -209
  64. package/.internal/charts/hierarchy/Treemap.js.map +1 -1
  65. package/.internal/charts/map/GraticuleSeries.js +49 -70
  66. package/.internal/charts/map/GraticuleSeries.js.map +1 -1
  67. package/.internal/charts/map/MapChart.js +587 -751
  68. package/.internal/charts/map/MapChart.js.map +1 -1
  69. package/.internal/charts/map/MapChartDefaultTheme.js +98 -110
  70. package/.internal/charts/map/MapChartDefaultTheme.js.map +1 -1
  71. package/.internal/charts/map/MapLine.js +165 -196
  72. package/.internal/charts/map/MapLine.js.map +1 -1
  73. package/.internal/charts/map/MapLineSeries.js +130 -197
  74. package/.internal/charts/map/MapLineSeries.js.map +1 -1
  75. package/.internal/charts/map/MapPointSeries.d.ts +7 -2
  76. package/.internal/charts/map/MapPointSeries.d.ts.map +1 -1
  77. package/.internal/charts/map/MapPointSeries.js +265 -342
  78. package/.internal/charts/map/MapPointSeries.js.map +1 -1
  79. package/.internal/charts/map/MapPolygon.js +86 -122
  80. package/.internal/charts/map/MapPolygon.js.map +1 -1
  81. package/.internal/charts/map/MapPolygonSeries.d.ts +6 -1
  82. package/.internal/charts/map/MapPolygonSeries.d.ts.map +1 -1
  83. package/.internal/charts/map/MapPolygonSeries.js +110 -170
  84. package/.internal/charts/map/MapPolygonSeries.js.map +1 -1
  85. package/.internal/charts/map/MapSeries.d.ts +9 -3
  86. package/.internal/charts/map/MapSeries.d.ts.map +1 -1
  87. package/.internal/charts/map/MapSeries.js +212 -303
  88. package/.internal/charts/map/MapSeries.js.map +1 -1
  89. package/.internal/charts/map/MapUtils.js +19 -19
  90. package/.internal/charts/map/MapUtils.js.map +1 -1
  91. package/.internal/charts/map/ZoomControl.js +52 -67
  92. package/.internal/charts/map/ZoomControl.js.map +1 -1
  93. package/.internal/charts/percent/PercentChart.js +23 -40
  94. package/.internal/charts/percent/PercentChart.js.map +1 -1
  95. package/.internal/charts/percent/PercentDefaultTheme.js +196 -208
  96. package/.internal/charts/percent/PercentDefaultTheme.js.map +1 -1
  97. package/.internal/charts/percent/PercentSeries.js +378 -549
  98. package/.internal/charts/percent/PercentSeries.js.map +1 -1
  99. package/.internal/charts/pie/PieChart.js +85 -110
  100. package/.internal/charts/pie/PieChart.js.map +1 -1
  101. package/.internal/charts/pie/PieSeries.js +175 -232
  102. package/.internal/charts/pie/PieSeries.js.map +1 -1
  103. package/.internal/charts/radar/AxisRendererCircular.js +219 -307
  104. package/.internal/charts/radar/AxisRendererCircular.js.map +1 -1
  105. package/.internal/charts/radar/AxisRendererRadial.js +188 -276
  106. package/.internal/charts/radar/AxisRendererRadial.js.map +1 -1
  107. package/.internal/charts/radar/ClockHand.js +89 -104
  108. package/.internal/charts/radar/ClockHand.js.map +1 -1
  109. package/.internal/charts/radar/RadarChart.js +142 -201
  110. package/.internal/charts/radar/RadarChart.js.map +1 -1
  111. package/.internal/charts/radar/RadarColumnSeries.js +118 -170
  112. package/.internal/charts/radar/RadarColumnSeries.js.map +1 -1
  113. package/.internal/charts/radar/RadarCursor.js +147 -220
  114. package/.internal/charts/radar/RadarCursor.js.map +1 -1
  115. package/.internal/charts/radar/RadarDefaultTheme.js +85 -97
  116. package/.internal/charts/radar/RadarDefaultTheme.js.map +1 -1
  117. package/.internal/charts/radar/RadarLineSeries.js +71 -113
  118. package/.internal/charts/radar/RadarLineSeries.js.map +1 -1
  119. package/.internal/charts/radar/SmoothedRadarLineSeries.js +33 -55
  120. package/.internal/charts/radar/SmoothedRadarLineSeries.js.map +1 -1
  121. package/.internal/charts/stock/PanelControls.js +49 -60
  122. package/.internal/charts/stock/PanelControls.js.map +1 -1
  123. package/.internal/charts/stock/SettingsModal.js +321 -393
  124. package/.internal/charts/stock/SettingsModal.js.map +1 -1
  125. package/.internal/charts/stock/StockChart.d.ts.map +1 -1
  126. package/.internal/charts/stock/StockChart.js +466 -568
  127. package/.internal/charts/stock/StockChart.js.map +1 -1
  128. package/.internal/charts/stock/StockChartDefaultTheme.d.ts.map +1 -1
  129. package/.internal/charts/stock/StockChartDefaultTheme.js +1162 -1162
  130. package/.internal/charts/stock/StockChartDefaultTheme.js.map +1 -1
  131. package/.internal/charts/stock/StockLegend.js +65 -91
  132. package/.internal/charts/stock/StockLegend.js.map +1 -1
  133. package/.internal/charts/stock/StockPanel.js +87 -119
  134. package/.internal/charts/stock/StockPanel.js.map +1 -1
  135. package/.internal/charts/stock/drawing/AverageSeries.d.ts.map +1 -1
  136. package/.internal/charts/stock/drawing/AverageSeries.js +48 -60
  137. package/.internal/charts/stock/drawing/AverageSeries.js.map +1 -1
  138. package/.internal/charts/stock/drawing/CalloutSeries.d.ts +7 -2
  139. package/.internal/charts/stock/drawing/CalloutSeries.d.ts.map +1 -1
  140. package/.internal/charts/stock/drawing/CalloutSeries.js +90 -95
  141. package/.internal/charts/stock/drawing/CalloutSeries.js.map +1 -1
  142. package/.internal/charts/stock/drawing/DoodleSeries.d.ts.map +1 -1
  143. package/.internal/charts/stock/drawing/DoodleSeries.js +82 -122
  144. package/.internal/charts/stock/drawing/DoodleSeries.js.map +1 -1
  145. package/.internal/charts/stock/drawing/DrawingSeries.d.ts +5 -3
  146. package/.internal/charts/stock/drawing/DrawingSeries.d.ts.map +1 -1
  147. package/.internal/charts/stock/drawing/DrawingSeries.js +519 -712
  148. package/.internal/charts/stock/drawing/DrawingSeries.js.map +1 -1
  149. package/.internal/charts/stock/drawing/EllipseSeries.d.ts +3 -0
  150. package/.internal/charts/stock/drawing/EllipseSeries.d.ts.map +1 -1
  151. package/.internal/charts/stock/drawing/EllipseSeries.js +258 -307
  152. package/.internal/charts/stock/drawing/EllipseSeries.js.map +1 -1
  153. package/.internal/charts/stock/drawing/FibonacciSeries.d.ts +2 -3
  154. package/.internal/charts/stock/drawing/FibonacciSeries.d.ts.map +1 -1
  155. package/.internal/charts/stock/drawing/FibonacciSeries.js +189 -250
  156. package/.internal/charts/stock/drawing/FibonacciSeries.js.map +1 -1
  157. package/.internal/charts/stock/drawing/FibonacciTimezoneSeries.d.ts.map +1 -1
  158. package/.internal/charts/stock/drawing/FibonacciTimezoneSeries.js +108 -103
  159. package/.internal/charts/stock/drawing/FibonacciTimezoneSeries.js.map +1 -1
  160. package/.internal/charts/stock/drawing/HorizontalLineSeries.d.ts +4 -2
  161. package/.internal/charts/stock/drawing/HorizontalLineSeries.d.ts.map +1 -1
  162. package/.internal/charts/stock/drawing/HorizontalLineSeries.js +64 -84
  163. package/.internal/charts/stock/drawing/HorizontalLineSeries.js.map +1 -1
  164. package/.internal/charts/stock/drawing/HorizontalRaySeries.d.ts +2 -1
  165. package/.internal/charts/stock/drawing/HorizontalRaySeries.d.ts.map +1 -1
  166. package/.internal/charts/stock/drawing/HorizontalRaySeries.js +57 -92
  167. package/.internal/charts/stock/drawing/HorizontalRaySeries.js.map +1 -1
  168. package/.internal/charts/stock/drawing/IconSeries.d.ts +2 -4
  169. package/.internal/charts/stock/drawing/IconSeries.d.ts.map +1 -1
  170. package/.internal/charts/stock/drawing/IconSeries.js +112 -112
  171. package/.internal/charts/stock/drawing/IconSeries.js.map +1 -1
  172. package/.internal/charts/stock/drawing/LabelSeries.d.ts +5 -2
  173. package/.internal/charts/stock/drawing/LabelSeries.d.ts.map +1 -1
  174. package/.internal/charts/stock/drawing/LabelSeries.js +151 -172
  175. package/.internal/charts/stock/drawing/LabelSeries.js.map +1 -1
  176. package/.internal/charts/stock/drawing/PolylineSeries.d.ts +1 -0
  177. package/.internal/charts/stock/drawing/PolylineSeries.d.ts.map +1 -1
  178. package/.internal/charts/stock/drawing/PolylineSeries.js +101 -122
  179. package/.internal/charts/stock/drawing/PolylineSeries.js.map +1 -1
  180. package/.internal/charts/stock/drawing/QuadrantLineSeries.d.ts.map +1 -1
  181. package/.internal/charts/stock/drawing/QuadrantLineSeries.js +115 -149
  182. package/.internal/charts/stock/drawing/QuadrantLineSeries.js.map +1 -1
  183. package/.internal/charts/stock/drawing/RectangleSeries.d.ts.map +1 -1
  184. package/.internal/charts/stock/drawing/RectangleSeries.js +117 -155
  185. package/.internal/charts/stock/drawing/RectangleSeries.js.map +1 -1
  186. package/.internal/charts/stock/drawing/RegressionSeries.d.ts.map +1 -1
  187. package/.internal/charts/stock/drawing/RegressionSeries.js +64 -82
  188. package/.internal/charts/stock/drawing/RegressionSeries.js.map +1 -1
  189. package/.internal/charts/stock/drawing/SimpleLineSeries.d.ts +6 -2
  190. package/.internal/charts/stock/drawing/SimpleLineSeries.d.ts.map +1 -1
  191. package/.internal/charts/stock/drawing/SimpleLineSeries.js +233 -303
  192. package/.internal/charts/stock/drawing/SimpleLineSeries.js.map +1 -1
  193. package/.internal/charts/stock/drawing/TrendLineSeries.d.ts.map +1 -1
  194. package/.internal/charts/stock/drawing/TrendLineSeries.js +40 -57
  195. package/.internal/charts/stock/drawing/TrendLineSeries.js.map +1 -1
  196. package/.internal/charts/stock/drawing/VerticalLineSeries.d.ts +3 -1
  197. package/.internal/charts/stock/drawing/VerticalLineSeries.d.ts.map +1 -1
  198. package/.internal/charts/stock/drawing/VerticalLineSeries.js +63 -79
  199. package/.internal/charts/stock/drawing/VerticalLineSeries.js.map +1 -1
  200. package/.internal/charts/stock/indicators/AccumulationDistribution.js +68 -88
  201. package/.internal/charts/stock/indicators/AccumulationDistribution.js.map +1 -1
  202. package/.internal/charts/stock/indicators/AccumulativeSwingIndex.js +107 -127
  203. package/.internal/charts/stock/indicators/AccumulativeSwingIndex.js.map +1 -1
  204. package/.internal/charts/stock/indicators/Aroon.js +85 -110
  205. package/.internal/charts/stock/indicators/Aroon.js.map +1 -1
  206. package/.internal/charts/stock/indicators/AwesomeOscillator.js +68 -88
  207. package/.internal/charts/stock/indicators/AwesomeOscillator.js.map +1 -1
  208. package/.internal/charts/stock/indicators/BollingerBands.js +109 -135
  209. package/.internal/charts/stock/indicators/BollingerBands.js.map +1 -1
  210. package/.internal/charts/stock/indicators/ChaikinMoneyFlow.js +77 -97
  211. package/.internal/charts/stock/indicators/ChaikinMoneyFlow.js.map +1 -1
  212. package/.internal/charts/stock/indicators/ChaikinOscillator.js +75 -95
  213. package/.internal/charts/stock/indicators/ChaikinOscillator.js.map +1 -1
  214. package/.internal/charts/stock/indicators/ChartIndicator.js +86 -102
  215. package/.internal/charts/stock/indicators/ChartIndicator.js.map +1 -1
  216. package/.internal/charts/stock/indicators/CommodityChannelIndex.js +136 -161
  217. package/.internal/charts/stock/indicators/CommodityChannelIndex.js.map +1 -1
  218. package/.internal/charts/stock/indicators/DisparityIndex.js +69 -89
  219. package/.internal/charts/stock/indicators/DisparityIndex.js.map +1 -1
  220. package/.internal/charts/stock/indicators/Indicator.d.ts +1 -2
  221. package/.internal/charts/stock/indicators/Indicator.d.ts.map +1 -1
  222. package/.internal/charts/stock/indicators/Indicator.js +286 -383
  223. package/.internal/charts/stock/indicators/Indicator.js.map +1 -1
  224. package/.internal/charts/stock/indicators/MACD.js +129 -159
  225. package/.internal/charts/stock/indicators/MACD.js.map +1 -1
  226. package/.internal/charts/stock/indicators/MedianPrice.js +56 -71
  227. package/.internal/charts/stock/indicators/MedianPrice.js.map +1 -1
  228. package/.internal/charts/stock/indicators/MovingAverage.js +95 -115
  229. package/.internal/charts/stock/indicators/MovingAverage.js.map +1 -1
  230. package/.internal/charts/stock/indicators/MovingAverageDeviation.js +93 -118
  231. package/.internal/charts/stock/indicators/MovingAverageDeviation.js.map +1 -1
  232. package/.internal/charts/stock/indicators/MovingAverageEnvelope.js +114 -144
  233. package/.internal/charts/stock/indicators/MovingAverageEnvelope.js.map +1 -1
  234. package/.internal/charts/stock/indicators/OnBalanceVolume.js +65 -85
  235. package/.internal/charts/stock/indicators/OnBalanceVolume.js.map +1 -1
  236. package/.internal/charts/stock/indicators/RelativeStrengthIndex.js +162 -187
  237. package/.internal/charts/stock/indicators/RelativeStrengthIndex.js.map +1 -1
  238. package/.internal/charts/stock/indicators/StandardDeviation.js +56 -72
  239. package/.internal/charts/stock/indicators/StandardDeviation.js.map +1 -1
  240. package/.internal/charts/stock/indicators/StochasticOscillator.js +142 -173
  241. package/.internal/charts/stock/indicators/StochasticOscillator.js.map +1 -1
  242. package/.internal/charts/stock/indicators/Trix.js +90 -120
  243. package/.internal/charts/stock/indicators/Trix.js.map +1 -1
  244. package/.internal/charts/stock/indicators/TypicalPrice.js +56 -71
  245. package/.internal/charts/stock/indicators/TypicalPrice.js.map +1 -1
  246. package/.internal/charts/stock/indicators/VWAP.js +78 -98
  247. package/.internal/charts/stock/indicators/VWAP.js.map +1 -1
  248. package/.internal/charts/stock/indicators/Volume.js +55 -75
  249. package/.internal/charts/stock/indicators/Volume.js.map +1 -1
  250. package/.internal/charts/stock/indicators/WilliamsR.js +138 -163
  251. package/.internal/charts/stock/indicators/WilliamsR.js.map +1 -1
  252. package/.internal/charts/stock/indicators/ZigZag.js +141 -161
  253. package/.internal/charts/stock/indicators/ZigZag.js.map +1 -1
  254. package/.internal/charts/stock/toolbar/ColorControl.js +78 -101
  255. package/.internal/charts/stock/toolbar/ColorControl.js.map +1 -1
  256. package/.internal/charts/stock/toolbar/ComparisonControl.js +16 -28
  257. package/.internal/charts/stock/toolbar/ComparisonControl.js.map +1 -1
  258. package/.internal/charts/stock/toolbar/DateRangeSelector.js +1157 -345
  259. package/.internal/charts/stock/toolbar/DateRangeSelector.js.map +1 -1
  260. package/.internal/charts/stock/toolbar/DrawingControl.d.ts +26 -0
  261. package/.internal/charts/stock/toolbar/DrawingControl.d.ts.map +1 -1
  262. package/.internal/charts/stock/toolbar/DrawingControl.js +754 -709
  263. package/.internal/charts/stock/toolbar/DrawingControl.js.map +1 -1
  264. package/.internal/charts/stock/toolbar/DrawingToolControl.js +80 -119
  265. package/.internal/charts/stock/toolbar/DrawingToolControl.js.map +1 -1
  266. package/.internal/charts/stock/toolbar/Dropdown.js +102 -150
  267. package/.internal/charts/stock/toolbar/Dropdown.js.map +1 -1
  268. package/.internal/charts/stock/toolbar/DropdownColors.js +92 -141
  269. package/.internal/charts/stock/toolbar/DropdownColors.js.map +1 -1
  270. package/.internal/charts/stock/toolbar/DropdownList.js +186 -249
  271. package/.internal/charts/stock/toolbar/DropdownList.js.map +1 -1
  272. package/.internal/charts/stock/toolbar/DropdownListControl.js +117 -150
  273. package/.internal/charts/stock/toolbar/DropdownListControl.js.map +1 -1
  274. package/.internal/charts/stock/toolbar/IconControl.js +81 -120
  275. package/.internal/charts/stock/toolbar/IconControl.js.map +1 -1
  276. package/.internal/charts/stock/toolbar/IndicatorControl.d.ts +23 -1
  277. package/.internal/charts/stock/toolbar/IndicatorControl.d.ts.map +1 -1
  278. package/.internal/charts/stock/toolbar/IndicatorControl.js +352 -297
  279. package/.internal/charts/stock/toolbar/IndicatorControl.js.map +1 -1
  280. package/.internal/charts/stock/toolbar/IntervalControl.js +16 -28
  281. package/.internal/charts/stock/toolbar/IntervalControl.js.map +1 -1
  282. package/.internal/charts/stock/toolbar/PeriodSelector.js +141 -189
  283. package/.internal/charts/stock/toolbar/PeriodSelector.js.map +1 -1
  284. package/.internal/charts/stock/toolbar/ResetControl.js +26 -44
  285. package/.internal/charts/stock/toolbar/ResetControl.js.map +1 -1
  286. package/.internal/charts/stock/toolbar/SeriesTypeControl.js +14 -21
  287. package/.internal/charts/stock/toolbar/SeriesTypeControl.js.map +1 -1
  288. package/.internal/charts/stock/toolbar/SettingsControl.js +97 -140
  289. package/.internal/charts/stock/toolbar/SettingsControl.js.map +1 -1
  290. package/.internal/charts/stock/toolbar/StockControl.js +114 -177
  291. package/.internal/charts/stock/toolbar/StockControl.js.map +1 -1
  292. package/.internal/charts/stock/toolbar/StockIcons.js +67 -81
  293. package/.internal/charts/stock/toolbar/StockIcons.js.map +1 -1
  294. package/.internal/charts/stock/toolbar/StockToolbar.js +63 -94
  295. package/.internal/charts/stock/toolbar/StockToolbar.js.map +1 -1
  296. package/.internal/charts/stock/toolbar/StockToolbarCSS.js +11 -11
  297. package/.internal/charts/stock/toolbar/StockToolbarCSS.js.map +1 -1
  298. package/.internal/charts/venn/Venn.js +276 -373
  299. package/.internal/charts/venn/Venn.js.map +1 -1
  300. package/.internal/charts/venn/VennDefaultTheme.js +18 -30
  301. package/.internal/charts/venn/VennDefaultTheme.js.map +1 -1
  302. package/.internal/charts/wordcloud/WordCloud.js +381 -452
  303. package/.internal/charts/wordcloud/WordCloud.js.map +1 -1
  304. package/.internal/charts/wordcloud/WordCloudDefaultTheme.js +35 -48
  305. package/.internal/charts/wordcloud/WordCloudDefaultTheme.js.map +1 -1
  306. package/.internal/charts/xy/XYChart.js +956 -1136
  307. package/.internal/charts/xy/XYChart.js.map +1 -1
  308. package/.internal/charts/xy/XYChartDefaultTheme.d.ts.map +1 -1
  309. package/.internal/charts/xy/XYChartDefaultTheme.js +597 -604
  310. package/.internal/charts/xy/XYChartDefaultTheme.js.map +1 -1
  311. package/.internal/charts/xy/XYChartScrollbar.js +78 -95
  312. package/.internal/charts/xy/XYChartScrollbar.js.map +1 -1
  313. package/.internal/charts/xy/XYCursor.d.ts.map +1 -1
  314. package/.internal/charts/xy/XYCursor.js +468 -608
  315. package/.internal/charts/xy/XYCursor.js.map +1 -1
  316. package/.internal/charts/xy/axes/Axis.d.ts +0 -2
  317. package/.internal/charts/xy/axes/Axis.d.ts.map +1 -1
  318. package/.internal/charts/xy/axes/Axis.js +509 -726
  319. package/.internal/charts/xy/axes/Axis.js.map +1 -1
  320. package/.internal/charts/xy/axes/AxisBullet.js +30 -40
  321. package/.internal/charts/xy/axes/AxisBullet.js.map +1 -1
  322. package/.internal/charts/xy/axes/AxisLabel.js +17 -22
  323. package/.internal/charts/xy/axes/AxisLabel.js.map +1 -1
  324. package/.internal/charts/xy/axes/AxisLabelRadial.js +17 -22
  325. package/.internal/charts/xy/axes/AxisLabelRadial.js.map +1 -1
  326. package/.internal/charts/xy/axes/AxisRenderer.js +186 -302
  327. package/.internal/charts/xy/axes/AxisRenderer.js.map +1 -1
  328. package/.internal/charts/xy/axes/AxisRendererX.js +308 -400
  329. package/.internal/charts/xy/axes/AxisRendererX.js.map +1 -1
  330. package/.internal/charts/xy/axes/AxisRendererY.js +319 -421
  331. package/.internal/charts/xy/axes/AxisRendererY.js.map +1 -1
  332. package/.internal/charts/xy/axes/AxisTick.js +17 -22
  333. package/.internal/charts/xy/axes/AxisTick.js.map +1 -1
  334. package/.internal/charts/xy/axes/CategoryAxis.js +312 -454
  335. package/.internal/charts/xy/axes/CategoryAxis.js.map +1 -1
  336. package/.internal/charts/xy/axes/CategoryDateAxis.js +136 -167
  337. package/.internal/charts/xy/axes/CategoryDateAxis.js.map +1 -1
  338. package/.internal/charts/xy/axes/DateAxis.js +579 -758
  339. package/.internal/charts/xy/axes/DateAxis.js.map +1 -1
  340. package/.internal/charts/xy/axes/DurationAxis.js +92 -128
  341. package/.internal/charts/xy/axes/DurationAxis.js.map +1 -1
  342. package/.internal/charts/xy/axes/GaplessDateAxis.js +207 -254
  343. package/.internal/charts/xy/axes/GaplessDateAxis.js.map +1 -1
  344. package/.internal/charts/xy/axes/Grid.js +19 -31
  345. package/.internal/charts/xy/axes/Grid.js.map +1 -1
  346. package/.internal/charts/xy/axes/ValueAxis.js +848 -1041
  347. package/.internal/charts/xy/axes/ValueAxis.js.map +1 -1
  348. package/.internal/charts/xy/series/BaseColumnSeries.js +480 -576
  349. package/.internal/charts/xy/series/BaseColumnSeries.js.map +1 -1
  350. package/.internal/charts/xy/series/Candlestick.js +27 -44
  351. package/.internal/charts/xy/series/Candlestick.js.map +1 -1
  352. package/.internal/charts/xy/series/CandlestickSeries.js +114 -140
  353. package/.internal/charts/xy/series/CandlestickSeries.js.map +1 -1
  354. package/.internal/charts/xy/series/ColumnSeries.js +33 -49
  355. package/.internal/charts/xy/series/ColumnSeries.js.map +1 -1
  356. package/.internal/charts/xy/series/LineSeries.js +447 -548
  357. package/.internal/charts/xy/series/LineSeries.js.map +1 -1
  358. package/.internal/charts/xy/series/OHLC.js +36 -48
  359. package/.internal/charts/xy/series/OHLC.js.map +1 -1
  360. package/.internal/charts/xy/series/OHLCSeries.js +32 -48
  361. package/.internal/charts/xy/series/OHLCSeries.js.map +1 -1
  362. package/.internal/charts/xy/series/SmoothedXLineSeries.js +23 -40
  363. package/.internal/charts/xy/series/SmoothedXLineSeries.js.map +1 -1
  364. package/.internal/charts/xy/series/SmoothedXYLineSeries.js +23 -40
  365. package/.internal/charts/xy/series/SmoothedXYLineSeries.js.map +1 -1
  366. package/.internal/charts/xy/series/SmoothedYLineSeries.js +23 -40
  367. package/.internal/charts/xy/series/SmoothedYLineSeries.js.map +1 -1
  368. package/.internal/charts/xy/series/StepLineSeries.js +114 -131
  369. package/.internal/charts/xy/series/StepLineSeries.js.map +1 -1
  370. package/.internal/charts/xy/series/XYSeries.d.ts +1 -1
  371. package/.internal/charts/xy/series/XYSeries.d.ts.map +1 -1
  372. package/.internal/charts/xy/series/XYSeries.js +939 -1222
  373. package/.internal/charts/xy/series/XYSeries.js.map +1 -1
  374. package/.internal/core/Classes.d.ts +11 -7
  375. package/.internal/core/Classes.d.ts.map +1 -1
  376. package/.internal/core/Classes.js.map +1 -1
  377. package/.internal/core/Registry.d.ts.map +1 -1
  378. package/.internal/core/Registry.js +6 -8
  379. package/.internal/core/Registry.js.map +1 -1
  380. package/.internal/core/Root.d.ts +20 -0
  381. package/.internal/core/Root.d.ts.map +1 -1
  382. package/.internal/core/Root.js +1006 -1241
  383. package/.internal/core/Root.js.map +1 -1
  384. package/.internal/core/Theme.js +38 -67
  385. package/.internal/core/Theme.js.map +1 -1
  386. package/.internal/core/render/Bullet.js +34 -49
  387. package/.internal/core/render/Bullet.js.map +1 -1
  388. package/.internal/core/render/Button.js +47 -64
  389. package/.internal/core/render/Button.js.map +1 -1
  390. package/.internal/core/render/Chart.js +20 -25
  391. package/.internal/core/render/Chart.js.map +1 -1
  392. package/.internal/core/render/Circle.js +24 -41
  393. package/.internal/core/render/Circle.js.map +1 -1
  394. package/.internal/core/render/Component.js +239 -384
  395. package/.internal/core/render/Component.js.map +1 -1
  396. package/.internal/core/render/Container.d.ts.map +1 -1
  397. package/.internal/core/render/Container.js +444 -548
  398. package/.internal/core/render/Container.js.map +1 -1
  399. package/.internal/core/render/Ellipse.js +24 -41
  400. package/.internal/core/render/Ellipse.js.map +1 -1
  401. package/.internal/core/render/Graphics.d.ts.map +1 -1
  402. package/.internal/core/render/Graphics.js +197 -215
  403. package/.internal/core/render/Graphics.js.map +1 -1
  404. package/.internal/core/render/GridLayout.js +102 -125
  405. package/.internal/core/render/GridLayout.js.map +1 -1
  406. package/.internal/core/render/HeatLegend.js +129 -154
  407. package/.internal/core/render/HeatLegend.js.map +1 -1
  408. package/.internal/core/render/HorizontalLayout.js +79 -91
  409. package/.internal/core/render/HorizontalLayout.js.map +1 -1
  410. package/.internal/core/render/Label.js +109 -150
  411. package/.internal/core/render/Label.js.map +1 -1
  412. package/.internal/core/render/Layout.js +14 -21
  413. package/.internal/core/render/Layout.js.map +1 -1
  414. package/.internal/core/render/Legend.js +230 -282
  415. package/.internal/core/render/Legend.js.map +1 -1
  416. package/.internal/core/render/Line.js +37 -54
  417. package/.internal/core/render/Line.js.map +1 -1
  418. package/.internal/core/render/MonotoneXTension.js +58 -85
  419. package/.internal/core/render/MonotoneXTension.js.map +1 -1
  420. package/.internal/core/render/MonotoneYTension.js +59 -88
  421. package/.internal/core/render/MonotoneYTension.js.map +1 -1
  422. package/.internal/core/render/Picture.js +92 -113
  423. package/.internal/core/render/Picture.js.map +1 -1
  424. package/.internal/core/render/PointedRectangle.js +94 -111
  425. package/.internal/core/render/PointedRectangle.js.map +1 -1
  426. package/.internal/core/render/RadialLabel.js +119 -158
  427. package/.internal/core/render/RadialLabel.js.map +1 -1
  428. package/.internal/core/render/RadialText.js +47 -62
  429. package/.internal/core/render/RadialText.js.map +1 -1
  430. package/.internal/core/render/Rectangle.js +31 -58
  431. package/.internal/core/render/Rectangle.js.map +1 -1
  432. package/.internal/core/render/RoundedRectangle.js +55 -72
  433. package/.internal/core/render/RoundedRectangle.js.map +1 -1
  434. package/.internal/core/render/Scrollbar.js +292 -349
  435. package/.internal/core/render/Scrollbar.js.map +1 -1
  436. package/.internal/core/render/SerialChart.js +64 -85
  437. package/.internal/core/render/SerialChart.js.map +1 -1
  438. package/.internal/core/render/Series.js +472 -660
  439. package/.internal/core/render/Series.js.map +1 -1
  440. package/.internal/core/render/Slice.js +83 -103
  441. package/.internal/core/render/Slice.js.map +1 -1
  442. package/.internal/core/render/Slider.js +25 -42
  443. package/.internal/core/render/Slider.js.map +1 -1
  444. package/.internal/core/render/Sprite.d.ts +17 -1
  445. package/.internal/core/render/Sprite.d.ts.map +1 -1
  446. package/.internal/core/render/Sprite.js +1307 -1777
  447. package/.internal/core/render/Sprite.js.map +1 -1
  448. package/.internal/core/render/SpriteResizer.js +157 -199
  449. package/.internal/core/render/SpriteResizer.js.map +1 -1
  450. package/.internal/core/render/Star.js +37 -54
  451. package/.internal/core/render/Star.js.map +1 -1
  452. package/.internal/core/render/Text.d.ts.map +1 -1
  453. package/.internal/core/render/Text.js +145 -182
  454. package/.internal/core/render/Text.js.map +1 -1
  455. package/.internal/core/render/Tick.js +14 -21
  456. package/.internal/core/render/Tick.js.map +1 -1
  457. package/.internal/core/render/Tooltip.d.ts +0 -1
  458. package/.internal/core/render/Tooltip.d.ts.map +1 -1
  459. package/.internal/core/render/Tooltip.js +272 -333
  460. package/.internal/core/render/Tooltip.js.map +1 -1
  461. package/.internal/core/render/Triangle.js +38 -65
  462. package/.internal/core/render/Triangle.js.map +1 -1
  463. package/.internal/core/render/VerticalLayout.js +79 -91
  464. package/.internal/core/render/VerticalLayout.js.map +1 -1
  465. package/.internal/core/render/backend/CanvasRenderer.d.ts +2 -2
  466. package/.internal/core/render/backend/CanvasRenderer.d.ts.map +1 -1
  467. package/.internal/core/render/backend/CanvasRenderer.js +2806 -3721
  468. package/.internal/core/render/backend/CanvasRenderer.js.map +1 -1
  469. package/.internal/core/render/backend/Renderer.d.ts +1 -0
  470. package/.internal/core/render/backend/Renderer.d.ts.map +1 -1
  471. package/.internal/core/render/backend/Renderer.js.map +1 -1
  472. package/.internal/core/render/gradients/Gradient.js +45 -72
  473. package/.internal/core/render/gradients/Gradient.js.map +1 -1
  474. package/.internal/core/render/gradients/LinearGradient.js +53 -65
  475. package/.internal/core/render/gradients/LinearGradient.js.map +1 -1
  476. package/.internal/core/render/gradients/RadialGradient.js +69 -81
  477. package/.internal/core/render/gradients/RadialGradient.js.map +1 -1
  478. package/.internal/core/render/patterns/CirclePattern.js +64 -81
  479. package/.internal/core/render/patterns/CirclePattern.js.map +1 -1
  480. package/.internal/core/render/patterns/LinePattern.js +49 -66
  481. package/.internal/core/render/patterns/LinePattern.js.map +1 -1
  482. package/.internal/core/render/patterns/PathPattern.js +72 -89
  483. package/.internal/core/render/patterns/PathPattern.js.map +1 -1
  484. package/.internal/core/render/patterns/Pattern.js +54 -83
  485. package/.internal/core/render/patterns/Pattern.js.map +1 -1
  486. package/.internal/core/render/patterns/PicturePattern.js +69 -90
  487. package/.internal/core/render/patterns/PicturePattern.js.map +1 -1
  488. package/.internal/core/render/patterns/RectanglePattern.js +65 -82
  489. package/.internal/core/render/patterns/RectanglePattern.js.map +1 -1
  490. package/.internal/core/util/Animation.js +102 -151
  491. package/.internal/core/util/Animation.js.map +1 -1
  492. package/.internal/core/util/Array.js +48 -49
  493. package/.internal/core/util/Array.js.map +1 -1
  494. package/.internal/core/util/AsyncPending.js +15 -15
  495. package/.internal/core/util/AsyncPending.js.map +1 -1
  496. package/.internal/core/util/Benchmark.js +37 -55
  497. package/.internal/core/util/Benchmark.js.map +1 -1
  498. package/.internal/core/util/Children.js +42 -67
  499. package/.internal/core/util/Children.js.map +1 -1
  500. package/.internal/core/util/Color.js +110 -206
  501. package/.internal/core/util/Color.js.map +1 -1
  502. package/.internal/core/util/ColorSet.js +73 -110
  503. package/.internal/core/util/ColorSet.js.map +1 -1
  504. package/.internal/core/util/Counter.js +13 -25
  505. package/.internal/core/util/Counter.js.map +1 -1
  506. package/.internal/core/util/Data.js +28 -70
  507. package/.internal/core/util/Data.js.map +1 -1
  508. package/.internal/core/util/DataParser.js +145 -178
  509. package/.internal/core/util/DataParser.js.map +1 -1
  510. package/.internal/core/util/DataProcessor.js +89 -144
  511. package/.internal/core/util/DataProcessor.js.map +1 -1
  512. package/.internal/core/util/DateFormatter.d.ts.map +1 -1
  513. package/.internal/core/util/DateFormatter.js +795 -901
  514. package/.internal/core/util/DateFormatter.js.map +1 -1
  515. package/.internal/core/util/Disposer.js +82 -159
  516. package/.internal/core/util/Disposer.js.map +1 -1
  517. package/.internal/core/util/Draw.js +27 -27
  518. package/.internal/core/util/Draw.js.map +1 -1
  519. package/.internal/core/util/DurationFormatter.js +343 -409
  520. package/.internal/core/util/DurationFormatter.js.map +1 -1
  521. package/.internal/core/util/Ease.js +6 -6
  522. package/.internal/core/util/Entity.d.ts +5 -1
  523. package/.internal/core/util/Entity.d.ts.map +1 -1
  524. package/.internal/core/util/Entity.js +869 -1442
  525. package/.internal/core/util/Entity.js.map +1 -1
  526. package/.internal/core/util/EventDispatcher.js +216 -346
  527. package/.internal/core/util/EventDispatcher.js.map +1 -1
  528. package/.internal/core/util/InterfaceColors.js +14 -21
  529. package/.internal/core/util/InterfaceColors.js.map +1 -1
  530. package/.internal/core/util/Language.js +63 -123
  531. package/.internal/core/util/Language.js.map +1 -1
  532. package/.internal/core/util/List.js +244 -441
  533. package/.internal/core/util/List.js.map +1 -1
  534. package/.internal/core/util/Math.js +35 -35
  535. package/.internal/core/util/Math.js.map +1 -1
  536. package/.internal/core/util/Matrix.js +56 -95
  537. package/.internal/core/util/Matrix.js.map +1 -1
  538. package/.internal/core/util/Modal.js +103 -147
  539. package/.internal/core/util/Modal.js.map +1 -1
  540. package/.internal/core/util/Net.js +19 -19
  541. package/.internal/core/util/Net.js.map +1 -1
  542. package/.internal/core/util/NumberFormatter.js +393 -442
  543. package/.internal/core/util/NumberFormatter.js.map +1 -1
  544. package/.internal/core/util/Object.js +4 -4
  545. package/.internal/core/util/Object.js.map +1 -1
  546. package/.internal/core/util/Order.js +5 -5
  547. package/.internal/core/util/Order.js.map +1 -1
  548. package/.internal/core/util/Percent.js +65 -90
  549. package/.internal/core/util/Percent.js.map +1 -1
  550. package/.internal/core/util/PopulateString.js +28 -28
  551. package/.internal/core/util/PopulateString.js.map +1 -1
  552. package/.internal/core/util/ResizeSensor.js +76 -116
  553. package/.internal/core/util/ResizeSensor.js.map +1 -1
  554. package/.internal/core/util/States.js +116 -188
  555. package/.internal/core/util/States.js.map +1 -1
  556. package/.internal/core/util/Template.js +203 -364
  557. package/.internal/core/util/Template.js.map +1 -1
  558. package/.internal/core/util/TextFormatter.js +148 -184
  559. package/.internal/core/util/TextFormatter.js.map +1 -1
  560. package/.internal/core/util/Throttler.js +18 -26
  561. package/.internal/core/util/Throttler.js.map +1 -1
  562. package/.internal/core/util/Time.d.ts.map +1 -1
  563. package/.internal/core/util/Time.js +61 -63
  564. package/.internal/core/util/Time.js.map +1 -1
  565. package/.internal/core/util/Timezone.js +35 -57
  566. package/.internal/core/util/Timezone.js.map +1 -1
  567. package/.internal/core/util/Type.js +12 -12
  568. package/.internal/core/util/Type.js.map +1 -1
  569. package/.internal/core/util/Utils.d.ts +17 -0
  570. package/.internal/core/util/Utils.d.ts.map +1 -1
  571. package/.internal/core/util/Utils.js +166 -182
  572. package/.internal/core/util/Utils.js.map +1 -1
  573. package/.internal/core/util/Value.js +14 -30
  574. package/.internal/core/util/Value.js.map +1 -1
  575. package/.internal/plugins/exporting/Annotator.js +139 -265
  576. package/.internal/plugins/exporting/Annotator.js.map +1 -1
  577. package/.internal/plugins/exporting/Exporting.js +1216 -1614
  578. package/.internal/plugins/exporting/Exporting.js.map +1 -1
  579. package/.internal/plugins/exporting/ExportingCSS.js +5 -5
  580. package/.internal/plugins/exporting/ExportingCSS.js.map +1 -1
  581. package/.internal/plugins/exporting/ExportingMenu.js +337 -405
  582. package/.internal/plugins/exporting/ExportingMenu.js.map +1 -1
  583. package/.internal/plugins/json/Classes-script.d.ts +16 -0
  584. package/.internal/plugins/json/Classes-script.d.ts.map +1 -1
  585. package/.internal/plugins/json/Classes-script.js +202 -194
  586. package/.internal/plugins/json/Classes-script.js.map +1 -1
  587. package/.internal/plugins/json/Classes.d.ts +16 -0
  588. package/.internal/plugins/json/Classes.d.ts.map +1 -1
  589. package/.internal/plugins/json/Classes.js +202 -194
  590. package/.internal/plugins/json/Classes.js.map +1 -1
  591. package/.internal/plugins/json/Json.d.ts +42 -2
  592. package/.internal/plugins/json/Json.d.ts.map +1 -1
  593. package/.internal/plugins/json/Json.js +391 -278
  594. package/.internal/plugins/json/Json.js.map +1 -1
  595. package/.internal/plugins/json/Serializer.d.ts +62 -0
  596. package/.internal/plugins/json/Serializer.d.ts.map +1 -0
  597. package/.internal/plugins/json/Serializer.js +137 -0
  598. package/.internal/plugins/json/Serializer.js.map +1 -0
  599. package/.internal/plugins/sliceGrouper/SliceGrouper.js +159 -202
  600. package/.internal/plugins/sliceGrouper/SliceGrouper.js.map +1 -1
  601. package/.internal/themes/AnimatedTheme.js +20 -32
  602. package/.internal/themes/AnimatedTheme.js.map +1 -1
  603. package/.internal/themes/DarkTheme.js +28 -40
  604. package/.internal/themes/DarkTheme.js.map +1 -1
  605. package/.internal/themes/DatavizTheme.js +12 -24
  606. package/.internal/themes/DatavizTheme.js.map +1 -1
  607. package/.internal/themes/DefaultTheme.d.ts.map +1 -1
  608. package/.internal/themes/DefaultTheme.js +803 -813
  609. package/.internal/themes/DefaultTheme.js.map +1 -1
  610. package/.internal/themes/FrozenTheme.js +19 -31
  611. package/.internal/themes/FrozenTheme.js.map +1 -1
  612. package/.internal/themes/KellyTheme.js +31 -43
  613. package/.internal/themes/KellyTheme.js.map +1 -1
  614. package/.internal/themes/MaterialTheme.js +28 -40
  615. package/.internal/themes/MaterialTheme.js.map +1 -1
  616. package/.internal/themes/MicrochartTheme.js +67 -79
  617. package/.internal/themes/MicrochartTheme.js.map +1 -1
  618. package/.internal/themes/MoonriseTheme.js +19 -31
  619. package/.internal/themes/MoonriseTheme.js.map +1 -1
  620. package/.internal/themes/ResponsiveTheme.js +613 -790
  621. package/.internal/themes/ResponsiveTheme.js.map +1 -1
  622. package/.internal/themes/SpiritedTheme.js +19 -31
  623. package/.internal/themes/SpiritedTheme.js.map +1 -1
  624. package/CHANGELOG.md +28 -0
  625. package/examples/javascript/flow-chord/package.json +1 -1
  626. package/examples/javascript/flow-chord-directed/package.json +1 -1
  627. package/examples/javascript/flow-chord-non-ribbon/package.json +1 -1
  628. package/examples/javascript/flow-sankey/package.json +1 -1
  629. package/examples/javascript/gauge/package.json +1 -1
  630. package/examples/javascript/gauge-bands/index.js +3 -1
  631. package/examples/javascript/gauge-bands/package.json +1 -1
  632. package/examples/javascript/hierarchy-force-directed/package.json +1 -1
  633. package/examples/javascript/hierarchy-pack/package.json +1 -1
  634. package/examples/javascript/hierarchy-partition/package.json +1 -1
  635. package/examples/javascript/hierarchy-sunburst/package.json +1 -1
  636. package/examples/javascript/hierarchy-tree/package.json +1 -1
  637. package/examples/javascript/hierarchy-treemap/package.json +1 -1
  638. package/examples/javascript/jest/package.json +1 -1
  639. package/examples/javascript/{json → json-pie}/README.md +0 -0
  640. package/examples/javascript/{json → json-pie}/index.css +0 -0
  641. package/examples/javascript/json-pie/index.html +12 -0
  642. package/examples/javascript/json-pie/index.js +77 -0
  643. package/examples/javascript/json-pie/package.json +16 -0
  644. package/examples/javascript/{json → json-pie}/webpack.config.js +0 -0
  645. package/examples/{typescript/json → javascript/json-xy}/README.md +0 -0
  646. package/examples/{typescript/json → javascript/json-xy}/index.css +0 -0
  647. package/examples/{typescript/json → javascript/json-xy}/index.html +1 -1
  648. package/examples/javascript/json-xy/index.js +203 -0
  649. package/examples/javascript/{json → json-xy}/package.json +2 -2
  650. package/examples/javascript/json-xy/webpack.config.js +38 -0
  651. package/examples/javascript/map-animating-along-lines/package.json +1 -1
  652. package/examples/javascript/map-day-and-night/package.json +1 -1
  653. package/examples/javascript/map-globe-rotate-to-country/package.json +1 -1
  654. package/examples/javascript/map-globe-with-projected-circles/package.json +1 -1
  655. package/examples/javascript/map-with-bubbles/package.json +1 -1
  656. package/examples/javascript/map-zoom-to-country/package.json +1 -1
  657. package/examples/javascript/misc-40-charts/package.json +1 -1
  658. package/examples/javascript/misc-microchart-grid/package.json +1 -1
  659. package/examples/javascript/pie-chart/package.json +1 -1
  660. package/examples/javascript/pie-donut-chart/package.json +1 -1
  661. package/examples/javascript/pie-variable-radius/package.json +1 -1
  662. package/examples/javascript/radar-column-iwatch-style/package.json +1 -1
  663. package/examples/javascript/radar-heat-map/index.js +33 -33
  664. package/examples/javascript/radar-heat-map/package.json +1 -1
  665. package/examples/javascript/radar-line/package.json +1 -1
  666. package/examples/javascript/radar-time-line/package.json +1 -1
  667. package/examples/javascript/sliced-funnel/package.json +1 -1
  668. package/examples/javascript/sliced-pictorial-stacked/package.json +1 -1
  669. package/examples/javascript/sliced-pyramid/package.json +1 -1
  670. package/examples/javascript/stock-chart/package.json +1 -1
  671. package/examples/javascript/stock-chart-comparing-stocks/package.json +1 -1
  672. package/examples/javascript/stock-chart-data-granularity/package.json +1 -1
  673. package/examples/javascript/stock-chart-data-grouping/package.json +1 -1
  674. package/examples/javascript/stock-chart-intraday/package.json +1 -1
  675. package/examples/javascript/stock-chart-live/package.json +1 -1
  676. package/examples/javascript/stock-chart-volume-separate-panel/package.json +1 -1
  677. package/examples/javascript/venn-diagram/package.json +1 -1
  678. package/examples/javascript/wordcloud-with-data/package.json +1 -1
  679. package/examples/javascript/wordcloud-with-text/package.json +1 -1
  680. package/examples/javascript/xy-100-percent-stacked-column/package.json +1 -1
  681. package/examples/javascript/xy-animated-bullet-at-the-end-of-the-series/package.json +1 -1
  682. package/examples/javascript/xy-bubble/package.json +1 -1
  683. package/examples/javascript/xy-candlestick/package.json +1 -1
  684. package/examples/javascript/xy-clustered-column/package.json +1 -1
  685. package/examples/javascript/xy-column/package.json +1 -1
  686. package/examples/javascript/xy-comparing-series-google-analytics-style/package.json +1 -1
  687. package/examples/javascript/xy-data-grouping/package.json +1 -1
  688. package/examples/javascript/xy-draggable-range/package.json +1 -1
  689. package/examples/javascript/xy-drawing-series-with-mouse-or-touch/package.json +1 -1
  690. package/examples/javascript/xy-dumbbell plot/package.json +1 -1
  691. package/examples/javascript/xy-evenly-spaced-date-axis/package.json +1 -1
  692. package/examples/javascript/xy-line/package.json +1 -1
  693. package/examples/javascript/xy-line-highlight-on-legend-hover/package.json +1 -1
  694. package/examples/javascript/xy-live-data/package.json +1 -1
  695. package/examples/javascript/xy-multiple-synced-value-axes/package.json +1 -1
  696. package/examples/javascript/xy-ohlc/package.json +1 -1
  697. package/examples/javascript/xy-real-time-data-sorting/package.json +1 -1
  698. package/examples/javascript/xy-smoothed-line/package.json +1 -1
  699. package/examples/javascript/xy-stacked-and-clustered-column/package.json +1 -1
  700. package/examples/javascript/xy-stacked-column/package.json +1 -1
  701. package/examples/javascript/xy-stacked-step/package.json +1 -1
  702. package/examples/javascript/xy-stock/package.json +1 -1
  703. package/examples/javascript/xy-stock-comparing/package.json +1 -1
  704. package/examples/typescript/flow-chord/package.json +1 -1
  705. package/examples/typescript/flow-chord/tsconfig.json +1 -1
  706. package/examples/typescript/flow-chord-directed/package.json +1 -1
  707. package/examples/typescript/flow-chord-directed/tsconfig.json +1 -1
  708. package/examples/typescript/flow-chord-non-ribbon/package.json +1 -1
  709. package/examples/typescript/flow-chord-non-ribbon/tsconfig.json +1 -1
  710. package/examples/typescript/flow-sankey/package.json +1 -1
  711. package/examples/typescript/flow-sankey/tsconfig.json +1 -1
  712. package/examples/typescript/gauge/package.json +1 -1
  713. package/examples/typescript/gauge/tsconfig.json +1 -1
  714. package/examples/typescript/gauge-bands/index.ts +3 -1
  715. package/examples/typescript/gauge-bands/package.json +1 -1
  716. package/examples/typescript/gauge-bands/tsconfig.json +1 -1
  717. package/examples/typescript/hierarchy-force-directed/package.json +1 -1
  718. package/examples/typescript/hierarchy-force-directed/tsconfig.json +1 -1
  719. package/examples/typescript/hierarchy-pack/package.json +1 -1
  720. package/examples/typescript/hierarchy-pack/tsconfig.json +1 -1
  721. package/examples/typescript/hierarchy-partition/package.json +1 -1
  722. package/examples/typescript/hierarchy-partition/tsconfig.json +1 -1
  723. package/examples/typescript/hierarchy-sunburst/package.json +1 -1
  724. package/examples/typescript/hierarchy-sunburst/tsconfig.json +1 -1
  725. package/examples/typescript/hierarchy-tree/package.json +1 -1
  726. package/examples/typescript/hierarchy-tree/tsconfig.json +1 -1
  727. package/examples/typescript/hierarchy-treemap/package.json +1 -1
  728. package/examples/typescript/hierarchy-treemap/tsconfig.json +1 -1
  729. package/examples/typescript/jest/package.json +1 -1
  730. package/examples/typescript/jest/tsconfig.json +1 -1
  731. package/examples/typescript/json-pie/README.md +6 -0
  732. package/examples/typescript/json-pie/index.css +11 -0
  733. package/examples/typescript/json-pie/index.html +12 -0
  734. package/examples/typescript/json-pie/index.ts +77 -0
  735. package/examples/typescript/json-pie/package.json +18 -0
  736. package/examples/typescript/{json → json-pie}/tsconfig.json +1 -1
  737. package/examples/typescript/{json → json-pie}/webpack.config.js +0 -0
  738. package/examples/typescript/json-xy/README.md +6 -0
  739. package/examples/typescript/json-xy/index.css +11 -0
  740. package/examples/{javascript/json → typescript/json-xy}/index.html +1 -1
  741. package/examples/typescript/json-xy/index.ts +203 -0
  742. package/examples/typescript/{json → json-xy}/package.json +2 -2
  743. package/examples/typescript/json-xy/tsconfig.json +12 -0
  744. package/examples/typescript/json-xy/webpack.config.js +45 -0
  745. package/examples/typescript/map-animating-along-lines/package.json +1 -1
  746. package/examples/typescript/map-animating-along-lines/tsconfig.json +1 -1
  747. package/examples/typescript/map-day-and-night/package.json +1 -1
  748. package/examples/typescript/map-day-and-night/tsconfig.json +1 -1
  749. package/examples/typescript/map-globe-rotate-to-country/package.json +1 -1
  750. package/examples/typescript/map-globe-rotate-to-country/tsconfig.json +1 -1
  751. package/examples/typescript/map-globe-with-projected-circles/package.json +1 -1
  752. package/examples/typescript/map-globe-with-projected-circles/tsconfig.json +1 -1
  753. package/examples/typescript/map-with-bubbles/package.json +1 -1
  754. package/examples/typescript/map-with-bubbles/tsconfig.json +1 -1
  755. package/examples/typescript/map-zoom-to-country/package.json +1 -1
  756. package/examples/typescript/map-zoom-to-country/tsconfig.json +1 -1
  757. package/examples/typescript/misc-40-charts/package.json +1 -1
  758. package/examples/typescript/misc-40-charts/tsconfig.json +1 -1
  759. package/examples/typescript/misc-microchart-grid/package.json +1 -1
  760. package/examples/typescript/misc-microchart-grid/tsconfig.json +1 -1
  761. package/examples/typescript/pie-chart/package.json +1 -1
  762. package/examples/typescript/pie-chart/tsconfig.json +1 -1
  763. package/examples/typescript/pie-donut-chart/package.json +1 -1
  764. package/examples/typescript/pie-donut-chart/tsconfig.json +1 -1
  765. package/examples/typescript/pie-variable-radius/package.json +1 -1
  766. package/examples/typescript/pie-variable-radius/tsconfig.json +1 -1
  767. package/examples/typescript/radar-column-iwatch-style/package.json +1 -1
  768. package/examples/typescript/radar-column-iwatch-style/tsconfig.json +1 -1
  769. package/examples/typescript/radar-heat-map/index.ts +33 -33
  770. package/examples/typescript/radar-heat-map/package.json +1 -1
  771. package/examples/typescript/radar-heat-map/tsconfig.json +1 -1
  772. package/examples/typescript/radar-line/package.json +1 -1
  773. package/examples/typescript/radar-line/tsconfig.json +1 -1
  774. package/examples/typescript/radar-time-line/package.json +1 -1
  775. package/examples/typescript/radar-time-line/tsconfig.json +1 -1
  776. package/examples/typescript/sliced-funnel/package.json +1 -1
  777. package/examples/typescript/sliced-funnel/tsconfig.json +1 -1
  778. package/examples/typescript/sliced-pictorial-stacked/package.json +1 -1
  779. package/examples/typescript/sliced-pictorial-stacked/tsconfig.json +1 -1
  780. package/examples/typescript/sliced-pyramid/package.json +1 -1
  781. package/examples/typescript/sliced-pyramid/tsconfig.json +1 -1
  782. package/examples/typescript/stock-chart/package.json +1 -1
  783. package/examples/typescript/stock-chart/tsconfig.json +1 -1
  784. package/examples/typescript/stock-chart-comparing-stocks/package.json +1 -1
  785. package/examples/typescript/stock-chart-comparing-stocks/tsconfig.json +1 -1
  786. package/examples/typescript/stock-chart-data-granularity/package.json +1 -1
  787. package/examples/typescript/stock-chart-data-granularity/tsconfig.json +1 -1
  788. package/examples/typescript/stock-chart-data-grouping/package.json +1 -1
  789. package/examples/typescript/stock-chart-data-grouping/tsconfig.json +1 -1
  790. package/examples/typescript/stock-chart-intraday/package.json +1 -1
  791. package/examples/typescript/stock-chart-intraday/tsconfig.json +1 -1
  792. package/examples/typescript/stock-chart-live/package.json +1 -1
  793. package/examples/typescript/stock-chart-live/tsconfig.json +1 -1
  794. package/examples/typescript/stock-chart-volume-separate-panel/package.json +1 -1
  795. package/examples/typescript/stock-chart-volume-separate-panel/tsconfig.json +1 -1
  796. package/examples/typescript/venn-diagram/package.json +1 -1
  797. package/examples/typescript/venn-diagram/tsconfig.json +1 -1
  798. package/examples/typescript/wordcloud-with-data/package.json +1 -1
  799. package/examples/typescript/wordcloud-with-data/tsconfig.json +1 -1
  800. package/examples/typescript/wordcloud-with-text/package.json +1 -1
  801. package/examples/typescript/wordcloud-with-text/tsconfig.json +1 -1
  802. package/examples/typescript/xy-100-percent-stacked-column/package.json +1 -1
  803. package/examples/typescript/xy-100-percent-stacked-column/tsconfig.json +1 -1
  804. package/examples/typescript/xy-animated-bullet-at-the-end-of-the-series/package.json +1 -1
  805. package/examples/typescript/xy-animated-bullet-at-the-end-of-the-series/tsconfig.json +1 -1
  806. package/examples/typescript/xy-bubble/package.json +1 -1
  807. package/examples/typescript/xy-bubble/tsconfig.json +1 -1
  808. package/examples/typescript/xy-candlestick/package.json +1 -1
  809. package/examples/typescript/xy-candlestick/tsconfig.json +1 -1
  810. package/examples/typescript/xy-clustered-column/package.json +1 -1
  811. package/examples/typescript/xy-clustered-column/tsconfig.json +1 -1
  812. package/examples/typescript/xy-column/package.json +1 -1
  813. package/examples/typescript/xy-column/tsconfig.json +1 -1
  814. package/examples/typescript/xy-comparing-series-google-analytics-style/package.json +1 -1
  815. package/examples/typescript/xy-comparing-series-google-analytics-style/tsconfig.json +1 -1
  816. package/examples/typescript/xy-data-grouping/package.json +1 -1
  817. package/examples/typescript/xy-data-grouping/tsconfig.json +1 -1
  818. package/examples/typescript/xy-draggable-range/package.json +1 -1
  819. package/examples/typescript/xy-draggable-range/tsconfig.json +1 -1
  820. package/examples/typescript/xy-drawing-series-with-mouse-or-touch/package.json +1 -1
  821. package/examples/typescript/xy-drawing-series-with-mouse-or-touch/tsconfig.json +1 -1
  822. package/examples/typescript/xy-dumbbell plot/package.json +1 -1
  823. package/examples/typescript/xy-dumbbell plot/tsconfig.json +1 -1
  824. package/examples/typescript/xy-evenly-spaced-date-axis/package.json +1 -1
  825. package/examples/typescript/xy-evenly-spaced-date-axis/tsconfig.json +1 -1
  826. package/examples/typescript/xy-line/package.json +1 -1
  827. package/examples/typescript/xy-line/tsconfig.json +1 -1
  828. package/examples/typescript/xy-line-highlight-on-legend-hover/package.json +1 -1
  829. package/examples/typescript/xy-line-highlight-on-legend-hover/tsconfig.json +1 -1
  830. package/examples/typescript/xy-live-data/package.json +1 -1
  831. package/examples/typescript/xy-live-data/tsconfig.json +1 -1
  832. package/examples/typescript/xy-multiple-synced-value-axes/package.json +1 -1
  833. package/examples/typescript/xy-multiple-synced-value-axes/tsconfig.json +1 -1
  834. package/examples/typescript/xy-ohlc/package.json +1 -1
  835. package/examples/typescript/xy-ohlc/tsconfig.json +1 -1
  836. package/examples/typescript/xy-real-time-data-sorting/package.json +1 -1
  837. package/examples/typescript/xy-real-time-data-sorting/tsconfig.json +1 -1
  838. package/examples/typescript/xy-smoothed-line/package.json +1 -1
  839. package/examples/typescript/xy-smoothed-line/tsconfig.json +1 -1
  840. package/examples/typescript/xy-stacked-and-clustered-column/package.json +1 -1
  841. package/examples/typescript/xy-stacked-and-clustered-column/tsconfig.json +1 -1
  842. package/examples/typescript/xy-stacked-column/package.json +1 -1
  843. package/examples/typescript/xy-stacked-column/tsconfig.json +1 -1
  844. package/examples/typescript/xy-stacked-step/package.json +1 -1
  845. package/examples/typescript/xy-stacked-step/tsconfig.json +1 -1
  846. package/examples/typescript/xy-stock/package.json +1 -1
  847. package/examples/typescript/xy-stock/tsconfig.json +1 -1
  848. package/examples/typescript/xy-stock-comparing/package.json +1 -1
  849. package/examples/typescript/xy-stock-comparing/tsconfig.json +1 -1
  850. package/locales/ar.js +1 -1
  851. package/locales/bg_BG.js +1 -1
  852. package/locales/bs_BA.js +1 -1
  853. package/locales/ca_ES.js +1 -1
  854. package/locales/cs_CZ.js +1 -1
  855. package/locales/da_DK.js +1 -1
  856. package/locales/el_GR.js +1 -1
  857. package/locales/en.js +1 -1
  858. package/locales/en_CA.js +1 -1
  859. package/locales/en_US.js +1 -1
  860. package/locales/et_EE.js +1 -1
  861. package/locales/fi_FI.js +1 -1
  862. package/locales/fr_FR.js +1 -1
  863. package/locales/he_IL.js +1 -1
  864. package/locales/hi_IN.js +1 -1
  865. package/locales/hr_HR.js +1 -1
  866. package/locales/hu_HU.js +1 -1
  867. package/locales/id_ID.js +1 -1
  868. package/locales/ja_JP.js +1 -1
  869. package/locales/ko_KR.js +1 -1
  870. package/locales/lv_LV.js +1 -1
  871. package/locales/nb_NO.js +1 -1
  872. package/locales/nl_NL.js +1 -1
  873. package/locales/pl_PL.js +1 -1
  874. package/locales/ro_RO.js +1 -1
  875. package/locales/sr_RS.js +1 -1
  876. package/locales/th_TH.js +1 -1
  877. package/locales/tr_TR.js +1 -1
  878. package/locales/vi_VN.js +1 -1
  879. package/locales/zh_Hans.js +1 -1
  880. package/locales/zh_Hant.js +1 -1
  881. package/package.json +1 -1
  882. package/plugins/json.d.ts +1 -0
  883. package/plugins/json.d.ts.map +1 -1
  884. package/plugins/json.js +1 -0
  885. package/plugins/json.js.map +1 -1
  886. package/examples/javascript/json/index.js +0 -206
  887. package/examples/typescript/json/index.ts +0 -206
@@ -1 +1 @@
1
- {"version":3,"file":"CanvasRenderer.js","sourceRoot":"","sources":["../../../../../../src/.internal/core/render/backend/CanvasRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["/** @ignore *//** */\n\nimport {\n\tIRenderer, IContainer, IDisplayObject, IGraphics, IRendererEvents, IMargin,\n\tIText, ITextStyle, IRadialText, IPicture, IRendererEvent, ILayer, ICanvasOptions, BlendMode, IPointerEvent, Id\n} from \"./Renderer\";\nimport type { IBounds } from \"../../util/IBounds\";\nimport type { IPoint } from \"../../util/IPoint\";\nimport { Color } from \"../../util/Color\";\nimport { Matrix } from \"../../util/Matrix\";\nimport { Percent, percent } from \"../../util/Percent\";\n//import { Throttler } from \"../../util/Throttler\";\nimport { ArrayDisposer, Disposer, DisposerClass, IDisposer, CounterDisposer, MultiDisposer } from \"../../util/Disposer\";\nimport { TextFormatter, ITextChunk } from \"../../util/TextFormatter\";\nimport * as $utils from \"../../util/Utils\";\nimport * as $array from \"../../util/Array\";\nimport * as $object from \"../../util/Object\";\nimport * as $type from \"../../util/Type\";\nimport * as $math from \"../../util/Math\";\nimport arcToBezier from 'svg-arc-to-cubic-bezier';\n\n\n/**\n * @ignore\n */\nfunction checkArgs(name: string, actual: number, expected: number) {\n\tif (actual !== expected) {\n\t\tthrow new Error(\"Required \" + expected + \" arguments for \" + name + \" but got \" + actual);\n\t}\n}\n\n/**\n * @ignore\n */\nfunction checkMinArgs(name: string, actual: number, expected: number) {\n\tif (actual < expected) {\n\t\tthrow new Error(\"Required at least \" + expected + \" arguments for \" + name + \" but got \" + actual);\n\t}\n}\n\n/**\n * @ignore\n */\nfunction checkEvenArgs(name: string, actual: number, expected: number) {\n\tcheckMinArgs(name, actual, expected);\n\n\tif ((actual % expected) !== 0) {\n\t\tthrow new Error(\"Arguments for \" + name + \" must be in pairs of \" + expected);\n\t}\n}\n\n/**\n * @ignore\n * This splits the flag so that way 0017 will be processed as 0 0 17\n *\n * This is important for weird paths like `M17 5A1 1 0 0017 30 1 1 0 0017 5`\n */\nfunction splitArcFlags(args: Array<string>) {\n\tfor (let i = 0; i < args.length; i += 7) {\n\t\tlet index = i + 3;\n\t\tlet flag = args[index];\n\n\t\tif (flag.length > 1) {\n\t\t\tconst a = /^([01])([01])(.*)$/.exec(flag);\n\n\t\t\tif (a !== null) {\n\t\t\t\targs.splice(index, 0, a[1]);\n\t\t\t\t++index;\n\n\t\t\t\targs.splice(index, 0, a[2]);\n\t\t\t\t++index;\n\n\t\t\t\tif (a[3].length > 0) {\n\t\t\t\t\targs[index] = a[3];\n\n\t\t\t\t} else {\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t++index;\n\n\t\tflag = args[index];\n\n\t\tif (flag.length > 1) {\n\t\t\tconst a = /^([01])(.+)$/.exec(flag);\n\n\t\t\tif (a !== null) {\n\t\t\t\targs.splice(index, 0, a[1]);\n\t\t\t\t++index;\n\n\t\t\t\targs[index] = a[2];\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nfunction assertBinary(value: number): 0 | 1 {\n\tif (value === 0 || value === 1) {\n\t\treturn value;\n\n\t} else {\n\t\tthrow new Error(\"Flag must be 0 or 1\");\n\t}\n}\n\n// 1 -> 0xffffff * (2 / 2)\n// 2 -> 0xffffff * (1 / 2)\n//\n// 3 -> 0xffffff * (3 / 4)\n// 4 -> 0xffffff * (1 / 4)\n//\n// 5 -> 0xffffff * (7 / 8)\n// 6 -> 0xffffff * (5 / 8)\n// 7 -> 0xffffff * (3 / 8)\n// 8 -> 0xffffff * (1 / 8)\n//\n// 9 -> 0xffffff * (15 / 16)\n// 10 -> 0xffffff * (13 / 16)\n// 11 -> 0xffffff * (11 / 16)\n// 12 -> 0xffffff * (9 / 16)\n// 13 -> 0xffffff * (7 / 16)\n// 14 -> 0xffffff * (5 / 16)\n// 15 -> 0xffffff * (3 / 16)\n// 16 -> 0xffffff * (1 / 16)\n// @todo remove this old color distribution algo if the new one pans out\n// function distributeIdBAK(id: number): number {\n// \tif (id === 1) {\n// \t\treturn 0x000001;\n\n// \t} else {\n// \t\t// Finds the closest power of 2\n// \t\tconst base = Math.pow(2, Math.ceil(Math.log(id) / Math.log(2)));\n\n// \t\t// Translates the id into an odd fraction index\n// \t\tconst index = ((base - id) * 2) + 1;\n\n// \t\t// TODO is Math.round correct ?\n// \t\treturn Math.round(0xffffff * (index / base));\n// \t}\n// }\n\n/**\n * Function by smeans:\n * https://lowcode.life/generating-unique-contrasting-colors-in-javascript/\n * @ignore\n */\nfunction distributeId(id: number): number {\n\tconst rgb = [0, 0, 0];\n\tfor (let i = 0; i < 24; i++) {\n\t\trgb[i % 3] <<= 1;\n\t\trgb[i % 3] |= id & 0x01;\n\t\tid >>= 1;\n\t}\n\treturn (rgb[2] | 0) + (rgb[1] << 8) + (rgb[0] << 16);\n}\n\n/**\n * @ignore\n */\nfunction eachTargets(hitTarget: CanvasDisplayObject, f: (target: CanvasDisplayObject) => boolean): void {\n\tfor (; ;) {\n\t\tif (hitTarget.interactive) {\n\t\t\tif (!f(hitTarget)) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (hitTarget._parent) {\n\t\t\thitTarget = hitTarget._parent;\n\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\n// TODO feature detection for mouse/touch/pointer\n/**\n * @ignore\n */\nfunction onPointerEvent(element: EventTarget, name: string, f: (event: Array<IPointerEvent>) => void): IDisposer {\n\treturn $utils.addEventListener(element, $utils.getRendererEvent(name), (event: MouseEvent | TouchEvent) => {\n\t\tlet touches = (<any>event).touches;\n\t\tif (touches) {\n\t\t\tif (touches.length == 0) {\n\t\t\t\ttouches = (<any>event).changedTouches;\n\t\t\t}\n\n\t\t\tf($array.copy(<TouchList>touches));\n\n\t\t} else {\n\t\t\tf([<MouseEvent>event]);\n\t\t}\n\t});\n}\n\n/**\n * @ignore\n */\nfunction isTainted(image: HTMLImageElement): boolean {\n\tconst canvas = document.createElement(\"canvas\");\n\tcanvas.width = 1;\n\tcanvas.height = 1;\n\tconst context = canvas.getContext(\"2d\", { willReadFrequently: true })! as CanvasRenderingContext2D;\n\tcontext.drawImage(image, 0, 0, 1, 1);\n\n\ttry {\n\t\tcontext.getImageData(0, 0, 1, 1);\n\t\treturn false;\n\t}\n\tcatch (err) {\n\t\tconsole.warn(\"Image \\\"\" + image.src + \"\\\" is loaded from different host and is not covered by CORS policy. For more information about the implications read here: https://www.amcharts.com/docs/v5/concepts/cors\");\n\t\treturn true;\n\t}\n}\n\n/**\n * This is needed to workaround a bug in iOS which causes it to not GC canvas elements.\n *\n * @ignore\n */\nfunction clearCanvas(view: HTMLCanvasElement) {\n\tview.width = 0;\n\tview.height = 0;\n\tview.style.width = \"0px\";\n\tview.style.height = \"0px\";\n}\n\n/**\n * @ignore\n */\nexport class CanvasPivot implements IPoint {\n\tprotected _x: number = 0;\n\tprotected _y: number = 0;\n\n\tget x(): number {\n\t\treturn this._x;\n\t}\n\n\tget y(): number {\n\t\treturn this._y;\n\t}\n\n\tset x(value: number) {\n\t\tthis._x = value;\n\t}\n\n\tset y(value: number) {\n\t\tthis._y = value;\n\t}\n}\n\n/**\n * @ignore\n */\nexport class CanvasDisplayObject extends DisposerClass implements IDisplayObject, IDisposer {\n\tpublic _layer?: CanvasLayer;\n\n\tpublic mask: CanvasGraphics | null = null;\n\tpublic visible: boolean = true;\n\tpublic exportable?: boolean = true;\n\tpublic interactive: boolean = false;\n\tpublic inactive: boolean = false;\n\tpublic wheelable: boolean = false;\n\tpublic cancelTouch: boolean = false;\n\tpublic isMeasured: boolean = false;\n\tpublic buttonMode: boolean = false;\n\tpublic alpha: number = 1;\n\tpublic compoundAlpha: number = 1;\n\tpublic angle: number = 0;\n\tpublic scale: number = 1;\n\tpublic x: number = 0;\n\tpublic y: number = 0;\n\tpublic pivot: CanvasPivot = new CanvasPivot();\n\n\tpublic filter?: string;\n\n\tpublic cursorOverStyle?: string;\n\tpublic _replacedCursorStyle?: string;\n\n\tpublic _localMatrix: Matrix = new Matrix();\n\tpublic _matrix: Matrix = new Matrix();\n\t// TODO can this be replaced with _localMatrix ?\n\tprotected _uMatrix: Matrix = new Matrix();\n\n\tpublic _renderer: CanvasRenderer;\n\tpublic _parent: CanvasContainer | undefined;\n\n\tprotected _localBounds: IBounds | undefined;\n\tprotected _bounds: IBounds | undefined;\n\tpublic _colorId: string | undefined;\n\n\tconstructor(renderer: CanvasRenderer) {\n\t\tsuper();\n\t\tthis._renderer = renderer;\n\t}\n\n\tprotected _dispose(): void {\n\t\tthis._renderer._removeObject(this);\n\t}\n\n\tpublic getCanvas(): HTMLCanvasElement {\n\t\treturn this.getLayer().view;\n\t}\n\n\tpublic getLayer(): CanvasLayer {\n\t\tlet self: CanvasDisplayObject = this;\n\n\t\tfor (; ;) {\n\t\t\tif (self._layer) {\n\t\t\t\treturn self._layer;\n\n\t\t\t} else if (self._parent) {\n\t\t\t\tself = self._parent;\n\n\t\t\t} else {\n\t\t\t\treturn this._renderer.defaultLayer;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic setLayer(order: number | undefined, margin: IMargin | undefined): void {\n\t\tif (order == null) {\n\t\t\tthis._layer = undefined;\n\n\t\t} else {\n\t\t\tconst visible = true;\n\t\t\tthis._layer = this._renderer.getLayer(order, visible);\n\t\t\tthis._layer.visible = visible;\n\t\t\tthis._layer.margin = margin;\n\t\t\tif (margin) {\n\t\t\t\t$utils.setInteractive(this._layer.view, false);\n\t\t\t}\n\n\t\t\tthis._renderer._ghostLayer.setMargin(this._renderer.layers);\n\n\t\t\tif (this._parent) {\n\t\t\t\tthis._parent.registerChildLayer(this._layer);\n\t\t\t}\n\n\t\t\tthis._renderer.resizeLayer(this._layer);\n\t\t\tthis._renderer.resizeGhost();\n\t\t}\n\t}\n\n\tpublic markDirtyLayer(): void {\n\t\tthis.getLayer().dirty = true;\n\t}\n\n\tpublic clear(): void {\n\t\tthis.invalidateBounds();\n\t}\n\n\tpublic invalidateBounds(): void {\n\t\tthis._localBounds = undefined;\n\t}\n\n\tpublic _addBounds(_bounds: IBounds): void { }\n\n\tprotected _getColorId(): string {\n\t\tif (this._colorId === undefined) {\n\t\t\tthis._colorId = this._renderer.paintId(this);\n\t\t}\n\n\t\treturn this._colorId;\n\t}\n\n\tprotected _isInteractive(): boolean {\n\t\treturn this.inactive == false && (this.interactive || this._renderer._forceInteractive > 0);\n\t}\n\n\tprotected _isInteractiveMask(): boolean {\n\t\treturn this._isInteractive();\n\t}\n\n\tpublic contains(child: CanvasDisplayObject): boolean {\n\t\tfor (; ;) {\n\t\t\tif (child === this) {\n\t\t\t\treturn true;\n\n\t\t\t} else if (child._parent) {\n\t\t\t\tchild = child._parent;\n\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\ttoGlobal(point: IPoint): IPoint {\n\t\treturn this._matrix.apply(point);\n\t}\n\n\ttoLocal(point: IPoint): IPoint {\n\t\treturn this._matrix.applyInverse(point);\n\t}\n\n\tpublic getLocalMatrix(): Matrix {\n\t\tthis._uMatrix.setTransform(0, 0, this.pivot.x, this.pivot.y, this.angle * Math.PI / 180, this.scale);\n\t\treturn this._uMatrix;\n\t}\n\n\tgetLocalBounds(): IBounds {\n\t\tif (!this._localBounds) {\n\n\t\t\tconst bn = 10000000;\n\t\t\tthis._localBounds = {\n\t\t\t\tleft: bn,\n\t\t\t\ttop: bn,\n\t\t\t\tright: -bn,\n\t\t\t\tbottom: -bn\n\t\t\t};\n\n\t\t\tthis._addBounds(this._localBounds);\n\t\t}\n\t\treturn this._localBounds;\n\t}\n\n\tgetAdjustedBounds(bounds: IBounds): IBounds {\n\t\tthis._setMatrix();\n\n\t\tconst matrix = this.getLocalMatrix();\n\n\t\tconst p0 = matrix.apply({ x: bounds.left, y: bounds.top });\n\t\tconst p1 = matrix.apply({ x: bounds.right, y: bounds.top });\n\t\tconst p2 = matrix.apply({ x: bounds.right, y: bounds.bottom });\n\t\tconst p3 = matrix.apply({ x: bounds.left, y: bounds.bottom });\n\n\t\treturn {\n\t\t\tleft: Math.min(p0.x, p1.x, p2.x, p3.x),\n\t\t\ttop: Math.min(p0.y, p1.y, p2.y, p3.y),\n\t\t\tright: Math.max(p0.x, p1.x, p2.x, p3.x),\n\t\t\tbottom: Math.max(p0.y, p1.y, p2.y, p3.y)\n\t\t}\n\t}\n\n\ton<C, Key extends keyof IRendererEvents>(key: Key, callback: (this: C, event: IRendererEvents[Key]) => void, context?: C): IDisposer {\n\t\tif (this.interactive) {\n\t\t\treturn this._renderer._addEvent(this, key, callback, context);\n\n\t\t} else {\n\t\t\treturn new Disposer(() => { });\n\t\t}\n\t}\n\n\tpublic _setMatrix(): void {\n\t\t// TODO only calculate this if it has actually changed\n\t\tthis._localMatrix.setTransform(\n\t\t\tthis.x,\n\t\t\tthis.y,\n\t\t\tthis.pivot.x,\n\t\t\tthis.pivot.y,\n\t\t\t// Converts degrees to radians\n\t\t\tthis.angle * Math.PI / 180,\n\t\t\tthis.scale\n\t\t);\n\n\t\tthis._matrix.copyFrom(this._localMatrix);\n\n\t\tif (this._parent) {\n\t\t\t// TODO only calculate this if it has actually changed\n\t\t\tthis._matrix.prepend(this._parent._matrix);\n\t\t}\n\t}\n\n\tpublic _transform(context: CanvasRenderingContext2D, resolution: number): void {\n\t\tconst m = this._matrix;\n\t\tcontext.setTransform(\n\t\t\tm.a * resolution,\n\t\t\tm.b * resolution,\n\t\t\tm.c * resolution,\n\t\t\tm.d * resolution,\n\t\t\tm.tx * resolution,\n\t\t\tm.ty * resolution\n\t\t);\n\t}\n\n\tpublic _transformMargin(context: CanvasRenderingContext2D, resolution: number, margin: IMargin): void {\n\t\tconst m = this._matrix;\n\t\tcontext.setTransform(\n\t\t\tm.a * resolution,\n\t\t\tm.b * resolution,\n\t\t\tm.c * resolution,\n\t\t\tm.d * resolution,\n\t\t\t(m.tx + margin.left) * resolution,\n\t\t\t(m.ty + margin.top) * resolution\n\t\t);\n\t}\n\n\tpublic _transformLayer(context: CanvasRenderingContext2D, resolution: number, layer: CanvasLayer): void {\n\t\tif (layer.margin) {\n\t\t\tthis._transformMargin(context, layer.scale || resolution, layer.margin);\n\n\t\t} else {\n\t\t\tthis._transform(context, layer.scale || resolution);\n\t\t}\n\t}\n\n\tpublic render(parentLayer: CanvasLayer): void {\n\t\tif (this.visible && (this.exportable !== false || !this._renderer._omitTainted)) {\n\t\t\tthis._setMatrix();\n\n\t\t\tconst resolution = this._renderer.resolution;\n\n\t\t\tconst layers = this._renderer.layers;\n\t\t\tconst ghostLayer = this._renderer._ghostLayer;\n\t\t\tconst ghostContext = ghostLayer.context;\n\n\t\t\tconst mask = this.mask;\n\t\t\tif (mask) {\n\t\t\t\tmask._setMatrix();\n\t\t\t}\n\n\t\t\t// TODO improve this\n\t\t\t$array.each(layers, (layer) => {\n\t\t\t\tif (layer) {\n\t\t\t\t\tconst context = layer.context;\n\t\t\t\t\tcontext.save();\n\n\t\t\t\t\t// We must apply the mask before we transform the element\n\t\t\t\t\tif (mask) {\n\t\t\t\t\t\tmask._transformLayer(context, resolution, layer);\n\t\t\t\t\t\tmask._runPath(context);\n\t\t\t\t\t\tcontext.clip();\n\t\t\t\t\t}\n\n\t\t\t\t\tcontext.globalAlpha = this.compoundAlpha * this.alpha;\n\n\t\t\t\t\tthis._transformLayer(context, resolution, layer);\n\n\t\t\t\t\tif (this.filter) {\n\t\t\t\t\t\tcontext.filter = this.filter;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tghostContext.save();\n\n\t\t\t// We must apply the mask before we transform the element\n\t\t\tif (mask && this._isInteractiveMask()) {\n\t\t\t\tmask._transformMargin(ghostContext, resolution, ghostLayer.margin);\n\t\t\t\tmask._runPath(ghostContext);\n\t\t\t\tghostContext.clip();\n\t\t\t}\n\n\t\t\tthis._transformMargin(ghostContext, resolution, ghostLayer.margin);\n\n\t\t\tthis._render(parentLayer);\n\n\t\t\tghostContext.restore();\n\n\t\t\t$array.each(layers, (layer) => {\n\t\t\t\tif (layer) {\n\t\t\t\t\tlayer.context.restore();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tprotected _render(parentLayer: CanvasLayer): void {\n\t\tif (this.exportable === false) {\n\t\t\tconst layer = this._layer || parentLayer;\n\t\t\tlayer.tainted = true;\n\t\t}\n\t}\n\n\thovering(): boolean {\n\t\treturn this._renderer._hovering.has(this);\n\t}\n\n\tdragging(): boolean {\n\t\treturn this._renderer._dragging.some((x) => x.value === this);\n\t}\n\n\tpublic dispose() {\n\t\tthis.getLayer().dirty = true;\n\t}\n\n\tpublic shouldCancelTouch(): boolean {\n\t\tconst renderer = this._renderer;\n\t\tif (renderer.tapToActivate && !renderer._touchActive) {\n\t\t\treturn false;\n\t\t}\n\t\tif (this.cancelTouch) {\n\t\t\treturn true;\n\t\t}\n\t\telse if (this._parent) {\n\t\t\treturn this._parent.shouldCancelTouch();\n\t\t}\n\t\treturn false;\n\t}\n\n}\n\n/**\n * @ignore\n */\nexport class CanvasContainer extends CanvasDisplayObject implements IContainer {\n\tpublic interactiveChildren: boolean = true;\n\tprivate _childLayers?: CanvasLayer[];\n\n\tprotected _children: Array<CanvasDisplayObject> = [];\n\n\tprotected _isInteractiveMask(): boolean {\n\t\treturn this.interactiveChildren || super._isInteractiveMask();\n\t}\n\n\taddChild(child: CanvasDisplayObject): void {\n\t\tchild._parent = this;\n\t\tthis._children.push(child);\n\t\tif (child._layer) {\n\t\t\tthis.registerChildLayer(child._layer);\n\t\t}\n\t}\n\n\taddChildAt(child: CanvasDisplayObject, index: number): void {\n\t\tchild._parent = this;\n\t\tthis._children.splice(index, 0, child);\n\t\tif (child._layer) {\n\t\t\tthis.registerChildLayer(child._layer);\n\t\t}\n\t}\n\n\tremoveChild(child: CanvasDisplayObject): void {\n\t\tchild._parent = undefined;\n\t\t$array.removeFirst(this._children, child);\n\t}\n\n\tprotected _render(parentLayer: CanvasLayer): void {\n\t\tsuper._render(parentLayer);\n\n\t\tconst renderer = this._renderer;\n\n\t\tif (this.interactive && this.interactiveChildren) {\n\t\t\t++renderer._forceInteractive;\n\t\t}\n\n\t\tconst layer = this._layer || parentLayer;\n\n\t\t$array.each(this._children, (child) => {\n\t\t\tchild.compoundAlpha = this.compoundAlpha * this.alpha;\n\t\t\tchild.render(layer);\n\t\t});\n\n\t\tif (this.interactive && this.interactiveChildren) {\n\t\t\t--renderer._forceInteractive;\n\t\t}\n\t}\n\n\tregisterChildLayer(layer: CanvasLayer): void {\n\t\tif (!this._childLayers) {\n\t\t\tthis._childLayers = [];\n\t\t}\n\t\t$array.pushOne(this._childLayers, layer);\n\t\tif (this._parent) {\n\t\t\tthis._parent.registerChildLayer(layer);\n\t\t}\n\t}\n\n\tpublic markDirtyLayer(deep: boolean = false): void {\n\t\tsuper.markDirtyLayer();\n\t\tif (deep && this._childLayers) {\n\t\t\t$array.each(this._childLayers, (layer) => layer.dirty = true);\n\t\t}\n\t}\n\n\tpublic dispose() {\n\t\tsuper.dispose();\n\t\tif (this._childLayers) {\n\t\t\t$array.each(this._childLayers, (layer) => {\n\t\t\t\tlayer.dirty = true;\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nfunction setPoint(bounds: IBounds, point: IPoint): void {\n\tbounds.left = Math.min(bounds.left, point.x);\n\tbounds.top = Math.min(bounds.top, point.y);\n\tbounds.right = Math.max(bounds.right, point.x);\n\tbounds.bottom = Math.max(bounds.bottom, point.y);\n}\n\n/**\n * @ignore\n */\nabstract class Op {\n\tpublic colorize(_context: CanvasRenderingContext2D, _forceColor: string | undefined): void { }\n\n\tpublic path(_context: CanvasRenderingContext2D): void { }\n\n\tpublic addBounds(_bounds: IBounds): void { }\n}\n\n/**\n * @ignore\n */\nclass BeginFill extends Op {\n\tconstructor(public color: string | CanvasGradient | CanvasPattern) { super(); }\n\n\tpublic colorize(context: CanvasRenderingContext2D, forceColor: string | undefined): void {\n\t\tif (forceColor !== undefined) {\n\t\t\tcontext.fillStyle = forceColor;\n\n\t\t} else {\n\t\t\tcontext.fillStyle = this.color;\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nclass EndFill extends Op {\n\tconstructor(public clearShadow: boolean) { super(); }\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tcontext.fill();\n\t\tif (this.clearShadow) {\n\t\t\tcontext.shadowColor = \"\";\n\t\t\tcontext.shadowBlur = 0;\n\t\t\tcontext.shadowOffsetX = 0;\n\t\t\tcontext.shadowOffsetY = 0;\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nclass EndStroke extends Op {\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tcontext.stroke();\n\t}\n}\n\n/**\n * @ignore\n */\nclass LineStyle extends Op {\n\tconstructor(public width: number, public color: string | CanvasGradient | CanvasPattern, public lineJoin?: \"miter\" | \"round\" | \"bevel\") { super(); }\n\n\tpublic colorize(context: CanvasRenderingContext2D, forceColor: string | undefined): void {\n\t\tif (forceColor !== undefined) {\n\t\t\tcontext.strokeStyle = forceColor;\n\n\t\t} else {\n\t\t\tcontext.strokeStyle = this.color;\n\t\t}\n\n\t\tcontext.lineWidth = this.width;\n\t\tif (this.lineJoin) {\n\t\t\tcontext.lineJoin = this.lineJoin;\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nclass LineDash extends Op {\n\tconstructor(public dash: number[]) { super(); }\n\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tcontext.setLineDash(this.dash);\n\t}\n}\n\n/**\n * @ignore\n */\nclass LineDashOffset extends Op {\n\tconstructor(public dashOffset: number) { super(); }\n\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tcontext.lineDashOffset = this.dashOffset;\n\t}\n}\n\n/**\n * @ignore\n */\nclass DrawRect extends Op {\n\tconstructor(public x: number, public y: number, public width: number, public height: number) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.rect(this.x, this.y, this.width, this.height);\n\t}\n\n\tpublic addBounds(bounds: IBounds): void {\n\t\tconst l = this.x;\n\t\tconst t = this.y;\n\t\tconst r = l + this.width;\n\t\tconst b = t + this.height;\n\n\t\tsetPoint(bounds, { x: l, y: t });\n\t\tsetPoint(bounds, { x: r, y: t });\n\t\tsetPoint(bounds, { x: l, y: b });\n\t\tsetPoint(bounds, { x: r, y: b });\n\t}\n}\n\n/**\n * @ignore\n */\nclass DrawCircle extends Op {\n\tconstructor(public x: number, public y: number, public radius: number) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.moveTo(this.x + this.radius, this.y);\n\t\tcontext.arc(this.x, this.y, this.radius, 0, 2 * Math.PI);\n\t}\n\n\t// TODO handle skewing and rotation\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.x - this.radius, y: this.y - this.radius });\n\t\tsetPoint(bounds, { x: this.x + this.radius, y: this.y + this.radius });\n\t}\n}\n\n/**\n * @ignore\n */\nclass DrawEllipse extends Op {\n\tconstructor(public x: number, public y: number, public radiusX: number, public radiusY: number) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.ellipse(0, 0, this.radiusX, this.radiusY, 0, 0, Math.PI * 2);\n\t}\n\n\t// TODO handle skewing and rotation\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.x - this.radiusX, y: this.y - this.radiusY });\n\t\tsetPoint(bounds, { x: this.x + this.radiusX, y: this.y + this.radiusY });\n\t}\n}\n\n/**\n * @ignore\n */\nclass Arc extends Op {\n\tconstructor(\n\t\tpublic cx: number,\n\t\tpublic cy: number,\n\t\tpublic radius: number,\n\t\tpublic startAngle: number,\n\t\tpublic endAngle: number,\n\t\tpublic anticlockwise: boolean,\n\t) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tif (this.radius > 0) {\n\t\t\tcontext.arc(this.cx, this.cy, this.radius, this.startAngle, this.endAngle, this.anticlockwise);\n\t\t}\n\t}\n\n\tpublic addBounds(bounds: IBounds): void {\n\t\tlet arcBounds = $math.getArcBounds(this.cx, this.cy, this.startAngle * $math.DEGREES, this.endAngle * $math.DEGREES, this.radius);\n\t\tsetPoint(bounds, { x: arcBounds.left, y: arcBounds.top });\n\t\tsetPoint(bounds, { x: arcBounds.right, y: arcBounds.bottom });\n\t}\n}\n\n/**\n * @ignore\n */\nclass ArcTo extends Op {\n\tconstructor(\n\t\tpublic x1: number,\n\t\tpublic y1: number,\n\t\tpublic x2: number,\n\t\tpublic y2: number,\n\t\tpublic radius: number,\n\t) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tif (this.radius > 0) {\n\t\t\tcontext.arcTo(this.x1, this.y1, this.x2, this.y2, this.radius);\n\t\t}\n\t}\n\n\t// TODO: add points\n\tpublic addBounds(_bounds: IBounds): void {\n\t\t/*\n\t\t// not finished\n\t\thttps://math.stackexchange.com/questions/1781438/finding-the-center-of-a-circle-given-two-points-and-a-radius-algebraically\n\n\t\tif (prevPoint) {\n\t\t\tlet x1 = prevPoint.x;\n\t\t\tlet y1 = prevPoint.y;\n\t\t\tlet x2 = this.x2;\n\t\t\tlet y2 = this.y2;\n\t\t\tlet r = this.radius;\n\n\t\t\tlet xa = (x2 - x1) / 2;\n\t\t\tlet ya = (y2 - y1) / 2;\n\n\t\t\tlet x0 = x1 + xa;\n\t\t\tlet y0 = y1 + ya;\n\n\t\t\tlet a = Math.hypot(xa, ya);\n\t\t\tlet b = Math.sqrt(r * r - a * a);\n\n\t\t\tlet cx = x0 + b * ya / a;\n\t\t\tlet cy = y0 - b * xa / a;\n\n\t\t\tconsole.log(cx, cy);\n\t\t}*/\n\t}\n}\n\n/**\n * @ignore\n */\nclass LineTo extends Op {\n\tconstructor(public x: number, public y: number) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.lineTo(this.x, this.y);\n\t}\n\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.x, y: this.y });\n\t}\n}\n\n/**\n * @ignore\n */\nclass MoveTo extends Op {\n\tconstructor(public x: number, public y: number) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.moveTo(this.x, this.y);\n\t}\n\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.x, y: this.y });\n\t}\n}\n\n/**\n * @ignore\n */\nclass ClosePath extends Op {\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.closePath();\n\t}\n}\n\n/**\n * @ignore\n */\nclass BezierCurveTo extends Op {\n\tconstructor(\n\t\tpublic cpX: number,\n\t\tpublic cpY: number,\n\t\tpublic cpX2: number,\n\t\tpublic cpY2: number,\n\t\tpublic toX: number,\n\t\tpublic toY: number,\n\t) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.bezierCurveTo(this.cpX, this.cpY, this.cpX2, this.cpY2, this.toX, this.toY);\n\t}\n\n\t// TODO: OK?\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.cpX, y: this.cpY });\n\t\tsetPoint(bounds, { x: this.cpX2, y: this.cpY2 });\n\t\tsetPoint(bounds, { x: this.toX, y: this.toY });\n\t}\n}\n\n/**\n * @ignore\n */\nclass QuadraticCurveTo extends Op {\n\tconstructor(\n\t\tpublic cpX: number,\n\t\tpublic cpY: number,\n\t\tpublic toX: number,\n\t\tpublic toY: number,\n\t) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.quadraticCurveTo(this.cpX, this.cpY, this.toX, this.toY);\n\t}\n\n\t// TODO: OK?\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.cpX, y: this.cpY });\n\t\tsetPoint(bounds, { x: this.toX, y: this.toY });\n\t}\n}\n\n/**\n * @ignore\n */\nclass Shadow extends Op {\n\tconstructor(\n\t\tpublic color: string,\n\t\tpublic blur: number,\n\t\tpublic offsetX: number,\n\t\tpublic offsetY: number,\n\t\tpublic opacity?: number\n\t) { super(); }\n\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tif (this.opacity) {\n\t\t\tcontext.fillStyle = this.color;\n\t\t}\n\t\tcontext.shadowColor = this.color;\n\t\tcontext.shadowBlur = this.blur;\n\t\tcontext.shadowOffsetX = this.offsetX;\n\t\tcontext.shadowOffsetY = this.offsetY;\n\t}\n}\n\n/**\n * @ignore\n */\nclass GraphicsImage extends Op {\n\tconstructor(\n\t\tpublic image: HTMLImageElement,\n\t\tpublic width: number,\n\t\tpublic height: number,\n\t\tpublic x: number,\n\t\tpublic y: number\n\t) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.drawImage(this.image, this.x, this.y, this.width, this.height);\n\t}\n\n\t// TODO: OK?\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.x, y: this.y });\n\t\tsetPoint(bounds, { x: this.width, y: this.height });\n\t}\n}\n\n/**\n * @ignore\n */\nexport class CanvasGraphics extends CanvasDisplayObject implements IGraphics {\n\tprotected _operations: Array<Op> = [];\n\n\tpublic blendMode: BlendMode = BlendMode.NORMAL;\n\n\tprotected _hasShadows: boolean = false;\n\tprotected _fillAlpha?: number;\n\tprotected _strokeAlpha?: number;\n\n\tclear(): void {\n\t\tsuper.clear();\n\t\tthis._operations.length = 0;\n\t}\n\n\tprotected _pushOp(op: Op): void {\n\t\tthis._operations.push(op);\n\t}\n\n\tbeginFill(color?: Color | CanvasGradient | CanvasPattern, alpha: number = 1): void {\n\t\tthis._fillAlpha = alpha;\n\t\tif (color) {\n\t\t\tif (color instanceof Color) {\n\t\t\t\tthis._pushOp(new BeginFill(color.toCSS(alpha)));\n\n\t\t\t} else {\n\t\t\t\tthis.isMeasured = true;\n\t\t\t\tthis._pushOp(new BeginFill(color));\n\t\t\t}\n\t\t} else {\n\t\t\tthis._pushOp(new BeginFill(\"rgba(0, 0, 0, \" + alpha + \")\"));\n\t\t}\n\t}\n\n\tendFill(): void {\n\t\tthis._pushOp(new EndFill(this._hasShadows));\n\t}\n\n\tendStroke(): void {\n\t\tthis._pushOp(new EndStroke());\n\t}\n\n\tlineStyle(width: number = 0, color?: Color | CanvasGradient | CanvasPattern, alpha: number = 1, lineJoin?: \"miter\" | \"round\" | \"bevel\"): void {\n\t\tthis._strokeAlpha = alpha;\n\t\tif (color) {\n\t\t\tif (color instanceof Color) {\n\t\t\t\tthis._pushOp(new LineStyle(width, color.toCSS(alpha), lineJoin));\n\t\t\t} else {\n\t\t\t\tthis._pushOp(new LineStyle(width, color, lineJoin));\n\t\t\t}\n\t\t} else {\n\t\t\tthis._pushOp(new LineStyle(width, \"rgba(0, 0, 0, \" + alpha + \")\", lineJoin));\n\t\t}\n\t}\n\n\tsetLineDash(dash?: number[]): void {\n\t\tthis._pushOp(new LineDash(dash ? dash : []));\n\t}\n\n\tsetLineDashOffset(dashOffset: number = 0): void {\n\t\tthis._pushOp(new LineDashOffset(dashOffset));\n\t}\n\n\tdrawRect(x: number, y: number, width: number, height: number): void {\n\t\tthis._pushOp(new DrawRect(x, y, width, height));\n\t}\n\n\tdrawCircle(x: number, y: number, radius: number): void {\n\t\tthis._pushOp(new DrawCircle(x, y, radius));\n\t}\n\n\tdrawEllipse(x: number, y: number, radiusX: number, radiusY: number): void {\n\t\tthis._pushOp(new DrawEllipse(x, y, radiusX, radiusY));\n\t}\n\n\tarc(cx: number, cy: number, radius: number, startAngle: number, endAngle: number, anticlockwise: boolean = false): void {\n\t\tthis._pushOp(new Arc(cx, cy, radius, startAngle, endAngle, anticlockwise));\n\t}\n\n\tarcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void {\n\t\tthis._pushOp(new ArcTo(x1, y1, x2, y2, radius));\n\t}\n\n\tlineTo(x: number, y: number): void {\n\t\tthis._pushOp(new LineTo(x, y));\n\t}\n\n\tmoveTo(x: number, y: number): void {\n\t\tthis._pushOp(new MoveTo(x, y));\n\t}\n\n\tbezierCurveTo(cpX: number, cpY: number, cpX2: number, cpY2: number, toX: number, toY: number): void {\n\t\tthis._pushOp(new BezierCurveTo(cpX, cpY, cpX2, cpY2, toX, toY));\n\t}\n\n\tquadraticCurveTo(cpX: number, cpY: number, toX: number, toY: number): void {\n\t\tthis._pushOp(new QuadraticCurveTo(cpX, cpY, toX, toY));\n\t}\n\n\tclosePath(): void {\n\t\tthis._pushOp(new ClosePath());\n\t}\n\n\tshadow(color: Color, blur: number = 0, offsetX: number = 0, offsetY: number = 0, opacity?: number): void {\n\t\tthis._hasShadows = true;\n\t\tthis._pushOp(new Shadow(opacity ? color.toCSS(opacity) : color.toCSS(this._fillAlpha || this._strokeAlpha), blur, offsetX, offsetY));\n\t}\n\n\timage(image: HTMLImageElement, width: number, height: number, x: number, y: number): void {\n\t\tthis._pushOp(new GraphicsImage(image, width, height, x, y));\n\t}\n\n\t// https://svgwg.org/svg2-draft/paths.html#DProperty\n\t// TODO better error checking\n\tsvgPath(path: string): void {\n\t\tlet x = 0;\n\t\tlet y = 0;\n\t\tlet cpx: number | null = null;\n\t\tlet cpy: number | null = null;\n\t\tlet qcpx: number | null = null;\n\t\tlet qcpy: number | null = null;\n\n\t\tconst SEGMENTS_REGEXP = /([MmZzLlHhVvCcSsQqTtAa])([^MmZzLlHhVvCcSsQqTtAa]*)/g;\n\t\tconst ARGS_REGEXP = /[\\u0009\\u0020\\u000A\\u000C\\u000D]*([\\+\\-]?[0-9]*\\.?[0-9]+(?:[eE][\\+\\-]?[0-9]+)?)[\\u0009\\u0020\\u000A\\u000C\\u000D]*,?/g;\n\n\t\tlet match;\n\n\t\twhile ((match = SEGMENTS_REGEXP.exec(path)) !== null) {\n\t\t\tconst name = match[1];\n\t\t\tconst rest = match[2];\n\n\t\t\tconst args: Array<string> = [];\n\n\t\t\twhile ((match = ARGS_REGEXP.exec(rest)) !== null) {\n\t\t\t\targs.push(match[1]);\n\t\t\t}\n\n\t\t\t// Reset control point\n\t\t\tif (name !== \"S\" && name !== \"s\" && name !== \"C\" && name !== \"c\") {\n\t\t\t\tcpx = null;\n\t\t\t\tcpy = null;\n\t\t\t}\n\n\t\t\t// Reset control point\n\t\t\tif (name !== \"Q\" && name !== \"q\" && name !== \"T\" && name !== \"t\") {\n\t\t\t\tqcpx = null;\n\t\t\t\tqcpy = null;\n\t\t\t}\n\n\t\t\tswitch (name) {\n\t\t\t\tcase \"M\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tx = +args[0];\n\t\t\t\t\ty = +args[1];\n\t\t\t\t\tthis.moveTo(x, y);\n\n\t\t\t\t\tfor (let i = 2; i < args.length; i += 2) {\n\t\t\t\t\t\tx = +args[i];\n\t\t\t\t\t\ty = +args[i + 1];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"m\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tx += +args[0];\n\t\t\t\t\ty += +args[1];\n\t\t\t\t\tthis.moveTo(x, y);\n\n\t\t\t\t\tfor (let i = 2; i < args.length; i += 2) {\n\t\t\t\t\t\tx += +args[i];\n\t\t\t\t\t\ty += +args[i + 1];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"L\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 2) {\n\t\t\t\t\t\tx = +args[i];\n\t\t\t\t\t\ty = +args[i + 1];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"l\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 2) {\n\t\t\t\t\t\tx += +args[i];\n\t\t\t\t\t\ty += +args[i + 1];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"H\":\n\t\t\t\t\tcheckMinArgs(name, args.length, 1);\n\t\t\t\t\tfor (let i = 0; i < args.length; ++i) {\n\t\t\t\t\t\tx = +args[i];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"h\":\n\t\t\t\t\tcheckMinArgs(name, args.length, 1);\n\t\t\t\t\tfor (let i = 0; i < args.length; ++i) {\n\t\t\t\t\t\tx += +args[i];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"V\":\n\t\t\t\t\tcheckMinArgs(name, args.length, 1);\n\t\t\t\t\tfor (let i = 0; i < args.length; ++i) {\n\t\t\t\t\t\ty = +args[i];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"v\":\n\t\t\t\t\tcheckMinArgs(name, args.length, 1);\n\t\t\t\t\tfor (let i = 0; i < args.length; ++i) {\n\t\t\t\t\t\ty += +args[i];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"C\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 6);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 6) {\n\t\t\t\t\t\tconst x1 = +args[i];\n\t\t\t\t\t\tconst y1 = +args[i + 1];\n\t\t\t\t\t\tcpx = +args[i + 2];\n\t\t\t\t\t\tcpy = +args[i + 3];\n\t\t\t\t\t\tx = +args[i + 4];\n\t\t\t\t\t\ty = +args[i + 5];\n\t\t\t\t\t\tthis.bezierCurveTo(x1, y1, cpx, cpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"c\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 6);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 6) {\n\t\t\t\t\t\tconst x1 = +args[i] + x;\n\t\t\t\t\t\tconst y1 = +args[i + 1] + y;\n\t\t\t\t\t\tcpx = +args[i + 2] + x;\n\t\t\t\t\t\tcpy = +args[i + 3] + y;\n\t\t\t\t\t\tx += +args[i + 4];\n\t\t\t\t\t\ty += +args[i + 5];\n\t\t\t\t\t\tthis.bezierCurveTo(x1, y1, cpx, cpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"S\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 4);\n\t\t\t\t\tif (cpx === null || cpy === null) {\n\t\t\t\t\t\tcpx = x;\n\t\t\t\t\t\tcpy = y;\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 4) {\n\t\t\t\t\t\tconst x1 = 2 * x - cpx;\n\t\t\t\t\t\tconst y1 = 2 * y - cpy;\n\t\t\t\t\t\tcpx = +args[i];\n\t\t\t\t\t\tcpy = +args[i + 1];\n\t\t\t\t\t\tx = +args[i + 2];\n\t\t\t\t\t\ty = +args[i + 3];\n\t\t\t\t\t\tthis.bezierCurveTo(x1, y1, cpx, cpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"s\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 4);\n\t\t\t\t\tif (cpx === null || cpy === null) {\n\t\t\t\t\t\tcpx = x;\n\t\t\t\t\t\tcpy = y;\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 4) {\n\t\t\t\t\t\tconst x1 = 2 * x - cpx;\n\t\t\t\t\t\tconst y1 = 2 * y - cpy;\n\t\t\t\t\t\tcpx = +args[i] + x;\n\t\t\t\t\t\tcpy = +args[i + 1] + y;\n\t\t\t\t\t\tx += +args[i + 2];\n\t\t\t\t\t\ty += +args[i + 3];\n\t\t\t\t\t\tthis.bezierCurveTo(x1, y1, cpx, cpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"Q\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 4);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 4) {\n\t\t\t\t\t\tqcpx = +args[i];\n\t\t\t\t\t\tqcpy = +args[i + 1];\n\t\t\t\t\t\tx = +args[i + 2];\n\t\t\t\t\t\ty = +args[i + 3];\n\t\t\t\t\t\tthis.quadraticCurveTo(qcpx, qcpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"q\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 4);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 4) {\n\t\t\t\t\t\tqcpx = +args[i] + x;\n\t\t\t\t\t\tqcpy = +args[i + 1] + y;\n\t\t\t\t\t\tx += +args[i + 2];\n\t\t\t\t\t\ty += +args[i + 3];\n\t\t\t\t\t\tthis.quadraticCurveTo(qcpx, qcpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"T\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tif (qcpx === null || qcpy === null) {\n\t\t\t\t\t\tqcpx = x;\n\t\t\t\t\t\tqcpy = y;\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 2) {\n\t\t\t\t\t\tqcpx = 2 * x - qcpx;\n\t\t\t\t\t\tqcpy = 2 * y - qcpy;\n\t\t\t\t\t\tx = +args[i];\n\t\t\t\t\t\ty = +args[i + 1];\n\t\t\t\t\t\tthis.quadraticCurveTo(qcpx, qcpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"t\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tif (qcpx === null || qcpy === null) {\n\t\t\t\t\t\tqcpx = x;\n\t\t\t\t\t\tqcpy = y;\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 2) {\n\t\t\t\t\t\tqcpx = 2 * x - qcpx;\n\t\t\t\t\t\tqcpy = 2 * y - qcpy;\n\t\t\t\t\t\tx += +args[i];\n\t\t\t\t\t\ty += +args[i + 1];\n\t\t\t\t\t\tthis.quadraticCurveTo(qcpx, qcpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"A\":\n\t\t\t\tcase \"a\":\n\t\t\t\t\tconst relative = (name === \"a\");\n\n\t\t\t\t\tsplitArcFlags(args);\n\t\t\t\t\tcheckEvenArgs(name, args.length, 7);\n\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 7) {\n\t\t\t\t\t\tlet cx = +args[i + 5];\n\t\t\t\t\t\tlet cy = +args[i + 6];\n\n\t\t\t\t\t\tif (relative) {\n\t\t\t\t\t\t\tcx += x;\n\t\t\t\t\t\t\tcy += y;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst bs = arcToBezier({\n\t\t\t\t\t\t\tpx: x,\n\t\t\t\t\t\t\tpy: y,\n\t\t\t\t\t\t\trx: +args[i],\n\t\t\t\t\t\t\try: +args[i + 1],\n\t\t\t\t\t\t\txAxisRotation: +args[i + 2],\n\t\t\t\t\t\t\tlargeArcFlag: assertBinary(+args[i + 3]),\n\t\t\t\t\t\t\tsweepFlag: assertBinary(+args[i + 4]),\n\t\t\t\t\t\t\tcx,\n\t\t\t\t\t\t\tcy,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t$array.each(bs, (b) => {\n\t\t\t\t\t\t\tthis.bezierCurveTo(b.x1, b.y1, b.x2, b.y2, b.x, b.y);\n\t\t\t\t\t\t\tx = b.x;\n\t\t\t\t\t\t\ty = b.y;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"z\":\n\t\t\t\t\tcheckArgs(name, args.length, 0);\n\t\t\t\t\tthis.closePath();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\n\tpublic _runPath(context: CanvasRenderingContext2D): void {\n\t\tcontext.beginPath();\n\n\t\t$array.each(this._operations, (op) => {\n\t\t\top.path(context);\n\t\t});\n\t}\n\n\tprotected _render(parentLayer: CanvasLayer): void {\n\t\tsuper._render(parentLayer);\n\n\t\tconst layer = this._layer || parentLayer;\n\n\t\tconst layerDirty = layer.dirty;\n\t\tconst interactive = this._isInteractive();\n\n\t\tif (layerDirty || interactive) {\n\n\t\t\tconst context = layer.context;\n\t\t\tconst ghostContext = this._renderer._ghostLayer.context;\n\n\t\t\tif (layerDirty) {\n\t\t\t\tcontext.globalCompositeOperation = this.blendMode;\n\n\t\t\t\tcontext.beginPath();\n\t\t\t}\n\n\t\t\tlet color: string | undefined;\n\n\t\t\tif (interactive) {\n\t\t\t\tghostContext.beginPath();\n\t\t\t\tcolor = this._getColorId();\n\t\t\t}\n\n\t\t\t$array.each(this._operations, (op) => {\n\t\t\t\tif (layerDirty) {\n\t\t\t\t\top.path(context);\n\t\t\t\t\top.colorize(context, undefined);\n\t\t\t\t}\n\n\t\t\t\tif (interactive) {\n\t\t\t\t\top.path(ghostContext);\n\t\t\t\t\top.colorize(ghostContext, color);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic renderDetached(context: CanvasRenderingContext2D): void {\n\t\tif (this.visible) {\n\t\t\tthis._setMatrix();\n\n\t\t\tcontext.save();\n\n\t\t\t// We must apply the mask before we transform the element\n\t\t\tconst mask = this.mask;\n\t\t\tif (mask) {\n\t\t\t\tmask._setMatrix();\n\t\t\t\tmask._transform(context, 1);\n\t\t\t\tmask._runPath(context);\n\t\t\t\tcontext.clip();\n\t\t\t}\n\n\t\t\t// TODO handle compoundAlpha somehow ?\n\t\t\tcontext.globalAlpha = this.compoundAlpha * this.alpha;\n\n\t\t\tthis._transform(context, 1);\n\n\t\t\tif (this.filter) {\n\t\t\t\tcontext.filter = this.filter;\n\t\t\t}\n\n\t\t\tcontext.globalCompositeOperation = this.blendMode;\n\n\t\t\tcontext.beginPath();\n\n\t\t\t$array.each(this._operations, (op) => {\n\t\t\t\top.path(context);\n\t\t\t\top.colorize(context, undefined);\n\t\t\t});\n\n\t\t\tcontext.restore();\n\t\t}\n\t}\n\n\tpublic _addBounds(bounds: IBounds): void {\n\t\tif (this.visible && this.isMeasured) {\n\t\t\t$array.each(this._operations, (op) => {\n\t\t\t\top.addBounds(bounds);\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\ninterface ILineChunk {\n\tstyle: string | undefined,\n\tfill: Color | undefined,\n\ttext: string,\n\twidth: number,\n\theight: number,\n\tleft: number,\n\tright: number,\n\tascent: number,\n\toffsetX: number,\n\toffsetY: number,\n\ttextDecoration: string | undefined,\n\tverticalAlign?: \"baseline\" | \"sub\" | \"super\"\n}\n\n/**\n * @ignore\n */\ninterface ILine {\n\toffsetY: number,\n\tascent: number,\n\twidth: number,\n\theight: number,\n\tleft: number,\n\tright: number,\n\ttextChunks: Array<ILineChunk>,\n}\n\n/**\n * @ignore\n */\nexport class CanvasText extends CanvasDisplayObject implements IText {\n\tpublic text: string;\n\tpublic style: CanvasTextStyle;\n\tpublic resolution: number = 1;\n\n\tprotected _textInfo: Array<ILine> | undefined;\n\tprotected _textVisible: boolean = true;\n\tprotected _originalScale?: number = 1;\n\n\tconstructor(renderer: CanvasRenderer, text: string, style: CanvasTextStyle) {\n\t\tsuper(renderer);\n\t\tthis.text = text;\n\t\tthis.style = style;\n\t}\n\n\tpublic invalidateBounds(): void {\n\t\tsuper.invalidateBounds();\n\t\tthis._textInfo = undefined;\n\t}\n\n\tprivate _shared(context: CanvasRenderingContext2D) {\n\t\tif (this.style.textAlign) {\n\t\t\tcontext.textAlign = this.style.textAlign;\n\t\t}\n\n\t\tif (this.style.direction) {\n\t\t\tcontext.direction = this.style.direction;\n\t\t}\n\n\t\tif (this.style.textBaseline) {\n\t\t\tcontext.textBaseline = this.style.textBaseline;\n\t\t}\n\n\t}\n\n\tprotected _prerender(layer: CanvasLayer, ignoreGhost = false, ignoreFontWeight = false): void {\n\t\tsuper._render(layer);\n\n\t\tconst context = layer.context;\n\t\tconst ghostContext = this._renderer._ghostLayer.context;\n\n\t\t// Font style\n\n\t\tconst style = this.style;\n\t\tlet fontStyle = this._getFontStyle(undefined, ignoreFontWeight);\n\n\t\tcontext.font = fontStyle;\n\t\tif (this._isInteractive() && !ignoreGhost) {\n\t\t\tghostContext.font = fontStyle;\n\t\t}\n\n\t\t// Other parameters\n\t\tif (style.fill) {\n\t\t\tif (style.fill instanceof Color) {\n\t\t\t\tcontext.fillStyle = style.fill.toCSS(style.fillOpacity != undefined ? style.fillOpacity : 1);\n\t\t\t} else {\n\t\t\t\tcontext.fillStyle = style.fill;\n\t\t\t}\n\t\t}\n\n\t\tif (style.shadowColor) {\n\t\t\tlayer.context.shadowColor = style.shadowColor.toCSS(style.shadowOpacity || 1);\n\t\t}\n\t\tif (style.shadowBlur) {\n\t\t\tlayer.context.shadowBlur = style.shadowBlur;\n\t\t}\n\t\tif (style.shadowOffsetX) {\n\t\t\tlayer.context.shadowOffsetX = style.shadowOffsetX;\n\t\t}\n\t\tif (style.shadowOffsetY) {\n\t\t\tlayer.context.shadowOffsetY = style.shadowOffsetY;\n\t\t}\n\n\t\tthis._shared(context);\n\n\t\tif (this._isInteractive() && !ignoreGhost) {\n\t\t\tghostContext.fillStyle = this._getColorId();\n\t\t\tthis._shared(ghostContext);\n\t\t}\n\t}\n\n\tprotected _getFontStyle(style2?: ITextStyle, ignoreFontWeight = false): string {\n\n\t\t// Process defaults\n\t\tconst style = this.style;\n\t\tlet fontStyle: string[] = [];\n\n\t\tif (style2 && style2.fontVariant) {\n\t\t\tfontStyle.push(style2.fontVariant);\n\t\t}\n\t\telse if (style.fontVariant) {\n\t\t\tfontStyle.push(style.fontVariant);\n\t\t}\n\n\t\tif (!ignoreFontWeight) {\n\t\t\tif (style2 && style2.fontWeight) {\n\t\t\t\tfontStyle.push(style2.fontWeight);\n\t\t\t}\n\t\t\telse if (style.fontWeight) {\n\t\t\t\tfontStyle.push(style.fontWeight);\n\t\t\t}\n\t\t}\n\n\t\tif (style2 && style2.fontStyle) {\n\t\t\tfontStyle.push(style2.fontStyle);\n\t\t}\n\t\telse if (style.fontStyle) {\n\t\t\tfontStyle.push(style.fontStyle);\n\t\t}\n\n\t\tif (style2 && style2.fontSize) {\n\t\t\tif ($type.isNumber(style2.fontSize)) {\n\t\t\t\tstyle2.fontSize = style2.fontSize + \"px\";\n\t\t\t}\n\t\t\tfontStyle.push(style2.fontSize);\n\t\t}\n\t\telse if (style.fontSize) {\n\t\t\tif ($type.isNumber(style.fontSize)) {\n\t\t\t\tstyle.fontSize = style.fontSize + \"px\";\n\t\t\t}\n\t\t\tfontStyle.push(style.fontSize);\n\t\t}\n\n\t\tif (style2 && style2.fontFamily) {\n\t\t\tfontStyle.push(style2.fontFamily);\n\t\t}\n\t\telse if (style.fontFamily) {\n\t\t\tfontStyle.push(style.fontFamily);\n\t\t}\n\t\telse if (fontStyle.length) {\n\t\t\tfontStyle.push(\"Arial\");\n\t\t}\n\n\t\treturn fontStyle.join(\" \");\n\t}\n\n\tprotected _render(parentLayer: CanvasLayer): void {\n\t\tconst layer = this._layer || parentLayer;\n\n\t\t// We need measurements in order to properly position text for alignment\n\t\tif (!this._textInfo) {\n\t\t\tthis._measure(layer);\n\t\t}\n\n\t\tif (this._textVisible) {\n\n\t\t\tconst interactive = this._isInteractive();\n\t\t\tconst context = layer.context;\n\t\t\tconst layerDirty = layer.dirty;\n\t\t\tconst ghostContext = this._renderer._ghostLayer.context;\n\n\t\t\tcontext.save();\n\t\t\tghostContext.save();\n\t\t\tthis._prerender(layer);\n\n\t\t\t// const lines = this.text.toString().replace(/\\r/g, \"\").split(/\\n/);\n\t\t\t// const x = this._localBounds && (this._localBounds.left < 0) ? Math.abs(this._localBounds.left) : 0;\n\n\t\t\t// Process text info produced by _measure()\n\t\t\t$array.each(this._textInfo!, (line, _index) => {\n\t\t\t\t$array.each(line.textChunks, (chunk, _index) => {\n\n\t\t\t\t\t// Set style\n\t\t\t\t\tif (chunk.style) {\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tghostContext.save();\n\n\t\t\t\t\t\tcontext.font = chunk.style;\n\t\t\t\t\t\tif (this._isInteractive()) {\n\t\t\t\t\t\t\tghostContext.font = chunk.style;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chunk.fill) {\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tcontext.fillStyle = chunk.fill.toCSS();\n\t\t\t\t\t\t// Color does not affect ghostContext so we not set it\n\t\t\t\t\t}\n\n\t\t\t\t\t// Draw text\n\t\t\t\t\tif (layerDirty) {\n\t\t\t\t\t\tcontext.fillText(chunk.text, chunk.offsetX, line.offsetY + chunk.offsetY);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Draw underline\n\t\t\t\t\tif (chunk.textDecoration == \"underline\" || chunk.textDecoration == \"line-through\") {\n\n\t\t\t\t\t\tlet thickness = 1;\n\t\t\t\t\t\tlet offset = 1;\n\t\t\t\t\t\tlet fontSize = chunk.height;\n\n\t\t\t\t\t\tlet offsetX = chunk.offsetX;\n\t\t\t\t\t\tswitch (this.style.textAlign) {\n\t\t\t\t\t\t\tcase \"right\":\n\t\t\t\t\t\t\tcase \"end\":\n\t\t\t\t\t\t\t\toffsetX -= chunk.width;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"center\":\n\t\t\t\t\t\t\t\toffsetX -= chunk.width / 2;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (chunk.style) {\n\t\t\t\t\t\t\tconst format = TextFormatter.getTextStyle(chunk.style);\n\t\t\t\t\t\t\tswitch (format.fontWeight) {\n\t\t\t\t\t\t\t\tcase \"bolder\":\n\t\t\t\t\t\t\t\tcase \"bold\":\n\t\t\t\t\t\t\t\tcase \"700\":\n\t\t\t\t\t\t\t\tcase \"800\":\n\t\t\t\t\t\t\t\tcase \"900\":\n\t\t\t\t\t\t\t\t\tthickness = 2;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (fontSize) {\n\t\t\t\t\t\t\toffset = fontSize / 20;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet y: number;\n\n\t\t\t\t\t\tif (chunk.textDecoration == \"line-through\") {\n\t\t\t\t\t\t\ty = thickness + line.offsetY + chunk.offsetY - chunk.height / 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\ty = thickness + offset * 1.5 + line.offsetY + chunk.offsetY;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tcontext.beginPath();\n\t\t\t\t\t\tif (chunk.fill) {\n\t\t\t\t\t\t\tcontext.strokeStyle = chunk.fill.toCSS();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (this.style.fill && this.style.fill instanceof Color) {\n\t\t\t\t\t\t\tcontext.strokeStyle = this.style.fill.toCSS();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontext.lineWidth = thickness * offset;\n\t\t\t\t\t\tcontext.moveTo(offsetX, y);\n\t\t\t\t\t\tcontext.lineTo(offsetX + chunk.width, y);\n\t\t\t\t\t\tcontext.stroke();\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (interactive && this.interactive) {\n\t\t\t\t\t\t// Draw text in ghost canvas ONLY if it is set as interactive\n\t\t\t\t\t\t// explicitly. This way we avoid hit test anomalies caused by anti\n\t\t\t\t\t\t// aliasing of text.\n\t\t\t\t\t\tghostContext.fillText(chunk.text, chunk.offsetX, line.offsetY + chunk.offsetY);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chunk.fill) {\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t// Color does not affect ghostContext so we not set it\n\t\t\t\t\t}\n\n\t\t\t\t\t// Reset style\n\t\t\t\t\tif (chunk.style) {\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\tghostContext.restore();\n\t\t\t\t\t}\n\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tcontext.restore();\n\t\t\tghostContext.restore();\n\t\t}\n\t}\n\n\tpublic _addBounds(bounds: IBounds): void {\n\t\tif (this.visible && this.isMeasured) {\n\t\t\t//if (this._textVisible) {\n\t\t\tconst x = this._measure(this.getLayer());\n\t\t\tsetPoint(bounds, { x: x.left, y: x.top });\n\t\t\tsetPoint(bounds, { x: x.right, y: x.bottom });\n\t\t\t//}\n\t\t}\n\t}\n\n\tprotected _ignoreFontWeight(): boolean {\n\t\treturn /apple/i.test(navigator.vendor);\n\t}\n\n\tpublic _measure(layer: CanvasLayer): IBounds {\n\t\tconst context = layer.context;\n\t\tconst ghostContext = this._renderer._ghostLayer.context;\n\t\tconst rtl = this.style.direction == \"rtl\";\n\n\t\t// Reset text info\n\t\tthis._textInfo = [];\n\n\t\t// Init\n\t\tconst oversizedBehavior = this.style.oversizedBehavior;\n\t\tconst maxWidth = this.style.maxWidth!;\n\n\t\tconst truncate = $type.isNumber(maxWidth) && oversizedBehavior == \"truncate\";\n\t\tconst wrap = $type.isNumber(maxWidth) && (oversizedBehavior == \"wrap\" || oversizedBehavior == \"wrap-no-break\");\n\n\t\t// Pre-render\n\t\tcontext.save();\n\t\tghostContext.save();\n\t\tthis._prerender(layer, true, this._ignoreFontWeight());\n\n\t\t// Get default font metrix\n\t\tconst refText = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 \";\n\n\t\t// Split up text into lines\n\t\tconst lines = this.text.toString().replace(/\\r/g, \"\").split(/\\n/);\n\t\tlet styleRestored = true;\n\t\tlet minX = 0;\n\t\tlet maxX = 0;\n\n\t\t// Iterate through the lines\n\t\tlet offsetY = 0;\n\t\tlet currentStyle: string | undefined;\n\t\t$array.each(lines, (line, _index) => {\n\n\t\t\t// Split up line into format/value chunks\n\t\t\tlet chunks: ITextChunk[];\n\t\t\tif (line == \"\") {\n\t\t\t\tchunks = [{\n\t\t\t\t\ttype: \"value\",\n\t\t\t\t\ttext: \"\"\n\t\t\t\t}];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tchunks = TextFormatter.chunk(line, false, this.style.ignoreFormatting);\n\t\t\t}\n\n\t\t\twhile (chunks.length > 0) {\n\n\t\t\t\t// Init line object\n\t\t\t\tlet lineInfo: ILine = {\n\t\t\t\t\toffsetY: offsetY,\n\t\t\t\t\tascent: 0,\n\t\t\t\t\twidth: 0,\n\t\t\t\t\theight: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: 0,\n\t\t\t\t\ttextChunks: []\n\t\t\t\t};\n\n\t\t\t\t// Measure reference text\n\t\t\t\tconst metrics = this._measureText(refText, context);\n\n\t\t\t\tconst height = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\n\t\t\t\tlineInfo.height = height;\n\t\t\t\tlineInfo.ascent = metrics.actualBoundingBoxAscent;\n\n\t\t\t\tlet currentFormat: string;\n\t\t\t\tlet currentDecoration: string | undefined = this.style.textDecoration;\n\t\t\t\tlet currentFill: Color | undefined;\n\t\t\t\tlet currentChunkWidth: number | undefined;\n\t\t\t\tlet skipFurtherText = false;\n\t\t\t\tlet firstTextChunk = true;\n\t\t\t\tlet leftoverChunks: Array<ITextChunk> = [];\n\t\t\t\tlet currentVerticalAlign: \"baseline\" | \"sub\" | \"super\" | undefined;\n\t\t\t\t//let offsetX = 0;\n\t\t\t\t//let chunk;\n\n\t\t\t\t//while(chunk = chunks.shift()) {\n\t\t\t\t$array.eachContinue(chunks, (chunk, index) => {\n\n\t\t\t\t\t// Format chunk\n\t\t\t\t\tif (chunk.type == \"format\") {\n\t\t\t\t\t\tif (chunk.text == \"[/]\") {\n\t\t\t\t\t\t\tif (!styleRestored) {\n\t\t\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t\t\tghostContext.restore();\n\t\t\t\t\t\t\t\tstyleRestored = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcurrentFill = undefined;\n\t\t\t\t\t\t\tcurrentStyle = undefined;\n\t\t\t\t\t\t\tcurrentChunkWidth = undefined;\n\t\t\t\t\t\t\tcurrentDecoration = this.style.textDecoration;\n\t\t\t\t\t\t\tcurrentVerticalAlign = undefined\n\t\t\t\t\t\t\tcurrentFormat = chunk.text;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\n\t\t\t\t\t\t\tif (!styleRestored) {\n\t\t\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t\t\tghostContext.restore();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet format = TextFormatter.getTextStyle(chunk.text);\n\t\t\t\t\t\t\tconst fontStyle = this._getFontStyle(format);\n\t\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\t\tghostContext.save();\n\t\t\t\t\t\t\tcontext.font = fontStyle;\n\t\t\t\t\t\t\tcurrentStyle = fontStyle;\n\t\t\t\t\t\t\tcurrentFormat = chunk.text;\n\t\t\t\t\t\t\tif (format.textDecoration) {\n\t\t\t\t\t\t\t\tcurrentDecoration = format.textDecoration;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (format.fill) {\n\t\t\t\t\t\t\t\tcurrentFill = <Color>format.fill;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ((<any>format).width) {\n\t\t\t\t\t\t\t\tcurrentChunkWidth = $type.toNumber((<any>format).width);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (format.verticalAlign) {\n\t\t\t\t\t\t\t\tcurrentVerticalAlign = format.verticalAlign;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstyleRestored = false;\n\n\t\t\t\t\t\t\t// Measure reference text after change of format\n\t\t\t\t\t\t\tconst metrics = this._measureText(refText, context);\n\t\t\t\t\t\t\tconst height = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\n\t\t\t\t\t\t\tif (height > lineInfo.height) {\n\t\t\t\t\t\t\t\tlineInfo.height = height;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (metrics.actualBoundingBoxAscent > lineInfo.ascent) {\n\t\t\t\t\t\t\t\tlineInfo.ascent = metrics.actualBoundingBoxAscent;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Text chunk\n\t\t\t\t\telse if (chunk.type == \"value\" && !skipFurtherText) {\n\n\t\t\t\t\t\t// Measure\n\t\t\t\t\t\tconst metrics = this._measureText(chunk.text, context);\n\t\t\t\t\t\tlet chunkWidth = metrics.actualBoundingBoxLeft + metrics.actualBoundingBoxRight;\n\n\t\t\t\t\t\t// Check for fit\n\t\t\t\t\t\tif (truncate) {\n\n\t\t\t\t\t\t\t// Break words?\n\t\t\t\t\t\t\tlet breakWords = firstTextChunk || this.style.breakWords || false;\n\n\t\t\t\t\t\t\t// Measure ellipsis and check if it fits\n\t\t\t\t\t\t\tconst ellipsis = this.style.ellipsis || \"\";\n\t\t\t\t\t\t\tconst ellipsisMetrics = this._measureText(ellipsis, context);\n\t\t\t\t\t\t\tconst ellipsisWidth = ellipsisMetrics.actualBoundingBoxLeft + ellipsisMetrics.actualBoundingBoxRight;\n\n\t\t\t\t\t\t\t// Check fit\n\t\t\t\t\t\t\tif ((lineInfo.width + chunkWidth) > maxWidth) {\n\t\t\t\t\t\t\t\tconst excessWidth = maxWidth - lineInfo.width - ellipsisWidth;\n\t\t\t\t\t\t\t\tchunk.text = this._truncateText(context, chunk.text, excessWidth, breakWords);\n\t\t\t\t\t\t\t\tchunk.text += ellipsis;\n\t\t\t\t\t\t\t\tskipFurtherText = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (wrap) {\n\t\t\t\t\t\t\t// Check fit\n\t\t\t\t\t\t\tif ((lineInfo.width + chunkWidth) > maxWidth) {\n\t\t\t\t\t\t\t\tconst excessWidth = maxWidth - lineInfo.width;\n\t\t\t\t\t\t\t\tconst tmpText = this._truncateText(\n\t\t\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\t\t\tchunk.text,\n\t\t\t\t\t\t\t\t\texcessWidth,\n\t\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\t\t(firstTextChunk && this.style.oversizedBehavior != \"wrap-no-break\")\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tif (tmpText == \"\") {\n\t\t\t\t\t\t\t\t\t// Unable to fit a single letter - hide the whole label\n\t\t\t\t\t\t\t\t\tthis._textVisible = true;\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t//skipFurtherText = true;\n\n\t\t\t\t\t\t\t\t//Add remaining chunks for the next line\n\t\t\t\t\t\t\t\tleftoverChunks = chunks.slice(index + 1);\n\n\t\t\t\t\t\t\t\t//Add remaining text of current chunk if it was forced-cut\n\t\t\t\t\t\t\t\tif ($utils.trim(tmpText) != $utils.trim(chunk.text)) {\n\t\t\t\t\t\t\t\t\tleftoverChunks.unshift({\n\t\t\t\t\t\t\t\t\t\ttype: \"value\",\n\t\t\t\t\t\t\t\t\t\ttext: chunk.text.substr(tmpText.length)\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tif (currentFormat) {\n\t\t\t\t\t\t\t\t\t\tleftoverChunks.unshift({\n\t\t\t\t\t\t\t\t\t\t\ttype: \"format\",\n\t\t\t\t\t\t\t\t\t\t\ttext: currentFormat\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}\n\n\t\t\t\t\t\t\t\t// Set current chunk (truncated)\n\t\t\t\t\t\t\t\tchunk.text = $utils.trim(tmpText);\n\n\t\t\t\t\t\t\t\tchunks = [];\n\t\t\t\t\t\t\t\tskipFurtherText = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Chunk width?\n\t\t\t\t\t\tlet leftBoundMod = 1;\n\t\t\t\t\t\tlet rightBoundMod = 1;\n\t\t\t\t\t\tif (currentStyle && currentChunkWidth && (currentChunkWidth > chunkWidth)) {\n\t\t\t\t\t\t\t// increase horizontal bounding boxes accordingly\n\t\t\t\t\t\t\tconst boundsMod = chunkWidth / currentChunkWidth\n\t\t\t\t\t\t\tswitch (this.style.textAlign) {\n\t\t\t\t\t\t\t\tcase \"right\":\n\t\t\t\t\t\t\t\tcase \"end\":\n\t\t\t\t\t\t\t\t\tleftBoundMod = boundsMod;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"center\":\n\t\t\t\t\t\t\t\t\tleftBoundMod = boundsMod;\n\t\t\t\t\t\t\t\t\trightBoundMod = boundsMod;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\trightBoundMod = boundsMod;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tchunkWidth = currentChunkWidth;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst chunkHeight = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\n\n\n\t\t\t\t\t\tif (chunkHeight > lineInfo.height) {\n\t\t\t\t\t\t\tlineInfo.height = chunkHeight;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (metrics.actualBoundingBoxAscent > lineInfo.ascent) {\n\t\t\t\t\t\t\tlineInfo.ascent = metrics.actualBoundingBoxAscent;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlineInfo.width += chunkWidth;\n\t\t\t\t\t\tlineInfo.left += metrics.actualBoundingBoxLeft / leftBoundMod;\n\t\t\t\t\t\tlineInfo.right += metrics.actualBoundingBoxRight / rightBoundMod;\n\t\t\t\t\t\tlineInfo.textChunks.push({\n\t\t\t\t\t\t\tstyle: currentStyle,\n\t\t\t\t\t\t\tfill: currentFill,\n\t\t\t\t\t\t\ttext: chunk.text,\n\t\t\t\t\t\t\twidth: chunkWidth,\n\t\t\t\t\t\t\theight: chunkHeight,\n\t\t\t\t\t\t\tleft: metrics.actualBoundingBoxLeft,\n\t\t\t\t\t\t\tright: metrics.actualBoundingBoxRight,\n\t\t\t\t\t\t\tascent: metrics.actualBoundingBoxAscent,\n\t\t\t\t\t\t\toffsetX: 0,\n\t\t\t\t\t\t\toffsetY: 0,\n\t\t\t\t\t\t\ttextDecoration: currentDecoration,\n\t\t\t\t\t\t\tverticalAlign: currentVerticalAlign\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t//offsetX += chunkWidth;\n\n\t\t\t\t\t\tfirstTextChunk = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif (leftoverChunks) {\n\t\t\t\t\t\t//return false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t\t//}\n\t\t\t\t});\n\n\t\t\t\tif (this.style.lineHeight instanceof Percent) {\n\t\t\t\t\tlineInfo.height *= this.style.lineHeight.value;\n\t\t\t\t\tlineInfo.ascent *= this.style.lineHeight.value;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlineInfo.height *= this.style.lineHeight || 1.2;\n\t\t\t\t\tlineInfo.ascent *= this.style.lineHeight || 1.2;\n\t\t\t\t}\n\n\t\t\t\tif (minX < lineInfo.left) {\n\t\t\t\t\tminX = lineInfo.left;\n\t\t\t\t}\n\n\t\t\t\tif (maxX < lineInfo.right) {\n\t\t\t\t\tmaxX = lineInfo.right;\n\t\t\t\t}\n\n\t\t\t\tthis._textInfo!.push(lineInfo);\n\n\t\t\t\t//lineInfo.offsetY += lineInfo.ascent;\n\t\t\t\toffsetY += lineInfo.height;\n\n\t\t\t\t// Reset chunks so that it can proceed to the next line\n\t\t\t\tchunks = leftoverChunks || [];\n\t\t\t}\n\n\t\t});\n\n\t\tif (!styleRestored) {\n\t\t\tcontext.restore();\n\t\t\tghostContext.restore();\n\t\t}\n\n\t\t// Adjust chunk internal offsets\n\t\t$array.each(this._textInfo, (lineInfo, _index: number) => {\n\t\t\tlet currentChunkOffset = 0\n\t\t\t$array.each(lineInfo.textChunks, (chunk) => {\n\t\t\t\tchunk.offsetX = currentChunkOffset + chunk.left - lineInfo.left;\n\t\t\t\tchunk.offsetY += lineInfo.height - lineInfo.height * (this.style.baselineRatio || 0.19);\n\t\t\t\tcurrentChunkOffset += chunk.width;\n\n\t\t\t\tif (chunk.verticalAlign) {\n\t\t\t\t\tswitch (chunk.verticalAlign) {\n\t\t\t\t\t\tcase \"super\":\n\t\t\t\t\t\t\tchunk.offsetY -= lineInfo.height / 2 - chunk.height / 2;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"sub\":\n\t\t\t\t\t\t\tchunk.offsetY += chunk.height / 2;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tconst bounds = {\n\t\t\tleft: rtl ? -maxX : -minX,\n\t\t\ttop: 0,\n\t\t\tright: rtl ? minX : maxX,\n\t\t\tbottom: offsetY,\n\t\t};\n\n\n\t\t// We need to fit?\n\t\tif (oversizedBehavior !== \"none\") {\n\t\t\tconst ratio = this._fitRatio(bounds);\n\t\t\tif (ratio < 1) {\n\t\t\t\tif (oversizedBehavior == \"fit\") {\n\t\t\t\t\tif ($type.isNumber(this.style.minScale) && (ratio < this.style.minScale)) {\n\t\t\t\t\t\tthis._textVisible = false;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (!this._originalScale || this._originalScale == 1) {\n\t\t\t\t\t\t\tthis._originalScale = this.scale;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.scale = ratio;\n\t\t\t\t\t\tthis._textVisible = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (oversizedBehavior == \"hide\") {\n\t\t\t\t\tthis._textVisible = false;\n\t\t\t\t}\n\t\t\t\telse {\n\n\t\t\t\t\tswitch (this.style.textAlign) {\n\t\t\t\t\t\tcase \"right\":\n\t\t\t\t\t\tcase \"end\":\n\t\t\t\t\t\t\tbounds.left = -maxWidth;\n\t\t\t\t\t\t\tbounds.right = 0;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"center\":\n\t\t\t\t\t\t\tbounds.left = -maxWidth / 2;\n\t\t\t\t\t\t\tbounds.right = maxWidth / 2;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbounds.left = 0;\n\t\t\t\t\t\t\tbounds.right = maxWidth;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.scale = this._originalScale || 1;\n\t\t\t\t\tthis._originalScale = undefined;\n\t\t\t\t\tthis._textVisible = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.scale = this._originalScale || 1;\n\t\t\t\tthis._originalScale = undefined;\n\t\t\t\tthis._textVisible = true;\n\t\t\t}\n\t\t}\n\n\t\tcontext.restore();\n\t\tghostContext.restore();\n\n\t\treturn bounds;\n\t}\n\n\tprotected _fitRatio(bounds: IBounds): number {\n\t\tconst maxW = this.style.maxWidth;\n\t\tconst maxH = this.style.maxHeight;\n\t\tif (!$type.isNumber(maxW) && !$type.isNumber(maxH)) {\n\t\t\treturn 1;\n\t\t}\n\t\tconst w = bounds.right - bounds.left;\n\t\tconst h = bounds.bottom - bounds.top;\n\t\treturn Math.min(maxW! / w || 1, maxH! / h || 1);\n\t}\n\n\tprotected _truncateText(context: CanvasRenderingContext2D, text: string, maxWidth: number, breakWords: boolean = false, fallbackBreakWords: boolean = true): string {\n\t\tlet width: number;\n\t\tdo {\n\t\t\tif (breakWords) {\n\t\t\t\ttext = text.slice(0, -1);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet tmp = text.replace(/[^,;:!?\\\\\\/\\s]+[,;:!?\\\\\\/\\s]*$/g, \"\");\n\t\t\t\tif (tmp == \"\" && fallbackBreakWords) {\n\t\t\t\t\tbreakWords = true;\n\t\t\t\t}\n\t\t\t\telse if (tmp == \"\") {\n\t\t\t\t\treturn text;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttext = tmp;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst metrics = this._measureText(text, context);\n\t\t\twidth = metrics.actualBoundingBoxLeft + metrics.actualBoundingBoxRight;\n\t\t} while ((width > maxWidth) && text != \"\");\n\t\treturn text;\n\t}\n\n\tprotected _measureText(text: string, context: CanvasRenderingContext2D): TextMetrics {\n\t\tlet metrics = context.measureText(text);\n\t\tlet fakeMetrics: any = {};\n\t\tif (metrics.actualBoundingBoxAscent == null) {\n\t\t\tconst div = document.createElement(\"div\");\n\t\t\tdiv.innerText = text;\n\t\t\tdiv.style.visibility = \"hidden\";\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tdiv.style.top = \"-1000000px;\"\n\t\t\tdiv.style.fontFamily = this.style.fontFamily || \"\";\n\t\t\tdiv.style.fontSize = this.style.fontSize + \"\";\n\t\t\tdocument.body.appendChild(div);\n\t\t\tconst bbox = div.getBoundingClientRect();\n\t\t\tdocument.body.removeChild(div);\n\t\t\tconst h = bbox.height;\n\t\t\tconst w = metrics.width;\n\t\t\tlet left = 0;\n\t\t\tlet right = w;\n\n\t\t\tfakeMetrics = {\n\t\t\t\tactualBoundingBoxAscent: h,\n\t\t\t\tactualBoundingBoxDescent: 0,\n\t\t\t\tactualBoundingBoxLeft: left,\n\t\t\t\tactualBoundingBoxRight: right,\n\t\t\t\tfontBoundingBoxAscent: h,\n\t\t\t\tfontBoundingBoxDescent: 0,\n\t\t\t\twidth: w\n\t\t\t}\n\t\t\t//return fake;\n\t\t}\n\t\telse {\n\t\t\tfakeMetrics = {\n\t\t\t\tactualBoundingBoxAscent: metrics.actualBoundingBoxAscent,\n\t\t\t\tactualBoundingBoxDescent: metrics.actualBoundingBoxDescent,\n\t\t\t\tactualBoundingBoxLeft: metrics.actualBoundingBoxLeft,\n\t\t\t\tactualBoundingBoxRight: metrics.actualBoundingBoxRight,\n\t\t\t\tfontBoundingBoxAscent: metrics.actualBoundingBoxAscent,\n\t\t\t\tfontBoundingBoxDescent: metrics.actualBoundingBoxDescent,\n\t\t\t\twidth: metrics.width\n\t\t\t}\n\t\t}\n\n\t\tconst w = metrics.width;\n\t\tswitch (this.style.textAlign) {\n\t\t\tcase \"right\":\n\t\t\tcase \"end\":\n\t\t\t\tfakeMetrics.actualBoundingBoxLeft = w;\n\t\t\t\tfakeMetrics.actualBoundingBoxRight = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"center\":\n\t\t\t\tfakeMetrics.actualBoundingBoxLeft = w / 2;\n\t\t\t\tfakeMetrics.actualBoundingBoxRight = w / 2;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tfakeMetrics.actualBoundingBoxLeft = 0;\n\t\t\t\tfakeMetrics.actualBoundingBoxRight = w;\n\t\t}\n\n\t\treturn fakeMetrics;\n\t}\n\n}\n\n/**\n * @ignore\n */\nexport class CanvasTextStyle implements ITextStyle {\n\t//public wordWrapWidth: number = 100;\n\tpublic fill?: Color | CanvasGradient | CanvasPattern;\n\tpublic fillOpacity?: number;\n\tpublic textAlign?: \"start\" | \"end\" | \"left\" | \"right\" | \"center\";\n\tpublic fontFamily?: string;\n\tpublic fontSize?: string | number;\n\tpublic fontWeight?: 'normal' | 'bold' | 'bolder' | 'lighter' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900'\n\tpublic fontStyle?: 'normal' | 'italic' | 'oblique';\n\tpublic fontVariant?: \"normal\" | \"small-caps\";\n\tpublic textDecoration?: \"underline\" | \"line-through\";\n\tpublic shadowColor?: Color | null;\n\tpublic shadowBlur?: number;\n\tpublic shadowOffsetX?: number;\n\tpublic shadowOffsetY?: number;\n\tpublic shadowOpacity?: number;\n\t// leading?: number;\n\t// letterSpacing?: number;\n\tpublic lineHeight?: number | Percent = percent(120);\n\tpublic baselineRatio?: number = 0.19;\n\t// padding?: number;\n\t// stroke?: number;\n\t// strokeThickness?: number;\n\t// trim?: number;\n\t// wordWrap?: boolean;\n\tpublic direction?: \"ltr\" | \"rtl\";\n\tpublic textBaseline?: \"top\" | \"hanging\" | \"middle\" | \"alphabetic\" | \"ideographic\" | \"bottom\";\n\tpublic oversizedBehavior?: \"none\" | \"hide\" | \"fit\" | \"wrap\" | \"wrap-no-break\" | \"truncate\" = \"none\";\n\tpublic breakWords?: boolean = false;\n\tpublic ellipsis?: string = \"…\";\n\tpublic maxWidth?: number;\n\tpublic maxHeight?: number;\n\tpublic minScale?: number;\n\tpublic ignoreFormatting?: boolean = false;\n}\n\n/**\n * @ignore\n */\nexport class CanvasRadialText extends CanvasText implements IRadialText {\n\tpublic textType?: \"regular\" | \"circular\" | \"radial\" | \"aligned\" | \"adjusted\" = \"circular\";\n\tpublic radius?: number;\n\tpublic startAngle?: number;\n\tpublic inside?: boolean = false;\n\tpublic orientation?: \"inward\" | \"outward\" | \"auto\" = \"auto\";\n\tpublic kerning?: number = 0;\n\n\tprivate _textReversed: boolean = false;\n\n\tpublic _render(parentLayer: CanvasLayer): void {\n\t\tswitch (this.textType) {\n\t\t\tcase \"circular\":\n\t\t\t\tthis._renderCircular(parentLayer);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tsuper._render(parentLayer);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tpublic _renderCircular(parentLayer: CanvasLayer): void {\n\t\tif (this._textVisible) {\n\t\t\tconst layer = this._layer || parentLayer;\n\n\t\t\tthis._prerender(layer);\n\n\t\t\tconst interactive = this._isInteractive();\n\t\t\tconst context = layer.context;\n\t\t\tconst layerDirty = layer.dirty;\n\t\t\tconst ghostContext = this._renderer._ghostLayer.context;\n\n\t\t\t// Savepoint\n\t\t\tcontext.save();\n\t\t\tif (interactive) {\n\t\t\t\tghostContext.save();\n\t\t\t}\n\n\t\t\t// Init\n\t\t\tlet radius = (this.radius || 0);\n\t\t\tlet startAngle = (this.startAngle || 0);\n\t\t\tlet deltaAngle = 0;\n\t\t\tlet orientation = this.orientation;\n\t\t\tlet inward = orientation == \"auto\" ? \"auto\" : orientation == \"inward\";\n\t\t\tconst inside = this.inside;\n\t\t\tconst align = this.style.textAlign || \"left\";\n\t\t\tconst kerning = this.kerning || 0;\n\t\t\tlet clockwise = align == \"left\" ? 1 : -1;\n\t\t\tconst shouldReverse = !this._textReversed;\n\n\t\t\t// We need measurements in order to properly position text for alignment\n\t\t\tif (!this._textInfo) {\n\t\t\t\tthis._measure(layer);\n\t\t\t}\n\n\t\t\t// Check if we need to invert the whole stuff\n\t\t\tif (inward == \"auto\") {\n\t\t\t\t// Calc max angle so we know whether we need to flip it\n\t\t\t\tlet maxAngle = 0;\n\t\t\t\tlet midAngle = 0;\n\t\t\t\t$array.each(this._textInfo!, (line, _index) => {\n\t\t\t\t\tconst deltaAngle = startAngle + (line.width / (radius - line.height)) / 2 * -clockwise;\n\t\t\t\t\tif (deltaAngle > maxAngle) {\n\t\t\t\t\t\tmaxAngle = deltaAngle;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (align == \"left\") {\n\t\t\t\t\tmidAngle = (maxAngle + deltaAngle / 2) * $math.DEGREES;\n\t\t\t\t}\n\t\t\t\telse if (align == \"right\") {\n\t\t\t\t\tmidAngle = (maxAngle - deltaAngle / 2) * $math.DEGREES;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tmidAngle = startAngle * $math.DEGREES;\n\t\t\t\t}\n\t\t\t\tmidAngle = $math.normalizeAngle(midAngle);\n\t\t\t\tinward = (midAngle >= 270) || (midAngle <= 90);\n\t\t\t}\n\n\t\t\tif (inward == true && shouldReverse) {\n\t\t\t\tthis._textInfo!.reverse();\n\t\t\t\tthis._textReversed = true;\n\t\t\t}\n\n\t\t\t// if ((inward == false && align == \"left\") || (inward == true && align == \"right\")) {\n\t\t\t// \tclockwise *= -1;\n\t\t\t// }\n\n\t\t\t// Process text info produced by _measure()\n\t\t\t$array.each(this._textInfo!, (line, _index) => {\n\n\t\t\t\tconst textHeight = line.height;\n\n\t\t\t\t// Adjust radius (for `inside = false`)\n\t\t\t\t// Radius adjustment for `inside = false` is below the line calculation\n\t\t\t\tif (!inside) {\n\t\t\t\t\tradius += textHeight;\n\t\t\t\t}\n\n\t\t\t\t// Reverse letters if we're painting them counter-clockwise\n\t\t\t\tif (((clockwise == -1 && inward) || (clockwise == 1 && !inward)) && shouldReverse) {\n\t\t\t\t\tline.textChunks.reverse();\n\t\t\t\t}\n\n\t\t\t\t// Init angles\n\t\t\t\tlet lineStartAngle = startAngle;\n\t\t\t\tdeltaAngle = 0;\n\n\t\t\t\t// Adjust for center-align\n\t\t\t\tif (align == \"center\") {\n\t\t\t\t\tlineStartAngle += (line.width / (radius - textHeight)) / 2 * -clockwise;\n\t\t\t\t\tdeltaAngle = lineStartAngle - startAngle;\n\t\t\t\t}\n\n\t\t\t\t// if (inward == \"auto\") {\n\t\t\t\t// \tlet midAngle;\n\t\t\t\t// \tif (align == \"left\") {\n\t\t\t\t// \t\tmidAngle = (lineStartAngle + deltaAngle / 2) * $math.DEGREES;\n\t\t\t\t// \t}\n\t\t\t\t// \telse if () {\n\t\t\t\t// \t\tmidAngle = (lineStartAngle - deltaAngle / 2) * $math.DEGREES;\n\t\t\t\t// \t}\n\t\t\t\t// \tinward = (midAngle >= 270) || (midAngle <= 90);\n\t\t\t\t// }\n\n\t\t\t\t// Rotate letters if they are facing outward\n\t\t\t\tlineStartAngle += (Math.PI * (inward ? 0 : 1)); // Rotate 180 if outward\n\n\t\t\t\t// Savepoint\n\t\t\t\tcontext.save();\n\t\t\t\tif (interactive) {\n\t\t\t\t\tghostContext.save();\n\t\t\t\t}\n\n\t\t\t\t// Assume starting angle\n\t\t\t\tcontext.rotate(lineStartAngle);\n\t\t\t\tif (interactive) {\n\t\t\t\t\tghostContext.rotate(lineStartAngle);\n\t\t\t\t}\n\n\t\t\t\tlet angleShift = 0;\n\t\t\t\t$array.each(line.textChunks, (chunk, _index) => {\n\n\t\t\t\t\t// Draw the letter\n\t\t\t\t\tconst char = chunk.text;\n\t\t\t\t\tconst charWidth = chunk.width;\n\n\t\t\t\t\t// Rotate half a letter\n\t\t\t\t\tangleShift = (charWidth / 2) / (radius - textHeight) * clockwise;\n\t\t\t\t\tcontext.rotate(angleShift);\n\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\tghostContext.rotate(angleShift);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set style\n\t\t\t\t\tif (chunk.style) {\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tghostContext.save();\n\n\t\t\t\t\t\tcontext.font = chunk.style;\n\t\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\t\tghostContext.font = chunk.style;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chunk.fill) {\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tcontext.fillStyle = chunk.fill.toCSS();\n\t\t\t\t\t\t// Color does not affect ghostContext so we not set it\n\t\t\t\t\t}\n\n\t\t\t\t\t// Center letters\n\t\t\t\t\tcontext.textBaseline = \"middle\";\n\t\t\t\t\tcontext.textAlign = \"center\";\n\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\tghostContext.textBaseline = \"middle\";\n\t\t\t\t\t\tghostContext.textAlign = \"center\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Plop the letter\n\t\t\t\t\tif (layerDirty) {\n\t\t\t\t\t\tcontext.fillText(char, 0, (inward ? 1 : -1) * (0 - radius + textHeight / 2));\n\t\t\t\t\t}\n\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\tghostContext.fillText(char, 0, (inward ? 1 : -1) * (0 - radius + textHeight / 2));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chunk.fill) {\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t// Color does not affect ghostContext so we not set it\n\t\t\t\t\t}\n\n\t\t\t\t\t// Reset style\n\t\t\t\t\tif (chunk.style) {\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\tghostContext.restore();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Rotate half a letter and add spacing\n\t\t\t\t\tangleShift = (charWidth / 2 + kerning) / (radius - textHeight) * clockwise;\n\t\t\t\t\tcontext.rotate(angleShift);\n\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\tghostContext.rotate(angleShift);\n\t\t\t\t\t}\n\n\t\t\t\t});\n\n\t\t\t\t// Restore angle\n\t\t\t\tcontext.restore();\n\t\t\t\tif (interactive) {\n\t\t\t\t\tghostContext.restore();\n\t\t\t\t}\n\n\t\t\t\t// Adjust radius (for `inside = true`)\n\t\t\t\tif (inside) {\n\t\t\t\t\tradius -= textHeight;\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\t// Restore\n\t\t\tcontext.restore();\n\t\t\tif (interactive) {\n\t\t\t\tghostContext.restore();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _measure(layer: CanvasLayer): IBounds {\n\t\tswitch (this.textType) {\n\t\t\tcase \"circular\":\n\t\t\t\treturn this._measureCircular(layer);\n\t\t\tdefault:\n\t\t\t\treturn super._measure(layer);\n\t\t}\n\t}\n\n\tpublic _measureCircular(layer: CanvasLayer): IBounds {\n\t\tconst context = layer.context;\n\t\tconst ghostContext = this._renderer._ghostLayer.context;\n\t\tconst rtl = this.style.direction == \"rtl\";\n\n\t\tconst oversizedBehavior = this.style.oversizedBehavior;\n\t\tconst maxWidth = this.style.maxWidth!;\n\n\t\tconst truncate = $type.isNumber(maxWidth) && oversizedBehavior == \"truncate\";\n\t\tconst ellipsis = this.style.ellipsis || \"\";\n\t\tlet ellipsisMetrics: TextMetrics;\n\t\t//const wrap = $type.isNumber(maxWidth) && (oversizedBehavior == \"wrap\" || oversizedBehavior == \"wrap-no-break\");\n\n\n\t\t// Reset text info\n\t\tthis._textVisible = true;\n\t\tthis._textInfo = [];\n\t\tthis._textReversed = false;\n\n\t\t// Pre-render\n\t\tcontext.save();\n\t\tghostContext.save();\n\t\tthis._prerender(layer, true);\n\n\t\t// Split up text into lines\n\t\tconst lines = this.text.toString().replace(/\\r/g, \"\").split(/\\n/);\n\t\tlet styleRestored = true;\n\t\tlet totalWidth = 0;\n\n\t\t// Iterate through the lines\n\t\tlet offsetY = 0;\n\t\t$array.each(lines, (line, _index) => {\n\n\t\t\t// Split up line into format/value chunks\n\t\t\tlet chunks = TextFormatter.chunk(line, false, this.style.ignoreFormatting);\n\n\t\t\t// Init line object\n\t\t\tlet lineInfo: ILine = {\n\t\t\t\toffsetY: offsetY,\n\t\t\t\tascent: 0,\n\t\t\t\twidth: 0,\n\t\t\t\theight: 0,\n\t\t\t\tleft: 0,\n\t\t\t\tright: 0,\n\t\t\t\ttextChunks: []\n\t\t\t};\n\n\t\t\tlet currentStyle: string | undefined;\n\t\t\tlet currentFill: Color | undefined;\n\t\t\tlet currentChunkWidth: number | undefined;\n\n\t\t\t//while(chunk = chunks.shift()) {\n\t\t\t$array.each(chunks, (chunk, _index) => {\n\n\t\t\t\t// Format chunk\n\t\t\t\tif (chunk.type == \"format\") {\n\t\t\t\t\tif (chunk.text == \"[/]\") {\n\t\t\t\t\t\tif (!styleRestored) {\n\t\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t\tghostContext.restore();\n\t\t\t\t\t\t\tstyleRestored = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentFill = undefined;\n\t\t\t\t\t\tcurrentStyle = undefined;\n\t\t\t\t\t\tcurrentChunkWidth = undefined;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet format = TextFormatter.getTextStyle(chunk.text);\n\t\t\t\t\t\tconst fontStyle = this._getFontStyle(format);\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tghostContext.save();\n\t\t\t\t\t\tcontext.font = fontStyle;\n\t\t\t\t\t\tcurrentStyle = fontStyle;\n\t\t\t\t\t\tif (format.fill) {\n\t\t\t\t\t\t\tcurrentFill = <Color>format.fill;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ((<any>format).width) {\n\t\t\t\t\t\t\tcurrentChunkWidth = $type.toNumber((<any>format).width);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstyleRestored = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (truncate) {\n\t\t\t\t\t\tellipsisMetrics = this._measureText(ellipsis, context);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Text format\n\t\t\t\telse if (chunk.type == \"value\") {\n\n\t\t\t\t\t// Measure each letter\n\t\t\t\t\tconst chars = chunk.text.match(/./ug) || [];\n\t\t\t\t\tif (rtl) {\n\t\t\t\t\t\tchars.reverse();\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < chars.length; i++) {\n\n\t\t\t\t\t\tconst char = chars[i];\n\n\t\t\t\t\t\t// Measure\n\t\t\t\t\t\tconst metrics = this._measureText(char, context);\n\t\t\t\t\t\tlet chunkWidth = metrics.width;\n\n\t\t\t\t\t\t// Chunk width?\n\t\t\t\t\t\tif (currentStyle && currentChunkWidth && (currentChunkWidth > chunkWidth)) {\n\t\t\t\t\t\t\tchunkWidth = currentChunkWidth;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst chunkHeight = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\n\t\t\t\t\t\tif (chunkHeight > lineInfo.height) {\n\t\t\t\t\t\t\tlineInfo.height = chunkHeight;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (metrics.actualBoundingBoxAscent > lineInfo.ascent) {\n\t\t\t\t\t\t\tlineInfo.ascent = metrics.actualBoundingBoxAscent;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlineInfo.width += chunkWidth;\n\t\t\t\t\t\tlineInfo.left += metrics.actualBoundingBoxLeft;\n\t\t\t\t\t\tlineInfo.right += metrics.actualBoundingBoxRight;\n\t\t\t\t\t\tlineInfo.textChunks.push({\n\t\t\t\t\t\t\tstyle: currentStyle,\n\t\t\t\t\t\t\tfill: currentFill,\n\t\t\t\t\t\t\ttext: char,\n\t\t\t\t\t\t\twidth: chunkWidth,\n\t\t\t\t\t\t\theight: chunkHeight + metrics.actualBoundingBoxDescent,\n\t\t\t\t\t\t\tleft: metrics.actualBoundingBoxLeft,\n\t\t\t\t\t\t\tright: metrics.actualBoundingBoxRight,\n\t\t\t\t\t\t\tascent: metrics.actualBoundingBoxAscent,\n\t\t\t\t\t\t\toffsetX: 0,\n\t\t\t\t\t\t\toffsetY: chunkHeight,\n\t\t\t\t\t\t\ttextDecoration: undefined\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\ttotalWidth += chunkWidth;\n\n\t\t\t\t\t\t// Handle oversized behavior\n\t\t\t\t\t\tif (truncate) {\n\t\t\t\t\t\t\t// Measure ellipsis and check if it fits\n\t\t\t\t\t\t\tif (!ellipsisMetrics) {\n\t\t\t\t\t\t\t\tellipsisMetrics = this._measureText(ellipsis, context);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst ellipsisWidth = ellipsisMetrics.actualBoundingBoxLeft + ellipsisMetrics.actualBoundingBoxRight;\n\t\t\t\t\t\t\ttotalWidth += ellipsisWidth;\n\t\t\t\t\t\t\tif ((totalWidth + ellipsisWidth) > maxWidth) {\n\t\t\t\t\t\t\t\tif (lineInfo.textChunks.length == 1) {\n\t\t\t\t\t\t\t\t\tthis._textVisible = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tlineInfo.width += ellipsisWidth;\n\t\t\t\t\t\t\t\t\tlineInfo.left += ellipsisMetrics.actualBoundingBoxLeft;\n\t\t\t\t\t\t\t\t\tlineInfo.right += ellipsisMetrics.actualBoundingBoxRight;\n\t\t\t\t\t\t\t\t\tlineInfo.textChunks.push({\n\t\t\t\t\t\t\t\t\t\tstyle: currentStyle,\n\t\t\t\t\t\t\t\t\t\tfill: currentFill,\n\t\t\t\t\t\t\t\t\t\ttext: ellipsis,\n\t\t\t\t\t\t\t\t\t\twidth: ellipsisWidth,\n\t\t\t\t\t\t\t\t\t\theight: chunkHeight + ellipsisMetrics.actualBoundingBoxDescent,\n\t\t\t\t\t\t\t\t\t\tleft: ellipsisMetrics.actualBoundingBoxLeft,\n\t\t\t\t\t\t\t\t\t\tright: ellipsisMetrics.actualBoundingBoxRight,\n\t\t\t\t\t\t\t\t\t\tascent: ellipsisMetrics.actualBoundingBoxAscent,\n\t\t\t\t\t\t\t\t\t\toffsetX: 0,\n\t\t\t\t\t\t\t\t\t\toffsetY: chunkHeight,\n\t\t\t\t\t\t\t\t\t\ttextDecoration: undefined\n\t\t\t\t\t\t\t\t\t});\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\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (rtl) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (this.style.lineHeight instanceof Percent) {\n\t\t\t\tlineInfo.height *= this.style.lineHeight.value;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlineInfo.height *= this.style.lineHeight || 1.2;\n\t\t\t}\n\n\t\t\tthis._textInfo!.push(lineInfo);\n\n\t\t\t//lineInfo.offsetY += lineInfo.ascent;\n\t\t\toffsetY += lineInfo.height;\n\n\n\t\t});\n\n\t\tif (!styleRestored) {\n\t\t\tcontext.restore();\n\t\t\tghostContext.restore();\n\t\t}\n\n\n\t\tif (oversizedBehavior == \"hide\" && (totalWidth > maxWidth)) {\n\t\t\tthis._textVisible = false;\n\t\t}\n\n\t\t// Adjust chunk internal offsets\n\t\t$array.each(this._textInfo, (lineInfo) => {\n\t\t\t$array.each(lineInfo.textChunks, (chunk) => {\n\t\t\t\tchunk.offsetY += Math.round((lineInfo.height - chunk.height + (lineInfo.ascent - chunk.ascent)) / 2);\n\t\t\t});\n\t\t});\n\n\t\tcontext.restore();\n\t\tghostContext.restore();\n\n\t\treturn {\n\t\t\tleft: 0,\n\t\t\ttop: 0,\n\t\t\tright: 0,\n\t\t\tbottom: 0,\n\t\t};\n\t}\n\n}\n\n/**\n * @ignore\n */\nexport class CanvasImage extends CanvasDisplayObject implements IPicture {\n\tpublic width: number | undefined;\n\tpublic height: number | undefined;\n\tpublic image: HTMLImageElement | undefined;\n\tpublic tainted?: boolean;\n\n\tpublic shadowColor?: Color;\n\tpublic shadowBlur?: number;\n\tpublic shadowOffsetX?: number;\n\tpublic shadowOffsetY?: number;\n\tpublic shadowOpacity?: number;\n\n\tprotected _imageMask: HTMLCanvasElement | undefined;\n\n\tconstructor(renderer: CanvasRenderer, image: HTMLImageElement | undefined) {\n\t\tsuper(renderer);\n\t\tthis.image = image;\n\t}\n\n\tprotected _dispose(): void {\n\t\tsuper._dispose();\n\n\t\tif (this._imageMask) {\n\t\t\tclearCanvas(this._imageMask);\n\t\t}\n\t}\n\n\tgetLocalBounds(): IBounds {\n\t\tif (!this._localBounds) {\n\n\n\t\t\tlet w = 0;\n\t\t\tlet h = 0;\n\n\t\t\tif (this.width) {\n\t\t\t\tw = this.width;\n\t\t\t}\n\t\t\tif (this.height) {\n\t\t\t\th = this.height;\n\t\t\t}\n\n\t\t\tthis._localBounds = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0,\n\t\t\t\tright: w,\n\t\t\t\tbottom: h\n\t\t\t};\n\n\t\t\tthis._addBounds(this._localBounds);\n\t\t}\n\t\treturn this._localBounds;\n\t}\n\n\tprotected _render(parentLayer: CanvasLayer): void {\n\t\tsuper._render(parentLayer);\n\n\t\tif (this.image) {\n\t\t\tconst layer = this._layer || parentLayer;\n\n\t\t\tif (this.tainted === undefined) {\n\t\t\t\tthis.tainted = isTainted(this.image);\n\t\t\t\tlayer.tainted = true;\n\t\t\t}\n\n\t\t\tif (this.tainted && this._renderer._omitTainted) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (layer.dirty) {\n\n\t\t\t\tif (this.shadowColor) {\n\t\t\t\t\tlayer.context.shadowColor = this.shadowColor.toCSS(this.shadowOpacity || 1);\n\t\t\t\t}\n\t\t\t\tif (this.shadowBlur) {\n\t\t\t\t\tlayer.context.shadowBlur = this.shadowBlur;\n\t\t\t\t}\n\t\t\t\tif (this.shadowOffsetX) {\n\t\t\t\t\tlayer.context.shadowOffsetX = this.shadowOffsetX;\n\t\t\t\t}\n\t\t\t\tif (this.shadowOffsetY) {\n\t\t\t\t\tlayer.context.shadowOffsetY = this.shadowOffsetY;\n\t\t\t\t}\n\n\t\t\t\t// TODO should this round ?\n\t\t\t\tconst width = this.width || this.image.naturalWidth;\n\t\t\t\tconst height = this.height || this.image.naturalHeight;\n\n\t\t\t\tlayer.context.drawImage(this.image, 0, 0, width, height);\n\t\t\t}\n\n\t\t\tif (this.interactive && this._isInteractive()) {\n\t\t\t\tconst mask = this._getMask(this.image);\n\n\t\t\t\tthis._renderer._ghostLayer.context.drawImage(mask, 0, 0);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic clear(): void {\n\t\tsuper.clear();\n\t\tthis.image = undefined;\n\t\tthis._imageMask = undefined;\n\t}\n\n\tprotected _getMask(image: HTMLImageElement): HTMLCanvasElement {\n\t\tif (this._imageMask === undefined) {\n\t\t\t// TODO should this round ?\n\t\t\tconst width = this.width || image.naturalWidth;\n\t\t\tconst height = this.height || image.naturalHeight;\n\n\t\t\t// We need to create a second canvas because destination-in clears out the entire canvas\n\t\t\tconst canvas = document.createElement(\"canvas\");\n\t\t\tcanvas.width = width;\n\t\t\tcanvas.height = height;\n\n\t\t\tconst context = canvas.getContext(\"2d\")!;\n\n\t\t\tcontext.imageSmoothingEnabled = false;\n\n\t\t\tcontext.fillStyle = this._getColorId();\n\t\t\tcontext.fillRect(0, 0, width, height);\n\n\t\t\tif (!isTainted(image)) {\n\t\t\t\tcontext.globalCompositeOperation = \"destination-in\";\n\t\t\t\tcontext.drawImage(image, 0, 0, width, height);\n\t\t\t}\n\n\t\t\tthis._imageMask = canvas;\n\t\t}\n\n\t\treturn this._imageMask;\n\t}\n\n}\n\n/**\n * @ignore\n */\nexport class CanvasRendererEvent<A> implements IRendererEvent<A> {\n\tpublic id: Id;\n\tpublic simulated: boolean = false;\n\tpublic native: boolean = true;\n\n\tconstructor(public event: A, public originalPoint: IPoint, public point: IPoint, public bbox: DOMRect) {\n\t\tif ($utils.supports(\"touchevents\") && event instanceof Touch) {\n\t\t\tthis.id = event.identifier;\n\n\t\t} else {\n\t\t\tthis.id = null;\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\ninterface Event<Key extends keyof IRendererEvents> {\n\tobject: CanvasDisplayObject;\n\tcontext: unknown;\n\tcallback: (event: IRendererEvents[Key]) => void;\n\tdisposed: boolean;\n}\n\n/**\n * @ignore\n */\ninterface Events<Key extends keyof IRendererEvents> {\n\tdisposer: IDisposer;\n\tcallbacks: Array<Event<Key>>;\n\tdispatching: boolean;\n\tcleanup: boolean;\n}\n\n/**\n * @ignore\n */\nexport class CanvasRenderer extends ArrayDisposer implements IRenderer, IDisposer {\n\tpublic view: HTMLElement = document.createElement(\"div\");\n\tprotected _layerDom: HTMLElement = document.createElement(\"div\");\n\n\tpublic layers: Array<CanvasLayer> = [];\n\tpublic _dirtyLayers: Array<CanvasLayer> = [];\n\tpublic defaultLayer: CanvasLayer = this.getLayer(0);\n\n\tpublic _ghostLayer: GhostLayer = new GhostLayer();\n\n\tprotected _patternCanvas: HTMLCanvasElement = document.createElement(\"canvas\");\n\tprotected _patternContext: CanvasRenderingContext2D = this._patternCanvas.getContext(\"2d\")!;\n\n\tprotected _width: number = 0;\n\tprotected _height: number = 0;\n\n\tprotected _clientWidth: number = 0;\n\tprotected _clientHeight: number = 0;\n\n\tpublic resolution: number;\n\tpublic interactionsEnabled: boolean = true;\n\n\tprotected _listeners: { [key: string]: CounterDisposer } = {};\n\tprotected _events: { [Key in keyof IRendererEvents]?: Events<Key> } = {};\n\n\tprotected _colorId: number = 0;\n\tprotected _colorMap: { [color: string]: CanvasDisplayObject } = {};\n\n\tpublic _forceInteractive: number = 0;\n\tpublic _omitTainted: boolean = false;\n\n\t// TODO this should store the Id as well\n\tpublic _hovering: Set<CanvasDisplayObject> = new Set();\n\tpublic _dragging: Array<{ id: Id, value: CanvasDisplayObject }> = [];\n\tpublic _mousedown: Array<{ id: Id, value: CanvasDisplayObject }> = [];\n\n\tprotected _lastPointerMoveEvent: { events: Array<IPointerEvent>, native: boolean } | undefined;\n\n\tpublic tapToActivate: boolean = false;\n\tpublic tapToActivateTimeout: number = 3000;\n\tpublic _touchActive: boolean = false;\n\tprotected _touchActiveTimeout?: number;\n\n\t/*protected _mouseMoveThrottler: Throttler = new Throttler(() => {\n\t\tthis._dispatchGlobalMousemove(this._lastPointerMoveEvent.event, this._lastPointerMoveEvent.native);\n\t});\n\t*/\n\n\tconstructor(resolution?: number) {\n\t\tsuper();\n\n\t\tif (resolution == null) {\n\t\t\tthis.resolution = window.devicePixelRatio;\n\t\t} else {\n\t\t\tthis.resolution = resolution;\n\t\t}\n\n\t\tthis.view.style.position = \"absolute\";\n\t\tthis.view.appendChild(this._layerDom);\n\n\t\tthis._disposers.push(new Disposer(() => {\n\t\t\t$object.each(this._events, (_key, events) => {\n\t\t\t\tevents.disposer.dispose();\n\t\t\t});\n\n\t\t\t$array.each(this.layers, (layer) => {\n\t\t\t\tclearCanvas(layer.view);\n\n\t\t\t\tif (layer.exportableView) {\n\t\t\t\t\tclearCanvas(layer.exportableView);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tclearCanvas(this._ghostLayer.view);\n\t\t\tclearCanvas(this._patternCanvas);\n\t\t}));\n\n\t\tthis._disposers.push($utils.addEventListener(this._ghostLayer.view, \"click\", (originalEvent: MouseEvent) => {\n\t\t\tconst event = this.getEvent(originalEvent);\n\t\t\tconst target = this._getHitTarget(event.originalPoint, event.bbox);\n\t\t\tconsole.debug(target);\n\t\t}));\n\n\t\t// Monitor for possible pixel ratio changes (when page is zoomed)\n\t\tthis._disposers.push($utils.onZoom(() => {\n\t\t\tif (resolution == null) {\n\t\t\t\tthis.resolution = window.devicePixelRatio;\n\t\t\t}\n\t\t}));\n\n\t\t// We need this in order top prevent default touch gestures when dragging\n\t\t// draggable elements\n\t\tif ($utils.supports(\"touchevents\")) {\n\t\t\tconst listener = (ev: any) => {\n\t\t\t\tif (this._dragging.length !== 0) {\n\t\t\t\t\t$array.eachContinue(this._dragging, (item) => {\n\t\t\t\t\t\tif (item.value.shouldCancelTouch()) {\n\t\t\t\t\t\t\tev.preventDefault();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// If touch down happends, delay touch out\n\t\t\t\tif (this._touchActiveTimeout) {\n\t\t\t\t\tthis._delayTouchDeactivate();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis._disposers.push($utils.addEventListener(window, \"touchstart\", listener, { passive: false }));\n\t\t\tthis._disposers.push($utils.addEventListener(this.view, \"touchstart\", listener, { passive: false }));\n\n\t\t\tthis._disposers.push($utils.addEventListener(this.view, \"touchmove\", () => {\n\t\t\t\t// If touch is moving, delay touch out\n\t\t\t\tif (this._touchActiveTimeout) {\n\t\t\t\t\tthis._delayTouchDeactivate();\n\t\t\t\t}\n\t\t\t}, { passive: true }));\n\n\t\t\tthis._disposers.push($utils.addEventListener(window, \"click\", (_ev: any) => {\n\t\t\t\tthis._touchActive = false;\n\t\t\t}, { passive: true }));\n\n\t\t\tthis._disposers.push($utils.addEventListener(this.view, \"click\", (_ev: any) => {\n\t\t\t\twindow.setTimeout(() => {\n\t\t\t\t\tthis._touchActive = true;\n\t\t\t\t\tthis._delayTouchDeactivate();\n\t\t\t\t}, 100);\n\t\t\t}, { passive: true }));\n\n\t\t}\n\n\t\t// Prevent scrolling of the window when hovering on \"wheelable\" object\n\t\tif ($utils.supports(\"wheelevents\")) {\n\t\t\tthis._disposers.push($utils.addEventListener(this.view, \"wheel\", (ev) => {\n\t\t\t\tlet prevent = false;\n\t\t\t\tthis._hovering.forEach((obj) => {\n\t\t\t\t\tif (obj.wheelable) {\n\t\t\t\t\t\tprevent = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (prevent) {\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t}\n\t\t\t}, { passive: false }));\n\t\t}\n\n\t}\n\n\tprotected _delayTouchDeactivate(): void {\n\t\tif (this._touchActiveTimeout) {\n\t\t\tclearTimeout(this._touchActiveTimeout);\n\t\t}\n\t\tif (this.tapToActivateTimeout > 0) {\n\t\t\tthis._touchActiveTimeout = window.setTimeout(() => {\n\t\t\t\tthis._touchActive = false;\n\t\t\t}, this.tapToActivateTimeout);\n\t\t}\n\t}\n\n\tpublic get debugGhostView(): boolean {\n\t\treturn !!this._ghostLayer.view.parentNode;\n\t}\n\n\tpublic set debugGhostView(value: boolean) {\n\t\tif (value) {\n\t\t\tif (!this._ghostLayer.view.parentNode) {\n\t\t\t\tthis.view.appendChild(this._ghostLayer.view);\n\t\t\t}\n\n\t\t} else {\n\t\t\tif (this._ghostLayer.view.parentNode) {\n\t\t\t\tthis._ghostLayer.view.parentNode.removeChild(this._ghostLayer.view);\n\t\t\t}\n\t\t}\n\t}\n\n\tcreateLinearGradient(x1: number, y1: number, x2: number, y2: number): CanvasGradient {\n\t\treturn this.defaultLayer.context.createLinearGradient(x1, y1, x2, y2);\n\t}\n\n\tcreateRadialGradient(x1: number, y1: number, radius1: number, x2: number, y2: number, radius2: number): CanvasGradient {\n\t\treturn this.defaultLayer.context.createRadialGradient(x1, y1, radius1, x2, y2, radius2);\n\t}\n\n\tcreatePattern(graphics: CanvasGraphics, background: CanvasGraphics, repetition: string, width: number, height: number): CanvasPattern {\n\t\t// const patternCanvas = document.createElement(\"canvas\");\n\t\t// const patternContext = patternCanvas.getContext(\"2d\")!;\n\t\t// patternCanvas.width = width;\n\t\t// patternCanvas.height = height;\n\t\t// if (fill) {\n\t\t// \tpatternContext.fillStyle = fill.toCSS();\n\t\t// \tpatternContext.fillRect(0, 0, patternCanvas.width, patternCanvas.height);\n\t\t// }\n\n\t\t// const layer = {\n\t\t// \tview: patternCanvas,\n\t\t// \tcontext: patternContext,\n\t\t// \tvisible: true,\n\t\t// \torder: 0,\n\t\t// \twidth: width,\n\t\t// \theight: height,\n\t\t// \tdirty: true\n\t\t// };\n\n\t\t// // patternContext.arc(0, 0, 50, 0, .5 * Math.PI);\n\t\t// // patternContext.stroke();\n\n\t\t// image.targetLayer = layer;\n\t\t// image.render(layer);\n\n\t\t//this._layerDom.appendChild(patternCanvas);\n\n\t\tthis._patternCanvas.width = width;\n\t\tthis._patternCanvas.height = height;\n\n\t\tthis._patternContext.clearRect(0, 0, width, height);\n\n\t\t// patternCanvas.style.width = width * this.resolution + \"px\";\n\t\t// patternCanvas.style.height = height * this.resolution + \"px\";\n\n\t\tbackground.renderDetached(this._patternContext);\n\t\tgraphics.renderDetached(this._patternContext);\n\n\t\treturn this._patternContext.createPattern(this._patternCanvas, repetition)!;\n\t}\n\n\tmakeContainer(): CanvasContainer {\n\t\treturn new CanvasContainer(this);\n\t}\n\n\tmakeGraphics(): CanvasGraphics {\n\t\treturn new CanvasGraphics(this);\n\t}\n\n\tmakeText(text: string, style: CanvasTextStyle): CanvasText {\n\t\treturn new CanvasText(this, text, style);\n\t}\n\n\tmakeTextStyle(): CanvasTextStyle {\n\t\treturn new CanvasTextStyle();\n\t}\n\n\tmakeRadialText(text: string, style: CanvasTextStyle): CanvasRadialText {\n\t\treturn new CanvasRadialText(this, text, style);\n\t}\n\n\tmakePicture(image: HTMLImageElement | undefined): CanvasImage {\n\t\treturn new CanvasImage(this, image);\n\t}\n\n\tresizeLayer(layer: CanvasLayer) {\n\t\tlayer.dirty = true;\n\t\tlayer.resize(this._clientWidth, this._clientHeight, this.resolution);\n\t}\n\n\tresizeGhost() {\n\t\tthis._ghostLayer.resize(this._clientWidth, this._clientHeight, this.resolution);\n\t}\n\n\tresize(width: number, height: number): void {\n\t\tthis._clientWidth = width;\n\t\tthis._clientHeight = height;\n\t\tthis._width = Math.floor(width * this.resolution);\n\t\tthis._height = Math.floor(height * this.resolution);\n\n\t\t$array.each(this.layers, (layer) => {\n\t\t\tif (layer) {\n\t\t\t\tthis.resizeLayer(layer);\n\t\t\t}\n\t\t});\n\n\t\tthis.resizeGhost();\n\n\t\tthis.view.style.width = width + \"px\";\n\t\tthis.view.style.height = height + \"px\";\n\t}\n\n\tprivate createDetachedLayer(willReadFrequently: boolean = false): CanvasLayer {\n\t\tconst view = document.createElement(\"canvas\");\n\t\tconst context = view.getContext(\"2d\", { willReadFrequently: willReadFrequently })! as CanvasRenderingContext2D;\n\n\t\tconst layer = new CanvasLayer(view, context);\n\n\t\tview.style.position = \"absolute\";\n\t\tview.style.top = \"0px\";\n\t\tview.style.left = \"0px\";\n\n\t\treturn layer;\n\t}\n\n\tgetLayerByOrder(order: number): CanvasLayer | undefined {\n\t\tconst layers = this.layers;\n\t\tconst length = layers.length;\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tconst layer = layers[i];\n\t\t\tif (layer.order == order) {\n\t\t\t\treturn layer;\n\t\t\t}\n\t\t}\n\t}\n\n\tgetLayer(order: number, visible: boolean = true): CanvasLayer {\n\t\tlet existingLayer = this.getLayerByOrder(order);\n\t\tif (existingLayer) {\n\t\t\treturn existingLayer;\n\t\t}\n\n\t\tconst layer = this.createDetachedLayer(order == 99);\n\t\tlayer.order = order;\n\t\tlayer.visible = visible;\n\n\t\tif (layer.visible && this._width) {\n\t\t\tlayer.view.width = this._width;\n\t\t\tlayer.view.style.width = this._clientWidth + \"px\";\n\t\t\tlayer.view.height = this._height;\n\t\t\tlayer.view.style.height = this._clientHeight + \"px\";\n\t\t}\n\n\t\tconst layers = this.layers;\n\n\t\tlayers.push(layer);\n\n\t\tlayers.sort((a, b) => {\n\t\t\tif (a.order > b.order) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\telse if (a.order < b.order) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t});\n\n\t\tconst length = layers.length;\n\t\tconst layerIndex = $array.indexOf(layers, layer);\n\t\tlet next;\n\n\t\tfor (let i = layerIndex + 1; i < length; i++) {\n\t\t\tif (layers[i].visible) {\n\t\t\t\tnext = layers[i];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (layer.visible) {\n\t\t\tif (next === undefined) {\n\t\t\t\tthis._layerDom.appendChild(layer.view);\n\n\t\t\t} else {\n\t\t\t\tthis._layerDom.insertBefore(layer.view, next.view);\n\t\t\t}\n\t\t}\n\n\t\treturn layer;\n\t}\n\n\trender(root: CanvasDisplayObject): void {\n\n\t\tthis._dirtyLayers.length = 0;\n\n\t\t$array.each(this.layers, (layer) => {\n\t\t\tif (layer) {\n\t\t\t\tif (layer.dirty && layer.visible) {\n\t\t\t\t\tthis._dirtyLayers.push(layer);\n\t\t\t\t\tlayer.clear();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis._ghostLayer.clear();\n\n\t\troot.render(this.defaultLayer);\n\n\t\tthis._ghostLayer.context.restore();\n\n\t\t//setTimeout(() => {\n\n\t\t// Remove this after the Chrome bug is fixed:\n\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=1279394\n\t\t$array.each(this.layers, (layer) => {\n\t\t\tif (layer) {\n\t\t\t\tconst context = layer.context;\n\t\t\t\tcontext.beginPath();\n\t\t\t\tcontext.moveTo(0, 0);\n\t\t\t\tcontext.stroke();\n\t\t\t}\n\t\t});\n\n\t\t$array.each(this._dirtyLayers, (layer) => {\n\t\t\tlayer.context.restore();\n\t\t\tlayer.dirty = false;\n\t\t});\n\t\t//}, 100)\n\n\t\tif (this._hovering.size && this._lastPointerMoveEvent) {\n\t\t\t//this._mouseMoveThrottler.run();\n\t\t\tconst native = this._lastPointerMoveEvent.native;\n\n\t\t\t$array.each(this._lastPointerMoveEvent.events, (event) => {\n\t\t\t\tthis._dispatchGlobalMousemove(event, native);\n\t\t\t});\n\t\t}\n\t}\n\n\tpaintId(obj: CanvasDisplayObject): string {\n\t\tconst id = distributeId(++this._colorId);\n\t\tconst color = Color.fromHex(id).toCSS();\n\t\tthis._colorMap[color] = obj;\n\t\treturn color;\n\t}\n\n\t_removeObject(obj: CanvasDisplayObject): void {\n\t\tif (obj._colorId !== undefined) {\n\t\t\tdelete this._colorMap[obj._colorId];\n\t\t}\n\t}\n\n\t// protected _identifyObjectByColor(colorId: number): CanvasDisplayObject | undefined {\n\t// \treturn this._colorMap[colorId];\n\t// }\n\n\tprotected _adjustBoundingBox(bbox: DOMRect): DOMRect {\n\t\tconst margin = this._ghostLayer.margin;\n\n\t\treturn new DOMRect(\n\t\t\tbbox.left - margin.left,\n\t\t\tbbox.top - margin.top,\n\t\t\tbbox.width + margin.left + margin.right,\n\t\t\tbbox.height + margin.top + margin.bottom,\n\t\t);\n\t}\n\n\tpublic getEvent<A extends IPointerEvent>(originalEvent: A, adjustPoint: boolean = true): CanvasRendererEvent<A> {\n\t\tconst bbox = this.view.getBoundingClientRect();\n\n\t\tconst originalPoint: IPoint = {\n\t\t\tx: originalEvent.clientX || 0,\n\t\t\ty: originalEvent.clientY || 0,\n\t\t};\n\n\t\tconst point: IPoint = {\n\t\t\tx: originalPoint.x - (adjustPoint ? bbox.left : 0),\n\t\t\ty: originalPoint.y - (adjustPoint ? bbox.top : 0),\n\t\t};\n\n\t\treturn new CanvasRendererEvent(\n\t\t\toriginalEvent,\n\t\t\toriginalPoint,\n\t\t\tpoint,\n\t\t\tthis._adjustBoundingBox(bbox),\n\t\t);\n\t}\n\n\t_getHitTarget(point: IPoint, bbox: DOMRect): CanvasDisplayObject | undefined | false {\n\t\tif (bbox.width === 0 || bbox.height === 0 || point.x < bbox.left || point.x > bbox.right || point.y < bbox.top || point.y > bbox.bottom) {\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tconst pixel = this._ghostLayer.getImageData(point, bbox);\n\n\t\t\tif (pixel.data[0] === 0 && pixel.data[1] === 0 && pixel.data[2] === 0) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst colorId = Color.fromRGB(pixel.data[0], pixel.data[1], pixel.data[2]).toCSS();\n\t\t\tconst hit = this._colorMap[colorId];\n\n\t\t\treturn hit;\n\t\t}\n\t}\n\n\t_withEvents<Key extends keyof IRendererEvents>(key: Key, f: (events: Events<Key>) => void): void {\n\t\tconst events = this._events[key] as Events<Key> | undefined;\n\n\t\tif (events !== undefined) {\n\t\t\tevents.dispatching = true;\n\n\t\t\ttry {\n\t\t\t\tf(events);\n\n\t\t\t} finally {\n\t\t\t\tevents.dispatching = false;\n\n\t\t\t\tif (events.cleanup) {\n\t\t\t\t\tevents.cleanup = false;\n\n\t\t\t\t\t$array.keepIf(events.callbacks, (callback) => {\n\t\t\t\t\t\treturn !callback.disposed;\n\t\t\t\t\t});\n\n\t\t\t\t\tif (events.callbacks.length === 0) {\n\t\t\t\t\t\tevents.disposer.dispose();\n\t\t\t\t\t\tdelete this._events[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t_dispatchEventAll<Key extends keyof IRendererEvents>(key: Key, event: IRendererEvents[Key]): void {\n\t\tif (!this.interactionsEnabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._withEvents(key, (events) => {\n\t\t\t$array.each(events.callbacks, (callback) => {\n\t\t\t\tif (!callback.disposed) {\n\t\t\t\t\tcallback.callback.call(callback.context, event);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t_dispatchEvent<Key extends keyof IRendererEvents>(key: Key, target: CanvasDisplayObject, event: IRendererEvents[Key]): boolean {\n\t\tif (!this.interactionsEnabled) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet dispatched = false;\n\n\t\tthis._withEvents(key, (events) => {\n\t\t\t$array.each(events.callbacks, (callback) => {\n\t\t\t\tif (!callback.disposed && callback.object === target) {\n\t\t\t\t\tcallback.callback.call(callback.context, event);\n\t\t\t\t\tdispatched = true;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn dispatched;\n\t}\n\n\t_dispatchMousedown(originalEvent: IPointerEvent): void {\n\n\t\tconst button = (<PointerEvent>originalEvent).button;\n\t\tif (button != 0 && button != 2 && button != 1 && button !== undefined) {\n\t\t\t// Ignore non-primary mouse buttons\n\t\t\treturn;\n\t\t}\n\n\t\tconst event = this.getEvent(originalEvent);\n\t\tconst target = this._getHitTarget(event.originalPoint, event.bbox);\n\n\n\t\tif (target) {\n\t\t\tconst id = event.id;\n\n\t\t\tlet dragged = false;\n\n\t\t\teachTargets(target, (obj) => {\n\t\t\t\tconst info = { id: id, value: obj };\n\n\t\t\t\tthis._mousedown.push(info);\n\n\t\t\t\tif (!dragged && this._dispatchEvent(\"pointerdown\", obj, event)) {\n\t\t\t\t\t// Only dispatch the first element which matches\n\t\t\t\t\tdragged = true;\n\n\t\t\t\t\tconst has = this._dragging.some((x) => {\n\t\t\t\t\t\treturn x.value === obj && x.id === id;\n\t\t\t\t\t});\n\n\t\t\t\t\tif (!has) {\n\t\t\t\t\t\tthis._dragging.push(info);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t});\n\t\t}\n\t}\n\n\t_dispatchGlobalMousemove(originalEvent: IPointerEvent, native: boolean): void {\n\t\tconst event = this.getEvent(originalEvent);\n\n\t\tconst target = this._getHitTarget(event.originalPoint, event.bbox);\n\t\tevent.native = native;\n\n\t\tif (target) {\n\t\t\tthis._hovering.forEach((obj) => {\n\t\t\t\tif (!obj.contains(target)) {\n\t\t\t\t\tthis._hovering.delete(obj);\n\t\t\t\t\tif (obj.cursorOverStyle) {\n\t\t\t\t\t\t$utils.setStyle(document.body, \"cursor\", obj._replacedCursorStyle!);\n\t\t\t\t\t}\n\t\t\t\t\tthis._dispatchEvent(\"pointerout\", obj, event);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (event.native) {\n\t\t\t\teachTargets(target, (obj) => {\n\t\t\t\t\tif (!this._hovering.has(obj)) {\n\t\t\t\t\t\tthis._hovering.add(obj);\n\t\t\t\t\t\tif (obj.cursorOverStyle) {\n\t\t\t\t\t\t\tobj._replacedCursorStyle = $utils.getStyle(document.body, \"cursor\");\n\t\t\t\t\t\t\t$utils.setStyle(document.body, \"cursor\", obj.cursorOverStyle);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._dispatchEvent(\"pointerover\", obj, event);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t//} else if (target === false) {\n\t\t} else {\n\t\t\tthis._hovering.forEach((obj) => {\n\t\t\t\tif (obj.cursorOverStyle) {\n\t\t\t\t\t$utils.setStyle(document.body, \"cursor\", obj._replacedCursorStyle!);\n\t\t\t\t}\n\t\t\t\tthis._dispatchEvent(\"pointerout\", obj, event);\n\t\t\t});\n\n\t\t\tthis._hovering.clear();\n\t\t}\n\t\tthis._dispatchEventAll(\"globalpointermove\", event);\n\t}\n\n\t_dispatchGlobalMouseup(originalEvent: IPointerEvent, native: boolean): void {\n\t\tconst event = this.getEvent(originalEvent);\n\t\tevent.native = native;\n\t\t//const target = this._getHitTarget(event.originalPoint);\n\t\tthis._dispatchEventAll(\"globalpointerup\", event);\n\t}\n\n\t_dispatchDragMove(originalEvent: IPointerEvent): void {\n\t\tif (this._dragging.length !== 0) {\n\t\t\tconst event = this.getEvent(originalEvent);\n\t\t\tconst id = event.id;\n\n\t\t\tthis._dragging.forEach((obj) => {\n\t\t\t\tif (obj.id === id) {\n\t\t\t\t\tthis._dispatchEvent(\"pointermove\", obj.value, event);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t_dispatchDragEnd(originalEvent: IPointerEvent): void {\n\t\tconst button = (<PointerEvent>originalEvent).button;\n\t\tlet clickevent: \"click\" | \"rightclick\" | \"middleclick\";\n\t\tif (button == 0 || button === undefined) {\n\t\t\tclickevent = \"click\";\n\t\t}\n\t\telse if (button == 2) {\n\t\t\tclickevent = \"rightclick\";\n\t\t}\n\t\telse if (button == 1) {\n\t\t\tclickevent = \"middleclick\";\n\t\t}\n\t\telse {\n\t\t\t// Ignore non-primary mouse buttons\n\t\t\treturn;\n\t\t}\n\n\t\tconst event = this.getEvent(originalEvent);\n\t\tconst id = event.id;\n\n\t\tif (this._mousedown.length !== 0) {\n\t\t\tconst target = this._getHitTarget(event.originalPoint, event.bbox);\n\n\t\t\tif (target) {\n\t\t\t\tthis._mousedown.forEach((obj) => {\n\t\t\t\t\tif (obj.id === id && obj.value.contains(target)) {\n\t\t\t\t\t\tthis._dispatchEvent(clickevent, obj.value, event);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis._mousedown.length = 0;\n\t\t}\n\n\t\tif (this._dragging.length !== 0) {\n\t\t\tthis._dragging.forEach((obj) => {\n\t\t\t\tif (obj.id === id) {\n\t\t\t\t\tthis._dispatchEvent(\"pointerup\", obj.value, event);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis._dragging.length = 0;\n\t\t}\n\t}\n\n\t_dispatchDoubleClick(originalEvent: IPointerEvent): void {\n\t\tconst event = this.getEvent(originalEvent);\n\t\tconst target = this._getHitTarget(event.originalPoint, event.bbox);\n\n\t\tif (target) {\n\t\t\teachTargets(target, (obj) => {\n\t\t\t\tif (this._dispatchEvent(\"dblclick\", obj, event)) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t_dispatchWheel(originalEvent: WheelEvent): void {\n\t\tconst event = this.getEvent(originalEvent);\n\t\tconst target = this._getHitTarget(event.originalPoint, event.bbox);\n\n\t\tif (target) {\n\t\t\teachTargets(target, (obj) => {\n\t\t\t\tif (this._dispatchEvent(\"wheel\", obj, event)) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t_makeSharedEvent(key: string, f: () => IDisposer): IDisposer {\n\t\tif (this._listeners[key] === undefined) {\n\t\t\tconst listener = f();\n\n\t\t\tthis._listeners[key] = new CounterDisposer(() => {\n\t\t\t\tdelete this._listeners[key];\n\t\t\t\tlistener.dispose();\n\t\t\t});\n\t\t}\n\n\t\treturn this._listeners[key].increment();\n\t}\n\n\t_onPointerEvent(name: string, f: (event: Array<IPointerEvent>, native: boolean) => void): IDisposer {\n\t\tlet native = false;\n\t\tlet timer: number | null = null;\n\n\t\tfunction clear() {\n\t\t\ttimer = null;\n\t\t\tnative = false;\n\t\t}\n\n\t\treturn new MultiDisposer([\n\t\t\tnew Disposer(() => {\n\t\t\t\tif (timer !== null) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t}\n\n\t\t\t\tclear();\n\t\t\t}),\n\n\t\t\t$utils.addEventListener(this.view, $utils.getRendererEvent(name), (_) => {\n\t\t\t\tnative = true;\n\n\t\t\t\tif (timer !== null) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t}\n\n\t\t\t\ttimer = window.setTimeout(clear, 0);\n\t\t\t}),\n\n\t\t\tonPointerEvent(window, name, (ev) => {\n\t\t\t\tif (timer !== null) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\ttimer = null;\n\t\t\t\t}\n\n\t\t\t\tf(ev, native);\n\n\t\t\t\tnative = false;\n\t\t\t}),\n\t\t]);\n\t}\n\n\t// This ensures that only a single DOM event is added (e.g. only a single mousemove event listener)\n\t_initEvent(key: keyof IRendererEvents): IDisposer | undefined {\n\t\tswitch (key) {\n\t\t\tcase \"globalpointermove\":\n\t\t\tcase \"pointerover\":\n\t\t\tcase \"pointerout\":\n\t\t\t\treturn this._makeSharedEvent(\"pointermove\", () => {\n\t\t\t\t\tconst listener = (events: Array<IPointerEvent>, native: boolean) => {\n\t\t\t\t\t\tthis._lastPointerMoveEvent = { events, native };\n\n\t\t\t\t\t\t$array.each(events, (event) => {\n\t\t\t\t\t\t\tthis._dispatchGlobalMousemove(event, native);\n\t\t\t\t\t\t});\n\t\t\t\t\t};\n\n\t\t\t\t\treturn new MultiDisposer([\n\t\t\t\t\t\tthis._onPointerEvent(\"pointerdown\", listener),\n\t\t\t\t\t\tthis._onPointerEvent(\"pointermove\", listener),\n\t\t\t\t\t]);\n\t\t\t\t});\n\t\t\tcase \"globalpointerup\":\n\t\t\t\treturn this._makeSharedEvent(\"pointerup\", () => {\n\t\t\t\t\tvar mouseup = this._onPointerEvent(\"pointerup\", (events, native) => {\n\t\t\t\t\t\t$array.each(events, (event) => {\n\t\t\t\t\t\t\tthis._dispatchGlobalMouseup(event, native);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis._lastPointerMoveEvent = { events, native };\n\t\t\t\t\t});\n\n\t\t\t\t\tvar pointercancel = this._onPointerEvent(\"pointercancel\", (events, native) => {\n\t\t\t\t\t\t$array.each(events, (event) => {\n\t\t\t\t\t\t\tthis._dispatchGlobalMouseup(event, native);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis._lastPointerMoveEvent = { events, native };\n\t\t\t\t\t});\n\n\t\t\t\t\treturn new Disposer(() => {\n\t\t\t\t\t\tmouseup.dispose();\n\t\t\t\t\t\tpointercancel.dispose();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\tcase \"click\":\n\t\t\tcase \"rightclick\":\n\t\t\tcase \"middleclick\":\n\t\t\tcase \"pointerdown\":\n\t\t\t/*\n\t\t\t\treturn this._makeSharedEvent(\"pointerdown\", () => {\n\t\t\t\t\treturn this._onPointerEvent(\"pointerdown\", (event, native) => {\n\t\t\t\t\t\tthis._lastPointerMoveEvent = { event, native };\n\t\t\t\t\t\tthis._dispatchMousedown(event)\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t*/\n\t\t\tcase \"pointermove\":\n\t\t\tcase \"pointerup\":\n\t\t\t\treturn this._makeSharedEvent(\"pointerdown\", () => {\n\t\t\t\t\t//const throttler = new Throttler();\n\n\t\t\t\t\tconst mousedown = onPointerEvent(this.view, \"pointerdown\", (events) => {\n\t\t\t\t\t\t$array.each(events, (ev) => {\n\t\t\t\t\t\t\tthis._dispatchMousedown(ev);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\t// TODO handle throttling properly for multitouch\n\t\t\t\t\tconst mousemove = this._onPointerEvent(\"pointermove\", (ev: Array<IPointerEvent>) => {\n\t\t\t\t\t\t//throttler.throttle(() => {\n\t\t\t\t\t\t$array.each(ev, (ev) => {\n\t\t\t\t\t\t\tthis._dispatchDragMove(ev);\n\t\t\t\t\t\t});\n\t\t\t\t\t\t//});\n\t\t\t\t\t});\n\n\t\t\t\t\tconst mouseup = this._onPointerEvent(\"pointerup\", (ev: Array<IPointerEvent>) => {\n\t\t\t\t\t\t$array.each(ev, (ev) => {\n\t\t\t\t\t\t\tthis._dispatchDragEnd(ev);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tconst pointercancel = this._onPointerEvent(\"pointercancel\", (ev: Array<IPointerEvent>) => {\n\t\t\t\t\t\t$array.each(ev, (ev) => {\n\t\t\t\t\t\t\tthis._dispatchDragEnd(ev);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\treturn new Disposer(() => {\n\t\t\t\t\t\tmousedown.dispose();\n\t\t\t\t\t\tmousemove.dispose();\n\t\t\t\t\t\tmouseup.dispose();\n\t\t\t\t\t\tpointercancel.dispose();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\tcase \"dblclick\":\n\t\t\t\treturn this._makeSharedEvent(\"dblclick\", () => {\n\t\t\t\t\treturn this._onPointerEvent(\"dblclick\", (ev) => {\n\t\t\t\t\t\t$array.each(ev, (ev) => {\n\t\t\t\t\t\t\tthis._dispatchDoubleClick(ev);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\tcase \"wheel\":\n\t\t\t\treturn this._makeSharedEvent(\"wheel\", () => {\n\t\t\t\t\treturn $utils.addEventListener(window, $utils.getRendererEvent(\"wheel\"), (event: WheelEvent) => {\n\t\t\t\t\t\tthis._dispatchWheel(event);\n\t\t\t\t\t}, { passive: false });\n\t\t\t\t});\n\t\t}\n\t}\n\n\t_addEvent<C, Key extends keyof IRendererEvents>(object: CanvasDisplayObject, key: Key, callback: (this: C, event: IRendererEvents[Key]) => void, context?: C): IDisposer {\n\t\tlet events: Events<Key> | undefined = this._events[key] as any;\n\n\t\tif (events === undefined) {\n\t\t\tevents = this._events[key] = {\n\t\t\t\tdisposer: this._initEvent(key)!,\n\t\t\t\tcallbacks: [],\n\t\t\t\tdispatching: false,\n\t\t\t\tcleanup: false,\n\t\t\t};\n\t\t}\n\n\t\tconst listener = { object, context, callback, disposed: false };\n\n\t\tevents!.callbacks.push(listener);\n\n\t\treturn new Disposer(() => {\n\t\t\tlistener.disposed = true;\n\n\t\t\tif (events!.dispatching) {\n\t\t\t\tevents!.cleanup = true;\n\n\t\t\t} else {\n\t\t\t\t$array.removeFirst(events!.callbacks, listener);\n\n\t\t\t\tif (events!.callbacks.length === 0) {\n\t\t\t\t\tevents!.disposer.dispose();\n\t\t\t\t\tdelete this._events[key];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic getCanvas(root: CanvasDisplayObject, options?: ICanvasOptions): HTMLCanvasElement {\n\n\t\t// Make sure everything is rendered\n\t\tthis.render(root);\n\n\t\tif (!options) {\n\t\t\toptions = {};\n\t\t}\n\n\t\tlet scale: number = this.resolution;\n\n\t\t// Check if we need to scale\n\t\tif (options.minWidth && (options.minWidth > this._width)) {\n\t\t\tlet minScale = options.minWidth / this._width;\n\t\t\tif (minScale > scale) {\n\t\t\t\tscale = minScale * this.resolution;\n\t\t\t}\n\t\t}\n\n\t\tif (options.minHeight && (options.minHeight > this._height)) {\n\t\t\tlet minScale = options.minHeight / this._height;\n\t\t\tif (minScale > scale) {\n\t\t\t\tscale = minScale * this.resolution;\n\t\t\t}\n\t\t}\n\n\t\tif (options.maxWidth && (options.maxWidth < this._width)) {\n\t\t\tlet maxScale = options.maxWidth / this._width;\n\t\t\tif (maxScale < scale) {\n\t\t\t\tscale = maxScale * this.resolution;\n\t\t\t}\n\t\t}\n\n\t\tif (options.maxHeight && (options.maxHeight > this._height)) {\n\t\t\tlet maxScale = options.maxHeight / this._height;\n\t\t\tif (maxScale < scale) {\n\t\t\t\tscale = maxScale * this.resolution;\n\t\t\t}\n\t\t}\n\n\t\t// Check if we need to compensate for pixel ratio\n\t\tif (options.maintainPixelRatio) {\n\t\t\tscale /= this.resolution;\n\t\t}\n\n\t\t// Init list canvases to remove from DOM after export\n\t\tconst canvases: HTMLCanvasElement[] = [];\n\n\t\t// Set up new canvas for export\n\t\tlet forceRender = false;\n\t\tlet canvasWidth = this._width;\n\t\tlet canvasHeight = this._height;\n\t\tconst canvas = document.createElement(\"canvas\");\n\t\tif (scale != this.resolution) {\n\t\t\tforceRender = true;\n\t\t\tcanvasWidth = this._width * scale / this.resolution;\n\t\t\tcanvasHeight = this._height * scale / this.resolution;\n\t\t}\n\n\t\tcanvas.width = canvasWidth;\n\t\tcanvas.height = canvasHeight;\n\n\t\t// Add to DOM so it inherits CSS\n\t\tcanvas.style.position = \"fixed\";\n\t\tcanvas.style.top = \"-10000px\";\n\t\tthis.view.appendChild(canvas);\n\t\tcanvases.push(canvas);\n\n\t\t// Context\n\t\tconst context = canvas.getContext(\"2d\")!;\n\n\t\tlet width = 0;\n\t\tlet height = 0;\n\t\tlet needRerender = false;\n\n\t\t$array.each(this.layers, (layer) => {\n\t\t\tif (layer && layer.visible) {\n\t\t\t\tif (layer.tainted || forceRender) {\n\t\t\t\t\tneedRerender = true;\n\n\t\t\t\t\tlayer.exportableView = layer.view;\n\t\t\t\t\tlayer.exportableContext = layer.context;\n\n\t\t\t\t\tlayer.view = document.createElement(\"canvas\");\n\n\t\t\t\t\t// Add to DOM so it inherits CSS\n\t\t\t\t\tlayer.view.style.position = \"fixed\";\n\t\t\t\t\tlayer.view.style.top = \"-10000px\";\n\t\t\t\t\tthis.view.appendChild(layer.view);\n\t\t\t\t\tcanvases.push(layer.view);\n\n\t\t\t\t\tlayer.view.width = canvasWidth;\n\t\t\t\t\tlayer.view.height = canvasHeight;\n\n\t\t\t\t\tlayer.context = layer.view.getContext(\"2d\")!;\n\n\t\t\t\t\tlayer.dirty = true;\n\t\t\t\t\tlayer.scale = scale;\n\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (needRerender) {\n\t\t\tthis._omitTainted = true;\n\t\t\tthis.render(root);\n\t\t\tthis._omitTainted = false;\n\t\t}\n\n\t\t$array.each(this.layers, (layer) => {\n\t\t\tif (layer && layer.visible) {\n\n\t\t\t\t// Layer is fine. Just plop it into our target canvas\n\t\t\t\tcontext.drawImage(layer.view, 0, 0);\n\n\t\t\t\t// Restore layer original canvas\n\t\t\t\tif (layer.exportableView) {\n\t\t\t\t\tlayer.view = layer.exportableView;\n\t\t\t\t\tlayer.exportableView = undefined;\n\t\t\t\t}\n\n\t\t\t\tif (layer.exportableContext) {\n\t\t\t\t\tlayer.context = layer.exportableContext;\n\t\t\t\t\tlayer.exportableContext = undefined;\n\t\t\t\t}\n\n\t\t\t\tif (width < layer.view.clientWidth) {\n\t\t\t\t\twidth = layer.view.clientWidth;\n\t\t\t\t}\n\t\t\t\tif (height < layer.view.clientHeight) {\n\t\t\t\t\theight = layer.view.clientHeight;\n\t\t\t\t}\n\n\t\t\t\tlayer.scale = undefined;\n\t\t\t}\n\t\t});\n\n\t\tcanvas.style.width = width + \"px\";\n\t\tcanvas.style.height = height + \"px\";\n\n\t\t$array.each(canvases, (canvas) => {\n\t\t\tcanvas.style.position = \"\";\n\t\t\tcanvas.style.top = \"\";\n\t\t\tthis.view.removeChild(canvas);\n\t\t})\n\n\t\treturn canvas;\n\t}\n\n}\n\n\nclass GhostLayer {\n\tpublic view: HTMLCanvasElement;\n\tpublic context: CanvasRenderingContext2D;\n\tpublic margin: IMargin = {\n\t\tleft: 0,\n\t\tright: 0,\n\t\ttop: 0,\n\t\tbottom: 0,\n\t};\n\n\tprivate _width: number = 0;\n\tprivate _height: number = 0;\n\n\tconstructor() {\n\t\tthis.view = document.createElement(\"canvas\");\n\t\tthis.context = this.view.getContext(\"2d\", { alpha: false, willReadFrequently: true })! as CanvasRenderingContext2D;\n\t\tthis.context.imageSmoothingEnabled = false;\n\n\t\tthis.view.style.position = \"absolute\";\n\t\tthis.view.style.top = \"0px\";\n\t\tthis.view.style.left = \"0px\";\n\t}\n\n\tresize(width: number, height: number, resolution: number) {\n\t\twidth += (this.margin.left + this.margin.right);\n\t\theight += (this.margin.top + this.margin.bottom);\n\t\tthis.view.style.left = -this.margin.left + \"px\";\n\t\tthis.view.style.top = -this.margin.top + \"px\";\n\n\t\tthis._width = Math.floor(width * resolution);\n\t\tthis._height = Math.floor(height * resolution);\n\n\t\tthis.view.width = this._width;\n\t\tthis.view.style.width = width + \"px\";\n\n\t\tthis.view.height = this._height;\n\t\tthis.view.style.height = height + \"px\";\n\t}\n\n\tgetImageData(point: IPoint, bbox: DOMRect): ImageData {\n\t\treturn this.context.getImageData(\n\t\t\t// TODO should this round ?\n\t\t\tMath.round(((point.x - bbox.left) / bbox.width) * this._width),\n\t\t\tMath.round(((point.y - bbox.top) / bbox.height) * this._height),\n\t\t\t1,\n\t\t\t1,\n\t\t);\n\t}\n\n\tsetMargin(layers: Array<CanvasLayer>): void {\n\t\tthis.margin.left = 0;\n\t\tthis.margin.right = 0;\n\t\tthis.margin.top = 0;\n\t\tthis.margin.bottom = 0;\n\n\t\t$array.each(layers, (layer) => {\n\t\t\tif (layer.margin) {\n\t\t\t\tthis.margin.left = Math.max(this.margin.left, layer.margin.left);\n\t\t\t\tthis.margin.right = Math.max(this.margin.right, layer.margin.right);\n\t\t\t\tthis.margin.top = Math.max(this.margin.top, layer.margin.top);\n\t\t\t\tthis.margin.bottom = Math.max(this.margin.bottom, layer.margin.bottom);\n\t\t\t}\n\t\t});\n\t}\n\n\tclear() {\n\t\tthis.context.save();\n\t\tthis.context.fillStyle = '#000';\n\t\tthis.context.fillRect(0, 0, this._width, this._height);\n\t}\n}\n\n\n/**\n * @ignore\n */\nexport class CanvasLayer implements ILayer {\n\tpublic view: HTMLCanvasElement;\n\tpublic context: CanvasRenderingContext2D;\n\tpublic tainted: boolean = true;\n\tpublic margin: IMargin | undefined;\n\tpublic order: number = 0;\n\tpublic visible: boolean = true;\n\tpublic width: number | undefined;\n\tpublic height: number | undefined;\n\tpublic scale: number | undefined;\n\tpublic dirty: boolean = true;\n\tpublic exportableView: HTMLCanvasElement | undefined;\n\tpublic exportableContext: CanvasRenderingContext2D | undefined;\n\n\tprivate _width: number = 0;\n\tprivate _height: number = 0;\n\n\tconstructor(view: HTMLCanvasElement, context: CanvasRenderingContext2D) {\n\t\tthis.view = view;\n\t\tthis.context = context;\n\t}\n\n\tresize(width: number, height: number, resolution: number) {\n\t\tif (this.width != null) {\n\t\t\twidth = this.width;\n\t\t}\n\n\t\tif (this.height != null) {\n\t\t\theight = this.height;\n\t\t}\n\n\t\tif (this.margin) {\n\t\t\twidth += (this.margin.left + this.margin.right);\n\t\t\theight += (this.margin.top + this.margin.bottom);\n\t\t\tthis.view.style.left = -this.margin.left + \"px\";\n\t\t\tthis.view.style.top = -this.margin.top + \"px\";\n\n\t\t} else {\n\t\t\tthis.view.style.left = \"0px\";\n\t\t\tthis.view.style.top = \"0px\";\n\t\t}\n\n\t\tthis._width = Math.floor(width * resolution);\n\t\tthis._height = Math.floor(height * resolution);\n\n\t\tthis.view.width = this._width;\n\t\tthis.view.style.width = width + \"px\";\n\n\t\tthis.view.height = this._height;\n\t\tthis.view.style.height = height + \"px\";\n\t}\n\n\tclear() {\n\t\tthis.context.save();\n\t\tthis.context.clearRect(0, 0, this._width, this._height);\n\t}\n}\n"]}
1
+ {"version":3,"file":"CanvasRenderer.js","sourceRoot":"","sources":["../../../../../../src/.internal/core/render/backend/CanvasRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["/** @ignore *//** */\n\nimport {\n\tIRenderer, IContainer, IDisplayObject, IGraphics, IRendererEvents, IMargin,\n\tIText, ITextStyle, IRadialText, IPicture, IRendererEvent, ILayer, ICanvasOptions, BlendMode, IPointerEvent, Id\n} from \"./Renderer\";\nimport type { IBounds } from \"../../util/IBounds\";\nimport type { IPoint } from \"../../util/IPoint\";\nimport { Color } from \"../../util/Color\";\nimport { Matrix } from \"../../util/Matrix\";\nimport { Percent, percent } from \"../../util/Percent\";\n//import { Throttler } from \"../../util/Throttler\";\nimport { ArrayDisposer, Disposer, DisposerClass, IDisposer, CounterDisposer, MultiDisposer } from \"../../util/Disposer\";\nimport { TextFormatter, ITextChunk } from \"../../util/TextFormatter\";\nimport * as $utils from \"../../util/Utils\";\nimport * as $array from \"../../util/Array\";\nimport * as $object from \"../../util/Object\";\nimport * as $type from \"../../util/Type\";\nimport * as $math from \"../../util/Math\";\nimport arcToBezier from 'svg-arc-to-cubic-bezier';\n\n\n/**\n * @ignore\n */\nfunction checkArgs(name: string, actual: number, expected: number) {\n\tif (actual !== expected) {\n\t\tthrow new Error(\"Required \" + expected + \" arguments for \" + name + \" but got \" + actual);\n\t}\n}\n\n/**\n * @ignore\n */\nfunction checkMinArgs(name: string, actual: number, expected: number) {\n\tif (actual < expected) {\n\t\tthrow new Error(\"Required at least \" + expected + \" arguments for \" + name + \" but got \" + actual);\n\t}\n}\n\n/**\n * @ignore\n */\nfunction checkEvenArgs(name: string, actual: number, expected: number) {\n\tcheckMinArgs(name, actual, expected);\n\n\tif ((actual % expected) !== 0) {\n\t\tthrow new Error(\"Arguments for \" + name + \" must be in pairs of \" + expected);\n\t}\n}\n\n/**\n * @ignore\n * This splits the flag so that way 0017 will be processed as 0 0 17\n *\n * This is important for weird paths like `M17 5A1 1 0 0017 30 1 1 0 0017 5`\n */\nfunction splitArcFlags(args: Array<string>) {\n\tfor (let i = 0; i < args.length; i += 7) {\n\t\tlet index = i + 3;\n\t\tlet flag = args[index];\n\n\t\tif (flag.length > 1) {\n\t\t\tconst a = /^([01])([01])(.*)$/.exec(flag);\n\n\t\t\tif (a !== null) {\n\t\t\t\targs.splice(index, 0, a[1]);\n\t\t\t\t++index;\n\n\t\t\t\targs.splice(index, 0, a[2]);\n\t\t\t\t++index;\n\n\t\t\t\tif (a[3].length > 0) {\n\t\t\t\t\targs[index] = a[3];\n\n\t\t\t\t} else {\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t++index;\n\n\t\tflag = args[index];\n\n\t\tif (flag.length > 1) {\n\t\t\tconst a = /^([01])(.+)$/.exec(flag);\n\n\t\t\tif (a !== null) {\n\t\t\t\targs.splice(index, 0, a[1]);\n\t\t\t\t++index;\n\n\t\t\t\targs[index] = a[2];\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nfunction assertBinary(value: number): 0 | 1 {\n\tif (value === 0 || value === 1) {\n\t\treturn value;\n\n\t} else {\n\t\tthrow new Error(\"Flag must be 0 or 1\");\n\t}\n}\n\n// 1 -> 0xffffff * (2 / 2)\n// 2 -> 0xffffff * (1 / 2)\n//\n// 3 -> 0xffffff * (3 / 4)\n// 4 -> 0xffffff * (1 / 4)\n//\n// 5 -> 0xffffff * (7 / 8)\n// 6 -> 0xffffff * (5 / 8)\n// 7 -> 0xffffff * (3 / 8)\n// 8 -> 0xffffff * (1 / 8)\n//\n// 9 -> 0xffffff * (15 / 16)\n// 10 -> 0xffffff * (13 / 16)\n// 11 -> 0xffffff * (11 / 16)\n// 12 -> 0xffffff * (9 / 16)\n// 13 -> 0xffffff * (7 / 16)\n// 14 -> 0xffffff * (5 / 16)\n// 15 -> 0xffffff * (3 / 16)\n// 16 -> 0xffffff * (1 / 16)\n// @todo remove this old color distribution algo if the new one pans out\n// function distributeIdBAK(id: number): number {\n// \tif (id === 1) {\n// \t\treturn 0x000001;\n\n// \t} else {\n// \t\t// Finds the closest power of 2\n// \t\tconst base = Math.pow(2, Math.ceil(Math.log(id) / Math.log(2)));\n\n// \t\t// Translates the id into an odd fraction index\n// \t\tconst index = ((base - id) * 2) + 1;\n\n// \t\t// TODO is Math.round correct ?\n// \t\treturn Math.round(0xffffff * (index / base));\n// \t}\n// }\n\n/**\n * Function by smeans:\n * https://lowcode.life/generating-unique-contrasting-colors-in-javascript/\n * @ignore\n */\nfunction distributeId(id: number): number {\n\tconst rgb = [0, 0, 0];\n\tfor (let i = 0; i < 24; i++) {\n\t\trgb[i % 3] <<= 1;\n\t\trgb[i % 3] |= id & 0x01;\n\t\tid >>= 1;\n\t}\n\treturn (rgb[2] | 0) + (rgb[1] << 8) + (rgb[0] << 16);\n}\n\n/**\n * @ignore\n */\nfunction eachTargets(hitTarget: CanvasDisplayObject, f: (target: CanvasDisplayObject) => boolean): void {\n\tfor (; ;) {\n\t\tif (hitTarget.interactive) {\n\t\t\tif (!f(hitTarget)) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (hitTarget._parent) {\n\t\t\thitTarget = hitTarget._parent;\n\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\n// TODO feature detection for mouse/touch/pointer\n/**\n * @ignore\n */\nfunction onPointerEvent(element: EventTarget, name: string, f: (event: Array<IPointerEvent>) => void): IDisposer {\n\treturn $utils.addEventListener(element, $utils.getRendererEvent(name), (event: MouseEvent | TouchEvent) => {\n\t\tlet touches = (<any>event).touches;\n\t\tif (touches) {\n\t\t\tif (touches.length == 0) {\n\t\t\t\ttouches = (<any>event).changedTouches;\n\t\t\t}\n\n\t\t\tf($array.copy(<TouchList>touches));\n\n\t\t} else {\n\t\t\tf([<MouseEvent>event]);\n\t\t}\n\t});\n}\n\n/**\n * @ignore\n */\nfunction isTainted(image: HTMLImageElement): boolean {\n\tconst canvas = document.createElement(\"canvas\");\n\tcanvas.width = 1;\n\tcanvas.height = 1;\n\tconst context = canvas.getContext(\"2d\", { willReadFrequently: true })! as CanvasRenderingContext2D;\n\tcontext.drawImage(image, 0, 0, 1, 1);\n\n\ttry {\n\t\tcontext.getImageData(0, 0, 1, 1);\n\t\treturn false;\n\t}\n\tcatch (err) {\n\t\tconsole.warn(\"Image \\\"\" + image.src + \"\\\" is loaded from different host and is not covered by CORS policy. For more information about the implications read here: https://www.amcharts.com/docs/v5/concepts/cors\");\n\t\treturn true;\n\t}\n}\n\n/**\n * This is needed to workaround a bug in iOS which causes it to not GC canvas elements.\n *\n * @ignore\n */\nfunction clearCanvas(view: HTMLCanvasElement) {\n\tview.width = 0;\n\tview.height = 0;\n\tview.style.width = \"0px\";\n\tview.style.height = \"0px\";\n}\n\n/**\n * @ignore\n */\nexport class CanvasPivot implements IPoint {\n\tprotected _x: number = 0;\n\tprotected _y: number = 0;\n\n\tget x(): number {\n\t\treturn this._x;\n\t}\n\n\tget y(): number {\n\t\treturn this._y;\n\t}\n\n\tset x(value: number) {\n\t\tthis._x = value;\n\t}\n\n\tset y(value: number) {\n\t\tthis._y = value;\n\t}\n}\n\n/**\n * @ignore\n */\nexport class CanvasDisplayObject extends DisposerClass implements IDisplayObject, IDisposer {\n\tpublic _layer?: CanvasLayer;\n\n\tpublic mask: CanvasGraphics | null = null;\n\tpublic visible: boolean = true;\n\tpublic exportable?: boolean = true;\n\tpublic interactive: boolean = false;\n\tpublic inactive: boolean = false;\n\tpublic wheelable: boolean = false;\n\tpublic cancelTouch: boolean = false;\n\tpublic isMeasured: boolean = false;\n\tpublic buttonMode: boolean = false;\n\tpublic alpha: number = 1;\n\tpublic compoundAlpha: number = 1;\n\tpublic angle: number = 0;\n\tpublic scale: number = 1;\n\tpublic x: number = 0;\n\tpublic y: number = 0;\n\tpublic crisp: boolean = false;\n\tpublic pivot: CanvasPivot = new CanvasPivot();\n\n\tpublic filter?: string;\n\n\tpublic cursorOverStyle?: string;\n\tpublic _replacedCursorStyle?: string;\n\n\tpublic _localMatrix: Matrix = new Matrix();\n\tpublic _matrix: Matrix = new Matrix();\n\t// TODO can this be replaced with _localMatrix ?\n\tprotected _uMatrix: Matrix = new Matrix();\n\n\tpublic _renderer: CanvasRenderer;\n\tpublic _parent: CanvasContainer | undefined;\n\n\tprotected _localBounds: IBounds | undefined;\n\tprotected _bounds: IBounds | undefined;\n\tpublic _colorId: string | undefined;\n\n\tconstructor(renderer: CanvasRenderer) {\n\t\tsuper();\n\t\tthis._renderer = renderer;\n\t}\n\n\tprotected _dispose(): void {\n\t\tthis._renderer._removeObject(this);\n\t\tthis.getLayer().dirty = true;\n\t}\n\n\tpublic getCanvas(): HTMLCanvasElement {\n\t\treturn this.getLayer().view;\n\t}\n\n\tpublic getLayer(): CanvasLayer {\n\t\tlet self: CanvasDisplayObject = this;\n\n\t\tfor (; ;) {\n\t\t\tif (self._layer) {\n\t\t\t\treturn self._layer;\n\n\t\t\t} else if (self._parent) {\n\t\t\t\tself = self._parent;\n\n\t\t\t} else {\n\t\t\t\treturn this._renderer.defaultLayer;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic setLayer(order: number | undefined, margin: IMargin | undefined): void {\n\t\tif (order == null) {\n\t\t\tthis._layer = undefined;\n\n\t\t} else {\n\t\t\tconst visible = true;\n\t\t\tthis._layer = this._renderer.getLayer(order, visible);\n\t\t\tthis._layer.visible = visible;\n\t\t\tthis._layer.margin = margin;\n\t\t\tif (margin) {\n\t\t\t\t$utils.setInteractive(this._layer.view, false);\n\t\t\t}\n\n\t\t\tthis._renderer._ghostLayer.setMargin(this._renderer.layers);\n\n\t\t\tif (this._parent) {\n\t\t\t\tthis._parent.registerChildLayer(this._layer);\n\t\t\t}\n\n\t\t\tthis._renderer.resizeLayer(this._layer);\n\t\t\tthis._renderer.resizeGhost();\n\t\t}\n\t}\n\n\tpublic markDirtyLayer(): void {\n\t\tthis.getLayer().dirty = true;\n\t}\n\n\tpublic clear(): void {\n\t\tthis.invalidateBounds();\n\t}\n\n\tpublic invalidateBounds(): void {\n\t\tthis._localBounds = undefined;\n\t}\n\n\tpublic _addBounds(_bounds: IBounds): void { }\n\n\tprotected _getColorId(): string {\n\t\tif (this._colorId === undefined) {\n\t\t\tthis._colorId = this._renderer.paintId(this);\n\t\t}\n\n\t\treturn this._colorId;\n\t}\n\n\tprotected _isInteractive(): boolean {\n\t\treturn this.inactive == false && (this.interactive || this._renderer._forceInteractive > 0);\n\t}\n\n\tprotected _isInteractiveMask(): boolean {\n\t\treturn this._isInteractive();\n\t}\n\n\tpublic contains(child: CanvasDisplayObject): boolean {\n\t\tfor (; ;) {\n\t\t\tif (child === this) {\n\t\t\t\treturn true;\n\n\t\t\t} else if (child._parent) {\n\t\t\t\tchild = child._parent;\n\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\ttoGlobal(point: IPoint): IPoint {\n\t\treturn this._matrix.apply(point);\n\t}\n\n\ttoLocal(point: IPoint): IPoint {\n\t\treturn this._matrix.applyInverse(point);\n\t}\n\n\tpublic getLocalMatrix(): Matrix {\n\t\tthis._uMatrix.setTransform(0, 0, this.pivot.x, this.pivot.y, this.angle * Math.PI / 180, this.scale);\n\t\treturn this._uMatrix;\n\t}\n\n\tgetLocalBounds(): IBounds {\n\t\tif (!this._localBounds) {\n\n\t\t\tconst bn = 10000000;\n\t\t\tthis._localBounds = {\n\t\t\t\tleft: bn,\n\t\t\t\ttop: bn,\n\t\t\t\tright: -bn,\n\t\t\t\tbottom: -bn\n\t\t\t};\n\n\t\t\tthis._addBounds(this._localBounds);\n\t\t}\n\t\treturn this._localBounds;\n\t}\n\n\tgetAdjustedBounds(bounds: IBounds): IBounds {\n\t\tthis._setMatrix();\n\n\t\tconst matrix = this.getLocalMatrix();\n\n\t\tconst p0 = matrix.apply({ x: bounds.left, y: bounds.top });\n\t\tconst p1 = matrix.apply({ x: bounds.right, y: bounds.top });\n\t\tconst p2 = matrix.apply({ x: bounds.right, y: bounds.bottom });\n\t\tconst p3 = matrix.apply({ x: bounds.left, y: bounds.bottom });\n\n\t\treturn {\n\t\t\tleft: Math.min(p0.x, p1.x, p2.x, p3.x),\n\t\t\ttop: Math.min(p0.y, p1.y, p2.y, p3.y),\n\t\t\tright: Math.max(p0.x, p1.x, p2.x, p3.x),\n\t\t\tbottom: Math.max(p0.y, p1.y, p2.y, p3.y)\n\t\t}\n\t}\n\n\ton<C, Key extends keyof IRendererEvents>(key: Key, callback: (this: C, event: IRendererEvents[Key]) => void, context?: C): IDisposer {\n\t\tif (this.interactive) {\n\t\t\treturn this._renderer._addEvent(this, key, callback, context);\n\n\t\t} else {\n\t\t\treturn new Disposer(() => { });\n\t\t}\n\t}\n\n\tpublic _setMatrix(): void {\n\t\t// TODO only calculate this if it has actually changed\n\t\tthis._localMatrix.setTransform(\n\t\t\tthis.x,\n\t\t\tthis.y,\n\t\t\tthis.pivot.x,\n\t\t\tthis.pivot.y,\n\t\t\t// Converts degrees to radians\n\t\t\tthis.angle * Math.PI / 180,\n\t\t\tthis.scale\n\t\t);\n\n\t\tthis._matrix.copyFrom(this._localMatrix);\n\n\t\tif (this._parent) {\n\t\t\t// TODO only calculate this if it has actually changed\n\t\t\tthis._matrix.prepend(this._parent._matrix);\n\t\t}\n\t}\n\n\tpublic _transform(context: CanvasRenderingContext2D, resolution: number): void {\n\t\tconst m = this._matrix;\n\t\tlet tx = m.tx * resolution;\n\t\tlet ty = m.ty * resolution;\n\t\tif (this.crisp) {\n\t\t\ttx = Math.floor(tx) + .5;\n\t\t\tty = Math.floor(ty) + .5;\n\t\t}\n\n\t\tcontext.setTransform(\n\t\t\tm.a * resolution,\n\t\t\tm.b * resolution,\n\t\t\tm.c * resolution,\n\t\t\tm.d * resolution,\n\t\t\ttx,\n\t\t\tty)\n\n\t}\n\n\tpublic _transformMargin(context: CanvasRenderingContext2D, resolution: number, margin: IMargin): void {\n\t\tconst m = this._matrix;\n\t\tcontext.setTransform(\n\t\t\tm.a * resolution,\n\t\t\tm.b * resolution,\n\t\t\tm.c * resolution,\n\t\t\tm.d * resolution,\n\t\t\t(m.tx + margin.left) * resolution,\n\t\t\t(m.ty + margin.top) * resolution\n\t\t);\n\t}\n\n\tpublic _transformLayer(context: CanvasRenderingContext2D, resolution: number, layer: CanvasLayer): void {\n\t\tif (layer.margin) {\n\t\t\tthis._transformMargin(context, layer.scale || resolution, layer.margin);\n\n\t\t} else {\n\t\t\tthis._transform(context, layer.scale || resolution);\n\t\t}\n\t}\n\n\tpublic render(parentLayer: CanvasLayer): void {\n\t\tif (this.visible && (this.exportable !== false || !this._renderer._omitTainted)) {\n\t\t\tthis._setMatrix();\n\n\t\t\tconst resolution = this._renderer.resolution;\n\n\t\t\tconst layers = this._renderer.layers;\n\t\t\tconst ghostLayer = this._renderer._ghostLayer;\n\t\t\tconst ghostContext = ghostLayer.context;\n\n\t\t\tconst mask = this.mask;\n\t\t\tif (mask) {\n\t\t\t\tmask._setMatrix();\n\t\t\t}\n\n\t\t\t// TODO improve this\n\t\t\t$array.each(layers, (layer) => {\n\t\t\t\tif (layer) {\n\t\t\t\t\tconst context = layer.context;\n\t\t\t\t\tcontext.save();\n\n\t\t\t\t\t// We must apply the mask before we transform the element\n\t\t\t\t\tif (mask) {\n\t\t\t\t\t\tmask._transformLayer(context, resolution, layer);\n\t\t\t\t\t\tmask._runPath(context);\n\t\t\t\t\t\tcontext.clip();\n\t\t\t\t\t}\n\n\t\t\t\t\tcontext.globalAlpha = this.compoundAlpha * this.alpha;\n\n\t\t\t\t\tthis._transformLayer(context, resolution, layer);\n\n\t\t\t\t\tif (this.filter) {\n\t\t\t\t\t\tcontext.filter = this.filter;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tghostContext.save();\n\n\t\t\t// We must apply the mask before we transform the element\n\t\t\tif (mask && this._isInteractiveMask()) {\n\t\t\t\tmask._transformMargin(ghostContext, resolution, ghostLayer.margin);\n\t\t\t\tmask._runPath(ghostContext);\n\t\t\t\tghostContext.clip();\n\t\t\t}\n\n\t\t\tthis._transformMargin(ghostContext, resolution, ghostLayer.margin);\n\n\t\t\tthis._render(parentLayer);\n\n\t\t\tghostContext.restore();\n\n\t\t\t$array.each(layers, (layer) => {\n\t\t\t\tif (layer) {\n\t\t\t\t\tlayer.context.restore();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tprotected _render(parentLayer: CanvasLayer): void {\n\t\tif (this.exportable === false) {\n\t\t\tconst layer = this._layer || parentLayer;\n\t\t\tlayer.tainted = true;\n\t\t}\n\t}\n\n\thovering(): boolean {\n\t\treturn this._renderer._hovering.has(this);\n\t}\n\n\tdragging(): boolean {\n\t\treturn this._renderer._dragging.some((x) => x.value === this);\n\t}\n\n\n\tpublic shouldCancelTouch(): boolean {\n\t\tconst renderer = this._renderer;\n\t\tif (renderer.tapToActivate && !renderer._touchActive) {\n\t\t\treturn false;\n\t\t}\n\t\tif (this.cancelTouch) {\n\t\t\treturn true;\n\t\t}\n\t\telse if (this._parent) {\n\t\t\treturn this._parent.shouldCancelTouch();\n\t\t}\n\t\treturn false;\n\t}\n\n}\n\n/**\n * @ignore\n */\nexport class CanvasContainer extends CanvasDisplayObject implements IContainer {\n\tpublic interactiveChildren: boolean = true;\n\tprivate _childLayers?: CanvasLayer[];\n\n\tprotected _children: Array<CanvasDisplayObject> = [];\n\n\tprotected _isInteractiveMask(): boolean {\n\t\treturn this.interactiveChildren || super._isInteractiveMask();\n\t}\n\n\taddChild(child: CanvasDisplayObject): void {\n\t\tchild._parent = this;\n\t\tthis._children.push(child);\n\t\tif (child._layer) {\n\t\t\tthis.registerChildLayer(child._layer);\n\t\t}\n\t}\n\n\taddChildAt(child: CanvasDisplayObject, index: number): void {\n\t\tchild._parent = this;\n\t\tthis._children.splice(index, 0, child);\n\t\tif (child._layer) {\n\t\t\tthis.registerChildLayer(child._layer);\n\t\t}\n\t}\n\n\tremoveChild(child: CanvasDisplayObject): void {\n\t\tchild._parent = undefined;\n\t\t$array.removeFirst(this._children, child);\n\t}\n\n\tprotected _render(parentLayer: CanvasLayer): void {\n\t\tsuper._render(parentLayer);\n\n\t\tconst renderer = this._renderer;\n\n\t\tif (this.interactive && this.interactiveChildren) {\n\t\t\t++renderer._forceInteractive;\n\t\t}\n\n\t\tconst layer = this._layer || parentLayer;\n\n\t\t$array.each(this._children, (child) => {\n\t\t\tchild.compoundAlpha = this.compoundAlpha * this.alpha;\n\t\t\tchild.render(layer);\n\t\t});\n\n\t\tif (this.interactive && this.interactiveChildren) {\n\t\t\t--renderer._forceInteractive;\n\t\t}\n\t}\n\n\tregisterChildLayer(layer: CanvasLayer): void {\n\t\tif (!this._childLayers) {\n\t\t\tthis._childLayers = [];\n\t\t}\n\t\t$array.pushOne(this._childLayers, layer);\n\t\tif (this._parent) {\n\t\t\tthis._parent.registerChildLayer(layer);\n\t\t}\n\t}\n\n\tpublic markDirtyLayer(deep: boolean = false): void {\n\t\tsuper.markDirtyLayer();\n\t\tif (deep && this._childLayers) {\n\t\t\t$array.each(this._childLayers, (layer) => layer.dirty = true);\n\t\t}\n\t}\n\n\tprotected _dispose() {\n\t\tsuper._dispose();\n\t\tif (this._childLayers) {\n\t\t\t$array.each(this._childLayers, (layer) => {\n\t\t\t\tlayer.dirty = true;\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nfunction setPoint(bounds: IBounds, point: IPoint): void {\n\tbounds.left = Math.min(bounds.left, point.x);\n\tbounds.top = Math.min(bounds.top, point.y);\n\tbounds.right = Math.max(bounds.right, point.x);\n\tbounds.bottom = Math.max(bounds.bottom, point.y);\n}\n\n/**\n * @ignore\n */\nabstract class Op {\n\tpublic colorize(_context: CanvasRenderingContext2D, _forceColor: string | undefined): void { }\n\n\tpublic path(_context: CanvasRenderingContext2D): void { }\n\n\tpublic addBounds(_bounds: IBounds): void { }\n}\n\n/**\n * @ignore\n */\nclass BeginFill extends Op {\n\tconstructor(public color: string | CanvasGradient | CanvasPattern) { super(); }\n\n\tpublic colorize(context: CanvasRenderingContext2D, forceColor: string | undefined): void {\n\t\tif (forceColor !== undefined) {\n\t\t\tcontext.fillStyle = forceColor;\n\n\t\t} else {\n\t\t\tcontext.fillStyle = this.color;\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nclass EndFill extends Op {\n\tconstructor(public clearShadow: boolean) { super(); }\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tcontext.fill();\n\t\tif (this.clearShadow) {\n\t\t\tcontext.shadowColor = \"\";\n\t\t\tcontext.shadowBlur = 0;\n\t\t\tcontext.shadowOffsetX = 0;\n\t\t\tcontext.shadowOffsetY = 0;\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nclass EndStroke extends Op {\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tcontext.stroke();\n\t}\n}\n\n/**\n * @ignore\n */\nclass LineStyle extends Op {\n\tconstructor(public width: number, public color: string | CanvasGradient | CanvasPattern, public lineJoin?: \"miter\" | \"round\" | \"bevel\") { super(); }\n\n\tpublic colorize(context: CanvasRenderingContext2D, forceColor: string | undefined): void {\n\t\tif (forceColor !== undefined) {\n\t\t\tcontext.strokeStyle = forceColor;\n\n\t\t} else {\n\t\t\tcontext.strokeStyle = this.color;\n\t\t}\n\n\t\tcontext.lineWidth = this.width;\n\t\tif (this.lineJoin) {\n\t\t\tcontext.lineJoin = this.lineJoin;\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nclass LineDash extends Op {\n\tconstructor(public dash: number[]) { super(); }\n\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tcontext.setLineDash(this.dash);\n\t}\n}\n\n/**\n * @ignore\n */\nclass LineDashOffset extends Op {\n\tconstructor(public dashOffset: number) { super(); }\n\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tcontext.lineDashOffset = this.dashOffset;\n\t}\n}\n\n/**\n * @ignore\n */\nclass DrawRect extends Op {\n\tconstructor(public x: number, public y: number, public width: number, public height: number) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.rect(this.x, this.y, this.width, this.height);\n\t}\n\n\tpublic addBounds(bounds: IBounds): void {\n\t\tconst l = this.x;\n\t\tconst t = this.y;\n\t\tconst r = l + this.width;\n\t\tconst b = t + this.height;\n\n\t\tsetPoint(bounds, { x: l, y: t });\n\t\tsetPoint(bounds, { x: r, y: t });\n\t\tsetPoint(bounds, { x: l, y: b });\n\t\tsetPoint(bounds, { x: r, y: b });\n\t}\n}\n\n/**\n * @ignore\n */\nclass DrawCircle extends Op {\n\tconstructor(public x: number, public y: number, public radius: number) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.moveTo(this.x + this.radius, this.y);\n\t\tcontext.arc(this.x, this.y, this.radius, 0, 2 * Math.PI);\n\t}\n\n\t// TODO handle skewing and rotation\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.x - this.radius, y: this.y - this.radius });\n\t\tsetPoint(bounds, { x: this.x + this.radius, y: this.y + this.radius });\n\t}\n}\n\n/**\n * @ignore\n */\nclass DrawEllipse extends Op {\n\tconstructor(public x: number, public y: number, public radiusX: number, public radiusY: number) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.ellipse(0, 0, this.radiusX, this.radiusY, 0, 0, Math.PI * 2);\n\t}\n\n\t// TODO handle skewing and rotation\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.x - this.radiusX, y: this.y - this.radiusY });\n\t\tsetPoint(bounds, { x: this.x + this.radiusX, y: this.y + this.radiusY });\n\t}\n}\n\n/**\n * @ignore\n */\nclass Arc extends Op {\n\tconstructor(\n\t\tpublic cx: number,\n\t\tpublic cy: number,\n\t\tpublic radius: number,\n\t\tpublic startAngle: number,\n\t\tpublic endAngle: number,\n\t\tpublic anticlockwise: boolean,\n\t) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tif (this.radius > 0) {\n\t\t\tcontext.arc(this.cx, this.cy, this.radius, this.startAngle, this.endAngle, this.anticlockwise);\n\t\t}\n\t}\n\n\tpublic addBounds(bounds: IBounds): void {\n\t\tlet arcBounds = $math.getArcBounds(this.cx, this.cy, this.startAngle * $math.DEGREES, this.endAngle * $math.DEGREES, this.radius);\n\t\tsetPoint(bounds, { x: arcBounds.left, y: arcBounds.top });\n\t\tsetPoint(bounds, { x: arcBounds.right, y: arcBounds.bottom });\n\t}\n}\n\n/**\n * @ignore\n */\nclass ArcTo extends Op {\n\tconstructor(\n\t\tpublic x1: number,\n\t\tpublic y1: number,\n\t\tpublic x2: number,\n\t\tpublic y2: number,\n\t\tpublic radius: number,\n\t) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tif (this.radius > 0) {\n\t\t\tcontext.arcTo(this.x1, this.y1, this.x2, this.y2, this.radius);\n\t\t}\n\t}\n\n\t// TODO: add points\n\tpublic addBounds(_bounds: IBounds): void {\n\t\t/*\n\t\t// not finished\n\t\thttps://math.stackexchange.com/questions/1781438/finding-the-center-of-a-circle-given-two-points-and-a-radius-algebraically\n\n\t\tif (prevPoint) {\n\t\t\tlet x1 = prevPoint.x;\n\t\t\tlet y1 = prevPoint.y;\n\t\t\tlet x2 = this.x2;\n\t\t\tlet y2 = this.y2;\n\t\t\tlet r = this.radius;\n\n\t\t\tlet xa = (x2 - x1) / 2;\n\t\t\tlet ya = (y2 - y1) / 2;\n\n\t\t\tlet x0 = x1 + xa;\n\t\t\tlet y0 = y1 + ya;\n\n\t\t\tlet a = Math.hypot(xa, ya);\n\t\t\tlet b = Math.sqrt(r * r - a * a);\n\n\t\t\tlet cx = x0 + b * ya / a;\n\t\t\tlet cy = y0 - b * xa / a;\n\n\t\t\tconsole.log(cx, cy);\n\t\t}*/\n\t}\n}\n\n/**\n * @ignore\n */\nclass LineTo extends Op {\n\tconstructor(public x: number, public y: number) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.lineTo(this.x, this.y);\n\t}\n\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.x, y: this.y });\n\t}\n}\n\n/**\n * @ignore\n */\nclass MoveTo extends Op {\n\tconstructor(public x: number, public y: number) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.moveTo(this.x, this.y);\n\t}\n\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.x, y: this.y });\n\t}\n}\n\n/**\n * @ignore\n */\nclass ClosePath extends Op {\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.closePath();\n\t}\n}\n\n/**\n * @ignore\n */\nclass BezierCurveTo extends Op {\n\tconstructor(\n\t\tpublic cpX: number,\n\t\tpublic cpY: number,\n\t\tpublic cpX2: number,\n\t\tpublic cpY2: number,\n\t\tpublic toX: number,\n\t\tpublic toY: number,\n\t) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.bezierCurveTo(this.cpX, this.cpY, this.cpX2, this.cpY2, this.toX, this.toY);\n\t}\n\n\t// TODO: OK?\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.cpX, y: this.cpY });\n\t\tsetPoint(bounds, { x: this.cpX2, y: this.cpY2 });\n\t\tsetPoint(bounds, { x: this.toX, y: this.toY });\n\t}\n}\n\n/**\n * @ignore\n */\nclass QuadraticCurveTo extends Op {\n\tconstructor(\n\t\tpublic cpX: number,\n\t\tpublic cpY: number,\n\t\tpublic toX: number,\n\t\tpublic toY: number,\n\t) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.quadraticCurveTo(this.cpX, this.cpY, this.toX, this.toY);\n\t}\n\n\t// TODO: OK?\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.cpX, y: this.cpY });\n\t\tsetPoint(bounds, { x: this.toX, y: this.toY });\n\t}\n}\n\n/**\n * @ignore\n */\nclass Shadow extends Op {\n\tconstructor(\n\t\tpublic color: string,\n\t\tpublic blur: number,\n\t\tpublic offsetX: number,\n\t\tpublic offsetY: number,\n\t\tpublic opacity?: number\n\t) { super(); }\n\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tif (this.opacity) {\n\t\t\tcontext.fillStyle = this.color;\n\t\t}\n\t\tcontext.shadowColor = this.color;\n\t\tcontext.shadowBlur = this.blur;\n\t\tcontext.shadowOffsetX = this.offsetX;\n\t\tcontext.shadowOffsetY = this.offsetY;\n\t}\n}\n\n/**\n * @ignore\n */\nclass GraphicsImage extends Op {\n\tconstructor(\n\t\tpublic image: HTMLImageElement,\n\t\tpublic width: number,\n\t\tpublic height: number,\n\t\tpublic x: number,\n\t\tpublic y: number\n\t) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.drawImage(this.image, this.x, this.y, this.width, this.height);\n\t}\n\n\t// TODO: OK?\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.x, y: this.y });\n\t\tsetPoint(bounds, { x: this.width, y: this.height });\n\t}\n}\n\n/**\n * @ignore\n */\nexport class CanvasGraphics extends CanvasDisplayObject implements IGraphics {\n\tprotected _operations: Array<Op> = [];\n\n\tpublic blendMode: BlendMode = BlendMode.NORMAL;\n\n\tprotected _hasShadows: boolean = false;\n\tprotected _fillAlpha?: number;\n\tprotected _strokeAlpha?: number;\n\n\tclear(): void {\n\t\tsuper.clear();\n\t\tthis._operations.length = 0;\n\t}\n\n\tprotected _pushOp(op: Op): void {\n\t\tthis._operations.push(op);\n\t}\n\n\tbeginFill(color?: Color | CanvasGradient | CanvasPattern, alpha: number = 1): void {\n\t\tthis._fillAlpha = alpha;\n\t\tif (color) {\n\t\t\tif (color instanceof Color) {\n\t\t\t\tthis._pushOp(new BeginFill(color.toCSS(alpha)));\n\n\t\t\t} else {\n\t\t\t\tthis.isMeasured = true;\n\t\t\t\tthis._pushOp(new BeginFill(color));\n\t\t\t}\n\t\t} else {\n\t\t\tthis._pushOp(new BeginFill(\"rgba(0, 0, 0, \" + alpha + \")\"));\n\t\t}\n\t}\n\n\tendFill(): void {\n\t\tthis._pushOp(new EndFill(this._hasShadows));\n\t}\n\n\tendStroke(): void {\n\t\tthis._pushOp(new EndStroke());\n\t}\n\n\tlineStyle(width: number = 0, color?: Color | CanvasGradient | CanvasPattern, alpha: number = 1, lineJoin?: \"miter\" | \"round\" | \"bevel\"): void {\n\t\tthis._strokeAlpha = alpha;\n\t\tif (color) {\n\t\t\tif (color instanceof Color) {\n\t\t\t\tthis._pushOp(new LineStyle(width, color.toCSS(alpha), lineJoin));\n\t\t\t} else {\n\t\t\t\tthis._pushOp(new LineStyle(width, color, lineJoin));\n\t\t\t}\n\t\t} else {\n\t\t\tthis._pushOp(new LineStyle(width, \"rgba(0, 0, 0, \" + alpha + \")\", lineJoin));\n\t\t}\n\t}\n\n\tsetLineDash(dash?: number[]): void {\n\t\tthis._pushOp(new LineDash(dash ? dash : []));\n\t}\n\n\tsetLineDashOffset(dashOffset: number = 0): void {\n\t\tthis._pushOp(new LineDashOffset(dashOffset));\n\t}\n\n\tdrawRect(x: number, y: number, width: number, height: number): void {\n\t\tthis._pushOp(new DrawRect(x, y, width, height));\n\t}\n\n\tdrawCircle(x: number, y: number, radius: number): void {\n\t\tthis._pushOp(new DrawCircle(x, y, radius));\n\t}\n\n\tdrawEllipse(x: number, y: number, radiusX: number, radiusY: number): void {\n\t\tthis._pushOp(new DrawEllipse(x, y, radiusX, radiusY));\n\t}\n\n\tarc(cx: number, cy: number, radius: number, startAngle: number, endAngle: number, anticlockwise: boolean = false): void {\n\t\tthis._pushOp(new Arc(cx, cy, radius, startAngle, endAngle, anticlockwise));\n\t}\n\n\tarcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void {\n\t\tthis._pushOp(new ArcTo(x1, y1, x2, y2, radius));\n\t}\n\n\tlineTo(x: number, y: number): void {\n\t\tthis._pushOp(new LineTo(x, y));\n\t}\n\n\tmoveTo(x: number, y: number): void {\n\t\tthis._pushOp(new MoveTo(x, y));\n\t}\n\n\tbezierCurveTo(cpX: number, cpY: number, cpX2: number, cpY2: number, toX: number, toY: number): void {\n\t\tthis._pushOp(new BezierCurveTo(cpX, cpY, cpX2, cpY2, toX, toY));\n\t}\n\n\tquadraticCurveTo(cpX: number, cpY: number, toX: number, toY: number): void {\n\t\tthis._pushOp(new QuadraticCurveTo(cpX, cpY, toX, toY));\n\t}\n\n\tclosePath(): void {\n\t\tthis._pushOp(new ClosePath());\n\t}\n\n\tshadow(color: Color, blur: number = 0, offsetX: number = 0, offsetY: number = 0, opacity?: number): void {\n\t\tthis._hasShadows = true;\n\t\tthis._pushOp(new Shadow(opacity ? color.toCSS(opacity) : color.toCSS(this._fillAlpha || this._strokeAlpha), blur, offsetX, offsetY));\n\t}\n\n\timage(image: HTMLImageElement, width: number, height: number, x: number, y: number): void {\n\t\tthis._pushOp(new GraphicsImage(image, width, height, x, y));\n\t}\n\n\t// https://svgwg.org/svg2-draft/paths.html#DProperty\n\t// TODO better error checking\n\tsvgPath(path: string): void {\n\t\tlet x = 0;\n\t\tlet y = 0;\n\t\tlet cpx: number | null = null;\n\t\tlet cpy: number | null = null;\n\t\tlet qcpx: number | null = null;\n\t\tlet qcpy: number | null = null;\n\n\t\tconst SEGMENTS_REGEXP = /([MmZzLlHhVvCcSsQqTtAa])([^MmZzLlHhVvCcSsQqTtAa]*)/g;\n\t\tconst ARGS_REGEXP = /[\\u0009\\u0020\\u000A\\u000C\\u000D]*([\\+\\-]?[0-9]*\\.?[0-9]+(?:[eE][\\+\\-]?[0-9]+)?)[\\u0009\\u0020\\u000A\\u000C\\u000D]*,?/g;\n\n\t\tlet match;\n\n\t\twhile ((match = SEGMENTS_REGEXP.exec(path)) !== null) {\n\t\t\tconst name = match[1];\n\t\t\tconst rest = match[2];\n\n\t\t\tconst args: Array<string> = [];\n\n\t\t\twhile ((match = ARGS_REGEXP.exec(rest)) !== null) {\n\t\t\t\targs.push(match[1]);\n\t\t\t}\n\n\t\t\t// Reset control point\n\t\t\tif (name !== \"S\" && name !== \"s\" && name !== \"C\" && name !== \"c\") {\n\t\t\t\tcpx = null;\n\t\t\t\tcpy = null;\n\t\t\t}\n\n\t\t\t// Reset control point\n\t\t\tif (name !== \"Q\" && name !== \"q\" && name !== \"T\" && name !== \"t\") {\n\t\t\t\tqcpx = null;\n\t\t\t\tqcpy = null;\n\t\t\t}\n\n\t\t\tswitch (name) {\n\t\t\t\tcase \"M\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tx = +args[0];\n\t\t\t\t\ty = +args[1];\n\t\t\t\t\tthis.moveTo(x, y);\n\n\t\t\t\t\tfor (let i = 2; i < args.length; i += 2) {\n\t\t\t\t\t\tx = +args[i];\n\t\t\t\t\t\ty = +args[i + 1];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"m\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tx += +args[0];\n\t\t\t\t\ty += +args[1];\n\t\t\t\t\tthis.moveTo(x, y);\n\n\t\t\t\t\tfor (let i = 2; i < args.length; i += 2) {\n\t\t\t\t\t\tx += +args[i];\n\t\t\t\t\t\ty += +args[i + 1];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"L\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 2) {\n\t\t\t\t\t\tx = +args[i];\n\t\t\t\t\t\ty = +args[i + 1];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"l\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 2) {\n\t\t\t\t\t\tx += +args[i];\n\t\t\t\t\t\ty += +args[i + 1];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"H\":\n\t\t\t\t\tcheckMinArgs(name, args.length, 1);\n\t\t\t\t\tfor (let i = 0; i < args.length; ++i) {\n\t\t\t\t\t\tx = +args[i];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"h\":\n\t\t\t\t\tcheckMinArgs(name, args.length, 1);\n\t\t\t\t\tfor (let i = 0; i < args.length; ++i) {\n\t\t\t\t\t\tx += +args[i];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"V\":\n\t\t\t\t\tcheckMinArgs(name, args.length, 1);\n\t\t\t\t\tfor (let i = 0; i < args.length; ++i) {\n\t\t\t\t\t\ty = +args[i];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"v\":\n\t\t\t\t\tcheckMinArgs(name, args.length, 1);\n\t\t\t\t\tfor (let i = 0; i < args.length; ++i) {\n\t\t\t\t\t\ty += +args[i];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"C\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 6);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 6) {\n\t\t\t\t\t\tconst x1 = +args[i];\n\t\t\t\t\t\tconst y1 = +args[i + 1];\n\t\t\t\t\t\tcpx = +args[i + 2];\n\t\t\t\t\t\tcpy = +args[i + 3];\n\t\t\t\t\t\tx = +args[i + 4];\n\t\t\t\t\t\ty = +args[i + 5];\n\t\t\t\t\t\tthis.bezierCurveTo(x1, y1, cpx, cpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"c\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 6);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 6) {\n\t\t\t\t\t\tconst x1 = +args[i] + x;\n\t\t\t\t\t\tconst y1 = +args[i + 1] + y;\n\t\t\t\t\t\tcpx = +args[i + 2] + x;\n\t\t\t\t\t\tcpy = +args[i + 3] + y;\n\t\t\t\t\t\tx += +args[i + 4];\n\t\t\t\t\t\ty += +args[i + 5];\n\t\t\t\t\t\tthis.bezierCurveTo(x1, y1, cpx, cpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"S\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 4);\n\t\t\t\t\tif (cpx === null || cpy === null) {\n\t\t\t\t\t\tcpx = x;\n\t\t\t\t\t\tcpy = y;\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 4) {\n\t\t\t\t\t\tconst x1 = 2 * x - cpx;\n\t\t\t\t\t\tconst y1 = 2 * y - cpy;\n\t\t\t\t\t\tcpx = +args[i];\n\t\t\t\t\t\tcpy = +args[i + 1];\n\t\t\t\t\t\tx = +args[i + 2];\n\t\t\t\t\t\ty = +args[i + 3];\n\t\t\t\t\t\tthis.bezierCurveTo(x1, y1, cpx, cpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"s\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 4);\n\t\t\t\t\tif (cpx === null || cpy === null) {\n\t\t\t\t\t\tcpx = x;\n\t\t\t\t\t\tcpy = y;\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 4) {\n\t\t\t\t\t\tconst x1 = 2 * x - cpx;\n\t\t\t\t\t\tconst y1 = 2 * y - cpy;\n\t\t\t\t\t\tcpx = +args[i] + x;\n\t\t\t\t\t\tcpy = +args[i + 1] + y;\n\t\t\t\t\t\tx += +args[i + 2];\n\t\t\t\t\t\ty += +args[i + 3];\n\t\t\t\t\t\tthis.bezierCurveTo(x1, y1, cpx, cpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"Q\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 4);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 4) {\n\t\t\t\t\t\tqcpx = +args[i];\n\t\t\t\t\t\tqcpy = +args[i + 1];\n\t\t\t\t\t\tx = +args[i + 2];\n\t\t\t\t\t\ty = +args[i + 3];\n\t\t\t\t\t\tthis.quadraticCurveTo(qcpx, qcpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"q\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 4);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 4) {\n\t\t\t\t\t\tqcpx = +args[i] + x;\n\t\t\t\t\t\tqcpy = +args[i + 1] + y;\n\t\t\t\t\t\tx += +args[i + 2];\n\t\t\t\t\t\ty += +args[i + 3];\n\t\t\t\t\t\tthis.quadraticCurveTo(qcpx, qcpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"T\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tif (qcpx === null || qcpy === null) {\n\t\t\t\t\t\tqcpx = x;\n\t\t\t\t\t\tqcpy = y;\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 2) {\n\t\t\t\t\t\tqcpx = 2 * x - qcpx;\n\t\t\t\t\t\tqcpy = 2 * y - qcpy;\n\t\t\t\t\t\tx = +args[i];\n\t\t\t\t\t\ty = +args[i + 1];\n\t\t\t\t\t\tthis.quadraticCurveTo(qcpx, qcpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"t\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tif (qcpx === null || qcpy === null) {\n\t\t\t\t\t\tqcpx = x;\n\t\t\t\t\t\tqcpy = y;\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 2) {\n\t\t\t\t\t\tqcpx = 2 * x - qcpx;\n\t\t\t\t\t\tqcpy = 2 * y - qcpy;\n\t\t\t\t\t\tx += +args[i];\n\t\t\t\t\t\ty += +args[i + 1];\n\t\t\t\t\t\tthis.quadraticCurveTo(qcpx, qcpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"A\":\n\t\t\t\tcase \"a\":\n\t\t\t\t\tconst relative = (name === \"a\");\n\n\t\t\t\t\tsplitArcFlags(args);\n\t\t\t\t\tcheckEvenArgs(name, args.length, 7);\n\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 7) {\n\t\t\t\t\t\tlet cx = +args[i + 5];\n\t\t\t\t\t\tlet cy = +args[i + 6];\n\n\t\t\t\t\t\tif (relative) {\n\t\t\t\t\t\t\tcx += x;\n\t\t\t\t\t\t\tcy += y;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst bs = arcToBezier({\n\t\t\t\t\t\t\tpx: x,\n\t\t\t\t\t\t\tpy: y,\n\t\t\t\t\t\t\trx: +args[i],\n\t\t\t\t\t\t\try: +args[i + 1],\n\t\t\t\t\t\t\txAxisRotation: +args[i + 2],\n\t\t\t\t\t\t\tlargeArcFlag: assertBinary(+args[i + 3]),\n\t\t\t\t\t\t\tsweepFlag: assertBinary(+args[i + 4]),\n\t\t\t\t\t\t\tcx,\n\t\t\t\t\t\t\tcy,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t$array.each(bs, (b) => {\n\t\t\t\t\t\t\tthis.bezierCurveTo(b.x1, b.y1, b.x2, b.y2, b.x, b.y);\n\t\t\t\t\t\t\tx = b.x;\n\t\t\t\t\t\t\ty = b.y;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"z\":\n\t\t\t\t\tcheckArgs(name, args.length, 0);\n\t\t\t\t\tthis.closePath();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\n\tpublic _runPath(context: CanvasRenderingContext2D): void {\n\t\tcontext.beginPath();\n\n\t\t$array.each(this._operations, (op) => {\n\t\t\top.path(context);\n\t\t});\n\t}\n\n\tprotected _render(parentLayer: CanvasLayer): void {\n\t\tsuper._render(parentLayer);\n\n\t\tconst layer = this._layer || parentLayer;\n\n\t\tconst layerDirty = layer.dirty;\n\t\tconst interactive = this._isInteractive();\n\n\t\tif (layerDirty || interactive) {\n\n\t\t\tconst context = layer.context;\n\t\t\tconst ghostContext = this._renderer._ghostLayer.context;\n\n\t\t\tif (layerDirty) {\n\t\t\t\tcontext.globalCompositeOperation = this.blendMode;\n\n\t\t\t\tcontext.beginPath();\n\t\t\t}\n\n\t\t\tlet color: string | undefined;\n\n\t\t\tif (interactive) {\n\t\t\t\tghostContext.beginPath();\n\t\t\t\tcolor = this._getColorId();\n\t\t\t}\n\n\t\t\t$array.each(this._operations, (op) => {\n\t\t\t\tif (layerDirty) {\n\t\t\t\t\top.path(context);\n\t\t\t\t\top.colorize(context, undefined);\n\t\t\t\t}\n\n\t\t\t\tif (interactive) {\n\t\t\t\t\top.path(ghostContext);\n\t\t\t\t\top.colorize(ghostContext, color);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic renderDetached(context: CanvasRenderingContext2D): void {\n\t\tif (this.visible) {\n\t\t\tthis._setMatrix();\n\n\t\t\tcontext.save();\n\n\t\t\t// We must apply the mask before we transform the element\n\t\t\tconst mask = this.mask;\n\t\t\tif (mask) {\n\t\t\t\tmask._setMatrix();\n\t\t\t\tmask._transform(context, 1);\n\t\t\t\tmask._runPath(context);\n\t\t\t\tcontext.clip();\n\t\t\t}\n\n\t\t\t// TODO handle compoundAlpha somehow ?\n\t\t\tcontext.globalAlpha = this.compoundAlpha * this.alpha;\n\n\t\t\tthis._transform(context, 1);\n\n\t\t\tif (this.filter) {\n\t\t\t\tcontext.filter = this.filter;\n\t\t\t}\n\n\t\t\tcontext.globalCompositeOperation = this.blendMode;\n\n\t\t\tcontext.beginPath();\n\n\t\t\t$array.each(this._operations, (op) => {\n\t\t\t\top.path(context);\n\t\t\t\top.colorize(context, undefined);\n\t\t\t});\n\n\t\t\tcontext.restore();\n\t\t}\n\t}\n\n\tpublic _addBounds(bounds: IBounds): void {\n\t\tif (this.visible && this.isMeasured) {\n\t\t\t$array.each(this._operations, (op) => {\n\t\t\t\top.addBounds(bounds);\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\ninterface ILineChunk {\n\tstyle: string | undefined,\n\tfill: Color | undefined,\n\ttext: string,\n\twidth: number,\n\theight: number,\n\tleft: number,\n\tright: number,\n\tascent: number,\n\toffsetX: number,\n\toffsetY: number,\n\ttextDecoration: string | undefined,\n\tverticalAlign?: \"baseline\" | \"sub\" | \"super\"\n}\n\n/**\n * @ignore\n */\ninterface ILine {\n\toffsetY: number,\n\tascent: number,\n\twidth: number,\n\theight: number,\n\tleft: number,\n\tright: number,\n\ttextChunks: Array<ILineChunk>,\n}\n\n/**\n * @ignore\n */\nexport class CanvasText extends CanvasDisplayObject implements IText {\n\tpublic text: string;\n\tpublic style: CanvasTextStyle;\n\tpublic resolution: number = 1;\n\n\tprotected _textInfo: Array<ILine> | undefined;\n\tprotected _textVisible: boolean = true;\n\tprotected _originalScale?: number = 1;\n\n\tconstructor(renderer: CanvasRenderer, text: string, style: CanvasTextStyle) {\n\t\tsuper(renderer);\n\t\tthis.text = text;\n\t\tthis.style = style;\n\t}\n\n\tpublic invalidateBounds(): void {\n\t\tsuper.invalidateBounds();\n\t\tthis._textInfo = undefined;\n\t}\n\n\tprivate _shared(context: CanvasRenderingContext2D) {\n\t\tif (this.style.textAlign) {\n\t\t\tcontext.textAlign = this.style.textAlign;\n\t\t}\n\n\t\tif (this.style.direction) {\n\t\t\tcontext.direction = this.style.direction;\n\t\t}\n\n\t\tif (this.style.textBaseline) {\n\t\t\tcontext.textBaseline = this.style.textBaseline;\n\t\t}\n\n\t}\n\n\tprotected _prerender(layer: CanvasLayer, ignoreGhost = false, ignoreFontWeight = false): void {\n\t\tsuper._render(layer);\n\n\t\tconst context = layer.context;\n\t\tconst ghostContext = this._renderer._ghostLayer.context;\n\n\t\t// Font style\n\n\t\tconst style = this.style;\n\t\tlet fontStyle = this._getFontStyle(undefined, ignoreFontWeight);\n\n\t\tcontext.font = fontStyle;\n\t\tif (this._isInteractive() && !ignoreGhost) {\n\t\t\tghostContext.font = fontStyle;\n\t\t}\n\n\t\t// Other parameters\n\t\tif (style.fill) {\n\t\t\tif (style.fill instanceof Color) {\n\t\t\t\tcontext.fillStyle = style.fill.toCSS(style.fillOpacity != undefined ? style.fillOpacity : 1);\n\t\t\t} else {\n\t\t\t\tcontext.fillStyle = style.fill;\n\t\t\t}\n\t\t}\n\n\t\tif (style.shadowColor) {\n\t\t\tlayer.context.shadowColor = style.shadowColor.toCSS(style.shadowOpacity || 1);\n\t\t}\n\t\tif (style.shadowBlur) {\n\t\t\tlayer.context.shadowBlur = style.shadowBlur;\n\t\t}\n\t\tif (style.shadowOffsetX) {\n\t\t\tlayer.context.shadowOffsetX = style.shadowOffsetX;\n\t\t}\n\t\tif (style.shadowOffsetY) {\n\t\t\tlayer.context.shadowOffsetY = style.shadowOffsetY;\n\t\t}\n\n\t\tthis._shared(context);\n\n\t\tif (this._isInteractive() && !ignoreGhost) {\n\t\t\tghostContext.fillStyle = this._getColorId();\n\t\t\tthis._shared(ghostContext);\n\t\t}\n\t}\n\n\tprotected _getFontStyle(style2?: ITextStyle, ignoreFontWeight = false): string {\n\n\t\t// Process defaults\n\t\tconst style = this.style;\n\t\tlet fontStyle: string[] = [];\n\n\t\tif (style2 && style2.fontVariant) {\n\t\t\tfontStyle.push(style2.fontVariant);\n\t\t}\n\t\telse if (style.fontVariant) {\n\t\t\tfontStyle.push(style.fontVariant);\n\t\t}\n\n\t\tif (!ignoreFontWeight) {\n\t\t\tif (style2 && style2.fontWeight) {\n\t\t\t\tfontStyle.push(style2.fontWeight);\n\t\t\t}\n\t\t\telse if (style.fontWeight) {\n\t\t\t\tfontStyle.push(style.fontWeight);\n\t\t\t}\n\t\t}\n\n\t\tif (style2 && style2.fontStyle) {\n\t\t\tfontStyle.push(style2.fontStyle);\n\t\t}\n\t\telse if (style.fontStyle) {\n\t\t\tfontStyle.push(style.fontStyle);\n\t\t}\n\n\t\tif (style2 && style2.fontSize) {\n\t\t\tif ($type.isNumber(style2.fontSize)) {\n\t\t\t\tstyle2.fontSize = style2.fontSize + \"px\";\n\t\t\t}\n\t\t\tfontStyle.push(style2.fontSize);\n\t\t}\n\t\telse if (style.fontSize) {\n\t\t\tif ($type.isNumber(style.fontSize)) {\n\t\t\t\tstyle.fontSize = style.fontSize + \"px\";\n\t\t\t}\n\t\t\tfontStyle.push(style.fontSize);\n\t\t}\n\n\t\tif (style2 && style2.fontFamily) {\n\t\t\tfontStyle.push(style2.fontFamily);\n\t\t}\n\t\telse if (style.fontFamily) {\n\t\t\tfontStyle.push(style.fontFamily);\n\t\t}\n\t\telse if (fontStyle.length) {\n\t\t\tfontStyle.push(\"Arial\");\n\t\t}\n\n\t\treturn fontStyle.join(\" \");\n\t}\n\n\tprotected _render(parentLayer: CanvasLayer): void {\n\t\tconst layer = this._layer || parentLayer;\n\n\t\t// We need measurements in order to properly position text for alignment\n\t\tif (!this._textInfo) {\n\t\t\tthis._measure(layer);\n\t\t}\n\n\t\tif (this._textVisible) {\n\n\t\t\tconst interactive = this._isInteractive();\n\t\t\tconst context = layer.context;\n\t\t\tconst layerDirty = layer.dirty;\n\t\t\tconst ghostContext = this._renderer._ghostLayer.context;\n\n\t\t\tcontext.save();\n\t\t\tghostContext.save();\n\t\t\tthis._prerender(layer);\n\n\t\t\t// const lines = this.text.toString().replace(/\\r/g, \"\").split(/\\n/);\n\t\t\t// const x = this._localBounds && (this._localBounds.left < 0) ? Math.abs(this._localBounds.left) : 0;\n\n\t\t\t// Process text info produced by _measure()\n\t\t\t$array.each(this._textInfo!, (line, _index) => {\n\t\t\t\t$array.each(line.textChunks, (chunk, _index) => {\n\n\t\t\t\t\t// Set style\n\t\t\t\t\tif (chunk.style) {\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tghostContext.save();\n\n\t\t\t\t\t\tcontext.font = chunk.style;\n\t\t\t\t\t\tif (this._isInteractive()) {\n\t\t\t\t\t\t\tghostContext.font = chunk.style;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chunk.fill) {\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tcontext.fillStyle = chunk.fill.toCSS();\n\t\t\t\t\t\t// Color does not affect ghostContext so we not set it\n\t\t\t\t\t}\n\n\t\t\t\t\t// Draw text\n\t\t\t\t\tif (layerDirty) {\n\t\t\t\t\t\tcontext.fillText(chunk.text, chunk.offsetX, line.offsetY + chunk.offsetY);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Draw underline\n\t\t\t\t\tif (chunk.textDecoration == \"underline\" || chunk.textDecoration == \"line-through\") {\n\n\t\t\t\t\t\tlet thickness = 1;\n\t\t\t\t\t\tlet offset = 1;\n\t\t\t\t\t\tlet fontSize = chunk.height;\n\n\t\t\t\t\t\tlet offsetX = chunk.offsetX;\n\t\t\t\t\t\tswitch (this.style.textAlign) {\n\t\t\t\t\t\t\tcase \"right\":\n\t\t\t\t\t\t\tcase \"end\":\n\t\t\t\t\t\t\t\toffsetX -= chunk.width;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"center\":\n\t\t\t\t\t\t\t\toffsetX -= chunk.width / 2;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (chunk.style) {\n\t\t\t\t\t\t\tconst format = TextFormatter.getTextStyle(chunk.style);\n\t\t\t\t\t\t\tswitch (format.fontWeight) {\n\t\t\t\t\t\t\t\tcase \"bolder\":\n\t\t\t\t\t\t\t\tcase \"bold\":\n\t\t\t\t\t\t\t\tcase \"700\":\n\t\t\t\t\t\t\t\tcase \"800\":\n\t\t\t\t\t\t\t\tcase \"900\":\n\t\t\t\t\t\t\t\t\tthickness = 2;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (fontSize) {\n\t\t\t\t\t\t\toffset = fontSize / 20;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet y: number;\n\n\t\t\t\t\t\tif (chunk.textDecoration == \"line-through\") {\n\t\t\t\t\t\t\ty = thickness + line.offsetY + chunk.offsetY - chunk.height / 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\ty = thickness + offset * 1.5 + line.offsetY + chunk.offsetY;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tcontext.beginPath();\n\t\t\t\t\t\tif (chunk.fill) {\n\t\t\t\t\t\t\tcontext.strokeStyle = chunk.fill.toCSS();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (this.style.fill && this.style.fill instanceof Color) {\n\t\t\t\t\t\t\tcontext.strokeStyle = this.style.fill.toCSS();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontext.lineWidth = thickness * offset;\n\t\t\t\t\t\tcontext.moveTo(offsetX, y);\n\t\t\t\t\t\tcontext.lineTo(offsetX + chunk.width, y);\n\t\t\t\t\t\tcontext.stroke();\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (interactive && this.interactive) {\n\t\t\t\t\t\t// Draw text in ghost canvas ONLY if it is set as interactive\n\t\t\t\t\t\t// explicitly. This way we avoid hit test anomalies caused by anti\n\t\t\t\t\t\t// aliasing of text.\n\t\t\t\t\t\tghostContext.fillText(chunk.text, chunk.offsetX, line.offsetY + chunk.offsetY);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chunk.fill) {\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t// Color does not affect ghostContext so we not set it\n\t\t\t\t\t}\n\n\t\t\t\t\t// Reset style\n\t\t\t\t\tif (chunk.style) {\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\tghostContext.restore();\n\t\t\t\t\t}\n\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tcontext.restore();\n\t\t\tghostContext.restore();\n\t\t}\n\t}\n\n\tpublic _addBounds(bounds: IBounds): void {\n\t\tif (this.visible && this.isMeasured) {\n\t\t\t//if (this._textVisible) {\n\t\t\tconst x = this._measure(this.getLayer());\n\t\t\tsetPoint(bounds, { x: x.left, y: x.top });\n\t\t\tsetPoint(bounds, { x: x.right, y: x.bottom });\n\t\t\t//}\n\t\t}\n\t}\n\n\tprotected _ignoreFontWeight(): boolean {\n\t\treturn /apple/i.test(navigator.vendor);\n\t}\n\n\tpublic _measure(layer: CanvasLayer): IBounds {\n\t\tconst context = layer.context;\n\t\tconst ghostContext = this._renderer._ghostLayer.context;\n\t\tconst rtl = this.style.direction == \"rtl\";\n\n\t\t// Reset text info\n\t\tthis._textInfo = [];\n\n\t\t// Init\n\t\tconst oversizedBehavior = this.style.oversizedBehavior;\n\t\tconst maxWidth = this.style.maxWidth!;\n\n\t\tconst truncate = $type.isNumber(maxWidth) && oversizedBehavior == \"truncate\";\n\t\tconst wrap = $type.isNumber(maxWidth) && (oversizedBehavior == \"wrap\" || oversizedBehavior == \"wrap-no-break\");\n\n\t\t// Pre-render\n\t\tcontext.save();\n\t\tghostContext.save();\n\t\tthis._prerender(layer, true, this._ignoreFontWeight());\n\n\t\t// Get default font metrix\n\t\tconst refText = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 \";\n\n\t\t// Split up text into lines\n\t\tconst lines = this.text.toString().replace(/\\r/g, \"\").split(/\\n/);\n\t\tlet styleRestored = true;\n\t\tlet minX = 0;\n\t\tlet maxX = 0;\n\n\t\t// Iterate through the lines\n\t\tlet offsetY = 0;\n\t\tlet currentStyle: string | undefined;\n\t\t$array.each(lines, (line, _index) => {\n\n\t\t\t// Split up line into format/value chunks\n\t\t\tlet chunks: ITextChunk[];\n\t\t\tif (line == \"\") {\n\t\t\t\tchunks = [{\n\t\t\t\t\ttype: \"value\",\n\t\t\t\t\ttext: \"\"\n\t\t\t\t}];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tchunks = TextFormatter.chunk(line, false, this.style.ignoreFormatting);\n\t\t\t}\n\n\t\t\twhile (chunks.length > 0) {\n\n\t\t\t\t// Init line object\n\t\t\t\tlet lineInfo: ILine = {\n\t\t\t\t\toffsetY: offsetY,\n\t\t\t\t\tascent: 0,\n\t\t\t\t\twidth: 0,\n\t\t\t\t\theight: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: 0,\n\t\t\t\t\ttextChunks: []\n\t\t\t\t};\n\n\t\t\t\t// Measure reference text\n\t\t\t\tconst metrics = this._measureText(refText, context);\n\n\t\t\t\tconst height = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\n\t\t\t\tlineInfo.height = height;\n\t\t\t\tlineInfo.ascent = metrics.actualBoundingBoxAscent;\n\n\t\t\t\tlet currentFormat: string;\n\t\t\t\tlet currentDecoration: string | undefined = this.style.textDecoration;\n\t\t\t\tlet currentFill: Color | undefined;\n\t\t\t\tlet currentChunkWidth: number | undefined;\n\t\t\t\tlet skipFurtherText = false;\n\t\t\t\tlet firstTextChunk = true;\n\t\t\t\tlet leftoverChunks: Array<ITextChunk> = [];\n\t\t\t\tlet currentVerticalAlign: \"baseline\" | \"sub\" | \"super\" | undefined;\n\t\t\t\t//let offsetX = 0;\n\t\t\t\t//let chunk;\n\n\t\t\t\t//while(chunk = chunks.shift()) {\n\t\t\t\t$array.eachContinue(chunks, (chunk, index) => {\n\n\t\t\t\t\t// Format chunk\n\t\t\t\t\tif (chunk.type == \"format\") {\n\t\t\t\t\t\tif (chunk.text == \"[/]\") {\n\t\t\t\t\t\t\tif (!styleRestored) {\n\t\t\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t\t\tghostContext.restore();\n\t\t\t\t\t\t\t\tstyleRestored = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcurrentFill = undefined;\n\t\t\t\t\t\t\tcurrentStyle = undefined;\n\t\t\t\t\t\t\tcurrentChunkWidth = undefined;\n\t\t\t\t\t\t\tcurrentDecoration = this.style.textDecoration;\n\t\t\t\t\t\t\tcurrentVerticalAlign = undefined\n\t\t\t\t\t\t\tcurrentFormat = chunk.text;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\n\t\t\t\t\t\t\tif (!styleRestored) {\n\t\t\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t\t\tghostContext.restore();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet format = TextFormatter.getTextStyle(chunk.text);\n\t\t\t\t\t\t\tconst fontStyle = this._getFontStyle(format);\n\t\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\t\tghostContext.save();\n\t\t\t\t\t\t\tcontext.font = fontStyle;\n\t\t\t\t\t\t\tcurrentStyle = fontStyle;\n\t\t\t\t\t\t\tcurrentFormat = chunk.text;\n\t\t\t\t\t\t\tif (format.textDecoration) {\n\t\t\t\t\t\t\t\tcurrentDecoration = format.textDecoration;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (format.fill) {\n\t\t\t\t\t\t\t\tcurrentFill = <Color>format.fill;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ((<any>format).width) {\n\t\t\t\t\t\t\t\tcurrentChunkWidth = $type.toNumber((<any>format).width);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (format.verticalAlign) {\n\t\t\t\t\t\t\t\tcurrentVerticalAlign = format.verticalAlign;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstyleRestored = false;\n\n\t\t\t\t\t\t\t// Measure reference text after change of format\n\t\t\t\t\t\t\tconst metrics = this._measureText(refText, context);\n\t\t\t\t\t\t\tconst height = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\n\t\t\t\t\t\t\tif (height > lineInfo.height) {\n\t\t\t\t\t\t\t\tlineInfo.height = height;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (metrics.actualBoundingBoxAscent > lineInfo.ascent) {\n\t\t\t\t\t\t\t\tlineInfo.ascent = metrics.actualBoundingBoxAscent;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Text chunk\n\t\t\t\t\telse if (chunk.type == \"value\" && !skipFurtherText) {\n\n\t\t\t\t\t\t// Measure\n\t\t\t\t\t\tconst metrics = this._measureText(chunk.text, context);\n\t\t\t\t\t\tlet chunkWidth = metrics.actualBoundingBoxLeft + metrics.actualBoundingBoxRight;\n\n\t\t\t\t\t\t// Check for fit\n\t\t\t\t\t\tif (truncate) {\n\n\t\t\t\t\t\t\t// Break words?\n\t\t\t\t\t\t\tlet breakWords = firstTextChunk || this.style.breakWords || false;\n\n\t\t\t\t\t\t\t// Measure ellipsis and check if it fits\n\t\t\t\t\t\t\tconst ellipsis = this.style.ellipsis || \"\";\n\t\t\t\t\t\t\tconst ellipsisMetrics = this._measureText(ellipsis, context);\n\t\t\t\t\t\t\tconst ellipsisWidth = ellipsisMetrics.actualBoundingBoxLeft + ellipsisMetrics.actualBoundingBoxRight;\n\n\t\t\t\t\t\t\t// Check fit\n\t\t\t\t\t\t\tif ((lineInfo.width + chunkWidth) > maxWidth) {\n\t\t\t\t\t\t\t\tconst excessWidth = maxWidth - lineInfo.width - ellipsisWidth;\n\t\t\t\t\t\t\t\tchunk.text = this._truncateText(context, chunk.text, excessWidth, breakWords);\n\t\t\t\t\t\t\t\tchunk.text += ellipsis;\n\t\t\t\t\t\t\t\tskipFurtherText = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (wrap) {\n\t\t\t\t\t\t\t// Check fit\n\t\t\t\t\t\t\tif ((lineInfo.width + chunkWidth) > maxWidth) {\n\t\t\t\t\t\t\t\tconst excessWidth = maxWidth - lineInfo.width;\n\t\t\t\t\t\t\t\tconst tmpText = this._truncateText(\n\t\t\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\t\t\tchunk.text,\n\t\t\t\t\t\t\t\t\texcessWidth,\n\t\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\t\t(firstTextChunk && this.style.oversizedBehavior != \"wrap-no-break\")\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tif (tmpText == \"\") {\n\t\t\t\t\t\t\t\t\t// Unable to fit a single letter - hide the whole label\n\t\t\t\t\t\t\t\t\tthis._textVisible = true;\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t//skipFurtherText = true;\n\n\t\t\t\t\t\t\t\t//Add remaining chunks for the next line\n\t\t\t\t\t\t\t\tleftoverChunks = chunks.slice(index + 1);\n\n\t\t\t\t\t\t\t\t//Add remaining text of current chunk if it was forced-cut\n\t\t\t\t\t\t\t\tif ($utils.trim(tmpText) != $utils.trim(chunk.text)) {\n\t\t\t\t\t\t\t\t\tleftoverChunks.unshift({\n\t\t\t\t\t\t\t\t\t\ttype: \"value\",\n\t\t\t\t\t\t\t\t\t\ttext: chunk.text.substr(tmpText.length)\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tif (currentFormat) {\n\t\t\t\t\t\t\t\t\t\tleftoverChunks.unshift({\n\t\t\t\t\t\t\t\t\t\t\ttype: \"format\",\n\t\t\t\t\t\t\t\t\t\t\ttext: currentFormat\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}\n\n\t\t\t\t\t\t\t\t// Set current chunk (truncated)\n\t\t\t\t\t\t\t\tchunk.text = $utils.trim(tmpText);\n\n\t\t\t\t\t\t\t\tchunks = [];\n\t\t\t\t\t\t\t\tskipFurtherText = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Chunk width?\n\t\t\t\t\t\tlet leftBoundMod = 1;\n\t\t\t\t\t\tlet rightBoundMod = 1;\n\t\t\t\t\t\tif (currentStyle && currentChunkWidth && (currentChunkWidth > chunkWidth)) {\n\t\t\t\t\t\t\t// increase horizontal bounding boxes accordingly\n\t\t\t\t\t\t\tconst boundsMod = chunkWidth / currentChunkWidth\n\t\t\t\t\t\t\tswitch (this.style.textAlign) {\n\t\t\t\t\t\t\t\tcase \"right\":\n\t\t\t\t\t\t\t\tcase \"end\":\n\t\t\t\t\t\t\t\t\tleftBoundMod = boundsMod;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"center\":\n\t\t\t\t\t\t\t\t\tleftBoundMod = boundsMod;\n\t\t\t\t\t\t\t\t\trightBoundMod = boundsMod;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\trightBoundMod = boundsMod;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tchunkWidth = currentChunkWidth;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst chunkHeight = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\n\n\n\t\t\t\t\t\tif (chunkHeight > lineInfo.height) {\n\t\t\t\t\t\t\tlineInfo.height = chunkHeight;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (metrics.actualBoundingBoxAscent > lineInfo.ascent) {\n\t\t\t\t\t\t\tlineInfo.ascent = metrics.actualBoundingBoxAscent;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlineInfo.width += chunkWidth;\n\t\t\t\t\t\tlineInfo.left += metrics.actualBoundingBoxLeft / leftBoundMod;\n\t\t\t\t\t\tlineInfo.right += metrics.actualBoundingBoxRight / rightBoundMod;\n\t\t\t\t\t\tlineInfo.textChunks.push({\n\t\t\t\t\t\t\tstyle: currentStyle,\n\t\t\t\t\t\t\tfill: currentFill,\n\t\t\t\t\t\t\ttext: chunk.text,\n\t\t\t\t\t\t\twidth: chunkWidth,\n\t\t\t\t\t\t\theight: chunkHeight,\n\t\t\t\t\t\t\tleft: metrics.actualBoundingBoxLeft,\n\t\t\t\t\t\t\tright: metrics.actualBoundingBoxRight,\n\t\t\t\t\t\t\tascent: metrics.actualBoundingBoxAscent,\n\t\t\t\t\t\t\toffsetX: 0,\n\t\t\t\t\t\t\toffsetY: 0,\n\t\t\t\t\t\t\ttextDecoration: currentDecoration,\n\t\t\t\t\t\t\tverticalAlign: currentVerticalAlign\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t//offsetX += chunkWidth;\n\n\t\t\t\t\t\tfirstTextChunk = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif (leftoverChunks) {\n\t\t\t\t\t\t//return false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t\t//}\n\t\t\t\t});\n\n\t\t\t\tif (this.style.lineHeight instanceof Percent) {\n\t\t\t\t\tlineInfo.height *= this.style.lineHeight.value;\n\t\t\t\t\tlineInfo.ascent *= this.style.lineHeight.value;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlineInfo.height *= this.style.lineHeight || 1.2;\n\t\t\t\t\tlineInfo.ascent *= this.style.lineHeight || 1.2;\n\t\t\t\t}\n\n\t\t\t\tif (minX < lineInfo.left) {\n\t\t\t\t\tminX = lineInfo.left;\n\t\t\t\t}\n\n\t\t\t\tif (maxX < lineInfo.right) {\n\t\t\t\t\tmaxX = lineInfo.right;\n\t\t\t\t}\n\n\t\t\t\tthis._textInfo!.push(lineInfo);\n\n\t\t\t\t//lineInfo.offsetY += lineInfo.ascent;\n\t\t\t\toffsetY += lineInfo.height;\n\n\t\t\t\t// Reset chunks so that it can proceed to the next line\n\t\t\t\tchunks = leftoverChunks || [];\n\t\t\t}\n\n\t\t});\n\n\t\tif (!styleRestored) {\n\t\t\tcontext.restore();\n\t\t\tghostContext.restore();\n\t\t}\n\n\t\t// Adjust chunk internal offsets\n\t\t$array.each(this._textInfo, (lineInfo, _index: number) => {\n\t\t\tlet currentChunkOffset = 0\n\t\t\t$array.each(lineInfo.textChunks, (chunk) => {\n\t\t\t\tchunk.offsetX = currentChunkOffset + chunk.left - lineInfo.left;\n\t\t\t\tchunk.offsetY += lineInfo.height - lineInfo.height * (this.style.baselineRatio || 0.19);\n\t\t\t\tcurrentChunkOffset += chunk.width;\n\n\t\t\t\tif (chunk.verticalAlign) {\n\t\t\t\t\tswitch (chunk.verticalAlign) {\n\t\t\t\t\t\tcase \"super\":\n\t\t\t\t\t\t\tchunk.offsetY -= lineInfo.height / 2 - chunk.height / 2;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"sub\":\n\t\t\t\t\t\t\tchunk.offsetY += chunk.height / 2;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tconst bounds = {\n\t\t\tleft: rtl ? -maxX : -minX,\n\t\t\ttop: 0,\n\t\t\tright: rtl ? minX : maxX,\n\t\t\tbottom: offsetY,\n\t\t};\n\n\n\t\t// We need to fit?\n\t\tif (oversizedBehavior !== \"none\") {\n\t\t\tconst ratio = this._fitRatio(bounds);\n\t\t\tif (ratio < 1) {\n\t\t\t\tif (oversizedBehavior == \"fit\") {\n\t\t\t\t\tif ($type.isNumber(this.style.minScale) && (ratio < this.style.minScale)) {\n\t\t\t\t\t\tthis._textVisible = false;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (!this._originalScale || this._originalScale == 1) {\n\t\t\t\t\t\t\tthis._originalScale = this.scale;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.scale = ratio;\n\t\t\t\t\t\tthis._textVisible = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (oversizedBehavior == \"hide\") {\n\t\t\t\t\tthis._textVisible = false;\n\t\t\t\t}\n\t\t\t\telse {\n\n\t\t\t\t\tswitch (this.style.textAlign) {\n\t\t\t\t\t\tcase \"right\":\n\t\t\t\t\t\tcase \"end\":\n\t\t\t\t\t\t\tbounds.left = -maxWidth;\n\t\t\t\t\t\t\tbounds.right = 0;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"center\":\n\t\t\t\t\t\t\tbounds.left = -maxWidth / 2;\n\t\t\t\t\t\t\tbounds.right = maxWidth / 2;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbounds.left = 0;\n\t\t\t\t\t\t\tbounds.right = maxWidth;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.scale = this._originalScale || 1;\n\t\t\t\t\tthis._originalScale = undefined;\n\t\t\t\t\tthis._textVisible = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.scale = this._originalScale || 1;\n\t\t\t\tthis._originalScale = undefined;\n\t\t\t\tthis._textVisible = true;\n\t\t\t}\n\t\t}\n\n\t\tcontext.restore();\n\t\tghostContext.restore();\n\n\t\treturn bounds;\n\t}\n\n\tprotected _fitRatio(bounds: IBounds): number {\n\t\tconst maxW = this.style.maxWidth;\n\t\tconst maxH = this.style.maxHeight;\n\t\tif (!$type.isNumber(maxW) && !$type.isNumber(maxH)) {\n\t\t\treturn 1;\n\t\t}\n\t\tconst w = bounds.right - bounds.left;\n\t\tconst h = bounds.bottom - bounds.top;\n\t\treturn Math.min(maxW! / w || 1, maxH! / h || 1);\n\t}\n\n\tprotected _truncateText(context: CanvasRenderingContext2D, text: string, maxWidth: number, breakWords: boolean = false, fallbackBreakWords: boolean = true): string {\n\t\tlet width: number;\n\t\tdo {\n\t\t\tif (breakWords) {\n\t\t\t\ttext = text.slice(0, -1);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet tmp = text.replace(/[^,;:!?\\\\\\/\\s]+[,;:!?\\\\\\/\\s]*$/g, \"\");\n\t\t\t\tif (tmp == \"\" && fallbackBreakWords) {\n\t\t\t\t\tbreakWords = true;\n\t\t\t\t}\n\t\t\t\telse if (tmp == \"\") {\n\t\t\t\t\treturn text;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttext = tmp;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst metrics = this._measureText(text, context);\n\t\t\twidth = metrics.actualBoundingBoxLeft + metrics.actualBoundingBoxRight;\n\t\t} while ((width > maxWidth) && text != \"\");\n\t\treturn text;\n\t}\n\n\tprotected _measureText(text: string, context: CanvasRenderingContext2D): TextMetrics {\n\t\tlet metrics = context.measureText(text);\n\t\tlet fakeMetrics: any = {};\n\t\tif (metrics.actualBoundingBoxAscent == null) {\n\t\t\tconst div = document.createElement(\"div\");\n\t\t\tdiv.innerText = text;\n\t\t\tdiv.style.visibility = \"hidden\";\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tdiv.style.top = \"-1000000px;\"\n\t\t\tdiv.style.fontFamily = this.style.fontFamily || \"\";\n\t\t\tdiv.style.fontSize = this.style.fontSize + \"\";\n\t\t\tdocument.body.appendChild(div);\n\t\t\tconst bbox = div.getBoundingClientRect();\n\t\t\tdocument.body.removeChild(div);\n\t\t\tconst h = bbox.height;\n\t\t\tconst w = metrics.width;\n\t\t\tlet left = 0;\n\t\t\tlet right = w;\n\n\t\t\tfakeMetrics = {\n\t\t\t\tactualBoundingBoxAscent: h,\n\t\t\t\tactualBoundingBoxDescent: 0,\n\t\t\t\tactualBoundingBoxLeft: left,\n\t\t\t\tactualBoundingBoxRight: right,\n\t\t\t\tfontBoundingBoxAscent: h,\n\t\t\t\tfontBoundingBoxDescent: 0,\n\t\t\t\twidth: w\n\t\t\t}\n\t\t\t//return fake;\n\t\t}\n\t\telse {\n\t\t\tfakeMetrics = {\n\t\t\t\tactualBoundingBoxAscent: metrics.actualBoundingBoxAscent,\n\t\t\t\tactualBoundingBoxDescent: metrics.actualBoundingBoxDescent,\n\t\t\t\tactualBoundingBoxLeft: metrics.actualBoundingBoxLeft,\n\t\t\t\tactualBoundingBoxRight: metrics.actualBoundingBoxRight,\n\t\t\t\tfontBoundingBoxAscent: metrics.actualBoundingBoxAscent,\n\t\t\t\tfontBoundingBoxDescent: metrics.actualBoundingBoxDescent,\n\t\t\t\twidth: metrics.width\n\t\t\t}\n\t\t}\n\n\t\tconst w = metrics.width;\n\t\tswitch (this.style.textAlign) {\n\t\t\tcase \"right\":\n\t\t\tcase \"end\":\n\t\t\t\tfakeMetrics.actualBoundingBoxLeft = w;\n\t\t\t\tfakeMetrics.actualBoundingBoxRight = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"center\":\n\t\t\t\tfakeMetrics.actualBoundingBoxLeft = w / 2;\n\t\t\t\tfakeMetrics.actualBoundingBoxRight = w / 2;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tfakeMetrics.actualBoundingBoxLeft = 0;\n\t\t\t\tfakeMetrics.actualBoundingBoxRight = w;\n\t\t}\n\n\t\treturn fakeMetrics;\n\t}\n\n}\n\n/**\n * @ignore\n */\nexport class CanvasTextStyle implements ITextStyle {\n\t//public wordWrapWidth: number = 100;\n\tpublic fill?: Color | CanvasGradient | CanvasPattern;\n\tpublic fillOpacity?: number;\n\tpublic textAlign?: \"start\" | \"end\" | \"left\" | \"right\" | \"center\";\n\tpublic fontFamily?: string;\n\tpublic fontSize?: string | number;\n\tpublic fontWeight?: 'normal' | 'bold' | 'bolder' | 'lighter' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900'\n\tpublic fontStyle?: 'normal' | 'italic' | 'oblique';\n\tpublic fontVariant?: \"normal\" | \"small-caps\";\n\tpublic textDecoration?: \"underline\" | \"line-through\";\n\tpublic shadowColor?: Color | null;\n\tpublic shadowBlur?: number;\n\tpublic shadowOffsetX?: number;\n\tpublic shadowOffsetY?: number;\n\tpublic shadowOpacity?: number;\n\t// leading?: number;\n\t// letterSpacing?: number;\n\tpublic lineHeight?: number | Percent = percent(120);\n\tpublic baselineRatio?: number = 0.19;\n\t// padding?: number;\n\t// stroke?: number;\n\t// strokeThickness?: number;\n\t// trim?: number;\n\t// wordWrap?: boolean;\n\tpublic direction?: \"ltr\" | \"rtl\";\n\tpublic textBaseline?: \"top\" | \"hanging\" | \"middle\" | \"alphabetic\" | \"ideographic\" | \"bottom\";\n\tpublic oversizedBehavior?: \"none\" | \"hide\" | \"fit\" | \"wrap\" | \"wrap-no-break\" | \"truncate\" = \"none\";\n\tpublic breakWords?: boolean = false;\n\tpublic ellipsis?: string = \"…\";\n\tpublic maxWidth?: number;\n\tpublic maxHeight?: number;\n\tpublic minScale?: number;\n\tpublic ignoreFormatting?: boolean = false;\n}\n\n/**\n * @ignore\n */\nexport class CanvasRadialText extends CanvasText implements IRadialText {\n\tpublic textType?: \"regular\" | \"circular\" | \"radial\" | \"aligned\" | \"adjusted\" = \"circular\";\n\tpublic radius?: number;\n\tpublic startAngle?: number;\n\tpublic inside?: boolean = false;\n\tpublic orientation?: \"inward\" | \"outward\" | \"auto\" = \"auto\";\n\tpublic kerning?: number = 0;\n\n\tprivate _textReversed: boolean = false;\n\n\tpublic _render(parentLayer: CanvasLayer): void {\n\t\tswitch (this.textType) {\n\t\t\tcase \"circular\":\n\t\t\t\tthis._renderCircular(parentLayer);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tsuper._render(parentLayer);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tpublic _renderCircular(parentLayer: CanvasLayer): void {\n\t\tif (this._textVisible) {\n\t\t\tconst layer = this._layer || parentLayer;\n\n\t\t\tthis._prerender(layer);\n\n\t\t\tconst interactive = this._isInteractive();\n\t\t\tconst context = layer.context;\n\t\t\tconst layerDirty = layer.dirty;\n\t\t\tconst ghostContext = this._renderer._ghostLayer.context;\n\n\t\t\t// Savepoint\n\t\t\tcontext.save();\n\t\t\tif (interactive) {\n\t\t\t\tghostContext.save();\n\t\t\t}\n\n\t\t\t// Init\n\t\t\tlet radius = (this.radius || 0);\n\t\t\tlet startAngle = (this.startAngle || 0);\n\t\t\tlet deltaAngle = 0;\n\t\t\tlet orientation = this.orientation;\n\t\t\tlet inward = orientation == \"auto\" ? \"auto\" : orientation == \"inward\";\n\t\t\tconst inside = this.inside;\n\t\t\tconst align = this.style.textAlign || \"left\";\n\t\t\tconst kerning = this.kerning || 0;\n\t\t\tlet clockwise = align == \"left\" ? 1 : -1;\n\t\t\tconst shouldReverse = !this._textReversed;\n\n\t\t\t// We need measurements in order to properly position text for alignment\n\t\t\tif (!this._textInfo) {\n\t\t\t\tthis._measure(layer);\n\t\t\t}\n\n\t\t\t// Check if we need to invert the whole stuff\n\t\t\tif (inward == \"auto\") {\n\t\t\t\t// Calc max angle so we know whether we need to flip it\n\t\t\t\tlet maxAngle = 0;\n\t\t\t\tlet midAngle = 0;\n\t\t\t\t$array.each(this._textInfo!, (line, _index) => {\n\t\t\t\t\tconst deltaAngle = startAngle + (line.width / (radius - line.height)) / 2 * -clockwise;\n\t\t\t\t\tif (deltaAngle > maxAngle) {\n\t\t\t\t\t\tmaxAngle = deltaAngle;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (align == \"left\") {\n\t\t\t\t\tmidAngle = (maxAngle + deltaAngle / 2) * $math.DEGREES;\n\t\t\t\t}\n\t\t\t\telse if (align == \"right\") {\n\t\t\t\t\tmidAngle = (maxAngle - deltaAngle / 2) * $math.DEGREES;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tmidAngle = startAngle * $math.DEGREES;\n\t\t\t\t}\n\t\t\t\tmidAngle = $math.normalizeAngle(midAngle);\n\t\t\t\tinward = (midAngle >= 270) || (midAngle <= 90);\n\t\t\t}\n\n\t\t\tif (inward == true && shouldReverse) {\n\t\t\t\tthis._textInfo!.reverse();\n\t\t\t\tthis._textReversed = true;\n\t\t\t}\n\n\t\t\t// if ((inward == false && align == \"left\") || (inward == true && align == \"right\")) {\n\t\t\t// \tclockwise *= -1;\n\t\t\t// }\n\n\t\t\t// Process text info produced by _measure()\n\t\t\t$array.each(this._textInfo!, (line, _index) => {\n\n\t\t\t\tconst textHeight = line.height;\n\n\t\t\t\t// Adjust radius (for `inside = false`)\n\t\t\t\t// Radius adjustment for `inside = false` is below the line calculation\n\t\t\t\tif (!inside) {\n\t\t\t\t\tradius += textHeight;\n\t\t\t\t}\n\n\t\t\t\t// Reverse letters if we're painting them counter-clockwise\n\t\t\t\tif (((clockwise == -1 && inward) || (clockwise == 1 && !inward)) && shouldReverse) {\n\t\t\t\t\tline.textChunks.reverse();\n\t\t\t\t}\n\n\t\t\t\t// Init angles\n\t\t\t\tlet lineStartAngle = startAngle;\n\t\t\t\tdeltaAngle = 0;\n\n\t\t\t\t// Adjust for center-align\n\t\t\t\tif (align == \"center\") {\n\t\t\t\t\tlineStartAngle += (line.width / (radius - textHeight)) / 2 * -clockwise;\n\t\t\t\t\tdeltaAngle = lineStartAngle - startAngle;\n\t\t\t\t}\n\n\t\t\t\t// if (inward == \"auto\") {\n\t\t\t\t// \tlet midAngle;\n\t\t\t\t// \tif (align == \"left\") {\n\t\t\t\t// \t\tmidAngle = (lineStartAngle + deltaAngle / 2) * $math.DEGREES;\n\t\t\t\t// \t}\n\t\t\t\t// \telse if () {\n\t\t\t\t// \t\tmidAngle = (lineStartAngle - deltaAngle / 2) * $math.DEGREES;\n\t\t\t\t// \t}\n\t\t\t\t// \tinward = (midAngle >= 270) || (midAngle <= 90);\n\t\t\t\t// }\n\n\t\t\t\t// Rotate letters if they are facing outward\n\t\t\t\tlineStartAngle += (Math.PI * (inward ? 0 : 1)); // Rotate 180 if outward\n\n\t\t\t\t// Savepoint\n\t\t\t\tcontext.save();\n\t\t\t\tif (interactive) {\n\t\t\t\t\tghostContext.save();\n\t\t\t\t}\n\n\t\t\t\t// Assume starting angle\n\t\t\t\tcontext.rotate(lineStartAngle);\n\t\t\t\tif (interactive) {\n\t\t\t\t\tghostContext.rotate(lineStartAngle);\n\t\t\t\t}\n\n\t\t\t\tlet angleShift = 0;\n\t\t\t\t$array.each(line.textChunks, (chunk, _index) => {\n\n\t\t\t\t\t// Draw the letter\n\t\t\t\t\tconst char = chunk.text;\n\t\t\t\t\tconst charWidth = chunk.width;\n\n\t\t\t\t\t// Rotate half a letter\n\t\t\t\t\tangleShift = (charWidth / 2) / (radius - textHeight) * clockwise;\n\t\t\t\t\tcontext.rotate(angleShift);\n\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\tghostContext.rotate(angleShift);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set style\n\t\t\t\t\tif (chunk.style) {\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tghostContext.save();\n\n\t\t\t\t\t\tcontext.font = chunk.style;\n\t\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\t\tghostContext.font = chunk.style;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chunk.fill) {\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tcontext.fillStyle = chunk.fill.toCSS();\n\t\t\t\t\t\t// Color does not affect ghostContext so we not set it\n\t\t\t\t\t}\n\n\t\t\t\t\t// Center letters\n\t\t\t\t\tcontext.textBaseline = \"middle\";\n\t\t\t\t\tcontext.textAlign = \"center\";\n\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\tghostContext.textBaseline = \"middle\";\n\t\t\t\t\t\tghostContext.textAlign = \"center\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Plop the letter\n\t\t\t\t\tif (layerDirty) {\n\t\t\t\t\t\tcontext.fillText(char, 0, (inward ? 1 : -1) * (0 - radius + textHeight / 2));\n\t\t\t\t\t}\n\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\tghostContext.fillText(char, 0, (inward ? 1 : -1) * (0 - radius + textHeight / 2));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chunk.fill) {\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t// Color does not affect ghostContext so we not set it\n\t\t\t\t\t}\n\n\t\t\t\t\t// Reset style\n\t\t\t\t\tif (chunk.style) {\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\tghostContext.restore();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Rotate half a letter and add spacing\n\t\t\t\t\tangleShift = (charWidth / 2 + kerning) / (radius - textHeight) * clockwise;\n\t\t\t\t\tcontext.rotate(angleShift);\n\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\tghostContext.rotate(angleShift);\n\t\t\t\t\t}\n\n\t\t\t\t});\n\n\t\t\t\t// Restore angle\n\t\t\t\tcontext.restore();\n\t\t\t\tif (interactive) {\n\t\t\t\t\tghostContext.restore();\n\t\t\t\t}\n\n\t\t\t\t// Adjust radius (for `inside = true`)\n\t\t\t\tif (inside) {\n\t\t\t\t\tradius -= textHeight;\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\t// Restore\n\t\t\tcontext.restore();\n\t\t\tif (interactive) {\n\t\t\t\tghostContext.restore();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _measure(layer: CanvasLayer): IBounds {\n\t\tswitch (this.textType) {\n\t\t\tcase \"circular\":\n\t\t\t\treturn this._measureCircular(layer);\n\t\t\tdefault:\n\t\t\t\treturn super._measure(layer);\n\t\t}\n\t}\n\n\tpublic _measureCircular(layer: CanvasLayer): IBounds {\n\t\tconst context = layer.context;\n\t\tconst ghostContext = this._renderer._ghostLayer.context;\n\t\tconst rtl = this.style.direction == \"rtl\";\n\n\t\tconst oversizedBehavior = this.style.oversizedBehavior;\n\t\tconst maxWidth = this.style.maxWidth!;\n\n\t\tconst truncate = $type.isNumber(maxWidth) && oversizedBehavior == \"truncate\";\n\t\tconst ellipsis = this.style.ellipsis || \"\";\n\t\tlet ellipsisMetrics: TextMetrics;\n\t\t//const wrap = $type.isNumber(maxWidth) && (oversizedBehavior == \"wrap\" || oversizedBehavior == \"wrap-no-break\");\n\n\n\t\t// Reset text info\n\t\tthis._textVisible = true;\n\t\tthis._textInfo = [];\n\t\tthis._textReversed = false;\n\n\t\t// Pre-render\n\t\tcontext.save();\n\t\tghostContext.save();\n\t\tthis._prerender(layer, true);\n\n\t\t// Split up text into lines\n\t\tconst lines = this.text.toString().replace(/\\r/g, \"\").split(/\\n/);\n\t\tlet styleRestored = true;\n\t\tlet totalWidth = 0;\n\n\t\t// Iterate through the lines\n\t\tlet offsetY = 0;\n\t\t$array.each(lines, (line, _index) => {\n\n\t\t\t// Split up line into format/value chunks\n\t\t\tlet chunks = TextFormatter.chunk(line, false, this.style.ignoreFormatting);\n\n\t\t\t// Init line object\n\t\t\tlet lineInfo: ILine = {\n\t\t\t\toffsetY: offsetY,\n\t\t\t\tascent: 0,\n\t\t\t\twidth: 0,\n\t\t\t\theight: 0,\n\t\t\t\tleft: 0,\n\t\t\t\tright: 0,\n\t\t\t\ttextChunks: []\n\t\t\t};\n\n\t\t\tlet currentStyle: string | undefined;\n\t\t\tlet currentFill: Color | undefined;\n\t\t\tlet currentChunkWidth: number | undefined;\n\n\t\t\t//while(chunk = chunks.shift()) {\n\t\t\t$array.each(chunks, (chunk, _index) => {\n\n\t\t\t\t// Format chunk\n\t\t\t\tif (chunk.type == \"format\") {\n\t\t\t\t\tif (chunk.text == \"[/]\") {\n\t\t\t\t\t\tif (!styleRestored) {\n\t\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t\tghostContext.restore();\n\t\t\t\t\t\t\tstyleRestored = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentFill = undefined;\n\t\t\t\t\t\tcurrentStyle = undefined;\n\t\t\t\t\t\tcurrentChunkWidth = undefined;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet format = TextFormatter.getTextStyle(chunk.text);\n\t\t\t\t\t\tconst fontStyle = this._getFontStyle(format);\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tghostContext.save();\n\t\t\t\t\t\tcontext.font = fontStyle;\n\t\t\t\t\t\tcurrentStyle = fontStyle;\n\t\t\t\t\t\tif (format.fill) {\n\t\t\t\t\t\t\tcurrentFill = <Color>format.fill;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ((<any>format).width) {\n\t\t\t\t\t\t\tcurrentChunkWidth = $type.toNumber((<any>format).width);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstyleRestored = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (truncate) {\n\t\t\t\t\t\tellipsisMetrics = this._measureText(ellipsis, context);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Text format\n\t\t\t\telse if (chunk.type == \"value\") {\n\n\t\t\t\t\t// Measure each letter\n\t\t\t\t\tconst chars = chunk.text.match(/./ug) || [];\n\t\t\t\t\tif (rtl) {\n\t\t\t\t\t\tchars.reverse();\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < chars.length; i++) {\n\n\t\t\t\t\t\tconst char = chars[i];\n\n\t\t\t\t\t\t// Measure\n\t\t\t\t\t\tconst metrics = this._measureText(char, context);\n\t\t\t\t\t\tlet chunkWidth = metrics.width;\n\n\t\t\t\t\t\t// Chunk width?\n\t\t\t\t\t\tif (currentStyle && currentChunkWidth && (currentChunkWidth > chunkWidth)) {\n\t\t\t\t\t\t\tchunkWidth = currentChunkWidth;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst chunkHeight = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\n\t\t\t\t\t\tif (chunkHeight > lineInfo.height) {\n\t\t\t\t\t\t\tlineInfo.height = chunkHeight;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (metrics.actualBoundingBoxAscent > lineInfo.ascent) {\n\t\t\t\t\t\t\tlineInfo.ascent = metrics.actualBoundingBoxAscent;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlineInfo.width += chunkWidth;\n\t\t\t\t\t\tlineInfo.left += metrics.actualBoundingBoxLeft;\n\t\t\t\t\t\tlineInfo.right += metrics.actualBoundingBoxRight;\n\t\t\t\t\t\tlineInfo.textChunks.push({\n\t\t\t\t\t\t\tstyle: currentStyle,\n\t\t\t\t\t\t\tfill: currentFill,\n\t\t\t\t\t\t\ttext: char,\n\t\t\t\t\t\t\twidth: chunkWidth,\n\t\t\t\t\t\t\theight: chunkHeight + metrics.actualBoundingBoxDescent,\n\t\t\t\t\t\t\tleft: metrics.actualBoundingBoxLeft,\n\t\t\t\t\t\t\tright: metrics.actualBoundingBoxRight,\n\t\t\t\t\t\t\tascent: metrics.actualBoundingBoxAscent,\n\t\t\t\t\t\t\toffsetX: 0,\n\t\t\t\t\t\t\toffsetY: chunkHeight,\n\t\t\t\t\t\t\ttextDecoration: undefined\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\ttotalWidth += chunkWidth;\n\n\t\t\t\t\t\t// Handle oversized behavior\n\t\t\t\t\t\tif (truncate) {\n\t\t\t\t\t\t\t// Measure ellipsis and check if it fits\n\t\t\t\t\t\t\tif (!ellipsisMetrics) {\n\t\t\t\t\t\t\t\tellipsisMetrics = this._measureText(ellipsis, context);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst ellipsisWidth = ellipsisMetrics.actualBoundingBoxLeft + ellipsisMetrics.actualBoundingBoxRight;\n\t\t\t\t\t\t\ttotalWidth += ellipsisWidth;\n\t\t\t\t\t\t\tif ((totalWidth + ellipsisWidth) > maxWidth) {\n\t\t\t\t\t\t\t\tif (lineInfo.textChunks.length == 1) {\n\t\t\t\t\t\t\t\t\tthis._textVisible = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tlineInfo.width += ellipsisWidth;\n\t\t\t\t\t\t\t\t\tlineInfo.left += ellipsisMetrics.actualBoundingBoxLeft;\n\t\t\t\t\t\t\t\t\tlineInfo.right += ellipsisMetrics.actualBoundingBoxRight;\n\t\t\t\t\t\t\t\t\tlineInfo.textChunks.push({\n\t\t\t\t\t\t\t\t\t\tstyle: currentStyle,\n\t\t\t\t\t\t\t\t\t\tfill: currentFill,\n\t\t\t\t\t\t\t\t\t\ttext: ellipsis,\n\t\t\t\t\t\t\t\t\t\twidth: ellipsisWidth,\n\t\t\t\t\t\t\t\t\t\theight: chunkHeight + ellipsisMetrics.actualBoundingBoxDescent,\n\t\t\t\t\t\t\t\t\t\tleft: ellipsisMetrics.actualBoundingBoxLeft,\n\t\t\t\t\t\t\t\t\t\tright: ellipsisMetrics.actualBoundingBoxRight,\n\t\t\t\t\t\t\t\t\t\tascent: ellipsisMetrics.actualBoundingBoxAscent,\n\t\t\t\t\t\t\t\t\t\toffsetX: 0,\n\t\t\t\t\t\t\t\t\t\toffsetY: chunkHeight,\n\t\t\t\t\t\t\t\t\t\ttextDecoration: undefined\n\t\t\t\t\t\t\t\t\t});\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\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (rtl) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (this.style.lineHeight instanceof Percent) {\n\t\t\t\tlineInfo.height *= this.style.lineHeight.value;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlineInfo.height *= this.style.lineHeight || 1.2;\n\t\t\t}\n\n\t\t\tthis._textInfo!.push(lineInfo);\n\n\t\t\t//lineInfo.offsetY += lineInfo.ascent;\n\t\t\toffsetY += lineInfo.height;\n\n\n\t\t});\n\n\t\tif (!styleRestored) {\n\t\t\tcontext.restore();\n\t\t\tghostContext.restore();\n\t\t}\n\n\n\t\tif (oversizedBehavior == \"hide\" && (totalWidth > maxWidth)) {\n\t\t\tthis._textVisible = false;\n\t\t}\n\n\t\t// Adjust chunk internal offsets\n\t\t$array.each(this._textInfo, (lineInfo) => {\n\t\t\t$array.each(lineInfo.textChunks, (chunk) => {\n\t\t\t\tchunk.offsetY += Math.round((lineInfo.height - chunk.height + (lineInfo.ascent - chunk.ascent)) / 2);\n\t\t\t});\n\t\t});\n\n\t\tcontext.restore();\n\t\tghostContext.restore();\n\n\t\treturn {\n\t\t\tleft: 0,\n\t\t\ttop: 0,\n\t\t\tright: 0,\n\t\t\tbottom: 0,\n\t\t};\n\t}\n\n}\n\n/**\n * @ignore\n */\nexport class CanvasImage extends CanvasDisplayObject implements IPicture {\n\tpublic width: number | undefined;\n\tpublic height: number | undefined;\n\tpublic image: HTMLImageElement | undefined;\n\tpublic tainted?: boolean;\n\n\tpublic shadowColor?: Color;\n\tpublic shadowBlur?: number;\n\tpublic shadowOffsetX?: number;\n\tpublic shadowOffsetY?: number;\n\tpublic shadowOpacity?: number;\n\n\tprotected _imageMask: HTMLCanvasElement | undefined;\n\n\tconstructor(renderer: CanvasRenderer, image: HTMLImageElement | undefined) {\n\t\tsuper(renderer);\n\t\tthis.image = image;\n\t}\n\n\tprotected _dispose(): void {\n\t\tsuper._dispose();\n\n\t\tif (this._imageMask) {\n\t\t\tclearCanvas(this._imageMask);\n\t\t}\n\t}\n\n\tgetLocalBounds(): IBounds {\n\t\tif (!this._localBounds) {\n\n\n\t\t\tlet w = 0;\n\t\t\tlet h = 0;\n\n\t\t\tif (this.width) {\n\t\t\t\tw = this.width;\n\t\t\t}\n\t\t\tif (this.height) {\n\t\t\t\th = this.height;\n\t\t\t}\n\n\t\t\tthis._localBounds = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0,\n\t\t\t\tright: w,\n\t\t\t\tbottom: h\n\t\t\t};\n\n\t\t\tthis._addBounds(this._localBounds);\n\t\t}\n\t\treturn this._localBounds;\n\t}\n\n\tprotected _render(parentLayer: CanvasLayer): void {\n\t\tsuper._render(parentLayer);\n\n\t\tif (this.image) {\n\t\t\tconst layer = this._layer || parentLayer;\n\n\t\t\tif (this.tainted === undefined) {\n\t\t\t\tthis.tainted = isTainted(this.image);\n\t\t\t\tlayer.tainted = true;\n\t\t\t}\n\n\t\t\tif (this.tainted && this._renderer._omitTainted) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (layer.dirty) {\n\n\t\t\t\tif (this.shadowColor) {\n\t\t\t\t\tlayer.context.shadowColor = this.shadowColor.toCSS(this.shadowOpacity || 1);\n\t\t\t\t}\n\t\t\t\tif (this.shadowBlur) {\n\t\t\t\t\tlayer.context.shadowBlur = this.shadowBlur;\n\t\t\t\t}\n\t\t\t\tif (this.shadowOffsetX) {\n\t\t\t\t\tlayer.context.shadowOffsetX = this.shadowOffsetX;\n\t\t\t\t}\n\t\t\t\tif (this.shadowOffsetY) {\n\t\t\t\t\tlayer.context.shadowOffsetY = this.shadowOffsetY;\n\t\t\t\t}\n\n\t\t\t\t// TODO should this round ?\n\t\t\t\tconst width = this.width || this.image.naturalWidth;\n\t\t\t\tconst height = this.height || this.image.naturalHeight;\n\n\t\t\t\tlayer.context.drawImage(this.image, 0, 0, width, height);\n\t\t\t}\n\n\t\t\tif (this.interactive && this._isInteractive()) {\n\t\t\t\tconst mask = this._getMask(this.image);\n\n\t\t\t\tthis._renderer._ghostLayer.context.drawImage(mask, 0, 0);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic clear(): void {\n\t\tsuper.clear();\n\t\tthis.image = undefined;\n\t\tthis._imageMask = undefined;\n\t}\n\n\tprotected _getMask(image: HTMLImageElement): HTMLCanvasElement {\n\t\tif (this._imageMask === undefined) {\n\t\t\t// TODO should this round ?\n\t\t\tconst width = this.width || image.naturalWidth;\n\t\t\tconst height = this.height || image.naturalHeight;\n\n\t\t\t// We need to create a second canvas because destination-in clears out the entire canvas\n\t\t\tconst canvas = document.createElement(\"canvas\");\n\t\t\tcanvas.width = width;\n\t\t\tcanvas.height = height;\n\n\t\t\tconst context = canvas.getContext(\"2d\")!;\n\n\t\t\tcontext.imageSmoothingEnabled = false;\n\n\t\t\tcontext.fillStyle = this._getColorId();\n\t\t\tcontext.fillRect(0, 0, width, height);\n\n\t\t\tif (!isTainted(image)) {\n\t\t\t\tcontext.globalCompositeOperation = \"destination-in\";\n\t\t\t\tcontext.drawImage(image, 0, 0, width, height);\n\t\t\t}\n\n\t\t\tthis._imageMask = canvas;\n\t\t}\n\n\t\treturn this._imageMask;\n\t}\n\n}\n\n/**\n * @ignore\n */\nexport class CanvasRendererEvent<A> implements IRendererEvent<A> {\n\tpublic id: Id;\n\tpublic simulated: boolean = false;\n\tpublic native: boolean = true;\n\n\tconstructor(public event: A, public originalPoint: IPoint, public point: IPoint, public bbox: DOMRect) {\n\t\tif ($utils.supports(\"touchevents\") && event instanceof Touch) {\n\t\t\tthis.id = event.identifier;\n\n\t\t} else {\n\t\t\tthis.id = null;\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\ninterface Event<Key extends keyof IRendererEvents> {\n\tobject: CanvasDisplayObject;\n\tcontext: unknown;\n\tcallback: (event: IRendererEvents[Key]) => void;\n\tdisposed: boolean;\n}\n\n/**\n * @ignore\n */\ninterface Events<Key extends keyof IRendererEvents> {\n\tdisposer: IDisposer;\n\tcallbacks: Array<Event<Key>>;\n\tdispatching: boolean;\n\tcleanup: boolean;\n}\n\n/**\n * @ignore\n */\nexport class CanvasRenderer extends ArrayDisposer implements IRenderer, IDisposer {\n\tpublic view: HTMLElement = document.createElement(\"div\");\n\tprotected _layerDom: HTMLElement = document.createElement(\"div\");\n\n\tpublic layers: Array<CanvasLayer> = [];\n\tpublic _dirtyLayers: Array<CanvasLayer> = [];\n\tpublic defaultLayer: CanvasLayer = this.getLayer(0);\n\n\tpublic _ghostLayer: GhostLayer = new GhostLayer();\n\n\tprotected _patternCanvas: HTMLCanvasElement = document.createElement(\"canvas\");\n\tprotected _patternContext: CanvasRenderingContext2D = this._patternCanvas.getContext(\"2d\")!;\n\n\tprotected _width: number = 0;\n\tprotected _height: number = 0;\n\n\tprotected _clientWidth: number = 0;\n\tprotected _clientHeight: number = 0;\n\n\tpublic resolution: number;\n\tpublic interactionsEnabled: boolean = true;\n\n\tprotected _listeners: { [key: string]: CounterDisposer } = {};\n\tprotected _events: { [Key in keyof IRendererEvents]?: Events<Key> } = {};\n\n\tprotected _colorId: number = 0;\n\tprotected _colorMap: { [color: string]: CanvasDisplayObject } = {};\n\n\tpublic _forceInteractive: number = 0;\n\tpublic _omitTainted: boolean = false;\n\n\t// TODO this should store the Id as well\n\tpublic _hovering: Set<CanvasDisplayObject> = new Set();\n\tpublic _dragging: Array<{ id: Id, value: CanvasDisplayObject }> = [];\n\tpublic _mousedown: Array<{ id: Id, value: CanvasDisplayObject }> = [];\n\n\tprotected _lastPointerMoveEvent: { events: Array<IPointerEvent>, native: boolean } | undefined;\n\n\tpublic tapToActivate: boolean = false;\n\tpublic tapToActivateTimeout: number = 3000;\n\tpublic _touchActive: boolean = false;\n\tprotected _touchActiveTimeout?: number;\n\n\t/*protected _mouseMoveThrottler: Throttler = new Throttler(() => {\n\t\tthis._dispatchGlobalMousemove(this._lastPointerMoveEvent.event, this._lastPointerMoveEvent.native);\n\t});\n\t*/\n\n\tconstructor(resolution?: number) {\n\t\tsuper();\n\n\t\tif (resolution == null) {\n\t\t\tthis.resolution = window.devicePixelRatio;\n\t\t} else {\n\t\t\tthis.resolution = resolution;\n\t\t}\n\n\t\tthis.view.style.position = \"absolute\";\n\t\tthis.view.appendChild(this._layerDom);\n\n\t\tthis._disposers.push(new Disposer(() => {\n\t\t\t$object.each(this._events, (_key, events) => {\n\t\t\t\tevents.disposer.dispose();\n\t\t\t});\n\n\t\t\t$array.each(this.layers, (layer) => {\n\t\t\t\tclearCanvas(layer.view);\n\n\t\t\t\tif (layer.exportableView) {\n\t\t\t\t\tclearCanvas(layer.exportableView);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tclearCanvas(this._ghostLayer.view);\n\t\t\tclearCanvas(this._patternCanvas);\n\t\t}));\n\n\t\t/*\n\t\tthis._disposers.push($utils.addEventListener(this._ghostLayer.view, \"click\", (originalEvent: MouseEvent) => {\n\t\t\tconst event = this.getEvent(originalEvent);\n\t\t\tconst target = this._getHitTarget(event.originalPoint, event.bbox);\n\t\t\tconsole.debug(target);\n\t\t}));\n\t\t*/\n\n\t\t// Monitor for possible pixel ratio changes (when page is zoomed)\n\t\tthis._disposers.push($utils.onZoom(() => {\n\t\t\tif (resolution == null) {\n\t\t\t\tthis.resolution = window.devicePixelRatio;\n\t\t\t}\n\t\t}));\n\n\t\t// We need this in order top prevent default touch gestures when dragging\n\t\t// draggable elements\n\t\tif ($utils.supports(\"touchevents\")) {\n\t\t\tconst listener = (ev: any) => {\n\t\t\t\tif (this._dragging.length !== 0) {\n\t\t\t\t\t$array.eachContinue(this._dragging, (item) => {\n\t\t\t\t\t\tif (item.value.shouldCancelTouch()) {\n\t\t\t\t\t\t\tev.preventDefault();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// If touch down happends, delay touch out\n\t\t\t\tif (this._touchActiveTimeout) {\n\t\t\t\t\tthis._delayTouchDeactivate();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis._disposers.push($utils.addEventListener(window, \"touchstart\", listener, { passive: false }));\n\t\t\tthis._disposers.push($utils.addEventListener(this.view, \"touchstart\", listener, { passive: false }));\n\n\t\t\tthis._disposers.push($utils.addEventListener(this.view, \"touchmove\", () => {\n\t\t\t\t// If touch is moving, delay touch out\n\t\t\t\tif (this._touchActiveTimeout) {\n\t\t\t\t\tthis._delayTouchDeactivate();\n\t\t\t\t}\n\t\t\t}, { passive: true }));\n\n\t\t\tthis._disposers.push($utils.addEventListener(window, \"click\", (_ev: any) => {\n\t\t\t\tthis._touchActive = false;\n\t\t\t}, { passive: true }));\n\n\t\t\tthis._disposers.push($utils.addEventListener(this.view, \"click\", (_ev: any) => {\n\t\t\t\twindow.setTimeout(() => {\n\t\t\t\t\tthis._touchActive = true;\n\t\t\t\t\tthis._delayTouchDeactivate();\n\t\t\t\t}, 100);\n\t\t\t}, { passive: true }));\n\n\t\t}\n\n\t\t// Prevent scrolling of the window when hovering on \"wheelable\" object\n\t\tif ($utils.supports(\"wheelevents\")) {\n\t\t\tthis._disposers.push($utils.addEventListener(this.view, \"wheel\", (ev) => {\n\t\t\t\tlet prevent = false;\n\t\t\t\tthis._hovering.forEach((obj) => {\n\t\t\t\t\tif (obj.wheelable) {\n\t\t\t\t\t\tprevent = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (prevent) {\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t}\n\t\t\t}, { passive: false }));\n\t\t}\n\n\t}\n\n\tprotected _delayTouchDeactivate(): void {\n\t\tif (this._touchActiveTimeout) {\n\t\t\tclearTimeout(this._touchActiveTimeout);\n\t\t}\n\t\tif (this.tapToActivateTimeout > 0) {\n\t\t\tthis._touchActiveTimeout = window.setTimeout(() => {\n\t\t\t\tthis._touchActive = false;\n\t\t\t}, this.tapToActivateTimeout);\n\t\t}\n\t}\n\n\tpublic get debugGhostView(): boolean {\n\t\treturn !!this._ghostLayer.view.parentNode;\n\t}\n\n\tpublic set debugGhostView(value: boolean) {\n\t\tif (value) {\n\t\t\tif (!this._ghostLayer.view.parentNode) {\n\t\t\t\tthis.view.appendChild(this._ghostLayer.view);\n\t\t\t}\n\n\t\t} else {\n\t\t\tif (this._ghostLayer.view.parentNode) {\n\t\t\t\tthis._ghostLayer.view.parentNode.removeChild(this._ghostLayer.view);\n\t\t\t}\n\t\t}\n\t}\n\n\tcreateLinearGradient(x1: number, y1: number, x2: number, y2: number): CanvasGradient {\n\t\treturn this.defaultLayer.context.createLinearGradient(x1, y1, x2, y2);\n\t}\n\n\tcreateRadialGradient(x1: number, y1: number, radius1: number, x2: number, y2: number, radius2: number): CanvasGradient {\n\t\treturn this.defaultLayer.context.createRadialGradient(x1, y1, radius1, x2, y2, radius2);\n\t}\n\n\tcreatePattern(graphics: CanvasGraphics, background: CanvasGraphics, repetition: string, width: number, height: number): CanvasPattern {\n\t\t// const patternCanvas = document.createElement(\"canvas\");\n\t\t// const patternContext = patternCanvas.getContext(\"2d\")!;\n\t\t// patternCanvas.width = width;\n\t\t// patternCanvas.height = height;\n\t\t// if (fill) {\n\t\t// \tpatternContext.fillStyle = fill.toCSS();\n\t\t// \tpatternContext.fillRect(0, 0, patternCanvas.width, patternCanvas.height);\n\t\t// }\n\n\t\t// const layer = {\n\t\t// \tview: patternCanvas,\n\t\t// \tcontext: patternContext,\n\t\t// \tvisible: true,\n\t\t// \torder: 0,\n\t\t// \twidth: width,\n\t\t// \theight: height,\n\t\t// \tdirty: true\n\t\t// };\n\n\t\t// // patternContext.arc(0, 0, 50, 0, .5 * Math.PI);\n\t\t// // patternContext.stroke();\n\n\t\t// image.targetLayer = layer;\n\t\t// image.render(layer);\n\n\t\t//this._layerDom.appendChild(patternCanvas);\n\n\t\tthis._patternCanvas.width = width;\n\t\tthis._patternCanvas.height = height;\n\n\t\tthis._patternContext.clearRect(0, 0, width, height);\n\n\t\t// patternCanvas.style.width = width * this.resolution + \"px\";\n\t\t// patternCanvas.style.height = height * this.resolution + \"px\";\n\n\t\tbackground.renderDetached(this._patternContext);\n\t\tgraphics.renderDetached(this._patternContext);\n\n\t\treturn this._patternContext.createPattern(this._patternCanvas, repetition)!;\n\t}\n\n\tmakeContainer(): CanvasContainer {\n\t\treturn new CanvasContainer(this);\n\t}\n\n\tmakeGraphics(): CanvasGraphics {\n\t\treturn new CanvasGraphics(this);\n\t}\n\n\tmakeText(text: string, style: CanvasTextStyle): CanvasText {\n\t\treturn new CanvasText(this, text, style);\n\t}\n\n\tmakeTextStyle(): CanvasTextStyle {\n\t\treturn new CanvasTextStyle();\n\t}\n\n\tmakeRadialText(text: string, style: CanvasTextStyle): CanvasRadialText {\n\t\treturn new CanvasRadialText(this, text, style);\n\t}\n\n\tmakePicture(image: HTMLImageElement | undefined): CanvasImage {\n\t\treturn new CanvasImage(this, image);\n\t}\n\n\tresizeLayer(layer: CanvasLayer) {\n\t\tlayer.dirty = true;\n\t\tlayer.resize(this._clientWidth, this._clientHeight, this.resolution);\n\t}\n\n\tresizeGhost() {\n\t\tthis._ghostLayer.resize(this._clientWidth, this._clientHeight, this.resolution);\n\t}\n\n\tresize(width: number, height: number): void {\n\t\tthis._clientWidth = width;\n\t\tthis._clientHeight = height;\n\t\tthis._width = Math.floor(width * this.resolution);\n\t\tthis._height = Math.floor(height * this.resolution);\n\n\t\t$array.each(this.layers, (layer) => {\n\t\t\tif (layer) {\n\t\t\t\tthis.resizeLayer(layer);\n\t\t\t}\n\t\t});\n\n\t\tthis.resizeGhost();\n\n\t\tthis.view.style.width = width + \"px\";\n\t\tthis.view.style.height = height + \"px\";\n\t}\n\n\tprivate createDetachedLayer(willReadFrequently: boolean = false): CanvasLayer {\n\t\tconst view = document.createElement(\"canvas\");\n\t\tconst context = view.getContext(\"2d\", { willReadFrequently: willReadFrequently })! as CanvasRenderingContext2D;\n\n\t\tconst layer = new CanvasLayer(view, context);\n\n\t\tview.style.position = \"absolute\";\n\t\tview.style.top = \"0px\";\n\t\tview.style.left = \"0px\";\n\n\t\treturn layer;\n\t}\n\n\tgetLayerByOrder(order: number): CanvasLayer | undefined {\n\t\tconst layers = this.layers;\n\t\tconst length = layers.length;\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tconst layer = layers[i];\n\t\t\tif (layer.order == order) {\n\t\t\t\treturn layer;\n\t\t\t}\n\t\t}\n\t}\n\n\tgetLayer(order: number, visible: boolean = true): CanvasLayer {\n\t\tlet existingLayer = this.getLayerByOrder(order);\n\t\tif (existingLayer) {\n\t\t\treturn existingLayer;\n\t\t}\n\n\t\tconst layer = this.createDetachedLayer(order == 99);\n\t\tlayer.order = order;\n\t\tlayer.visible = visible;\n\n\t\tif (layer.visible && this._width) {\n\t\t\tlayer.view.width = this._width;\n\t\t\tlayer.view.style.width = this._clientWidth + \"px\";\n\t\t\tlayer.view.height = this._height;\n\t\t\tlayer.view.style.height = this._clientHeight + \"px\";\n\t\t}\n\n\t\tconst layers = this.layers;\n\n\t\tlayers.push(layer);\n\n\t\tlayers.sort((a, b) => {\n\t\t\tif (a.order > b.order) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\telse if (a.order < b.order) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t});\n\n\t\tconst length = layers.length;\n\t\tconst layerIndex = $array.indexOf(layers, layer);\n\t\tlet next;\n\n\t\tfor (let i = layerIndex + 1; i < length; i++) {\n\t\t\tif (layers[i].visible) {\n\t\t\t\tnext = layers[i];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (layer.visible) {\n\t\t\tif (next === undefined) {\n\t\t\t\tthis._layerDom.appendChild(layer.view);\n\n\t\t\t} else {\n\t\t\t\tthis._layerDom.insertBefore(layer.view, next.view);\n\t\t\t}\n\t\t}\n\n\t\treturn layer;\n\t}\n\n\trender(root: CanvasDisplayObject): void {\n\n\t\tthis._dirtyLayers.length = 0;\n\n\t\t$array.each(this.layers, (layer) => {\n\t\t\tif (layer) {\n\t\t\t\tif (layer.dirty && layer.visible) {\n\t\t\t\t\tthis._dirtyLayers.push(layer);\n\t\t\t\t\tlayer.clear();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis._ghostLayer.clear();\n\n\t\troot.render(this.defaultLayer);\n\n\t\tthis._ghostLayer.context.restore();\n\n\t\t//setTimeout(() => {\n\n\t\t// Remove this after the Chrome bug is fixed:\n\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=1279394\n\t\t$array.each(this.layers, (layer) => {\n\t\t\tif (layer) {\n\t\t\t\tconst context = layer.context;\n\t\t\t\tcontext.beginPath();\n\t\t\t\tcontext.moveTo(0, 0);\n\t\t\t\tcontext.stroke();\n\t\t\t}\n\t\t});\n\n\t\t$array.each(this._dirtyLayers, (layer) => {\n\t\t\tlayer.context.restore();\n\t\t\tlayer.dirty = false;\n\t\t});\n\t\t//}, 100)\n\n\t\tif (this._hovering.size && this._lastPointerMoveEvent) {\n\t\t\t//this._mouseMoveThrottler.run();\n\t\t\tconst native = this._lastPointerMoveEvent.native;\n\n\t\t\t$array.each(this._lastPointerMoveEvent.events, (event) => {\n\t\t\t\tthis._dispatchGlobalMousemove(event, native);\n\t\t\t});\n\t\t}\n\t}\n\n\tpaintId(obj: CanvasDisplayObject): string {\n\t\tconst id = distributeId(++this._colorId);\n\t\tconst color = Color.fromHex(id).toCSS();\n\t\tthis._colorMap[color] = obj;\n\t\treturn color;\n\t}\n\n\t_removeObject(obj: CanvasDisplayObject): void {\n\t\tif (obj._colorId !== undefined) {\n\t\t\tdelete this._colorMap[obj._colorId];\n\t\t}\n\t}\n\n\t// protected _identifyObjectByColor(colorId: number): CanvasDisplayObject | undefined {\n\t// \treturn this._colorMap[colorId];\n\t// }\n\n\tprotected _adjustBoundingBox(bbox: DOMRect): DOMRect {\n\t\tconst margin = this._ghostLayer.margin;\n\n\t\treturn new DOMRect(\n\t\t\tbbox.left - margin.left,\n\t\t\tbbox.top - margin.top,\n\t\t\tbbox.width + margin.left + margin.right,\n\t\t\tbbox.height + margin.top + margin.bottom,\n\t\t);\n\t}\n\n\tpublic getEvent<A extends IPointerEvent>(originalEvent: A, adjustPoint: boolean = true): CanvasRendererEvent<A> {\n\t\tconst bbox = this.view.getBoundingClientRect();\n\n\t\tconst originalPoint: IPoint = {\n\t\t\tx: originalEvent.clientX || 0,\n\t\t\ty: originalEvent.clientY || 0,\n\t\t};\n\n\t\tconst point: IPoint = {\n\t\t\tx: originalPoint.x - (adjustPoint ? bbox.left : 0),\n\t\t\ty: originalPoint.y - (adjustPoint ? bbox.top : 0),\n\t\t};\n\n\t\treturn new CanvasRendererEvent(\n\t\t\toriginalEvent,\n\t\t\toriginalPoint,\n\t\t\tpoint,\n\t\t\tthis._adjustBoundingBox(bbox),\n\t\t);\n\t}\n\n\t_getHitTarget(point: IPoint, bbox: DOMRect): CanvasDisplayObject | undefined | false {\n\t\tif (bbox.width === 0 || bbox.height === 0 || point.x < bbox.left || point.x > bbox.right || point.y < bbox.top || point.y > bbox.bottom) {\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tconst pixel = this._ghostLayer.getImageData(point, bbox);\n\n\t\t\tif (pixel.data[0] === 0 && pixel.data[1] === 0 && pixel.data[2] === 0) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst colorId = Color.fromRGB(pixel.data[0], pixel.data[1], pixel.data[2]).toCSS();\n\t\t\tconst hit = this._colorMap[colorId];\n\n\t\t\treturn hit;\n\t\t}\n\t}\n\n\t_withEvents<Key extends keyof IRendererEvents>(key: Key, f: (events: Events<Key>) => void): void {\n\t\tconst events = this._events[key] as Events<Key> | undefined;\n\n\t\tif (events !== undefined) {\n\t\t\tevents.dispatching = true;\n\n\t\t\ttry {\n\t\t\t\tf(events);\n\n\t\t\t} finally {\n\t\t\t\tevents.dispatching = false;\n\n\t\t\t\tif (events.cleanup) {\n\t\t\t\t\tevents.cleanup = false;\n\n\t\t\t\t\t$array.keepIf(events.callbacks, (callback) => {\n\t\t\t\t\t\treturn !callback.disposed;\n\t\t\t\t\t});\n\n\t\t\t\t\tif (events.callbacks.length === 0) {\n\t\t\t\t\t\tevents.disposer.dispose();\n\t\t\t\t\t\tdelete this._events[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t_dispatchEventAll<Key extends keyof IRendererEvents>(key: Key, event: IRendererEvents[Key]): void {\n\t\tif (!this.interactionsEnabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._withEvents(key, (events) => {\n\t\t\t$array.each(events.callbacks, (callback) => {\n\t\t\t\tif (!callback.disposed) {\n\t\t\t\t\tcallback.callback.call(callback.context, event);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t_dispatchEvent<Key extends keyof IRendererEvents>(key: Key, target: CanvasDisplayObject, event: IRendererEvents[Key]): boolean {\n\t\tif (!this.interactionsEnabled) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet dispatched = false;\n\n\t\tthis._withEvents(key, (events) => {\n\t\t\t$array.each(events.callbacks, (callback) => {\n\t\t\t\tif (!callback.disposed && callback.object === target) {\n\t\t\t\t\tcallback.callback.call(callback.context, event);\n\t\t\t\t\tdispatched = true;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn dispatched;\n\t}\n\n\t_dispatchMousedown(originalEvent: IPointerEvent): void {\n\n\t\tconst button = (<PointerEvent>originalEvent).button;\n\t\tif (button != 0 && button != 2 && button != 1 && button !== undefined) {\n\t\t\t// Ignore non-primary mouse buttons\n\t\t\treturn;\n\t\t}\n\n\t\tconst event = this.getEvent(originalEvent);\n\t\tconst target = this._getHitTarget(event.originalPoint, event.bbox);\n\n\n\t\tif (target) {\n\t\t\tconst id = event.id;\n\n\t\t\tlet dragged = false;\n\n\t\t\teachTargets(target, (obj) => {\n\t\t\t\tconst info = { id: id, value: obj };\n\n\t\t\t\tthis._mousedown.push(info);\n\n\t\t\t\tif (!dragged && this._dispatchEvent(\"pointerdown\", obj, event)) {\n\t\t\t\t\t// Only dispatch the first element which matches\n\t\t\t\t\tdragged = true;\n\n\t\t\t\t\tconst has = this._dragging.some((x) => {\n\t\t\t\t\t\treturn x.value === obj && x.id === id;\n\t\t\t\t\t});\n\n\t\t\t\t\tif (!has) {\n\t\t\t\t\t\tthis._dragging.push(info);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t});\n\t\t}\n\t}\n\n\t_dispatchGlobalMousemove(originalEvent: IPointerEvent, native: boolean): void {\n\t\tconst event = this.getEvent(originalEvent);\n\n\t\tconst target = this._getHitTarget(event.originalPoint, event.bbox);\n\t\tevent.native = native;\n\n\t\tif (target) {\n\t\t\tthis._hovering.forEach((obj) => {\n\t\t\t\tif (!obj.contains(target)) {\n\t\t\t\t\tthis._hovering.delete(obj);\n\t\t\t\t\tif (obj.cursorOverStyle) {\n\t\t\t\t\t\t$utils.setStyle(document.body, \"cursor\", obj._replacedCursorStyle!);\n\t\t\t\t\t}\n\t\t\t\t\tthis._dispatchEvent(\"pointerout\", obj, event);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (event.native) {\n\t\t\t\teachTargets(target, (obj) => {\n\t\t\t\t\tif (!this._hovering.has(obj)) {\n\t\t\t\t\t\tthis._hovering.add(obj);\n\t\t\t\t\t\tif (obj.cursorOverStyle) {\n\t\t\t\t\t\t\tobj._replacedCursorStyle = $utils.getStyle(document.body, \"cursor\");\n\t\t\t\t\t\t\t$utils.setStyle(document.body, \"cursor\", obj.cursorOverStyle);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._dispatchEvent(\"pointerover\", obj, event);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t//} else if (target === false) {\n\t\t} else {\n\t\t\tthis._hovering.forEach((obj) => {\n\t\t\t\tif (obj.cursorOverStyle) {\n\t\t\t\t\t$utils.setStyle(document.body, \"cursor\", obj._replacedCursorStyle!);\n\t\t\t\t}\n\t\t\t\tthis._dispatchEvent(\"pointerout\", obj, event);\n\t\t\t});\n\n\t\t\tthis._hovering.clear();\n\t\t}\n\t\tthis._dispatchEventAll(\"globalpointermove\", event);\n\t}\n\n\t_dispatchGlobalMouseup(originalEvent: IPointerEvent, native: boolean): void {\n\t\tconst event = this.getEvent(originalEvent);\n\t\tevent.native = native;\n\t\t//const target = this._getHitTarget(event.originalPoint);\n\t\tthis._dispatchEventAll(\"globalpointerup\", event);\n\t}\n\n\t_dispatchDragMove(originalEvent: IPointerEvent): void {\n\t\tif (this._dragging.length !== 0) {\n\t\t\tconst event = this.getEvent(originalEvent);\n\t\t\tconst id = event.id;\n\n\t\t\tthis._dragging.forEach((obj) => {\n\t\t\t\tif (obj.id === id) {\n\t\t\t\t\tthis._dispatchEvent(\"pointermove\", obj.value, event);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t_dispatchDragEnd(originalEvent: IPointerEvent): void {\n\t\tconst button = (<PointerEvent>originalEvent).button;\n\t\tlet clickevent: \"click\" | \"rightclick\" | \"middleclick\";\n\t\tif (button == 0 || button === undefined) {\n\t\t\tclickevent = \"click\";\n\t\t}\n\t\telse if (button == 2) {\n\t\t\tclickevent = \"rightclick\";\n\t\t}\n\t\telse if (button == 1) {\n\t\t\tclickevent = \"middleclick\";\n\t\t}\n\t\telse {\n\t\t\t// Ignore non-primary mouse buttons\n\t\t\treturn;\n\t\t}\n\n\t\tconst event = this.getEvent(originalEvent);\n\t\tconst id = event.id;\n\n\t\tif (this._mousedown.length !== 0) {\n\t\t\tconst target = this._getHitTarget(event.originalPoint, event.bbox);\n\n\t\t\tif (target) {\n\t\t\t\tthis._mousedown.forEach((obj) => {\n\t\t\t\t\tif (obj.id === id && obj.value.contains(target)) {\n\t\t\t\t\t\tthis._dispatchEvent(clickevent, obj.value, event);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis._mousedown.length = 0;\n\t\t}\n\n\t\tif (this._dragging.length !== 0) {\n\t\t\tthis._dragging.forEach((obj) => {\n\t\t\t\tif (obj.id === id) {\n\t\t\t\t\tthis._dispatchEvent(\"pointerup\", obj.value, event);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis._dragging.length = 0;\n\t\t}\n\t}\n\n\t_dispatchDoubleClick(originalEvent: IPointerEvent): void {\n\t\tconst event = this.getEvent(originalEvent);\n\t\tconst target = this._getHitTarget(event.originalPoint, event.bbox);\n\n\t\tif (target) {\n\t\t\teachTargets(target, (obj) => {\n\t\t\t\tif (this._dispatchEvent(\"dblclick\", obj, event)) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t_dispatchWheel(originalEvent: WheelEvent): void {\n\t\tconst event = this.getEvent(originalEvent);\n\t\tconst target = this._getHitTarget(event.originalPoint, event.bbox);\n\n\t\tif (target) {\n\t\t\teachTargets(target, (obj) => {\n\t\t\t\tif (this._dispatchEvent(\"wheel\", obj, event)) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t_makeSharedEvent(key: string, f: () => IDisposer): IDisposer {\n\t\tif (this._listeners[key] === undefined) {\n\t\t\tconst listener = f();\n\n\t\t\tthis._listeners[key] = new CounterDisposer(() => {\n\t\t\t\tdelete this._listeners[key];\n\t\t\t\tlistener.dispose();\n\t\t\t});\n\t\t}\n\n\t\treturn this._listeners[key].increment();\n\t}\n\n\t_onPointerEvent(name: string, f: (event: Array<IPointerEvent>, native: boolean) => void): IDisposer {\n\t\tlet native = false;\n\t\tlet timer: number | null = null;\n\n\t\tfunction clear() {\n\t\t\ttimer = null;\n\t\t\tnative = false;\n\t\t}\n\n\t\treturn new MultiDisposer([\n\t\t\tnew Disposer(() => {\n\t\t\t\tif (timer !== null) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t}\n\n\t\t\t\tclear();\n\t\t\t}),\n\n\t\t\t$utils.addEventListener(this.view, $utils.getRendererEvent(name), (_) => {\n\t\t\t\tnative = true;\n\n\t\t\t\tif (timer !== null) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t}\n\n\t\t\t\ttimer = window.setTimeout(clear, 0);\n\t\t\t}),\n\n\t\t\tonPointerEvent(window, name, (ev) => {\n\t\t\t\tif (timer !== null) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\ttimer = null;\n\t\t\t\t}\n\n\t\t\t\tf(ev, native);\n\n\t\t\t\tnative = false;\n\t\t\t}),\n\t\t]);\n\t}\n\n\t// This ensures that only a single DOM event is added (e.g. only a single mousemove event listener)\n\t_initEvent(key: keyof IRendererEvents): IDisposer | undefined {\n\t\tswitch (key) {\n\t\t\tcase \"globalpointermove\":\n\t\t\tcase \"pointerover\":\n\t\t\tcase \"pointerout\":\n\t\t\t\treturn this._makeSharedEvent(\"pointermove\", () => {\n\t\t\t\t\tconst listener = (events: Array<IPointerEvent>, native: boolean) => {\n\t\t\t\t\t\tthis._lastPointerMoveEvent = { events, native };\n\n\t\t\t\t\t\t$array.each(events, (event) => {\n\t\t\t\t\t\t\tthis._dispatchGlobalMousemove(event, native);\n\t\t\t\t\t\t});\n\t\t\t\t\t};\n\n\t\t\t\t\treturn new MultiDisposer([\n\t\t\t\t\t\tthis._onPointerEvent(\"pointerdown\", listener),\n\t\t\t\t\t\tthis._onPointerEvent(\"pointermove\", listener),\n\t\t\t\t\t]);\n\t\t\t\t});\n\t\t\tcase \"globalpointerup\":\n\t\t\t\treturn this._makeSharedEvent(\"pointerup\", () => {\n\t\t\t\t\tvar mouseup = this._onPointerEvent(\"pointerup\", (events, native) => {\n\t\t\t\t\t\t$array.each(events, (event) => {\n\t\t\t\t\t\t\tthis._dispatchGlobalMouseup(event, native);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis._lastPointerMoveEvent = { events, native };\n\t\t\t\t\t});\n\n\t\t\t\t\tvar pointercancel = this._onPointerEvent(\"pointercancel\", (events, native) => {\n\t\t\t\t\t\t$array.each(events, (event) => {\n\t\t\t\t\t\t\tthis._dispatchGlobalMouseup(event, native);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis._lastPointerMoveEvent = { events, native };\n\t\t\t\t\t});\n\n\t\t\t\t\treturn new Disposer(() => {\n\t\t\t\t\t\tmouseup.dispose();\n\t\t\t\t\t\tpointercancel.dispose();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\tcase \"click\":\n\t\t\tcase \"rightclick\":\n\t\t\tcase \"middleclick\":\n\t\t\tcase \"pointerdown\":\n\t\t\t/*\n\t\t\t\treturn this._makeSharedEvent(\"pointerdown\", () => {\n\t\t\t\t\treturn this._onPointerEvent(\"pointerdown\", (event, native) => {\n\t\t\t\t\t\tthis._lastPointerMoveEvent = { event, native };\n\t\t\t\t\t\tthis._dispatchMousedown(event)\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t*/\n\t\t\tcase \"pointermove\":\n\t\t\tcase \"pointerup\":\n\t\t\t\treturn this._makeSharedEvent(\"pointerdown\", () => {\n\t\t\t\t\t//const throttler = new Throttler();\n\n\t\t\t\t\tconst mousedown = onPointerEvent(this.view, \"pointerdown\", (events) => {\n\t\t\t\t\t\t$array.each(events, (ev) => {\n\t\t\t\t\t\t\tthis._dispatchMousedown(ev);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\t// TODO handle throttling properly for multitouch\n\t\t\t\t\tconst mousemove = this._onPointerEvent(\"pointermove\", (ev: Array<IPointerEvent>) => {\n\t\t\t\t\t\t//throttler.throttle(() => {\n\t\t\t\t\t\t$array.each(ev, (ev) => {\n\t\t\t\t\t\t\tthis._dispatchDragMove(ev);\n\t\t\t\t\t\t});\n\t\t\t\t\t\t//});\n\t\t\t\t\t});\n\n\t\t\t\t\tconst mouseup = this._onPointerEvent(\"pointerup\", (ev: Array<IPointerEvent>) => {\n\t\t\t\t\t\t$array.each(ev, (ev) => {\n\t\t\t\t\t\t\tthis._dispatchDragEnd(ev);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tconst pointercancel = this._onPointerEvent(\"pointercancel\", (ev: Array<IPointerEvent>) => {\n\t\t\t\t\t\t$array.each(ev, (ev) => {\n\t\t\t\t\t\t\tthis._dispatchDragEnd(ev);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\treturn new Disposer(() => {\n\t\t\t\t\t\tmousedown.dispose();\n\t\t\t\t\t\tmousemove.dispose();\n\t\t\t\t\t\tmouseup.dispose();\n\t\t\t\t\t\tpointercancel.dispose();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\tcase \"dblclick\":\n\t\t\t\treturn this._makeSharedEvent(\"dblclick\", () => {\n\t\t\t\t\treturn this._onPointerEvent(\"dblclick\", (ev) => {\n\t\t\t\t\t\t$array.each(ev, (ev) => {\n\t\t\t\t\t\t\tthis._dispatchDoubleClick(ev);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\tcase \"wheel\":\n\t\t\t\treturn this._makeSharedEvent(\"wheel\", () => {\n\t\t\t\t\treturn $utils.addEventListener(window, $utils.getRendererEvent(\"wheel\"), (event: WheelEvent) => {\n\t\t\t\t\t\tthis._dispatchWheel(event);\n\t\t\t\t\t}, { passive: false });\n\t\t\t\t});\n\t\t}\n\t}\n\n\t_addEvent<C, Key extends keyof IRendererEvents>(object: CanvasDisplayObject, key: Key, callback: (this: C, event: IRendererEvents[Key]) => void, context?: C): IDisposer {\n\t\tlet events: Events<Key> | undefined = this._events[key] as any;\n\n\t\tif (events === undefined) {\n\t\t\tevents = this._events[key] = {\n\t\t\t\tdisposer: this._initEvent(key)!,\n\t\t\t\tcallbacks: [],\n\t\t\t\tdispatching: false,\n\t\t\t\tcleanup: false,\n\t\t\t};\n\t\t}\n\n\t\tconst listener = { object, context, callback, disposed: false };\n\n\t\tevents!.callbacks.push(listener);\n\n\t\treturn new Disposer(() => {\n\t\t\tlistener.disposed = true;\n\n\t\t\tif (events!.dispatching) {\n\t\t\t\tevents!.cleanup = true;\n\n\t\t\t} else {\n\t\t\t\t$array.removeFirst(events!.callbacks, listener);\n\n\t\t\t\tif (events!.callbacks.length === 0) {\n\t\t\t\t\tevents!.disposer.dispose();\n\t\t\t\t\tdelete this._events[key];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic getCanvas(root: CanvasDisplayObject, options?: ICanvasOptions): HTMLCanvasElement {\n\n\t\t// Make sure everything is rendered\n\t\tthis.render(root);\n\n\t\tif (!options) {\n\t\t\toptions = {};\n\t\t}\n\n\t\tlet scale: number = this.resolution;\n\n\t\t// Check if we need to scale\n\t\tif (options.minWidth && (options.minWidth > this._width)) {\n\t\t\tlet minScale = options.minWidth / this._width;\n\t\t\tif (minScale > scale) {\n\t\t\t\tscale = minScale * this.resolution;\n\t\t\t}\n\t\t}\n\n\t\tif (options.minHeight && (options.minHeight > this._height)) {\n\t\t\tlet minScale = options.minHeight / this._height;\n\t\t\tif (minScale > scale) {\n\t\t\t\tscale = minScale * this.resolution;\n\t\t\t}\n\t\t}\n\n\t\tif (options.maxWidth && (options.maxWidth < this._width)) {\n\t\t\tlet maxScale = options.maxWidth / this._width;\n\t\t\tif (maxScale < scale) {\n\t\t\t\tscale = maxScale * this.resolution;\n\t\t\t}\n\t\t}\n\n\t\tif (options.maxHeight && (options.maxHeight > this._height)) {\n\t\t\tlet maxScale = options.maxHeight / this._height;\n\t\t\tif (maxScale < scale) {\n\t\t\t\tscale = maxScale * this.resolution;\n\t\t\t}\n\t\t}\n\n\t\t// Check if we need to compensate for pixel ratio\n\t\tif (options.maintainPixelRatio) {\n\t\t\tscale /= this.resolution;\n\t\t}\n\n\t\t// Init list canvases to remove from DOM after export\n\t\tconst canvases: HTMLCanvasElement[] = [];\n\n\t\t// Set up new canvas for export\n\t\tlet forceRender = false;\n\t\tlet canvasWidth = this._width;\n\t\tlet canvasHeight = this._height;\n\t\tconst canvas = document.createElement(\"canvas\");\n\t\tif (scale != this.resolution) {\n\t\t\tforceRender = true;\n\t\t\tcanvasWidth = this._width * scale / this.resolution;\n\t\t\tcanvasHeight = this._height * scale / this.resolution;\n\t\t}\n\n\t\tcanvas.width = canvasWidth;\n\t\tcanvas.height = canvasHeight;\n\n\t\t// Add to DOM so it inherits CSS\n\t\tcanvas.style.position = \"fixed\";\n\t\tcanvas.style.top = \"-10000px\";\n\t\tthis.view.appendChild(canvas);\n\t\tcanvases.push(canvas);\n\n\t\t// Context\n\t\tconst context = canvas.getContext(\"2d\")!;\n\n\t\tlet width = 0;\n\t\tlet height = 0;\n\t\tlet needRerender = false;\n\n\t\t$array.each(this.layers, (layer) => {\n\t\t\tif (layer && layer.visible) {\n\t\t\t\tif (layer.tainted || forceRender) {\n\t\t\t\t\tneedRerender = true;\n\n\t\t\t\t\tlayer.exportableView = layer.view;\n\t\t\t\t\tlayer.exportableContext = layer.context;\n\n\t\t\t\t\tlayer.view = document.createElement(\"canvas\");\n\n\t\t\t\t\t// Add to DOM so it inherits CSS\n\t\t\t\t\tlayer.view.style.position = \"fixed\";\n\t\t\t\t\tlayer.view.style.top = \"-10000px\";\n\t\t\t\t\tthis.view.appendChild(layer.view);\n\t\t\t\t\tcanvases.push(layer.view);\n\n\t\t\t\t\tlayer.view.width = canvasWidth;\n\t\t\t\t\tlayer.view.height = canvasHeight;\n\n\t\t\t\t\tlayer.context = layer.view.getContext(\"2d\")!;\n\n\t\t\t\t\tlayer.dirty = true;\n\t\t\t\t\tlayer.scale = scale;\n\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (needRerender) {\n\t\t\tthis._omitTainted = true;\n\t\t\tthis.render(root);\n\t\t\tthis._omitTainted = false;\n\t\t}\n\n\t\t$array.each(this.layers, (layer) => {\n\t\t\tif (layer && layer.visible) {\n\n\t\t\t\t// Layer is fine. Just plop it into our target canvas\n\t\t\t\tcontext.drawImage(layer.view, 0, 0);\n\n\t\t\t\t// Restore layer original canvas\n\t\t\t\tif (layer.exportableView) {\n\t\t\t\t\tlayer.view = layer.exportableView;\n\t\t\t\t\tlayer.exportableView = undefined;\n\t\t\t\t}\n\n\t\t\t\tif (layer.exportableContext) {\n\t\t\t\t\tlayer.context = layer.exportableContext;\n\t\t\t\t\tlayer.exportableContext = undefined;\n\t\t\t\t}\n\n\t\t\t\tif (width < layer.view.clientWidth) {\n\t\t\t\t\twidth = layer.view.clientWidth;\n\t\t\t\t}\n\t\t\t\tif (height < layer.view.clientHeight) {\n\t\t\t\t\theight = layer.view.clientHeight;\n\t\t\t\t}\n\n\t\t\t\tlayer.scale = undefined;\n\t\t\t}\n\t\t});\n\n\t\tcanvas.style.width = width + \"px\";\n\t\tcanvas.style.height = height + \"px\";\n\n\t\t$array.each(canvases, (canvas) => {\n\t\t\tcanvas.style.position = \"\";\n\t\t\tcanvas.style.top = \"\";\n\t\t\tthis.view.removeChild(canvas);\n\t\t})\n\n\t\treturn canvas;\n\t}\n\n}\n\n\nclass GhostLayer {\n\tpublic view: HTMLCanvasElement;\n\tpublic context: CanvasRenderingContext2D;\n\tpublic margin: IMargin = {\n\t\tleft: 0,\n\t\tright: 0,\n\t\ttop: 0,\n\t\tbottom: 0,\n\t};\n\n\tprivate _width: number = 0;\n\tprivate _height: number = 0;\n\n\tconstructor() {\n\t\tthis.view = document.createElement(\"canvas\");\n\t\tthis.context = this.view.getContext(\"2d\", { alpha: false, willReadFrequently: true })! as CanvasRenderingContext2D;\n\t\tthis.context.imageSmoothingEnabled = false;\n\n\t\tthis.view.style.position = \"absolute\";\n\t\tthis.view.style.top = \"0px\";\n\t\tthis.view.style.left = \"0px\";\n\t}\n\n\tresize(width: number, height: number, resolution: number) {\n\t\twidth += (this.margin.left + this.margin.right);\n\t\theight += (this.margin.top + this.margin.bottom);\n\t\tthis.view.style.left = -this.margin.left + \"px\";\n\t\tthis.view.style.top = -this.margin.top + \"px\";\n\n\t\tthis._width = Math.floor(width * resolution);\n\t\tthis._height = Math.floor(height * resolution);\n\n\t\tthis.view.width = this._width;\n\t\tthis.view.style.width = width + \"px\";\n\n\t\tthis.view.height = this._height;\n\t\tthis.view.style.height = height + \"px\";\n\t}\n\n\tgetImageData(point: IPoint, bbox: DOMRect): ImageData {\n\t\treturn this.context.getImageData(\n\t\t\t// TODO should this round ?\n\t\t\tMath.round(((point.x - bbox.left) / bbox.width) * this._width),\n\t\t\tMath.round(((point.y - bbox.top) / bbox.height) * this._height),\n\t\t\t1,\n\t\t\t1,\n\t\t);\n\t}\n\n\tsetMargin(layers: Array<CanvasLayer>): void {\n\t\tthis.margin.left = 0;\n\t\tthis.margin.right = 0;\n\t\tthis.margin.top = 0;\n\t\tthis.margin.bottom = 0;\n\n\t\t$array.each(layers, (layer) => {\n\t\t\tif (layer.margin) {\n\t\t\t\tthis.margin.left = Math.max(this.margin.left, layer.margin.left);\n\t\t\t\tthis.margin.right = Math.max(this.margin.right, layer.margin.right);\n\t\t\t\tthis.margin.top = Math.max(this.margin.top, layer.margin.top);\n\t\t\t\tthis.margin.bottom = Math.max(this.margin.bottom, layer.margin.bottom);\n\t\t\t}\n\t\t});\n\t}\n\n\tclear() {\n\t\tthis.context.save();\n\t\tthis.context.fillStyle = '#000';\n\t\tthis.context.fillRect(0, 0, this._width, this._height);\n\t}\n}\n\n\n/**\n * @ignore\n */\nexport class CanvasLayer implements ILayer {\n\tpublic view: HTMLCanvasElement;\n\tpublic context: CanvasRenderingContext2D;\n\tpublic tainted: boolean = true;\n\tpublic margin: IMargin | undefined;\n\tpublic order: number = 0;\n\tpublic visible: boolean = true;\n\tpublic width: number | undefined;\n\tpublic height: number | undefined;\n\tpublic scale: number | undefined;\n\tpublic dirty: boolean = true;\n\tpublic exportableView: HTMLCanvasElement | undefined;\n\tpublic exportableContext: CanvasRenderingContext2D | undefined;\n\n\tprivate _width: number = 0;\n\tprivate _height: number = 0;\n\n\tconstructor(view: HTMLCanvasElement, context: CanvasRenderingContext2D) {\n\t\tthis.view = view;\n\t\tthis.context = context;\n\t}\n\n\tresize(width: number, height: number, resolution: number) {\n\t\tif (this.width != null) {\n\t\t\twidth = this.width;\n\t\t}\n\n\t\tif (this.height != null) {\n\t\t\theight = this.height;\n\t\t}\n\n\t\tif (this.margin) {\n\t\t\twidth += (this.margin.left + this.margin.right);\n\t\t\theight += (this.margin.top + this.margin.bottom);\n\t\t\tthis.view.style.left = -this.margin.left + \"px\";\n\t\t\tthis.view.style.top = -this.margin.top + \"px\";\n\n\t\t} else {\n\t\t\tthis.view.style.left = \"0px\";\n\t\t\tthis.view.style.top = \"0px\";\n\t\t}\n\n\t\tthis._width = Math.floor(width * resolution);\n\t\tthis._height = Math.floor(height * resolution);\n\n\t\tthis.view.width = this._width;\n\t\tthis.view.style.width = width + \"px\";\n\n\t\tthis.view.height = this._height;\n\t\tthis.view.style.height = height + \"px\";\n\t}\n\n\tclear() {\n\t\tthis.context.save();\n\t\tthis.context.clearRect(0, 0, this._width, this._height);\n\t}\n}\n"]}